Fix: merge二次靠泊 in parser, skip duplicates in database
This commit is contained in:
@@ -113,15 +113,13 @@ class DailyLogsDatabase:
|
|||||||
cursor = self.conn.cursor()
|
cursor = self.conn.cursor()
|
||||||
# 检查是否已存在
|
# 检查是否已存在
|
||||||
cursor.execute('''
|
cursor.execute('''
|
||||||
SELECT id, teu FROM daily_handover_logs
|
SELECT id FROM daily_handover_logs
|
||||||
WHERE date = ? AND shift = ? AND ship_name = ?
|
WHERE date = ? AND shift = ? AND ship_name = ?
|
||||||
''', (log['date'], log['shift'], log['ship_name']))
|
''', (log['date'], log['shift'], log['ship_name']))
|
||||||
existing = cursor.fetchone()
|
existing = cursor.fetchone()
|
||||||
|
|
||||||
new_teu = log.get('teu')
|
|
||||||
|
|
||||||
if existing:
|
if existing:
|
||||||
# 记录已存在,跳过(不重复添加)
|
# 记录已存在,跳过
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
# 插入新记录
|
# 插入新记录
|
||||||
@@ -135,7 +133,6 @@ class DailyLogsDatabase:
|
|||||||
))
|
))
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
except sqlite3.Error as e:
|
except sqlite3.Error as e:
|
||||||
print(f"数据库错误: {e}")
|
print(f"数据库错误: {e}")
|
||||||
return False
|
return False
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class HandoverLogParser:
|
|||||||
text: 日志文本
|
text: 日志文本
|
||||||
|
|
||||||
返回:
|
返回:
|
||||||
船次日志列表
|
船次日志列表(已合并同日期同班次同船名的记录)
|
||||||
"""
|
"""
|
||||||
logs = []
|
logs = []
|
||||||
blocks = text.split(self.SEPARATOR)
|
blocks = text.split(self.SEPARATOR)
|
||||||
@@ -74,7 +74,34 @@ class HandoverLogParser:
|
|||||||
date = self.parse_date(date_match.group(1))
|
date = self.parse_date(date_match.group(1))
|
||||||
self._parse_block(block, date, logs)
|
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]):
|
def _parse_block(self, block: str, date: str, logs: List[ShipLog]):
|
||||||
"""解析日期块"""
|
"""解析日期块"""
|
||||||
|
|||||||
Reference in New Issue
Block a user