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

销售出库流程数据带入与查询方案

一、整体流程

┌─────────────┐    ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  销售订单   │───>│ 发货通知单  │───>│ 销售出库单  │───>│  出库完成   │
│ (ERP模块)   │    │  (MES模块)  │    │  (MES模块)  │    │  状态回写   │
└─────────────┘    └─────────────┘    └─────────────┘    └─────────────┘
       │                  │                  │                  │
       ▼                  ▼                  ▼                  ▼
  出库状态同步      出库状态同步       执行出库           状态回写上游

二、单据层级结构

1. 发货通知单(mes_wm_sales_notice)

层级 表名 说明
主表 mes_wm_sales_notice 发货通知单基本信息
行表 mes_wm_sales_notice_line 按物料维度的发货明细

2. 销售出库单(mes_wm_product_sales)

层级 表名 说明
主表 mes_wm_product_sales 出库单基本信息
行表 mes_wm_product_sales_line 按物料/批次维度的出库行
明细表 mes_wm_product_sales_detail 拣货明细,具体仓库/库区/库位

三、上下游数据带入规则

1. 销售订单 → 发货通知单

主表带入:

销售订单字段 发货通知单字段 说明
id saleOrderId 销售订单ID
no saleOrderCode 销售订单号
customerId clientId 客户ID

行表带入:

销售订单明细字段 发货通知单行字段 说明
id saleOrderItemId 销售订单明细ID
productId itemId 物料ID
count quantity 发货数量

API 调用:
- ErpSaleOrderApi.getSaleOrder(saleOrderId) - 获取销售订单信息
- ErpSaleOrderApi.getSaleOrderItemList(saleOrderId) - 获取销售订单明细列表

2. 发货通知单 → 销售出库单

主表带入:

发货通知单字段 销售出库单字段 说明
id noticeId 发货通知单ID
clientId clientId 客户ID
saleOrderId saleOrderId 销售订单ID
saleOrderCode salesOrderCode 销售订单号
salesDate salesDate 出库日期
recipientName contactName 收货人 → 联系人
recipientTelephone contactTelephone 联系电话
recipientAddress contactAddress 收货地址

行表带入:

发货通知单行字段 销售出库单行字段 说明
id noticeLineId 发货通知单行ID
saleOrderItemId saleOrderItemId 销售订单明细ID
itemId itemId 物料ID
quantity quantity 出库数量
batchId batchId 批次ID
batchCode batchCode 批次号
oqcCheckFlag oqcCheckFlag 是否检验

注意:
- 销售出库单明细表(拣货信息)需要手动添加
- 一个发货通知单可以生成多个销售出库单(部分出库场景)

四、状态同步机制

1. 出库完成时的状态回写

触发时机: 销售出库单执行出库(finishProductSales)

回写流程:

销售出库单行.noticeLineId → 发货通知单行.outCount(累加)
                                ↓
                        计算发货通知单.outStatus
                                ↓
                    全部出库时 → 发货通知单.status = 已完成
                                ↓
销售出库单行.saleOrderItemId → ERP销售订单明细.outCount(累加)
                                ↓
                        计算ERP销售订单.outStatus

2. 出库状态枚举

名称 说明
0 未出库 所有行的 outCount = 0
1 部分出库 部分行已出库,或部分数量已出库
2 全部出库 所有行的 outCount >= quantity

五、关联信息查询

1. 发货通知单查询时

需要查询的关联数据:

关联对象 API/方法 用途
客户信息 CrmCustomerApi.getCustomerMap(clientIds) 显示客户名称
销售订单 ErpSaleOrderApi.getSaleOrder(saleOrderId) 显示订单信息

2. 销售出库单查询时

需要查询的关联数据:

关联对象 API/方法 用途
客户信息 CrmCustomerApi.getCustomerMap(clientIds) 显示客户名称
发货通知单 SalesNoticeService.getSalesNoticeMap(noticeIds) 显示通知单编码
物料信息 MesMdItemService.getItemMap(itemIds) 显示物料编码、名称、规格型号
批次信息 MesWmBatchService.getBatchMap(batchIds) 显示批次号、生产日期
仓库信息 MesWmWarehouseService.getWarehouseMap(warehouseIds) 显示仓库名称
库区信息 MesWmWarehouseLocationService.getLocationMap(locationIds) 显示库区名称
库位信息 MesWmWarehouseAreaService.getAreaMap(areaIds) 显示库位名称

3. 物料信息查询 API

// 获取物料基本信息
MesMdItemDO item = itemService.getItem(itemId);

// 批量获取物料信息
Map<Long, MesMdItemDO> itemMap = itemService.getItemMap(itemIds);

// 校验物料存在且启用
itemService.validateItemExistsAndEnable(itemId);

物料关键信息:

字段 说明
id 物料ID
code 物料编码
name 物料名称
spec 规格型号
unitId 主单位ID
unitCode 主单位编码
batchCode 是否批次管理
qualityFlag 是否质检

六、API 接口清单

1. 发货通知单 API

方法 路径 说明
POST /mes/wm/sales-notice/create 创建发货通知单
PUT /mes/wm/sales-notice/update 修改发货通知单
DELETE /mes/wm/sales-notice/delete 删除发货通知单
GET /mes/wm/sales-notice/get 获取发货通知单详情
GET /mes/wm/sales-notice/page 分页查询发货通知单
PUT /mes/wm/sales-notice/submit 提交发货通知单
POST /mes/wm/sales-notice/generate-from-sale-order 从销售订单生成
POST /mes/wm/sales-notice/generate-product-sales 生成销售出库单

2. 销售出库单 API

方法 路径 说明
POST /mes/wm/product-sales/create 创建销售出库单
PUT /mes/wm/product-sales/update 修改销售出库单
DELETE /mes/wm/product-sales/delete 删除销售出库单
GET /mes/wm/product-sales/get 获取销售出库单详情
GET /mes/wm/product-sales/page 分页查询销售出库单
PUT /mes/wm/product-sales/submit 提交销售出库单
PUT /mes/wm/product-sales/stock 执行拣货
PUT /mes/wm/product-sales/shipping 填写运单
PUT /mes/wm/product-sales/finish 执行出库
PUT /mes/wm/product-sales/cancel 取消销售出库单

七、前端展示字段

1. 发货通知单列表

字段 来源 说明
code mes_wm_sales_notice 通知单编码
name mes_wm_sales_notice 通知单名称
clientName crm_customer 客户名称(关联查询)
saleOrderCode mes_wm_sales_notice 销售订单号
salesDate mes_wm_sales_notice 发货日期
status mes_wm_sales_notice 单据状态
outStatus mes_wm_sales_notice 出库状态

2. 发货通知单行列表

字段 来源 说明
itemCode mes_md_item 物料编码(关联查询)
itemName mes_md_item 物料名称(关联查询)
itemSpec mes_md_item 规格型号(关联查询)
batchCode mes_wm_sales_notice_line 批次号
quantity mes_wm_sales_notice_line 发货数量
outCount mes_wm_sales_notice_line 已出库数量
outProgress 计算 出库进度 = outCount / quantity
oqcCheckFlag mes_wm_sales_notice_line 是否检验

3. 销售出库单列表

字段 来源 说明
code mes_wm_product_sales 出库单编码
name mes_wm_product_sales 出库单名称
clientName crm_customer 客户名称(关联查询)
noticeCode mes_wm_sales_notice 通知单编码(关联查询)
salesOrderCode mes_wm_product_sales 销售订单号
salesDate mes_wm_product_sales 出库日期
contactName mes_wm_product_sales 联系人
contactTelephone mes_wm_product_sales 联系电话
status mes_wm_product_sales 单据状态

4. 销售出库单行列表

字段 来源 说明
itemCode mes_md_item 物料编码(关联查询)
itemName mes_md_item 物料名称(关联查询)
batchCode mes_wm_product_sales_line 批次号
quantity mes_wm_product_sales_line 出库数量
oqcCheckFlag mes_wm_product_sales_line 是否检验
qualityStatus mes_wm_product_sales_line 质量状态

5. 销售出库明细列表(拣货信息)

字段 来源 说明
itemCode mes_md_item 物料编码(关联查询)
batchCode mes_wm_product_sales_detail 批次号
quantity mes_wm_product_sales_detail 拣货数量
warehouseName mes_wm_warehouse 仓库名称(关联查询)
locationName mes_wm_warehouse_location 库区名称(关联查询)
areaName mes_wm_warehouse_area 库位名称(关联查询)

八、业务规则

1. 生成规则

场景 规则
发货通知单生成条件 销售订单状态为"已审核"
销售出库单生成条件 发货通知单状态为"待出库"
生成后状态 均为"草稿"状态,需要提交后才能流转

2. 提交校验

单据 校验规则
发货通知单 至少有一条行记录
销售出库单 至少有一条行记录,每行出库数量 > 0

3. 出库流程

草稿 → 提交 → 待拣货 → 拣货 → 待填写运单 → 填写运单 → 待出库 → 执行出库 → 已完成
              ↑                                                    ↓
              └──────────── 如果需要OQC检验 ←──────────────────────┘
                               草稿 → 提交 → 待检测 → OQC检验完成 → 待拣货

4. 状态回写规则

触发动作 回写对象 回写内容
执行出库 发货通知单行 outCount += 实际出库数量
执行出库 发货通知单 outStatus = 计算结果
执行出库 发货通知单 如果 outStatus=全部出库,则 status=已完成
执行出库 ERP销售订单明细 outCount += 实际出库数量
执行出库 ERP销售订单 outStatus = 计算结果