diff --git a/backend/src/services/mkhBomService.js b/backend/src/services/mkhBomService.js index 8c65c40..eda345c 100644 --- a/backend/src/services/mkhBomService.js +++ b/backend/src/services/mkhBomService.js @@ -2020,7 +2020,8 @@ function matchesPackSku(componentCode, packSkuCode) { function formatPackLocation(row) { const warehouseName = toText(row.warehouseName); const warehouseId = toText(row.warehouseId); - // 仓库优先显示名称(wh_id → jst_warehouseInfo.Id → name),取不到时退回 id + // 仓库优先显示名称(wms_co_id → jst_warehouseInfo.wms_co_id → name),取不到时退回 id。 + // ⚠️ 关联列是 wms_co_id 不是 wh_id,见文件头 ⑤(09-19 修正) const warehouse = warehouseName || (warehouseId ? `仓库 ${warehouseId}` : ''); const binGroup = toText(row.binGroup); const bin = toText(row.bin); @@ -2099,15 +2100,15 @@ async function loadComponentLocations(codes = []) { const rows = await cloudDatabase.query( `SELECT p.sku_id AS skuId, p.pack_id AS packId, - p.wh_id AS warehouseId, + p.wms_co_id AS warehouseId, p.bin AS bin, p.bin_group AS binGroup, w.name AS warehouseName, SUM(p.qty) AS qty FROM rpt.jst_packInventoryInfo p WITH (NOLOCK) - LEFT JOIN rpt.jst_warehouseInfo w WITH (NOLOCK) ON w.Id = p.wh_id + LEFT JOIN rpt.jst_warehouseInfo w WITH (NOLOCK) ON w.wms_co_id = p.wms_co_id WHERE ${conditions.join(' OR ')} - GROUP BY p.sku_id, p.pack_id, p.wh_id, p.bin, p.bin_group, w.name + GROUP BY p.sku_id, p.pack_id, p.wms_co_id, p.bin, p.bin_group, w.name HAVING SUM(p.qty) > 0`, params, { requestTimeout: 120000 } diff --git a/backend/src/services/modularStockMonitorService.js b/backend/src/services/modularStockMonitorService.js index c99abae..1718467 100644 --- a/backend/src/services/modularStockMonitorService.js +++ b/backend/src/services/modularStockMonitorService.js @@ -117,7 +117,9 @@ const buildWarningOrderSql = () => ( * 统一的「仓位」表达式(2026-09-18 改源)。 * 旧源 `jst_sku.bin / other_bin` 在目标仓 794 行**恒为空**(页面因此长期显示「未维护」); * 真货位在 `rpt.jst_packInventoryInfo.bin` —— 该表 2026-09-18 10:48 被上游刷新后, - * 目标仓 794 个 SKU **命中 727 个**(实测),如 ZT-8 / BCP01-01-1。 + * 目标仓 794 个 SKU **命中 727 个**(09-19 实测;该表小时级增量刷新,命中数会变)。 + * ⚠️ 只取 bin,**不 join 仓名**,所以不受该表 wh_id / wms_co_id 关联列问题影响(见 + * mkhBomService 文件头 ⑤;那个坑只影响 MKH-BOM 页配件仓位列的仓名文本)。 * · 只取 `qty > 0` 的箱,同 SKU 多箱时取库存最大的那个(列表页只展示主货位) * · 取不到才回退商品档案的 bin / other_bin(目前仍全空,保留兜底不影响结果) * 与 MKH-BOM 页 `mkhBomService.loadComponentLocations()` 同源,区别只在本页取单个主货位。 diff --git a/backend/test/mkhBomService.test.js b/backend/test/mkhBomService.test.js index daa0076..5fe2b89 100644 --- a/backend/test/mkhBomService.test.js +++ b/backend/test/mkhBomService.test.js @@ -1017,8 +1017,8 @@ test('pack inventory location prefers the warehouse name and keeps the box fallb const locations = _private.buildPackLocationMap([ { skuId: 'PART-1-1', - warehouseId: 1, - warehouseName: '常州简尚家居有限公司', + warehouseId: 15718196, + warehouseName: '简尚-崔桥工厂半成品包装项目仓', binGroup: null, bin: '', packId: 'BOX-1', @@ -1026,8 +1026,8 @@ test('pack inventory location prefers the warehouse name and keeps the box fallb }, { skuId: 'PART-1-2', - warehouseId: 1, - warehouseName: '常州简尚家居有限公司', + warehouseId: 15718196, + warehouseName: '简尚-崔桥工厂半成品包装项目仓', binGroup: '成品区', bin: 'A-01', packId: 'BOX-2', @@ -1037,7 +1037,7 @@ test('pack inventory location prefers the warehouse name and keeps the box fallb assert.equal( locations.get('PART-1'), - '常州简尚家居有限公司 · 箱号 BOX-1、常州简尚家居有限公司 · 成品区 / A-01' + '简尚-崔桥工厂半成品包装项目仓 · 箱号 BOX-1、简尚-崔桥工厂半成品包装项目仓 · 成品区 / A-01' ); });