生产批次与赋码管理(一袋一码) - 前端联调方案
⚠️ 本文档已过时:三个页面已提取为独立顶级模块「一袋一码管理」,并移除品种、设备、工单关联,
最新接口以 mes_bag_code_module_decouple.md 为准。
功能概述
- 批次生产管理:录入生产批次(人—机—种全环节数字化对接),配置生产人员(责任落实到人),批次号自动生成(编码规则:前缀 PC + 日期 + 产线 + 品种 + 流水号)。
- 赋码管理(一袋一码):根据批次信息自动生成唯一二维码数据包(袋码),支持批量导出交付印刷;二维码内容为袋码字符串,扫码后可反查批次、品种、产线、生产日期、责任人。
- 托盘码管理:按批次批量生成托盘码(批次号-P+序号),袋码可绑定/解绑到托盘。
涉及页面
- 生产管控 → 生产管理 → 批次生产管理(新增页面:列表 + 新增/编辑表单 + 详情)
- 生产管控 → 生产管理 → 赋码管理(新增页面:袋码列表 + 生成数据包弹窗 + 扫码追溯)
- 生产管控 → 生产管理 → 托盘码管理(新增页面:托盘列表 + 批量生成弹窗)
业务流程与数据带入
- 新增批次:选择品种(物料)→ 手填产线编码/名称 → 可选设备、工单 → 选生产日期、责任人 → 配置生产人员(至少 1 人)。保存后**批次号自动生成**,无需填写。
- 批次 → 袋码生成:生成袋码时只需传入
batchId 和袋数,批次号、品种等信息由后端自动带入袋码记录。
- 批次 → 托盘码生成:生成托盘码时只需传入
batchId、数量、可装袋数,批次号自动带入。
- 袋码 → 托盘绑定:先选批次再选托盘(托盘下拉用
GET /mes/pro/pallet/simple-list?batchId= 获取,只展示该批次的托盘),勾选袋码后绑定。
- 扫码追溯:扫出的二维码内容即袋码字符串,直接作为
code 参数调 GET /mes/pro/bag-code/get-by-code 反查全部信息。
批次状态流转
| 当前状态 |
可流转到 |
说明 |
| 10 草稿 |
20 生产中、40 已作废 |
创建后初始为草稿 |
| 20 生产中 |
30 已完成、40 已作废 |
只有生产中才能生成袋码/托盘码 |
| 30 已完成 |
— |
终态 |
| 40 已作废 |
— |
终态 |
字典类型:mes_pro_batch_status。
API 一:生产批次(权限前缀 mes:pro-batch)
| 方法 |
路径 |
说明 |
权限 |
| POST |
/mes/pro/batch/create |
创建批次(自动生成批次号) |
mes:pro-batch:create |
| PUT |
/mes/pro/batch/update |
更新批次(含人员配置重建) |
mes:pro-batch:update |
| DELETE |
/mes/pro/batch/delete |
删除批次 |
mes:pro-batch:delete |
| PUT |
/mes/pro/batch/update-status |
更新批次状态 |
mes:pro-batch:update |
| GET |
/mes/pro/batch/get |
批次详情(含人员配置) |
mes:pro-batch:query |
| GET |
/mes/pro/batch/page |
批次分页 |
mes:pro-batch:query |
| GET |
/mes/pro/batch/simple-list |
批次精简列表(供下拉选择) |
mes:pro-batch:query |
| GET |
/mes/pro/batch/export-excel |
导出批次 Excel |
mes:pro-batch:export |
创建/更新请求参数(POST /create、PUT /update)
| 参数 |
类型 |
必填 |
说明 |
| id |
Long |
更新时必填 |
批次编号 |
| itemId |
Long |
是 |
品种(产品物料)编号,下拉选物料 |
| lineCode |
String |
是 |
产线编码(手填,参与批次号生成,建议限制长度 ≤ 4) |
| lineName |
String |
否 |
产线名称(手填) |
| machineryId |
Long |
否 |
生产设备编号 |
| workOrderId |
Long |
否 |
关联生产工单编号 |
| produceDate |
String |
是 |
生产日期,格式 yyyy-MM-dd HH:mm:ss |
| planQuantity |
Number |
否 |
计划数量 |
| ownerUserId |
Long |
是 |
责任人用户编号(责任落实到人) |
| remark |
String |
否 |
备注 |
| workers |
Array |
是 |
生产人员配置,至少 1 条 |
| workers[].userId |
Long |
是 |
生产人员用户编号 |
| workers[].workerType |
Integer |
是 |
岗位类型(字典 mes_pro_batch_worker_type:10 组长/20 操作工/30 包装工/40 质检员/50 其他) |
| workers[].remark |
String |
否 |
备注 |
分页查询参数(GET /page)
| 参数 |
类型 |
说明 |
| code |
String |
批次号(模糊) |
| itemId |
Long |
品种编号 |
| lineCode / lineName |
String |
产线编码/名称(模糊) |
| machineryId |
Long |
设备编号 |
| workOrderId |
Long |
工单编号 |
| ownerUserId |
Long |
责任人编号 |
| status |
Integer |
批次状态(字典 mes_pro_batch_status) |
| produceDate |
Array |
生产日期范围 [开始, 结束] |
| createTime |
Array |
创建时间范围 |
| pageNo / pageSize |
Integer |
分页参数 |
更新状态参数(PUT /update-status)
Query 参数:id(批次编号)、status(目标状态)。
响应字段(列表/详情)
| 字段 |
类型 |
说明 |
| id |
Long |
编号 |
| code |
String |
批次号(自动生成,如 PC20260818L01NY001) |
| itemId / itemCode / itemName / itemSpecification |
— |
品种编号/编码/名称/规格(后端拼接) |
| lineCode / lineName |
String |
产线编码/名称 |
| machineryId / machineryCode / machineryName |
— |
设备编号/编码/名称(后端拼接) |
| workOrderId / workOrderCode |
— |
工单编号/编码(后端拼接) |
| produceDate |
String |
生产日期 |
| planQuantity |
Number |
计划数量 |
| ownerUserId / ownerUserName |
— |
责任人编号/昵称(后端拼接) |
| bagQuantity |
Integer |
已生成袋码数量 |
| palletQuantity |
Integer |
已生成托盘码数量 |
| status |
Integer |
批次状态(字典 mes_pro_batch_status) |
| remark |
String |
备注 |
| createTime |
String |
创建时间 |
| workers |
Array |
人员配置列表(仅 GET /get 详情返回) |
| workers[].id / batchId / userId / userName / workerType / remark |
— |
人员配置明细(userName 后端拼接) |
API 二:袋码赋码(权限前缀 mes:pro-bag-code)
| 方法 |
路径 |
说明 |
权限 |
| POST |
/mes/pro/bag-code/generate |
生成袋码数据包 |
mes:pro-bag-code:create |
| DELETE |
/mes/pro/bag-code/delete-by-uuid |
删除生成组(整组删除) |
mes:pro-bag-code:delete |
| PUT |
/mes/pro/bag-code/bind-pallet |
袋码绑定托盘 |
mes:pro-bag-code:update |
| PUT |
/mes/pro/bag-code/unbind-pallet |
袋码解绑托盘 |
mes:pro-bag-code:update |
| GET |
/mes/pro/bag-code/get |
袋码详情 |
mes:pro-bag-code:query |
| GET |
/mes/pro/bag-code/get-by-code |
扫码追溯(按袋码反查) |
mes:pro-bag-code:query |
| GET |
/mes/pro/bag-code/page |
袋码分页 |
mes:pro-bag-code:query |
| GET |
/mes/pro/bag-code/list-by-uuid |
生成组的袋码列表 |
mes:pro-bag-code:query |
| GET |
/mes/pro/bag-code/export-excel |
批量导出(交付印刷) |
mes:pro-bag-code:export |
生成数据包(POST /generate)
| 参数 |
类型 |
必填 |
说明 |
| batchId |
Long |
是 |
生产批次编号(批次须为"生产中"状态) |
| count |
Integer |
是 |
本次生成袋数(手动输入,必须大于 0) |
| remark |
String |
否 |
备注 |
响应 data 为生成组 UUID(字符串),同一次生成的袋码共享该 UUID。
删除生成组(DELETE /delete-by-uuid)
Query 参数:uuid。仅当组内袋码全部为"已生成"状态且未绑定托盘时允许。
绑定/解绑托盘(PUT /bind-pallet、PUT /unbind-pallet)
| 参数 |
类型 |
必填 |
说明 |
| palletId |
Long |
是 |
托盘编号 |
| ids |
Array |
是 |
袋码编号列表 |
分页查询参数(GET /page)
| 参数 |
类型 |
说明 |
| code |
String |
袋码(模糊) |
| batchId |
Long |
批次编号 |
| batchCode |
String |
批次号(模糊) |
| uuid |
String |
生成组 UUID |
| palletId |
Long |
托盘编号 |
| status |
Integer |
袋码状态(字典 mes_pro_bag_code_status) |
| createTime |
Array |
创建时间范围 |
袋码响应字段(列表/详情)
| 字段 |
类型 |
说明 |
| id |
Long |
编号 |
| uuid |
String |
生成组 UUID |
| code |
String |
袋码(二维码内容,如 PC20260818L01NY001-0001) |
| bagNo |
Integer |
批次内袋序号 |
| batchId / batchCode |
— |
批次编号/批次号 |
| itemId / itemCode / itemName / itemSpecification |
— |
品种编号/编码/名称/规格(后端拼接) |
| lineCode / lineName |
String |
产线编码/名称(后端拼接) |
| palletId / palletCode |
— |
绑定托盘编号/托盘码(未绑定为 null) |
| status |
Integer |
状态(字典 mes_pro_bag_code_status:10 已生成/20 已导出印刷/30 已作废) |
| printTime |
String |
导出(交付印刷)时间 |
| createTime |
String |
创建时间 |
扫码追溯响应字段(GET /get-by-code)
Query 参数:code(袋码字符串,即二维码扫出的内容)。不存在时返回错误码 1040752000。
| 字段 |
类型 |
说明 |
| id / code / bagNo / status / printTime |
— |
袋码信息 |
| batchId / batchCode / batchStatus / produceDate |
— |
批次信息 |
| lineCode / lineName |
String |
产线 |
| ownerUserId / ownerUserName |
— |
责任人 |
| itemId / itemCode / itemName / itemSpecification |
— |
品种信息 |
| palletId / palletCode |
— |
绑定托盘信息 |
批量导出(GET /export-excel)
参数同分页查询(建议按 batchId 或 uuid 过滤导出指定数据包)。**导出后,后端自动将导出的"已生成"状态袋码标记为"已导出印刷"并记录导出时间**,前端导出成功后应刷新列表状态。
API 三:托盘码(权限前缀 mes:pro-pallet)
| 方法 |
路径 |
说明 |
权限 |
| POST |
/mes/pro/pallet/batch-create |
批量生成托盘码 |
mes:pro-pallet:create |
| DELETE |
/mes/pro/pallet/delete |
删除托盘码 |
mes:pro-pallet:delete |
| GET |
/mes/pro/pallet/get |
托盘码详情 |
mes:pro-pallet:query |
| GET |
/mes/pro/pallet/page |
托盘码分页 |
mes:pro-pallet:query |
| GET |
/mes/pro/pallet/simple-list |
批次的托盘列表(供下拉选择) |
mes:pro-pallet:query |
| GET |
/mes/pro/pallet/export-excel |
导出托盘码 Excel |
mes:pro-pallet:export |
批量生成(POST /batch-create)
| 参数 |
类型 |
必填 |
说明 |
| batchId |
Long |
是 |
生产批次编号(批次须为"生产中"状态) |
| count |
Integer |
是 |
生成数量(必须大于 0) |
| capacity |
Integer |
否 |
可装袋数(袋/托盘),用于绑定时容量校验 |
| remark |
String |
否 |
备注 |
响应 data 为生成的托盘编号列表。
分页查询参数(GET /page)
code(模糊)、batchId、batchCode(模糊)、status(字典 mes_pro_pallet_status)、createTime[]。
托盘响应字段
| 字段 |
类型 |
说明 |
| id |
Long |
编号 |
| code |
String |
托盘码(如 PC20260818L01NY001-P01) |
| batchId / batchCode |
— |
批次编号/批次号 |
| palletNo |
Integer |
批次内托盘序号 |
| capacity |
Integer |
可装袋数 |
| bagCount |
Integer |
已绑定袋码数量 |
| status |
Integer |
状态(字典 mes_pro_pallet_status:10 启用/20 作废) |
| remark / createTime |
— |
备注/创建时间 |
字段展示规则
| 字段 |
展示位置 |
说明 |
| 批次号 code |
批次列表、详情、袋码列表、托盘列表 |
自动生成,不可编辑 |
| 品种(编码+名称+规格) |
批次列表、批次详情、袋码列表 |
下拉选择物料,展示用后端拼接字段 |
| 产线编码/名称 |
批次表单(手填)、批次列表、袋码列表 |
产线编码参与批次号生成 |
| 责任人 |
批次列表、详情、扫码追溯 |
用户选择器 |
| 生产人员 workers |
批次新增/编辑表单(子表)、批次详情 |
岗位类型用字典 mes_pro_batch_worker_type 下拉 |
| 袋码数量 bagQuantity / 托盘码数量 palletQuantity |
批次列表 |
只读,生成/删除码后后端自动维护 |
| 二维码内容 code |
袋码列表、导出 Excel |
袋码字符串即二维码内容 |
| 托盘码 palletCode |
袋码列表(绑定时展示)、托盘列表 |
绑定后自动带出 |
业务规则说明
| 场景 |
规则 |
| 批次号生成规则 |
前缀 PC + 日期(yyyyMMdd) + 产线编码+品种编码(截取8位) + 流水号(3位,按日循环),全自动生成 |
| 袋码生成规则 |
袋码 = 批次号 + "-" + 4位袋序号(如 -0001),序号只增不减,全局唯一 |
| 托盘码生成规则 |
托盘码 = 批次号 + "-P" + 2位托盘序号,序号只增不减,全局唯一 |
| 生成码前置条件 |
批次必须为"生产中(20)"状态 |
| 批次修改 |
仅草稿/生产中可修改;修改品种或产线编码会自动重新生成批次号 |
| 批次删除 |
仅草稿/已作废可删除;已生成袋码或托盘码的批次不允许删除 |
| 生成组删除 |
仅组内袋码全部为"已生成"且未绑定托盘时允许;删除后批次袋码数量自动回减 |
| 袋码绑定托盘 |
袋码与托盘必须属于同一批次;袋码未绑定过托盘;绑定后总数不超过托盘可装袋数 |
| 导出即印刷 |
导出 Excel 后,导出的"已生成"袋码自动变为"已导出印刷"并记录时间 |
| 二维码内容 |
二维码内容 = 袋码字符串(如 PC20260818L01NY001-0001),扫码后调 get-by-code 反查 |
菜单与权限
菜单已初始化:批次生产管理、赋码管理、托盘码管理(挂在生产管控 → 生产管理下),按钮权限分别为 mes:pro-batch:*、mes:pro-bag-code:*、mes:pro-pallet:*。
注意事项
- 批次号、袋码、托盘码均由后端自动生成,**前端表单不提供任何编码输入框**。
- 生成袋码/托盘码前,先用
GET /mes/pro/batch/simple-list 让用户选择批次(只允许选择"生产中"状态的批次,前端可按 status=20 过滤)。
- 绑定托盘时,托盘下拉应调用
GET /mes/pro/pallet/simple-list?batchId=,确保托盘与袋码同批次。
- 生成袋码的
count 为手动输入的本次袋数,可能分多次生成,序号自动接续,不会重复。
- 扫码追溯接口对不存在的袋码返回错误(错误码 1040752000),前端需提示"袋码不存在"。
- 导出袋码 Excel 会改变袋码状态(已生成 → 已导出印刷),导出后请刷新列表;重复导出同一数据包不会重复变更状态。
- 岗位类型、批次状态、袋码状态、托盘状态均为字典项,字典类型分别为
mes_pro_batch_worker_type、mes_pro_batch_status、mes_pro_bag_code_status、mes_pro_pallet_status。