# 工单生产参数记录 - 前端联调方案 ## 涉及页面 - 工单详情(新增"参数记录"Tab,查看/管理工单的参数记录) - 参数记录新增/编辑弹窗(选择参数模板,填写参数值) ## 业务流程与数据带入 ``` 1. 进入工单详情 → 切换到"参数记录"Tab → 查看该工单所有参数记录 2. 点击"新增参数记录" → 弹窗选择参数模板 → 自动加载模板下的参数列表(参数名、单位、是否必填) 3. 填写各参数值 → 保存(一条记录 = 模板 + 所有参数的填写值) 4. 同一工单可多次新增参数记录(每班次/每批次记录一次) 5. 编辑时只能修改填写值和备注,不能更换模板 6. 删除记录时整条记录(含所有参数明细)一起删除 ``` ## 数据模型说明 ``` 参数记录(主表) 参数记录明细 ┌─────────────────────┐ ┌─────────────────────────┐ │ id: 1 │ │ id: 101 │ │ workOrderId: 10 │──1:N──→│ recordId: 1 │ │ templateId: 2 │ │ paramName: 温度 │ │ templateCode: CSMB002│ │ paramType: 2 (数值) │ │ templateName: 注塑模板│ │ unitMeasureName: ℃ │ │ recordNo: BATCH-001 │ │ paramValue: 200 │ │ remark: 首件记录 │ ├─────────────────────────┤ └─────────────────────┘ │ id: 102 │ │ recordId: 1 │ │ paramName: 压力 │ │ paramType: 2 (数值) │ │ unitMeasureName: MPa │ │ paramValue: 50 │ └─────────────────────────┘ ``` --- ## API ### 一、参数模板接口(已有,用于下拉选择) #### 1.1 获取参数模板精简列表 | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pd/process-param-template/page | 获取参数模板分页列表 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | pageNo | Integer | 是 | 页码 | | pageSize | Integer | 是 | 每页条数(建议 100,用于下拉) | **响应字段(关键字段):** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 模板编号 | | templateCode | String | 模板编码 | | templateName | String | 模板名称 | | templateType | Integer | 模板类型 | --- #### 1.2 获取参数模板详情(含明细,用于加载参数列表) | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pd/process-param-template/get | 获取模板 + 参数明细 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 模板编号 | **响应示例:** ```json { "code": 0, "data": { "id": 2, "templateCode": "CSMB202607100002", "templateName": "注塑参数模板", "templateType": 1, "details": [ { "id": 3, "paramCode": "TEMP", "paramName": "温度", "paramType": 2, "unitMeasureId": 5, "unitMeasureName": "℃", "required": true }, { "id": 4, "paramCode": "PRESS", "paramName": "压力", "paramType": 2, "unitMeasureId": 8, "unitMeasureName": "MPa", "required": true }, { "id": 5, "paramCode": "TIME", "paramName": "保压时间", "paramType": 2, "unitMeasureId": 12, "unitMeasureName": "s", "required": false } ] } } ``` **数据带入说明:** 选择模板后,将 `details` 列表渲染为表单行,每行展示参数名 + 单位 + 输入框,`required=true` 的参数标记必填。 --- ### 二、工单参数记录接口 #### 2.1 创建参数记录 | 方法 | 路径 | 说明 | |------|------|------| | POST | /mes/pro/work-order-param-record/create | 为工单创建一条参数记录 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | workOrderId | Long | 是 | 工单编号(URL 参数) | | templateId | Long | 是 | 参数模板编号 | | recordNo | String | 否 | 记录序号/批次号 | | remark | String | 否 | 备注 | | details | Array | 是 | 参数明细列表 | | details[].templateDetailId | Long | 是 | 模板明细编号(来自模板详情的 details[].id) | | details[].paramValue | String | 条件必填 | 参数值(必填参数不能为空) | **请求示例:** ``` POST /mes/pro/work-order-param-record/create?workOrderId=10 { "templateId": 2, "recordNo": "BATCH-001", "remark": "首件记录", "details": [ { "templateDetailId": 3, "paramValue": "200" }, { "templateDetailId": 4, "paramValue": "50" }, { "templateDetailId": 5, "paramValue": "30" } ] } ``` **响应:** ```json { "code": 0, "data": 1024 } ``` **接口调用时序:** ``` 1. 用户点击"新增参数记录" 2. 调用 GET /mes/pd/process-param-template/page 获取模板下拉列表 3. 用户选择模板 4. 调用 GET /mes/pd/process-param-template/get?id=xxx 获取模板参数明细 5. 前端将 details 渲染为表单(参数名 + 单位 + 输入框) 6. 用户填写参数值 7. 调用 POST /mes/pro/work-order-param-record/create 提交 ``` --- #### 2.2 更新参数记录 | 方法 | 路径 | 说明 | |------|------|------| | PUT | /mes/pro/work-order-param-record/update | 更新参数记录(仅修改填写值,不能换模板) | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 记录编号 | | templateId | Long | 是 | 参数模板编号(必须与创建时一致,否则报错) | | recordNo | String | 否 | 记录序号/批次号 | | remark | String | 否 | 备注 | | details | Array | 是 | 参数明细列表 | | details[].templateDetailId | Long | 是 | 模板明细编号 | | details[].paramValue | String | 条件必填 | 参数值 | **请求示例:** ```json { "id": 1024, "templateId": 2, "recordNo": "BATCH-001", "remark": "首件记录(已修正)", "details": [ { "templateDetailId": 3, "paramValue": "210" }, { "templateDetailId": 4, "paramValue": "52" }, { "templateDetailId": 5, "paramValue": "28" } ] } ``` **响应:** `{ "code": 0, "data": true }` **业务规则:** 不允许更换模板(templateId 必须与原记录一致),如需换模板请删除后重新创建。 --- #### 2.3 删除参数记录 | 方法 | 路径 | 说明 | |------|------|------| | DELETE | /mes/pro/work-order-param-record/delete | 删除参数记录(级联删除明细) | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 记录编号 | **响应:** `{ "code": 0, "data": true }` --- #### 2.4 获取参数记录详情 | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pro/work-order-param-record/get | 获取单条记录(含明细) | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | id | Long | 是 | 记录编号 | **响应字段:** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 记录编号 | | workOrderId | Long | 工单编号 | | templateId | Long | 模板编号 | | templateCode | String | 模板编码(快照) | | templateName | String | 模板名称(快照) | | recordNo | String | 记录序号 | | remark | String | 备注 | | createTime | LocalDateTime | 创建时间 | | details | Array | 参数明细列表 | | details[].id | Long | 明细编号 | | details[].templateDetailId | Long | 模板明细编号 | | details[].paramCode | String | 参数编码 | | details[].paramName | String | 参数名称 | | details[].paramType | Integer | 参数类型 | | details[].unitMeasureId | Long | 计量单位编号 | | details[].unitMeasureName | String | 计量单位名称 | | details[].paramValue | String | 参数值 | | details[].remark | String | 备注 | **响应示例:** ```json { "code": 0, "data": { "id": 1024, "workOrderId": 10, "templateId": 2, "templateCode": "CSMB202607100002", "templateName": "注塑参数模板", "recordNo": "BATCH-001", "remark": "首件记录", "createTime": "2026-07-15 14:30:00", "details": [ { "id": 101, "templateDetailId": 3, "paramCode": "TEMP", "paramName": "温度", "paramType": 2, "unitMeasureName": "℃", "paramValue": "200" }, { "id": 102, "templateDetailId": 4, "paramCode": "PRESS", "paramName": "压力", "paramType": 2, "unitMeasureName": "MPa", "paramValue": "50" }, { "id": 103, "templateDetailId": 5, "paramCode": "TIME", "paramName": "保压时间", "paramType": 2, "unitMeasureName": "s", "paramValue": "30" } ] } } ``` --- #### 2.5 按工单分页查询参数记录 | 方法 | 路径 | 说明 | |------|------|------| | GET | /mes/pro/work-order-param-record/page-by-work-order | 按工单查询参数记录分页 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | workOrderId | Long | 是 | 工单编号(URL 参数) | | recordNo | String | 否 | 记录序号(模糊匹配) | | templateName | String | 否 | 模板名称(模糊匹配) | | createTime | String[] | 否 | 创建时间范围 | | pageNo | Integer | 是 | 页码 | | pageSize | Integer | 是 | 每页条数 | **响应字段:** 同 2.4(分页列表,每条记录含 details 明细) **响应示例:** ```json { "code": 0, "data": { "list": [ { "id": 1024, "templateName": "注塑参数模板", "recordNo": "BATCH-001", "createTime": "2026-07-15 14:30:00", "details": [ { "paramName": "温度", "unitMeasureName": "℃", "paramValue": "200" }, { "paramName": "压力", "unitMeasureName": "MPa", "paramValue": "50" }, { "paramName": "保压时间", "unitMeasureName": "s", "paramValue": "30" } ] }, { "id": 1025, "templateName": "注塑参数模板", "recordNo": "BATCH-002", "createTime": "2026-07-15 22:15:00", "details": [ { "paramName": "温度", "unitMeasureName": "℃", "paramValue": "210" }, { "paramName": "压力", "unitMeasureName": "MPa", "paramValue": "52" }, { "paramName": "保压时间", "unitMeasureName": "s", "paramValue": "28" } ] } ], "total": 2 } } ``` --- ## 字段展示规则 ### 参数记录列表(工单详情 Tab) | 字段 | 展示位置 | 说明 | |------|----------|------| | recordNo | 列表 | 记录序号/批次号 | | templateName | 列表 | 参数模板名称 | | 各参数值 | 列表(展开行或标签式) | 显示"参数名: 值 单位",如"温度: 200 ℃" | | createTime | 列表 | 记录时间 | | 操作列 | 列表 | 编辑、删除按钮 | **列表展示建议:** 每条记录可展开查看所有参数明细,或在列表中用标签式展示关键参数值。 ### 参数记录新增/编辑弹窗 | 字段 | 展示位置 | 说明 | |------|----------|------| | templateId | 弹窗顶部(下拉选择) | 新增时可选,编辑时只读 | | recordNo | 弹窗(输入框) | 记录序号/批次号 | | 参数明细列表 | 弹窗主体(动态表单) | 根据模板加载,见下方 | | remark | 弹窗底部(文本域) | 备注 | **参数明细动态表单:** 选择模板后,自动加载参数列表渲染为表单行: | 模板字段 | 表单展示 | 说明 | |---------|---------|------| | paramName | 标签文本 | 如"温度" | | unitMeasureName | 标签后缀 | 如"℃",显示在输入框右侧 | | required | 必填标记 | required=true 时加红色星号 | | paramType | 输入控件类型 | 1=文本框,2=数字框,3=开关,4=日期选择器 | | paramValue | 输入框 | 用户填写的参数值 | --- ## 业务规则说明 | 场景 | 规则 | |------|------| | 选择模板后加载参数 | 调用模板详情接口,将 details 渲染为表单行 | | 必填参数校验 | required=true 的参数,paramValue 不能为空,否则提交时报错 | | 不允许更换模板 | 编辑时 templateId 必须与创建时一致,如需换模板请删除后重新创建 | | 多次记录 | 同一工单可创建多条参数记录(同一模板也可多次记录) | | 快照机制 | 记录时快照模板的参数定义,后续模板变更不影响已记录的数据 | | 删除级联 | 删除记录时,该记录下所有参数明细一起删除 | ## 注意事项 - 参数类型(paramType)字典:1=文本,2=数值,3=布尔,4=日期,前端可根据类型渲染不同的输入控件 - 新增时先选模板再填值,建议模板选择后立即调用模板详情接口加载参数列表 - 编辑时模板字段置灰不可修改,只能修改 paramValue 和 recordNo、remark - 工单参数记录的权限复用工单权限:创建/修改/删除用 `mes:pro-work-order:update`,查询用 `mes:pro-work-order:query` - 同一模板在同工单下可创建多次记录(如每班次/每批次记录一次),通过 recordNo 区分