生产主计划(MPS)- 前端联调方案
涉及页面
- 销售订单列表页(新增"是否需要生产"列)
- 销售订单详情页(新增"是否需要生产"开关)
- 生产主计划列表页(新增)
- 生产主计划详情页(新增)
- 生产主计划新增页(新增,支持手动创建)
业务流程与数据带入
1. 手动创建 MPS
生产主计划新增页
↓
填写:产品、数量、客户、需求日期等
↓
提交创建 MPS(编码自动生成)
↓
MPS 状态为草稿
自动生成编码格式:MPS + yyyyMMdd + 001(如 MPS20240701001)
2. 销售订单审核通过 -> 自动创建 MPS
销售订单审核通过
↓
BPM 监听器触发
↓
遍历销售订单明细,对于 need_production=1 的明细
↓
调用 MesProMpsApi.createMps() 创建 MPS
↓
更新销售订单明细的 mps_id 字段
数据带入:
- MPS.sale_order_id ← 销售订单.id
- MPS.sale_order_no ← 销售订单.no
- MPS.sale_order_item_id ← 销售订单明细.id
- MPS.product_id ← 销售订单明细.productId
- MPS.quantity ← 销售订单明细.count
- MPS.client_id ← 销售订单.customerId
- MPS.request_date ← 销售订单.orderTime
2. MPS 下发 -> 生成生产订单
MPS 单条下发
↓
创建生产工单(类型=自行生产,来源类型=客户订单)
↓
工单自动确认为已确认状态
↓
更新 MPS 状态为已下发,关联工单 ID
3. MPS 合并下发
选择多条相同产品的 MPS
↓
校验:相同产品、草稿状态
↓
计算合并数量 = SUM(quantity)
↓
创建一条生产工单(数量为合并数量)
↓
更新所有 MPS 状态为已下发,关联同一工单
↓
记录合并明细到 mes_pro_mps_merge_item
API
MPS 相关接口
| 方法 |
路径 |
说明 |
| POST |
/mes/pro-mps/create |
创建 MPS |
| PUT |
/mes/pro-mps/update |
更新 MPS |
| DELETE |
/mes/pro-mps/delete |
删除 MPS |
| GET |
/mes/pro-mps/get |
获取 MPS 详情 |
| GET |
/mes/pro-mps/page |
分页查询 MPS |
| POST |
/mes/pro-mps/issue |
下发单条 MPS |
| POST |
/mes/pro-mps/merge-issue |
合并下发多条 MPS |
| POST |
/mes/pro-mps/cancel |
取消 MPS |
| GET |
/mes/pro-mps/export-excel |
导出 MPS |
销售订单接口变更
| 方法 |
路径 |
变更说明 |
| GET |
/erp/sale-order/get |
响应新增 needProduction、mpsId 字段 |
| GET |
/erp/sale-order/page |
响应新增 needProduction 字段 |
| POST |
/erp/sale-order/create |
请求新增 needProduction 字段 |
| PUT |
/erp/sale-order/update |
请求新增 needProduction 字段 |
请求参数
MPS 创建请求
{
"productId": 300,
"quantity": 100.00,
"unitMeasureId": 1,
"clientId": 400,
"requestDate": "2024-01-01T00:00:00",
"remark": "备注"
}
说明:
- code 字段可选,不填则自动生成
- saleOrderId、saleOrderNo、saleOrderItemId 可选,手动创建时不填
```
MPS 下发请求
POST /mes/pro-mps/issue?id=123
MPS 合并下发请求
// POST /mes/pro-mps/merge-issue
[123, 124, 125]
响应字段
MPS 详情响应
| 字段 |
类型 |
说明 |
| id |
Long |
MPS 编号 |
| code |
String |
MPS 编码 |
| status |
Integer |
状态(0=草稿 1=已下发 2=已完成 3=已取消) |
| saleOrderId |
Long |
销售订单ID |
| saleOrderNo |
String |
销售订单号 |
| saleOrderItemId |
Long |
销售订单明细ID |
| productId |
Long |
产品ID |
| productCode |
String |
产品编码 |
| productName |
String |
产品名称 |
| productSpecification |
String |
规格型号 |
| unitMeasureName |
String |
单位 |
| quantity |
BigDecimal |
计划生产数量 |
| quantityProduced |
BigDecimal |
已生产数量 |
| clientId |
Long |
客户ID |
| clientCode |
String |
客户编码 |
| clientName |
String |
客户名称 |
| requestDate |
DateTime |
需求日期 |
| issueDate |
DateTime |
下发日期 |
| finishDate |
DateTime |
完成日期 |
| workOrderId |
Long |
生产工单ID |
| workOrderCode |
String |
生产工单编码 |
| mergeFlag |
Integer |
是否合并下发 |
| mergeBatchNo |
String |
合并批次号 |
| remark |
String |
备注 |
| createTime |
DateTime |
创建时间 |
响应示例
{
"code": 0,
"data": {
"id": 1024,
"code": "MPS-001",
"status": 0,
"saleOrderId": 100,
"saleOrderNo": "SO-001",
"productId": 300,
"productCode": "P-001",
"productName": "产品A",
"quantity": 100.00,
"quantityProduced": 0,
"clientId": 400,
"clientName": "客户A",
"requestDate": "2024-01-01T00:00:00",
"mergeFlag": 0,
"createTime": "2024-01-01T10:00:00"
},
"msg": "操作成功"
}
字段展示规则
| 字段 |
展示位置 |
说明 |
| MPS 编码 |
列表、详情 |
主键标识 |
| 状态 |
列表、详情 |
草稿(蓝)、已下发(绿)、已完成(紫)、已取消(红) |
| 销售订单号 |
列表、详情 |
关联来源 |
| 产品编码/名称 |
列表、详情 |
生产对象 |
| 计划数量 |
列表、详情 |
核心数据 |
| 已生产数量 |
详情 |
进度跟踪 |
| 客户名称 |
列表、详情 |
需求方 |
| 需求日期 |
列表、详情 |
交期要求 |
| 生产工单编码 |
列表、详情 |
下发后显示,可点击跳转 |
业务规则说明
| 场景 |
规则 |
| 创建 MPS |
仅草稿状态可编辑、删除 |
| 下发 MPS |
仅草稿状态可下发,下发后生成生产工单并自动确认 |
| 合并下发 |
至少选择 2 条,必须相同产品,必须都是草稿状态 |
| 取消 MPS |
仅已下发状态可取消 |
| 完成 MPS |
由生产工单完成时自动触发 |
注意事项
- 销售订单审批流程:销售订单审核通过后会自动创建 MPS,无需前端手动触发
- MPS 与销售订单关联:通过 saleOrderItemId 字段关联,可追溯来源
- 合并下发限制:只能合并相同产品的 MPS,不同产品不能合并
- 状态不可逆:下发后无法回到草稿状态,只能取消或完成
- 生产进度同步:MPS 的已生产数量由生产工单报工时自动更新