模块:
MesBatchSnController/MesJbLogController
权限:mes:mesBatchSn:view(列表/详情)、mes:mesBatchSn:edit(新增/绑定)、mes:mesJbLog:api(解绑)
服务地址示例:http://127.0.0.1:8980
绑定上限:系统配置mes.batch.count(每批次最多绑定工件数)PDA 统一返回
CommonResp(result/message/data);PC 列表仍用listData(直接返回Page)。
PDA 请统一使用 POST(表单或 query 参数均可)。
须先登录 MES,请求携带会话(见下方「鉴权说明」)。
本模块接口需要登录,未登录或 Session 过期时,HTTP 状态码仍为 200,但响应体是 HTML 登录页(<title>登录 - MES生产管理系统</title>),不是 JSON。
| 现象 | 原因 |
|---|---|
| 返回 HTML 登录页 | Cookie / __sid 失效、未登录、或账号无权限 |
| 返回 HTML 403 您的操作权限不足 | 已登录,但账号缺少接口所需权限(见下表) |
| Apifox 显示 200 但解析失败 | 把登录页 HTML 当成了 JSON |
正确做法(任选其一):
Cookie 方式(Apifox 推荐)
jeesite.session.idCookie: jeesite.session.id=你的会话ID参数方式(PDA 常用)
__ajax=json、__sid=登录后的会话IDApifox 示例:
curl --location --request POST \
'http://127.0.0.1:8980/js/a/mes/mesJbLog/getBatchInfo' \
--header 'Cookie: jeesite.session.id=你的会话ID' \
--data-urlencode 'batchSn=20260702172138' \
--data-urlencode '__ajax=json'
权限要求:
| 接口 | 权限 | 后台勾选位置 |
|---|---|---|
pda/listData |
mes:mesBatchSn:view |
生产管理 → 批次码记录表 |
createBatchSn / bindProduct |
mes:mesBatchSn:edit |
生产管理 → 批次码记录表 |
getBatchInfo / addSave |
mes:mesJbLog:api |
APP模块权限 → 批次解绑 |
getBatchInfo虽用于「批次详情查工件」,但代码挂在MesJbLogController,权限标识为mes:mesJbLog:api(与解绑共用)。PDA 测试账号须勾选此项,否则会 403。
授权后重新登录,成功时 getBatchInfo 应返回 JSON,Content-Type 含 json,data 为数组(可为 [])。
① pda/listData 批次码列表(模块首页)→ 点行时缓存整行 row
↓ 底部「新增批次码」
② mesBatchSn/createBatchSn 按产线自动生成批次码
↓ 点击列表中的批次码
③ mesJbLog/getBatchInfo 详情 — 仅刷新已绑定工件列表(data[])
↓ 详情头信息用 ① 的 row,不要用 ③ 拼批次头
④ mesBatchSn/bindProduct 扫描绑定工件码
mesJbLog/addSave 解绑单个工件码
请求URL: /js/a/mes/mesBatchSn/pda/listData
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| pageNo | 否 | int | 页码,默认 1 |
| pageSize | 否 | int | 每页条数,默认 20 |
| batchSn | 否 | string | 批次码 |
| lineSn | 否 | string | 产线编号 |
| isJs | 否 | string | 1 未用完 / 2 已用完 |
| createDate_gte | 否 | string | 创建时间起,yyyy-MM-dd HH:mm |
| createDate_lte | 否 | string | 创建时间止 |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesBatchSn/pda/listData?pageNo=1&pageSize=20'
返回示例:
{
"result": "true",
"message": "成功",
"data": {
"pageNo": 1,
"pageSize": 20,
"count": 2,
"list": [
{
"id": "1999999999999999991",
"batchSn": "20260702172138",
"lineSn": "HEVXT",
"nums": 1,
"isJs": "1",
"instockStatus": "0",
"createBy": "system",
"createDate": "2026-07-02 17:21:38",
"updateDate": "2026-07-02 17:22:10"
}
]
}
}
返回字段说明(data.list[] 单条):
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 主键,绑定工件时必传 |
| batchSn | string | 批次码(扫码值) |
| lineSn | string | 产线编号,如 HEVXT |
| nums | long | 已绑定工件数量 |
| isJs | string | 1 未用完 / 2 已用完 |
| instockStatus | string | 0 待入库 / 1 已入库 |
| createDate | string | 创建时间 |
下一步: 点「新增批次码」→ 接口 2;点某行批次码 → 接口 3,传 batchSn
请求URL: /js/a/mes/mesBatchSn/createBatchSn
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| lineSn | 是 | string | 产线编号 |
新建后状态为 待装中(batchStatus=3),经生产入库接口成功后才改为 仓库中(0)。
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesBatchSn/createBatchSn?lineSn=HEVXT'
返回示例:
{
"result": "true",
"message": "成功",
"data": {
"batchSn": "20260707103045"
}
}
失败示例:
{
"result": "false",
"message": "参数错误",
"data": null
}
说明: 批次码按 yyyyMMddHHmmss 自动生成,初始 nums=0
下一步: 回到列表刷新,或带 batchSn 进入接口 3 详情
请求URL: /js/a/mes/mesJbLog/getBatchInfo
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| batchSn | 是 | string | 批次码 |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesJbLog/getBatchInfo?batchSn=20260702172138'
PC 端「批次码记录表详情」(mesBatchSn/info) 展示两块数据,来源不同:
| PC 页面区块 | 数据来源 | PDA 如何获取 |
|---|---|---|
| 批次码、产线编号、创建人、创建/更新时间 | MesBatchSn 主表 |
接口 1 列表行(点进详情时把该行缓存下来) |
| 产品信息(工件码、绑定时间) | mes_product 按 batch_sn 查询 |
本接口 getBatchInfo 的 data[] |
源码(MesJbLogController.getBatchInfo)逻辑:
batchSn 在 mes_batch_sn 中存在,不存在则失败mes_product.batch_sn = batchSn 的工件列表resp.setData(mp) 只放 List<MesProduct>,不把批次主表 MesBatchSn 放进响应因此:不是接口漏了产品信息,而是批次头信息本来就不在这个接口里;PDA 详情页需「列表行 + 本接口」拼出与 PC 一致的页面。
batchSn=20260702172138)有绑定工件时:
{
"result": "true",
"message": "成功",
"data": [
{
"isNewRecord": false,
"id": "2072880747628806144",
"createDate": "2026-07-03 11:10",
"updateDate": "2026-07-03 13:28",
"createBy": "system",
"updateBy": "system",
"sn": "0476966613765586",
"psn": "",
"title": "",
"state": "1",
"remark": "",
"batchSn": "20260702172138",
"weight": "",
"cate": "HEVXT",
"bindDate": "2026-07-03 13:28:50",
"bindBy": "system"
}
]
}
结构固定为
MesProduct全字段;id、bindBy、updateDate等随记录变化。title在库中常为空;产品类型看cate(如HEVXT)。PC「产品信息」只展示sn、bindDate两列,与上表一致。
未绑定任何工件时(批次存在但 nums=0):
{
"result": "true",
"message": "成功",
"data": []
}
失败示例:
{
"result": "false",
"message": "批次信息不存在",
"data": null
}
data[] 单条(MesProduct 实体,Jackson 序列化全字段):
| 字段 | 类型 | 说明 | PDA 详情是否常用 |
|---|---|---|---|
| sn | string | 工件码 | 是(对应 PC「产品信息-工件码」) |
| bindDate | string | 绑定时间 yyyy-MM-dd HH:mm |
是(对应 PC「产品信息-绑定时间」) |
| bindBy | string | 绑定人账号 | 可选 |
| batchSn | string | 所属批次码 | 可与入参对照 |
| title | string | 产品名称 | 库中常为空,不必展示 |
| cate | string | 产品类型/产线类别 | 有值时展示,如 HEVXT |
| state | string | 工件状态 | 字典 mes_product_status |
| psn / remark / weight | string | 生产批号、备注、重量 | 一般可忽略 |
| id / createDate / updateDate 等 | — | JeeSite 公共字段 | 可忽略 |
PC 详情「产品信息」表格只渲染
sn、bindDate两列;接口实际返回完整MesProduct,字段比 PC 展示更多。
进入详情时携带列表行 row(接口 1):
row.batchSn、row.lineSn、row.nums、row.isJs、row.instockStatus、row.createDate …
再调 getBatchInfo(batchSn=row.batchSn):
data[] → 工件列表(sn、bindDate)
页面结构对齐 PC:
头部:批次码、产线编号(来自 row)
列表:产品信息(来自 data[])
底部:创建人、创建/更新时间(来自 row)
下一步: row.isJs != '2' 且 row.instockStatus != '1' 时可绑定 → 接口 4;每行工件可解绑 → 接口 5
请求URL: /js/a/mes/mesBatchSn/bindProduct
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| id | 是 | string | 批次码记录主键(列表 id) |
| sn | 是 | string | 工件码(扫码或手输) |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesBatchSn/bindProduct' \
--data-urlencode 'id=1999999999999999991' \
--data-urlencode 'sn=WP202607020001'
返回示例:
{
"result": "true",
"message": "绑定成功"
}
常见失败 message:
| message | 原因 |
|---|---|
| 参数错误 | id 或 sn 为空 |
| 批次码不存在 | id 无效 |
| 当前批次码已用完,不能继续绑定 | isJs=2 |
| 该批次码已入库,不能继续绑定 | instockStatus=1 |
| 批次码绑定数量已满 | nums ≥ mes.batch.count |
| 工件码不存在 | sn 不在 mes_product |
| 该工件已绑定批次码 | 工件已有 batchSn |
下一步: 绑定成功后刷新接口 3
请求URL: /js/a/mes/mesJbLog/addSave
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| batchSn | 是 | string | 批次码 |
| sn | 是 | string | 要解绑的工件码 |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesJbLog/addSave' \
--data-urlencode 'batchSn=20260702172138' \
--data-urlencode 'sn=WP202607020001'
返回示例:
{
"result": "true",
"message": "操作成功",
"data": {}
}
常见失败 message:
| message | 原因 |
|---|---|
| 参数错误 | batchSn 或 sn 为空 |
| 批次码信息不存在 | 批次码无效 |
| 当前批次已出货,不能解绑 | 已有出货记录 |
| 当前工件已解绑 | 该 sn 未绑定此批次 |
说明: 解绑单个工件,nums 自动减 1,并写入解绑记录
下一步: 解绑成功后刷新接口 3
请求URL: /js/a/mes/mesBatchSn/save
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| isNewRecord | 是 | boolean | 固定 true |
| lineSn | 是 | string | 产线编号 |
| batchSn | 否 | string | 留空则自动生成 |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesBatchSn/save' \
--data-urlencode 'isNewRecord=true' \
--data-urlencode 'lineSn=HEVXT'
请求URL: /js/a/mes/mesBatchSn/getBatchSn
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| lineSn | 是 | string | 产线编号 |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesBatchSn/getBatchSn?lineSn=HEVXT'
返回示例:
{
"result": "true",
"message": "成功",
"data": {
"batchSn": "20260702172138"
}
}
说明: 返回产线下未用完且未达绑定上限的批次码;无可用时 batchSn 为空字符串
批次码绑定工件后(nums > 0),可在 PDA 生产入库 模块勾选该批次提交 ERP 入库,详见 PDA生产入库接口说明.md。入库成功后 instockStatus=1,不可再绑定。