qm-api.md 13 KB

气密检测接口对接文档

接口:MesProductRecordController.qmcheck / MesProductRecordController.qmresult
MES 服务地址:http://192.168.16.99:8980
版本依据:mescloud 源码(2026-06)


1. 基本信息

项目 说明
服务 IP 192.168.16.99
端口 8980
上下文路径 /js
管理路径 /a
完整 Base URL http://192.168.16.99:8980/js/a/mes/mesProductRecord
请求方式 POST
Content-Type application/x-www-form-urlencoded(推荐)
字符编码 UTF-8
认证 无需登录(Shiro 已配置 anon

1.1 对接时序

1. 测试前  → 调用 qmcheck(进站校验,确认能否测试)
2. 测试后  → 调用 qmresult(上传气密过程数据 + 更新工位总结果)

2. 接口一:qmcheck(气密进站校验)

2.1 接口地址

POST http://192.168.16.99:8980/js/a/mes/mesProductRecord/qmcheck

2.2 功能说明

  • 校验工件是否允许在当前气密工位进行测试

2.3 请求参数

参数名 类型 必填 说明
__ajax String 建议 固定传 json,JeeSite 约定,服务端返回 JSON 格式
sn String 工件码/产品序列号,MES 中唯一标识该工件
oprno String 工位号,如 OP330OP450;支持子工位如 OP450A,服务端会自动格式化
lineSn String 产线编号,如 XT
workNum String 工号/操作员账号,参与 MES 质量校验(开班点检等)
craft String 工艺号;本接口读取但未参与业务逻辑,可不传
cxm String 气密程序名/程序号,仅写入 API 日志,不参与校验
by String 保压时间(秒),仅写入 API 日志
cq String 充气时间(秒),仅写入 API 日志
cs String 测试时间(秒),仅写入 API 日志

2.4 请求示例

表单 Body(推荐)

__ajax=json&sn=501901660045119990G4JB100071&oprno=OP450&lineSn=XT&workNum=system

带注释的完整参数示例

__ajax=json          # JeeSite 返回 JSON,建议固定带上
&sn=501901660045119990G4JB100071   # 工件码(必填)
&oprno=OP450         # 工位号(必填)
&lineSn=XT           # 产线编号(必填)

原始 HTTP 报文

POST /js/a/mes/mesProductRecord/qmcheck HTTP/1.1
Host: 192.168.16.99:8980
Content-Type: application/x-www-form-urlencoded

__ajax=json&sn=501901660045119990G4JB100071&oprno=OP450&lineSn=XT

cURL

curl -X POST "http://192.168.16.99:8980/js/a/mes/mesProductRecord/qmcheck" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "__ajax=json" \
  -d "sn=501901660045119990G4JB100071" \
  -d "oprno=OP450" \
  -d "lineSn=XT"

2.5 响应格式

返回 JSON 对象 CommonResp

字段 类型 说明
result String "true" 允许继续 / "false" 不允许
message String 中文提示信息
data String 质量校验状态码(2 位字母)

2.6 响应示例

允许测试:

{
  "result": "true",
  "message": "工件可以加工",
  "data": "UD"
}

不允许测试(前置工位未完成):

{
  "result": "false",
  "message": "该工件OP180未加工",
  "data": "QD"
}

两次气密间隔不足 15 分钟(需配置 mes.qm.ng.time=1 开启):

{
  "result": "false",
  "message": "两次气密必须间隔15分钟",
  "data": "UD"
}

参数缺失:

{
  "result": "false",
  "message": "参数错误1",
  "data": null
}

2.7 data 状态码说明

对接规则:仅当 result="true"data="UD" 时,设备方可开始气密测试。

data 含义 message 示例
UD 可以加工/测试 工件可以加工
OK 本工位已加工且 OK 该工件本工位已加工,结果:OK
NG 本工位已加工且 NG 该工件本工位已加工,结果:NG
NE 工件未录入系统 该工件未录入系统
NN 跳过该工位 该工件跳过该工位
QD 前置工位未加工 该工件OPxxx未加工
QN 前置工位 NG 该工件OPxxx加工NG
NF 已合格下线 该工件已合格下线
NR 返修中 该工件离线返修中
NB 已报废 该工件已报废
ND NG 待处理 该工件NG待处理
DJ 未开班点检 未进行开班点检
BM 未绑定物料 未绑定物料
PL 配件寿命不足 配件寿命不足
PZ 未拍照 请先上传照片

3. 接口二:qmresult(气密结果上传)

3.1 接口地址

POST http://192.168.16.99:8980/js/a/mes/mesProductRecord/qmresult

3.2 功能说明

一次请求完成两件事:

  1. 保存气密过程数据 → 写入 mes_product_qm
  2. 更新 MES 工位总结果 → 调用 updateQualityCommon,更新 craft=100000 对应记录

3.3 请求参数

3.3.1 基础参数

参数名 类型 必填 说明
__ajax String 建议 固定传 json
sn String 工件码/产品序列号
oprno String 工位号,例如 OP330OP450
lineSn String 产线编号,固定传XT
result String 测试结果,固定大写:OK(合格)或 NG(不合格)
craft String 建议 工艺号,更新工位总结果时使用;固定传 100000(工位总结果)
workNum String 建议 工号/操作员账号,写入气密记录及工位结果

3.3.2 气密过程参数

参数名 类型 必填 Base64 说明
cxm String 气密程序号/程序名
deviceType String 设备类型/设备编号
remark String 备注信息
testPressure String 测试压力值,传 Base64 编码后的字符串
testPressureUnit String 测试压力单位,如 PakPa
leakVal String 泄漏值,传 Base64 编码后的字符串
leakValUnit String 泄漏值单位,如 Pa
testTime String 测试完成时间,Base64 编码;解码后格式 yyyy-MM-dd HH:mm:ss
title String 测试标题,Base64 编码

3.3.3 Base64 编码对照表

原始值 Base64 编码值
200 MjAw
5 NQ==
2026-06-09 12:12:00 MjAyNC0wNS0xNiAxMjoxMjowMA==

编码步骤:原始字符串 → UTF-8 → Base64 编码 → URL 编码(作为表单参数提交)

3.4 请求示例

表单 Body(OK 件,完整参数)

__ajax=json&sn=501901660045119990G4JB100071&oprno=OP450&lineSn=XT&workNum=system&craft=100000&result=OK&cxm=PROGRAM_01&testPressure=MjAw&testPressureUnit=Pa&leakVal=NQ==&leakValUnit=Pa&testTime=MjAyNC0wNS0xNiAxMjoxMjowMA==&deviceType=QM001&remark=

带注释的完整参数示例

__ajax=json          # JeeSite 返回 JSON(建议)
&sn=501901660045119990G4JB100071   # 工件码(必填)
&oprno=OP450         # 工位号(必填)
&lineSn=XT           # 产线编号(必填)
&craft=100000        # 工艺号,工位总结果固定传 100000(强烈建议)
&result=OK           # 测试结果 OK/NG(必填,大写)
&workNum=system      # 操作员工号(建议)
&cxm=PROGRAM_01      # 气密程序号(可选)
&deviceType=QM001    # 设备类型/编号(可选)
&testPressure=MjAw   # 测试压 200,Base64 编码(可选)
&testPressureUnit=Pa # 测试压单位(可选)
&leakVal=NQ==        # 泄漏值 5,Base64 编码(可选)
&leakValUnit=Pa      # 泄漏值单位(可选)
&testTime=MjAyNC0wNS0xNiAxMjoxMjowMA==  # 测试时间,Base64 编码(可选)
&remark=             # 备注(可选)

NG 件最小请求(仅必填项)

__ajax=json&sn=501901660045119990G4JB100071&oprno=OP450&lineSn=XT&craft=100000&result=NG&workNum=system

原始 HTTP 报文

POST /js/a/mes/mesProductRecord/qmresult HTTP/1.1
Host: 192.168.16.99:8980
Content-Type: application/x-www-form-urlencoded

__ajax=json&sn=501901660045119990G4JB100071&oprno=OP450&lineSn=XT&workNum=system&craft=100000&result=OK&cxm=PROGRAM_01&testPressure=MjAw&testPressureUnit=Pa&leakVal=NQ==&leakValUnit=Pa&testTime=MjAyNC0wNS0xNiAxMjoxMjowMA==&deviceType=QM001

cURL

curl -X POST "http://192.168.16.99:8980/js/a/mes/mesProductRecord/qmresult" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-urlencode "__ajax=json" \
  --data-urlencode "sn=501901660045119990G4JB100071" \
  --data-urlencode "oprno=OP450" \
  --data-urlencode "lineSn=XT" \
  --data-urlencode "workNum=system" \
  --data-urlencode "craft=100000" \
  --data-urlencode "result=OK" \
  --data-urlencode "cxm=PROGRAM_01" \
  --data-urlencode "testPressure=MjAw" \
  --data-urlencode "testPressureUnit=Pa" \
  --data-urlencode "leakVal=NQ==" \
  --data-urlencode "leakValUnit=Pa" \
  --data-urlencode "testTime=MjAyNC0wNS0xNiAxMjoxMjowMA==" \
  --data-urlencode "deviceType=QM001"

3.5 响应格式

返回 JeeSite 标准 JSON 字符串:

字段 类型 说明
result String "true" 成功 / "false" 失败
message String 中文提示信息

3.6 响应示例

成功:

{
  "result": "true",
  "message": "操作成功!"
}

参数错误:

{
  "result": "false",
  "message": "参数错误1!"
}

工位未配置:

{
  "result": "false",
  "message": "子工位未配置!"
}

工位结果更新失败(防呆拦截):

{
  "result": "false",
  "message": "该工件本工位已加工,结果:OK"
}

4. 两个接口对比

对比项 qmcheck qmresult
用途 测试前进站校验 测试后上传结果
是否写气密明细表 是(mes_product_qm
是否更新工位总结果 是(craft=100000
响应结构 result + message + data result + message
必填参数 sn, oprno, lineSn sn, oprno, lineSn, result
操作员字段 workNum workNum
特殊校验 15 分钟间隔(可配置) 样件判定、防呆、多次气密

5. 与 pccheck / pcresult 字段差异

接口 操作员字段 craft 默认值 说明
pccheck / pcresult ucode pcresult 服务端默认 100000 通用工位校验/结果
qmcheck / qmresult workNum qmresult 需客户端传 craft=100000 气密专用接口

6. 对接注意事项

  1. 先 check 后 result:测试前必须 qmcheck 通过,再调用 qmresult,否则工位结果可能更新失败。
  2. craft 固定传 100000:与 MES 工位总结果工艺号一致,不传可能导致工位结果无法正确更新。
  3. result 大小写:固定大写 OK / NG
  4. Base64 字段testPressureleakValtestTimetitle 需 Base64 编码后再 URL 编码提交。
  5. testTime 格式:解码后必须为 yyyy-MM-dd HH:mm:ss,解析失败则入库为 null。
  6. 15 分钟间隔:由配置项 mes.qm.ng.time=1 控制,未开启时不校验。
  7. URL 编码:工件码含 -、空格等特殊字符时必须 URL 编码。
  8. 失败重试:qmresult 失败时根据 message 判断原因,不建议盲目重试(可能重复写入气密明细)。

7. 联调检查清单

  • qmcheck:正常工件返回 result=true, data=UD
  • qmcheck:已加工工件返回 result=false 及对应 message
  • qmcheck:15 分钟内重复测试被拦截(如已开启配置)
  • qmresult:OK 件上传成功,MES 可查气密明细 + 工位总结果 OK
  • qmresult:NG 件上传成功,工位总结果 NG
  • qmresult:缺少 sn/oprno/lineSn/result 返回参数错误
  • Base64 字段解码后数值、时间正确
  • 无登录/token 可正常访问

8. 参考源码

内容 路径
接口实现 src/main/java/com/jeesite/modules/mes/web/MesProductRecordController.java
请求 DTO src/main/java/com/jeesite/modules/mes/req/MesProductQmReq.java
响应对象 src/main/java/com/jeesite/modules/mes/resp/CommonResp.java
错误码文案 src/main/java/com/jeesite/modules/mes/utils/ErrorMsg.java
匿名访问配置 src/main/resources/config/application.yml
本地测试示例 api.http(约 318~349 行)