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

过程检验单(IPQC)去掉生产订单/工位/生产任务、新增必填批号 - 前端联调方案

变更背景

过程检验单(IPQC)原表单要求先选「生产订单」,再由订单带出「工位」「生产任务」,并由工单/任务反推「产品物料」「质检方案」「工序」。

本次改造**去掉生产订单、工位、生产任务三个字段(工序一并去掉)**,改为:

  • 「产品物料」由前端**手动选择,必填**(从待检任务入口创建时仍自动带入);
  • 新增「批号」输入框,**手工录入文本,必填**。

改造后 IPQC 的表单结构与同模块已上线的 IQC / OQC 一致:单据 = 来源单据 + 产品物料 + 批号 + 数量 + 检验信息。

重要(物料 ID 体系):IPQC 的「产品物料」由原「MES 物料(mes_md_item)」统一为 MDM 物料(mdm_item),与 IQC/OQC 相同。前端必须使用 MdmItemSelect 组件(#/views/basicData/mdm/components,勿与 MES 侧的 MdItemSelect(#/views/mes/md/item/components)混用),不要再使用任何挂工单/任务的物料选择器。

涉及页面

文件 说明
src/views/mes/qc/ipqc/data.ts 表单 schema、列表搜索 schema、列表列定义
src/views/mes/qc/ipqc/index.vue 列表页(引用上面 schema)
src/views/mes/qc/ipqc/modules/form.vue 新增/编辑表单弹窗
src/views/mes/qc/pendinginspect/index.vue 待检任务页的「生成过程检验单」按钮(数据带入)
src/api/mes/qc/ipqc/index.ts IPQC 接口类型定义
src/api/mes/qc/pendinginspect/index.ts 待检任务接口类型定义

业务流程与数据带入

报工审批通过(需检验) → 生成产出行(quality_status=待检)+ 批次号
        │
        ▼
   待检任务页(qcType = IPQC)
        │  点击「生成过程检验单」带入:来源单据类型/ID/行ID、来源单据编号、
        │  产品物料、批号、待检数量、检测日期
        ▼
   IPQC 表单(用户补全:检验类型、检测人员、合格/不合格数量等)
        │
        ▼
   保存 → 完成检验 → 回写报工 + 拆分产出行 + 完成产出入库

数据带入规则(待检任务 → IPQC 表单)

表单字段 待检任务响应字段 带入后是否可编辑
来源单据类型 sourceDocType sourceDocType 否(隐藏只读)
来源单据编号 sourceDocCode sourceDocCode 否(只读展示)
来源单据 ID sourceDocId sourceDocId 否(隐藏字段)
来源单据行 ID sourceLineId sourceLineId 否(隐藏字段)
产品物料 itemId itemId 否(有来源单据时置灰)
批号 batchCode(本次新增) batchCode(本次新增) 是(建议带入后仍允许人工修正)
检测数量 checkQuantity quantity 否(有来源单据时置灰)
检测日期 inspectDate recordTime 是

待检任务入口带入的「批号」来自产出行 batch_code(报工审批通过时由系统生成的批次号)。**当前只有 IPQC 来源会返回 batchCode,IQC/OQC/RQC 来源该字段为 null**,前端对其它检验类型忽略该字段即可。

API

1. 创建 / 更新过程检验单

方法 路径 说明
POST /mes/qc/ipqc/create 创建过程检验单
PUT /mes/qc/ipqc/update 更新过程检验单

请求参数(仅列出本次变更字段):

参数 类型 必填 说明
~~workOrderId~~ Long — 已删除,不再允许提交
~~taskId~~ Long — 已删除,不再允许提交
~~workstationId~~ Long — 已删除,不再允许提交
~~processId~~ Long — 已删除,不再允许提交
batchCode String 是 批号,手工录入文本,最长 100 字符
itemId Long 是 产品物料 ID(**MDM 物料 ID**),由 MdmItemSelect 提供
templateId Long 否 质检方案 ID;不传时后端按 itemId + 检验类型(IPQC) 自动取第一个匹配方案

其余字段(code、name、type、checkQuantity、qualifiedQuantity、unqualifiedQuantity、工废/料废/其他废品数量、inspectorUserId、inspectDate、samplingLocation、certificateNo、executeStandard、auditUserId、approveUserId、checkResult、remark)保持不变。

响应: { "code": 0, "data": <过程检验单 ID> }

2. 分页查询

方法 路径 说明
GET /mes/qc/ipqc/page 获得过程检验单分页

查询参数(本次变更):

参数 类型 说明
~~workOrderId~~ Long 已删除
batchCode String 新增,批号,模糊匹配

3. 详情 / 导出

方法 路径 说明
GET /mes/qc/ipqc/get?id= 详情,响应字段随下列变更
GET /mes/qc/ipqc/export-excel 导出 Excel,**「批号」列取 batchCode**(原取来源单据编号)

4. 质检方案选项(表单联动)

方法 路径 说明
GET /mes/qc/template/item/list-by-item-and-type 按物料 + 检验类型取可用质检方案

参数变更: 由原来的 { qcType: 2, workOrderId, taskId } 改为 { qcType: 2, itemId }(itemId 为 MDM 物料 ID)。

5. 待检任务分页(响应新增字段)

方法 路径 说明
GET /mes/qc/pending-inspect/page 待检任务分页

响应新增字段:

字段 类型 说明
batchCode String 批号,**当前仅 IPQC(产出行)来源提供**,其余来源为 null

响应字段变更(详情 / 分页列表)

删除字段:

字段 说明
workOrderId / workOrderCode / workOrderName 生产订单
taskId 生产任务
workstationId / workstationName 工位
processId / processName 工序

新增字段:

字段 类型 说明
batchCode String 批号

保留不变: itemId、itemCode、itemName、itemSpecification、unitName、检查数量类字段、checkResult、inspectDate、inspectorUserId / inspectorNickname、status、samplingLocation、certificateNo、executeStandard、auditUserId / auditNickname、approveUserId / approveNickname、remark。

字段展示规则

字段 展示位置 说明
产品物料 itemId 表单、列表 表单用 MdmItemSelect 选择,**必填**;列表展示 itemCode / itemName / itemSpecification(原样保留)
批号 batchCode 表单、列表、详情、导出 表单必填;列表新增列展示(建议放在「产品物料」之后);导出列「批号」
生产订单 / 工位 / 生产任务 — 从表单、列表列、列表搜索、详情、导出中**全部移除**
质检方案 templateId 表单 选择范围改由「产品物料」驱动(不再由生产订单驱动)

表单字段调整建议(仅列调整项)

操作 字段 说明
删除 生产订单 workOrderId 含其 ProWorkOrderSelect 及联动清空 taskId 的逻辑
删除 工位 workstationId 含 MdWorkstationSelect
删除 生产任务 taskId 含 ProTaskSelect
新增 批号 batchCode Input,rules: 'required',maxlength: 100
修改 产品物料 itemId 改为 MdmItemSelect + rules: 'selectRequired';dependencies.triggerFields 由 ['sourceDocId'] 保持(有来源单据时置灰)
修改 质检方案 templateId dependencies.triggerFields 由 ['workOrderId', 'taskId'] 改为 ['itemId'];disabled 条件由 !values.workOrderId 改为 !values.itemId;params 改为 { itemId: values.itemId, qcType: 2 };占位文案由「请先选择生产订单」改为「请先选择产品物料」
修改 列表搜索 workOrderId(生产订单)替换为 batchCode(批号,Input,allowClear,模糊查询)
修改 列表列 删除「生产订单编号」列;新增「批号」列(batchCode)

参考实现:src/views/mes/qc/oqc/data.ts 的 itemId(MdmItemSelect)与 templateId(params: { itemId, qcType: 3 })写法,IPQC 只需把 qcType 换成 IPQC 的字典值。

待检任务页带入调整

src/views/mes/qc/pendinginspect/index.vue 的 handleCreateIpqc 预填对象:

操作 字段 说明
删除 taskId / workOrderId / workstationId 后端已不再接收,且表单已无对应控件
保留 itemId / checkQuantity / inspectDate / name / sourceDocCode / sourceDocId / sourceDocType / sourceLineId 语义不变
新增 batchCode: row.batchCode 从待检任务带入批号(该字段仅 IPQC 来源有值)

业务规则说明

场景 规则
手工新建 IPQC 直接选择产品物料(MDM)+ 填写批号;后端按 itemId + IPQC 匹配质检方案并自动生成检验行
指定质检方案 前端传 templateId,但必须落在 itemId + IPQC 匹配到的方案集合内,否则后端报「未匹配到质检方案」
未匹配到方案 后端返回错误码 QC_NO_TEMPLATE,前端按通用错误提示展示即可
从待检任务创建 物料、批号、检测数量、检测日期、来源单据信息自动带入;来源单据字段保存后不可修改
来源单据回写 IPQC 完成后回写报工(合格/不合格/工废/料废/其他废品数量),并拆分产出行、完成产出入库。**该链路依赖 sourceDocId + sourceLineId,与本次删除的三个字段无关,不受影响**
批号必填校验 由后端 @NotEmpty 与前端 rules: 'required' 双重保证;批号为空时后端返回「批号不能为空」
物料必填校验 由后端 @NotNull 与前端 rules: 'selectRequired' 双重保证;物料不存在时后端返回物料不存在错误
列表查询 生产订单筛选已下线,改为按批号模糊查询

注意事项

  1. 物料选择器必须换成 MdmItemSelect。若仍沿用原来的物料选择器或直接回填 MES 物料 ID,会出现「物料不存在」或「未匹配到质检方案」错误。
  2. 质检方案下拉的 params 必须由 workOrderId/taskId 改为 itemId,否则选完物料后方案列表为空或与所选物料不符。
  3. 批号为必填:新增/编辑表单与创建接口都需校验,从待检任务带入后也允许用户修正。
  4. 待检任务的 batchCode 只有 IPQC 来源有值(IQC/OQC/RQC 恒为 null),公共带入逻辑里不要假设它一定存在;无值时留空让用户手填。
  5. 历史数据:mes_qc_ipqc 迁移前为 0 条数据,本次为直接删列 + 加列,无需前端做兼容处理。DDL(删 work_order_id/task_id/workstation_id/process_id,加 batch_code varchar(100))已于 2026-09-22 在 yzfx 库执行完毕。
  6. 导出 Excel 的「批号」列语义已变:原先取「来源单据编号」,现改为取真正的批号。
  7. 生产订单/工位/生产任务/工序在**列表列、详情、导出**中都要一并移除,避免出现永久为空白的列。