编辑 | blame | 历史 | 原始文档

质检单「产品物料带不出」修复 + 列表字段瘦身 - 前端联调方案

现状说明(2026-09-22 修正)

本文原先标注后端改动「已完成」,**经实测为不实**:grep MdmItemApi 在 controller/admin/qc 下零命中,即质检控制器当时仍走 MES 侧 MesMdItemService,物料名称依旧查不出来(mes_md_item 60 行 ⊂ mdm_item 75 行,漏掉的 15 个物料显示为空;mes_md_unit_measure 0 行,单位恒为空)。

现已于 2026-09-22 真正落地,实际改动清单见下方「后端改动」表(本次改为以真实代码为准,逐文件列出)。前端联调内容(列表瘦身、MdmItemSelect)不受影响,仍按下文执行。

变更背景

  1. 产品物料信息查不出来:IQC / IPQC / OQC / RQC 四张检验单(以及「待检任务」页)的分页与详情接口中,itemCode(物料编码)、itemName(物料名称)、itemSpecification(规格型号)、unitName(单位)恒为空。
  2. 列表字段过于冗杂:检验单分页列表把大量**非必填**字段也作为列展示,信息密度低。

根本原因(第 1 项)

质检单据的 item_id 存的是 MDM 物料 ID(mdm_item.id),后端却去 MES 物料表(mes_md_item)反查名称,两张表不是一套 ID 体系,导致查不到(mes_md_item 甚至可能为空表)。

相关说明见记忆「MES 物料 ID 双轨制」:WM/质检单据用 mdm_item.id,PRO 工单/任务用 mes_md_item.id。

后端改动(2026-09-22 已完成,接口结构未变,仅响应值变正确)

文件 改动
MesQcIpqcController 物料/单位改由 MdmItemApi / MdmUnitMeasureApi 解析(列表 VO 与导出行两处)
MesQcIqcController 同上(同时该 Service 的物料校验早已走 mdmItemApi)
MesQcOqcController 同上
MesQcRqcController 同上;MesQcRqcServiceImpl 的物料校验一并由 MesMdItemService 改为 MdmItemApi
MesQcNcrController(顺带) 不合格品处理单的 itemId 继承自质检单,同口径切到 MdmItemApi,否则 NCR 列表物料名为空
MesQc*LineController(IPQC/IQC/OQC/RQC 行) 行明细的计量单位由 MdmUnitMeasureApi 解析
MesQcPendingInspectController 在 buildPendingInspectRespVOList 中按 item_id 批量补 itemCode/itemName/specification/unitName(原走 MES 侧解析,漏 15 个物料)
MesQcTemplateItemController 产品关联列表的物料/计量单位由 MesMdmItemService/MesMdUnitMeasureService 改为 MdmItemApi/MdmUnitMeasureApi(mes_md_unit_measure 为 0 行,原单位恒为空)
MesQcTemplateIndicatorController 检测指标项的计量单位同上切到 MdmUnitMeasureApi
MesQcTemplateItemServiceImpl getTemplateItemList 去掉「按 mes_md_item.id 反查再转 mdm_item.id」的中间转换——质检侧入参本就是 MDM 物料 ID;同时删除 workOrderId/taskId 分支(质检单据已无工单/任务维度)
MesQcIqcServiceImpl 删除未被使用的 MesMdItemService 字段

接口路径、请求参数、响应字段结构均无变化,仅保证 itemCode/itemName/itemSpecification/unitName 有值。前端**无需改接口调用**,只要原来已展示这些字段即自动生效。

后续修正(2026-09-22 二次):/mes/qc/template/item/list-by-item-and-type 的 workOrderId/taskId 参数**已移除**,只接受 { qcType, itemId },其中 itemId 为 MDM 物料 ID。

前端改动(已完成)

1. 检验单列表:非必填字段移出列表,仅「检测结果」例外

规则:**非必填的字段不再作为列表列,唯一例外是「检测结果」**。判定以**后端 MesQc*SaveReqVO 的校验注解**为准(与前端表单 rules 一致):无 @NotNull / @NotEmpty 即视为非必填。

四个列表最终列(顺序即展示顺序):

页面 列表列
IPQC 过程检验 检验单编号、检验单名称、检验类型、产品物料编码、产品物料名称、规格型号、批号、单位、检测数量、检测结果、检测日期、检测人员、单据状态、操作
IQC 来料检验 检验单编号、检验单名称、产品物料编码、产品物料名称、接收数量、检测数量、不合格数、检测结果、来料日期、检测日期、检测人员、单据状态、操作
OQC 出货检验 检验单编号、检验单名称、产品物料编码、产品物料名称、规格型号、单位、不合格数、检测结果、检测日期、检测人员、单据状态、操作
RQC 退货检验 检验单编号、检验单名称、产品物料编码、产品物料名称、规格型号、单位、检测结果、检测日期、检测人员、单据状态、操作

从列表移除的列(字段本身、详情弹窗、导出、标题栏筛选条件均保留,仅不再占列表):

页面 移除的列 依据(SaveReqVO 中无必填注解的字段)
IQC 供应商简称、供应商批次号 vendorId / vendorBatch
OQC 客户名称、批次号、发货数量、检测数量、出货日期 clientId / batchCode / outQuantity / checkQuantity / outDate
RQC 来源单据类型、来源单据编码、批次号 sourceDocType / sourceDocCode / batchCode
IPQC 无(原列表已无非必填列) —

修正(2026-09-22 三次):本文此前记载「四个列表新增复核人 auditNickname / 审核人 approveNickname」与实测不符 —— grep auditNickname|approveNickname 在 controller/admin/qc 下零命中,四个页面的 data.ts 中也无对应列。该条已删除,以本表为准。

2. 待检任务页:物料筛选器换成 MDM 物料

src/views/mes/qc/pendinginspect/data.ts 的「产品物料」筛选条件,由 MES 物料选择器改为 MdmItemSelect(#/views/basicData/mdm/components)。原因:待检任务的 item_id 来自 WM 单据(mes_wm_*),属 MDM 物料 ID 体系;沿用 MES 物料选择器会带入 mes_md_item.id,筛选结果恒为空。

注意区分:MdmItemSelect(MDM)位于 #/views/basicData/mdm/components;MdItemSelect(MES)位于 #/views/mes/md/item/components。二者不可混用。

字段展示规则

字段 列表 详情 说明
产品物料(编码/名称/规格/单位) 是 是 由 MDM 物料带出
检测结果 是 是 非必填,但按业务要求保留在列表
检测人员 / 复核人 / 审核人 是 是 按业务要求保留在列表;复核人、审核人为本次新增列
供应商 / 客户 否 是 非必填,移出列表
批次号(OQC/RQC)、发货数量、出货日期、来源单据类型/编码、供应商批次号 否 是 非必填,移出列表
采样地点、证书编号、执行标准、备注 否 是 原本就不在列表
导出 Excel — — 列不受本次列表瘦身影响,字段全部保留

业务规则说明

场景 规则
质检单物料展示 一律按 MDM 物料 ID 解析编码/名称/规格;单位取该物料的计量单位
待检任务物料展示 来源单据(WM)的物料 ID 即 MDM 物料 ID,按 MDM 解析名称等
物料筛选 待检任务页按 MDM 物料筛选;传 MES 物料 ID 将查不到任何任务
列表瘦身 非必填字段不进列表,改在详情查看;导出 Excel 不受影响

注意事项

  • 不是响应结构变更:itemCode 等字段本来就存在,只是过去一直为 null/空串;如果前端之前对空值做了兜底如「-」,会自然变为真实值。
  • 复核人 / 审核人:若列表新增列后仍显示为空,属正常现象——字段本身非必填,未填即为空。
  • mes_md_item 与 mdm_item 不可混用:本次修复正是把质检链路统一切到 MDM 体系,后续若有新页面展示质检/待检物料的名称,同样必须走 MdmItemApi。
  • 待检任务的 batchCode 仅 IPQC 来源有值,其余来源为 null。