# 工艺路线工序 - 产出产品字段 - 前端联调方案 ## 涉及页面 - 工艺路线 - 工序配置页(新增/编辑工序时选择产出产品) - 排产 - 任务新增页(自动带入产出产品) - BOM 配置页(工序产出产品变更后,BOM 的产品字段联动) ## 业务背景 **问题**:当前所有工序的产出都是最终成品,无法区分中间工序的半成品产出。例如: - 工序1:拉丝 → 产出"铝杆"(半成品),不是"钢芯铝绞线" - 工序2:绞线 → 产出"钢芯铝绞线"(最终成品) **解决**:工艺路线工序新增"产出产品"字段,排产时自动带入任务的物料。 ## 业务流程与数据带入 1. **工艺路线配置** → 每道工序选择产出产品(半成品/成品) 2. **排产** → 选择工序后,自动从工序带出 `outputItemId` 作为任务的 `itemId` 3. **报工产出** → 从任务冗余 `itemId`(可能是半成品),产出单和库存自动正确 4. **倒冲扣料** → BOM 查询按工序+产出产品匹配,自动正确 ## API ### 工序保存接口(变更) | 方法 | 路径 | 说明 | |------|------|------| | POST | /mes/pro/route-process/create | 创建工序 | | PUT | /mes/pro/route-process/update | 更新工序 | **请求参数新增:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | outputItemId | Long | 否 | 产出产品物料编号(为空时默认用工单成品) | **请求示例(新增字段):** ```json { "routeId": 7, "processId": 10, "sort": 1, "keyFlag": false, "checkFlag": false, "backflushFlag": true, "outputItemId": 31 } ``` ### 工序查询接口(变更) | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pro/route-process/list-by-route | 按工艺路线查工序列表 | | GET | /mes/pro/route-process/get-by-route-and-process | 按路线+工序查配置 | | GET | /mes/pro/route-process/get | 获取单个工序 | **响应字段新增:** | 字段 | 类型 | 说明 | |------|------|------| | outputItemId | Long | 产出产品物料编号 | | outputItemCode | String | 产出产品物料编码 | | outputItemName | String | 产出产品物料名称 | **响应示例(新增字段):** ```json { "code": 0, "data": { "id": 1, "routeId": 7, "processId": 10, "processCode": "PROC_001", "processName": "拉丝", "sort": 1, "keyFlag": false, "checkFlag": false, "backflushFlag": true, "outputItemId": 31, "outputItemCode": "ITEM_20260716004", "outputItemName": "铝杆" } } ``` ## 字段展示规则 | 字段 | 展示位置 | 说明 | |------|----------|------| | outputItemId | 工序配置表单 | 物料选择器,可选半成品或成品 | | outputItemCode | 工序列表、工序详情 | 只读展示 | | outputItemName | 工序列表、工序详情 | 只读展示 | ## 前端修改点 ### 1. 工艺路线 - 工序配置 在"是否倒冲"开关之后,新增"产出产品"选择器: - 使用物料选择组件,筛选范围与工单产品选择器一致 - 非最后工序:选择该工序产出的半成品 - 最后一道工序:可留空(默认为工单成品),也可显式选择最终成品 - 保存时将 `outputItemId` 提交到后端 ### 2. 排产 - 任务新增 - 当用户选择工单 + 工艺路线 + 工序后,调用 `/mes/pro/route-process/get-by-route-and-process` 获取工序配置 - 如果工序配置了 `outputItemId`,自动填入任务的物料字段(展示 `outputItemName`) - 如果工序未配置 `outputItemId`,自动回退工单的成品 - 用户可以手动修改任务的物料(覆盖自动填入值) ### 3. BOM 配置 当工序配置了 `outputItemId` 后: - 该工序的 BOM 记录的"产品"字段应自动关联到 `outputItemId` - 即 BOM 表 `mes_pro_route_product_bom.product_id` 应与工序的 `outputItemId` 一致 - **注意**:现有 BOM 数据的 `product_id` 全部是最终成品 ID,配置工序产出产品后需重新调整 BOM ### 4. 工序列表展示 工序列表中新增"产出产品"列,展示 `outputItemName`,未配置时显示"默认(工单成品)"。 ## 业务规则说明 | 场景 | 规则 | |------|------| | outputItemId 为空 | 排产时任务的 itemId 默认用工单的 productId(向后兼容) | | outputItemId 不为空 | 排产时任务的 itemId 自动用工序的 outputItemId | | 最后一道工序 | 建议不填 outputItemId,或填最终成品,效果一样 | | 非最后工序 | 建议填写半成品,这样报工产出时入线边库的是半成品 | | 前端显式传 itemId | 后端优先使用前端传入值(向后兼容现有排产逻辑) | ## 注意事项 - 现有工艺术线数据不需要迁移,`outputItemId` 为空时行为与之前完全一致 - 配置了 `outputItemId` 后,需同步调整该工序的 BOM 配置(`product_id` 改为半成品 ID) - 半成品产出后会入线边库(WIP),下一道工序消耗时通过 BOM 倒冲或手工投料扣减 - 报工页面的"产品物料"字段可能显示半成品,这是正确的,不要误以为是数据错误