# 采购入库流程优化 - 前端联调方案 ## 业务流程概述 优化后的采购入库流程: ``` ERP采购订单 -> MES到货通知 -> MES采购入库 -> BPM审批 -> 入库成功 ``` 核心改进:**每一步自动带入上游数据,物料统一使用MDM模块数据,减少手动输入**。 --- ## 涉及页面 - 到货通知列表页(`/mes/wm/arrival-notice`) - 到货通知新增/编辑弹窗 - 采购入库列表页(`/mes/wm/item-receipt`) - 采购入库新增/编辑弹窗 - 采购订单选择器弹窗(新增组件) - 到货通知选择器弹窗(新增组件) --- ## 数据带入规则 ### 1. 采购订单 -> 到货通知 | 目标字段 | 数据来源 | 自动带入 | 说明 | |----------|----------|----------|------| | 供应商 | 采购订单.supplierId | ✅ | 自动填充,不可修改 | | 采购订单编码 | 采购订单.no | ✅ | 显示用,不可修改 | | 采购订单ID | 采购订单.id | ✅ | 关联字段 | ### 2. 采购订单行 -> 到货通知行 | 目标字段 | 数据来源 | 自动带入 | 说明 | |----------|----------|----------|------| | 采购订单行ID | 采购订单行.id | ✅ | 关联字段,用于追溯 | | 物料编码 | ERP产品编码映射MDM物料 | ⚠️ | 需用户选择映射关系 | | 到货数量 | 订购数量 - 已入库数量 | ✅ | 可修改 | | 是否需检验 | 默认false | ✅ | 可修改 | ### 3. 到货通知 -> 采购入库 | 目标字段 | 数据来源 | 自动带入 | 说明 | |----------|----------|----------|------| | 供应商 | 到货通知.vendorId | ✅ | 自动填充,不可修改 | | 到货通知编码 | 到货通知.code | ✅ | 显示用 | | 采购订单编码 | 到货通知.purchaseOrderCode | ✅ | 显示用 | ### 4. 到货通知行 -> 采购入库行 | 目标字段 | 数据来源 | 自动带入 | 说明 | |----------|----------|----------|------| | 物料ID | 到货通知行.itemId | ✅ | 不可修改 | | 到货通知行ID | 到货通知行.id | ✅ | 关联字段 | | 采购订单行ID | 到货通知行.purchaseOrderItemId | ✅ | 关联字段 | | 入库数量 | 到货通知行.qualifiedQuantity | ✅ | 可修改 | | 批次信息 | 自动生成 | ✅ | 根据批次规则 | --- ## 新增 API 接口 ### 到货通知模块 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/mes/wm/arrival-notice/generate-from-purchase-order?purchaseOrderId={id}` | 根据采购订单生成到货通知单 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | purchaseOrderId | Long | 是 | ERP采购订单编号 | **响应:** `{ "code": 200, "data": 123, "msg": "操作成功" }` (data为生成的到货通知单编号) ### 采购入库模块 | 方法 | 路径 | 说明 | |------|------|------| | POST | `/mes/wm/item-receipt/generate-from-arrival-notice?arrivalNoticeId={id}` | 根据到货通知单生成采购入库单 | | PUT | `/mes/wm/item-receipt/submit-approval?id={id}&processDefinitionKey={key}` | 提交采购入库单审批 | **请求参数(generate-from-arrival-notice):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | arrivalNoticeId | Long | 是 | 到货通知单编号 | **请求参数(submit-approval):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 采购入库单编号 | | processDefinitionKey | String | 是 | BPM流程定义Key | --- ## 前端实现要点 ### 1. 到货通知页面改造 #### 1.1 新增"从采购订单生成"按钮 ```html 从采购订单生成 ``` #### 1.2 采购订单选择器弹窗 - 调用 ERP 接口获取已审核状态的采购订单列表 - 显示字段:订单号、供应商名称、订单日期、总金额 - 选择后调用 `/mes/wm/arrival-notice/generate-from-purchase-order` 接口 #### 1.3 数据获取时机 ``` 用户点击"从采购订单生成" -> 弹出采购订单选择器 -> 选择订单 -> 调用 generate-from-purchase-order API -> 跳转到到货通知编辑页(ID为返回值) -> 显示已带入的数据 ``` #### 1.4 字段显示规则 - 自动带入的字段显示为**禁用状态**(灰色背景) - 物料选择器仍保留,允许用户补充物料映射关系 ### 2. 采购入库页面改造 #### 2.1 新增"从到货通知生成"按钮 ```html 从到货通知生成 ``` #### 2.2 到货通知选择器弹窗 - 调用 MES 接口获取状态为"待入库"的到货通知单列表 - 显示字段:通知单号、供应商名称、到货日期、状态 - 选择后调用 `/mes/wm/item-receipt/generate-from-arrival-notice` 接口 #### 2.3 数据获取时机 ``` 用户点击"从到货通知生成" -> 弹出到货通知选择器 -> 选择通知单 -> 调用 generate-from-arrival-notice API -> 跳转到采购入库编辑页(ID为返回值) -> 显示已带入的数据 ``` #### 2.4 BPM审批流程 - 状态为"草稿"时显示"提交审批"按钮 - 点击后弹出流程选择器(复用现有BPM流程选择组件) - 选择流程后调用 `submit-approval` API - 状态变为"审批中",禁止编辑 ### 3. 状态流转图 #### 到货通知状态 ``` 草稿(0) --提交--> 待质检(2) --IQC完成--> 待入库(3) --入库完成--> 已完成(4) \ -> 待入库(3) [无需检验] ``` #### 采购入库状态(新增BPM审批) ``` 草稿(0) --提交审批--> 审批中(2) --审批通过--> 待上架(3) --上架--> 待入库(4) --入库--> 已完成(5) \ -> 审批拒绝 -> 草稿(0) [可重新提交] ``` --- ## 注意事项 ### 数据带入强调 1. **物料信息必须从MDM模块获取**,不允许手动输入物料编码/名称 2. **采购订单行关联**:到货通知行必须关联采购订单行,确保数据可追溯 3. **入库数量校验**:入库数量不能超过到货通知行的合格数量 ### 前端校验规则 1. 从采购订单生成到货通知时,校验采购订单状态必须为"已审核" 2. 从到货通知生成采购入库时,校验到货通知状态必须为"待入库" 3. 提交审批时,校验入库单状态必须为"草稿",且至少有一条入库行 ### 错误处理 | 错误码 | 说明 | 前端提示 | |--------|------|----------| | 1040705007 | 采购订单不存在 | "所选采购订单不存在,请刷新后重试" | | 1040705008 | 采购订单无明细数据 | "该采购订单没有明细数据" | | WM_ARRIVAL_NOTICE_NO_LINE | 到货通知无行数据 | "该到货通知没有明细数据" | --- ## 后端修改文件清单 ### 数据库变更 - `sql/mysql/mes_purchase_receipt_enhance.sql` ### ERP API 扩展 - `yudao-module-erp-api/.../ErpPurchaseOrderApi.java` - `yudao-module-erp-api/.../ErpPurchaseOrderItemRespDTO.java` - `yudao-module-erp/.../ErpPurchaseOrderApiImpl.java` ### MES DO/VO 修改 - `MesWmArrivalNoticeDO.java` - 新增 purchaseOrderCode - `MesWmArrivalNoticeLineDO.java` - 新增 purchaseOrderItemId - `MesWmItemReceiptDO.java` - 新增 processInstanceId - `MesWmItemReceiptLineDO.java` - 新增 purchaseOrderItemId - 对应的 SaveReqVO 和 RespVO ### MES Service 新增方法 - `MesWmArrivalNoticeService.generateArrivalNoticeFromPurchaseOrder()` - `MesWmItemReceiptService.generateItemReceiptFromArrivalNotice()` - `MesWmItemReceiptService.submitItemReceiptApproval()` - `MesWmItemReceiptService.updateItemReceiptAuditStatus()` ### MES Controller 新增接口 - `POST /mes/wm/arrival-notice/generate-from-purchase-order` - `POST /mes/wm/item-receipt/generate-from-arrival-notice` - `PUT /mes/wm/item-receipt/submit-approval` ### BPM 监听器 - `MesWmItemReceiptStatusListener.java`