fix(wle): 0 单不再冒充「全部正常」——窗口空时查数据源是否停更 #94
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "yanhui-wle-emptydata-1102"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
目的与范围
修「物流转运异常」页面/钉钉把「数据源没同步」显示成「已发货 0 单,全部正常」的假绿。
现象(业务 2026-11-02 反馈):09:00 那批推的是
已发货 0 单 / 0 个包裹,异常 0 个包裹(0%),业务问「就算没有异常,也不该 0 单」。实际原因(已查库确认,不是口径问题):
jst_order_express_details最后一次灌库jst_Orders11-01send_date单量缺陷:
freshness原本只用「本批窗口内行的query_time」算新鲜度。窗口一行都没有时
snapshotAt是空串 →stale=false、hint=''、coversDeadline=null,于是「上游没同步」与「当天真没发货」在页面和钉钉里完全无法区分,钉钉还会写「全部正常」。
范围:
warehouseLogisticsExceptionService/ 对应钉钉 job / WLE 页面(含导出与统计口径不动)。改动
MAX(query_time),新增freshness.emptyWindow / sourceLastUpdate / sourceAgeMinutes / sourceStale;hint 分三种情况(真停更 / 表新但该日无记录 / 取不到表级时间)给不同文案。
totalPackages === 0不再无脑「全部正常」;⚠️ 物流数据未同步:镜像表最后更新 …(已 N 小时未同步),… 0 单不代表当天没发货… 在物流镜像表里 0 条发货记录(数据源本身正常)… 请到聚水潭核对emptyWindow走 error 红条;发货卡片副标改「数据未同步,见上方红条」。?date=YYYY-MM-DD,但页面从不读该参数,点进去永远显示「今天这批」→ 现按 URL 初始化核验日(历史消息才点得对批次)。
同步与兼容性
packageCount/shippedOrders/ 异常判据 / 剔除口径,只新增字段与提示。notStarted分支的 freshness 也补齐了同名字段保持形状一致。验证
npm --prefix backend run check:505 tests / 503 pass,新增 5 个用例全过:停更 hint、表新但 0 条、有行时不付全表 MAX(性能回归)、推送文案两态。
既有失败 2 个与本任务无关(
cloudDatabaseConfigCache负缓存 TTL、resilientSecretStore的 Windows0600断言)。JSReportReplica):date=2026-11-02→emptyWindow=true、sourceLastUpdate=2026-11-01 07:55:04、sourceAgeMinutes≈1590、hint 正确date=2026-11-01→ 4,390 单 / 9 异常、emptyWindow=false,原「未覆盖核验时刻」提示不变dryRun正文实测:?date=2026-11-02→ 红条 + 副标「数据未同步,见上方红条」,pageerror0;?date=2026-11-01→ 4,390 单 / 9 异常正常出表,URL 参数生效。eslint干净、vite build通过。风险与回退
MAX(query_time)(实测 13.5s,402 万行视图),随主结果进 5 分钟缓存,且只在窗口 0 行时触发(有数据的正常批次零成本,已写用例锁住)。
后续(不在本 PR)