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

仓储物流模块(WM)架构文档

一、模块概述

仓储物流模块(WM)是MES系统中的核心模块,负责管理物料库存、出入库业务、仓库设置等功能。

1.1 核心设计理念

  • 六维库存模型:物料 + 批次 + 仓库 + 库区 + 库位 + 供应商
  • 事务驱动:所有库存变动通过事务流水记录,保证数据可追溯
  • 状态机管理:单据状态流转严格控制,保证业务完整性

二、核心数据模型

2.1 库存台账(mes_wm_material_stock)

库存现有量表,记录每个物料在每个库位的实时库存。

┌─────────────────────────────────────────────────────────────┐
│                     mes_wm_material_stock                    │
├─────────────────────────────────────────────────────────────┤
│  物料维度:itemId(物料) + batchId(批次) + batchCode(批次号)  │
│  位置维度:warehouseId(仓库) + locationId(库区) + areaId(库位)│
│  业务维度:vendorId(供应商) + receiptTime(入库时间)           │
│  数量状态:quantity(数量) + frozen(是否冻结)                  │
└─────────────────────────────────────────────────────────────┘

唯一键(itemId, warehouseId, locationId, areaId, batchId)

2.2 库存事务流水(mes_wm_transaction)

记录每一笔库存增减事件,系统自动生成,只读查询。

┌─────────────────────────────────────────────────────────────┐
│                    mes_wm_transaction                        │
├─────────────────────────────────────────────────────────────┤
│  业务归属:type(事务类型) + bizType(业务类型)                 │
│           bizId(业务单ID) + bizCode(业务单号) + bizLineId(行ID)│
│  物料信息:itemId + quantity(变动数量,正负) + batchId        │
│  位置信息:warehouseId + locationId + areaId                 │
│  时间信息:transactionTime + receiptTime                     │
│  关联信息:materialStockId + relatedTransactionId            │
└─────────────────────────────────────────────────────────────┘

quantity 规则
- 正数 = 入库(库存增加)
- 负数 = 出库(库存减少)

2.3 仓库层级结构

仓库(Warehouse)
  └── 库区(Location)
        └── 库位(Area)

三、业务单据分类

3.1 入库类单据

单据 说明 状态流转 库存影响
采购入库单 采购物料入库 草稿→待上架→待入库→已完成 +库存
到货通知单 采购到货登记 草稿→待入库→已完成 无(生成采购入库单)
生产入库单 生产产品入库 草稿→待审批→待执行→已完成 +库存
杂项入库单 其他原因入库 草稿→待审批→已完成 +库存
外协入库单 外协加工入库 草稿→待审批→待执行→已完成 +库存
销售退货单 客户退货入库 草稿→待审批→待执行→已完成 +库存
生产退料单 生产退回物料 草稿→待审批→待执行→已完成 +库存

3.2 出库类单据

单据 说明 状态流转 库存影响
销售出库单 销售产品出库 草稿→待检测/待拣货→待填写运单→待出库→已完成 -库存
生产领料单 生产领用物料 草稿→待审批→待执行→已完成 -库存
杂项出库单 其他原因出库 草稿→待审批→已完成 -库存
外协发料单 外协加工发料 草稿→待审批→待执行→已完成 -库存
采购退货单 退回供应商 草稿→待审批→待执行→已完成 -库存

3.3 调拨类单据

单据 说明 状态流转 库存影响
转移调拨单 库位间移库 草稿→待确认→待上架→待执行→已完成 原库位-库存,目标库位+库存

3.4 盘点类单据

单据 说明 状态流转 库存影响
盘点计划 制定盘点任务 草稿→已发布→已完成
盘点任务 执行盘点 待执行→盘点中→已完成
盘点结果 盘点差异处理 草稿→待审批→已完成 盘盈+库存,盘亏-库存

四、单据状态流转图

4.1 采购入库单(采购入库)

┌────────┐   submit    ┌────────┐    stock    ┌─────────┐   finish   ┌────────┐
│  草稿  │ ─────────→  │ 待上架 │ ─────────→ │ 待入库  │ ─────────→ │ 已完成 │
│(PREPARE)│            │(APPROVING)│         │(APPROVED)│           │(FINISHED)│
└────────┘             └────────┘            └─────────┘            └────────┘
     │                      │                      │                      │
     │                      │                      │                      │
     └──────────────────────┴──────────────────────┴──────────────────────┘
                                    │
                              cancel│
                                    ↓
                              ┌────────┐
                              │ 已取消 │
                              │(CANCELED)│
                              └────────┘

4.2 销售出库单(销售出库)

                        ┌─────────────┐
                        │   草稿      │
                        │ (PREPARE)   │
                        └──────┬──────┘
                               │ submit
              ┌────────────────┼────────────────┐
              │                │                │
              ↓ (需要OQC)      │                ↓ (不需要OQC)
        ┌───────────┐         │          ┌───────────┐
        │  待检测   │         │          │  待拣货   │
        │(CONFIRMED)│         │          │(APPROVING)│
        └─────┬─────┘         │          └─────┬─────┘
              │ OQC完成       │                │
              └───────────────┘                │
                               │                │ stock
                               ↓                ↓
                        ┌───────────┐    ┌───────────┐
                        │  待拣货   │───→│待填写运单 │
                        │(APPROVING)│    │ (SHIPPING)│
                        └───────────┘    └─────┬─────┘
                                              │ shipping
                                              ↓
                                        ┌───────────┐
                                        │ 待执行出库│
                                        │(APPROVED) │
                                        └─────┬─────┘
                                              │ finish
                                              ↓
                                        ┌───────────┐
                                        │  已完成   │
                                        │(FINISHED) │
                                        └───────────┘

4.3 转移调拨单

┌────────┐  submit   ┌──────────┐           ┌────────┐  stock   ┌────────┐  finish  ┌────────┐
│  草稿  │ ────────→ │ 待确认/  │ ────────→ │ 待上架 │ ──────→ │ 待执行 │ ──────→ │ 已完成 │
│(PREPARE)│          │ 待上架   │           │(APPROVING)│       │(APPROVED)│        │(FINISHED)│
└────────┘           │(UNCONFIRMED/│       └────────┘         └────────┘         └────────┘
                     │ APPROVING)  │
                     └────────────┘
                          ↑
                    (配送模式先待确认)

五、核心服务架构

5.1 服务分层

┌─────────────────────────────────────────────────────────────┐
│                      Controller 层                           │
│  (MesWmItemReceiptController, MesWmProductSalesController)  │
└─────────────────────────────────────────────────────────────┘
                              │
                              ↓
┌─────────────────────────────────────────────────────────────┐
│                      Service 层                              │
│  主单Service:业务逻辑、状态流转                              │
│  行Service:单据行管理                                       │
│  明细Service:单据明细管理                                   │
└─────────────────────────────────────────────────────────────┘
                              │
                              ↓
┌─────────────────────────────────────────────────────────────┐
│                   核心库存服务                               │
│  MesWmTransactionService:事务服务(入库/出库的核心)         │
│  MesWmMaterialStockService:库存台账服务                     │
│  MesWmBatchService:批次服务                                 │
└─────────────────────────────────────────────────────────────┘
                              │
                              ↓
┌─────────────────────────────────────────────────────────────┐
│                      Mapper 层                               │
│  (MesWmTransactionMapper, MesWmMaterialStockMapper)         │
└─────────────────────────────────────────────────────────────┘

5.2 事务服务核心流程

// MesWmTransactionService#createTransaction
public Long createTransaction(MesWmTransactionSaveReqDTO reqDTO) {
    // 1. 获取或创建库存台账记录
    MesWmMaterialStockDO stock = materialStockService.getOrCreateMaterialStock(...);
    
    // 2. 校验库存数量(出库时)
    if (quantity < 0 && checkFlag) {
        validateStockQuantity(stock, quantity);
    }
    
    // 3. 更新库存台账数量
    materialStockService.updateMaterialStockQuantity(stock.getId(), quantity);
    
    // 4. 插入事务流水记录
    MesWmTransactionDO transaction = convertToTransaction(reqDTO, stock);
    transactionMapper.insert(transaction);
    
    return transaction.getId();
}

六、单据结构设计

每种业务单据采用**三表结构**:

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│    主单表     │ 1:n │    行表      │ 1:n │    明细表    │
│  (xxxDO)     │────→│ (xxxLineDO)  │────→│(xxxDetailDO) │
└──────────────┘     └──────────────┘     └──────────────┘
      │                    │                    │
      │                    │                    │
      ↓                    ↓                    ↓
   单据头信息           按物料分组             具体库位明细
   - 单号              - 物料ID              - 库位ID
   - 状态              - 计划数量            - 实际数量
   - 供应商/客户        - 批次信息            - 批次信息

示例:采购入库单

mes_wm_item_receipt(主单)
├── mes_wm_item_receipt_line(行)
│   ├── 物料A - 计划入库100个
│   └── 物料B - 计划入库50个
└── mes_wm_item_receipt_detail(明细)
    ├── 物料A - 库位01 - 60个
    ├── 物料A - 库位02 - 40个
    └── 物料B - 库位01 - 50个

七、与外部模块集成

7.1 ERP集成(采购入库/销售出库)

ERP采购入库单 ──审核──→ WmsStockApi.purchaseInbound()
                              │
                              ↓
                        查找仓库映射(ERP仓库→MES仓库)
                              │
                              ↓
                        查找物料映射(ERP产品barCode→MDM物料barCode)
                              │
                              ↓
                        创建MES库存事务
                              │
                              ↓
                        MES库存增加

7.2 生产模块集成

生产工单 ──完工汇报──→ 创建生产入库单
                              │
                              ↓
                        生产入库单审核通过
                              │
                              ↓
                        MES库存增加(产品入库)

7.3 质检模块集成

销售出库单 ──提交──→ 检查是否需要OQC检验
        │                  │
        │                  ↓ (需要)
        │            创建OQC检验单
        │                  │
        │                  ↓ OQC通过
        │            销售出库单状态流转
        │                  │
        ↓ (不需要)         ↓
   直接待拣货  ←───────────┘

八、关键业务规则

8.1 库存校验规则

  • 出库时必须校验库存是否充足
  • 支持冻结库存(调拨配送模式下冻结源库存)
  • 库位混放规则校验(可配置是否允许物料/批次混放)

8.2 批次管理

  • 入库时自动生成或指定批次号
  • 批次信息跟随库存流转
  • 支持批次追溯

8.3 条码/SN码管理

  • 入库时自动生成条码记录
  • SN码支持批量生成(按批次UUID管理)
  • 条码与库存记录关联

九、数据库表清单

9.1 基础设置

表名 说明
mes_wm_warehouse 仓库
mes_wm_warehouse_location 库区
mes_wm_warehouse_area 库位
mes_wm_batch 批次
mes_wm_barcode 条码
mes_wm_barcode_config 条码配置
mes_wm_sn SN码

9.2 库存核心

表名 说明
mes_wm_material_stock 库存台账(现有量)
mes_wm_transaction 库存事务流水

9.3 入库单据

表名 说明
mes_wm_arrival_notice 到货通知单
mes_wm_arrival_notice_line 到货通知单行
mes_wm_item_receipt 采购入库单
mes_wm_item_receipt_line 采购入库单行
mes_wm_item_receipt_detail 采购入库单明细
mes_wm_product_receipt 生产入库单
mes_wm_misc_receipt 杂项入库单
mes_wm_outsource_receipt 外协入库单
mes_wm_return_sales 销售退货单
mes_wm_return_issue 生产退料单

9.4 出库单据

表名 说明
mes_wm_sales_notice 发货通知单
mes_wm_product_sales 销售出库单
mes_wm_product_issue 生产领料单
mes_wm_misc_issue 杂项出库单
mes_wm_outsource_issue 外协发料单
mes_wm_return_vendor 采购退货单

9.5 调拨盘点

表名 说明
mes_wm_transfer 转移调拨单
mes_wm_stock_taking_plan 盘点计划
mes_wm_stock_taking_task 盘点任务
mes_wm_stock_taking_task_line 盘点任务行
mes_wm_stock_taking_task_result 盘点结果

十、接口权限前缀

模块 权限前缀
仓库设置 mes:wm-warehouse
采购入库 mes:wm-item-receipt
销售出库 mes:wm-product-sales
生产领料 mes:wm-product-issue
生产入库 mes:wm-product-receipt
转移调拨 mes:wm-transfer
库存现有量 mes:wm-material-stock
盘点 mes:wm-stock-taking

十一、关键枚举说明

11.1 通用状态常量

MesOrderStatusConstants:
    PREPARE = 0      // 草稿
    APPROVING = 10   // 待审批/待上架/待拣货
    CONFIRMED = 5    // 待确认/待检测
    APPROVED = 20    // 已审批/待执行
    FINISHED = 30    // 已完成
    CANCELLED = 40   // 已取消

11.2 业务类型常量

MesBizTypeConstants:
    WM_ITEM_RECEIPT_IN = 110    // 采购入库
    WM_TRANSFER_OUT = 111       // 调拨出库
    WM_TRANSFER_IN = 112        // 调拨入库
    WM_PRODUCT_SALES = 118      // 销售出库
    WM_ISSUE = 115              // 生产领料
    WM_PRODUCT_RECPT = 117      // 生产入库
    ...