You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

16 KiB

质检qms模块通用模块版本只关注qc_inspection_item、qc_inspection_item_category、qc_inspection_main、qc_inspection_main_file_relation、qc_inspection_result、qc_inspection_template、qc_template_item、qc_unqualified_record、qc_unqualified_review

QMS质检模块 - 仅关注以下核心数据表:

  • qc_inspection_item - 检验项目
  • qc_inspection_item_category - 检验项目分类
  • qc_inspection_main - 检验单主表
  • qc_inspection_main_file_relation - 检验单附件关联
  • qc_inspection_result - 检验结果
  • qc_inspection_template - 检验模板
  • qc_template_item - 模板检验项
  • qc_unqualified_record - 不合格品记录
  • qc_unqualified_review - 不合格品评审

QMS模块主子表关系详解

qc_inspection_type (检测类型)
        ↓
        │
qc_inspection_item_category (检测项目分类) ←→ qc_inspection_item (检测项定义)
        ↓                                           ↓
        │                                           │
qc_inspection_template (检验模板) ←→ qc_template_item (模板检验项)
        ↓                                           │
        │                                           │
qc_inspection_main (检验单主表) ←───────────────────┘
        ↓
qc_inspection_result (检验结果)

qc_inspection_main (检验单主表) → [产生不合格] → qc_unqualified_review (不合格评审)
                                                                    ↓
                                                    qc_unqualified_record (不合格记录)

主子表对:

主表 子表 关联字段 说明
qc_inspection_template qc_template_item templateId 检验模板包含多个检测项
qc_inspection_main qc_inspection_result inspectionId 检验单包含多个检验结果
qc_unqualified_review qc_unqualified_record reviewId 不合格评审包含多个评审记录

基础数据关联:

关联表 关联字段 说明
qc_inspection_item qc_inspection_item_category categoryId 检验项目归属分类
qc_inspection_item qc_inspection_type inspectionType 检验项目归属类型
qc_inspection_main qc_inspection_template templateId 检验单引用模板
qc_inspection_result qc_inspection_item itemId 检验结果关联检测项定义

关键设计特点:

  1. 模板驱动: 检验单关联模板,模板包含多个检测项定义
  2. 级联继承: 检验结果从检测项定义继承标准值、上下限等规格参数
  3. 主子分离: 主表记录总体信息(单号、物料、数量),子表记录明细(每个检测项的检测结果)
  4. 不合格评审: 当检验结果不合格时,触发评审流程,生成评审主表及记录子表

质检模板匹配策略(核心业务规则)

生成质检任务时按以下4级降级优先级自动匹配模板

┌─────────────────────────────────────────────────────────────┐
│                    质检模板匹配策略                           │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  第1级物料 + 工位 + 工序 + 检测类型(精确匹配)            │
│    ↓ 未找到                                                  │
│  第2级物料 + 工位 + 检测类型                               │
│    ↓ 未找到                                                  │
│  第3级物料 + 检测类型                                      │
│    ↓ 未找到                                                  │
│  第4级通用模板仅检测类型 + isDefault=1                 │
│    ↓ 未找到 → 抛出异常:"无可用检测模板"                      │
│                                                              │
└─────────────────────────────────────────────────────────────┘

匹配条件说明

优先级 匹配条件 说明 业务场景
1 物料 + 工位 + 工序 + 检测类型 最精确匹配 某物料在特定工位/工序有特殊质检要求
2 物料 + 工位 + 检测类型 特定工位(不限工序) 某物料在特定工位的质检要求统一
3 物料 + 检测类型 特定物料(不限工位/工序) 某物料的质检要求在任何工位/工序都一致
4 通用模板(仅检测类型) 兜底方案 该检测类型的默认质检方案

检测类型字典

代码 检测类型 说明
0 首检 生产开始前首批产品的检验
1 专检 专职检验员的检验
2 自检 操作工自己检验
3 互检 相互检验(上下工序互检)
4 原材料检 原材料入库检验
5 抽检 抽样检验
6 成品检 成品检验
7 入库检 产品入库前的检验

通用模板规则

定义

  • 通用模板:不绑定具体物料、工序或工位,仅按检测类型适用的默认质检方案
  • 标识字段is_default0否/1是

约束规则

  1. 唯一性:每种检测类型只能有一个通用模板
  2. 互斥性:通用模板不能同时绑定物料、工序或工位
  3. 校验方式应用层校验Service层代码校验非数据库约束

页面分类与检测类型对应关系

前端路由参数映射

路由参数 页面名称 查询参数 包含的检测类型
inspectionType=1 产品检测 qcInspectionTypes=['0','1','3','5','6'] 首检、专检、互检、抽检、成品检
inspectionType=2 原材料检测 qcInspectionType='4' 原材料检
inspectionType=3 入库检测 qcInspectionType='7' 入库检

注意

  • 前端使用 qcInspectionType(单值)或 qcInspectionTypes(多值)查询
  • 后端通过 qc_inspection_type.qc_inspection_type 字典字段过滤
  • 不要使用 inspectionTypeLong 类型的 typeId 主键)进行分类查询

质检任务生成流程

触发方式

触发来源 接口路径 说明
上位机HMI POST /hmi/qcInspectionTask 无登录,需模拟登录传递租户
PDA POST /pda/createInspectionTask 已登录用户
前端手工创建 POST /qms/QcInspectionMain 已登录用户

生成流程

┌─────────────────────────────────────────────────────────────────────┐
│                      质检任务生成流程                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  1. 接收请求参数(物料编码、工位、检测类型等)                          │
│     ↓                                                                │
│  2. 参数校验(物料编码、检测类型必填)                                 │
│     ↓                                                                │
│  3. 工位名称 → 工位编码(如需要)                                     │
│     ↓                                                                │
│  4. 匹配质检模板4级降级匹配策略                                   │
│     ↓ 未找到 → 抛出异常                                              │
│  5. 调用编码规则服务生成质检单号                                      │
│     ↓                                                                │
│  6. 创建质检主表记录qc_inspection_main                           │
│     ↓                                                                │
│  7. 根据模板检测项qc_template_item生成质检结果子表                │
│     qc_inspection_result- 快照模式                               │
│     ↓                                                                │
│  8. 返回质检单号                                                     │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

快照机制

质检结果子表(qc_inspection_result)采用快照模式存储检测项信息:

快照字段 来源 说明
itemCode qc_template_item.item_code 检测项编码
itemName qc_template_item.item_name 检测项名称
standardValue qc_template_item.standard_value 标准值
upperLimit qc_template_item.upper_limit 控制上限
lowerLimit qc_template_item.lower_limit 控制下限
detectType qc_template_item.detect_type 检测方式0定性/1定量
controlType qc_template_item.control_type 控制类型0手动/1自动

设计目的:模板修改后不影响已创建的历史检验单数据完整性。


质检结果判定逻辑

单项检测结果判定

检测方式 判定规则 结果值
定量检测 lowerLimit ≤ detectValue ≤ upperLimit → 合格 0合格/1不合格/2未判定
定性检测 人工选择合格/不合格 0合格/1不合格/2未判定

主表结果汇总

IF (所有子项 detectResult = 0) THEN
    主表 result = 0 (合格)
ELSE IF (任一子项 detectResult = 1) THEN
    主表 result = 1 (不合格)
ELSE
    主表 result = 2 (待判定)

状态流转

状态值 状态名称 说明
0 未处理 初始状态,等待检验
1 已完成 检验完成

不合格品评审流程

触发条件

当质检主表 result = 1(不合格)时,可触发不合格品评审流程。

评审结果类型

代码 评审结果 后续处理
0 报废 物料报废处理
1 返工 返回生产重新加工
2 退货 退回供应商
3 流转 继续流转到下工序
4 让步接收 降级使用或特批放行

评审流程

┌─────────────────────────────────────────────────────────────────────┐
│                      不合格品评审流程                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                      │
│  质检结果不合格result=1                                          │
│     ↓                                                                │
│  创建不合格品评审单qc_unqualified_review                         │
│     ↓                                                                │
│  启动工作流Warm-Flow                                             │
│     ↓                                                                │
│  评审人进行评审,选择评审结果                                         │
│     ↓                                                                │
│  创建评审记录qc_unqualified_record                               │
│     ↓                                                                │
│  根据评审结果执行后续处理                                             │
│                                                                      │
└─────────────────────────────────────────────────────────────────────┘

核心表字段详解

qc_inspection_main质检主表

字段 类型 说明
inspection_id Long 主键雪花ID
inspection_no String 质检单号(编码规则生成)
template_id Long 关联模板ID
material_code String 物料编码
material_name String 物料名称
inspection_type Long 检测类型ID关联qc_inspection_type.type_id
inspection_qty BigDecimal 质检数量
qualified_qty BigDecimal 合格数
unqualified_qty BigDecimal 不合格数
result String 质检结果0合格/1不合格/2待判定
status String 单据状态0未处理/1完成
production_order String 业务来源单号
batch_no String 批次号
barcode String 条码号

qc_inspection_result质检结果子表

字段 类型 说明
result_id Long 主键雪花ID
inspection_id Long 关联质检主表ID
item_id Long 关联检测项ID
detect_result String 检测结果0合格/1不合格/2未判定
detect_value BigDecimal 定量检测值
spec_inspection String 规格质检值(定性检测)
problem_detail String 不合格明细描述
detect_type String 检测方式0定性/1定量【快照】
standard_value BigDecimal 标准值【快照】
upper_limit BigDecimal 控制上限【快照】
lower_limit BigDecimal 控制下限【快照】

qc_inspection_template检验模板

字段 类型 说明
template_id Long 主键雪花ID
template_code String 模板编码
template_name String 模板名称
material_code String 物料编码(可空)
type_id Long 检测类型ID
station_code String 工位编码(可空)
process_code String 工序编码(可空)
is_default String 是否通用模板0否/1是

qc_inspection_item检测项定义

字段 类型 说明
item_id Long 主键雪花ID
item_code String 检测项编码
item_name String 检测项名称
category_id Long 检测项类别ID
inspection_type Long 检测类型ID
detect_type String 检测方式0定性/1定量
control_type String 控制类型0手动/1自动
standard_value BigDecimal 标准值
upper_limit BigDecimal 控制上限
lower_limit BigDecimal 控制下限

跨服务调用说明

编码规则服务

调用场景 方法 编码规则编码
生成质检单号 remoteCodeRuleService.selectCodeRuleCodeWithTenant("3") 3

注意:上位机调用时需使用 selectCodeRuleCodeWithTenant 方法,通过 RpcContext.setAttachment("tenantId", ...) 传递租户信息。

Dubbo 租户传递

// Consumer 端(上位机服务)
StpUtil.login(userId, "login");  // 模拟登录
TenantHelper.setDynamic(tenantId);  // 设置本地租户
RpcContext.getContext().setAttachment("tenantId", tenantId);  // 传递给远程服务

// Provider 端(编码规则服务)
String tenantId = RpcContext.getContext().getAttachment("tenantId");
TenantHelper.setDynamic(tenantId);  // 设置租户上下文