# 工艺路线工序产出归属 - 前端联调方案 ## 涉及页面 - 工艺路线 - 工序与产出页签 - 工序新增/编辑弹窗(process-form.vue) - 工艺路线 - 启用前检查(route-configurator.vue) - 生产工单 - 新增/编辑弹窗 - 工序列表(受归属过滤影响,无需新增字段) - 生产任务 - 自动生成任务(产出物料按归属带入) ## 业务流程与数据带入 1. 工艺路线工序的产出物料新增「归属」概念: - 归属为空 = 多产品通用(该路线下所有产品都会产出该物料,适合同线共用的半成品); - 归属为某个产品 = 产品专属(只有生产该产品时才会产出)。 2. 选择产出物料时默认归属到物料自身;多产品共用的半成品需手动改为「通用」。 3. 下单(新建工单)时,按工单产品过滤工艺路线工序产出:只带入「通用」产出和「该产品专属」产出。 4. 自动生成任务时,任务产出物料同样按归属过滤,优先取过滤后的第一个产出;没有产出时取工单成品。 5. 末道工序的成品产出必须归属到自身产品(不能为「通用」),否则启用路线时会报错。 ## API | 方法 | 路径 | 说明 | |------|------|------| | POST | /mes/pro/route-process/create | 新增工序(请求新增 outputs) | | PUT | /mes/pro/route-process/update | 修改工序(请求新增 outputs) | | GET | /mes/pro/route-process/get | 工序详情(响应新增 outputs) | | GET | /mes/pro/route-process/list-by-route | 按路线获取工序(响应新增 outputs) | | GET | /mes/pro/route-process/list-by-product | 按产品获取工序(产出已按归属过滤) | **请求参数新增(create / update):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | outputs | Array | 否 | 产出物料归属配置,传入后优先于 outputItemIds | | outputs[].itemId | Long | 是 | 产出物料编号,必须是本路线绑定的产品 | | outputs[].productId | Long | 否 | 归属产品编号;不传或传空表示多产品通用 | | outputs[].sort | Integer | 否 | 排序,不传按数组顺序 | | outputs[].remark | String | 否 | 备注 | > 兼容说明:仍可只传 outputItemIds(老页面/工艺设计页),后端会自动判定归属——产出是路线绑定产品时归属到自身,否则视为通用。 **响应字段新增(get / list-by-route / list-by-product):** | 字段 | 类型 | 说明 | |------|------|------| | outputs | Array | 产出归属列表 | | outputs[].id | Long | 归属记录编号 | | outputs[].routeProcessId | Long | 工序编号 | | outputs[].productId | Long | 归属产品编号,空表示通用 | | outputs[].productName | String | 归属产品名称 | | outputs[].itemId | Long | 产出物料编号 | | outputs[].itemCode | String | 产出物料编码 | | outputs[].itemName | String | 产出物料名称 | | outputs[].sort | Integer | 排序 | | outputs[].remark | String | 备注 | **响应示例:** ```json { "code": 0, "data": { "id": 123, "processName": "包装入库", "outputs": [ { "productId": 201, "productName": "油浸式配电变压器", "itemId": 201, "itemName": "油浸式配电变压器", "sort": 1 }, { "productId": null, "productName": null, "itemId": 300, "itemName": "通用包装箱", "sort": 2 } ] } } ``` ## 字段展示规则 | 字段 | 展示位置 | 说明 | |------|----------|------| | outputs | 工序新增/编辑弹窗「本工序产出」 | 每行两个下拉:产出物料、归属;提供「添加产出」「删除」 | | 归属下拉 | 工序新增/编辑弹窗 | 选项为「通用(所有产品)」+ 路线产品列表 | | 产出物料下拉 | 工序新增/编辑弹窗 | 选项限定为路线绑定的产品 | | outputs | 工序列表「本工序产出」列 | 展示为「物料名(归属产品名)」或「物料名(通用)」 | ## 业务规则说明 | 场景 | 规则 | |------|------| | 选择产出物料 | 默认归属到物料自身,可手动改为「通用」 | | 多产品共用半成品 | 归属选择「通用」,所有产品下单时都会带入该产出 | | 产品专属产出 | 归属选择对应产品,只有该产品的工单/任务会带入 | | 末道工序成品 | 每个成品必须归属到自身产品,不能使用「通用」 | | 存量数据 | 原 output_item_id 自动拆分:是路线产品的归属到自身,否则视为通用 | | 只传 outputItemIds | 后端自动按「路线产品→专属、其它→通用」判定归属 | | 产出聚合字段 | output_item_id 仍保留并自动聚合,供任务、物料需求等旧逻辑使用 | ## 注意事项 - 归属产品下拉的选项就是当前工艺路线绑定的产品列表,未绑定产品不能作为归属。 - 产出物料必须属于路线绑定产品,否则启用路线时会报「产出未绑定到当前工艺路线」。 - 同一道工序可以同时存在通用产出和多个产品专属产出。 - 工序产出归属保存后,已创建的工单工序快照不受影响(快照在下单时按当时的归属过滤)。 - 工艺路线启用时,末道工序若存在「通用」成品产出会校验失败,需要在工序编辑中改为产品专属。