Files
my-mom-system/prd/mom系统生产订单-页面开发说明文档.md
panchengyong c28ada5050 commit content
2026-03-06 02:02:59 +08:00

78 KiB
Raw Blame History

生产订单(生产工单)- 页面设计开发说明文档

版本: 3.1.0
创建日期: 2026-02-13
更新日期: 2026-02-13
所属模块: 生产管理 > 生产订单
前端路由: /mes/pro/workorderMOM 端);/production/work-orderERP 前端)
关联文档: erp与mom数据库表映射对照表MOM系统数据升级方案-销售采购生产计划生产计划.mdmom系统生产领料单-页面开发说明文档


目录

  1. 业务流程总览
  2. 页面概述
  3. 页面结构
  4. 列表页设计
  5. 新增/编辑页设计
  6. 数据字段定义
  7. 按钮操作说明
  8. 页面交互规则
  9. 接口调用说明
  10. 状态流转
  11. 业务规则
  12. 前端组件设计
  13. 数据模型

0. 业务流程总览

0.1 生产订单在 MOM/ERP 中的定位

生产订单(生产工单)是 生产计划 → 生产执行 链条中的核心节点。生产计划单经过 BOM 运算并下发后,用户通过选择已审核的生产计划单来创建生产工单,工单驱动后续的生产任务排产、领料、报工、完工入库等生产执行环节。

重要约束: 生产订单只能来源于生产计划单,不支持手动创建或从销售订单直接创建。新增生产订单时必须选择一个已审核的生产计划单,系统自动带入产品、客户、数量等信息。

┌──────────────┐     ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  销售订单    │────►│ 生产计划单   │────►│ BOM运算/下发  │────►│ 物料清单MBOM │
│  (销售确认)  │     │ (引入订单)   │     │ (展开需求)   │     │ (生产件等)   │
└──────────────┘     └──────────────┘     └──────────────┘     └──────┬───────┘
                                                                      │
                                                              选择计划单,创建工单
                                                                      ▼
┌──────────────┐     ┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│ 完工入库     │◄────│ 生产报工     │◄────│ 生产任务     │◄────│ ★ 生产工单   │
│ (库存增加)   │     │ (工序报工)   │     │ (排产执行)   │     │ (当前页面)   │
└──────────────┘     └──────────────┘     └──────────────┘     └──────┬───────┘
                                                                      │
                                                              一键领料 / 手动领料
                                                                      ▼
                                                               ┌──────────────┐
                                                               │ 生产领料单   │
                                                               │ (物料出库)   │
                                                               └──────────────┘

0.2 端到端业务流程图

 销售订单确认
       │
       ▼
 ┌─────────────────┐     引入订单       ┌─────────────────┐
 │   生产计划单     │ ◄───────────────── │ 销售订单/备货单  │
 │  - 订单信息子表  │                    │                 │
 └────────┬────────┘                    └─────────────────┘
          │ BOM运算、下发、审核
          ▼
 ┌─────────────────┐  选择计划单号      ┌─────────────────┐
 │  已审核计划单    │ ──────────────── ► │ ★ 生产工单      │
 │  - 产品信息      │  自动带入产品/客户  │ - 工艺路线      │
 │  - 生产数量      │                    │ - BOM物料组成   │
 └─────────────────┘                    └────────┬────────┘
                                                 │
                          ┌──────────────────────┤
                          │                      │
                          ▼                      ▼
                 ┌─────────────────┐    ┌─────────────────┐
                 │   生产领料单     │    │   生产任务       │
                 │  一键领料/手动   │    │  - 工序排产      │
                 └────────┬────────┘    └────────┬────────┘
                          │ 出库                  │ 报工
                          ▼                      ▼
                 ┌─────────────────┐    ┌─────────────────┐
                 │   库存扣减       │    │   生产报工       │
                 └─────────────────┘    └────────┬────────┘
                                                 │ 完工
                                                 ▼
                                        ┌─────────────────┐
                                        │   完工入库       │
                                        │  - 产成品入库    │
                                        └─────────────────┘

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 整体布局

┌─────────────────────────────────────────────────────────────────┐
│                     顶部导航栏 (64px)                            │
├────────┬────────────────────────────────────────────────────────┤
│ 左侧   │  面包屑: 首页 / 生产管理 / 生产订单                      │
│ 菜单   │  ┌────────────────────────────────────────────────┐    │
│ (200px │  │ Tab标签: ● 生产订单                            │    │
│  /64px)│  ├────────────────────────────────────────────────┤    │
│        │  │ 查询区域 (搜索条件)                              │    │
│ 生产管 │  ├────────────────────────────────────────────────┤    │
│ 理     │  │ 工具栏 (操作按钮)                                │    │
│ ├生产  │  ├────────────────────────────────────────────────┤    │
│  订单★ │  │ 数据表格                                        │    │
│ ├生产  │  │                                                │    │
│  任务  │  ├────────────────────────────────────────────────┤    │
│ ├生产  │  │ 分页组件                                        │    │
│  领料  │  └────────────────────────────────────────────────┘    │
├────────┴────────────────────────────────────────────────────────┤

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 — 查看页完整布局,含所有操作按钮和三个子表区域。

┌──────────────────────────────────────────────────────────────────────────────────────┐
│ 生产订单       [新增][编辑][审核][反审核][打印][操作▼][收起]                             │
│                                               操作下拉: 挂起/关闭/调整工期/调整产线     │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ 表头表单区 (5列布局可折叠)                                                          │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐                             │
│ │ 单据编码  │ 业务类型  │ 计划单号  │ 物料编码  │ 图纸号    │                             │
│ │ 单据日期  │ 操作员    │ 跟单编号  │ 物料名称  │ 工艺路线  │                             │
│ │ 单据状态  │ 审核员    │ 订单交期  │ 生产总数  │ 生产线    │                             │
│ │ 业务状态  │ 审核日期  │ 需求日期  │ 备注信息  │ 生产日期  │                             │
│ │           │          │          │          │ 加工时长  │                             │
│ └──────────┴──────────┴──────────┴──────────┴──────────┘                             │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ [订单信息子表] 序号│物料编码│物料名称│主计量│生产数量│质量要求│备注                       │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ 领料明细                                            [一键领料][+ 领料]                 │
│ 序号│跟单编号│单据编码│单据状态│业务状态│生产订单号│物料编码│物料名称│领用数量│出库数量│日期  │
├──────────────────────────────────────────────────────────────────────────────────────┤
│ 完工明细                                            [一键报工][+ 报工]                 │
│ 序号│跟单编号│单据编码│单据状态│业务状态│生产订单号│物料编码│物料名称│完工数量│质量│日期     │
└──────────────────────────────────────────────────────────────────────────────────────┘

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 接口直接对应(itemCodeitemNameitemSpcunitOfMeasureunitNameitemOrProductquantity)。

注意: 不要使用 GET /mes/pro/workorder/listItems 接口加载表单 BOM 子表。listItems 是递归展开到最底层物料并合并同编码数量的接口,返回的是 MdProductBom 格式(字段名为 bomItemCode/bomItemName 等),适用于物料需求分析场景,不适用于展示直接 BOM 组成。

4.4 领料明细子表

截图对照: 截图中标题为"领料明细",右上角有「一键领料」和「+ 领料」按钮。

领料明细子表展示该工单关联的所有生产领料单记录(只读),数据来源为 wm_issue_header + wm_issue_lineworkorder_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 实体作为查询参数,其中 routeCoderouteName 支持模糊搜索,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_idroute_coderoute_name 三个工艺路线字段
  • order_source 固定为 PLANsource_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 查询工单列表

GET /mes/pro/workorder/list

请求参数:

参数名 类型 必填 说明
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)

响应示例:

{
  "total": 25,
  "rows": [
    {
      "workorderId": 1,
      "workorderCode": "WO20260213001",
      "workorderName": "组装电脑5400生产任务",
      "workorderType": "SELF",
      "orderSource": "PLAN",
      "sourceCode": "SCJH000096",
      "productId": 100,
      "productCode": "0103000002",
      "productName": "组装电脑5400",
      "productSpc": "",
      "unitOfMeasure": "台",
      "routeId": 5,
      "routeCode": "RT001",
      "routeName": "电脑组装工艺路线",
      "quantity": 170.00,
      "quantityProduced": 50.00,
      "quantityChanged": 0.00,
      "quantityScheduled": 170.00,
      "clientName": "客户A",
      "productionDate": "2026-02-20",
      "status": "CONFIRMED"
    }
  ],
  "code": 200,
  "msg": "查询成功"
}

8.2.2 获取工单详情

GET /mes/pro/workorder/{workorderId}

响应: 返回工单详情对象,含 routeId/routeCode/routeName 等新增字段。BOM 物料行需通过 listItems 接口单独获取。

8.2.3 新增工单

POST /mes/pro/workorder

请求体:

{
  "workorderCode": "",
  "workorderName": "组装电脑5400生产任务",
  "workorderType": "SELF",
  "orderSource": "PLAN",
  "sourceCode": "SCJH000096",
  "productId": 100,
  "productCode": "0103000002",
  "productName": "组装电脑5400",
  "productSpc": "",
  "unitOfMeasure": "台",
  "routeId": 5,
  "routeCode": "RT001",
  "routeName": "电脑组装工艺路线",
  "quantity": 170.00,
  "productionDate": "2026-02-20",
  "clientId": 1,
  "clientCode": "KH001",
  "clientName": "客户A",
  "remark": ""
}

说明:

  • workorderCode 传空字符串或不传,后端通过 AutoCodeUtil.genSerialCode(SCGD_CODE, "") 自动生成
  • orderSource 固定为 "PLAN"sourceCode 必须为有效的计划单号
  • 后端自动根据 productId 查找产品 BOMmd_product_bom),生成 pro_workorder_bom 行记录
  • BOM 用量计算: 每个 BOM 组件的 quantity = 生产数量(workorder.quantity) × BOM单位用量(bom.quantity)

8.2.4 修改工单

PUT /mes/pro/workorder

请求体: 同新增,但包含 workorderId。若产品ID或生产数量变化后端重新生成 BOM。

8.2.5 删除工单

DELETE /mes/pro/workorder/{workorderIds}

业务规则: 仅允许删除草稿(PREPARE)状态;同时删除关联 pro_workorder_bom 行。

8.2.6 审核工单

PUT /mes/pro/workorder/confirm/{workorderId}

路径参数:

参数名 类型 必填 说明
workorderId integer 工单ID

业务规则:

  • 仅允许草稿(PREPARE)状态的工单执行审核操作
  • 工单必须有产品信息productId 不为空)
  • 审核后状态变为 CONFIRMED已确认/审核)
  • 审核后工单不可编辑,可进行领料、排产等后续操作

后端实现: 需在 ProWorkorderController 中新增 confirm 端点,校验状态后将 status 设为 UserConstants.ORDER_STATUS_CONFIRMED

8.2.7 反审核工单

PUT /mes/pro/workorder/unconfirm/{workorderId}

路径参数:

参数名 类型 必填 说明
workorderId integer 工单ID

业务规则:

  • 仅允许已确认(CONFIRMED)或已审核(APPROVED)状态的工单执行反审核
  • 反审核前需校验:工单没有已执行的领料单或已完工记录(如有则提示"存在已执行的下游单据,无法反审核"
  • 反审核后状态变为 PREPARE草稿可重新编辑
  • 清空审核员和审核日期

后端实现: 需在 ProWorkorderController 中新增 unconfirm 端点,校验状态和下游引用后将 status 设为 UserConstants.ORDER_STATUS_PREPARE

8.2.8 完工工单

PUT /mes/pro/workorder/finish/{workorderId}

业务规则: 将工单状态设为 FINISHED记录完成时间同时将该工单下所有生产任务状态设为 FINISHED。

8.2.9 取消工单

PUT /mes/pro/workorder/cancel/{workorderId}

业务规则: 将工单状态设为 CANCELED记录取消时间同时将该工单下所有生产任务状态设为 CANCELED。

8.2.10 一键领料

POST /mes/pro/workorder/quickIssue/{workorderId}

说明: 根据工单 BOM 物料组成自动创建一张生产领料单。

业务逻辑:

  1. 查询工单详情及 BOM 物料列表
  2. 创建 wm_issue_header
    • issueCode:自动生成领料单编号
    • issueName:自动生成,如"WO20260213001-领料单"
    • workorderId / workorderCode:关联本工单
    • clientId / clientCode / clientName:从工单带入
    • statusPREPARE草稿
  3. 遍历工单 BOM 物料,为每条 BOM 行创建 wm_issue_line
    • itemId / itemCode / itemNameBOM 物料信息
    • specificationBOM 物料规格
    • unitOfMeasure / unitNameBOM 物料单位
    • quantityIssued= BOM 预计使用量quantity
  4. 返回新建的领料单 IDissueId),前端跳转到领料单编辑页

响应示例:

{
  "code": 200,
  "msg": "操作成功",
  "data": 123
}

其中 data 为新创建的领料单 ID。

8.2.11 工单 BOM 组成列表(表单用)

GET /mes/pro/workorderbom/list

请求参数:

参数名 类型 必填 说明
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 工单物料需求清单(递归展开,仅分析用)

GET /mes/pro/workorder/listItems

请求参数:

参数名 类型 必填 说明
workorderId integer 工单ID

说明: 根据工单 BOM 递归展开最多20层返回最底层物料的汇总需求清单。同一物料编码的数量自动合并。返回 MdProductBom 格式(bomItemCode/bomItemName 等字段名),不要用于表单 BOM 子表显示

8.2.13 工艺路线列表

GET /mes/pro/proroute/list

请求参数:

参数名 类型 必填 说明
routeCode string 工艺路线编号(模糊)
routeName string 工艺路线名称(模糊)
enableFlag string 是否启用,默认 Y
pageNum integer 页码
pageSize integer 每页条数

响应: 返回工艺路线列表,字段含 routeId、routeCode、routeName、routeDesc、enableFlag。


9. 状态流转

9.1 工单状态流转图

                    ┌──────────────┐
                    │              │
         ┌─────────►  草稿(PREPARE) ◄─────────┐
         │          │              │           │
         │          └──────┬───────┘           │
         │                 │                   │
         │            [审核操作]            [反审核操作]
         │                 │                   │
         │                 ▼                   │
         │          ┌──────────────┐           │
         │          │              │           │
         │          │ 审核/已确认   ├───────────┘
         │          │ (CONFIRMED)  │ ── 可领料/报工/排产
         │          │              │
         │          └──────┬───────┘
         │                 │
         │        ┌────────┼────────┐
         │        │                 │
         │   [完工操作]         [取消操作]
         │        │                 │
         │        ▼                 ▼
         │  ┌──────────────┐ ┌──────────────┐
         │  │              │ │              │
         │  │ 已完成       │ │ 已取消       │
         │  │ (FINISHED)   │ │ (CANCELED)   │
         │  │              │ │              │
         │  └──────────────┘ └──────────────┘
         │                          ▲
         │                          │
         └──────────[取消操作]───────┘

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,在保存前自动生成编码:

if (StringUtils.isEmpty(proWorkorder.getWorkorderCode())) {
    proWorkorder.setWorkorderCode(autoCodeUtil.genSerialCode(UserConstants.SCGD_CODE, ""));
}

其中 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 文件结构

src/
├── api/
│   └── workOrder.ts                       # 生产工单相关API接口定义
├── views/
│   └── Production/
│       └── WorkOrder/
│           ├── index.vue                   # 生产工单列表页
│           ├── form.vue                    # 生产工单新增/编辑/查看页
│           └── components/
│               ├── PlanSelectDialog.vue    # 选择生产计划单弹窗组件
│               ├── RouteSelectDialog.vue   # 选择工艺路线弹窗组件
│               ├── WorkorderBomTable.vue   # BOM物料组成子表组件
│               └── ClientSelectDialog.vue  # 选择客户弹窗组件(备用)

11.2 路由配置

// src/router/index.ts
{
  path: '/production',
  component: Layout,
  meta: { title: '生产管理', icon: 'el-icon-setting' },
  children: [
    {
      path: 'work-order',
      name: 'WorkOrderList',
      component: () => import('@/views/Production/WorkOrder/index.vue'),
      meta: { title: '生产订单', icon: 'el-icon-tickets' }
    },
    {
      path: 'work-order/new',
      name: 'WorkOrderNew',
      component: () => import('@/views/Production/WorkOrder/form.vue'),
      meta: { title: '新增生产工单', activeMenu: '/production/work-order' },
      hidden: true
    },
    {
      path: 'work-order/edit/:id',
      name: 'WorkOrderEdit',
      component: () => import('@/views/Production/WorkOrder/form.vue'),
      meta: { title: '编辑生产工单', activeMenu: '/production/work-order' },
      hidden: true
    },
    {
      path: 'work-order/view/:id',
      name: 'WorkOrderView',
      component: () => import('@/views/Production/WorkOrder/form.vue'),
      meta: { title: '查看生产工单', activeMenu: '/production/work-order' },
      hidden: true
    }
  ]
}

12. 数据模型

12.1 表关系图

┌──────────────────────────┐
│     erp_mp_plan          │
│   (生产计划单)            │      ┌──────────────────────────┐
│ plan_id, plan_code ──────┼─────►│    pro_workorder         │
│ 产品信息, 客户信息        │      │   (生产工单)              │
└──────────────────────────┘      │                          │
                                  │ workorder_id (PK)        │
┌──────────────────────────┐      │ source_code (计划单号)    │
│     pro_route            │      │ product_id, quantity     │
│   (工艺路线)              │      │ route_id (FK) ★          │
│ route_id ────────────────┼─────►│ production_date ★         │
│ route_code, route_name   │      │ status                   │
└──────────────────────────┘      └──────────┬───────────────┘
                                             │ 1:N
                                             ▼
┌──────────────────────────┐      ┌──────────────────────────┐
│   md_product_bom         │      │  pro_workorder_bom       │
│  (产品BOM组成)            │─────►│  (工单BOM物料组成)        │
│                          │      │                          │
│ item_id, bom_item_id     │      │ workorder_id (FK)        │
│ quantity                 │      │ item_id, quantity        │
└──────────────────────────┘      └──────────────────────────┘
                                             │
                              ┌──────────────┼──────────────┐
                              │              │              │
                              ▼              ▼              ▼
               ┌──────────────────┐ ┌──────────────┐ ┌──────────────┐
               │ wm_issue_header  │ │  pro_task     │ │ 完工入库单    │
               │ (生产领料单)      │ │ (生产任务)    │ │              │
               │ workorder_id(FK) │ │ workorder_id  │ │ workorder_id │
               │ ★一键领料/手动   │ │  (FK)         │ │  (FK)        │
               └──────────────────┘ └──────────────┘ └──────────────┘

12.2 数据同步方向

ERP (pro_workorder) ──同步──► MOM (pro_workorder)
  • 同步方向: ERP → MOM单向同步
  • 同步触发: 工单创建/修改/状态变更时同步

附录A: 状态标签颜色映射

// 状态标签类型映射
const statusTagMap = {
  'PREPARE': 'info',       // 灰色 - 草稿
  'CONFIRMED': 'primary',  // 蓝色 - 已确认
  'APPROVED': 'success',   // 绿色 - 已审核
  'FINISHED': 'success',   // 绿色 - 已完成
  'CANCELED': 'danger'     // 红色 - 已取消
}

// 状态标签文字映射
const statusLabelMap = {
  'PREPARE': '草稿',
  'CONFIRMED': '已确认',
  'APPROVED': '已审核',
  'FINISHED': '已完成',
  'CANCELED': '已取消'
}

附录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