refactor(db_compare): 差缺统计改为应到驱动,以出库日为批次归属日

将未到统计从实到驱动(实到锚点反推批次)改为应到驱动(batch_out_date 归属日直接取应到批次),以吸收应到任务提前 1~2 天提交的扰动(韵达固定 +1、中通偶发 +1)。

- expected_record 新增 out_date / batch_out_date + 索引;入库解析出库时间并聚合批次归属日,支持历史回填

- 新增 compare_site_outdate 应到驱动入口,保留 compare_site_date 实到驱动作对照

- 未到任务 / POST /compare / 全站汇总切换到应到驱动

- 附现状梳理、设计、实现总结三篇文档
This commit is contained in:
Misaka
2026-08-03 22:52:28 +08:00
parent bccf7cd396
commit 36b204abe5
8 changed files with 734 additions and 20 deletions

View File

@@ -265,7 +265,7 @@ class CompareRequest(BaseModel):
@app.post("/compare")
def run_compare(req: CompareRequest):
"""DB 差缺比对:以实到扫描日期为锚点,反推交接批次,展开全量比对。
"""DB 差缺比对应到驱动以批次归属日batch_out_date为锚,展开全量比对。
返回统计指标 + 差缺明细。
"""
# 合法性校验
@@ -284,11 +284,11 @@ def run_compare(req: CompareRequest):
if target_date > today:
raise HTTPException(status_code=400, detail=f"date 不可为未来日期: {req.date}")
result = db_compare.compare_site_date(req.site, req.date)
result = db_compare.compare_site_outdate(req.site, req.date)
if result is None:
raise HTTPException(
status_code=404,
detail=f"{req.site} {req.date}: 当天无实到数据,无法比对",
detail=f"{req.site} {req.date}: 当日无应到批次,无法比对",
)
return {