# 基础参数与工序绑定 + 报工填写参数字段 - 前端联调方案 ## 需求背景 - 基础参数(工艺参数,菜单「工艺设计 → 基础参数」)原本无法与「工序」直接绑定。 - 本次实现:**工序主数据可绑定基础参数**;任务无参数模板时,生成任务会按工序绑定的参数自动固化参数快照;**报工时必须填写绑定的参数字段**(必填参数强校验),报工详情/列表回显参数值。 ## 涉及页面 1. 工序设置页(`mes/process-design/process/index`)——新增「工艺参数」Tab,维护工序绑定的参数 2. 基础参数页(`mes/process-design/parameter/index`)——新增「关联工序」入口,查看该参数被哪些工序使用 3. 生产任务创建/自动排产——任务按工序绑定参数生成参数快照(无模板时) 4. 生产报工新增/编辑——按任务参数记录渲染参数字段,必填参数校验 5. 报工详情/列表——回显已填写的参数值 ## 业务流程与数据带入 ``` 1. 工序设置页 → 「工艺参数」Tab → 勾选基础参数,设置是否必填/排序 → 保存到 mes_pro_process_param 2. 排产/手工建任务 → 任务的工序若未绑定参数模板,则从「工序绑定的参数」生成任务参数记录快照 (参数来源优先级:工单工序绑定模板 → 路线工序绑定模板 → 工序主数据绑定参数 → 无参数记录) 3. 生产报工 → 按任务参数记录渲染参数字段(参数名 + 单位 + 必填星号) 4. 提交报工 → 必填参数为空则后端拒绝(报错「必填参数【xxx】未填写」) 5. 报工详情/列表 → 回显本次任务参数快照及已填写的参数值 ``` ## API ### 一、工序-工艺参数绑定(新增) | 方法 | 路径 | 说明 | |------|------|------| | GET | `/admin-api/mes/pro/process-param/list-by-process` | 查询工序绑定的参数列表(带参数详情/单位) | | POST | `/admin-api/mes/pro/process-param/update-bindings` | 全量覆盖保存工序绑定的参数 | | GET | `/admin-api/mes/pro/process-param/list-by-param` | 反查某基础参数被哪些工序绑定 | 权限:读 `mes:pro-process:query`;写 `mes:pro-process:update`(复用工序权限,无需新菜单)。 **GET /list-by-process 请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | processId | Long | 是 | 工序编号 | **响应:** ```json { "code": 0, "data": [ { "id": 9, "processId": 10, "processParamId": 7, "paramCode": "CS202607150004", "paramName": "测试参数_数值", "paramType": 1, "unitMeasureId": 1, "unitMeasureName": "吨", "required": true, "sort": 1, "remark": null } ] } ``` **POST /update-bindings 请求参数(全量覆盖):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | processId | Long | 是 | 工序编号 | | items | Array | 否 | 绑定的参数列表(传空数组=清空绑定) | | items[].processParamId | Long | 是 | 基础参数编号 | | items[].required | Boolean | 否 | 是否必填(可覆盖参数默认值) | | items[].sort | Integer | 否 | 排序 | | items[].remark | String | 否 | 备注 | **GET /list-by-param 请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | paramId | Long | 是 | 基础参数编号 | **响应:** `data` 为工序列表(`id`、`code`、`name`)。 ### 二、任务参数记录(已有接口,行为增强) 任务创建/自动排产时,若任务无参数模板但工序绑定了参数,会生成一条 `templateName=工序绑定参数`、`templateId=null` 的参数记录。 | 方法 | 路径 | 说明 | |------|------|------| | GET | `/admin-api/mes/pro/work-order-param-record/page-by-work-order?taskId=` | 按任务查询参数记录(含明细快照) | 明细快照新增字段:`required`(是否必填)。 ### 三、生产报工(已有接口,增强) | 方法 | 路径 | 说明 | |------|------|------| | POST | `/admin-api/mes/pro/feedback/create` | 创建报工(提交 `paramValues`) | | PUT | `/admin-api/mes/pro/feedback/update` | 修改报工 | | GET | `/admin-api/mes/pro/feedback/get` | 报工详情(响应新增 `paramValues`) | | GET | `/admin-api/mes/pro/feedback/page` | 报工分页(响应新增 `paramValues`) | **请求参数新增(已存在):** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | paramValues | Array | 否 | 本次报工填写的参数值;任务无参数记录时不传 | | paramValues[].detailId | Long | 是(传入时) | **任务参数记录明细编号**(不是模板明细编号) | | paramValues[].value | String | 条件必填 | 参数值(必填参数不能为空) | **响应字段新增(报工详情/列表):** | 字段 | 类型 | 说明 | |------|------|------| | paramValues | Array | 任务参数快照及已填写的值 | | paramValues[].detailId | Long | 任务参数记录明细编号 | | paramValues[].paramCode | String | 参数编码 | | paramValues[].paramName | String | 参数名称 | | paramValues[].paramType | Integer | 参数类型 | | paramValues[].unitMeasureName | String | 单位名称 | | paramValues[].paramValue | String | 参数值 | | paramValues[].required | Boolean | 是否必填 | **响应示例(报工详情):** ```json { "code": 0, "data": { "id": 48, "code": "FB_TEST_39", "processId": 10, "paramValues": [ { "detailId": 55, "paramCode": "CS202607150004", "paramName": "测试参数_数值", "paramType": 1, "unitMeasureName": "吨", "paramValue": "200", "required": true }, { "detailId": 56, "paramCode": "CS202607100003", "paramName": "测试参数11", "paramType": 2, "unitMeasureName": "千克", "paramValue": "200", "required": false } ] } } ``` ## 字段展示规则 ### 工序设置页「工艺参数」Tab | 字段 | 展示位置 | 说明 | |------|----------|------| | 参数编码/名称 | Tab 表格 | 展示已绑定参数 | | 参数类型 | Tab 表格 | 字典:1=文本 2=数值 3=布尔 4=日期 | | 单位 | Tab 表格 | 计量单位名称 | | 是否必填 | Tab 表格(开关) | 可覆盖参数默认值 | | 排序 | Tab 表格 | 数字排序 | | 备注 | Tab 表格 | 备注 | | 操作 | Tab 表格 | 新增行(选择基础参数)、删除行 | | 保存 | Tab 底部 | 全量覆盖保存(调用 update-bindings) | ### 基础参数页「关联工序」 | 字段 | 展示位置 | 说明 | |------|----------|------| | 工序编码/名称 | 弹窗/抽屉 | 该参数被绑定的工序列表(只读) | ### 生产报工表单 | 字段 | 展示位置 | 说明 | |------|----------|------| | 参数名称 | 表单行标签 | 从任务参数记录快照读取 | | 单位 | 输入框后缀 | 如 ℃ | | 必填 | 红色星号 | required=true 时标记 | | 参数值 | 输入框 | 按参数类型渲染输入控件 | | 必填校验 | 提交时 | 必填参数为空,后端返回「必填参数【xxx】未填写」 | ## 业务规则说明 | 场景 | 规则 | |------|------| | 参数来源优先级 | 工单工序绑定模板 → 路线工序绑定模板 → 工序主数据绑定参数 → 无参数记录 | | 无参数记录 | 任务正常生成、报工不要求参数值 | | 有参数记录 | 报工按任务参数明细填写;必填参数(required=true)必须填写 | | 快照机制 | 任务生成时固化参数快照(名称/类型/单位/必填),后续改工序绑定不影响历史任务 | | 全量覆盖 | 工序绑定保存为全量覆盖;传空数组=清空绑定 | | 删除基础参数 | 自动清理其工序绑定关系 | | 报工回显 | 报工详情/列表回显任务参数快照及已填值,历史值不因后续变更改变 | ## 注意事项 - `paramValues[].detailId` 是**任务参数记录明细编号**,不是模板明细编号;前端应先按任务参数记录接口取明细,再以其 id 提交。 - 任务无模板但工序绑定了参数时,参数记录的 `templateId=null`、`templateName=工序绑定参数`,工单参数记录页按此展示。 - 参数类型:1=文本 2=数值 3=布尔 4=日期,报工表单按类型渲染输入控件。 - 报工提交时即使不填参数(paramValues 为空),后端也会校验必填参数,任务绑定了参数时必须填写。 - 工序绑定参数接口的读写权限复用工序设置页权限(`mes:pro-process:query/update`)。 - 前端页面路径与菜单:工序设置 `mes/process-design/process/index`、基础参数 `mes/process-design/parameter/index`。