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

仓储(WM)批量补码需求说明

本文档整理的是 2026-09-08 确认的本轮批量补码需求包(M1~M5),用于后续开发基线。
前置能力(不在本文范围,已完成):杂项入库/出库/供应商退货三单据 BPM 审批闭环、设备台账联动设备仓自动入库、盘点差异自动核销接线、MDM 物料主数据(含“设备”物料类型/分类/单位)。

1. 背景与目标

当前 WM 仓储已具备单据、库存流水、盘点、设备仓自动入库等能力,但存在以下缺口,本轮一并补齐:

缺口 现状 目标
盘点无复核关口 录入/导入实盘后由“完成盘点”直接核销台账 盘点结果先走 BPM 审批,通过才解冻并核销
盘点靠人工逐期建任务 每次需手工创建任务 方案配置周期,后台定时自动生成任务
条码能力弱 仅支持单一业务编码占位符、无成图/扫码 组合字段、服务端成图、扫码解析
SN 无闭环 仅有 SN 主档,无在库/去向 登记/核销 SN、单件在库/去向查询(轻量闭环)
设备入库无单据 仅“台账创建即自动入设备仓” 独立设备入库单,走创建、审批、完成入库、查询

全局约束:仅后端;不修改前端项目;接口变更只出联调文档;库存创建/数量更新/流水一律经库存事务服务,不直写库存表;BPM 分类与流程定义手工部署;新增表不落 tenant_id;ADD COLUMN 按存在性检查执行。

2. 范围界定

  • :M1 盘点结果审批 BPM;M2 定期盘点自动调度;M3 条码组合/成图/扫码;M4 SN 轻量闭环;M5 独立设备入库单。
  • 不做:盘点“冲销/反核销”;历史已完成任务补核销;库存单据行重构为 SN 明细;前端代码。

3. M1 盘点结果审批 BPM

3.1 业务场景

盘点中录入/导入实盘后,由负责人将盘点结果提交 BPM 审批;审批通过后系统解冻库存并自动核销盘盈/盘亏差异更新台账;审批不通过则允许修改实盘后重新提交。

3.2 状态机(复用现枚举,不新增“已审批”态)

草稿 PREPARE ──开始盘点──▶ 盘点中 APPROVING ──提交结果审批(建BPM)──▶ 盘点中 APPROVING
                                                                  │(processInstanceId 非空=审批中)
盘点中 ──审批通过──▶ 已完成 FINISHED(解冻 + 自动核销差异,同事务)
盘点中 ──审批驳回──▶ 盘点中 APPROVING(清 processInstanceId,可改实盘后重提)
盘点中 ──审批取消──▶ 已取消 CANCELED(解冻)
草稿/盘点中 ──取消──▶ 已取消 CANCELED(解冻)

3.3 业务规则

  • 开始盘点(草稿→盘点中):仅草稿;盘点行非空;开启冻结则冻结盘点行库存。
  • 录入/导入实盘:仅盘点中允许(人工录入、Excel 导入统一口径)。
  • 提交结果审批 前置校验:状态=盘点中;已有 ≥1 条盘点结果;未提交过(processInstanceId 为空,防重复提交)。
  • 审批通过(同一事务、失败整体回滚回盘点中):置已完成 → 若冻结则先解冻 → 逐条盘点结果核销:差异 = 实盘 − 账面;>0 盘盈作入库、<0 盘亏作出库(数量为负)、=0 跳过;以盘点结果回填的库存定位精确核销;生成库存流水 bizType=盘点。
  • 原“完成盘点”公开动作移除,核销改由审批通过事件驱动。
  • 驳回不改任务状态(保持盘点中),仅清流程实例标记,允许修改实盘后重提。

3.4 数据与接口

  • mes_wm_stock_taking_task 增加 process_instance_id;任务查询/详情响应返回该字段(前端据此区分“审批中”与“可提交审批”)。
  • 接口:提交盘点结果审批(单据 id + 流程定义 key)、可审批流程定义列表(分类编码 stock_taking_result_approve)。
  • BPM 监听:解析业务主键=任务 id,校验任务存在且盘点中,按审批结果更新(通过/驳回/取消)。

4. M2 定期盘点自动调度

4.1 业务场景

盘点方案可开启“定期自动生成”:系统按方案配置的周期(cron)自动创建盘点任务,到点即用,无需人工逐期建单。

4.2 业务规则

  • 方案字段:是否自动生成(auto_generate)、生成周期 cron(generate_cron,Quartz 6 段)、上次生成时间(last_generate_time)。
  • 开启自动生成时必须配置合法 cron;未开启则忽略 cron。
  • 启用状态 + 开启自动生成 + 已配置 cron 的方案参与扫描。
  • 后台定时任务周期触发(infra 后台配置 cron,handler=方案生成 Job 的 Bean 名,建议每分钟一次):按各方案“上次生成时间 + cron”判断是否到期,到期才生成。
  • 防重复:生成任务成功后同事务回写上次生成时间;首次扫描仅记录基线时间、不立即生成(从下一周期开始)。
  • 自动生成的任务:沿用方案的类型/盲盘/冻结/动态盘点时间段;名称取方案名;盘点人取系统默认用户;任务编码走“盘点任务编码”自动规则;创建后即按方案生成盘点明细行(草稿态)。
  • 单个方案生成失败不影响其它方案。

4.3 数据与接口

  • mes_wm_stock_taking_plan 增加 auto_generate / generate_cron / last_generate_time;方案新增/修改与查询响应携带。
  • 提供“由方案按周期生成任务”的服务方法,供 Job 调用;Job 本身不做库存/单据业务。

5. M3 条码 / 标签 / 扫码增强

5.1 业务场景

把仓储条码从“单一业务编码”升级为可组合、可成图、可扫码反查,支撑标签打印与 PDA 扫码。

5.2 需求点

  1. 条码内容组合字段:条码内容模板支持多个占位符自由组合(如业务编码 + 物料编码 + 批次 + 库位 + SN 等),配置到条码配置项,生成时按模板渲染真实内容。
  2. 服务端成图 / 打印:MES 模块引入二维码/条码生成库(zxing)在服务端成图;提供打印/预览能力。图片若需留存一律走附件中间表;仅即时预览可用 Base64,不落业务表图片列。
  3. 扫码解析:新增服务端接口,对扫码内容做结构化解析:识别业务编码与其它键值,反查并返回对应业务对象(单据 / 物料 / 批次 / SN / 库位等),供扫码枪与移动端跳转、核验。

5.3 验收要点

  • 组合模板渲染内容正确(含中文/大小写)。
  • 生成图像可被扫码还原,且还原结果与渲染内容一致。
  • 解析接口对未识别内容给出明确错误而非静默。

6. M4 SN 单品库存轻量闭环

6.1 业务场景

对开启序列号管理的物料,要求能登记每件 SN 的出入、查看单件当前在库与去向,并支持盘点按 SN 核对。**单据行不重构为 SN 明细**(保持行级数量管理,SN 作为登记/核销记录闭环)。

6.2 需求点

  1. SN 在库状态与位置mes_wm_sn 补齐在库状态、所在库位等字段(DO 与表字段对齐)。
  2. 流水带 SN:库存事务/流水表增加 snCode 列,记录该笔出入对应的序列号。
  3. 入库登记 SN:按 SN 管理物料的入库事务登记 SN(置为在库、记录库位)。
  4. 出库核销 SN:出库时核销指定在库 SN(置为出库/非在库),与库存事务同记录。
  5. 单件在库/去向查询:按 SN 查当前在库位置、最近去向流水。
  6. 盘点按 SN 核对:按 SN 管理物料的盘点支持 SN 粒度核对(在盘点维度内校验实物 SN 与在库 SN)。
  7. 序列号管理标记贯通:物料“是否序列号管理(isSerialManaged)”需在 MDM API(物料响应/创建 DTO)中贯通,供 MES 各模块判断。

6.3 业务规则

  • 仅“按 SN 管理”的物料登记/核销 SN。
  • 同一 SN 在库唯一;出库核销的 SN 必须处于在库状态。

7. M5 独立设备入库单

7.1 业务场景

“设备台账创建即自动入设备仓”解决设备建档联动;“设备入库单”则作为可追溯、可审批的入库凭证,用于设备由外部进入/正式入仓的业务,按单留痕。

7.2 单据结构

  • 主表:单据编码(自动生成,新增“设备入库单编码”规则)、名称、入库日期、来源/备注、状态、BPM 流程实例编号等。
  • 明细行:设备(台账)→ 自动带入设备物料(itemId);仓库/库区/库位固定设备仓三元组;数量默认 1;同单可多台;备注。

7.3 流程与状态(沿用杂项入库模板)

草稿 PREPARE ──提交审批(建BPM,回写流程编号)──▶ 审批中 APPROVING
审批通过 → 已审批 APPROVED ──完成入库──▶ 已完成 FINISHED
驳回 → 草稿 PREPARE(可改重提)
审批/草稿取消 → 已取消 CANCELED
  • 审批通过进入“可执行入库”,库存动作仅在“完成入库”执行(逐明细行设备仓 IN +1,更新台账与流水,业务类型独立)。

7.4 业务规则

  • 明细仅可选已关联物料(有 itemId)的设备台账。
  • 库位必须属于设备仓体系。
  • 设备编码/物料已有则不允许重复建档(沿用台账约束)。
  • “完成入库”仅已审批状态可执行,且仅执行一次;库存与流水统一走库存事务服务,不直写库存表。
  • 独立 BPM 流程分类与独立库存流水业务类型(用于设备入库单据与设备台账自动入库区分)。

8. 跨单元依赖与实施顺序

M1 盘点结果审批 BPM(改既有盘点任务,含 DB 列/错误码/监听器/端点替换)
  └─▶ M2 定期盘点调度(M1 任务创建/状态机是其下游产物)
M3 条码成图/扫码/组合字段(MES 依赖引入 zxing)
M4 SN 轻量闭环(含 MDM-API 字段贯通)
M5 设备入库单(可复用杂项入库单据骨架)
M6 收尾:全量编译、docs 联调文档、统一端到端冒烟(含 DB 脚本执行、BPM 分类与流程定义手工部署)

9. 待澄清/决策项(实现前需确认)

  • M5 独立设备入库单是否需要与设备台账的“自动入库”叠加(即设备既随台账自动入库,又可单独走入库单),或自动入库收敛为仅随入库单执行。

附:实施状态追踪(供续作基线)

单元 状态 备注
M1 盘点结果审批 BPM 代码完成,编译通过 错误码/DO/RespVO/Mapper/接口与实现/监听器/端点替换已落地;DB 脚本已写待执行
M2 定期盘点调度 部分完成,未编译 方案字段/校验/查询与 Service 已改;任务侧“按方案生成任务”、Job、DB 脚本未做
M3 条码组合/成图/扫码 未开始 待 zxing 引入、模板渲染、解析接口
M4 SN 轻量闭环 未开始 待表字段/登记核销/查询/API 贯通
M5 设备入库单 未开始 待新单据全栈与 BPM
M6 收尾 未开始 全量编译 + docs + 冒烟 + DB/流程部署