【生产】生产报工
生产报工模块,由 yudao-module-mes 后端模块的 pro.feedback 包实现,是生产管理中记录实际产出、驱动库存变更的核心环节。
生产报工是车间操作人员在完成某道工序的生产后,向系统提交实际生产数据的过程。每张报工单关联一个生产任务,记录本次报工的数量(合格品 + 不良品)、报工人、报工时间等信息,并指定审核人进行审批。审批通过后,系统会根据工序的关键工序和质检工序标识,自动触发产品产出入库和物料消耗扣减。
- 报工类型:支持「自行报工」和「统一报工」两种方式。自行报工由操作员本人发起,填写合格品/不良品数量后提交审批;统一报工由负责人统一填报,需额外指定报工人。
- 数量录入规则:根据工序是否标记为质检工序(
checkFlag),动态切换数量填写方式——质检工序只需填写报工数量(待质检拆分合格/不合格),非质检工序需分别填写合格品和不良品数量。 - 审批流程:草稿 → 提交 → 审批中 → 审批通过/驳回。审批通过后,系统自动根据工序级 BOM 扣减物料库存(物料消耗);若为关键工序,还会更新生产任务和工单的已生产数量,并生成产品产出入库记录。
- 质检联动:质检工序的报工审批通过后进入「待检验」状态,由 IPQC 过程检验完成后回调拆分合格/不合格品并入库。
本文涉及表如下图所示:

# 1. 生产报工
生产报工,由 MesProFeedbackController 提供接口。
# 1.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_pro_feedback` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`code` varchar(64) NOT NULL COMMENT '报工单编号',
`type` tinyint NOT NULL COMMENT '报工类型',
`channel` varchar(64) DEFAULT NULL COMMENT '报工途径',
`feedback_time` datetime DEFAULT NULL COMMENT '报工时间',
`workstation_id` bigint NOT NULL COMMENT '工作站编号',
`route_id` bigint NOT NULL COMMENT '工艺路线编号',
`process_id` bigint NOT NULL COMMENT '工序编号',
`work_order_id` bigint NOT NULL COMMENT '生产工单编号',
`task_id` bigint NOT NULL COMMENT '生产任务编号',
`item_id` bigint NOT NULL COMMENT '产品物料编号',
`expire_date` datetime DEFAULT NULL COMMENT '过期日期',
`lot_number` varchar(64) DEFAULT NULL COMMENT '生产批号',
`scheduled_quantity` decimal(14,2) DEFAULT NULL COMMENT '排产数量',
`feedback_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '本次报工数量',
`qualified_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '合格品数量',
`unqualified_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '不良品数量',
`uncheck_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '待检测数量',
`labor_scrap_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '工废数量',
`material_scrap_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '料废数量',
`other_scrap_quantity` decimal(14,2) NOT NULL DEFAULT '0.00' COMMENT '其他废品数量',
`feedback_user_id` bigint DEFAULT NULL COMMENT '报工用户编号',
`approve_user_id` bigint DEFAULT NULL COMMENT '审核用户编号',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '状态',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 生产报工';
① type 为报工类型,对应字典 mes_pro_feedback_type,枚举 MesProFeedbackTypeEnum:
| 类型值 | 枚举 | 说明 |
|---|---|---|
| 1 | SELF | 自行报工 |
| 2 | UNIFIED | 统一报工 |
② workstation_id 关联 mes_md_workstation 表的 id 字段,标识报工的工作站,详见 《【基础】车间设置、工作站设置》。后端会校验工作站绑定的工序必须与报工的工序一致。
③ route_id 关联 mes_pro_route 表的 id 字段,process_id 关联 mes_pro_process 表的 id 字段,标识报工所在的工艺路线和工序,详见 《【生产】工序设置、工艺流程》。
④ work_order_id 关联 mes_pro_work_order 表的 id 字段(要求工单为已确认状态),详见 《【生产】生产工单》。
⑤ task_id 关联 mes_pro_task 表的 id 字段,标识报工对应的生产任务(要求任务未终态),详见 《【生产】生产排产、工序流转卡》。后端还会校验任务的工单、工作站、工艺路线、工序、产品必须���报工一致。
⑥ item_id 关联 mes_md_item 表的 id 字段。前端选择任务后自动回填(@NotNull 要求传入),后端创建时会以任务的 itemId 覆盖传入值,确保与任务一致。详见 《【基础】物料产品、分类、计量单位》。
⑦ 数量相关字段——根据工序是否标记为质检工序(checkFlag),录入规则不同:
非质检工序(checkFlag = false):
| 字段 | 说明 |
|---|---|
qualified_quantity | 合格品数量(用户填写) |
unqualified_quantity | 不良品数量(用户填写,或由废品明细自动合计) |
feedback_quantity | 报工数量 = 合格品 + 不良品(前端自动计算,只读) |
uncheck_quantity | 固定为 0 |
不良品可进一步拆分为三种废品分类:
| 字段 | 说明 |
|---|---|
labor_scrap_quantity | 工废数量(工艺操作不当导致的废品) |
material_scrap_quantity | 料废数量(原材料质量问题导致的废品) |
other_scrap_quantity | 其他废品数量 |
当
unqualified_quantity > 0时,前端自动展开废品分类区域。修改废品明细时,不良品数量 = 工废 + 料废 + 其他,报工数量随之联动。
质检工序(checkFlag = true):
| 字段 | 说明 |
|---|---|
feedback_quantity | 报工数量(用户填写,必须 > 0) |
uncheck_quantity | 待检测数量 = 报工数量(提交时自动设置) |
qualified_quantity | 初始为 0,由 IPQC 质检完成后回写 |
unqualified_quantity | 初始为 0,由 IPQC 质检完成后回写 |
⑧ feedback_user_id 为报工人编号,关联 system_users 表。创建报工时前端默认设置为当前登录用户,提交时后端记录实际提交人。
⑨ approve_user_id 为审核人编号,关联 system_users 表。创建报工时由用户指定,审批通过后后端记录实际审批人。
⑩ status 为报工状态,对应字典 mes_pro_feedback_status,枚举 MesProFeedbackStatusEnum:
| 状态值 | 枚举 | 说明 | 可执行操作 |
|---|---|---|---|
| 0 | PREPARE | 草稿 | 编辑、提交、删除 |
| 2 | APPROVING | 审批中 | 审批通过、驳回 |
| 3 | UNCHECK | 待检验 | —(等待 IPQC 回调) |
| 4 | FINISHED | 已完成 | — |
状态流转说明
创建 ──→ 草稿(0) ──提交──→ 审批中(2) ──通过──→ 已完成(4)
│ │
│ └──→ 待检验(3) ──IPQC回调──→ 已完成(4)
│
└──驳回──→ 草稿(0)
- 创建(
createFeedback):创建报工单,初始状态为草稿。自动从任务中复制itemId。 - 提交(
submitFeedback):草稿 → 审批中。记录报工人和报工时间。提交后表单主体不可再修改。 - 驳回(
rejectFeedback):审批中 → 草稿。退回后可修改重新提交。 - 审批通过(
approveFeedback):审批中 → 已完成(或待检验)。核心业务逻辑详见下方「审批通过处理流程」。
# 1.2 审批通过处理流程
审批通过(approveFeedback)是报工模块最关键的业务方法,采用事务性处理。不论工序标识如何,审批通过时都会先根据工序级 BOM(mes_pro_route_product_bom)自动生成物料消耗记录(MesWmItemConsumeDO)并执行库存扣减,详见 《【仓库】生产领料、生产退料、物料消耗》。
在此基础上,根据工序的关键工序(keyFlag)和质检工序(checkFlag)标识分为三种情况:
① 关键工序 + 非质检工序(最常见场景)
- 生成产品产出单(
MesWmProductProduceDO),按合格品/不合格品拆分明细行。 - 自动完成产出入库(执行库存增加)。
- 累加生产任务的已生产数量、合格品数量、不良品数量。
- 累加生产工单的已生产数量。
- 报工状态更新为「已完成」。
② 关键工序 + 质检工序
- 生成产品产出单,质量状态为「待检验」。
- 报工状态更新为「待检验」(
UNCHECK),不立即入库。 - 等待 IPQC 过程检验完成后回调(
updateProFeedbackWhenIpqcFinish),拆分合格/不合格品行并完成入库。 - 回写合格品/不合格品/废品数量到报工单,更新状态为「已完成」。
详见 《【质量】过程检验(IPQC)》。
③ 非关键工序
不生成产出单,不更新任务/工单数量,直接标记为「已完成」。
关键工序 vs 质检工序
这两个标识定义在工艺路线工序表(mes_pro_route_process)上,详见 《【生产】工序设置、工艺流程》:
- 关键工序(
keyFlag):每条工艺路线最多一道。该工序的报工审批通过后,才会生成产出入库并累加工单/任务的已生产数量。 - 质检工序(
checkFlag):标记后,报工只需填写报工数量(不拆分合格/不良),审批通过后进入「待检验」状态,由 IPQC 质检完成后回调拆分并入库。
# 1.3 管理后台
对应 [MES 系统 -> 生产管理 -> 生产报工] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/mes/pro/feedback 目录。
# 列表
支持按报��单号、报工类型、生产工单、产品、状态、报工时间等条件搜索。列表展示报工单号、报工类型、工作站、工序、工单、产品信息、报工数量、报工人、审核人、状态等。

# 新增
点击【新增】按钮,弹出报工新增表单。主要填写报工单号(可点击「生成」自动生成)、报工类型、生产工单(仅已确认状态)、生产任务(根据工单过滤)。选择任务后自动填充工作站、工艺路线、工序、产品等信息。新建成功后弹窗自动切换为编辑模式。

报工数量:根据当前工序的 checkFlag 标识动态切换录入方式:
- 非质检工序:显示「合格品数量」和「不良品数量」两个输入框,「报工数量」为只读自动合计。当不良品数量 > 0 时,自动展开废品分类区域(工废、料废、其他),修改废品明细会联动更新不良品数量和报工数量。
- 质检工序:只显示「报工数量」一个输入框。
报工人/审核人:报工人默认为当前登录用户,审核人由用户手动指定。

# 修改
点击报工单号链接或【编辑】按钮(仅草稿状态可编辑),弹出报工修改表单。

# 提交
在编辑弹窗底部点击【提交】按钮(仅草稿状态时显示)。系统会先检查表单是否有修改(脏检查),有修改则先保存再提交。提交后记录报工人和报工时间,状态变更为「审批中」。
# 审批
在列表页点击【审批】按钮(仅审批中状态且审核人为当前用户时显示),弹出审批对话框,以只读方式展示报工详情,底部提供「通过」和「不通过」两个按钮。

- 通过:执行审批通过逻辑。系统自动根据工序级 BOM 配置扣减物料库存;若为关键工序,还会更新生产任务和工单的已生产数量,并生成产品产出入库记录。如果是关键质检工序,提示"报工成功,请等待质量检验完成!";否则提示"报工单已审批完成"。
- 不通过(驳回):报工状态回退为草稿,可修改后重新提交。
# BOM 物资消耗 / 产品产出
在报工单处于已完成或待检验状态时,编辑弹窗底部会展示两个 Tab 页:

★ BOM 物资消耗(报工详情 Tab):以只读列表展示该报工单触发的物料消耗记录行,包含物资编码、名称、规格、消耗数量、单位、批次号等��数据来自 mes_wm_item_consume_line 表,详见 《【仓库】生产领料、生产退料、物料消耗》。由 MesWmItemConsumeLineController 提供接口。

★ 产品产出(报工详情 Tab):以只读列表展示该报工单触发的产品产出记录行,包含物资编码、名称、规格、产出数量、单位、批次号、质量状态(合格/不合格/待检验)等。数据来自 mes_wm_product_produce_line 表,详见 《【仓库】产品产出、产品入库》。由 MesWmProductProduceLineController 提供接口。