fix: MKH-BOM 配件仓位仓名改用 wms_co_id 关联,修正误显示「常州简尚家居有限公司」 #22

Merged
yanhui merged 1 commits from codex/mkh-pack-warehouse-join-0919 into main 2026-09-22 23:58:41 +08:00
Collaborator

目的与范围

修复 MKH-BOM 页「配件仓位」列把仓名显示成 常州简尚家居有限公司 的问题。

根因:rpt.jst_packInventoryInfo.wh_id 与 rpt.jst_warehouseInfo.Id 左连会命中错误的仓档案行;仓名的正确关联列是 wms_co_id(jst_warehouseInfo.wms_co_id)。该表是小时级增量刷新的箱/货位表,只在 MKH-BOM 页的「配件仓位」文本上暴露。

改动范围(3 文件,+13/-10):

  • backend/src/services/mkhBomService.js
    • loadComponentLocations() SQL:p.wh_id AS warehouseId → p.wms_co_id AS warehouseId;ON w.Id = p.wh_id → ON w.wms_co_id = p.wms_co_id;GROUP BY 同步换列
    • formatPackLocation() 头部注释同步更正
  • backend/src/services/modularStockMonitorService.js:仅注释。说明配件库存监控页的仓位表达式只取 bin、不 join 仓名,因此不受该关联列问题影响,避免后来者误改。
  • backend/test/mkhBomService.test.js:测试夹具由占位值 warehouseId: 1 / 常州简尚家居有限公司 换成真实值 15718196 / 简尚-崔桥工厂半成品包装项目仓(原值正好是被修正的那个错误仓名,等于把 bug 当成了期望值)。

同步与兼容性

  • 只改关联列与注释,不改取数口径、不改筛选范围:仍只看 jst_packInventoryInfo、仍用 bin 非空过滤、查不到仍返回「未维护」而不回退其它源。
  • 无表结构变更、无索引变更、无数据迁移;wms_co_id 本就是该表的分仓条件列,执行计划与改前同级。
  • 前端、其它页面、其它服务均不受影响。

验证

  • node scripts/check-syntax.js:通过(151 个 JS 文件)
  • node --test test/*.test.js(backend):345 项 / 344 通过 / 1 失败。唯一失败为 resilientSecretStore.test.js 的权限断言(Windows 实测 0o666 vs 期望 0o600),平台差异、既有失败,与本改动无关
  • node --test test/*.test.mjs(仓库根):7/7 通过
  • 合并演练:origin/main(bbabda5) + 本分支 + PR #20 + PR #21 三方顺序自动合并,零冲突
  • 合并产物静态核查:p.wh_id / w.id = p.wh_id 旧写法残留 0 处

风险与回退

  • 风险低:影响面仅限「配件仓位」列的仓名文本。若 wms_co_id 关联不到仓档案,warehouseName 为空 → 退化为显示 仓库 <id>,不会显示错误仓名,即最坏情况也比现状更安全。
  • 回退:revert 本提交即可,无数据副作用、无需回滚迁移。
## 目的与范围 修复 MKH-BOM 页「配件仓位」列把仓名显示成 **常州简尚家居有限公司** 的问题。 **根因**:`rpt.jst_packInventoryInfo.wh_id` 与 `rpt.jst_warehouseInfo.Id` 左连会命中错误的仓档案行;仓名的正确关联列是 `wms_co_id`(`jst_warehouseInfo.wms_co_id`)。该表是小时级增量刷新的箱/货位表,只在 MKH-BOM 页的「配件仓位」文本上暴露。 **改动范围**(3 文件,+13/-10): - `backend/src/services/mkhBomService.js` - `loadComponentLocations()` SQL:`p.wh_id AS warehouseId` → `p.wms_co_id AS warehouseId`;`ON w.Id = p.wh_id` → `ON w.wms_co_id = p.wms_co_id`;`GROUP BY` 同步换列 - `formatPackLocation()` 头部注释同步更正 - `backend/src/services/modularStockMonitorService.js`:**仅注释**。说明配件库存监控页的仓位表达式只取 `bin`、不 join 仓名,因此不受该关联列问题影响,避免后来者误改。 - `backend/test/mkhBomService.test.js`:测试夹具由占位值 `warehouseId: 1 / 常州简尚家居有限公司` 换成真实值 `15718196 / 简尚-崔桥工厂半成品包装项目仓`(原值正好是被修正的那个错误仓名,等于把 bug 当成了期望值)。 ## 同步与兼容性 - 只改**关联列**与注释,**不改取数口径、不改筛选范围**:仍只看 `jst_packInventoryInfo`、仍用 `bin` 非空过滤、查不到仍返回「未维护」而不回退其它源。 - 无表结构变更、无索引变更、无数据迁移;`wms_co_id` 本就是该表的分仓条件列,执行计划与改前同级。 - 前端、其它页面、其它服务均不受影响。 ## 验证 - `node scripts/check-syntax.js`:通过(151 个 JS 文件) - `node --test test/*.test.js`(backend):345 项 / 344 通过 / 1 失败。唯一失败为 `resilientSecretStore.test.js` 的权限断言(Windows 实测 `0o666` vs 期望 `0o600`),**平台差异、既有失败**,与本改动无关 - `node --test test/*.test.mjs`(仓库根):7/7 通过 - 合并演练:`origin/main`(bbabda5) + 本分支 + PR #20 + PR #21 三方顺序自动合并,**零冲突** - 合并产物静态核查:`p.wh_id` / `w.id = p.wh_id` 旧写法残留 **0 处** ## 风险与回退 - **风险低**:影响面仅限「配件仓位」列的仓名文本。若 `wms_co_id` 关联不到仓档案,`warehouseName` 为空 → 退化为显示 `仓库 <id>`,**不会显示错误仓名**,即最坏情况也比现状更安全。 - **回退**:revert 本提交即可,无数据副作用、无需回滚迁移。
yanhui added 1 commit 2026-09-22 23:55:50 +08:00
根因
- rpt.jst_packInventoryInfo.wh_id **不是** rpt.jst_warehouseInfo.Id:
  全表只有 6 个取值(1/2/3/4/6/7),90% 的行都是 wh_id=1,
  按 `w.Id = p.wh_id` 关联后,727 个配件的仓位仓名被统一显示成「常州简尚家居有限公司」。
- 该表的仓 id 列是自带的 `wms_co_id`:
  09-19 实测 30,236 行 **0 NULL**、14 个仓取值,按 `w.wms_co_id = p.wms_co_id`
  关联即得到正确仓名「简尚-崔桥工厂半成品包装项目仓」。
- 旧结论「该表 wms_co_id 全表 NULL,必须用 wh_id」只对 09-17 的表状态成立
  (当时 85,152 行、只有 3 个箱、bin 全空、与 MKH 配件零交集);
  该表由上游**小时级增量刷新**(业务确认 09-19),09-18 重建后 wms_co_id 已全部有值。

改动
- backend/src/services/mkhBomService.js
  · loadComponentLocations() 的 JOIN 与 GROUP BY:p.wh_id → p.wms_co_id
  · 文件头 ⑤ 与 formatPackLocation() 注释更新为正确关联列,并记录该表的小时级
    增量刷新特性(行级 updateTime 只反映「有变化的行」,不能当表的更新频率;
    行数/箱数/命中数会随上游变化,不要写死)。
- backend/src/services/modularStockMonitorService.js
  · 补注:该页只取 bin、不 join 仓名,不受此关联列问题影响;命中数会随上游变化。
- backend/test/mkhBomService.test.js
  · 仓位格式化用例的 fixture 改回真实仓名,避免继续固化错误仓名。

影响与验证
- 仅影响 MKH-BOM 页「配件仓位」列与导出配件明细的仓名文本;
  A4 打印预览本就会去掉仓名前缀(stripWarehousePrefix),不受影响。
- 配件监控页不 join 仓名,无影响。
- 实测:修正后 15 个真实配件编码输出「简尚-崔桥工厂半成品包装项目仓 · BCP01-01-1」。
- 后端:check-syntax 151 文件通过;node --test 337/338 通过
  (唯一失败为既有环境问题 resilientSecretStore 权限断言,与本改动无关)。
yanhui merged commit 97a93766e8 into main 2026-09-22 23:58:41 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: lunanting/cangku#22
No description provided.