【质量】待检任务、检验结果、缺陷记录
质量辅助模块,由 yudao-module-mes 后端模块的 qc.pendinginspect、qc.indicatorresult、qc.defectrecord 包实现,为 IQC/IPQC/OQC/RQC 四类质检单提供共享的辅助功能。
本文涉及三个子模块:
- 待检任务:聚合查询视图,汇总所有来源业务单据中处于「待检验」状态的行,方便检验员从统一入口快速发起质检。列表中每行代表一条待检来源行,检验员点击操作按钮后会打开对应质检模块的新增弹窗(IQC/IPQC/OQC/RQC),并自动预填来源单据信息及业务字段。
- 检验结果:记录每次检验中各检测项的实际检测值,支持多次录入(如批量抽检)。
- 缺陷记录:记录检验过程中发现的缺陷,系统自动按等级汇总到质检单和检验行。
本文涉及表如下图所示:
# 1. 待检任务
待检任务,由 MesQcPendingInspectController 提供接口。不是实体表,而是聚合查询视图——通过 SQL UNION ALL 将六类来源业务单据中状态为「待检验」的行合并展示:
| 序号 | 来源业务表 | 质检类型 | 筛选条件 |
|---|---|---|---|
| 1 | 到货通知行(mes_wm_arrival_notice_line) | IQC | 单据状态=待检验,行 iqc_check_flag=1 且 iqc_id IS NULL |
| 2 | 外协入库行(mes_wm_outsource_receipt_line) | IQC | 单据状态=已确认,行 iqc_check_flag=1 且 iqc_id IS NULL |
| 3 | 产品产出行(mes_wm_product_produce_line) | IPQC | 产出行 quality_status=PENDING(通过产出单头→报工关联,sourceDocType 记为 PRO_FEEDBACK) |
| 4 | 销售出库行(mes_wm_product_sales_line) | OQC | 单据状态=已确认,行 oqc_check_flag=1 且 oqc_id IS NULL |
| 5 | 生产退料行(mes_wm_return_issue_line) | RQC | 单据状态=已确认,行 rqc_check_flag=1 且 rqc_id IS NULL 且 quality_status=PENDING |
| 6 | 销售退货行(mes_wm_return_sales_line) | RQC | 单据状态=已确认,行 rqc_check_flag=1 且 rqc_id IS NULL 且 quality_status=PENDING |
注意:IPQC 来源在 SQL 中只有一类(待检验的产品产出行),通过 JOIN 产出单头和报工记录获取关联信息。
# 1.1 管理后台
对应 [MES 系统 -> 质量管理 -> 待检任务] 菜单,对应 yudao-ui-admin-vue3 项目的 @/views/mes/qc/pendinginspect 目录。
支持按来源单据编码、检验类型、物料等条件搜索。列表统一展示所有待检来源行,每行根据质检类型显示对应的操作按钮:

点击操作按钮(「来料检验」/「过程检验」/「退料检验」/「出货检验」),系统会打开对应质检模块的新增弹窗(IqcForm/IpqcForm/RqcForm/OqcForm),并自动预填来源单据信息及各业务所需字段;哪些字段只读、哪些字段可继续补录,以对应质检表单实现为准。保存成功后关闭弹窗并刷新列表。检验完成后,系统自动回写来源单据:
| 质检类型 | 来源单据 | 完成后回写 |
|---|---|---|
| IQC | 到货通知单 / 外协入库单 | 到货通知回写 iqcId + 合格数量;外协入库按合格/不合格拆行并推进单据状态 |
| IPQC | 生产报工单(产品产出行) | 回写合格/缺损/各类报废数量,触发产出入库和进度更新 |
| OQC | 销售出库单 | 回写行的 quality_status 和 oqc_id |
| RQC | 生产退料单 / 销售退货单 | 回写行的 quality_status,拆分行并联动主单状态 |
# 2. 检验结果
检验结果,由 MesQcIndicatorResultController 提供接口。记录质检过程中每个检测项的实际检测值,支持同一质检单多次录入(如抽检多个样本)。
# 2.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_qc_indicator_result` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`code` varchar(64) DEFAULT NULL COMMENT '样品编号',
`qc_id` bigint NOT NULL COMMENT '关联质检单ID(IQC/IPQC/OQC/RQC 的 id)',
`qc_type` tinyint NOT NULL COMMENT '质检类型',
`item_id` bigint DEFAULT NULL COMMENT '产品物料ID',
`sn` varchar(255) DEFAULT NULL COMMENT '物资SN',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 检验结果记录';
① qc_id + qc_type 关联质检单。qc_type 枚举 MesQcTypeEnum(IQC/IPQC/OQC/RQC),用于区分关联到哪张质检表。
② item_id 为被检物料。sn 为样品的 SN 码(选填),用于追溯具体是哪个样品的检测结果。
该表包含一个子表:
mes_qc_indicator_result_detail(检验结果明细):记录每个检测项的实际检测值。
# 2.2 管理后台
对应 yudao-ui-admin-vue3 项目的 @/views/mes/qc/indicatorresult 目录。当前该目录无独立的 index.vue 列表页面,QcIndicatorResultForm.vue 和 QcIndicatorResultList.vue 作为嵌入式组件在 IQC/IPQC/OQC/RQC 各质检单编辑表单中复用。后端 MesQcIndicatorResultController 已提供完整的 CRUD + 分页查询接口。

★ 检验结果明细:由 mes_qc_indicator_result_detail 表存储,记录每个检测项的实际值。明细表无独立 Controller,对外接口由 MesQcIndicatorResultController 统一承载(get-detail/create/update/delete),明细持久化由 MesQcIndicatorResultServiceImpl 内部调用 MesQcIndicatorResultDetailServiceImpl 完成。
mes_qc_indicator_result_detail 表结构
CREATE TABLE `mes_qc_indicator_result_detail` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`result_id` bigint NOT NULL COMMENT '关联检验结果ID',
`indicator_id` bigint DEFAULT NULL COMMENT '检测指标ID',
`value` varchar(500) DEFAULT NULL COMMENT '检测值(统一存为字符串)',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 检验结果明细记录';
① result_id 关联主表 mes_qc_indicator_result 的 id 字段。
② indicator_id 关联检测项。value 为实际检测值(文本存储,适配不同结果类型:浮点、整数、文本、字典、文件)。
# 3. 缺陷记录
缺陷记录,由 MesQcDefectRecordController 提供接口。记录质检过程中发现的缺陷,关联到质检单和具体的检验行。
# 3.1 表结构
省略 creator/create_time/updater/update_time/deleted/tenant_id 等通用字段
CREATE TABLE `mes_qc_defect_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`qc_type` int NOT NULL DEFAULT '1' COMMENT '质检类型',
`qc_id` bigint NOT NULL COMMENT '质检单ID',
`line_id` bigint NOT NULL COMMENT '检验行ID',
`name` varchar(500) NOT NULL COMMENT '缺陷描述',
`level` int NOT NULL COMMENT '缺陷等级',
`quantity` int DEFAULT '1' COMMENT '缺陷数量',
`remark` varchar(500) DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='MES 缺陷记录';
① qc_type + qc_id 关联质检单(IQC/IPQC/OQC/RQC)。line_id 关联具体检验行(NOT NULL,后端 @NotNull 校验),用于细粒度的缺陷定位和检验行级别的缺陷统计。
② name 为缺陷描述。当前前端弹窗通过手工填写缺陷描述的方式录入,未集成常见缺陷下拉选择。
level 为缺陷等级,枚举 MesQcDefectLevelEnum(1=致命,2=严重,3=轻微)。
quantity 为缺陷数量,DEFAULT '1'(后端 @NotNull 校验)。前端新增缺陷时默认初始化为 1。
③ 如需维护参考缺陷库,可详见 《【质量】检测项设置、常见缺陷》;但当前缺陷记录弹窗不会直接从该表下拉选择。
# 3.2 缺陷自动汇总
缺陷记录发生变更时(新增/修改/删除),系统通过 recalculateDefectStats 方法自动汇总缺陷数据:
- 行级汇总:按检验行(
line_id)分组统计各等级缺陷数量,更新检验行的critical_quantity、major_quantity、minor_quantity。 - 主表汇总:汇总所有缺陷记录的各等级总数量,计算缺陷率(缺陷数 × 100 / 检验数量),更新主表的缺陷数和缺陷率。
# 3.3 管理后台
缺陷记录在各质检单(IQC/IPQC/OQC/RQC)的编辑弹窗中内联维护:在「检验项」Tab 的每一行检验项上提供「缺陷列表」按钮,点击后弹出 DefectRecordInlineList.vue 弹窗,可新增、编辑、删除该检验行的缺陷记录。

当前前端没有独立的缺陷记录管理页面(@/views/mes/qc/defectrecord 目录下仅有内联弹窗组件),后端 MesQcDefectRecordController 已提供完整的 CRUD 接口。