跳到正文
Kale的数字花园
目录 文章
/27 分钟/9 阅读/0 评论

质检模块业务全景与现状梳理

数据来源:7份技术方案文档 + 代码库实际代码扫描 质检模块从0到1经历了以下迭代,每一版都是前一版的改造和扩展: 材料问题、工艺问题、破损问题、二次工艺、印绣花工艺、规格问题、版型问题、外观问题、包装问题、功能问题、性能问题 Contro

梳理人:老王 | 梳理时间:2026-06-03
数据来源:7份技术方案文档 + 代码库实际代码扫描


一、版本迭代历程

质检模块从0到1经历了以下迭代,每一版都是前一版的改造和扩展:

timeline
    title 质检模块迭代时间线
    2025-04 : MVP版本(迭代1.1) : 基础质检闭环
    2025-04 : MVP版本(迭代1.2) : 加抽/全检/拆分任务
    2025-05 : MVP迭代3 : 质检结果表/入库单/不良品处置
    2025-05 : 1.0版本 : 装箱明细/质检结果Tab/入库记录/免在仓质检
    2025-07 : 1.0版本优化 : 修改质检方式/不可接收品处置/数据权限
    2025-08 : 1.0用户反馈优化 : AQL抽检/比例抽检/样本算法/标记未收货
    2025-11 : 上线后优化迭代1&2 : 可/不可接收数持久化/退回供应商/中断质检
    2026-02 : 上线后优化迭代3 : 退回修改质检结果/撤回处理表/自动创建入库单/Creeks消息提醒
版本 文档 核心变更 状态
MVP 1.1 质检业务MVP版本 基础闭环:送货单→质检计划→质检任务→质检结果→创建入库单 ✅ 已上线
MVP 1.2 质检业务MVP版本 加抽、全检、任务拆分、任务图片 ✅ 已上线
MVP 迭代3 质检业务MVP版本-迭代3 质检结果表、入库记录、不良品处置(导入/导出) ✅ 已上线
1.0版本 质检业务1.0版本 装箱明细、质检结果Tab、入库记录Tab、免在仓质检、灰度发布 ✅ 已上线
1.0优化 质检业务1.0版本优化 修改质检方式、不可接收品处置表编辑/提交、数据权限控制 ✅ 已上线
1.0用户反馈优化 质检业务1.0版本-用户反馈优化需求 AQL抽检/比例抽检、样本算法、标记未收货、质检员判定结果 ✅ 已上线
上线后优化迭代1&2 质检上线后优化迭代1&2-20251201 可/不可接收数持久化、退回供应商、中断质检、自动判定 ✅ 已上线
上线后优化迭代3 质检上线后优化迭代3 退回修改质检结果、撤回处理表、自动创建入库单、Creeks消息提醒 ✅ 已上线

二、核心业务流程

2.1 全流程概览

flowchart TD
    A["跟单员导入送货单"] --> B["编辑送货单/补充装箱明细"]
    B --> C["提交送货单,自动创建质检计划"]
    C --> D["仓库签收送货单"]
    D --> E{"是否质检?"}
    E -->|"否 或 工厂质检"| F["自动生成免检入库记录"]
    E -->|"是 仓库质检"| G["质检主管创建质检任务"]
    G --> H["质检员执行质检"]
    H --> I{"需要加抽或全检?"}
    I -->|"是"| J["加抽/全检,回到执行质检"]
    J --> H
    I -->|"否"| K["提交质检结果"]
    K --> L{"所有任务完成?"}
    L -->|"否"| H
    L -->|"是"| M["系统自动判定或质检员手动判定"]
    M --> N{"有不可接收品?"}
    N -->|"否"| O["创建入库单,壹拓WMS上架"]
    N -->|"是"| P["导出不合格品处置表"]
    P --> Q["编辑处置方案:让步接收/维修合格/退供"]
    Q --> R["导入处置方案并提交处置表"]
    R --> S["根据可入库记录创建入库单"]
    S --> O
    F --> O

    style A fill:#e1f5fe
    style O fill:#c8e6c9
    style N fill:#fff3e0

2.2 送货单生命周期

stateDiagram-v2
    [*] --> 待确认 : 导入送货单
    待确认 --> 送货中 : 提交送货单<br/>(自动创建质检计划)
    送货中 --> 待签收 : 退回待签收
    送货中 --> 仓库处理中 : 仓库签收
    待签收 --> 仓库处理中 : 仓库签收
    仓库处理中 --> 已完结 : 所有产品完成入库

2.3 质检计划生命周期

stateDiagram-v2
    [*] --> 待确认 : 提交送货单时自动创建
    待确认 --> 待质检 : 签收送货单
    待质检 --> 质检中 : 开始质检任务
    质检中 --> 已完成 : 所有产品完成质检<br/>或手动结束质检
    质检中 --> 已完成 : 中断质检

2.4 质检任务生命周期

stateDiagram-v2
    [*] --> 待质检 : 创建质检任务
    待质检 --> 质检中 : 开始质检
    质检中 --> 已完成 : 提交所有任务明细结果
    待质检 --> 已取消 : 取消/释放任务

三、业务域核心概念

3.1 产品层级与质检维度

概念 说明
SPU 标准产品单元,如"衬衫"
SKC 颜色维度,如"衬衫-黑色",定制类按SKC维度质检
SKU 最小库存单元(颜色+尺码),现货类按SKU维度质检

3.2 质检方式

方式 枚举值 说明 抽检数计算
AQL抽检 2 按照AQL标准抽样 根据一般检测水平II类 + 样本算法(如0.1/0.2/...)按送货批量查表
比例抽检 3 按比例抽样 送货数量 × 抽检比例,加抽时递增0.1×n
抽检 0 已废弃 -
全检 1 已废弃,通过比例抽检100%实现 -

3.3 判定结果

结果 枚举值 触发条件
可接收 1 不合格数=0(系统自动判定)
不可接收 2 不合格数超标(系统自动判定或质检员手动判定)
按结果接收 3 全检/100%抽检,不合格数>0但可接受(质检员手动判定)
空 null 质检员手动填写可/不可接收数

3.4 处置类型

类型 枚举值 说明
让步接收 1 轻微瑕疵,让步接收后可入库
维修后合格 2 维修复检合格后可入库
退供 3 退回供应商,触发采购库存调整
合格入库 4 可接收产品的正常入库
免检入库 5 免在仓质检的产品直接入库

3.5 不合格原因(11种)

材料问题、工艺问题、破损问题、二次工艺、印绣花工艺、规格问题、版型问题、外观问题、包装问题、功能问题、性能问题


四、数据模型

4.1 ER关系图

erDiagram
    PURCHASE_RECEIPT_ORDER ||--o{ PURCHASE_RECEIPT_ORDER_DETAIL : "送货单明细"
    PURCHASE_RECEIPT_ORDER ||--o{ PURCHASE_RECEIPT_BOX_INFO : "装箱信息"
    PURCHASE_RECEIPT_BOX_INFO ||--o{ PURCHASE_RECEIPT_BOX_DETAIL : "箱子明细"
    PURCHASE_RECEIPT_ORDER ||--|{ PURCHASE_RECEIPT_QUALITY_RELATION : "关联质检计划"
    PURCHASE_RECEIPT_QUALITY_RELATION }o--|| QUALITY_INSPECTION_PLAN : "质检计划"

    QUALITY_INSPECTION_PLAN ||--o{ QUALITY_INSPECTION_PLAN_DETAIL : "计划明细"
    QUALITY_INSPECTION_PLAN_DETAIL ||--o{ QUALITY_INSPECTION_TASK : "质检任务"
    QUALITY_INSPECTION_PLAN_DETAIL ||--o{ QUALITY_INSPECTION_ADD_RECORD : "加抽记录"
    QUALITY_INSPECTION_PLAN_DETAIL ||--o{ QUALITY_INSPECTION_DISPOSE : "处置方案"
    QUALITY_INSPECTION_TASK ||--o{ QUALITY_INSPECTION_TASK_DETAIL : "任务明细"
    QUALITY_INSPECTION_TASK ||--o{ QUALITY_INSPECTION_TASK_PIC : "任务图片"
    QUALITY_INSPECTION_TASK_DETAIL }o--|| QUALITY_INSPECTION_PLAN_DETAIL : "关联计划明细"

    QUALITY_INSPECTION_PLAN ||--o{ QUALITY_INSPECTION_LOG : "操作日志"

    PURCHASE_RECEIPT_ORDER {
        bigint id PK
        varchar receipt_order_no "送货单号"
        varchar purchase_order_type "货物类型(现货/定制)"
        int receipt_order_status "单据状态"
        varchar signer "签收人"
        datetime sign_up_at "签收时间"
        int container_num "箱数"
    }

    QUALITY_INSPECTION_PLAN {
        bigint id PK
        varchar plan_no "计划编号"
        varchar purchase_order_type "货物类型"
        varchar source_type "货物来源"
        int status "状态(0待确认/1待质检/2质检中/3已完成)"
        datetime start_time "开始质检时间"
        datetime end_time "结束质检时间"
    }

    QUALITY_INSPECTION_PLAN_DETAIL {
        bigint id PK
        bigint plan_id FK "计划ID"
        varchar product_sku_code "SKU编码"
        varchar product_skc_code "SKC编码"
        int inspection_quantity "待检数"
        int min_sample_quantity "期望抽检数"
        int accept_quantity "可接收数"
        int reject_quantity "不可接收数"
        int inspection_result "判定结果"
        int quality_inspection_method "质检方式(2AQL/3比例)"
        varchar quality_inspection_criteria "样本算法"
        int inspection_required "是否质检(0否/1是)"
        int disposal_status "处置状态(0待处理/1已处理)"
        int status "状态(0待确认/1待质检/2质检中/3已完成)"
    }

    QUALITY_INSPECTION_TASK {
        bigint id PK
        bigint plan_id FK "计划ID"
        varchar task_no "任务编号"
        int total_quantity "待检总数"
        int status "状态(0待质检/1质检中/2已完成)"
    }

    QUALITY_INSPECTION_TASK_DETAIL {
        bigint id PK
        bigint task_id FK "任务ID"
        bigint plan_detail_id FK "计划明细ID"
        int sample_quantity "期望抽检数"
        int actual_quantity "实际抽检数"
        int accept_quantity "合格数"
        int reject_quantity "不合格数"
        varchar reject_reason "不合格原因(逗号分隔)"
        int status "状态(0待质检/1质检中/2已完成)"
    }

    QUALITY_INSPECTION_DISPOSE {
        bigint id PK
        bigint plan_detail_id FK "计划明细ID"
        int quantity "数量"
        int type "处置类型(1让步/2维修/3退供/4合格/5免检)"
        varchar inbound_order_no "入库单号"
    }

    QUALITY_INSPECTION_ADD_RECORD {
        bigint id PK
        bigint plan_detail_id FK "计划明细ID"
        varchar batch_no "批次号"
        int sample_quantity "抽检数"
    }

    QUALITY_INSPECTION_TASK_PIC {
        bigint id PK
        bigint task_id FK "任务ID"
        varchar url "图片URL"
    }

    QUALITY_INSPECTION_LOG {
        bigint id PK
        bigint business_id "业务ID"
        int business_type "业务类型(1计划/2计划明细/3任务/4任务明细)"
        varchar operate_type "操作类型"
        varchar contents "日志内容"
    }

4.2 数据库归属

数据库 表 说明
creeks_purchasing 以上全部质检相关表 质检核心数据全部在采购服务
creeks_inventory inv_inbound_receipt.quality_inspected 入库单上的"是否已质检"标记
dbwms_interfaceplatform syncinvoucher.qualityInspected 壹拓WMS同步表上的质检标记

五、接口全景

5.1 送货单相关接口

接口 路径 说明 版本
导入送货单(自动匹配采购单) POST /api/v2/receipt/order/import 新版导入 1.0
导入送货单(指定采购单) POST /api/v2/receipt/order/import 指定采购单 用户反馈优化
导入送货单(自动匹配新版) POST /api/v2/receipt/order/importNewAutoMatchPurchase 新版匹配 用户反馈优化
导入装箱单创建送货单 POST /api/v2/receipt/order/importOrderByBoxCreateAsync 已废弃 用户反馈优化弃用
导入装箱明细创建送货单 - 新版装箱导入 迭代3
导入装箱明细(指定采购单) POST /api/v2/receipt/order/importBoxDetailWithOrder 指定采购单 迭代3
补充装箱明细 POST /api/v2/receipt/order/importOrderByBoxSupplementAsync 补充装箱 1.0
查询装箱明细 POST /api/v2/receipt/order/queryReceiptDetailByBox 查看装箱 1.0
编辑送货单 POST /api/v2/receipt/order/edit 编辑 1.0
编辑前校验 POST /api/v2/receipt/order/editCheck 校验是否弹窗 用户反馈优化
提交送货单 POST /api/v2/receipt/order/submit 提交 MVP
签收送货单 POST /api/v2/receipt/order/sign 签收 MVP
查询送货单列表(新版) POST /api/v2/receipt/order/list 仓库处理中tab 1.0
送货单详情 GET /api/v2/receipt/order/{id} 详情 1.0
退回送货中 POST /api/v2/receipt/order/returnOrderDeliveringStatus 退回 1.0优化
签收后退回待签收 POST /api/v2/receipt/order/returnOrderWaitSignStatus 撤销签收 1.0优化
仓库处理中Tab条数 POST /api/v2/receipt/order/queryProcessingTabCount 四种过滤 1.0
导出送货单质检结果 POST /api/v2/receipt/order/exportReceiptListQualityResult 按单据维度 1.0优化
导出送货单(货物维度) POST /api/v2/receipt/order/exportOrderDetailBySkuDimension SKU维度 用户反馈优化
退回供应商 POST /api/v2/receipt/order/returnSupplier 退供库存调整 迭代1&2

5.2 质检计划相关接口

接口 路径 说明
创建质检计划 POST /api/v1/quality/inspection/plan/create 指定SKU+质检方式
导入创建质检计划 POST /api/v1/quality/inspection/importCreatePlan 批量导入
修改质检方式 POST /api/v1/quality/inspection/modifyQualityInspectionMethod 含是否质检
查询质检计划列表 POST /api/v1/quality/inspection/plan/list 分页查询
查询质检计划详情 GET /api/v1/quality/inspection/plan/{id} 基础信息
查询计划明细列表 POST /api/v1/quality/inspection/plan/detail/list SKC/SKU展开
查询计划明细子列表 GET /api/v1/quality/inspection/plan/detail/subList SKU展开
查询计划批次 POST /api/v1/quality/inspection/plan/batch 加抽记录
查询计划汇总数据 POST /api/v1/quality/inspection/plan/summary 货物总数+期望抽检数
结束质检计划 POST /api/v1/quality/inspection/completePlan 手动结束
中断质检 POST /api/v1/quality/inspection/interrupt 提前结束+填写可/不可接收数
导出所有计划明细 POST /api/v1/quality/inspection/plan/detailList/export 全量导出
获取可加抽数 POST /api/v1/quality/inspection/plan/detail/canAddNum 加抽前判断
加抽 POST /api/v1/quality/inspection/task/detail/addNum AQL/比例加抽
全检 POST /api/v1/quality/inspection/task/detail/addNumAll 100%抽检
质检员给出判定结果 POST /api/v1/quality/inspection/plan/judgment 手动判定
判定结果前校验 POST /api/v1/quality/inspection/plan/judgmentCheck 提前结束提示
标记未收到货 POST /api/v1/quality/inspection/markUnReceived 标记未收货
查询操作日志 POST /api/v1/quality/inspection/plan/getQualityOptLog 日志查看

5.3 质检任务相关接口

接口 路径 说明
创建质检任务 POST /api/v1/quality/inspection/task/create 按SKU+数量
查询任务列表 POST /api/v1/quality/inspection/task/list 分页查询
查询任务详情 GET /api/v1/quality/inspection/task/{id} 基础信息
查询任务明细 POST /api/v1/quality/inspection/task/detail/list 批次+SKU
查询任务关联的计划明细 POST /api/v1/quality/inspection/task/relatedPlanDetails 方便判定
查看可拆分明细 POST /api/v1/quality/inspection/task/detail/waitSplit 拆分前
拆分质检任务 POST /api/v1/quality/inspection/task/split 按数量拆分
开始质检 POST /api/v1/quality/inspection/task/start 开始
释放任务 POST /api/v1/quality/inspection/task/release 取消
编辑保存质检结果 POST /api/v1/quality/inspection/task/detail/save 含实际抽检数+判定
提交质检结果 POST /api/v1/quality/inspection/task/detail/submit 提交
导入质检结果 POST /api/v1/quality/inspection/importQualityTaskResult Excel导入
导出任务明细 POST /api/v1/quality/inspection/task/detail/export Excel导出
上传任务图片 POST /api/v1/quality/inspection/task/picture/upload 七牛云
删除任务图片 POST /api/v1/quality/inspection/task/picture/delete 删除
退回修改质检结果前校验 POST /api/v1/quality/inspection/task/detail/returnModifyCheck 校验
退回修改质检结果 POST /api/v1/quality/inspection/task/detail/returnModify 修改已提交结果
校验是否可编辑判定结果 POST /api/v1/quality/inspection/checkLastFinishTask 编辑前校验
修改任务质检员 - 变更质检员

5.4 质检结果与入库相关接口

接口 路径 说明
查询质检结果 POST /api/v1/quality/inspection/getQualityResult 送货单维度
查询质检结果子列表 POST /api/v1/quality/inspection/getQualityResultSub SKC展开
导出质检结果 POST /api/v1/quality/inspection/exportQualityResult 不合格品处置表
编辑不可接收品处理表 POST /api/v2/receipt/order/saveDisposeTable 让步/维修/退供
提交不可接收品处理表 POST /api/v2/receipt/order/submitDisposeTable 提交处置
导入不合格品处置表 POST /api/v1/quality/inspection/importDisposeTable 导入处置
撤回处理表 POST /api/v1/quality/inspection/revokeDisposeTable 撤回已提交方案
查询入库记录 POST /api/v1/quality/inspection/getInboundRecord 可入库产品
根据入库记录创建入库单 POST /api/v1/quality/inspection/createInboundByRecord 勾选创建

5.5 其他接口

接口 路径 说明
获取质检企业白名单 GET /api/v1/receipt/order/enterprises/whiteList 灰度发布
查询质检员 - 质检主管/质检员角色
查询质检员 - 质检主管/质检员角色

5.6 接口详细处理逻辑

以下按业务模块分类,描述每个核心接口的完整处理流程。
Controller入口统一在 QualityInspectionController(路径前缀 /remote/quality/inspection)和 PurchaseReceiptOrderControllerV2(路径前缀 /remote/purchase/receipt/v2)。


5.6.1 送货单管理接口

(1)提交送货单
属性 值
路径 POST /remote/purchase/receipt/v2/submit
代码 ReceiptServiceV2Impl#submitOrder → executeSubmitOrder
权限 receipt_order_commit_new
flowchart TD
    A["校验送货单存在且状态=送货中"] --> B["校验送货单明细非空"]
    B --> C["查询质检计划明细,校验非空<br/>缺少质检计划无法提交"]
    C --> D["校验质检计划SKU与送货单明细匹配"]
    D --> E["校验采购单状态和最大送货量"]
    E --> F["加分布式锁"]
    F --> G["事务处理:"]
    G --> G1["更新送货中数量=计划送货数量"]
    G1 --> G2["变更采购库存:待送货减少,送货中增加"]
    G2 --> G3["更新采购单状态和明细"]
    G3 --> G4["送货单状态改为待签收"]
    G4 --> G5["记录操作日志"]

关键校验:送货单明细必须有对应的质检计划;每个SKU都必须在质检计划中存在。


(2)签收送货单
属性 值
路径 POST /remote/purchase/receipt/v2/signUp
代码 ReceiptServiceV2Impl#signUpOrder → executeSignOrder
权限 receipt_order_sign_new
flowchart TD
    A["校验送货单存在且状态=待签收"] --> B["校验箱数>0"]
    B --> C["灰度判断:进入待质检 or 仓库处理中"]
    C --> D["事务处理:"]
    D --> D1["更新送货单状态、签收人、签收时间"]
    D1 --> D2["更新质检计划状态为待质检<br/>设置可开始质检时间=签收时间"]
    D2 --> D3["更新需质检的计划明细状态为待质检"]
    D3 --> D4["为免检货物创建免检入库记录<br/>(处置类型=免检入库)"]
    D4 --> D5["记录签收操作日志"]
    D5 --> D6{"全部货物免检?"}
    D6 -->|"是"| D7["自动创建入库单"]
    D6 -->|"否"| D8["结束"]
    D7 --> D8

关键逻辑:签收时区分「需质检」和「免质检」货物,免质检货物直接生成可入库记录;如果全部免检则自动创建入库单。


(3)退回送货中
属性 值
路径 POST /remote/purchase/receipt/v2/returnOrderDeliveringStatus
代码 ReceiptServiceV2Impl#returnOrderDeliveringStatus
权限 receipt_order_return_status

处理流程:

  1. 校验送货单存在且状态=待签收
  2. 加分布式锁
  3. 事务处理:送货中数量清零 → 采购库存变更(送货中减少、待送货增加)→ 更新采购单状态 → 送货单状态改为送货中

(4)签收后退回待签收
属性 值
路径 POST /remote/purchase/receipt/v2/returnOrderWaitSignStatus
代码 ReceiptServiceV2Impl#returnOrderWaitSignStatus
权限 receipt_order_return_wait_sign_status

处理流程:

  1. 校验送货单存在且状态=仓库处理中
  2. 校验无质检任务(有则不可退回)
  3. 校验无入库单(有则不可退回)
  4. 送货单状态改为待签收,清空签收时间
  5. 质检计划状态回退为待确认,清空可开始质检时间
  6. 质检计划明细状态回退为待确认

(5)仓库处理中Tab条数查询
属性 值
路径 POST /remote/purchase/receipt/v2/queryProcessingTabCount
代码 ReceiptServiceV2Impl#queryProcessingTabCount

处理流程:分别调用4次SQL查询,返回四种过滤条件的计数:

  • allCount:全部仓库处理中的送货单
  • noDisposeCount:至少有一个不可接收品未处理的送货单
  • noInboundCount:质检完成但未全部创建入库单的送货单
  • createdInboundCount:已创建入库单的送货单

5.6.2 质检计划管理接口

(1)创建质检计划
属性 值
路径 POST /remote/quality/inspection/plan/create
代码 QualityInspectionBizServiceImpl#createPlan → executeCreatePlan
权限 quantity_plan_create
flowchart TD
    A["校验请求参数<br/>(SKU编码、质检方式、样本算法等)"] --> B["查询送货单,校验存在性"]
    B --> C{"是否已存在质检计划?"}
    C -->|"是"| D["抛异常:已存在质检计划"]
    C -->|"否"| E["加分布式锁"]
    E --> F["事务处理:"]
    F --> F1["保存质检计划(状态=待确认)<br/>生成计划编号QIP"]
    F1 --> F2["保存送货单与质检计划关联关系"]
    F2 --> F3["合并送货单明细到创建项"]
    F3 --> F4["根据质检方式构建计划明细:<br/>- 免质检:最小抽检数=0<br/>- AQL抽检:按AQL算法计算<br/>- 比例抽检:按比例计算"]
    F4 --> F5["批量保存质检计划明细"]
    F5 --> F6["为每条明细新增初始加抽记录"]
    F6 --> F7["保存操作日志"]

抽检数计算规则:

  • AQL抽检:根据一般检测水平II类 + 送货批量 → 查AQL表得出样本量 → 按SKU数量占比分摊
  • 比例抽检:最小抽检数 = 送货数量 × 抽检比例

(2)导入创建质检计划
属性 值
路径 POST /remote/quality/inspection/importCreatePlan
代码 QualityInspectionBizServiceImpl#importSkuCreatePlan
权限 quantity_plan_create

处理流程:

  1. 根据导入数据中的送货单号查询送货单列表
  2. 校验必填项(送货单号存在、SKU编码、是否质检、质检方式、样本算法)
  3. 校验唯一性(送货单号+SKU编码不能重复)
  4. 有错误直接返回校验结果,不执行保存
  5. 按送货单号分组,遍历每组调用 createPlan

(3)修改质检方式
属性 值
路径 POST /remote/quality/inspection/modifyQualityInspectionMethod
代码 QualityInspectionBizServiceImpl#modifyQualityInspectionMethod → execModifyQualityInspectionMethod
flowchart TD
    A["校验送货单状态合法<br/>(待签收/仓库处理中)"] --> B["校验无质检任务产生"]
    B --> C["校验无入库单产生"]
    C --> D["校验SKU在计划明细中存在"]
    D --> E["加分布式锁"]
    E --> F["事务处理:"]
    F --> F1["对比新旧字段差异<br/>(质检方式/地点/样本算法/是否质检)"]
    F1 --> F2["重新计算期望抽检数"]
    F2 --> F3["更新计划明细、加抽记录"]
    F3 --> F4{"是否质检由是改否?"}
    F4 -->|"是"| F5["创建免检入库记录"]
    F4 -->|"否"| F6{"是否质检由否改是?"}
    F6 -->|"是"| F7["删除免检入库记录<br/>状态改为待质检"]
    F5 --> F8["记录变更日志"]
    F6 -->|"否"| F8
    F7 --> F8

(4)删除质检计划
属性 值
路径 POST /remote/quality/inspection/plan/remove
代码 QualityInspectionBizServiceImpl#removePlan

处理流程:

  1. 查询质检计划,校验状态必须为「待确认」
  2. 删除计划明细关联的入库记录(处置方案)
  3. 删除质检计划
  4. 记录操作日志

(5)结束质检计划
属性 值
路径 POST /remote/quality/inspection/completePlan
代码 QualityInspectionBizServiceImpl#completePlan → execCompletePlan → completePartPlan/completeWholePlan
权限 quantity_plan_complete
flowchart TD
    A["查询质检计划"] --> B["加分布式锁"]
    B --> C{"planDetailIds是否为空?"}
    C -->|"是(整计划结束)"| D["completeWholePlan"]
    C -->|"否(部分结束)"| E["completePartPlan"]
    D --> F["校验计划状态=质检中"]
    E --> G["查询指定的计划明细<br/>过滤免质检的"]
    F --> H["按SKC/SKU维度校验<br/>所有任务明细是否已完成"]
    G --> H
    H --> I["批量更新明细状态为已完成"]
    I --> J["回写不合格数量和原因到送货单明细"]
    J --> K{"所有明细都完成?"}
    K -->|"是"| L["更新计划状态为已完成"]
    K -->|"否"| M["保持质检中"]
    L --> N["处理合格产品:自动创建合格入库记录<br/>不合格数=0则自动标记处置状态=已提交"]
    M --> N

自动处置逻辑:合格产品(不合格数=0)自动标记处置状态为「已提交」,并创建合格入库类型的可入库记录。


(6)中断质检
属性 值
路径 POST /remote/quality/inspection/interrupt
代码 QualityInspectionBizServiceImpl#qualityInspectionInterrupt → execQualityInspectionInterrupt
权限 quantity_inspection_interrupt
flowchart TD
    A["参数校验"] --> B["校验计划存在"]
    B --> C["校验计划明细状态=待质检或质检中<br/>且无判定结果"]
    C --> D["校验可接收数+不可接收数=计划送货量"]
    D --> E["加分布式锁"]
    E --> F["事务处理:"]
    F --> F1["设置明细的可接收数、不可接收数<br/>状态改为已完成"]
    F1 --> F2["构建已完成的任务明细列表"]
    F2 --> F3["批量更新任务明细、计划明细"]
    F3 --> F4{"所有明细都完成?"}
    F4 -->|"是"| F5["完成计划"]
    F4 -->|"否"| F6["保持质检中"]
    F5 --> F7["创建合格入库记录"]
    F6 --> F7
    F7 --> F8{"满足自动创建入库单条件?"}
    F8 -->|"是"| F9["自动创建入库单"]
    F8 -->|"否"| F10["发送不合格品待处理消息"]
    F9 --> F10

5.6.3 质检任务管理接口

(1)创建质检任务
属性 值
路径 POST /remote/quality/inspection/task/create
代码 QualityInspectionBizServiceImpl#createTask → executeCreateTask
权限 quantity_plan_create
flowchart TD
    A["校验请求参数<br/>(计划ID、质检员、SKU列表、分配数量)"] --> B["校验计划存在且未完成<br/>可开始质检时间已设置"]
    B --> C["校验明细状态未完成<br/>分配数量合法(非负、不超待创建数)"]
    C --> D["加分布式锁(计划维度)"]
    D --> E["事务处理:"]
    E --> E1["更新计划明细的已创建任务数量"]
    E1 --> E2["保存质检任务(状态=待开始)<br/>生成任务编号QIT"]
    E2 --> E3["为每个SKU创建质检任务明细<br/>期望抽检数=分配数量"]
    E3 --> E4["记录操作日志"]

(2)拆分质检任务
属性 值
路径 POST /remote/quality/inspection/task/split
代码 QualityInspectionBizServiceImpl#splitTask → executeSplitTask
权限 quantity_task_split

处理流程:

  1. 校验任务和计划存在且未完成
  2. 加分布式锁(计划维度)
  3. 按SKU拆分:旧任务明细的期望抽检数减少拆分数量(为0则删除)
  4. 不允许全部拆分(至少保留1个明细)
  5. 创建新任务,新任务明细的期望抽检数=拆分数量
  6. 记录操作日志

(3)开始质检
属性 值
路径 POST /remote/quality/inspection/startTask
代码 QualityInspectionBizServiceImpl#startTask → execStartTask
权限 quantity_task_start

处理流程:

  1. 校验任务存在且状态=待开始
  2. 校验每个计划明细的待创建任务数为0(即所有任务都已创建)
  3. 更新任务开始时间
  4. 任务明细状态:待质检 → 质检中
  5. 首次开始质检时:计划状态改为质检中,计划明细状态改为质检中
  6. 记录操作日志

(4)编辑保存质检结果
属性 值
路径 POST /remote/quality/inspection/task/detail/save
代码 QualityInspectionBizServiceImpl#saveTaskDetailResult → QualityInspectionTaskSaveService#executeSaveTaskDetailResult
权限 quantity_task_result_edit
flowchart TD
    A["校验操作人信息"] --> B["查询任务、计划、任务明细"]
    B --> C["加分布式锁(任务维度)"]
    C --> D["遍历每个SaveItem:"]
    D --> D1["校验任务明细存在"]
    D1 --> D2["校验未到可开始时间不允许保存"]
    D2 --> D3["校验任务已完成不允许保存"]
    D3 --> D4["校验:不合格数>0时必须选择不合格原因"]
    D4 --> D5["校验:不合格数不能大于实际抽检数"]
    D5 --> D6["校验:同SKU所有任务实际抽检数总和<br/>不能大于计划送货量"]
    D6 --> D7["更新任务明细:<br/>实际抽检数、合格数=实际抽检数-不合格数<br/>不合格原因、质检说明"]
    D7 --> D8["构建变更日志(对比新旧值)"]
    D8 --> D9["批量更新任务明细"]
    D9 --> D10["批量保存日志"]

合格数计算:合格数 = 实际抽检数 - 不合格数(系统自动计算,无需用户填写)


(5)提交质检结果
属性 值
路径 POST /remote/quality/inspection/task/detail/submit
代码 QualityInspectionBizServiceImpl#submitTaskDetailResult → QualityInspectionTaskSubmitService#executeSubmitTaskDetailResult
权限 quantity_task_result_submit
flowchart TD
    A["校验操作人、任务和计划存在"] --> B["校验任务和计划状态"]
    B --> C["校验质检图片<br/>(不合格数>0时必须上传图片)"]
    C --> D["校验质检结果数量<br/>(实际抽检数不为空)"]
    D --> E["遍历提交的任务明细:"]
    E --> E1["状态改为已完成"]
    E1 --> E2["记录提交日志"]
    E2 --> E3["批量更新任务明细"]
    E3 --> F{"该任务所有明细都完成?"}
    F -->|"是"| G["任务状态改为已完成"]
    F -->|"否"| H["继续"]
    G --> I{"该计划所有任务都完成?"}
    H --> I
    I -->|"是"| J["填充计划完成时间"]
    I -->|"否"| K["触发自动判定"]
    J --> K
    K --> L["自动判定逻辑:<br/>- 全检完成→按结果接收<br/>- 抽检且不合格数=0→可接收"]
    L --> M{"满足自动创建入库单条件?"}
    M -->|"是"| N["自动创建入库单"]
    M -->|"否"| O["结束"]
    N --> O

自动判定触发条件:

  • 产品的所有任务明细都已完成
  • 待创建任务数=0
  • 实际抽检数=期望抽检数
  • 全检:自动判定为「按结果接收」
  • 抽检+不合格数=0:自动判定为「可接收」

(6)退回修改质检结果
属性 值
路径 POST /remote/quality/inspection/task/detail/returnModify
代码 QualityInspectionBizServiceImpl#returnModifyTaskDetailResult → execReturnModifyTaskDetailResult
权限 quantity_task_result_return_modify
flowchart TD
    A["退回修改前校验:"] --> A1["SKU没有关联入库单"]
    A1 --> A2["AQL抽检时同SKC下其他SKU也没有入库单"]
    A2 --> A3["不可接收品处理表未提交"]
    A3 --> B["加分布式锁(计划维度)"]
    B --> C["事务处理:"]
    C --> C1["更新任务明细数值<br/>(保持FINISH状态)"]
    C1 --> C2["记录变更日志"]
    C2 --> C3["删除旧的合格入库处置方案"]
    C3 --> C4["重新计算判定结果:<br/>- 全部合格→可接收<br/>- 全检→按结果接收<br/>- 有不合格→清空等用户判定"]
    C4 --> C5["重置计划明细状态为质检中"]
    C5 --> C6["触发自动完成质检"]
    C6 --> C7["记录处置方案变更日志"]

(7)加抽/全检
属性 值
路径 POST /remote/quality/inspection/plan/detail/addNum(加抽)/ addNumAll(全检)
代码 QualityInspectionBizServiceImpl#addSampleNum → executeAddSampleNum
权限 quantity_plan_add_num / quantity_plan_add_all
flowchart TD
    A["查询计划,校验存在"] --> B["校验加抽参数"]
    B --> C["校验计划明细未完成"]
    C --> D["校验非重复加抽<br/>(关联任务明细必须已完成)"]
    D --> E["加分布式锁(计划维度)"]
    E --> F["事务处理:"]
    F --> F1{"质检方式?"}
    F1 -->|"比例抽检"| F2["加抽数 = 送货量 × (初始比例 + 0.1×n)<br/>n=第几次加抽"]
    F1 -->|"AQL抽检"| F3["按AQL算法查表计算下一档样本量"]
    F2 --> F4["生成批次号"]
    F3 --> F4
    F4 --> F5["更新计划明细的最小抽检数"]
    F5 --> F6["清空判定结果、可接收数、不可接收数"]
    F6 --> F7["删除已有的可入库记录"]
    F7 --> F8["保存加抽记录和日志"]

加抽后重置:加抽/全检后会清空之前已有的判定结果和可入库记录,回到「质检中」状态。


5.6.4 质检结果与判定接口

(1)质检员给出判定结果
属性 值
路径 POST /remote/quality/inspection/plan/judgment
代码 QualityInspectionBizServiceImpl#inspectorJudgmentResult → execInspectorJudgmentResult
权限 judgment_inspection_result
flowchart TD
    A["构建计划任务信息<br/>(计划、明细Map、任务明细Map)"] --> B["校验每个判定项:"]
    B --> B1["明细状态=质检中"]
    B1 --> B2["待创建任务数=0"]
    B2 --> B3["至少有一个完成的任务明细"]
    B3 --> C{"判定结果?"}
    C -->|"可接收"| D["校验所有任务明细已完成"]
    C -->|"不可接收"| E["收集需要提前结束的产品列表"]
    D --> F["加分布式锁"]
    E --> F
    F --> G["事务处理:"]
    G --> G1["如有需提前结束的产品:<br/>结束关联任务明细→完成任务→更新计划时间"]
    G1 --> G2["更新判定结果、设置可接收数/不可接收数"]
    G2 --> G3["记录判定日志"]
    G3 --> G4{"判定为可接收且不合格数=0?"}
    G4 -->|"是"| G5["自动触发结束质检"]
    G4 -->|"否"| G6{"有不合格品待处理?"}
    G5 --> G6
    G6 -->|"是"| G7["发送Creeks消息提醒"]
    G6 -->|"否"| G8["结束"]
    G7 --> G8

可接收数/不可接收数计算规则:

  • 判定「可接收」:不可接收数=所有批次不合格数总和,可接收数=送货量-不可接收数
  • 判定「不可接收」:不可接收数=送货量,可接收数=0
  • 判定「按结果接收」:不可接收数=所有批次不合格数总和,可接收数=送货量-不可接收数
  • 判定「空」:由跟单/质检员手动填写

(2)查询质检结果(质检结果Tab)
属性 值
路径 POST /remote/quality/inspection/getQualityResult
代码 QualityInspectionQueryBizServiceImpl#getQualityResult

处理流程:

  1. 根据收货单ID查询质检计划
  2. 查询SKC/SKU级别的质检结果(mapper聚合查询)
  3. 填充富信息:处置方案(让步接收/维修/退供数量)、箱号、任务数据、不合格原因
  4. 若为SKC维度,汇总子SKU的合格数/不合格数/未抽检数等
  5. 返回结果列表

5.6.5 不良品处置接口

(1)编辑不可接收品处理表
属性 值
路径 POST /remote/quality/inspection/saveDisposeTable
代码 QualityInspectionBizServiceImpl#saveDisposeTable
权限 save_disposeTable

处理流程:

  1. 校验计划明细状态=已完成
  2. 校验处置状态未提交(已提交不可编辑)
  3. 校验让步接收+维修合格+退供=不可接收数
  4. 分别为三种处置类型构建处置记录
  5. 与已有记录对比分类(新增/更新/删除)
  6. 批量执行数据库操作,记录变更日志

(2)提交不可接收品处理表
属性 值
路径 POST /remote/quality/inspection/submitDisposeTable
代码 QualityInspectionBizServiceImpl#submitDisposeTable
权限 submit_disposeTable

处理流程:

  1. 查询处置方案和质检结果
  2. 校验:不可接收数=0的跳过;不可接收数>0的,处置总量必须等于不可接收数
  3. 校验不重复提交
  4. 提交处置方案,更新计划明细处置状态为已提交
  5. 提交后检查是否还有待创建入库单的记录,如有则发送Creeks消息提醒

(3)导入不合格品处置表
属性 值
路径 POST /remote/quality/inspection/importDisposeTable
代码 QualityInspectionBizServiceImpl#importDisposeTable
权限 receipt_order_import_reject_dispose

处理流程:

  1. 校验没有入库单已产生
  2. 查询质检结果和计划明细
  3. 遍历导入数据逐条校验(SKU存在、处置数量合规)
  4. 有错误直接返回校验结果,不执行保存
  5. 与已有处置记录对比分类(新增/更新/删除),批量执行

(4)撤回处理表
属性 值
路径 POST /remote/quality/inspection/dispose/revoke
代码 QualityInspectionBizServiceImpl#revokeDisposeTable → execRevokeDisposeTable
权限 revoke_dispose_table
flowchart TD
    A["校验操作人、送货单、计划明细存在"] --> B["校验所有明细处置状态=已提交"]
    B --> C["校验非免检货物"]
    C --> D["校验处置记录未创建入库单"]
    D --> E["事务处理:"]
    E --> E1{"仅有退供处置?"}
    E1 -->|"是"| E2["退回退供库存:<br/>采购库存送货中减少、待送货增加<br/>采购单/采购申请同步调整"]
    E1 -->|"否"| E3["跳过库存回退"]
    E2 --> E4["删除除合格入库和免检入库外的<br/>所有处置记录"]
    E3 --> E4
    E4 --> E5["重置计划明细处置状态为待提交"]
    E5 --> E6["更新送货单状态为仓库处理中"]
    E6 --> E7["记录撤回操作日志"]

(5)退回供应商
属性 值
路径 POST /remote/quality/inspection/returnSupplier
代码 QualityInspectionBizServiceImpl#returnSupplier
权限 quantity_return_supplier

处理流程:

  1. 校验处置记录存在且类型非退供
  2. 按计划明细分组处置记录
  3. 已有退供记录则累加数量,否则新建退供记录
  4. 删除选中的非退供类型记录
  5. 执行退供库存调整:采购库存送货中增加、待送货减少 → 采购单/采购申请同步调整 → 记录库存流水日志

5.6.6 入库管理接口

(1)根据入库记录创建入库单
属性 值
路径 POST /remote/quality/inspection/createInboundByRecord
代码 QualityInspectionBizServiceImpl#createInboundByRecord → createInboundOrder
权限 save_inbound
flowchart TD
    A["根据disposeRecordIds查询入库记录"] --> B["校验记录存在且质检已完成"]
    B --> C["校验没有已创建的入库单"]
    C --> D["加分布式锁"]
    D --> E["事务处理:"]
    E --> E1["查询关联的送货单<br/>校验已签收"]
    E1 --> E2["查询需创建入库单的货物明细"]
    E2 --> E3["构建入库单请求:<br/>设置送货单信息、企业信息、仓库信息"]
    E3 --> E4["按渠道比例构建入库单货物列表"]
    E4 --> E5["按采购单分摊入库数量<br/>(allocationPurchaseInboundProduct)"]
    E5 --> E6["调用inventory服务创建入库单"]
    E6 --> E7["更新处置记录的入库单号"]
    E7 --> E8["同步到壹拓WMS"]

自动创建入库单触发条件(checkAndAutoCreateInboundOrder):

  1. 全部货物免检:签收送货单时自动触发
  2. 部分或全部质检:提交最后一个任务结果时,若全部产品判定可接收且可接收数=送货量
  3. 中断质检时:若全部产品满足条件

(2)查询入库记录
属性 值
路径 POST /remote/quality/inspection/getInboundRecord
代码 QualityInspectionQueryBizServiceImpl#getInboundRecord

处理流程:

  1. 通过mapper查询入库记录列表
  2. 处置类型码转中文名称
  3. 批量查询inventory系统的入库单信息
  4. 批量查询壹拓入库单状态
  5. 为每条记录设置入库单ID和壹拓状态

5.6.7 辅助功能接口

(1)上传/删除任务图片
属性 值
上传路径 POST /remote/quality/inspection/task/picture/upload
删除路径 POST /remote/quality/inspection/task/picture/delete

上传流程:校验taskId和图片列表非空 → 遍历校验URL和文件名 → 构建图片记录 → 批量保存

删除流程:校验图片ID和操作人 → 逻辑删除图片记录


(2)修改任务质检员
属性 值
路径 POST /remote/quality/inspection/task/modifyQualityInspector
代码 QualityInspectionBizServiceImpl#modifyTaskQualityInspector

处理流程:

  1. 校验任务存在且未完成
  2. 加分布式锁
  3. 更新任务的质检员信息
  4. 记录操作日志(旧质检员→新质检员)

前置条件:任务状态必须为「质检中」且没有已填入实际数量的任务明细。


(3)标记未收到货
属性 值
路径 POST /remote/quality/inspection/markUnReceived
权限 quantity_mark_un_received

处理流程:

  1. 校验有质检结果的产品不可标记
  2. 同一SKC部分SKU未收货,SKC期望抽检数重算(去掉该SKU送货量)
  3. 标记明细的isMarkedUnreceived=1
  4. 标记后不可创建质检任务
  5. 若已有质检任务,自动删除该SKU的任务明细

(4)自动发送Creeks消息提醒

触发场景1 — 不合格品待处理(sendMsgIfHasUnprocessedRejects):

  • 触发时机:给出判定结果后
  • 条件:计划明细的不可接收数>0 且 处置状态=未提交
  • 消息内容:送货单有不合格品待处理
  • 接收者:该企业的跟单部员工

触发场景2 — 待创建入库单(sendMsgIfHasPendingInbound):

  • 触发时机:提交处置方案后 / 自动提交处置方案后
  • 条件:所有明细处置状态=已提交,但存在未创建入库单的可入库记录
  • 消息内容:送货单待创建入库单
  • 接收者:该企业的跟单部员工

(5)查询操作日志
属性 值
路径 POST /remote/quality/inspection/getQualityOptLog
代码 QualityInspectionQueryBizServiceImpl#getLogs

日志类型(business_type):

  • 1=质检计划、2=计划明细、3=质检任务、4=任务明细

日志内容示例:

  • 修改质检结果:SKU005 实际抽检数【0】改为【4】;不合格数【0】改为【1】
  • 判定结果:SKC1 可接收数【20】改为【30】
  • 加抽:SKU005 加抽数量【3】
  • 退回供应商:修改产品SKU11的让步接收记录:让步接收【5】改为【0】;退供【0】改为【5】

六、代码架构现状

6.1 服务分布

项目 路径 职责
creeks-purchasing-server E:\code\creeks-purchasing\creeks-purchasing-server 质检核心业务逻辑(主服务)
creeks-purchasing-client E:\code\creeks-purchasing-client Feign接口定义、Entity、DTO、枚举、Request/Response
creeks-inventory E:\code\creeks-inventory 收货单维度的质检结果录入(另一套独立逻辑)

6.2 代码结构

creeks-purchasing-client/
├── entity/quality/          # 9个实体类
├── enums/quality/           # 枚举定义
│   ├── QualityInspectionPlanStatusEnum      # 计划状态
│   ├── QualityInspectionPlanDetailStatusEnum # 计划明细状态
│   ├── QualityInspectionTaskStatusEnum      # 任务状态
│   ├── QualityInspectionTaskDetailStatusEnum # 任务明细状态
│   ├── QualityInspectionResultEnum          # 判定结果
│   ├── QualityInspectionDisposeType         # 处置类型
│   ├── QualityInspectionRejectReasonEnum    # 不合格原因
│   ├── QualityInspectionMethodType          # 质检方式
│   └── QualityInspectionCriteriaType        # 样本算法
├── remote/                  # Feign远程接口
│   └── QualityInspectionRemoteService       # 45个API端点
├── req/quality/             # 44个Request类
├── resp/quality/            # 21个Response类
└── utils/                   # 工具类
    └── QualityStockUtil                     # 抽检算法计算

creeks-purchasing-server/
├── controller/quality/
│   └── QualityInspectionController          # 唯一Controller(~45个端点)
├── business/quality/
│   ├── QualityInspectionBizService          # 业务接口
│   ├── QualityInspectionBizServiceImpl      # 核心实现(3915行 ⚠️)
│   ├── QualityInspectionBizHelper           # 写操作辅助(1401行)
│   ├── QualityInspectionQueryBizService     # 查询接口
│   ├── QualityInspectionQueryBizServiceImpl # 查询实现(1180行)
│   ├── QualityInspectionQueryHelper         # 查询辅助(970行)
│   ├── QualityInspectionTaskSaveService     # 保存逻辑(299行)
│   └── QualityInspectionTaskSubmitService   # 提交逻辑(551行)
├── service/quality/         # 9个IService基础CRUD
├── mapper/quality/          # 9个Mapper接口 + 1个综合查询Mapper
└── utils/quality/
    └── QualityBatchNoUtils                  # 批次号生成

6.3 代码量级

模块 文件数 核心行数 说明
Entity 9 - 数据模型
Enum 9 - 枚举定义
Controller 1 - API入口
Service(Biz) 6 8,316 核心业务
Service(CRUD) 9 - 基础CRUD
Mapper 10 - 数据访问
Request/Response 65 - DTO
测试 28 - 单元测试

6.4 ⚠️ 代码风险点

风险 说明 严重程度
God Class QualityInspectionBizServiceImpl 单文件3915行,承载了几乎所有写操作 🔴 高
两套质检体系 purchasing的采购质检 与 inventory的收货质检是独立实现,逻辑不统一 🟡 中
历史兼容 质检方式枚举0/1已废弃但代码未清理,与2/3并存 🟡 中
灰度逻辑 企业白名单通过Redis管理,缺乏配置化管理 🟡 中
MVP表废弃 quality_inspection_task_result 表在1.0版本已删除,字段冗余到task_detail 🟢 低

七、灰度发布机制

质检模块通过企业白名单实现灰度发布:

# Redis操作
sadd 'codo:quality:inspection:white_list_key_by_enterprise' {企业ID}
  • 只有白名单内的企业才能使用新质检流程
  • 非白名单企业仍使用壹拓WMS的旧质检流程
  • 判断逻辑:QualityInspectionBizService 中通过检查企业ID是否在白名单来决定走新/旧流程

八、跨服务交互

graph LR
    A[creekson-api<br/>前端API网关] -->|Feign| B[creeks-purchasing<br/>质检核心服务]
    B -->|Feign| C[creeks-inventory<br/>库存/入库服务]
    B -->|Feign| D[codo-etop-cbec<br/>壹拓WMS对接]
    C -->|HTTP| D
    B -->|Redis| E[灰度白名单]
    B -->|七牛云| F[质检图片存储]
    B -->|MySQL| G[(creeks_purchasing)]
    C -->|MySQL| H[(creeks_inventory)]
交互 方向 说明
创建入库单 purchasing → inventory 质检完成后调用inventory创建入库单
入库单推送 purchasing → etop 通过inventory中转到壹拓WMS
入库结果回传 etop → inventory → purchasing 壹拓上架状态回传
质检标记 purchasing → inventory 设置入库单的quality_inspected标记
图片上传 前端 → 七牛云 → purchasing 七牛云存储质检图片

九、待确认/TODO事项

以下是在技术方案中标记但尚未闭环的事项:

事项 来源 状态
采购在途库存计算:已提交送货单但未创建入库单的在途量 1.0版本(第13点) 待确认
判定结果为空时,可/不可接收数由质检员自定义填写的完整校验 上线后优化 部分实现
定制类产品SKC与SKU质检判定的边界case MVP版本(待确认问题4.1) 待产品确认
没有SKC编码的货物如何展示 MVP版本(待确认问题4.3) 待确认

十、总结

质检模块从2025年4月的MVP版本到2026年2月的上线后优化迭代3,经历了8个版本迭代,已实现了从送货单导入 → 质检计划创建 → 任务分配 → 质检执行 → 结果判定 → 不良品处置 → 入库单创建的完整闭环。

核心能力已覆盖:

  • ✅ 送货单全生命周期管理(导入/编辑/提交/签收/退回)
  • ✅ 质检计划/任务/明细的完整CRUD和状态流转
  • ✅ AQL抽检 + 比例抽检 + 加抽/全检
  • ✅ 质检结果自动判定 + 手动判定
  • ✅ 不良品处置(让步接收/维修合格/退供)
  • ✅ 入库记录管理与入库单创建
  • ✅ 装箱明细管理
  • ✅ 免在仓质检
  • ✅ 退回修改质检结果 + 撤回处理表
  • ✅ 自动创建入库单 + Creeks消息提醒
  • ✅ 操作日志 + 数据权限控制
  • ✅ 灰度发布

主要改进方向:

  • 🔧 QualityInspectionBizServiceImpl 3915行的God Class需要拆分重构
  • 🔧 purchasing和inventory两套质检体系需要统一或明确边界
  • 🔧 已废弃的枚举值(质检方式0/1)需要代码清理
相关阅读

评论需要登录。生产环境使用 GitHub 登录,本地可前往 登录页 使用开发登录。

还没有评论,来抢沙发。