From 0d7957c9dda8f293e7ed99a2e1643806272db299 Mon Sep 17 00:00:00 2001 From: "qichi.liang" Date: Mon, 29 Dec 2025 01:47:23 +0800 Subject: [PATCH] =?UTF-8?q?Merge=E4=BA=8C=E6=AC=A1=E9=9D=A0=E6=B3=8A=20rec?= =?UTF-8?q?ords=20by=20summing=20TEU=20for=20same=20ship=20on=20same=20shi?= =?UTF-8?q?ft?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database.py | 37 +++++++++++++++++++++++++++++-------- src/parser.py | 4 +++- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/database.py b/src/database.py index 667460a..88ab2e4 100644 --- a/src/database.py +++ b/src/database.py @@ -108,17 +108,38 @@ class DailyLogsDatabase: self.conn.commit() def insert(self, log: Dict) -> bool: - """插入记录(存在则更新,不存在则插入)""" + """插入记录(存在则累加TEU,不存在则插入)""" try: cursor = self.conn.cursor() + # 检查是否已存在,如果存在则累加TEU cursor.execute(''' - INSERT OR REPLACE 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') - )) + SELECT id, teu FROM daily_handover_logs + WHERE date = ? AND shift = ? AND ship_name = ? + ''', (log['date'], log['shift'], log['ship_name'])) + existing = cursor.fetchone() + + 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() return True except sqlite3.Error as e: diff --git a/src/parser.py b/src/parser.py index 3db9b13..72372a8 100644 --- a/src/parser.py +++ b/src/parser.py @@ -111,8 +111,10 @@ class HandoverLogParser: if not ship_match: continue - # 船名只取纯船名(去掉xx#前缀) + # 船名只取纯船名(去掉xx#前缀和二次靠泊等标注) ship_name = ship_match.group(2) + # 移除二次靠泊等标注 + ship_name = re.sub(r'(二次靠泊)|(再次靠泊)|\(二次靠泊\)|\(再次靠泊\)', '', ship_name).strip() vehicles_match = re.search(r'上场车辆数:(\d+)', cleaned) teu_eff_match = re.search(