# 排产下达自动触发第一道工序质检 ## 功能说明 生产排产下达(生成生产工单)后,若第一道工序需要质检(`isQuality=true`),系统自动为该工序预生成一张过程检验(单道工序时生成出厂检)质检单。质检员无需等待该工序报工审核即可直接在质检列表中开始检验。 ## 涉及页面 - 生产排产/生产订单下达 - 质检管理(过程检验 / 出厂检验 列表页) ## 行为变化(纯后端,无新增接口) ### 1. 排产下达自动预生成质检单 覆盖全部工单创建入口: | 入口 | 说明 | |------|------| | 生产订单绑定工艺路线 `bindingRoute` | 生成工单后预生成质检单 | | 销售台账生成生产数据 `addProductionData` | 生成工单后预生成质检单 | | 印刷单逆时针倒排 `processRouteAnticlockwise` | 生成工单后预生成质检单 | 预生成规则: - 取工艺路线第一道工序(`dragSort` 升序 + `id` 升序); - 第一道工序 `isQuality` 非 true 则不生成; - 仅一道工序 → `inspect_type=2`(出厂检),否则 `inspect_type=1`(过程检,`process`=第一道工序名); - `quantity`=工单计划数量; - 关键字段:`work_order_id`=第一道工序工单 id,`product_main_id=NULL`(未关联报工)。 > 识别预生成质检单:`quality_inspect` 表中 `product_main_id IS NULL` 且 `work_order_id` 非空的记录即为排产预生成单。 ### 2. 报工审核时认领并更新 第一道工序报工审核(`nextAddProductMain`)时: - 若该工单存在预生成质检单(`work_order_id` 匹配且 `product_main_id IS NULL`)→ **认领**:回填 `product_main_id`=报工 id,`quantity` 更新为实际入库数量(产出 + 加放 - 报废); - 若该预生成单已提交(`inspect_state=1`)且为出厂检 → 先删除按计划数量入库的库存记录,再按实际数量重新入库,保证库存准确; - 若不存在预生成单(如工序临时新增)→ 走原有逻辑生成新质检单。 后续工序(非第一道)报工审核时仍按原有逻辑生成质检单。 ### 3. 列表/报告展示 - 质检列表的工单号通过 `COALESCE(qi.work_order_id, ppm.work_order_id)` 关联,预生成单(无报工)也能正常显示工单号; - 检验报告下载:预生成单(`product_main_id=NULL`)按 `work_order_id` → 生产订单 → 销售台账 反查客户名称。 ### 4. 删除清理 删除生产订单 / 删除销售台账生产数据 / 删除生产工艺路线工序项时,自动清理对应的预生成质检单及其检验参数;若预生成单已提交(`inspect_state=1`),则拒绝删除并提示“已提交的检验单不能删除”。 ## API 无新增、无修改接口。均为后端行为变更。 ## 前端修改点 无前端代码改动。 若需在界面区分“排产预生成”的质检单,可参考 `work_order_id`(非空)且 `product_main_id` 为空进行判断。 ## 数据库变更 执行 `sql/quality_inspect_add_work_order_id.sql`: ```sql ALTER TABLE quality_inspect ADD COLUMN work_order_id BIGINT NULL COMMENT '生产工单id(排产预生成质检单关联)' AFTER product_main_id; ALTER TABLE quality_inspect ADD INDEX idx_quality_inspect_work_order_id (work_order_id); ``` ## 注意事项 - 预生成质检单仅针对**第一道需质检工序**;中途工序仍需报工审核后才生成。 - 质检员可在报工前直接填写检验结果并提交;出厂检提交时会按计划数量入库,报工审核后自动按实际数量修正库存。 - 已提交的预生成质检单在删除订单/工单时会提示“已提交的检验单不能删除”,需先撤销或删除检验单。