生产领料/退料关联 Task - 前端联调方案
涉及页面
- 生产领料出库单列表页 / 新增编辑页 / 行管理页
- 生产退料单列表页 / 新增编辑页 / 行管理页
- 生产任务列表页(选择 task 用)
业务流程与数据带入
领料流程
- 新增领料出库单:选择 Task → 工单(workOrderId)、工作站(workstationId) 从 Task 自动带入
- 新增领料出库单行:行可选填 taskId,默认取主表的 taskId
- 完成领料出库:系统自动创建任务投料记录(mes_pro_task_issue),issuedQuantity = availableQuantity = 行数量
- 取消领料出库:系统自动删除通过该领料单创建的任务投料记录
退料流程
- 新增退料单:选择 Task → 工单(workOrderId)、工作站(workstationId) 从 Task 自动带入
- 新增退料单行:行可选填 taskId,默认取主表的 taskId
- 完成退料:系统自动扣减任务投料记录的 issuedQuantity 和 availableQuantity
- 取消退料:无额外操作(退料未完成时不影响投料记录)
领料 → 退料闭环
领料完成 → task_issue: issued=100, available=100, used=0
退料完成 → task_issue: issued=80, available=80, used=0 (退了20)
一、领料出库单 API
| 方法 |
路径 |
说明 |
| POST |
/mes/wm/product-issue/create |
创建领料出库单 |
| PUT |
/mes/wm/product-issue/update |
修改领料出库单 |
| GET |
/mes/wm/product-issue/get |
获得领料出库单 |
| GET |
/mes/wm/product-issue/page |
获得领料出库单分页 |
| PUT |
/mes/wm/product-issue/submit |
提交领料出库单 |
| PUT |
/mes/wm/product-issue/stock |
执行拣货 |
| PUT |
/mes/wm/product-issue/finish |
完成领料出库(自动创建投料记录) |
| PUT |
/mes/wm/product-issue/cancel |
取消领料出库(自动删除投料记录) |
| POST |
/mes/wm/product-issue-line/create |
创建领料出库单行 |
| PUT |
/mes/wm/product-issue-line/update |
修改领料出库单行 |
创建/修改领料出库单 - 请求参数变更
| 参数 |
类型 |
必填 |
说明 |
| taskId |
Long |
是(新增必填) |
生产任务 ID,以 task 为主 |
| workOrderId |
Long |
否(原必填改为选填) |
生产工单 ID,从 task 自动带入 |
| workstationId |
Long |
否 |
工作站 ID,从 task 自动带入 |
| requiredTime |
LocalDateTime |
是 |
需求时间 |
请求示例:
{
"code": "ISSUE20260716001",
"name": "生产领料",
"taskId": 1,
"requiredTime": "2026-07-16 10:00:00",
"remark": ""
}
响应: { "code": 0, "data": 1 }
领料出库单 - 响应字段新增
| 字段 |
类型 |
说明 |
| taskId |
Long |
生产任务 ID |
| taskCode |
String |
新增 生产任务编码 |
| taskName |
String |
新增 生产任务名称 |
| requiredTime |
LocalDateTime |
需求时间 |
响应示例:
{
"code": 0,
"data": {
"id": 1,
"code": "ISSUE20260716001",
"name": "生产领料",
"taskId": 1,
"taskCode": "TASK001",
"taskName": "注塑任务",
"workOrderId": 10,
"workOrderCode": "WO001",
"workstationId": 5,
"workstationName": "装配工作站",
"clientCode": "C001",
"clientName": "某某客户",
"issueDate": null,
"requiredTime": "2026-07-16 10:00:00",
"status": 0,
"remark": "",
"createTime": "2026-07-16 10:00:00"
}
}
领料出库单行 - 请求/响应字段新增
| taskId | Long | 选填 | - | 生产任务 ID,默认取主表的 taskId |
| taskCode | String | - | 新增 | 生产任务编码 |
| taskName | String | - | 新增 | 生产任务名称 |
二、退料单 API
| 方法 |
路径 |
说明 |
| POST |
/mes/wm/return-issue/create |
创建退料单 |
| PUT |
/mes/wm/return-issue/update |
修改退料单 |
| GET |
/mes/wm/return-issue/get |
获得退料单 |
| GET |
/mes/wm/return-issue/page |
获得退料单分页 |
| PUT |
/mes/wm/return-issue/submit |
提交退料单 |
| PUT |
/mes/wm/return-issue/stock |
入库上架 |
| PUT |
/mes/wm/return-issue/finish |
完成退料(自动扣减投料记录可用量) |
| PUT |
/mes/wm/return-issue/cancel |
取消退料 |
| POST |
/mes/wm/return-issue-line/create |
创建退料单行 |
| PUT |
/mes/wm/return-issue-line/update |
修改退料单行 |
创建/修改退料单 - 请求参数变更
| 参数 |
类型 |
必填 |
说明 |
| taskId |
Long |
是(新增必填) |
生产任务 ID,以 task 为主 |
| workOrderId |
Long |
否(原必填改为选填) |
生产工单 ID,从 task 自动带入 |
| workstationId |
Long |
否 |
工作站 ID,从 task 自动带入 |
请求示例:
{
"code": "RI20260716001",
"name": "生产退料",
"taskId": 1,
"type": 1,
"remark": ""
}
响应: { "code": 0, "data": 1 }
退料单 - 响应字段新增
| 字段 |
类型 |
说明 |
| taskId |
Long |
新增 生产任务 ID |
| taskCode |
String |
新增 生产任务编码 |
| taskName |
String |
新增 生产任务名称 |
响应示例:
{
"code": 0,
"data": {
"id": 1,
"code": "RI20260716001",
"name": "生产退料",
"taskId": 1,
"taskCode": "TASK001",
"taskName": "注塑任务",
"workOrderId": 10,
"workOrderCode": "WO001",
"workstationId": 5,
"workstationName": "装配工作站",
"type": 1,
"returnDate": null,
"status": 0,
"remark": "",
"createTime": "2026-07-16 10:00:00"
}
}
退料单行 - 请求/响应字段新增
| taskId | Long | 选填 | - | 生产任务 ID,默认取主表的 taskId |
| taskCode | String | - | 新增 | 生产任务编码 |
| taskName | String | - | 新增 | 生产任务名称 |
退料单分页 - 请求参数新增
| 参数 |
类型 |
说明 |
| taskId |
Long |
新增 按生产任务 ID 过滤 |
字段展示规则
领料出库单
| 字段 |
展示位置 |
说明 |
| taskId |
新增/编辑表单 |
必填,选择 Task 下拉框 |
| taskCode |
列表、详情 |
从 Task 自动带入展示 |
| taskName |
列表、详情 |
从 Task 自动带入展示 |
| workOrderId |
新增/编辑表单 |
选填,选择 Task 后自动填入,可手动修改 |
| workOrderCode |
列表、详情 |
从工单自动带入展示 |
| workstationId |
新增/编辑表单 |
选填,选择 Task 后自动填入,可手动修改 |
| workstationName |
列表、详情 |
从工作站自动带入展示 |
| requiredTime |
新增/编辑表单、详情 |
必填,需求时间 |
| 行级 taskId |
行新增/编辑表单 |
选填,默认取主表 taskId |
退料单
| 字段 |
展示位置 |
说明 |
| taskId |
新增/编辑表单 |
必填,选择 Task 下拉框 |
| taskCode |
列表、详情 |
从 Task 自动带入展示 |
| taskName |
列表、详情 |
从 Task 自动带入展示 |
| workOrderId |
新增/编辑表单 |
选填,选择 Task 后自动填入,可手动修改 |
| workOrderCode |
列表、详情 |
从工单自动带入展示 |
| workstationId |
新增/编辑表单 |
选填,选择 Task 后自动填入,可手动修改 |
| workstationName |
列表、详情 |
从工作站自动带入展示 |
| 行级 taskId |
行新增/编辑表单 |
选填,默认取主表 taskId |
业务规则说明
| 场景 |
规则 |
| 新增领料/退料单 |
taskId 必填;选择 task 后自动带入 workOrderId 和 workstationId |
| 修改领料/退料单 |
taskId 必填;同新增规则 |
| 领料出库完成 |
系统自动按行创建 mes_pro_task_issue 投料记录,sourceDocType=PRODUCT_ISSUE |
| 取消领料出库 |
系统自动删除通过该领料单创建的投料记录 |
| 退料完成 |
系统自动扣减对应 task_issue 的 issuedQuantity 和 availableQuantity |
| 行级 taskId |
行的 taskId 优先于主表的 taskId;如果行为空则取主表的 |
| 投料记录匹配 |
退料扣减时,按 taskId + itemId + sourceDocType=PRODUCT_ISSUE 匹配投料记录 |
注意事项
- 以 task 为主:创建领料/退料单时,必须先选择 task,工单和工作站从 task 自动带入
- workOrderId 不再是必填:前端表单中 workOrderId 改为选填,选择 task 后自动填入
- 行级 taskId:行表新增 taskId 字段,前端行编辑时可选择不同的 task(默认取主表的)
- 投料记录自动管理:领料完成自动创建投料记录,退料完成自动扣减投料可用量,前端无需额外操作
- 分页查询支持 taskId:领料出库单和退料单分页接口均支持按 taskId 过滤查询
- 领料取消:取消领料时,只有通过该领料单创建的投料记录会被删除(按 sourceDocType + sourceDocId 匹配)
- 退料扣减:退料扣减投料记录时,issuedQuantity 和 availableQuantity 最低为 0,不会出现负数