Merge二次靠泊 records by summing TEU for same ship on same shift
This commit is contained in:
@@ -108,17 +108,38 @@ class DailyLogsDatabase:
|
|||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
|
|
||||||
def insert(self, log: Dict) -> bool:
|
def insert(self, log: Dict) -> bool:
|
||||||
"""插入记录(存在则更新,不存在则插入)"""
|
"""插入记录(存在则累加TEU,不存在则插入)"""
|
||||||
try:
|
try:
|
||||||
cursor = self.conn.cursor()
|
cursor = self.conn.cursor()
|
||||||
|
# 检查是否已存在,如果存在则累加TEU
|
||||||
cursor.execute('''
|
cursor.execute('''
|
||||||
INSERT OR REPLACE INTO daily_handover_logs
|
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)
|
(date, shift, ship_name, teu, efficiency, vehicles, created_at)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
||||||
''', (
|
''', (
|
||||||
log['date'], log['shift'], log['ship_name'],
|
log['date'], log['shift'], log['ship_name'],
|
||||||
log.get('teu'), log.get('efficiency'), log.get('vehicles')
|
log.get('teu'), log.get('efficiency'), log.get('vehicles')
|
||||||
))
|
))
|
||||||
|
|
||||||
self.conn.commit()
|
self.conn.commit()
|
||||||
return True
|
return True
|
||||||
except sqlite3.Error as e:
|
except sqlite3.Error as e:
|
||||||
|
|||||||
@@ -111,8 +111,10 @@ class HandoverLogParser:
|
|||||||
if not ship_match:
|
if not ship_match:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 船名只取纯船名(去掉xx#前缀)
|
# 船名只取纯船名(去掉xx#前缀和二次靠泊等标注)
|
||||||
ship_name = ship_match.group(2)
|
ship_name = ship_match.group(2)
|
||||||
|
# 移除二次靠泊等标注
|
||||||
|
ship_name = re.sub(r'(二次靠泊)|(再次靠泊)|\(二次靠泊\)|\(再次靠泊\)', '', ship_name).strip()
|
||||||
|
|
||||||
vehicles_match = re.search(r'上场车辆数:(\d+)', cleaned)
|
vehicles_match = re.search(r'上场车辆数:(\d+)', cleaned)
|
||||||
teu_eff_match = re.search(
|
teu_eff_match = re.search(
|
||||||
|
|||||||
Reference in New Issue
Block a user