编辑 | blame | 历史 | 原始文档

生产退料 - 前端联调方案

问题背景

退料明细(detail)的 warehouseId/locationId/areaId 语义变更:
- 变更前:来源仓库(从库存记录带入,即虚拟线边库)
- 变更后:上架目标仓库(退料要放回的实际仓库)

前端传虚拟线边库信息 → 后端入库也入虚拟库 → 实际仓库库存没恢复。

涉及页面

  • 生产退料单 - 明细新增/编辑弹窗
  • 生产退料单 - 上架操作页面

核心变更

退料明细的仓库字段语义

字段 变更前语义 变更后语义 说明
materialStockId 虚拟线边库库存记录 ID 不变 用于从虚拟线边库出库
warehouseId 来源仓库(虚拟库) 上架目标仓库(实际仓库) 退料入库的目标仓库
locationId 来源库区 上架目标库区 退料入库的目标库区
areaId 来源库位 上架目标库位 退料入库的目标库位

后端已做的兼容

后端 createTransactionList 已做兜底:
- 如果 detail 的 warehouseId 仍是虚拟线边库(旧数据/前端未改),会自动通过事务流水反查原始仓库
- 前端改完后,直接使用 detail 的仓库信息作为入库目标,不再走反查

前端修改点

1. 明细新增/编辑弹窗 - 仓库选择逻辑

当前逻辑:选择虚拟线边库库存记录后,自动带入该库存记录的 warehouseId/locationId/areaId(虚拟库)

改为
- materialStockId:仍从虚拟线边库库存记录获取(用于标识从哪个库存出)
- warehouseId/locationId/areaId:**改为让用户选择上架目标库位**(实际仓库的库位),不再自动从库存记录带入

选择库存记录时

选择库存记录 → 自动带入:itemId, batchId, batchCode, materialStockId
                不再带入:warehouseId, locationId, areaId

上架目标库位选择

新增一个库位选择器,让用户选择退料要放回的实际仓库库位:
- 仓库下拉:过滤掉虚拟线边仓库(code = WIP_VIRTUAL_WAREHOUSE
- 库区下拉:联动仓库
- 库位下拉:联动库区

2. 数据带入说明

场景 从哪带入 字段
选择库存记录 虚拟线边库库存 materialStockId, itemId, batchId, batchCode
选择上架库位 用户手动选择 warehouseId, locationId, areaId
默认上架库位 领料出库时的原始仓库 warehouseId, locationId, areaId

建议:选择库存记录后,自动查询该物料的领料出库记录,将原始出库仓库作为默认上架目标库位,用户可修改。

3. API 说明

保存明细的接口不变:

方法 路径 说明
POST /mes/wm-return-issue-detail/create 新增明细
PUT /mes/wm-return-issue-detail/update 修改明细

请求参数(同之前,但语义变更):

参数 类型 必填 说明
materialStockId Long 虚拟线边库库存记录 ID(来源)
warehouseId Long 上架目标仓库 ID(不再是来源仓库)
locationId Long 上架目标库区 ID
areaId Long 上架目标库位 ID

4. 后端校验变更

后端校验已调整:
- ✅ 校验 materialStockId 对应的库存记录存在、物料一致、库存充足
- ❌ 不再校验 materialStockId 的仓库与 warehouseId 一致(因为来源是虚拟库,目标是实际库)
- ✅ 校验上架目标库位的混放规则

业务规则说明

场景 规则
退料出库 从虚拟线边库扣减(checkFlag=false,允许负库存)
退料入库 入到用户选择的实际仓库库位
默认上架库位 建议默认填入领料出库时的原始仓库库位
仓库过滤 上架目标仓库下拉应排除虚拟线边仓库

注意事项

  • 后端已做兼容:如果前端暂时不改,旧数据(warehouseId=虚拟库)仍能通过事务流水反查原始仓库,不会报错
  • 前端改完后,新的退料单 detail 应传实际仓库的库位,逻辑更清晰
  • 已存在的旧退料数据不受影响(反查兜底)