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

库存移库 - 前端联调方案

涉及页面

  • 库存台账页面(/mes/wm/material-stock)

业务场景

在库存台账页面,用户可以选择一条库存记录,点击"移库"按钮,将该库存从当前库位移动到目标库位。移库操作会生成两条成对的库存事务流水(调拨移出 + 调拨移入),确保库存变动可追溯。

新增 API

库存移库

方法 路径 说明
POST /mes/wm/material-stock/move 库存移库

请求参数:

参数 类型 必填 说明
materialStockId Long 库存记录ID
toWarehouseId Long 目标仓库ID
toLocationId Long 目标库区ID
toAreaId Long 目标库位ID
quantity BigDecimal 移库数量
remark String 备注

请求示例:

{
  "materialStockId": 1024,
  "toWarehouseId": 1,
  "toLocationId": 2,
  "toAreaId": 3,
  "quantity": 100,
  "remark": "库位调整"
}

响应:

{
  "code": 0,
  "msg": "操作成功",
  "data": true
}

前端修改点

1. 库存台账列表页

  • 在操作列添加"移库"按钮
  • 点击后打开移库弹窗

2. 移库弹窗

表单字段:

字段 类型 必填 说明

| 物料编码 | 文本 | - | 只读,从选中行带入 |
| 物料名称 | 文本 | - | 只读,从选中行带入 |
| 批次号 | 文本 | - | 只读,从选中行带入 |
| 当前仓库 | 文本 | - | 只读,从选中行带入 |
| 当前库区 | 文本 | - | 只读,从选中行带入 |
| 当前库位 | 文本 | - | 只读,从选中行带入 |
| 当前数量 | 数字 | - | 只读,从选中行带入 |
| 目标仓库 | 下拉 | 是 | 选择目标仓库 |
| 目标库区 | 下拉 | 是 | 根据目标仓库联动 |
| 目标库位 | 下拉 | 是 | 根据目标库区联动 |
| 移库数量 | 数字 | 是 | 输入移库数量,不能超过当前数量 |
| 备注 | 文本 | 否 | 备注信息 |

联动逻辑:

  1. 选择目标仓库后,加载该仓库下的库区列表
  2. 选择目标库区后,加载该库区下的库位列表

提交逻辑:

  1. 校验移库数量不能超过当前库存数量
  2. 校验移库数量不能超过可用量(当前数量 - 冻结数量 - 占用量)
  3. 调用移库接口
  4. 成功后关闭弹窗,刷新列表

业务规则说明

场景 规则
库存数量校验 移库数量不能超过可用量(在库数量 - 冻结数量 - 占用量)
冻结校验 库存记录已冻结时,不允许移库
库位混放规则 目标库位需满足混放规则(物料混放、批次混放)
同库位移库 源库位和目标库位相同时,不允许移库

库存事务流水

移库操作会生成两条成对的库存事务流水:

字段 调拨移出 调拨移入
type 3 (MOVE_OUT) 4 (MOVE_IN)
bizType 112 (WM_TRANSFER_OUT) 113 (WM_TRANSFER_IN)
bizCode MOVE_xxx MOVE_xxx(相同)
quantity 负数(如 -100) 正数(如 100)
warehouseId 源仓库 目标仓库
locationId 源库区 目标库区
areaId 源库位 目标库位
relatedTransactionId null 移出事务ID

注意事项

  1. 权限要求:需要 mes:wm-material-stock:move 权限
  2. 事务一致性:移库操作在事务中执行,确保出库和入库操作的原子性
  3. 批次保留:移库时批次信息保留,不会改变批次属性
  4. 供应商保留:移库时供应商信息保留