Fix: merge二次靠泊 in parser, skip duplicates in database
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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]):
|
||||
"""解析日期块"""
|
||||
|
||||
Reference in New Issue
Block a user