退料明细(detail)的 warehouseId/locationId/areaId 语义变更:
- 变更前:来源仓库(从库存记录带入,即虚拟线边库)
- 变更后:上架目标仓库(退料要放回的实际仓库)
前端传虚拟线边库信息 → 后端入库也入虚拟库 → 实际仓库库存没恢复。
| 字段 | 变更前语义 | 变更后语义 | 说明 |
|---|---|---|---|
materialStockId |
虚拟线边库库存记录 ID | 不变 | 用于从虚拟线边库出库 |
warehouseId |
来源仓库(虚拟库) | 上架目标仓库(实际仓库) | 退料入库的目标仓库 |
locationId |
来源库区 | 上架目标库区 | 退料入库的目标库区 |
areaId |
来源库位 | 上架目标库位 | 退料入库的目标库位 |
后端 createTransactionList 已做兜底:
- 如果 detail 的 warehouseId 仍是虚拟线边库(旧数据/前端未改),会自动通过事务流水反查原始仓库
- 前端改完后,直接使用 detail 的仓库信息作为入库目标,不再走反查
当前逻辑:选择虚拟线边库库存记录后,自动带入该库存记录的 warehouseId/locationId/areaId(虚拟库)
改为:
- materialStockId:仍从虚拟线边库库存记录获取(用于标识从哪个库存出)
- warehouseId/locationId/areaId:**改为让用户选择上架目标库位**(实际仓库的库位),不再自动从库存记录带入
选择库存记录 → 自动带入:itemId, batchId, batchCode, materialStockId
不再带入:warehouseId, locationId, areaId
新增一个库位选择器,让用户选择退料要放回的实际仓库库位:
- 仓库下拉:过滤掉虚拟线边仓库(code = WIP_VIRTUAL_WAREHOUSE)
- 库区下拉:联动仓库
- 库位下拉:联动库区
| 场景 | 从哪带入 | 字段 |
|---|---|---|
| 选择库存记录 | 虚拟线边库库存 | materialStockId, itemId, batchId, batchCode |
| 选择上架库位 | 用户手动选择 | warehouseId, locationId, areaId |
| 默认上架库位 | 领料出库时的原始仓库 | warehouseId, locationId, areaId |
建议:选择库存记录后,自动查询该物料的领料出库记录,将原始出库仓库作为默认上架目标库位,用户可修改。
保存明细的接口不变:
| 方法 | 路径 | 说明 |
|---|---|---|
| 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 |
后端校验已调整:
- ✅ 校验 materialStockId 对应的库存记录存在、物料一致、库存充足
- ❌ 不再校验 materialStockId 的仓库与 warehouseId 一致(因为来源是虚拟库,目标是实际库)
- ✅ 校验上架目标库位的混放规则
| 场景 | 规则 |
|---|---|
| 退料出库 | 从虚拟线边库扣减(checkFlag=false,允许负库存) |
| 退料入库 | 入到用户选择的实际仓库库位 |
| 默认上架库位 | 建议默认填入领料出库时的原始仓库库位 |
| 仓库过滤 | 上架目标仓库下拉应排除虚拟线边仓库 |