yanhui
3e02c3e393
feat: 日销口径由近 7 天改为近 15 天(MKH 补货预警 + 模块化库存监控)
业务要求「近7日日销」改「近30天日销」。实测业务库与产品资料库均无 30 天日销,
已实现的最长周期是 pm_stockMonitor.fifteenAvgSale(15 天),经与业务确认改用 15 天。
为什么没有 30 天(2026-09-17 实测,避免重复排查):
- rpt.pm_stockMonitor 只有 threeAvgSale(3天)/sevenAvgSale(7天)/fifteenAvgSale(15天),
且整表只保留 1 天快照(2026-09-16),攒不出 30 天历史
- rpt.dws_sn_sales_full_info_di(stat_date+skuid+goods_count,新鲜到 09-15)
里 MKH 商品 0 个;目标仓 794 个 SKU 命中也是 0
- rpt.dws_order_sales_cost_detail_di 停在 2025-04(历史归档)
- rpt.jst_salesOutboundInfo 只有出库单头,无 SKU 明细;业务库无出库明细表
- rpt.op_BarcodeSalePrice30dDaily 名字带 30d,但只有 salePrice 没有销量
改动:
- backend/src/services/mkhBomService.js
· SALE_WINDOW_DAYS 7 → 15,新增 DAILY_SALE_COLUMN='fifteenAvgSale',
监控快照 SQL 按该常量插值取数(以后改口径只改常量)
· buildReplenishMetrics 入参 sevenAvgSale → avgSale(语义与周期解耦)
· 文件头 ⑦ 补「为什么是 15 天」的完整排查结论;⑦ / ⑩ / ⑪ 实测数字按新口径更新
- backend/src/services/modularStockMonitorService.js
· 取数列与 API 字段名 sevenAvgSale/avgShip7d → fifteenAvgSale/avgShip15d
(字段名同步改,避免名不副实)
- frontend/src/pages/MkhBomData/index.jsx
· 列头与口径说明「近7日」→「近15天」;动态文案兜底 7 → 15
- frontend/src/pages/ModularStockMonitor/index.jsx
· 列头「近7日日均发货量」→「近15天日均发货量」,dataIndex 同步改
· 口径说明补充:可用天数仍沿用 jsUseDays(源系统口径),与日销并非同一时间窗
影响(同一份 09-16 快照,7 天 vs 15 天):
有销商品 114 → 170 周期拉长,更多商品进得了「有销」集合
补货预警 25 → 19 反而变少:15 天日销普遍低于 7 天(近期销量走低),
可用天数 = 库存 ÷ 日销 随之变大,跌破 3 天的变少
缺货 9 → 10
已排产 11 → 13
订单驱动 14 → 8 更多商品自己有日销,不再需要靠订单兜底
配件不足 10 → 12
「预警变少」是口径变化的正常结果,不是 bug。
验证:
- 后端语法检查 151 个文件通过
- mkhBomService + mkhReplenishAlertJob 单测 52/52 通过
- 后端全量 334 tests / 333 pass(唯一失败是 resilientSecretStore 的
Windows 文件权限断言,与本改动无关的环境固有问题)
- 接口实测:total 4223 / warningCount 19 / outOfStockCount 10 /
saleWindowDays 15 / componentShortageCount 12
2026-09-17 14:06:50 +08:00
..
2026-09-17 10:01:13 +08:00
2026-09-15 16:53:12 +08:00
2026-09-15 16:53:12 +08:00
2026-09-12 11:51:44 +08:00
2026-09-17 12:18:32 +08:00
2026-09-12 11:51:44 +08:00
2026-09-17 14:06:50 +08:00
2026-09-17 10:01:13 +08:00