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 │
└─────────────────────────┘
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /mes/pd/process-param-template/page | 获取参数模板分页列表 |
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| pageNo | Integer | 是 | 页码 |
| pageSize | Integer | 是 | 每页条数(建议 100,用于下拉) |
响应字段(关键字段):
| 字段 | 类型 | 说明 |
|---|---|---|
| id | Long | 模板编号 |
| templateCode | String | 模板编码 |
| templateName | String | 模板名称 |
| templateType | Integer | 模板类型 |
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /mes/pd/process-param-template/get | 获取模板 + 参数明细 |
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 模板编号 |
响应示例:
{
"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 的参数标记必填。
| 方法 | 路径 | 说明 |
|---|---|---|
| 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" }
]
}
响应:
{
"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 提交
| 方法 | 路径 | 说明 |
|---|---|---|
| PUT | /mes/pro/work-order-param-record/update | 更新参数记录(仅修改填写值,不能换模板) |
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 记录编号 |
| templateId | Long | 是 | 参数模板编号(必须与创建时一致,否则报错) |
| recordNo | String | 否 | 记录序号/批次号 |
| remark | String | 否 | 备注 |
| details | Array | 是 | 参数明细列表 |
| details[].templateDetailId | Long | 是 | 模板明细编号 |
| details[].paramValue | String | 条件必填 | 参数值 |
请求示例:
{
"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 必须与原记录一致),如需换模板请删除后重新创建。
| 方法 | 路径 | 说明 |
|---|---|---|
| DELETE | /mes/pro/work-order-param-record/delete | 删除参数记录(级联删除明细) |
请求参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | Long | 是 | 记录编号 |
响应: { "code": 0, "data": true }
| 方法 | 路径 | 说明 |
|---|---|---|
| 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 | 备注 |
响应示例:
{
"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" }
]
}
}
| 方法 | 路径 | 说明 |
|---|---|---|
| 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 明细)
响应示例:
{
"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
}
}
| 字段 | 展示位置 | 说明 |
|---|---|---|
| recordNo | 列表 | 记录序号/批次号 |
| templateName | 列表 | 参数模板名称 |
| 各参数值 | 列表(展开行或标签式) | 显示"参数名: 值 单位",如"温度: 200 ℃" |
| createTime | 列表 | 记录时间 |
| 操作列 | 列表 | 编辑、删除按钮 |
列表展示建议: 每条记录可展开查看所有参数明细,或在列表中用标签式展示关键参数值。
| 字段 | 展示位置 | 说明 |
|---|---|---|
| templateId | 弹窗顶部(下拉选择) | 新增时可选,编辑时只读 |
| recordNo | 弹窗(输入框) | 记录序号/批次号 |
| 参数明细列表 | 弹窗主体(动态表单) | 根据模板加载,见下方 |
| remark | 弹窗底部(文本域) | 备注 |
参数明细动态表单: 选择模板后,自动加载参数列表渲染为表单行:
| 模板字段 | 表单展示 | 说明 |
|---|---|---|
| paramName | 标签文本 | 如"温度" |
| unitMeasureName | 标签后缀 | 如"℃",显示在输入框右侧 |
| required | 必填标记 | required=true 时加红色星号 |
| paramType | 输入控件类型 | 1=文本框,2=数字框,3=开关,4=日期选择器 |
| paramValue | 输入框 | 用户填写的参数值 |
| 场景 | 规则 |
|---|---|
| 选择模板后加载参数 | 调用模板详情接口,将 details 渲染为表单行 |
| 必填参数校验 | required=true 的参数,paramValue 不能为空,否则提交时报错 |
| 不允许更换模板 | 编辑时 templateId 必须与创建时一致,如需换模板请删除后重新创建 |
| 多次记录 | 同一工单可创建多条参数记录(同一模板也可多次记录) |
| 快照机制 | 记录时快照模板的参数定义,后续模板变更不影响已记录的数据 |
| 删除级联 | 删除记录时,该记录下所有参数明细一起删除 |
mes:pro-work-order:update,查询用 mes:pro-work-order:query