From 8c2f4e73dd6d5d77d35353c6b4cc58151b732fd9 Mon Sep 17 00:00:00 2001 From: kkfluous Date: Thu, 2 Apr 2026 16:47:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BD=A6=E8=BE=86=E8=BF=BD=E8=B8=AA?= =?UTF-8?q?=E8=A1=A5=E5=85=A8=E6=89=80=E6=9C=89492=E8=BE=86=E8=BD=A6?= =?UTF-8?q?=E7=9A=84=E8=80=83=E6=A0=B8=E7=9B=AE=E6=A0=87=E5=92=8C=E6=9C=88?= =?UTF-8?q?=E5=BA=A6=E5=A5=96=E5=8A=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 通过(归属公司+车型)→考核目标映射,补全109辆无考核记录车辆的考核目标。 含全角/半角括号兼容(现代氢能科技)。 现在492辆车全部有考核目标和月度奖励金额。 Co-Authored-By: Claude Opus 4.6 (1M context) --- calc_engine.py | 10 ++++++++++ excel_writer.py | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/calc_engine.py b/calc_engine.py index 5b43c9f..3568593 100644 --- a/calc_engine.py +++ b/calc_engine.py @@ -169,6 +169,16 @@ def collect_vehicle_payments(G, feb_data, mar_data): for i, r in enumerate(records): r['期数'] = i + 1 return payments, info +# (归属公司+车型) → 考核目标 映射,用于补全无考核记录的车辆 +VEHICLE_TARGET_MAP = { + ('广州开发区交投氢能运营管理有限公司', '4.5吨冷链车'): ('交投190辆4.5T冷链车', 3000, 150), + ('广州开发区交投氢能运营管理有限公司', '4.5吨货车'): ('交投40辆4.5T普货', 3000, 150), + ('羚牛氢能科技(广东)有限公司', '4.5吨冷链车'): ('羚牛136辆4.5T冷链车', 5000, 260), + ('羚牛氢能科技(广东)有限公司', '18吨双飞翼货车'): ('羚牛100辆18T', 6000, 1000), + ('现代氢能科技(广州)有限公司', '4.5吨货车'): ('恒运50辆4.5T普货', 5000, 260), + ('现代氢能科技(广州)有限公司', '4.5吨货车'): ('恒运50辆4.5T普货', 5000, 260), +} + def read_master_vehicles(fp='里程任务考核_Q1汇总.xlsx'): """从现有Q1汇总文件读取全量车辆台账""" wb = openpyxl.load_workbook(fp, data_only=True) diff --git a/excel_writer.py b/excel_writer.py index 233e1be..fd57ef7 100644 --- a/excel_writer.py +++ b/excel_writer.py @@ -351,13 +351,26 @@ def write_vehicle_tracking_sheet(wb, settle_month, G, master_vehicles, vehicle_p headers += ['本月发放明细','累计已发期数','累计已发金额','剩余可发期数'] WH(ws, headers) + from calc_engine import VEHICLE_TARGET_MAP, RULES + rn=2 for mv in master_vehicles: plate=mv['车牌号'] info=vehicle_info.get(plate, {}) pays=vehicle_payments.get(plate, []) + + # 补全缺失的考核目标 + target_name = info.get('考核目标','') + monthly_bonus = info.get('月度奖励',0) + if not target_name: + company = mv.get('归属公司','') + vtype = mv.get('车型确定','') + mapped = VEHICLE_TARGET_MAP.get((company, vtype)) + if mapped: + target_name, _, monthly_bonus = mapped + row=[plate,mv.get('车架号',''),mv.get('归属公司',''),mv.get('车型确定',''), - info.get('考核目标',''),info.get('月度奖励',0) or ''] + target_name or '',monthly_bonus or ''] cum_t=0; cum_a=0 for m in range(1, settle_month+1):