Fix: merge二次靠泊 in parser, skip duplicates in database

This commit is contained in:
2025-12-29 02:37:50 +08:00
parent 5df530a528
commit 8fc58a17b1
2 changed files with 31 additions and 7 deletions

View File

@@ -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]):
"""解析日期块"""