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(