diff --git a/src/database.py b/src/database.py index 1166ad4..e47bd66 100644 --- a/src/database.py +++ b/src/database.py @@ -113,15 +113,13 @@ class DailyLogsDatabase: cursor = self.conn.cursor() # 检查是否已存在 cursor.execute(''' - SELECT id, teu FROM daily_handover_logs + SELECT id 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') - if existing: - # 记录已存在,跳过(不重复添加) + # 记录已存在,跳过 return False else: # 插入新记录 @@ -135,7 +133,6 @@ class DailyLogsDatabase: )) self.conn.commit() return True - except sqlite3.Error as e: print(f"数据库错误: {e}") return False diff --git a/src/parser.py b/src/parser.py index 72372a8..9d420c0 100644 --- a/src/parser.py +++ b/src/parser.py @@ -57,7 +57,7 @@ class HandoverLogParser: text: 日志文本 返回: - 船次日志列表 + 船次日志列表(已合并同日期同班次同船名的记录) """ logs = [] blocks = text.split(self.SEPARATOR) @@ -74,7 +74,34 @@ class HandoverLogParser: date = self.parse_date(date_match.group(1)) self._parse_block(block, date, logs) - return logs + # 合并同日期同班次同船名的记录(累加TEU) + merged = {} + for log in logs: + key = (log.date, log.shift, log.ship_name) + if key not in merged: + merged[key] = ShipLog( + date=log.date, + shift=log.shift, + ship_name=log.ship_name, + teu=log.teu, + efficiency=log.efficiency, + vehicles=log.vehicles + ) + else: + # 累加TEU + if log.teu: + if merged[key].teu is None: + merged[key].teu = log.teu + else: + merged[key].teu += log.teu + # 累加车辆数 + if log.vehicles: + if merged[key].vehicles is None: + merged[key].vehicles = log.vehicles + else: + merged[key].vehicles += log.vehicles + + return list(merged.values()) def _parse_block(self, block: str, date: str, logs: List[ShipLog]): """解析日期块"""