生产订单(生产工单)- 页面设计开发说明文档
版本: 3.1.0
创建日期: 2026-02-13
更新日期: 2026-02-13
所属模块: 生产管理 > 生产订单
前端路由: /mes/pro/workorder(MOM 端);/production/work-order(ERP 前端)
关联文档: erp与mom数据库表映射对照表;MOM系统数据升级方案-销售采购生产计划;生产计划.md;mom系统生产领料单-页面开发说明文档
目录
- 业务流程总览
- 页面概述
- 页面结构
- 列表页设计
- 新增/编辑页设计
- 数据字段定义
- 按钮操作说明
- 页面交互规则
- 接口调用说明
- 状态流转
- 业务规则
- 前端组件设计
- 数据模型
0. 业务流程总览
0.1 生产订单在 MOM/ERP 中的定位
生产订单(生产工单)是 生产计划 → 生产执行 链条中的核心节点。生产计划单经过 BOM 运算并下发后,用户通过选择已审核的生产计划单来创建生产工单,工单驱动后续的生产任务排产、领料、报工、完工入库等生产执行环节。
重要约束: 生产订单只能来源于生产计划单,不支持手动创建或从销售订单直接创建。新增生产订单时必须选择一个已审核的生产计划单,系统自动带入产品、客户、数量等信息。
0.2 端到端业务流程图
0.3 生产工单内部业务流程
| 阶段 |
操作 |
触发条件 |
结果 |
| 1. 新建 |
点击「新增」 |
始终可用 |
打开新增页,状态=草稿(PREPARE) |
| 2. 选择计划单 |
选择生产计划单号 |
新增状态 |
弹窗选择已审核的生产计划单,自动带入产品、客户、数量等信息;自动根据产品 BOM 生成 BOM 物料组成行 |
| 3. 选择工艺路线 |
选择工艺路线 |
新增/编辑状态 |
弹窗选择产品对应的工艺路线,记录路线编码/名称 |
| 4. 填写信息 |
填写工单编码、工单名称、生产日期等 |
新增/编辑状态 |
可保存 |
| 5. 保存 |
点击「保存」 |
表单校验通过 |
数据持久化,自动生成 BOM 物料行 |
| 6. 确认/审核 |
点击确认 |
草稿状态,已保存 |
工单状态→已确认(CONFIRMED),可进行排产和领料 |
| 7. 领料 |
一键领料或手动创建领料单 |
已确认状态,有 BOM 物料 |
一键领料:自动创建领料单并填充 BOM 物料行;手动领料:跳转领料单新增页 |
| 8. 排产 |
创建生产任务 |
已确认状态 |
生成生产任务,分配工序和工作站 |
| 9. 完工 |
点击「完工」 |
生产中/已确认状态 |
工单状态→已完成(FINISHED),记录完成时间 |
| 10. 取消 |
点击「取消」 |
草稿/已确认状态 |
工单状态→已取消(CANCELED),记录取消时间 |
| 11. 删除 |
点击「删除」 |
仅草稿(PREPARE)状态 |
物理删除工单及关联 BOM 行 |
0.4 上下游单据关系
| 上游单据 |
关联字段 |
说明 |
| 生产计划单 |
source_code (计划单号) |
唯一来源,新增时通过选择计划单弹窗关联 |
| 销售订单 |
client_id, client_code, client_name |
客户信息,由生产计划自动带入 |
| 产品BOM |
product_id |
产品的 BOM 组成自动展开为工单 BOM 行 |
| 工艺路线 |
route_id, route_code, route_name |
选择产品对应的工艺路线 |
| 下游单据 |
关联字段 |
说明 |
| 生产领料单(wm_issue_header) |
workorder_id, workorder_code |
一键领料或手动创建领料单 |
| 生产任务(pro_task) |
workorder_id |
工单排产后生成的生产任务 |
| 完工入库单 |
workorder_id |
产成品入库关联工单 |
0.5 工单类型(workorderType)
| 值 |
标签 |
说明 |
| SELF |
自产 |
企业自行生产(默认) |
| OUTSOURCE |
委外 |
委托外部供应商生产 |
0.6 来源类型(orderSource)
| 值 |
标签 |
说明 |
| PLAN |
生产计划 |
由生产计划单创建(唯一来源) |
注意: 生产订单只支持从已审核的生产计划单创建,不支持手动创建或从销售订单直接创建。来源类型固定为 PLAN。
0.7 关键数量逻辑
| 数量字段 |
含义 |
计算/来源 |
| 生产数量(quantity) |
计划生产数量 |
从生产计划单带入,可修改 |
| 已生产数量(quantityProduced) |
已完成报工数量 |
生产报工回写,只读 |
| 调整数量(quantityChanged) |
调整差额 |
手动调整时产生 |
| 已排产数量(quantityScheduled) |
已创建生产任务的数量 |
排产后回写,只读 |
0.8 领料方式说明
生产工单支持两种领料方式:
| 方式 |
操作 |
说明 |
| 一键领料 |
工单查看页点击「一键领料」按钮 |
系统自动根据工单 BOM 物料组成创建一张领料单(wm_issue_header),并将所有 BOM 物料自动填入领料行(wm_issue_line),领料数量=BOM 预计使用量。创建后跳转到领料单编辑页,用户可调整后执行出库 |
| 手动领料 |
工单查看页点击「创建领料单」按钮 |
跳转到生产领料单新增页面,自动携带工单 ID 和工单编码,用户手动选择物料并填写领料数量 |
0.9 典型操作路径(用户故事)
| 场景 |
路径 |
| 新建生产工单 |
列表 → 新增 → 选择计划单号(自动带入产品/客户) → 选择工艺路线 → 填写编码/名称/日期 → 保存 |
| 查看工单详情 |
列表 → 点击工单编码或操作列「查看」 → 查看页(只读) |
| 一键领料 |
列表 → 查看已确认工单 → 点击「一键领料」→ 自动创建领料单 → 跳转领料单编辑页 → 调整数量 → 执行出库 |
| 手动领料 |
列表 → 查看已确认工单 → 点击「创建领料单」→ 跳转领料单新增页(自动关联工单) → 添加物料 → 保存 → 执行出库 |
| 排产执行 |
列表 → 查看已确认工单 → 创建生产任务 → 分配工作站 |
| 完工结案 |
列表 → 查看工单 → 确认已生产数量 → 完工 |
| 取消工单 |
列表 → 查看草稿/已确认工单 → 取消 |
1. 页面概述
1.1 功能说明
生产订单(生产工单)页面用于管理企业的生产制造任务。生产工单来源于已审核的生产计划单,用户通过选择计划单号创建工单,系统自动带入产品信息和 BOM 物料组成。一张工单对应一个产品的一次生产任务,包含产品信息、工艺路线、生产数量、生产日期、BOM 物料组成等关键信息。工单确认后可进行一键领料或手动创建领料单,也可进行排产、报工、完工等操作。
1.2 业务场景
- 计划驱动生产: 新增工单时选择已审核的生产计划单,自动带入产品、客户、数量等信息
- 选择工艺路线: 工单表头可选择产品对应的工艺路线,指导后续工序排产
- 一键领料: 工单确认后点击「一键领料」,系统自动根据 BOM 物料创建领料单
- 手动创建领料单: 工单确认后点击「创建领料单」,跳转到领料单新增页手动添加物料
- 委外加工: 支持委外类型工单,关联供应商信息
- 生产执行跟踪: 记录生产数量、已生产数量、已排产数量,便于跟踪执行进度
1.3 页面截图参考
| 截图文件 |
说明 |
screenshot/生产订单-列表页.png |
列表页 - 工单列表,含搜索区、工具栏、数据表格 |
screenshot/生产订单-新增页.png |
新增页 - 选择计划单后的表头表单 + BOM 物料组成子表 |
screenshot/生产订单-查看页.png |
查看页 - 只读模式,含一键领料/创建领料单按钮 |
2. 页面结构
2.1 整体布局
2.2 页面模式
| 模式 |
说明 |
入口 |
| 列表页 |
默认视图,展示生产工单列表 |
菜单点击「生产订单」 |
| 新增页 |
新建生产工单,选择计划单号+选择工艺路线+填写表头 |
列表页点击「新增」按钮 |
| 编辑页 |
修改已有生产工单(仅草稿状态) |
列表页操作列点击「编辑」 |
| 查看页 |
只读查看工单详情,含 BOM 物料、一键领料/创建领料单按钮 |
列表页操作列点击「查看」或点击工单编码 |
3. 列表页设计
3.1 搜索条件区域
| 序号 |
字段名 |
标签 |
组件类型 |
宽度 |
说明 |
| 1 |
workorderCode |
工单编码 |
el-input |
160px |
模糊搜索 |
| 2 |
workorderName |
工单名称 |
el-input |
160px |
模糊搜索 |
| 3 |
workorderType |
工单类型 |
el-select |
120px |
下拉选择:自产/委外 |
| 4 |
sourceCode |
计划单号 |
el-input |
140px |
模糊搜索来源计划单号 |
| 5 |
productCode |
产品编号 |
el-input |
140px |
模糊搜索 |
| 6 |
productName |
产品名称 |
el-input |
160px |
模糊搜索 |
| 7 |
status |
工单状态 |
el-select |
120px |
下拉选择 |
| 8 |
beginDate |
开始日期 |
el-date-picker |
140px |
生产日期范围起 |
| 9 |
endDate |
结束日期 |
el-date-picker |
140px |
生产日期范围止 |
| 10 |
- |
搜索 |
el-button (primary) |
- |
执行搜索 |
| 11 |
- |
重置 |
el-button (default) |
- |
清空搜索条件 |
3.2 工具栏按钮
| 序号 |
按钮名称 |
图标 |
类型 |
权限标识 |
说明 |
| 1 |
新增 |
el-icon-plus |
success |
mes:pro:workorder:add |
打开新增生产工单页面 |
| 2 |
修改 |
el-icon-edit |
primary |
mes:pro:workorder:edit |
修改选中工单(需勾选) |
| 3 |
删除 |
el-icon-delete |
danger |
mes:pro:workorder:remove |
批量删除选中工单(需勾选) |
| 4 |
导出 |
el-icon-download |
warning |
mes:pro:workorder:export |
导出工单列表到Excel |
3.3 数据表格列定义
| 序号 |
列标题 |
字段名 |
宽度 |
对齐 |
说明 |
| 0 |
(复选框) |
- |
55px |
center |
多选列,用于批量操作 |
| 1 |
工单编码 |
workorderCode |
150px |
left |
蓝色链接可点击打开详情 |
| 2 |
工单名称 |
workorderName |
200px |
left |
工单名称 |
| 3 |
工单类型 |
workorderType |
80px |
center |
自产/委外 |
| 4 |
计划单号 |
sourceCode |
140px |
left |
来源生产计划单号 |
| 5 |
工艺路线 |
routeName |
120px |
left |
工艺路线名称 |
| 6 |
产品编号 |
productCode |
140px |
left |
产品编号 |
| 7 |
产品名称 |
productName |
200px |
left |
产品名称 |
| 8 |
规格型号 |
productSpc |
150px |
left |
产品规格型号 |
| 9 |
单位 |
unitOfMeasure |
60px |
center |
计量单位 |
| 10 |
生产数量 |
quantity |
100px |
right |
计划生产数量 |
| 11 |
已生产 |
quantityProduced |
100px |
right |
已完成报工数量 |
| 12 |
已排产 |
quantityScheduled |
100px |
right |
已排产数量 |
| 13 |
客户名称 |
clientName |
150px |
left |
客户名称(可为空) |
| 14 |
生产日期 |
productionDate |
120px |
center |
计划生产日期 |
| 15 |
状态 |
status |
80px |
center |
状态标签(颜色区分) |
| 16 |
操作 |
- |
240px |
center |
操作按钮组 |
3.4 操作列按钮
操作列按钮根据工单状态动态显隐:
status = PREPARE(草稿):
| 按钮 |
颜色 |
权限 |
说明 |
| 查看 |
success (绿色文字) |
mes:pro:workorder:query |
打开查看页(只读) |
| 编辑 |
primary (蓝色文字) |
mes:pro:workorder:edit |
打开编辑页 |
| 确认 |
success (绿色文字) |
mes:pro:workorder:edit |
确认工单,状态→已确认(CONFIRMED) |
| 删除 |
danger (红色文字) |
mes:pro:workorder:remove |
确认后删除 |
status = CONFIRMED(已确认)/ APPROVED(已审核):
| 按钮 |
颜色 |
权限 |
说明 |
| 查看 |
success (绿色文字) |
mes:pro:workorder:query |
打开查看页 |
| 一键领料 |
primary (蓝色文字) |
mes:wm:issueheader:add |
自动创建领料单 |
| 完工 |
warning (橙色文字) |
mes:pro:workorder:edit |
工单完工 |
| 取消 |
danger (红色文字) |
mes:pro:workorder:edit |
取消工单 |
status = FINISHED(已完成)/ CANCELED(已取消):
| 按钮 |
颜色 |
权限 |
说明 |
| 查看 |
success (绿色文字) |
mes:pro:workorder:query |
打开查看页(只读) |
3.5 分页组件
| 属性 |
值 |
说明 |
| 默认每页条数 |
10 |
可选: 10, 20, 50, 100 |
| 布局 |
total, sizes, prev, pager, next, jumper |
完整分页 |
| 总条数显示 |
共 {total} 条 |
右侧显示 |
4. 新增/编辑页设计
4.1 页面布局
新增/编辑页面为独立的全屏页面(非弹窗),包含表头表单区、BOM 物料组成表格区、领料明细区和完工明细区。
截图参考: screenshot/生产管理-生产工单表单-查看操作等.png — 查看页完整布局,含所有操作按钮和三个子表区域。
4.2 表头表单字段
表头采用 5 列栅格布局(参照截图),每行 5 个字段。
截图对照: 截图中表头为 5 列,第 5 列包含图纸号、工艺路线、生产线、生产日期、加工时长等字段。
| 序号 |
字段名 |
标签 |
组件类型 |
必填 |
默认值 |
可编辑 |
说明 |
| 第1列 |
|
|
|
|
|
|
|
| 1 |
workorderCode |
单据编码 |
el-input |
是 |
系统自动生成 |
否(只读) |
后端通过 AutoCodeUtil.genSerialCode(WORKORDER_CODE) 自动生成 |
| 2 |
orderDate |
单据日期 |
el-date-picker |
是 |
当天 |
是 |
工单创建日期 |
| 3 |
status |
单据状态 |
el-tag |
- |
PREPARE |
否(只读) |
状态标签显示 |
| 4 |
businessStatus |
业务状态 |
el-select |
是 |
正常 |
是 |
正常/暂停/取消 |
| 第2列 |
|
|
|
|
|
|
|
| 5 |
businessType |
业务类型 |
el-select |
是 |
- |
是 |
加工车间等(截图示例值:"加工车间") |
| 6 |
operatorName |
操作员 |
el-input |
- |
当前用户 |
否(只读) |
自动填充当前登录用户 |
| 7 |
approverName |
审核员 |
el-input |
- |
- |
否(只读) |
审核时自动填充 |
| 8 |
approveDate |
审核日期 |
el-date-picker |
- |
- |
否(只读) |
审核时自动填充 |
| 第3列 |
|
|
|
|
|
|
|
| 9 |
sourceCode |
计划单号 |
el-input + 选择按钮 |
是 |
- |
是(新增) |
选择生产计划单弹窗,选择后自动带入产品/客户信息 |
| 10 |
salesOrderCode |
跟单编号 |
el-input |
- |
- |
否(只读) |
选择计划单后自动带入的销售订单号 |
| 11 |
deliveryDate |
订单交期 |
el-date-picker |
- |
- |
否(只读) |
选择计划单后自动带入 |
| 12 |
requestDate |
需求日期 |
el-date-picker |
否 |
- |
是 |
物料需求日期 |
| 第4列 |
|
|
|
|
|
|
|
| 13 |
productCode |
物料编码 |
el-input |
- |
- |
否(只读) |
选择计划单后自动带入 |
| 14 |
productName |
物料名称 |
el-input |
- |
- |
否(只读) |
选择计划单后自动带入 |
| 15 |
quantity |
生产总数 |
el-input-number + 单位 |
是 |
0 |
是 |
从计划单带入可修改,必须>0;右侧显示单位 |
| 16 |
remark |
备注信息 |
el-input(textarea) |
否 |
- |
是 |
多行文本 |
| 第5列 |
|
|
|
|
|
|
|
| 17 |
drawingNo |
图纸号 |
el-input |
否 |
- |
是 |
产品图纸编号 |
| 18 |
routeName |
工艺路线 |
el-input + 选择按钮 |
否 |
- |
是 |
选择工艺路线弹窗,显示格式如"铆钉=>焊接" |
| 19 |
productionLine |
生产线 |
el-select |
否 |
- |
是 |
选择生产线/车间(如"2# 底架加工线") |
| 20 |
productionDate |
生产日期 |
el-date-picker(datetime) |
是 |
当天 |
是 |
计划生产日期时间 |
| 21 |
processTime |
加工时长 |
el-input-number + "分钟" |
否 |
- |
是 |
预计加工时长(分钟) |
业务类型选项(businessType):
| 值 |
标签 |
| SELF |
自产 |
| OUTSOURCE |
委外 |
| PROCESSING |
加工车间 |
业务状态选项(businessStatus):
| 值 |
标签 |
| NORMAL |
正常 |
| PAUSE |
暂停 |
| CANCEL |
取消 |
4.3 订单信息子表(BOM 物料组成)
截图对照: 截图中标题为无标题表格区域,列为:序号、物料编码、物料名称、主计量、生产数量、质量要求、备注
订单信息子表位于表头下方,展示工单关联的产品/物料信息。选择计划单号并保存后系统自动根据产品 BOM 展开生成物料行。
| 序号 |
列标题 |
字段名 |
宽度 |
组件类型 |
说明 |
| 1 |
序号 |
- |
60px |
自动编号 |
行序号,自动递增 |
| 2 |
物料编码 |
itemCode |
150px |
el-input |
只读,自动生成 |
| 3 |
物料名称 |
itemName |
200px |
el-input |
只读,含型号规格 |
| 4 |
主计量 |
unitName |
80px |
el-input |
只读 |
| 5 |
生产数量 |
quantity |
120px |
el-input-number |
可编辑(新增/编辑模式) |
| 6 |
质量要求 |
qualityReq |
150px |
el-input |
可编辑,如"国产一级品" |
| 7 |
备注 |
remark |
150px |
el-input |
可编辑 |
BOM 生成机制: 后端 ProWorkorderController.add() 在保存工单后调用 generateBomLine(workorderId) 方法,该方法根据 productId 查找 md_product_bom 表获取产品 BOM 组成,然后按 生产数量 × BOM单位用量 计算每个物料的预计使用量,写入 pro_workorder_bom 表。修改工单时若产品或数量变化,自动删除旧 BOM 行并重新生成。物料行不支持手动添加/删除。
前端加载 BOM 列表: 使用 GET /mes/pro/workorderbom/list?workorderId={id} 接口(ProWorkorderBomController)获取工单的直接 BOM 组成行,返回的是 ProWorkorderBom 实体,字段名与前端 WorkOrderBom 接口直接对应(itemCode、itemName、itemSpc、unitOfMeasure、unitName、itemOrProduct、quantity)。
注意: 不要使用 GET /mes/pro/workorder/listItems 接口加载表单 BOM 子表。listItems 是递归展开到最底层物料并合并同编码数量的接口,返回的是 MdProductBom 格式(字段名为 bomItemCode/bomItemName 等),适用于物料需求分析场景,不适用于展示直接 BOM 组成。
4.4 领料明细子表
截图对照: 截图中标题为"领料明细",右上角有「一键领料」和「+ 领料」按钮。
领料明细子表展示该工单关联的所有生产领料单记录(只读),数据来源为 wm_issue_header + wm_issue_line 按 workorder_id 关联查询。
| 序号 |
列标题 |
字段名 |
宽度 |
说明 |
| 1 |
序号 |
- |
60px |
自动编号 |
| 2 |
跟单编号 |
salesOrderCode |
120px |
销售订单号 |
| 3 |
单据编码 |
issueCode |
140px |
领料单编码 |
| 4 |
单据状态 |
issueStatus |
80px |
领料单状态 |
| 5 |
业务状态 |
businessStatus |
80px |
业务状态 |
| 6 |
生产订单号 |
workorderCode |
140px |
关联的工单编码 |
| 7 |
物料编码 |
itemCode |
140px |
领料物料编码 |
| 8 |
物料名称 |
itemName |
180px |
领料物料名称 |
| 9 |
领用数量 |
quantityIssued |
100px |
计划领料数量 |
| 10 |
出库数量 |
quantityOut |
100px |
实际出库数量 |
| 11 |
单据日期 |
issueDate |
120px |
领料日期 |
数据加载: 查看页加载工单详情后,按 workorderId 查询关联的领料明细记录。
4.5 完工明细子表
截图对照: 截图中标题为"完工明细",右上角有「一键报工」和「+ 报工」按钮。
完工明细子表展示该工单关联的所有完工/报工记录(只读)。
| 序号 |
列标题 |
字段名 |
宽度 |
说明 |
| 1 |
序号 |
- |
60px |
自动编号 |
| 2 |
跟单编号 |
salesOrderCode |
120px |
销售订单号 |
| 3 |
单据编码 |
recordCode |
140px |
报工单编码 |
| 4 |
单据状态 |
recordStatus |
80px |
报工单状态 |
| 5 |
业务状态 |
businessStatus |
80px |
业务状态 |
| 6 |
生产订单号 |
workorderCode |
140px |
关联的工单编码 |
| 7 |
物料编码 |
itemCode |
140px |
物料编码 |
| 8 |
物料名称 |
itemName |
180px |
物料名称 |
| 9 |
完工数量 |
quantityFinished |
100px |
完工数量 |
| 10 |
质量 |
qualityResult |
80px |
质量检验结果 |
| 11 |
单据日期 |
recordDate |
120px |
报工日期 |
数据加载: 查看页加载工单详情后,按 workorderId 查询关联的完工/报工记录。
4.6 选择生产计划单弹窗
点击计划单号旁的「选择」按钮,打开生产计划单选择弹窗。
| 属性 |
值 |
| 弹窗标题 |
选择生产计划单 |
| 弹窗宽度 |
1000px |
| 弹窗高度 |
自适应,最大70vh |
| 选择模式 |
单选 |
| 数据筛选 |
仅显示已审核(APPROVED)的生产计划单 |
弹窗搜索区:
| 组件 |
说明 |
| 计划单号 |
模糊搜索计划编码 |
| 销售订单号 |
模糊搜索关联的销售订单号 |
| 物料名称 |
模糊搜索产品名称 |
| 搜索按钮 |
primary 类型,执行搜索 |
| 重置按钮 |
清空条件并刷新列表 |
弹窗列表结构:
| 列 |
字段 |
说明 |
| (单选) |
- |
单选列 |
| 计划单号 |
planCode |
生产计划编码 |
| 单据日期 |
planDate |
计划日期 |
| 销售订单号 |
salesOrderCode |
关联的销售订单号 |
| 业务人员 |
salesUserName |
业务人员名称 |
| 产品编码 |
itemCode |
首行物料编码(主产品) |
| 产品名称 |
itemName |
首行物料名称 |
| 数量 |
totalQuantity |
生产总量 |
| 订单交期 |
deliveryDate |
交货日期 |
选择交互:
- 单选一条计划单记录,点击「确定」按钮
- 选择后自动填充表头字段:
sourceCode ← planCode(计划单号)
productId / productCode / productName / productSpc ← 计划单首行产品信息
unitOfMeasure ← 计划单首行单位
quantity ← 计划单 totalQuantity
clientId / clientCode / clientName ← 计划单关联的客户信息(来自销售订单)
orderSource ← 自动设为 "PLAN"
- 保存时后端自动根据产品 BOM 生成 BOM 物料组成行
4.7 选择工艺路线弹窗
点击工艺路线旁的「选择」按钮,打开工艺路线选择弹窗。
| 属性 |
值 |
| 弹窗标题 |
选择工艺路线 |
| 弹窗宽度 |
800px |
| 弹窗高度 |
自适应,最大60vh |
| 选择模式 |
单选 |
| 数据筛选 |
仅显示已启用(enableFlag=Y)的工艺路线 |
弹窗搜索区:
| 组件 |
说明 |
| 路线编号 |
模糊搜索工艺路线编号 |
| 路线名称 |
模糊搜索工艺路线名称 |
| 搜索按钮 |
primary 类型,执行搜索 |
| 重置按钮 |
清空条件并刷新列表 |
弹窗列表结构:
| 列 |
字段 |
说明 |
| (单选) |
- |
单选列 |
| 路线编号 |
routeCode |
工艺路线编号 |
| 路线名称 |
routeName |
工艺路线名称 |
| 路线说明 |
routeDesc |
工艺路线描述 |
| 是否启用 |
enableFlag |
Y=启用 / N=停用 |
选择交互:
- 单选一条工艺路线记录,点击「确定」按钮
- 选择后自动填充:routeId、routeCode、routeName
数据来源: 工艺路线数据来自 pro_route 表,通过 GET /mes/pro/proroute/list 接口获取(无需权限注解即可访问)。
注意: 前端调用 /mes/pro/proroute/list 时默认传递 enableFlag=Y 参数。应默认加载所有路线,让用户自行判断选择。后端 ProRouteController.list() 方法接受 ProRoute 实体作为查询参数,其中 routeCode、routeName 支持模糊搜索,enableFlag 支持精确匹配。
工艺路线与产品的关系通过 pro_route_product 表关联,可选根据已选产品过滤对应的工艺路线。
4.8 表头折叠
点击「收起」按钮,表头表单区域收起,仅显示 BOM 物料组成子表;点击「展开」恢复。
5. 数据字段定义
5.1 生产工单主表字段(pro_workorder)
| 字段名 |
数据库字段 |
类型 |
长度 |
必填 |
默认值 |
说明 |
| 工单ID |
workorder_id |
bigint |
- |
是 |
AUTO |
主键,自增 |
| 工单编码 |
workorder_code |
varchar |
64 |
是 |
- |
唯一编码 |
| 工单名称 |
workorder_name |
varchar |
255 |
是 |
- |
工单描述 |
| 工单类型 |
workorder_type |
varchar |
64 |
否 |
SELF |
自产/委外 |
| 来源类型 |
order_source |
varchar |
64 |
是 |
PLAN |
固定为 PLAN(生产计划) |
| 来源单据 |
source_code |
varchar |
64 |
是 |
- |
生产计划单号(选择计划单弹窗) |
| 产品ID |
product_id |
bigint |
- |
是 |
- |
外键 → md_item,由计划单带入 |
| 产品编号 |
product_code |
varchar |
64 |
是 |
- |
冗余,由计划单带入 |
| 产品名称 |
product_name |
varchar |
255 |
是 |
- |
冗余,由计划单带入 |
| 规格型号 |
product_spc |
varchar |
255 |
否 |
- |
由计划单带入 |
| 单位 |
unit_of_measure |
varchar |
64 |
是 |
- |
由计划单带入 |
| 单位名称 |
unit_name |
varchar |
64 |
否 |
- |
|
| 工艺路线ID |
route_id |
bigint |
- |
否 |
- |
外键 → pro_route(新增字段) |
| 工艺路线编号 |
route_code |
varchar |
64 |
否 |
- |
冗余(新增字段) |
| 工艺路线名称 |
route_name |
varchar |
255 |
否 |
- |
冗余(新增字段) |
| 批次号 |
batch_code |
varchar |
64 |
否 |
- |
生产批次号 |
| 生产数量 |
quantity |
double(14,2) |
- |
是 |
0 |
计划生产数量,从计划单带入 |
| 已生产数量 |
quantity_produced |
double(14,2) |
- |
否 |
0 |
报工回写 |
| 调整数量 |
quantity_changed |
double(14,2) |
- |
否 |
0 |
手动调整 |
| 已排产数量 |
quantity_scheduled |
double(14,2) |
- |
否 |
0 |
排产回写 |
| 客户ID |
client_id |
bigint |
- |
否 |
- |
由计划单带入 |
| 客户编码 |
client_code |
varchar |
64 |
否 |
- |
|
| 客户名称 |
client_name |
varchar |
255 |
否 |
- |
|
| 供应商ID |
vendor_id |
bigint |
- |
否 |
- |
仅委外工单 |
| 供应商编码 |
vendor_code |
varchar |
64 |
否 |
- |
|
| 供应商名称 |
vendor_name |
varchar |
255 |
否 |
- |
|
| 生产日期 |
production_date |
date |
- |
是 |
当天 |
计划生产日期(原 request_date 改名) |
| 完成时间 |
finish_date |
datetime |
- |
否 |
- |
完工时自动填充 |
| 取消时间 |
cancel_date |
datetime |
- |
否 |
- |
取消时自动填充 |
| 父工单ID |
parent_id |
bigint |
- |
否 |
0 |
父工单ID |
| 祖先节点 |
ancestors |
varchar |
500 |
是 |
0 |
所有父节点ID |
| 单据状态 |
status |
varchar |
64 |
否 |
PREPARE |
草稿/已确认/已完成/已取消 |
| 备注 |
remark |
varchar |
500 |
否 |
- |
|
| 创建者 |
create_by |
varchar |
64 |
否 |
- |
|
| 创建时间 |
create_time |
datetime |
- |
否 |
- |
|
| 更新者 |
update_by |
varchar |
64 |
否 |
- |
|
| 更新时间 |
update_time |
datetime |
- |
否 |
- |
|
变更说明:
request_date 改名为 production_date,语义从"需求日期"改为"生产日期"
- 新增
route_id、route_code、route_name 三个工艺路线字段
order_source 固定为 PLAN,source_code 存储计划单号(必填)
5.2 BOM 物料组成表字段(pro_workorder_bom)
| 字段名 |
数据库字段 |
类型 |
长度 |
必填 |
说明 |
| BOM行ID |
line_id |
bigint |
- |
是 |
主键,自增 |
| 工单ID |
workorder_id |
bigint |
- |
是 |
外键 → pro_workorder |
| 物料ID |
item_id |
bigint |
- |
是 |
外键 → md_item |
| 物料编号 |
item_code |
varchar |
64 |
是 |
冗余 |
| 物料名称 |
item_name |
varchar |
255 |
是 |
冗余 |
| 规格型号 |
item_spc |
varchar |
255 |
否 |
|
| 单位 |
unit_of_measure |
varchar |
64 |
否 |
|
| 单位名称 |
unit_name |
varchar |
128 |
否 |
|
| 物料/产品标识 |
item_or_product |
varchar |
64 |
否 |
标识物料还是半成品 |
| 预计使用量 |
quantity |
decimal(14,2) |
- |
是 |
=产品BOM用量 × 生产数量 |
| 备注 |
remark |
varchar |
500 |
否 |
|
| 创建者 |
create_by |
varchar |
64 |
否 |
|
| 创建时间 |
create_time |
datetime |
- |
否 |
|
| 更新者 |
update_by |
varchar |
64 |
否 |
|
| 更新时间 |
update_time |
datetime |
- |
否 |
|
6. 按钮操作说明
6.1 列表页工具栏按钮
6.1.1 新增按钮
| 项目 |
说明 |
| 触发条件 |
始终可用 |
| 操作 |
路由跳转到新增生产工单页面 |
| 权限 |
mes:pro:workorder:add |
| 路由 |
/production/work-order/new |
6.1.2 修改按钮
| 项目 |
说明 |
| 触发条件 |
勾选一条记录 |
| 前置校验 |
仅草稿(PREPARE)状态允许修改 |
| 操作 |
路由跳转到编辑页面 |
| 权限 |
mes:pro:workorder:edit |
6.1.3 删除按钮(批量)
| 项目 |
说明 |
| 触发条件 |
勾选一条或多条记录 |
| 前置校验 |
仅草稿(PREPARE)状态允许删除 |
| 操作 |
弹出确认框,确认后调用删除接口 |
| 权限 |
mes:pro:workorder:remove |
6.1.4 导出按钮
| 项目 |
说明 |
| 触发条件 |
始终可用 |
| 操作 |
按当前搜索条件导出工单列表到Excel |
| 权限 |
mes:pro:workorder:export |
6.2 操作列按钮
6.2.1 查看按钮
| 项目 |
说明 |
| 显示条件 |
所有状态均显示 |
| 操作 |
路由跳转到查看页面(只读模式) |
| 权限 |
mes:pro:workorder:query |
6.2.2 编辑按钮
| 项目 |
说明 |
| 显示条件 |
仅 status = PREPARE(草稿) |
| 操作 |
路由跳转到编辑页面 |
| 权限 |
mes:pro:workorder:edit |
6.2.3 删除按钮(行操作)
| 项目 |
说明 |
| 显示条件 |
仅 status = PREPARE(草稿) |
| 操作 |
弹出确认框,确认后删除,同时删除关联 BOM 行 |
| 权限 |
mes:pro:workorder:remove |
6.2.4 确认按钮
| 项目 |
说明 |
| 显示条件 |
仅 status = PREPARE(草稿) |
| 前置条件 |
工单已保存,必须有产品信息(productId 不为空) |
| 操作 |
弹出确认框"确认此工单?确认后将不可编辑。",确认后调用确认接口 |
| 权限 |
mes:pro:workorder:edit |
| 结果 |
status 从 PREPARE → CONFIRMED(已确认),确认后工单不可编辑,可进行领料、排产等后续操作 |
6.2.5 一键领料按钮
| 项目 |
说明 |
| 显示条件 |
status = CONFIRMED 或 APPROVED |
| 操作 |
确认后自动创建领料单(含全部BOM物料行),跳转领料单编辑页 |
| 权限 |
mes:wm:issueheader:add |
| 详细逻辑 |
见 10.6 一键领料规则 |
6.2.6 完工按钮
| 项目 |
说明 |
| 显示条件 |
status = CONFIRMED 或 APPROVED |
| 操作 |
弹出确认框,确认后调用完工接口 |
| 权限 |
mes:pro:workorder:edit |
| 结果 |
status → FINISHED,记录完成时间,所有关联生产任务也置为完成 |
6.2.7 取消按钮
| 项目 |
说明 |
| 显示条件 |
status = PREPARE 或 CONFIRMED |
| 操作 |
弹出确认框,确认后调用取消接口 |
| 权限 |
mes:pro:workorder:edit |
| 结果 |
status → CANCELED,记录取消时间,所有关联生产任务也置为取消 |
6.3 新增/编辑/查看页按钮
截图参考: 截图中查看页右上角按钮从左到右依次为:新增、编辑、审核、反审核、打印、操作(下拉)、收起
6.3.1 按钮总览(按截图从左到右排列)
| 序号 |
按钮 |
颜色/样式 |
显示条件 |
说明 |
| 1 |
新增 |
primary (蓝色) |
查看模式 |
跳转新增页面 |
| 2 |
编辑 |
default (灰色) |
查看模式,status=PREPARE 时可点击,其他状态置灰 |
跳转编辑页面 |
| 3 |
审核 |
success (绿色) |
查看模式或编辑模式(已保存),status=PREPARE |
调用审核接口,PREPARE→CONFIRMED |
| 4 |
反审核 |
warning (黄色) |
查看模式,status=CONFIRMED 或 APPROVED |
调用反审核接口,CONFIRMED→PREPARE |
| 5 |
打印 |
default + 打印图标 |
查看模式 |
打印工单 |
| 6 |
操作 |
default 下拉按钮 |
查看模式 |
下拉菜单:挂起、关闭、调整工期、调整产线 |
| 7 |
收起/展开 |
primary (蓝色) |
始终显示 |
折叠/展开表头表单区域 |
| - |
保存 |
primary (蓝色) |
新增/编辑模式 |
保存工单数据 |
| - |
取消 |
default (灰色) |
新增/编辑模式 |
返回列表页 |
6.3.2 新增按钮
| 项目 |
说明 |
| 显示条件 |
查看模式 |
| 操作 |
路由跳转到新增页面 /production/work-order/new |
6.3.3 编辑按钮
| 项目 |
说明 |
| 显示条件 |
查看模式 |
| 可点击条件 |
仅 status = PREPARE(草稿)时可点击,其他状态置灰(disabled) |
| 操作 |
路由跳转到编辑页面 /production/work-order/edit/{id} |
6.3.4 审核按钮
| 项目 |
说明 |
| 显示条件 |
查看模式或编辑模式(已保存),status = PREPARE(草稿) |
| 前置条件 |
工单已保存(workorderId 不为空),产品信息已填写 |
| 操作 |
弹出确认框"确认审核此工单?审核后不可编辑。"→ 调用审核接口 |
| 结果 |
status 从 PREPARE → CONFIRMED(已确认) |
| 成功提示 |
"审核成功" |
| 成功后行为 |
页面刷新为查看模式,状态变为"审核",编辑按钮置灰,显示反审核按钮 |
6.3.5 反审核按钮
| 项目 |
说明 |
| 显示条件 |
查看模式,status = CONFIRMED 或 APPROVED |
| 前置条件 |
工单没有关联的已执行领料单或已完工记录(如有,需先处理) |
| 操作 |
弹出确认框"确认反审核?反审核后可重新编辑。"→ 调用反审核接口 |
| 结果 |
status 从 CONFIRMED → PREPARE(草稿) |
| 成功提示 |
"反审核成功" |
| 成功后行为 |
页面刷新,状态变为"开立",编辑按钮可点击 |
6.3.6 打印按钮
| 项目 |
说明 |
| 显示条件 |
查看模式 |
| 操作 |
触发浏览器打印预览,打印工单详情(含表头、BOM 物料) |
| 图标 |
打印机图标 |
6.3.7 操作下拉按钮
| 项目 |
说明 |
| 显示条件 |
查看模式 |
| 组件 |
el-dropdown 下拉菜单 |
下拉菜单项:
| 菜单项 |
显示条件 |
操作 |
说明 |
| 挂起 |
status = CONFIRMED |
调用挂起接口,status → PAUSE(如支持) |
暂停工单执行 |
| 关闭 |
status = CONFIRMED/FINISHED |
调用关闭接口 |
关闭/归档工单 |
| 调整工期 |
status = CONFIRMED |
弹出弹窗修改订单交期/需求日期/生产日期 |
调整生产时间安排 |
| 调整产线 |
status = CONFIRMED |
弹出弹窗修改生产线 |
切换生产线 |
6.3.8 收起/展开按钮
| 项目 |
说明 |
| 位置 |
页面右上角最右侧 |
| 颜色 |
primary (蓝色) |
| 操作 |
折叠/展开表头表单区域 |
6.3.9 保存按钮(新增/编辑模式)
| 项目 |
说明 |
| 显示条件 |
新增/编辑模式 |
| 颜色 |
primary (蓝色) |
| 触发条件 |
表单校验通过 |
| 操作 |
保存工单数据,后端自动生成/更新 BOM 物料行 |
| 成功提示 |
"保存成功" |
6.3.10 取消按钮(新增/编辑模式)
| 项目 |
说明 |
| 显示条件 |
新增/编辑模式 |
| 颜色 |
default (灰色) |
| 操作 |
返回列表页 |
6.4 领料明细区按钮
截图参考: 领料明细区域右上角有两个按钮:「一键领料」(绿色勾图标)和「+ 领料」(蓝色)
6.4.1 一键领料按钮
| 项目 |
说明 |
| 位置 |
领料明细区域右上角 |
| 颜色 |
success (绿色) + 勾图标 |
| 显示条件 |
查看模式,status = CONFIRMED 或 APPROVED |
| 操作 |
确认弹窗 → 调用一键领料接口(根据 BOM 物料自动创建领料单)→ 刷新领料明细列表 |
| 详细逻辑 |
见 10.7 一键领料规则 |
6.4.2 + 领料按钮
| 项目 |
说明 |
| 位置 |
一键领料按钮右侧 |
| 颜色 |
primary (蓝色) |
| 显示条件 |
查看模式,status = CONFIRMED 或 APPROVED |
| 操作 |
跳转到生产领料单新增页面,URL 携带 workorderId 和 workorderCode 参数 |
| 路由 |
/warehouse/issue/new?workorderId={id}&workorderCode={code} |
6.5 完工明细区按钮
截图参考: 完工明细区域右上角有两个按钮:「一键报工」(绿色勾图标)和「+ 报工」(蓝色)
6.5.1 一键报工按钮
| 项目 |
说明 |
| 位置 |
完工明细区域右上角 |
| 颜色 |
success (绿色) + 勾图标 |
| 显示条件 |
查看模式,status = CONFIRMED 或 APPROVED |
| 操作 |
确认弹窗 → 调用一键报工接口(或弹出报工弹窗填写完工数量/质量)→ 刷新完工明细列表 |
6.5.2 + 报工按钮
| 项目 |
说明 |
| 位置 |
一键报工按钮右侧 |
| 颜色 |
primary (蓝色) |
| 显示条件 |
查看模式,status = CONFIRMED 或 APPROVED |
| 操作 |
跳转到报工页面或打开报工弹窗,手动填写完工数量和质量信息 |
7. 页面交互规则
7.1 列表页交互
| 序号 |
交互场景 |
交互规则 |
| 1 |
页面首次加载 |
默认加载第1页数据,按创建时间降序排列 |
| 2 |
搜索操作 |
点击搜索按钮,重置 pageNum=1,保持当前 pageSize 不变 |
| 3 |
工单编码点击 |
点击工单编码列蓝色链接文字,路由跳转到查看页面 |
| 4 |
状态标签 |
用 el-tag 组件渲染:草稿=info(灰), 已确认=primary(蓝), 已审核=success(绿), 已完成=success(绿), 已取消=danger(红) |
| 5 |
空数据状态 |
列表无数据时显示空状态图标和"暂无数据"文字 |
| 6 |
批量操作 |
勾选多条记录后,批量操作按钮(删除)启用;未勾选时置灰 |
| 7 |
删除校验 |
仅草稿状态允许删除,非草稿状态弹出提示"只能删除草稿状态单据!" |
| 8 |
确认工单 |
草稿状态行点击「确认」→ 确认弹窗 → 调用确认接口 → 状态变为已确认 → 刷新列表 |
| 9 |
一键领料 |
已确认/已审核状态行点击「一键领料」→ 确认弹窗 → 调用一键领料接口 → 跳转领料单编辑页 |
7.2 新增/编辑页交互
| 序号 |
交互场景 |
交互规则 |
| 1 |
页面加载(新增) |
空白表单,工单类型默认"自产",来源类型固定为"生产计划",生产日期默认当天 |
| 2 |
页面加载(编辑) |
调用详情接口加载工单数据和 BOM 物料行 |
| 3 |
选择计划单 |
点击「选择」→ 打开选择生产计划单弹窗(仅已审核)→ 选中计划单 → 确定 → 自动填充产品信息、客户信息、数量 |
| 4 |
选择工艺路线 |
点击「选择」→ 打开选择工艺路线弹窗(仅已启用)→ 选中路线 → 确定 → 填充 routeId/routeCode/routeName |
| 5 |
保存操作 |
前端表单校验 → 调用保存接口 → 后端自动生成 BOM 行 → 成功提示 |
| 6 |
产品/数量变化 |
编辑时若产品ID或生产数量发生变化,保存时后端会删除旧 BOM 行并重新生成 |
| 7 |
工单编码唯一 |
保存时后端校验工单编码唯一性,重复则提示"生产工单编号已存在!" |
| 8 |
表头折叠 |
点击「收起」→ 表头表单区域收起;点击「展开」→ 恢复 |
| 9 |
确认工单 |
编辑页保存后或查看页:点击「确认」→ 确认弹窗 → 调用确认接口 → 成功提示"确认成功" → 页面刷新为查看模式,状态变为"已确认" |
7.3 查看页交互
| 序号 |
交互场景 |
交互规则 |
| 1 |
审核工单 |
status=PREPARE 时点击「审核」→ 确认弹窗"确认审核此工单?审核后不可编辑。" → 确认 → 调用审核接口 → 成功后页面刷新,状态变为"审核",编辑按钮置灰,显示反审核和领料按钮 |
| 2 |
反审核 |
status=CONFIRMED/APPROVED 时点击「反审核」→ 确认弹窗"确认反审核?反审核后可重新编辑。" → 确认 → 调用反审核接口 → 成功后页面刷新,状态回到"开立",编辑按钮可点击 |
| 3 |
一键领料 |
status=CONFIRMED/APPROVED 时在领料明细区点击「一键领料」→ 确认弹窗 → 调用一键领料接口 → 成功后刷新领料明细列表 |
| 4 |
+ 领料 |
点击「+ 领料」→ 跳转到领料单新增页,URL 携带 workorderId 和 workorderCode |
| 5 |
一键报工 |
status=CONFIRMED/APPROVED 时在完工明细区点击「一键报工」→ 弹出报工弹窗或调用接口 → 刷新完工明细列表 |
| 6 |
+ 报工 |
点击「+ 报工」→ 跳转到报工页面或打开报工弹窗 |
| 7 |
打印 |
点击「打印」→ 触发浏览器打印预览 |
| 8 |
操作-挂起 |
点击操作下拉→「挂起」→ 暂停工单执行 |
| 9 |
操作-关闭 |
点击操作下拉→「关闭」→ 关闭/归档工单 |
| 10 |
操作-调整工期 |
点击操作下拉→「调整工期」→ 弹出弹窗修改日期 |
| 11 |
操作-调整产线 |
点击操作下拉→「调整产线」→ 弹出弹窗修改生产线 |
7.4 表单校验规则
表头校验
| 字段 |
规则 |
提示信息 |
| workorderCode |
系统自动生成,无需前端校验 |
后端自动生成并校验唯一性 |
| workorderName |
必填 |
工单名称不能为空 |
| sourceCode |
必填 |
请选择生产计划单 |
| productId |
必填 |
请先选择计划单号(产品信息由计划单带入) |
| quantity |
必填,min=0.01 |
生产数量必须大于0 |
| productionDate |
必填 |
生产日期不能为空 |
| unitOfMeasure |
必填 |
单位不能为空(选择计划单后自动带入) |
8. 接口调用说明
8.1 接口总览
| 序号 |
功能 |
方法 |
路径 |
说明 |
| 1 |
查询工单列表 |
GET |
/mes/pro/workorder/list |
分页查询生产工单列表 |
| 2 |
获取工单详情 |
GET |
/mes/pro/workorder/{workorderId} |
获取单条工单详情 |
| 3 |
新增工单 |
POST |
/mes/pro/workorder |
创建新工单,自动生成BOM行 |
| 4 |
修改工单 |
PUT |
/mes/pro/workorder |
更新工单,产品/数量变化时重新生成BOM |
| 5 |
删除工单 |
DELETE |
/mes/pro/workorder/{workorderIds} |
批量删除工单及关联BOM行 |
| 6 |
导出工单 |
POST |
/mes/pro/workorder/export |
导出工单列表到Excel |
| 7 |
审核工单 |
PUT |
/mes/pro/workorder/confirm/{workorderId} |
草稿→已确认(审核) |
| 8 |
反审核工单 |
PUT |
/mes/pro/workorder/unconfirm/{workorderId} |
已确认→草稿(反审核) |
| 9 |
完工工单 |
PUT |
/mes/pro/workorder/finish/{workorderId} |
工单完工,关联任务完成 |
| 10 |
取消工单 |
PUT |
/mes/pro/workorder/cancel/{workorderId} |
取消工单,关联任务取消 |
| 11 |
工单BOM组成列表 |
GET |
/mes/pro/workorderbom/list |
表单用:获取工单直接BOM组成行 |
| 12 |
工单物料需求(递归) |
GET |
/mes/pro/workorder/listItems |
递归展开BOM到最底层物料(仅分析用) |
| 13 |
一键领料 |
POST |
/mes/pro/workorder/quickIssue/{workorderId} |
根据BOM自动创建领料单 |
| 14 |
生产计划单列表 |
GET |
/erp/mp/plan/list |
选择计划单弹窗数据源 |
| 15 |
生产计划单详情 |
GET |
/erp/mp/plan/{planId} |
获取计划单详情 |
| 16 |
工艺路线列表 |
GET |
/mes/pro/proroute/list |
选择工艺路线弹窗数据源 |
| 17 |
选择客户 |
GET |
/mes/md/client/list |
客户选择(备用) |
8.2 接口详细说明
8.2.1 查询工单列表
请求参数:
| 参数名 |
类型 |
必填 |
说明 |
| pageNum |
integer |
否 |
页码,默认1 |
| pageSize |
integer |
否 |
每页数,默认10 |
| workorderCode |
string |
否 |
工单编码(模糊) |
| workorderName |
string |
否 |
工单名称(模糊) |
| workorderType |
string |
否 |
工单类型 |
| sourceCode |
string |
否 |
计划单号(模糊) |
| productCode |
string |
否 |
产品编号(模糊) |
| productName |
string |
否 |
产品名称(模糊) |
| status |
string |
否 |
工单状态 |
| beginProductionDate |
string |
否 |
生产日期起 (yyyy-MM-dd) |
| endProductionDate |
string |
否 |
生产日期止 (yyyy-MM-dd) |
响应示例:
8.2.2 获取工单详情
响应: 返回工单详情对象,含 routeId/routeCode/routeName 等新增字段。BOM 物料行需通过 listItems 接口单独获取。
8.2.3 新增工单
请求体:
说明:
workorderCode 传空字符串或不传,后端通过 AutoCodeUtil.genSerialCode(SCGD_CODE, "") 自动生成
orderSource 固定为 "PLAN",sourceCode 必须为有效的计划单号
- 后端自动根据
productId 查找产品 BOM(md_product_bom),生成 pro_workorder_bom 行记录
- BOM 用量计算: 每个 BOM 组件的
quantity = 生产数量(workorder.quantity) × BOM单位用量(bom.quantity)
8.2.4 修改工单
请求体: 同新增,但包含 workorderId。若产品ID或生产数量变化,后端重新生成 BOM。
8.2.5 删除工单
业务规则: 仅允许删除草稿(PREPARE)状态;同时删除关联 pro_workorder_bom 行。
8.2.6 审核工单
路径参数:
| 参数名 |
类型 |
必填 |
说明 |
| workorderId |
integer |
是 |
工单ID |
业务规则:
- 仅允许草稿(PREPARE)状态的工单执行审核操作
- 工单必须有产品信息(productId 不为空)
- 审核后状态变为 CONFIRMED(已确认/审核)
- 审核后工单不可编辑,可进行领料、排产等后续操作
后端实现: 需在 ProWorkorderController 中新增 confirm 端点,校验状态后将 status 设为 UserConstants.ORDER_STATUS_CONFIRMED。
8.2.7 反审核工单
路径参数:
| 参数名 |
类型 |
必填 |
说明 |
| workorderId |
integer |
是 |
工单ID |
业务规则:
- 仅允许已确认(CONFIRMED)或已审核(APPROVED)状态的工单执行反审核
- 反审核前需校验:工单没有已执行的领料单或已完工记录(如有则提示"存在已执行的下游单据,无法反审核")
- 反审核后状态变为 PREPARE(草稿),可重新编辑
- 清空审核员和审核日期
后端实现: 需在 ProWorkorderController 中新增 unconfirm 端点,校验状态和下游引用后将 status 设为 UserConstants.ORDER_STATUS_PREPARE。
8.2.8 完工工单
业务规则: 将工单状态设为 FINISHED,记录完成时间;同时将该工单下所有生产任务状态设为 FINISHED。
8.2.9 取消工单
业务规则: 将工单状态设为 CANCELED,记录取消时间;同时将该工单下所有生产任务状态设为 CANCELED。
8.2.10 一键领料
说明: 根据工单 BOM 物料组成自动创建一张生产领料单。
业务逻辑:
- 查询工单详情及 BOM 物料列表
- 创建
wm_issue_header:
issueCode:自动生成领料单编号
issueName:自动生成,如"WO20260213001-领料单"
workorderId / workorderCode:关联本工单
clientId / clientCode / clientName:从工单带入
status:PREPARE(草稿)
- 遍历工单 BOM 物料,为每条 BOM 行创建
wm_issue_line:
itemId / itemCode / itemName:BOM 物料信息
specification:BOM 物料规格
unitOfMeasure / unitName:BOM 物料单位
quantityIssued:= BOM 预计使用量(quantity)
- 返回新建的领料单 ID(
issueId),前端跳转到领料单编辑页
响应示例:
其中 data 为新创建的领料单 ID。
8.2.11 工单 BOM 组成列表(表单用)
请求参数:
| 参数名 |
类型 |
必填 |
说明 |
| workorderId |
integer |
是 |
工单ID |
| pageNum |
integer |
否 |
页码,默认1 |
| pageSize |
integer |
否 |
每页数,默认100(建议设大以加载全部) |
说明: 直接查询 pro_workorder_bom 表,返回该工单的直接 BOM 组成行。前端表单 BOM 子表应使用此接口。
响应字段: 返回 ProWorkorderBom 实体,字段名与前端 WorkOrderBom 接口直接对应:
| 字段 |
说明 |
| lineId |
BOM 行 ID |
| workorderId |
工单 ID |
| itemId |
物料 ID |
| itemCode |
物料编号 |
| itemName |
物料名称 |
| itemSpc |
规格型号 |
| unitOfMeasure |
单位编码 |
| unitName |
单位名称 |
| itemOrProduct |
物料/产品标识 |
| quantity |
预计使用量 |
| remark |
备注 |
8.2.12 工单物料需求清单(递归展开,仅分析用)
请求参数:
| 参数名 |
类型 |
必填 |
说明 |
| workorderId |
integer |
是 |
工单ID |
说明: 根据工单 BOM 递归展开(最多20层),返回最底层物料的汇总需求清单。同一物料编码的数量自动合并。返回 MdProductBom 格式(bomItemCode/bomItemName 等字段名),不要用于表单 BOM 子表显示。
8.2.13 工艺路线列表
请求参数:
| 参数名 |
类型 |
必填 |
说明 |
| routeCode |
string |
否 |
工艺路线编号(模糊) |
| routeName |
string |
否 |
工艺路线名称(模糊) |
| enableFlag |
string |
否 |
是否启用,默认 Y |
| pageNum |
integer |
否 |
页码 |
| pageSize |
integer |
否 |
每页条数 |
响应: 返回工艺路线列表,字段含 routeId、routeCode、routeName、routeDesc、enableFlag。
9. 状态流转
9.1 工单状态流转图
9.2 状态说明
| 状态 |
编码 |
可执行操作 |
说明 |
| 草稿 |
PREPARE |
编辑、保存、删除、审核、取消 |
初始状态,可自由编辑 |
| 审核/已确认 |
CONFIRMED |
查看、反审核、完工、取消、排产、一键领料、手动领料、一键报工、报工 |
已审核,可进行生产执行 |
| 已审核 |
APPROVED |
同 CONFIRMED |
审核生效(等同已确认) |
| 已完成 |
FINISHED |
查看 |
工单结案,不可修改 |
| 已取消 |
CANCELED |
查看 |
工单已取消,不可修改 |
10. 业务规则
10.1 编码规则
| 规则 |
说明 |
| 生成方式 |
后端自动生成,使用统一编码引擎 AutoCodeUtil.genSerialCode() |
| 编码规则常量 |
UserConstants.SCGD_CODE = "WORKORDER_CODE"(Java 常量名 SCGD_CODE,值为数据库中已配置的规则编码 WORKORDER_CODE) |
| 调用位置 |
ProWorkorderController.add() 方法中,保存前自动生成(已实现) |
| 前端表现 |
工单编码字段为只读,显示占位符"系统自动生成"(已实现) |
| 唯一性 |
工单编码全局唯一,后端校验 |
| 数据库配置 |
sys_auto_code_rule 表中规则编码为 WORKORDER_CODE(已在数据库中配置,无需新增) |
实现状态: 已完成。ProWorkorderController.add() 中注入了 AutoCodeUtil,在保存前自动生成编码:
其中 UserConstants.SCGD_CODE 的值为 "WORKORDER_CODE",对应数据库中已配置的编码规则。
10.2 来源规则
| 规则 |
说明 |
| 唯一来源 |
生产订单只能来源于生产计划单,order_source 固定为 PLAN |
| 计划单选择 |
新增时必须选择一个已审核(APPROVED)的生产计划单 |
| 自动带入 |
选择计划单后自动带入:产品信息、客户信息、生产数量 |
| 不可变更 |
保存后来源计划单号不可变更 |
10.3 工艺路线规则
| 规则 |
说明 |
| 可选 |
工艺路线为非必填字段,可在新增/编辑时选择 |
| 数据来源 |
工艺路线来自 pro_route 表,通过 GET /mes/pro/proroute/list 获取 |
| 默认过滤 |
默认传 enableFlag=Y |
| 产品关联 |
可选:根据已选产品通过 pro_route_product 过滤对应的工艺路线 |
10.4 BOM 生成规则
| 规则 |
说明 |
| 触发条件 |
新增工单保存时自动生成 |
| 数据来源 |
产品的 BOM 组成(md_product_bom) |
| 用量计算 |
预计使用量 = 产品 BOM 单位用量 × 生产数量 |
| 递归展开 |
若 BOM 物料本身也有子 BOM,递归展开(最多20层) |
| 数量合并 |
同一物料编码的需求量自动合并 |
| 变更处理 |
修改时若产品或数量变化,删除旧 BOM 行并重新生成 |
10.5 删除规则
| 规则 |
说明 |
| 前置条件 |
仅草稿(PREPARE)状态允许删除 |
| 级联删除 |
删除工单时同时删除关联的 pro_workorder_bom 行 |
10.6 审核/反审核规则
审核规则:
| 规则 |
说明 |
| 前置条件 |
仅草稿(PREPARE)状态允许审核 |
| 前置条件 |
工单必须已保存(workorderId 不为空) |
| 前置条件 |
产品信息必须已填写(productId 不为空) |
| 状态变更 |
status 从 PREPARE → CONFIRMED |
| 审核后效果 |
工单变为只读,不可编辑;自动填充审核员和审核日期 |
| 审核后操作 |
可进行:反审核、一键领料、手动领料、一键报工、报工、排产、完工、取消 |
反审核规则:
| 规则 |
说明 |
| 前置条件 |
仅已确认(CONFIRMED)或已审核(APPROVED)状态允许反审核 |
| 下游校验 |
反审核前校验:没有已执行(FINISHED)的领料单,没有完工记录 |
| 状态变更 |
status 从 CONFIRMED → PREPARE |
| 反审核后效果 |
工单恢复可编辑,清空审核员和审核日期 |
| 按钮变化 |
编辑按钮恢复可点击,隐藏领料/报工按钮 |
10.7 一键领料规则
| 规则 |
说明 |
| 前置条件 |
工单状态为已确认(CONFIRMED)或已审核(APPROVED) |
| 前置条件 |
工单必须有至少一条 BOM 物料行 |
| 创建领料单头 |
自动创建 wm_issue_header,关联 workorderId/workorderCode,状态=PREPARE |
| 创建领料行 |
遍历工单 BOM 物料,为每条创建 wm_issue_line,领料数量=预计使用量 |
| 返回结果 |
返回新建的领料单 ID,前端跳转领料单编辑页 |
| 可重复 |
同一工单可多次执行一键领料(分批领料场景) |
| 用户可调整 |
领料单创建后为草稿状态,用户可调整数量后再执行出库 |
10.8 手动领料规则
| 规则 |
说明 |
| 前置条件 |
工单状态为已确认(CONFIRMED)或已审核(APPROVED) |
| 操作方式 |
跳转到领料单新增页面,URL 携带 workorderId 和 workorderCode |
| 自动关联 |
领料单新增页自动填充工单ID和工单编码 |
| 手动添加 |
用户手动选择物料并填写领料数量 |
10.9 完工/取消规则
| 操作 |
影响范围 |
说明 |
| 完工 |
工单 + 所有生产任务 |
工单和所有关联生产任务状态都设为 FINISHED |
| 取消 |
工单 + 所有生产任务 |
工单和所有关联生产任务状态都设为 CANCELED |
11. 前端组件设计
11.1 文件结构
11.2 路由配置
12. 数据模型
12.1 表关系图
12.2 数据同步方向
- 同步方向: ERP → MOM(单向同步)
- 同步触发: 工单创建/修改/状态变更时同步
附录A: 状态标签颜色映射
附录B: 权限标识汇总
| 权限标识 |
说明 |
对应操作 |
| mes:pro:workorder:list |
列表查询 |
查看生产工单列表 |
| mes:pro:workorder:query |
详情查询 |
查看工单详情 |
| mes:pro:workorder:add |
新增 |
新增生产工单 |
| mes:pro:workorder:edit |
编辑 |
修改工单、确认、完工、取消 |
| mes:pro:workorder:remove |
删除 |
删除生产工单 |
| mes:pro:workorder:export |
导出 |
导出工单列表 |
| mes:wm:issueheader:add |
领料 |
一键领料、创建领料单 |
修订历史
| 版本 |
日期 |
修订内容 |
修订人 |
| 1.0.0 |
2026-02-13 |
初始版本,基于后端 ProWorkorder 实体类、ProWorkorderController 控制器及 pro_workorder 表结构编写完整页面开发说明 |
System |
| 2.0.0 |
2026-02-13 |
重大业务逻辑调整:(1) 生产订单只来源于生产计划单,新增时选择计划单号自动带入产品/客户信息,移除手动创建和销售订单直接创建;(2) 新增「一键领料」功能,根据 BOM 自动创建领料单;(3) 新增「创建领料单」按钮,支持手动跳转领料单页面;(4) 需求日期改为生产日期(production_date);(5) 表头新增工艺路线选择(route_id/route_code/route_name),从 pro_route 表选取 |
System |
| 2.1.0 |
2026-02-13 |
完善优化:(1) 工单编码改为后端通过 AutoCodeUtil 自动生成(SCGD_CODE),前端只读;(2) 修复工艺路线弹窗列表为空:移除默认 enableFlag=Y 过滤;(3) 明确 BOM 子表使用 /mes/pro/workorderbom/list 接口(直接 BOM),而非 /listItems(递归展开格式不兼容) |
System |
| 2.2.0 |
2026-02-13 |
补全确认状态处理:新增确认按钮和接口 |
System |
| 3.1.0 |
2026-02-13 |
根据截图全面完善(参考 screenshot/生产管理-生产工单表单-查看操作等.png):(1) 表头改为5列布局,新增字段:业务类型、操作员、审核员、审核日期、跟单编号、订单交期、需求日期、图纸号、生产线、加工时长;(2) 查看页按钮完整定义:新增→编辑→审核→反审核→打印→操作下拉(挂起/关闭/调整工期/调整产线)→收起;(3) 新增反审核接口 PUT /mes/pro/workorder/unconfirm/{id},支持 CONFIRMED→PREPARE 并校验下游单据;(4) 新增领料明细子表(4.4)和完工明细子表(4.5),各含一键操作和手动操作按钮;(5) 新增6.4领料明细区按钮(一键领料+领料)和6.5完工明细区按钮(一键报工+报工);(6) 完善状态流转图增加反审核路径;(7) 审核/反审核规则完整定义(10.6) |
System |