Merge二次靠泊 records by summing TEU for same ship on same shift

This commit is contained in:
2025-12-29 01:47:23 +08:00
parent aeda10c4ed
commit 0d7957c9dd
2 changed files with 32 additions and 9 deletions

View File

@@ -108,17 +108,38 @@ class DailyLogsDatabase:
self.conn.commit() self.conn.commit()
def insert(self, log: Dict) -> bool: def insert(self, log: Dict) -> bool:
"""插入记录(存在则更新,不存在则插入)""" """插入记录(存在则累加TEU,不存在则插入)"""
try: try:
cursor = self.conn.cursor() cursor = self.conn.cursor()
# 检查是否已存在如果存在则累加TEU
cursor.execute(''' cursor.execute('''
INSERT OR REPLACE INTO daily_handover_logs SELECT id, teu FROM daily_handover_logs
(date, shift, ship_name, teu, efficiency, vehicles, created_at) WHERE date = ? AND shift = ? AND ship_name = ?
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP) ''', (log['date'], log['shift'], log['ship_name']))
''', ( existing = cursor.fetchone()
log['date'], log['shift'], log['ship_name'],
log.get('teu'), log.get('efficiency'), log.get('vehicles') new_teu = log.get('teu') or 0
))
if existing:
# 累加TEU
old_teu = existing['teu'] or 0
total_teu = old_teu + new_teu
cursor.execute('''
UPDATE daily_handover_logs
SET teu = ?, vehicles = ?, created_at = CURRENT_TIMESTAMP
WHERE id = ?
''', (total_teu, log.get('vehicles'), existing['id']))
else:
# 插入新记录
cursor.execute('''
INSERT INTO daily_handover_logs
(date, shift, ship_name, teu, efficiency, vehicles, created_at)
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
''', (
log['date'], log['shift'], log['ship_name'],
log.get('teu'), log.get('efficiency'), log.get('vehicles')
))
self.conn.commit() self.conn.commit()
return True return True
except sqlite3.Error as e: except sqlite3.Error as e:

View File

@@ -111,8 +111,10 @@ class HandoverLogParser:
if not ship_match: if not ship_match:
continue continue
# 船名只取纯船名去掉xx#前缀) # 船名只取纯船名去掉xx#前缀和二次靠泊等标注
ship_name = ship_match.group(2) ship_name = ship_match.group(2)
# 移除二次靠泊等标注
ship_name = re.sub(r'(二次靠泊)|(再次靠泊)|\(二次靠泊\)|\(再次靠泊\)', '', ship_name).strip()
vehicles_match = re.search(r'上场车辆数:(\d+)', cleaned) vehicles_match = re.search(r'上场车辆数:(\d+)', cleaned)
teu_eff_match = re.search( teu_eff_match = re.search(