# PDA ERP 对接接口汇总 > 服务根地址:`http://127.0.0.1:8980` > 仅登录 MES,不直连金蝶 ERP > **PDA 请统一使用 `POST`**(表单或 query 参数均可;部分辅助接口也兼容 GET 供 PC 调试) > **所有 PDA 接口统一返回 `CommonResp` 结构**(与 `pdaQueryIsSn` 一致) > **提交类接口**(`submitInStock`、`submitPickMaterial`、`submit`)均支持 **表单 POST** 与 **JSON Body** 两种方式 ## 统一响应格式 |字段|类型|说明| |:----|:-----|-----| |result|string|`"true"` 成功 / `"false"` 失败| |message|string|提示信息| |data|object|业务数据,结构因接口而异,见各接口「返回字段说明」| ### data 分页结构(Page,列表类接口通用) |字段|类型|中文说明| |:----|:-----|-----| |pageNo|int|当前页码| |pageSize|int|每页条数| |count|long|总记录数(ERP 游标式分页,末页可能为估算值)| |list|array|当前页数据行| ### 仓库选项 stockList[](单条) |字段|类型|中文说明| |:----|:-----|-----| |stockNumber|string|仓库编码| |stockName|string|仓库名称| |displayLabel|string|展示文本,一般为「编码 + 名称」| ### 仓位选项 locations[](单条) |字段|类型|中文说明| |:----|:-----|-----| |locNumber|string|仓位编码| |locName|string|仓位名称| |displayLabel|string|展示文本| |locKey|string|仓位维度键(因仓库而异,仅展示用;**提交可不回传**,见下文「仓库与仓位」)| ### 批号选项 lots[](单条) |字段|类型|中文说明| |:----|:-----|-----| |lotNumber|string|批号| |qtyText|string|可用/库存数量展示文本| ### MES 批次码 batch / batchList[](单条) |字段|类型|中文说明| |:----|:-----|-----| |id|string|mes_batch_sn 主键,生产入库提交 batchIds 用此值| |batchSn|string|MES 托盘批次码(扫码值)| |lineSn|string|产线编号,如 HEVXT、115XT| |nums|long|已绑定工件数量,须 >0 才可入库| |instockStatus|string|入库状态,0 未入库 / 1 已入库| ``` 成功示例 { "result": "true", "message": "成功", "data": { ... } } 失败示例 { "result": "false", "message": "参数错误", "data": null } ``` > PC 端页面仍使用原 `selectOrderData`、`listData` 等接口(直接返回 `Page`);PDA 请使用下文 **`pda/`** 前缀接口。 --- ## 仓库与仓位(通用) > **PDA 推荐统一调用公共接口**(来料检 / 生产入库 / 直接调拨共用,避免各模块重复实现与权限不一致): > > | 用途 | URL | > |:-----|:----| > | 仓库列表 | `POST /js/a/mes/erpStockPda/stockList` | > | 仓位选项 | `POST /js/a/mes/erpStockPda/stockLocOptions?stockNumber=1100105` | > | 初始化(仓库+默认仓位) | `POST /js/a/mes/erpStockPda/init` 或 `?stockNumber=` | > > 权限:拥有 **来料检 / 生产入库 / 直接调拨** 任一模块的 `view` 权限即可调用。 > 各业务模块下原有的 `stockList`、`pda/stockLocOptions` **仍保留兼容**,数据与公共接口一致。 涉及来料检、生产入库、直接调拨的接口,仓库/仓位规则一致: | 步骤 | PDA 行为 | |:-----|:---------| | 1 | 调 **`/mes/erpStockPda/stockList`** 或业务 init 接口,获取 `stockList`、`defaultStockNumber` | | 2 | 用户选定仓库后,调 **`/mes/erpStockPda/stockLocOptions?stockNumber=`** | | 3 | 若返回 `data.required=true`,提交时必须带仓位编码(`stockLocNumber`,或调拨的 `srcStockLocNumber` / `destStockLocNumber`) | | 4 | **不要写死 `stockLocKey`**:MES 后台按仓库查金蝶档案并解析仓位内码 | **PDA 崩溃常见原因(返回 HTML 登录页)** | 现象 | 原因 | 处理 | |:-----|:-----|:-----| | Logcat 出现 `登录 - MES生产管理系统` | **Session 失效或未带 Cookie** | 重新登录 MES,请求头携带 `Cookie: jeesite.session.id=...` 或参数 `__sid` | | 第一次能选仓位、第二次 Gson 崩溃 | 第二次请求未带登录态,把 HTML 当 JSON 解析 | 解析前先判断 `result` 字段或 `Content-Type` 含 `json`;统一改用 **`erpStockPda`** 公共接口 | | 生产入库却调 `erpInStock/...` 仓位接口 | 模块权限不一致 | 改用 **`/mes/erpStockPda/stockLocOptions`** | **`locKey` / `stockLocKey`** | 项 | 说明 | |:---|:-----| | 是否固定 | **否**。由 ERP 仓库弹性域决定,因仓库而异。例:五金库 `1100105` → `F100004`;半成品仓 `1100104` → `F100002` | | 谁解析 | **MES 后台**。根据 `stockNumber` + `stockLocNumber` 查 `BD_FLEXVALUESDETAIL.FID`,以整数写入金蝶 `FStockLocId` | | PDA 是否必传 | **`stockLocKey` 可选**。仓位选项返回的 `locKey` 仅供展示/日志;只传 `stockNumber` + `stockLocNumber` 即可 | | 无仓位仓库 | `stockLocOptions` 返回 `required=false` 时,提交不传仓位字段 | **提交最少字段示例(来料检)**【已改:须带 checkResult】** ```json { "billNo": "CGDD110260602003", "checkResult": "OK", "channel": "PDA", "stockNumber": "1100105", "stockLocNumber": "A22", "entryIds": ["194383", "194384", "194385"], "lines": [ { "inspectQty": 10, "lotNumber": "11020260603" }, { "inspectQty": 10, "lotNumber": "20250101" }, { "inspectQty": 600 } ] } ``` ### 公共:仓库列表(推荐) > 来料检、生产入库、直接调拨 **共用**。PDA 请优先使用本接口,勿再按业务模块分别调用各模块下的 `stockList`。 ##### 请求URL - ` /js/a/mes/erpStockPda/stockList ` ##### 请求方式 - POST(也兼容 GET) ##### 权限 - `mes:erpInStock:view` / `mes:erpPrdInStock:view` / `mes:erpTransferDirect:view` **任一**即可 ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |无|—|—|—| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpStockPda/stockList' \ --header 'Cookie: jeesite.session.id=你的会话ID' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "defaultStockNumber": "1100105", "stockHint": "共 5 个可用仓库", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库", "displayLabel": "1100105 五金库" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.defaultStockNumber|string|推荐默认入库仓库编码| |data.stockHint|string|仓库加载提示文本| |data.stockList[]|array|可用仓库列表,字段见「仓库选项 stockList[]」| --- ### 公共:仓位选项(推荐) > 来料检、生产入库、直接调拨 **共用**。用户**切换仓库后须重新调用**本接口。 ##### 请求URL - ` /js/a/mes/erpStockPda/stockLocOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 权限 - `mes:erpInStock:view` / `mes:erpPrdInStock:view` / `mes:erpTransferDirect:view` **任一**即可 ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |stockNumber|是|string|仓库编码(来自 stockList 或 init)| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpStockPda/stockLocOptions?stockNumber=1100105' \ --header 'Cookie: jeesite.session.id=你的会话ID' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "stockNumber": "1100105", "required": true, "defaultLocNumber": "A", "locKey": "F100004", "locHint": "共 278 个仓位,数据来自 ERP 仓位值集", "locations": [ { "locNumber": "A", "locName": "A", "locKey": "F100004", "displayLabel": "A A" } ] } } ``` ``` 失败(未传仓库) { "result": "false", "message": "仓库编码不能为空", "data": null } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.stockNumber|string|请求的仓库编码| |data.required|boolean|该仓库是否启用仓位(true 时须选择仓位)| |data.defaultLocNumber|string|推荐默认仓位编码| |data.locHint|string|仓位加载提示文本| |data.locKey|string|仓位维度键(因仓库而异,展示用;提交可不回传)| |data.locKeys|array|仓库启用的全部维度键(多维度仓库时有值)| |data.locations[]|array|仓位列表,字段见「仓位选项 locations[]」| --- ### 公共:初始化(仓库 + 默认仓位预览) > 一次返回仓库列表及默认仓库(或指定仓库)的仓位预览,减少 PDA 往返。完整仓位列表仍须调「公共:仓位选项」。 ##### 请求URL - ` /js/a/mes/erpStockPda/init ` ##### 请求方式 - POST(也兼容 GET) ##### 权限 - `mes:erpInStock:view` / `mes:erpPrdInStock:view` / `mes:erpTransferDirect:view` **任一**即可 ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |stockNumber|否|string|指定仓库编码;不传则取 `defaultStockNumber` 查仓位预览| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpStockPda/init' \ --header 'Cookie: jeesite.session.id=你的会话ID' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "defaultStockNumber": "1100105", "stockHint": "共 5 个可用仓库", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库", "displayLabel": "1100105 五金库" } ], "stockLoc": { "stockNumber": "1100105", "required": true, "defaultLocNumber": "A11", "locKey": "F100004", "locHint": "共 278 个仓位,数据来自 ERP 仓位值集", "locations": [ { "locNumber": "A11", "locName": "A11区", "locKey": "F100004", "displayLabel": "A11 A11区" } ] } } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.defaultStockNumber|string|推荐默认入库仓库编码| |data.stockHint|string|仓库加载提示文本| |data.stockList[]|array|可用仓库列表,字段见「仓库选项 stockList[]」| |data.stockLoc|object|默认/指定仓库的仓位预览,字段同「公共:仓位选项」返回的 data| --- ## 一、来料检(采购入库) > **【新增·来料检记录】** 提交时必传 `checkResult`(OK/NG);仅 OK 生成 CGRK;NG 只留 MES 检验记录。 > 详细对照与适配说明见:`docs/erp/PDA来料检接口说明.md`(文首「本次变更说明」)。 ### 采购订单列表 ##### 请求URL - ` /js/a/mes/erpInStock/pda/selectOrderData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码,默认 1| |pageSize|否|int|每页条数,默认 20| |billNo|否|string|采购订单号| |materialNumberQuery|否|string|物料编码模糊| |documentStatusQuery|否|string|单据状态 A/B/C/D,建议默认 C 已审核| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/selectOrderData?pageNo=1&pageSize=20&documentStatusQuery=C' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "billNo": "CGDD110260602003", "date": "2026-06-02", "documentStatusName": "已审核", "supplierName": "某某供应商", "entryCount": 3, "totalQty": 1500 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo|int|当前页码| |data.pageSize|int|每页条数| |data.count|long|总记录数| |data.list[].billNo|string|采购订单号| |data.list[].date|string|单据日期| |data.list[].documentStatusName|string|单据状态名称(如已审核)| |data.list[].supplierName|string|供应商名称| |data.list[].entryCount|int|订单分录行数| |data.list[].totalQty|number|订单合计数量| --- ### 待入分录列表 ##### 请求URL - ` /js/a/mes/erpInStock/pda/selectDetailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|采购订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/selectDetailData?billNo=CGDD110260602003' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 2, "list": [ { "entryId": "123456", "seq": "1", "materialNumber": "3.01.001", "materialName": "某原材料", "qty": 1000, "instockQty": 200, "remainQty": 800, "unitName": "千克" } ] } } ``` ``` 失败(已全部入库,data 中 list 为空) { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 0, "list": [] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息;失败时说明原因| |data.pageNo|int|当前页码| |data.pageSize|int|每页条数| |data.count|long|总记录数,无待入分录时为 0| |data.list[].entryId|string|采购订单分录内码(提交入库 lines[].entryId 用)| |data.list[].seq|string|行号| |data.list[].materialNumber|string|物料编码| |data.list[].materialName|string|物料名称| |data.list[].qty|number|订单数量| |data.list[].instockQty|number|已入库数量| |data.list[].remainQty|number|剩余可入数量(检验数量不得超过此值)| |data.list[].unitName|string|计量单位| --- ### 来料检页初始化 ##### 请求URL - ` /js/a/mes/erpInStock/inspectInit ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|采购订单号| |entryIds|是|string / array|勾选分录内码;多条英文逗号分隔,或 JSON 数组;仅一条时也传此字段| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/inspectInit?billNo=CGDD110260602003&entryIds=123456,123457' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "", "data": { "billNo": "CGDD110260602003", "defaultStockNumber": "1100105", "inspectorCode": "zhangsan", "inspectorName": "张三", "inspectTime": "2026-09-11 13:30:00", "checkResultOptions": ["OK", "NG"], "stockList": [ { "stockNumber": "1100105", "stockName": "五金库", "displayLabel": "1100105 五金库" } ], "stockLoc": { "required": true, "defaultLocNumber": "A11", "locKey": "F100004", "locHint": "共 278 个仓位,数据来自 ERP 仓位值集", "locations": [ { "locNumber": "A11", "locName": "A11区", "locKey": "F100004", "displayLabel": "A11 A11区" } ] }, "lines": [ { "entryId": "123456", "seq": "1", "materialNumber": "3.01.001", "materialName": "螺栓M8", "remainQty": 800, "batchManage": true, "suggestedLotNumber": "LOT202606001" } ] } } ``` > **仓库/仓位说明**:`defaultStockNumber` + `stockList` 为仓库;`stockLoc` 为**默认仓库**的仓位预览(完整列表请调「仓位选项」)。`required=true` 时提交**必须**带 `stockLocNumber`;`stockLocKey` **可选**(后台自动解析)。切换仓库后须重新调「仓位选项」。 > **【新增】** `inspectorCode` / `inspectorName` / `inspectTime` / `checkResultOptions`:供 PDA 预填固定检查项。 ``` 失败 { "result": "false", "message": "所选分录已无剩余可入数量", "data": { "billNo": "CGDD110260602003", "lines": [], "stockList": [], "defaultStockNumber": "1100105" } } ``` ##### 返回字段说明 |字段路径|类型|中文说明|变更| |:----|:-----|-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`|原有| |message|string|提示信息;成功时可能为空|原有| |data.billNo|string|采购订单号|原有| |data.defaultStockNumber|string|推荐默认入库仓库编码|原有| |data.stockList[]|array|可用仓库列表,字段见「仓库选项 stockList[]」|原有| |data.stockLoc|object|默认仓库的仓位信息,字段同「仓位选项」返回的 data|原有| |data.inspectorCode|string|默认检验员账号|**【新增】**| |data.inspectorName|string|默认检验员姓名|**【新增】**| |data.inspectTime|string|默认检验时间|**【新增】**| |data.checkResultOptions|array|固定 `["OK","NG"]`|**【新增】**| |data.lines[].entryId|string|分录内码|原有| |data.lines[].seq|string|行号|原有| |data.lines[].materialNumber|string|物料编码|原有| |data.lines[].materialName|string|物料名称|原有| |data.lines[].remainQty|number|剩余可入数量|原有| |data.lines[].batchManage|boolean|是否启用批号管理(true 时须填批号)|原有| |data.lines[].suggestedLotNumber|string|推荐批号(批号管理物料)|原有| --- ### 仓位选项 ##### 请求URL - ` /js/a/mes/erpInStock/pda/stockLocOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |stockNumber|是|string|仓库编码| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/stockLocOptions?stockNumber=1100105' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "required": true, "defaultLocNumber": "A", "locKey": "F100004", "locHint": "共 278 个仓位,数据来自 ERP 仓位值集", "locations": [ { "locNumber": "A", "locName": "A", "locKey": "F100004", "displayLabel": "A A" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.required|boolean|该仓库是否启用仓位(true 时须选择仓位)| |data.defaultLocNumber|string|推荐默认仓位编码| |data.locHint|string|仓位加载提示文本| |data.locKey|string|仓位维度键(因仓库而异,展示用;提交可不回传)| |data.locKeys|array|仓库启用的全部维度键(多维度仓库时有值)| |data.locations[]|array|仓位列表,字段见「仓位选项 locations[]」| --- ### 仓库列表 ##### 请求URL - ` /js/a/mes/erpInStock/stockList ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |无|—|—|—| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/stockList' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "defaultStockNumber": "1100105", "stockHint": "共 5 个可用仓库", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库", "displayLabel": "1100105 五金库" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.defaultStockNumber|string|推荐默认入库仓库编码| |data.stockHint|string|仓库加载提示文本| |data.stockList[]|array|可用仓库列表,字段见「仓库选项 stockList[]」| --- ### 批号搜索 ##### 请求URL - ` /js/a/mes/erpInStock/pda/lotSearch ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |materialNumber|是|string|物料编码| |lotKeyword|否|string|批号关键字| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/lotSearch?materialNumber=3.01.001&lotKeyword=LOT' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "lots": [ { "lotNumber": "LOT202606001", "qtyText": "0" } ], "lotHint": "共查到 1 条批号档案" } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.lots[]|array|匹配的批号档案列表,字段见「批号选项 lots[]」| |data.lotHint|string|查询结果提示(无结果时可手工录入新批号)| --- ### 批号列表 ##### 请求URL - ` /js/a/mes/erpInStock/pda/lotOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |materialNumber|是|string|物料编码| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/lotOptions?materialNumber=3.01.001' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "lots": [ { "lotNumber": "LOT202606001", "qtyText": "0" } ], "suggestedLotNumber": "LOT202606001", "lotHint": "共 3 条批号档案,已推荐第一条" } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.lots[]|array|物料批号档案列表,字段见「批号选项 lots[]」| |data.suggestedLotNumber|string|推荐默认批号| |data.lotHint|string|批号加载提示文本| --- ### 提交采购入库(含来料检)【已改:必传 checkResult】 ##### 请求URL - ` /js/a/mes/erpInStock/submitInStock ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明|变更| |:----|:---|:-----|-----|-----| |billNo|是|string|采购订单号|原有| |checkResult|是|string|检验结果 `OK`/`NG`;仅 OK 生成采购入库单,NG 只保存检验记录|**【新增】必填**| |inspectorName|否|string|检验员,默认当前用户|**【新增】**| |inspectorCode|否|string|检验员账号|**【新增】**| |inspectTime|否|string|检验时间,默认当前时间|**【新增】**| |remarks|否|string|备注|**【新增】**| |channel|否|string|建议 PDA 传 `PDA`|**【新增】**| |stockNumber|条件|string|入库仓库编码;**OK 时必填**|原有| |stockLocNumber|条件|string|仓库启用仓位且 OK 时必填|原有| |stockLocKey|否|string|仓位维度键,可选|原有| |entryIds|条件|string / array|分录内码;与 lines 二选一或组合|原有| |lines|条件|array / string|入库明细 JSON 数组;**表单方式时 `lines` 为 URL 编码后的 JSON 字符串**|原有| |lines[].entryId|条件|string|PO 分录内码|原有| |lines[].inspectQty|条件|number|检验数量|原有| |lines[].lotNumber|条件|string|批号管理物料必填|原有| **Content-Type(二选一):** `application/x-www-form-urlencoded`(PDA 推荐)或 `application/json;charset=UTF-8` ##### 参数示例 ``` # PDA 表单(OK 入库) curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/submitInStock' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'billNo=CGDD110260602003' \ --data-urlencode 'checkResult=OK' \ --data-urlencode 'channel=PDA' \ --data-urlencode 'stockNumber=1100105' \ --data-urlencode 'stockLocNumber=A22' \ --data-urlencode 'lines=[{"entryId":"194383","inspectQty":10,"lotNumber":"11020260603"}]' ``` ##### 返回示例 ``` OK 成功【返回字段含新增】 { "result": "true", "message": "来料检合格,采购入库单保存成功,单号:CGRK110260624001", "data": { "inspectId": "xxx", "checkResult": "OK", "inStockCreated": "1", "inStockBillNo": "CGRK110260624001" } } ``` ``` NG 仅留痕【新增场景】 { "result": "true", "message": "来料检不合格,已保存检验记录,未生成采购入库单", "data": { "inspectId": "xxx", "checkResult": "NG", "inStockCreated": "0", "inStockBillNo": "" } } ``` ``` 失败 { "result": "false", "message": "请选择来料检结果(OK/NG)" } ``` ##### 返回 data 字段 |字段|说明|变更| |:----|-----|-----| |inspectId|MES 来料检记录 id|**【新增】**| |checkResult|OK / NG|**【新增】**| |inStockCreated|`1` 已生成入库单 / `0` 未生成|**【新增】**| |inStockBillNo|CGRK 单号;未生成时为空|原有| --- ### 来料检记录列表【新增·整节】 ##### 请求URL - ` /js/a/mes/mesErpInStockInspect/pda/listData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |poBillNo|否|string|采购订单号| |checkResult|否|string|OK / NG| |inStockBillNo|否|string|入库单号| |inspectorName|否|string|检验员| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/mesErpInStockInspect/pda/listData?pageNo=1&pageSize=20&checkResult=NG' ``` ##### 说明 - **【新增】** 整接口:查 MES 检验留痕(含 NG);与「采购入库历史」查金蝶 CGRK 不同。 - PC 菜单:生产管理 → ERP来料检记录(需执行 `db/mysql/add_mes_erp_in_stock_inspect.sql`) > 若仍报仓位维度为空,请确认 MES 已部署最新后端(`FStockLocId` 须为 ERP 仓位内码整数)。`stockLocKey` 传错或不传均不影响,关键是 `stockNumber` + `stockLocNumber` 正确。 > **ERP 下推日志**:每次提交(成功/失败)均写入「生产管理 → ERP下推日志」。失败时 `result_message` / `response_summary` 含金蝶报错;`request_summary` 含仓库、仓位、entryIds。需先执行 `db/mysql/add_mes_erp_interaction_log.sql` 并重启 MES。 ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|保存结果说明;成功时含 ERP 入库单号| |data.inStockBillNo|string|成功时返回,ERP 采购入库单号(CGRK 开头)| --- ### 采购入库历史列表 ##### 请求URL - ` /js/a/mes/erpInStock/pda/listData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |poOrderNoQuery|否|string|采购订单号| |billNoQuery|否|string|入库单号 CGRK| |materialNumberQuery|否|string|物料编码模糊| |documentStatusQuery|否|string|C=已审核| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/listData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "billNo": "CGRK110260624001", "date": "2026-06-24", "poOrderNo": "CGDD110260602003", "materialNumber": "3.01.001", "realQty": 800, "lotNumber": "LOT202606001" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|采购入库单号(CGRK)| |data.list[].date|string|入库日期| |data.list[].poOrderNo|string|来源采购订单号| |data.list[].materialNumber|string|物料编码| |data.list[].realQty|number|实收数量| |data.list[].lotNumber|string|批号| --- ### 查看入库单明细 ##### 请求URL - ` /js/a/mes/erpInStock/pda/detailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|采购入库单号 CGRK| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpInStock/pda/detailData?billNo=CGRK110260624001' ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |data.list[].seq|string|行号| |data.list[].materialNumber|string|物料编码| |data.list[].realQty|number|实收数量| |data.list[].lotNumber|string|批号| |data.list[].stockName|string|仓库名称| --- ## 二、生产入库 ### 生产入库单列表 ##### 请求URL - ` /js/a/mes/erpPrdInStock/pda/listData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |billNoQuery|否|string|入库单号 SCRK| |moBillNoQuery|否|string|生产订单号| |materialNumberQuery|否|string|物料编码模糊| |documentStatusQuery|否|string|C=已审核| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/pda/listData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "billNo": "SCRK110260605001", "moBillNo": "SCDD110260605001", "materialNumber": "8.10.HEV.10.047696", "realQty": 150, "lotNumber": "110260605001" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|生产入库单号(SCRK)| |data.list[].moBillNo|string|来源生产订单号| |data.list[].materialNumber|string|物料编码(.10 半成品)| |data.list[].realQty|number|入库数量| |data.list[].lotNumber|string|ERP 批号| --- ### 选择生产订单 ##### 请求URL - ` /js/a/mes/erpPrdInStock/pda/selectOrderData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |billNo|否|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/pda/selectOrderData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 10, "list": [ { "billNo": "SCDD110260605001", "date": "2026-06-01", "documentStatusName": "已审核", "inventoryCategory": "HEV", "entryCount": 1, "totalQty": 1500 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|生产订单号| |data.list[].date|string|单据日期| |data.list[].documentStatusName|string|单据状态名称| |data.list[].inventoryCategory|string|存货类别(HEV / 115 等)| |data.list[].entryCount|int|订单分录行数| |data.list[].totalQty|number|订单合计数量| --- ### 选择订单分录 ##### 请求URL - ` /js/a/mes/erpPrdInStock/pda/selectDetailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/pda/selectDetailData?billNo=SCDD110260605001' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "entryId": "266500", "seq": "1", "materialNumber": "8.10.HEV.10.047696", "materialName": "下壳体", "qty": 1500, "instockQty": 264, "remainQty": 1236, "unitName": "件" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].entryId|string|生产订单分录内码(formInit、submit 用)| |data.list[].seq|string|行号| |data.list[].materialNumber|string|物料编码(.10 半成品)| |data.list[].materialName|string|物料名称| |data.list[].qty|number|订单数量| |data.list[].instockQty|number|已入库数量| |data.list[].remainQty|number|剩余可入数量| |data.list[].unitName|string|计量单位| --- ### 选批次入库页初始化 ##### 请求URL - ` /js/a/mes/erpPrdInStock/formInit ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |moBillNo|是|string|生产订单号| |entryId|是|string|订单分录内码| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/formInit?moBillNo=SCDD110260605001&entryId=266500' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "", "data": { "moBillNo": "SCDD110260605001", "entryId": "266500", "moEntry": { "qty": 1500, "instockQty": 264, "remainQty": 1236 }, "batchList": [ { "id": "batch-id-001", "batchSn": "20260527133003", "lineSn": "HEVXT", "nums": 50 } ], "defaultStockNumber": "1100105", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库" } ] } } ``` ``` 失败(无待入库批次) { "result": "true", "message": "暂无待入库 MES 批次码。须产线 [HEVXT]、nums>0、且未入库", "data": { "moBillNo": "SCDD110260605001", "entryId": "266500", "moEntry": { "qty": 1500, "instockQty": 264, "remainQty": 1236 }, "batchList": [], "stockList": [], "defaultStockNumber": "1100105" } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息;无待入库批次时说明原因| |data.moBillNo|string|生产订单号| |data.entryId|string|订单分录内码| |data.moEntry.qty|number|订单数量| |data.moEntry.instockQty|number|已入库数量| |data.moEntry.remainQty|number|剩余可入数量| |data.batchList[]|array|待入库 MES 批次码,字段见「MES 批次码 batch」| |data.defaultStockNumber|string|推荐默认入库仓库编码| |data.stockList[]|array|可用仓库列表| --- ### 扫 MES 批次码校验 ##### 请求URL - ` /js/a/mes/erpPrdInStock/batchScan ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |batchSn|是|string|MES 托盘批次码| |materialNumber|是|string|当前订单分录物料编码| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/batchScan?batchSn=20260527133003&materialNumber=8.10.HEV.10.047696' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "可以入库", "data": { "batch": { "id": "batch-id-001", "batchSn": "20260527133003", "lineSn": "HEVXT", "nums": 50 } } } ``` ``` 失败 { "result": "false", "message": "批次码产线 115XT 与当前物料 8.10.HEV.10.047696 不匹配,不能入库", "data": { "batch": { "id": "batch-id-001", "batchSn": "20260527133003", "lineSn": "115XT", "nums": 50 } } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|校验结果说明(如「可以入库」或失败原因)| |data.batch|object|MES 批次码信息,字段见「MES 批次码 batch」| --- ### 仓位选项 ##### 请求URL - ` /js/a/mes/erpPrdInStock/pda/stockLocOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |stockNumber|是|string|仓库编码| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/pda/stockLocOptions?stockNumber=1100105' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "required": true, "defaultLocNumber": "A", "locKey": "F100004", "locHint": "共 278 个仓位,数据来自 ERP 仓位值集", "locations": [ { "locNumber": "A", "locName": "A", "locKey": "F100004", "displayLabel": "A A" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.required|boolean|是否必须选择仓位| |data.defaultLocNumber|string|推荐默认仓位编码| |data.locHint|string|仓位加载提示| |data.locKey|string|仓位维度键(展示用;提交可不回传)| |data.locations[]|array|仓位列表,字段见「仓位选项 locations[]」| --- ### 仓库列表 ##### 请求URL - ` /js/a/mes/erpPrdInStock/stockList ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |无|—|—|—| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/stockList' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "defaultStockNumber": "1100105", "stockHint": "共 5 个可用仓库", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.defaultStockNumber|string|推荐默认入库仓库编码| |data.stockHint|string|仓库加载提示| |data.stockList[]|array|可用仓库列表| --- ### 提交生产入库 ##### 请求URL - ` /js/a/mes/erpPrdInStock/submit ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |moBillNo|是|string|生产订单号| |entryId|是|string|订单分录内码| |batchIds|是|array / string|mes_batch_sn.id 列表;表单方式传 JSON 数组字符串或逗号分隔| |stockNumber|是|string|入库仓库编码| |stockLocNumber|条件|string|仓库启用仓位时必填| |stockLocKey|否|string|仓位维度键,可选| **Content-Type(二选一):** `application/x-www-form-urlencoded`(PDA 推荐)或 `application/json;charset=UTF-8` ##### 参数示例 ``` # PDA 表单 curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/submit' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'moBillNo=SCDD110260605001' \ --data-urlencode 'entryId=266500' \ --data-urlencode 'batchIds=["batch-id-001"]' \ --data-urlencode 'stockNumber=1100105' \ --data-urlencode 'stockLocNumber=A22' # JSON Body curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/submit' \ --header 'Content-Type: application/json;charset=UTF-8' \ --data '{"moBillNo":"SCDD110260605001","entryId":"266500","batchIds":["batch-id-001"],"stockNumber":"1100105","stockLocNumber":"A22"}' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "生产入库单保存成功,单号:SCRK110260605002;合计数量 100,绑定批次 1 个", "data": { "billNo": "SCRK110260605002", "totalQty": 100, "batchCount": 1, "lotNumber": "110260605002" } } ``` ``` 失败 { "result": "false", "message": "请至少选择一个 MES 批次码" } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|保存结果说明| |data.billNo|string|成功时返回,ERP 生产入库单号(SCRK)| |data.totalQty|number|本次合计入库数量(所选批次 nums 之和)| |data.batchCount|int|绑定的 MES 批次码个数| |data.lotNumber|string|ERP 生成的批号(若有)| --- ### 查看生产入库单明细 ##### 请求URL - ` /js/a/mes/erpPrdInStock/pda/detailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|生产入库单号 SCRK| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPrdInStock/pda/detailData?billNo=SCRK110260605002' ``` --- ## 三、生产领料 ### 领料单列表 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/pda/listData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |moBillNoQuery|否|string|生产订单号| |billNoQuery|否|string|领料单号 SCLL| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/pda/listData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "billNo": "SCLL110260603001", "moBillNo": "SCDD110260603003", "materialNumber": "3.02.xxx", "actualQty": 100 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|生产领料单号(SCLL)| |data.list[].moBillNo|string|来源生产订单号| |data.list[].materialNumber|string|子项物料编码| |data.list[].actualQty|number|实发数量| --- ### 选择生产订单 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/pda/selectOrderData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |billNo|否|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/pda/selectOrderData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 5, "list": [ { "billNo": "SCDD110260603003", "documentStatusName": "已审核", "inventoryCategory": "HEV", "entryCount": 1, "totalQty": 1200 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|生产订单号| |data.list[].documentStatusName|string|单据状态名称| |data.list[].inventoryCategory|string|存货类别| |data.list[].entryCount|int|订单分录行数| |data.list[].totalQty|number|订单合计数量| --- ### 选择订单分录 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/pda/selectDetailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/pda/selectDetailData?billNo=SCDD110260603003' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "entryId": "266268", "seq": "1", "materialNumber": "8.10.HEV.05.049025", "qty": 1200, "workshopName": "冲压壳体线" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].entryId|string|生产订单分录内码(materialInit、submit 用)| |data.list[].seq|string|行号| |data.list[].materialNumber|string|成品物料编码(.05)| |data.list[].qty|number|订单数量| |data.list[].workshopName|string|生产车间名称| --- ### 领料页初始化(用料清单) ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/materialInit ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|生产订单号| |entryId|是|string|订单分录内码| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/materialInit?billNo=SCDD110260603003&entryId=266268' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "", "data": { "billNo": "SCDD110260603003", "entryId": "266268", "materialName": "成品", "moEntry": { "seq": "1", "materialNumber": "8.10.HEV.05.049025", "materialName": "成品", "qty": 1200 }, "materialList": [ { "id": "250403", "ppbomNo": "PPBOM00150358", "materialNumber": "8.10.HEV.04.01001047696", "materialName": "内胆", "mustQty": 100, "pickedQty": 20, "canPickQty": 80, "stockNumber": "1100101", "batchManage": true, "pickStatusLabel": "可领料" }, { "id": "250404", "ppbomNo": "PPBOM00150358", "materialNumber": "8.10.HEV.04.02001047696-2", "materialName": "横梁-2", "mustQty": 120, "pickedQty": 0, "canPickQty": 120, "stockNumber": "1100101", "batchManage": true, "pickStatusLabel": "可领料" } ] } } ``` ``` 失败 { "result": "false", "message": "未找到生产订单分录", "data": null } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息;用料清单为空时可能有说明| |data.billNo|string|生产订单号| |data.entryId|string|订单分录内码| |data.materialName|string|订单分录**成品**物料名称(页头展示用,与 moEntry 一致)| |data.moEntry.seq|string|订单分录行号| |data.moEntry.materialNumber|string|成品物料编码| |data.moEntry.materialName|string|成品物料名称| |data.moEntry.qty|number|订单数量| |data.materialList[].id|string|用料清单分录 id(提交 lines[].ppbomEntryId 用)| |data.materialList[].ppbomNo|string|生产用料清单号| |data.materialList[].materialNumber|string|**子项**物料编码| |data.materialList[].materialName|string|**子项**物料名称(如「内胆」「横梁-2」,PDA 列表必用)| |data.materialList[].mustQty|number|应发数量| |data.materialList[].pickedQty|number|已领数量| |data.materialList[].canPickQty|number|可领数量(领料数不得超过此值)| |data.materialList[].stockNumber|string|默认发料仓库编码| |data.materialList[].batchManage|boolean|是否批号管理(true 时须选批号)| |data.materialList[].pickStatusLabel|string|领料状态展示(如可领料)| --- ### 批号库存选项 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/pda/lotOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |materialNumber|是|string|子项物料编码| |stockNumber|否|string|发料仓库| |stockStatusNumber|否|string|库存状态| |stockOrgNumber|否|string|库存组织,默认 110| |pickQty|否|number|本次领料数量| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/pda/lotOptions?materialNumber=3.02.xxx&stockNumber=1100101&pickQty=50' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "lots": [ { "lotNumber": "LOT001", "qtyText": "200" } ], "suggestedLotNumber": "LOT001", "lotPickable": true, "lotHint": "共 3 条可用批号" } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.lots[]|array|可用批号库存列表,字段见「批号选项 lots[]」| |data.suggestedLotNumber|string|推荐批号| |data.lotPickable|boolean|是否存在可领批号库存| |data.lotHint|string|批号/库存提示(无库存时为诊断说明)| --- ### 批号搜索 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/pda/lotSearch ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |materialNumber|是|string|子项物料编码| |stockNumber|否|string|发料仓库| |stockStatusNumber|否|string|库存状态| |stockOrgNumber|否|string|库存组织| |lotKeyword|否|string|批号关键字| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/pda/lotSearch?materialNumber=3.02.xxx&stockNumber=1100101&lotKeyword=LOT' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "lots": [ { "lotNumber": "LOT001", "qtyText": "200" } ], "lotHint": "共查到 1 条" } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.lots[]|array|匹配的批号库存列表| |data.lotHint|string|查询结果提示| --- ### 提交领料 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/submitPickMaterial ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|生产订单号| |entryId|是|string|订单分录内码| |lines|是|array / string|领料明细;表单方式时 `lines` 为 URL 编码后的 JSON 字符串| |lines[].ppbomEntryId|是|string|用料清单分录 id| |lines[].pickQty|是|number|领料数量| |lines[].lotNumber|条件|string|批号管理物料必填| **Content-Type(二选一):** `application/x-www-form-urlencoded`(PDA 推荐)或 `application/json;charset=UTF-8` ##### 参数示例 ``` # PDA 表单 curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/submitPickMaterial' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'billNo=SCDD110260603003' \ --data-urlencode 'entryId=266268' \ --data-urlencode 'lines=[{"ppbomEntryId":"250403","pickQty":50,"lotNumber":"LOT001"}]' # JSON Body curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/submitPickMaterial' \ --header 'Content-Type: application/json;charset=UTF-8' \ --data '{"billNo":"SCDD110260603003","entryId":"266268","lines":[{"ppbomEntryId":"250403","pickQty":50,"lotNumber":"LOT001"}]}' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "领料单保存成功,单号:SCLL110260603010", "data": { "pickBillNo": "SCLL110260603010", "syncedKcCount": 1, "syncedMaterialCount": 0, "kcSyncFailed": false } } ``` ``` 失败 { "result": "false", "message": "领料数量不能超过可领数量" } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|保存结果说明| |data.pickBillNo|string|成功时返回,ERP 领料单号(SCLL)| |data.syncedKcCount|int|同步到 MES 库存的行数| |data.syncedMaterialCount|int|新增 MES 物料档案数| |data.kcSyncFailed|boolean|领料单已保存但 MES 库存同步是否失败| --- ### 查看领料单明细 ##### 请求URL - ` /js/a/mes/erpPickMaterialBill/pda/detailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|领料单号 SCLL| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpPickMaterialBill/pda/detailData?billNo=SCLL110260603010' ``` --- ## 四、直接调拨 > 与 PC「增加直接调拨单」一致:**不关联生产订单**。点新增调用 `formInit` 直接进入填单页;选物料和调出仓库后调 `pda/lotOptions` 选批号;调拨数量通过 `batchScan` 扫批次码累加,须已发货检合格;提交传 `traySns`(托盘码逗号拼接),成功后托盘改为已发货并绑定调拨单号。 > 详细说明见 [PDA直接调拨接口说明.md](./PDA直接调拨接口说明.md)。 ### 调拨单列表 ##### 请求URL - ` /js/a/mes/erpTransferDirect/pda/listData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |billNoQuery|否|string|调拨单号| |moBillNoQuery|否|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/listData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "billNo": "ZJDB110260605001", "moBillNo": "SCDD110260605001", "materialNumber": "8.10.HEV.10.047696", "lotNumber": "110260605001", "realQty": 100 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|直接调拨单号(ZJDB)| |data.list[].moBillNo|string|来源生产订单号| |data.list[].materialNumber|string|物料编码(.10 半成品)| |data.list[].lotNumber|string|批号| |data.list[].realQty|number|调拨数量| --- ### 选择生产订单(兼容旧版,新增流程不再调用) ##### 请求URL - ` /js/a/mes/erpTransferDirect/pda/selectOrderData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |pageNo|否|int|页码| |pageSize|否|int|每页条数| |billNo|否|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/selectOrderData?pageNo=1&pageSize=20' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 10, "list": [ { "billNo": "SCDD110260605001", "date": "2026-06-01", "inventoryCategory": "HEV", "entryCount": 1, "totalQty": 1500 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|生产订单号(仅 HEV/115 物料 .10)| |data.list[].date|string|单据日期| |data.list[].inventoryCategory|string|存货类别| |data.list[].entryCount|int|订单分录行数| |data.list[].totalQty|number|订单合计数量| --- ### 调拨页初始化 ##### 请求URL - ` /js/a/mes/erpTransferDirect/formInit ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 无(不再传 `moBillNo`,点新增直接进入填单页) ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/formInit' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "transferCategory": "3", "transferCategoryName": "外发调拨", "scanHint": "调拨数量通过扫描批次码累加,扫码前须已完成发货检", "materialList": [ { "materialNumber": "8.10.HEV.10.047696", "materialName": "HEV", "displayLabel": "8.10.HEV.10.047696(HEV)", "defaultUnitNumber": "Pcs", "units": [ { "unitNumber": "Pcs", "unitName": "个" } ] } ], "defaultSrcStockNumber": "1100105", "defaultDestStockNumber": "", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.transferCategoryName|string|固定「外发调拨」| |data.materialList[]|array|HEV / 115 可调拨物料(含单位)| |data.defaultSrcStockNumber|string|推荐默认调出仓库编码| |data.defaultDestStockNumber|string|推荐默认调入仓库编码(配置项)| |data.stockList[]|array|可用仓库列表| |data.scanHint|string|扫码累加数量说明| --- ### 选批号(选物料和调出仓库后调用) ##### 请求URL - ` /js/a/mes/erpTransferDirect/pda/lotOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |materialNumber|是|string|物料编码| |stockNumber|是|string|调出仓库编码| |stockName|否|string|仓库名称,仅提示用| |lotKeyword|否|string|批号关键字,传入则搜索| |pickQty|否|number|计划数量,用于推荐批号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/lotOptions?materialNumber=8.10.HEV.10.047696&stockNumber=1100105' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "materialNumber": "8.10.HEV.10.047696", "stockNumber": "1100105", "lots": [ { "lotNumber": "110260605001", "qty": 100, "qtyText": "100" } ], "suggestedLotNumber": "110260605001", "lotPickable": true, "lotHint": "共 1 条可用批号" } } ``` PDA:选中 `lots[].lotNumber` 作为提交 `lotNumber`。切换物料或调出仓后须重调。 --- ### 扫批次码(累加数量 + 发货检校验) ##### 请求URL - ` /js/a/mes/erpTransferDirect/batchScan ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |batchSn|是|string|批次码(扫码值)| |materialNumber|否|string|当前已选物料;传入时须与批次产线物料一致| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/batchScan?batchSn=20260804084909&materialNumber=8.10.HEV.10.047696' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "扫码成功,可累加数量 2", "data": { "batchSn": "20260804084909", "nums": 2, "qtyIncrement": 2, "materialNumber": "8.10.HEV.10.047696", "lotNumber": "110260605001", "batchStatus": "1", "inspected": true } } ``` PDA:`qty = qty + data.qtyIncrement`。须 `batchStatus=1`(已发货检合格)才允许累加。 --- ### 生产入库源行列表(兼容旧版,新增流程不再调用) ##### 请求URL - ` /js/a/mes/erpTransferDirect/pda/instockSourceData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |moBillNo|是|string|生产订单号| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/instockSourceData?moBillNo=SCDD110260605001' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "pageNo": 1, "pageSize": 20, "count": 1, "list": [ { "billNo": "SCRK110260605001", "entryId": "12345", "lotNumber": "110260605001", "realQty": 150 } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.pageNo / pageSize / count|—|分页字段,见「data 分页结构」| |data.list[].billNo|string|生产入库单号(SCRK)| |data.list[].entryId|string|生产入库分录内码| |data.list[].lotNumber|string|批号| |data.list[].realQty|number|入库数量| --- ### 仓位选项 ##### 请求URL - ` /js/a/mes/erpTransferDirect/pda/stockLocOptions ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |stockNumber|是|string|仓库编码(调出仓、调入仓各调一次)| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/stockLocOptions?stockNumber=1100105' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "required": true, "defaultLocNumber": "A", "locKey": "F100004", "locHint": "共 278 个仓位,数据来自 ERP 仓位值集", "locations": [ { "locNumber": "A", "locName": "A", "locKey": "F100004", "displayLabel": "A A" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.required|boolean|是否必须选择仓位| |data.defaultLocNumber|string|推荐默认仓位编码| |data.locHint|string|仓位加载提示| |data.locKey|string|仓位维度键(展示用;提交可不回传)| |data.locations[]|array|仓位列表,字段见「仓位选项 locations[]」| --- ### 仓库列表 ##### 请求URL - ` /js/a/mes/erpTransferDirect/stockList ` ##### 请求方式 - POST(也兼容 GET) ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |无|—|—|—| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/stockList' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "成功", "data": { "defaultStockNumber": "1100105", "defaultDestStockNumber": "", "stockHint": "共 5 个可用仓库", "stockList": [ { "stockNumber": "1100105", "stockName": "五金库" } ] } } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|提示信息| |data.defaultStockNumber|string|推荐默认调出仓库编码| |data.defaultDestStockNumber|string|推荐默认调入仓库编码(配置项)| |data.stockHint|string|仓库加载提示| |data.stockList[]|array|可用仓库列表| --- ### 提交调拨 ##### 请求URL - ` /js/a/mes/erpTransferDirect/submit ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |materialNumber|是|string|物料编码(HEV / 115)| |lotNumber|是|string|ERP 批号| |qty|是|number|调拨数量(扫码 qtyIncrement 合计)| |unitNumber|否|string|计量单位;不传则取物料默认单位| |srcStockNumber|是|string|调出仓库| |srcStockLocNumber|条件|string|调出仓库启用仓位时必填| |srcStockLocKey|否|string|调出仓位维度键,可选| |destStockNumber|是|string|调入仓库| |destStockLocNumber|条件|string|调入仓库启用仓位时必填| |destStockLocKey|否|string|调入仓位维度键,可选| |traySns|是|string|托盘码逗号拼接,如 `20260804084909,20260804085001`。成功后改为已发货并绑定调拨单号| |batchSns|否|string / array|兼容旧参数,与 traySns 合并去重| 不再传 `moBillNo` / `instockBillNo` / `instockEntryId`。 **Content-Type(二选一):** `application/x-www-form-urlencoded`(PDA 推荐)或 `application/json;charset=UTF-8` ##### 参数示例 ``` # PDA 表单 curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/submit' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --data-urlencode 'materialNumber=8.10.HEV.10.047696' \ --data-urlencode 'lotNumber=110260605001' \ --data-urlencode 'qty=2' \ --data-urlencode 'srcStockNumber=1100105' \ --data-urlencode 'srcStockLocNumber=A' \ --data-urlencode 'destStockNumber=1100217' \ --data-urlencode 'traySns=20260804084909,20260804085001' # JSON Body curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/submit' \ --header 'Content-Type: application/json;charset=UTF-8' \ --data '{"materialNumber":"8.10.HEV.10.047696","lotNumber":"110260605001","qty":2,"srcStockNumber":"1100105","srcStockLocNumber":"A","destStockNumber":"1100217","traySns":"20260804084909,20260804085001"}' ``` ##### 返回示例 ``` 成功 { "result": "true", "message": "直接调拨单保存成功,单号:ZJDB110260605001", "data": { "billNo": "ZJDB110260605001" } } ``` ``` 失败 { "result": "false", "message": "批次码 20260804084909 尚未发货检,不能调拨" } ``` ##### 返回字段说明 |字段路径|类型|中文说明| |:----|:-----|-----| |result|string|业务成功 `"true"` / 失败 `"false"`| |message|string|保存结果说明| |data.billNo|string|成功时返回,ERP 直接调拨单号(ZJDB)| --- ### 查看调拨单明细 ##### 请求URL - ` /js/a/mes/erpTransferDirect/pda/detailData ` ##### 请求方式 - POST ##### 参数 |参数名|必选|类型|说明| |:----|:---|:-----|-----| |billNo|是|string|直接调拨单号 ZJDB| ##### 参数示例 ``` curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/detailData?billNo=ZJDB110260605001' ```