过程检验单(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 表单(用户补全:检验类型、检测人员、合格/不合格数量等)
│
▼
保存 → 完成检验 → 回写报工 + 拆分产出行 + 完成产出入库
| 表单字段 | 待检任务响应字段 | 带入后是否可编辑 |
|---|---|---|
| 来源单据类型 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**,前端对其它检验类型忽略该字段即可。
| 方法 | 路径 | 说明 |
|---|---|---|
| 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> }
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /mes/qc/ipqc/page |
获得过程检验单分页 |
查询参数(本次变更):
| 参数 | 类型 | 说明 |
|---|---|---|
| ~~workOrderId~~ | Long | 已删除 |
| batchCode | String | 新增,批号,模糊匹配 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /mes/qc/ipqc/get?id= |
详情,响应字段随下列变更 |
| GET | /mes/qc/ipqc/export-excel |
导出 Excel,**「批号」列取 batchCode**(原取来源单据编号) |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /mes/qc/template/item/list-by-item-and-type |
按物料 + 检验类型取可用质检方案 |
参数变更: 由原来的 { qcType: 2, workOrderId, taskId } 改为 { qcType: 2, itemId }(itemId 为 MDM 物料 ID)。
| 方法 | 路径 | 说明 |
|---|---|---|
| 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' 双重保证;物料不存在时后端返回物料不存在错误 |
| 列表查询 | 生产订单筛选已下线,改为按批号模糊查询 |
MdmItemSelect。若仍沿用原来的物料选择器或直接回填 MES 物料 ID,会出现「物料不存在」或「未匹配到质检方案」错误。params 必须由 workOrderId/taskId 改为 itemId,否则选完物料后方案列表为空或与所选物料不符。batchCode 只有 IPQC 来源有值(IQC/OQC/RQC 恒为 null),公共带入逻辑里不要假设它一定存在;无值时留空让用户手填。mes_qc_ipqc 迁移前为 0 条数据,本次为直接删列 + 加列,无需前端做兼容处理。DDL(删 work_order_id/task_id/workstation_id/process_id,加 batch_code varchar(100))已于 2026-09-22 在 yzfx 库执行完毕。