模块:
ErpTransferDirectController(/mes/erpTransferDirect)
权限:mes:erpTransferDirect:view
服务地址示例:http://127.0.0.1:8980
只登录 MES,不直连金蝶;请求须带会话(Cookiejeesite.session.id或__sid+__ajax=json)。PDA 统一返回
CommonResp(result/message/data)。
提交接口支持 表单 POST 与 JSON Body 两种方式。与 PC「增加直接调拨单」一致:不关联生产订单。点新增直接进入填单页;调拨数量通过扫描批次码累加;扫码时校验是否已发货检合格。
| 字段 | 类型 | 说明 |
|---|---|---|
| result | string | "true" 业务成功 / "false" 业务失败 |
| message | string | 提示信息。成功时可空或为「成功」;失败时为原因,PDA 直接展示 |
| data | object / null | 业务数据。失败时也可能带部分字段(如扫码失败仍返回批次状态) |
列表类接口的 data 为分页结构:
| 字段 | 类型 | 说明 |
|---|---|---|
| data.pageNo | int | 当前页码 |
| data.pageSize | int | 每页条数 |
| data.count | long | 总记录数(ERP 游标式分页,末页可能为估算值) |
| data.list | array | 当前页数据行 |
① pda/listData 调拨单列表(模块首页)
↓ 点「新增」(无需选生产订单)
② formInit 物料、单位、仓库列表、默认仓
↓ 选调出仓库 / 调入仓库后
③ erpStockPda/stockLocOptions 查该仓库仓位(调出、调入各调一次)
或 erpTransferDirect/pda/stockLocOptions
↓ 选物料 + 调出仓库后
④ pda/lotOptions 查 ERP 即时库存可用批号
↓ 扫批次码(可多次,累加数量)
⑤ batchScan 校验已发货检,qty += qtyIncrement
↓ 填完仓库仓位、批号后
⑥ submit 提交;传 traySns(托盘码逗号拼接)
仓库列表:formInit 已返回 stockList,一般不必再调。若要单独刷新仓库,用接口 3。
发货检规则:
批次状态 batchStatus |
含义 | 可否扫码累加调拨数量 |
|---|---|---|
3 |
待装中(尚未生产入库) | 否 |
0 |
仓库中(含发货检 NG) | 否 |
1 |
合格(发货检 OK) | 是 |
2 |
已发货 | 否 |
模块首页。点某行可看明细(接口 8);点「新增」调接口 2。
请求URL: /js/a/mes/erpTransferDirect/pda/listData
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| pageNo | 否 | int | 页码,默认 1 |
| pageSize | 否 | int | 每页条数,默认 20 |
| billNoQuery | 否 | string | 调拨单号模糊查询 |
| materialNumberQuery | 否 | string | 物料编码。不传则 HEV+115;可传 8.10.HEV.10.047696 或 8.35.115.10.5003146600021 |
| documentStatusQuery | 否 | string | 单据状态:A 创建 / B 审核中 / C 已审核 / D 重新审核 |
参数示例:
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",
"date": "2026-06-05",
"documentStatus": "C",
"documentStatusName": "已审核",
"billTypeName": "直接调拨",
"seq": "1",
"materialNumber": "8.10.HEV.10.047696",
"materialName": "下壳体",
"qty": 100,
"unitName": "个",
"srcStockNumber": "1100105",
"srcStockName": "五金库",
"destStockNumber": "1100217",
"destStockName": "成品仓",
"lotNumber": "110260605001"
}
]
}
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" / "false" |
| message | string | 提示信息 |
| data.pageNo | int | 当前页码 |
| data.pageSize | int | 每页条数 |
| data.count | long | 总记录数(游标估算) |
| data.list[] | array | 调拨明细分录(一行一条) |
| data.list[].billNo | string | 直接调拨单号(ZJDB),点行看明细时回传 |
| data.list[].date | string | 调拨日期,yyyy-MM-dd |
| data.list[].documentStatus | string | 单据状态码:A 创建 / B 审核中 / C 已审核 / D 重新审核 |
| data.list[].documentStatusName | string | 单据状态中文 |
| data.list[].billTypeNumber | string | 单据类型编码 |
| data.list[].billTypeName | string | 单据类型名称 |
| data.list[].stockOrgNumber | string | 调入库存组织编码 |
| data.list[].stockOrgName | string | 调入库存组织名称 |
| data.list[].seq | string | 分录行号 |
| data.list[].materialNumber | string | 物料编码 |
| data.list[].materialName | string | 物料名称 |
| data.list[].qty | number | 调拨数量 |
| data.list[].unitName | string | 单位名称 |
| data.list[].srcStockNumber | string | 调出仓库编码 |
| data.list[].srcStockName | string | 调出仓库名称 |
| data.list[].destStockNumber | string | 调入仓库编码 |
| data.list[].destStockName | string | 调入仓库名称 |
| data.list[].lotNumber | string | ERP 批号 |
| data.list[].note | string | 备注,可空 |
| data.list[].entryId | string | 分录内码 |
| data.list[].id / fid | string | ERP 单据内码,一般不展示 |
下一步: 点「新增」→ 接口 2;点某行 → 接口 8,传 billNo
点「新增」后调用。无请求参数,不传生产订单号。一次返回可调拨物料(含单位)、仓库列表、默认调出/调入仓。
请求URL: /js/a/mes/erpTransferDirect/formInit
请求方式: POST(也兼容 GET)
参数: 无
参数示例:
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": "个", "displayLabel": "个" }
]
},
{
"materialNumber": "8.35.115.10.5003146600021",
"materialName": "115",
"displayLabel": "8.35.115.10.5003146600021(115)",
"defaultUnitNumber": "Pcs",
"units": [
{ "unitNumber": "Pcs", "unitName": "个", "displayLabel": "个" }
]
}
],
"defaultSrcStockNumber": "1100105",
"defaultDestStockNumber": "",
"stockList": [
{
"stockNumber": "1100105",
"stockName": "五金库",
"displayLabel": "1100105 五金库"
}
]
}
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" / "false" |
| message | string | 提示信息 |
| data.transferCategory | string | 调拨类别编码,当前固定 3(外发调拨),展示用,提交不必回传 |
| data.transferCategoryName | string | 调拨类别中文,固定「外发调拨」,页面标题/标签用 |
| data.scanHint | string | 扫码说明文案,可展示在数量输入旁 |
| data.defaultSrcStockNumber | string | 推荐默认调出仓库编码。进入页面时预选该仓,再调接口 4 查仓位 |
| data.defaultDestStockNumber | string | 推荐默认调入仓库编码。空字符串表示未配置,须用户自选。不能与调出仓相同 |
| data.materialList | array | 可调拨物料,目前 HEV、115 两条。下拉数据源 |
| data.materialList[].materialNumber | string | 物料编码。提交 materialNumber、扫码 materialNumber 用此值 |
| data.materialList[].materialName | string | 简称:HEV 或 115 |
| data.materialList[].displayLabel | string | 下拉展示文本,如 8.10.HEV.10.047696(HEV) |
| data.materialList[].defaultUnitNumber | string | 该物料默认单位编码。提交 unitNumber 可直接用此值;无单位时可能缺此字段 |
| data.materialList[].units | array | 该物料计量单位列表(来自 ERP) |
| data.materialList[].units[].unitNumber | string | 单位编码,提交 unitNumber 用此值 |
| data.materialList[].units[].unitName | string | 单位名称,如「个」 |
| data.materialList[].units[].displayLabel | string | 单位下拉展示文本,优先名称 |
| data.stockList | array | 可用仓库列表。调出仓、调入仓共用同一份,用户各选一次 |
| data.stockList[].stockNumber | string | 仓库编码。提交 srcStockNumber / destStockNumber,以及查仓位的 stockNumber |
| data.stockList[].stockName | string | 仓库名称 |
| data.stockList[].displayLabel | string | 仓库下拉展示文本,一般为「编码 + 空格 + 名称」 |
页面用法:
transferCategoryName,不可改。materialList,选中后记录 materialNumber、defaultUnitNumber。stockList;调出仓预选 defaultSrcStockNumber,调入仓预选 defaultDestStockNumber(有值时)。stockNumber 调接口 4,加载调出仓位。lotNumber。下一步: 选仓库 → 接口 4;选物料+调出仓 → 接口 5;扫批次码 → 接口 6;填完 → 接口 7
formInit 已含 stockList,一般不用再调。需要单独刷新仓库时用本接口。
推荐(来料检 / 生产入库 / 直接调拨共用):
请求URL: /js/a/mes/erpStockPda/stockList
本模块兼容别名: /js/a/mes/erpTransferDirect/stockList(调拨多返回默认调入仓)
请求方式: POST(也兼容 GET)
权限: mes:erpTransferDirect:view(公共接口也可用来料检或生产入库的 view)
参数: 无
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpStockPda/stockList'
或本模块:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/stockList'
返回示例(本模块 erpTransferDirect/stockList):
{
"result": "true",
"message": "成功",
"data": {
"defaultStockNumber": "1100105",
"defaultSrcStockNumber": "1100105",
"defaultDestStockNumber": "",
"stockHint": "共 5 个可用仓库",
"stockList": [
{
"stockNumber": "1100105",
"stockName": "五金库",
"displayLabel": "1100105 五金库"
}
]
}
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" / "false" |
| message | string | 提示信息 |
| data.stockList | array | 可用仓库,字段同接口 2 的 stockList[] |
| data.stockList[].stockNumber | string | 仓库编码 |
| data.stockList[].stockName | string | 仓库名称 |
| data.stockList[].displayLabel | string | 下拉展示文本 |
| data.defaultStockNumber | string | 通用默认仓库编码(与默认调出仓相同) |
| data.defaultSrcStockNumber | string | 推荐调出仓库编码(仅本模块 erpTransferDirect/stockList 有) |
| data.defaultDestStockNumber | string | 推荐调入仓库编码(仅本模块有;空表示未配置) |
| data.stockHint | string | 加载提示,如「共 5 个可用仓库」;失败时提示检查 ERP 连接 |
公共接口 erpStockPda/stockList 没有 defaultSrcStockNumber / defaultDestStockNumber,只有 defaultStockNumber、stockHint、stockList。
PDA 处理: 用 stockList 刷新调出/调入仓库下拉。切换仓库后必须重新调接口 4。
用户选定或切换调出仓库、调入仓库后,用对应 stockNumber 各调一次。
formInit 不含仓位列表。
推荐(共用):
请求URL: /js/a/mes/erpStockPda/stockLocOptions
本模块兼容别名:
/js/a/mes/erpTransferDirect/pda/stockLocOptions/js/a/mes/erpTransferDirect/stockLocOptions请求方式: POST(也兼容 GET)
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| stockNumber | 是 | string | 仓库编码,来自 stockList[].stockNumber |
参数示例:
调出仓:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpStockPda/stockLocOptions?stockNumber=1100105'
调入仓:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpStockPda/stockLocOptions?stockNumber=1100217'
返回示例(仓库启用仓位):
{
"result": "true",
"message": "成功",
"data": {
"stockNumber": "1100105",
"required": true,
"defaultLocNumber": "A",
"locKey": "F100004",
"locKeys": ["F100004"],
"locHint": "共 278 个仓位,数据来自 ERP 仓位值集",
"locations": [
{
"locNumber": "A",
"locName": "A",
"locKey": "F100004",
"locEntryId": "123",
"displayLabel": "A"
}
]
}
}
返回示例(仓库未启用仓位):
{
"result": "true",
"message": "成功",
"data": {
"stockNumber": "1100217",
"required": false,
"defaultLocNumber": "",
"locHint": "该仓库未启用仓位或未配置仓位值集",
"locations": []
}
}
失败示例:
{
"result": "false",
"message": "仓库编码不能为空",
"data": null
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" / "false" |
| message | string | 成功为「成功」;未传仓库为「仓库编码不能为空」 |
| data.stockNumber | string | 本次查询的仓库编码,与请求一致 |
| data.required | boolean | 是否必须选仓位。true:下拉必选,提交必须带仓位编码;false:可不选,提交不传仓位 |
| data.defaultLocNumber | string | 推荐默认仓位编码,进入页/切仓后可预选;无则空 |
| data.locHint | string | 提示文案,可显示在仓位下拉下方 |
| data.locKey | string | 该仓库主仓位维度键(如 F100004),仅展示/日志用。提交可不传,MES 会按仓库+仓位编码自行解析 |
| data.locKeys | array | 该仓库全部维度键。多维度仓库才有;可忽略 |
| data.locations | array | 仓位下拉数据源。required=false 时为空数组 |
| data.locations[].locNumber | string | 仓位编码。提交调出仓用 srcStockLocNumber,调入仓用 destStockLocNumber |
| data.locations[].locName | string | 仓位名称 |
| data.locations[].displayLabel | string | 下拉展示文本 |
| data.locations[].locKey | string | 该仓位维度键,展示用,提交可不回传 |
| data.locations[].locEntryId | string | 仓位值集分录内码,PDA 不用 |
PDA 处理:
| 步骤 | 说明 |
|---|---|
| 1 | 选中调出仓库 srcStockNumber 后,请求本接口,结果赋给调出仓位下拉 |
| 2 | 选中调入仓库 destStockNumber 后,再请求一次,结果赋给调入仓位下拉 |
| 3 | required=true 时仓位必选,默认选 defaultLocNumber |
| 4 | required=false 时仓位可隐藏或显示「无库位」,提交不传对应 Loc 字段 |
| 5 | 切换仓库必须重新调用,不要沿用上一仓库的仓位列表 |
| 6 | 不要写死 locKey。提交时 srcStockLocKey / destStockLocKey 可选 |
提交对应关系:
| 页面 | 仓库字段 | 仓位字段 | 仓位来源 |
|---|---|---|---|
| 调出 | srcStockNumber |
srcStockLocNumber |
调出仓这次 locations[].locNumber |
| 调入 | destStockNumber |
destStockLocNumber |
调入仓这次 locations[].locNumber |
用户选定 物料 和 调出仓库 后调用。查 ERP 即时库存中该物料在该仓的可用批号,供下拉选择。
切换物料或调出仓库后须重新调用。
请求URL: /js/a/mes/erpTransferDirect/pda/lotOptions
请求方式: POST(也兼容 GET)
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| materialNumber | 是 | string | 物料编码,来自 materialList[].materialNumber |
| stockNumber | 是 | string | 调出仓库编码,来自 stockList[].stockNumber |
| stockName | 否 | string | 仓库名称,仅用于缺批号时的提示文案 |
| lotKeyword | 否 | string | 批号关键字。传入则按关键字搜索,不传则返回该仓全部可用批号 |
| pickQty | 否 | number | 计划调拨数量,用于推荐 suggestedLotNumber |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/lotOptions?materialNumber=8.10.HEV.10.047696&stockNumber=1100105'
带关键字搜索:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/lotOptions?materialNumber=8.10.HEV.10.047696&stockNumber=1100105&lotKeyword=11026'
返回示例(有可用批号):
{
"result": "true",
"message": "成功",
"data": {
"materialNumber": "8.10.HEV.10.047696",
"stockNumber": "1100105",
"lots": [
{
"lotNumber": "110260605001",
"qty": 100,
"qtyText": "100",
"stockNumber": "1100105",
"stockName": "五金库"
}
],
"suggestedLotNumber": "110260605001",
"lotPickable": true,
"lotHint": "共 1 条可用批号"
}
}
返回示例(无批号):
{
"result": "true",
"message": "成功",
"data": {
"materialNumber": "8.10.HEV.10.047696",
"stockNumber": "1100105",
"lots": [],
"suggestedLotNumber": "",
"lotPickable": false,
"lotHint": "未查到符合条件的批号库存"
}
}
失败示例:
{
"result": "false",
"message": "请先选择调出仓库",
"data": null
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" / "false"。未传物料或调出仓为 "false" |
| message | string | 成功为「成功」;失败为「请先选择物料编码」或「请先选择调出仓库」 |
| data.materialNumber | string | 本次查询的物料编码 |
| data.stockNumber | string | 本次查询的调出仓库编码 |
| data.lots | array | 可用批号列表,绑定下拉 |
| data.lots[].lotNumber | string | ERP 批号。提交 lotNumber 用此值 |
| data.lots[].qty | number | 该批号在该仓可用库存 |
| data.lots[].qtyText | string | 可用库存展示文本 |
| data.lots[].stockNumber | string | 仓库编码 |
| data.lots[].stockName | string | 仓库名称 |
| data.suggestedLotNumber | string | 推荐批号。有 pickQty 时优先选够量的最小批号;可预选 |
| data.lotPickable | boolean | 是否有可选批号。false 时下拉为空,展示 lotHint |
| data.lotHint | string | 提示文案,显示在批号下拉下方 |
PDA 处理:
lots[],展示 lotNumber + qtyText。suggestedLotNumber 时可预选。lotNumber,提交时回传。失败 message:
| message | 原因 |
|---|---|
| 请先选择物料编码 | 未传 materialNumber |
| 请先选择调出仓库 | 未传 stockNumber |
每扫一次调一次。成功则 qty = qty + data.qtyIncrement。
同一张调拨单应扫同一物料、同一 ERP 批号;可用返回的 materialNumber / lotNumber 自动带出。
请求URL: /js/a/mes/erpTransferDirect/batchScan
请求方式: POST(也兼容 GET)
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| batchSn | 是 | string | 批次码(扫码值) |
| materialNumber | 否 | string | 当前已选物料编码。传入时须与该批次产线物料一致,用于防止 HEV/115 扫串 |
参数示例:
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,
"lineSn": "HEVXT",
"materialNumber": "8.10.HEV.10.047696",
"materialName": "HEV",
"lotNumber": "110260605001",
"batchStatus": "1",
"batchStatusName": "合格",
"inspected": true
}
}
返回示例(失败,尚未发货检):
{
"result": "false",
"message": "批次码 20260804084909 尚未发货检,不能调拨",
"data": {
"batchSn": "20260804084909",
"nums": 2,
"qtyIncrement": 2,
"lineSn": "HEVXT",
"materialNumber": "8.10.HEV.10.047696",
"materialName": "HEV",
"lotNumber": "",
"batchStatus": "0",
"batchStatusName": "仓库中",
"inspected": false
}
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" 允许累加数量 / "false" 不允许 |
| message | string | 成功含累加数量;失败为原因,PDA 弹窗展示 |
| data.batchSn | string | 本次扫到的批次码 |
| data.nums | long | 该批次已绑定工件数量 |
| data.qtyIncrement | long | 本次应累加的调拨数量,与 nums 相同。qty += qtyIncrement |
| data.lineSn | string | 产线编号,如 HEVXT、115XT |
| data.materialNumber | string | 按产线解析的物料编码。第一枪可用来自动选中物料 |
| data.materialName | string | HEV 或 115 |
| data.lotNumber | string | 生产入库回写的 ERP 批号。有值时自动填提交用的 lotNumber;可能为空 |
| data.batchStatus | string | 批次状态:3 待装中 / 0 仓库中 / 1 合格 / 2 已发货 |
| data.batchStatusName | string | 状态中文(字典 mes_batch_sn_status) |
| data.inspected | boolean | 是否已发货检合格。仅 true 时 result 才为 "true" |
PDA 处理:
result != "true":提示 message,数量不加。result == "true":记录该 batchSn(提交 traySns 用逗号拼接),qty += qtyIncrement。materialNumber 选中。lotNumber 非空且页面批号为空,填入批号。失败 message:
| message | 原因 |
|---|---|
| 批次码不能为空 | 未传 batchSn |
| 未找到该 MES 批次码 | 批次码无效 |
| 尚未生产入库,不能调拨 | batchStatus=3 待装中 |
| 尚未发货检,不能调拨 | batchStatus 不是 1(含仓库中、发货检 NG) |
| 已发货,不能调拨 | batchStatus=2 |
| 绑定数量为 0,不能调拨 | nums<=0 |
| 与当前选择物料不一致 | 传入的 materialNumber 与批次产线物料不符 |
请求URL: /js/a/mes/erpTransferDirect/submit
请求方式: POST
Content-Type(二选一):
| 方式 | Content-Type | 说明 |
|---|---|---|
| PDA 推荐 | application/x-www-form-urlencoded |
表单参数 |
| 调试/脚本 | application/json;charset=UTF-8 |
整包 JSON Body |
请求参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| materialNumber | 是 | string | 物料编码,来自 materialList[].materialNumber 或扫码返回值 |
| lotNumber | 是 | string | ERP 批号,优先用扫码返回的 lotNumber |
| qty | 是 | number | 调拨数量 = 各次扫码 qtyIncrement 合计,且不超过该批号在调出仓可用量 |
| unitNumber | 否 | string | 计量单位编码,来自 defaultUnitNumber 或 units[].unitNumber。不传则后台取物料默认单位 |
| srcStockNumber | 是 | string | 调出仓库编码 |
| srcStockLocNumber | 条件 | string | 调出仓位编码。调出仓 required=true 时必填 |
| srcStockLocKey | 否 | string | 调出仓位维度键,可选,不传由后台解析 |
| destStockNumber | 是 | string | 调入仓库编码,不能与调出仓相同 |
| destStockLocNumber | 条件 | string | 调入仓位编码。调入仓 required=true 时必填 |
| destStockLocKey | 否 | string | 调入仓位维度键,可选 |
| traySns | 是 | string | 托盘码(MES 批次码)逗号拼接,如 20260804084909,20260804085001。提交成功后将这些托盘改为已发货(batchStatus=2),并绑定本次调拨单号 |
| batchSns | 否 | string / array | 兼容旧参数,与 traySns 合并去重。表单逗号分隔,JSON 可用数组 |
不再传
moBillNo/instockBillNo/instockEntryId。
提交成功后:ERP 生成直接调拨单;同时把traySns中每个托盘的batch_status改为2(已发货),erp_transfer_bill_no写入本次billNo。
参数示例:
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 'unitNumber=Pcs' \
--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,"unitNumber":"Pcs","srcStockNumber":"1100105","srcStockLocNumber":"A","destStockNumber":"1100217","traySns":"20260804084909,20260804085001"}'
返回示例(成功):
{
"result": "true",
"message": "直接调拨单保存成功,单号:ZJDB110260605001",
"data": {
"billNo": "ZJDB110260605001"
}
}
返回示例(失败):
{
"result": "false",
"message": "批次码 20260804084909 尚未发货检,不能调拨",
"data": null
}
返回字段说明:
| 字段路径 | 类型 | 说明 |
|---|---|---|
| result | string | "true" 保存成功 / "false" 失败 |
| message | string | 成功含 ERP 单号;失败为原因,PDA 展示 |
| data | object | 失败时一般为 null |
| data.billNo | string | 成功时 ERP 直接调拨单号(ZJDB) |
常见失败 message:
| message | 原因 |
|---|---|
| 请选择物料编码 | 未传 materialNumber |
| 物料 xxx 不在 HEV/115 调拨范围内 | 物料不在配置清单 |
| 请选择批号 | 未传 lotNumber |
| 调拨数量必须大于 0 | qty 空或 ≤0 |
| 请选择调出仓库 / 请选择调入仓库 | 仓库未选 |
| 调入仓库不能与调出仓库相同 | 两仓相同 |
| 所选批号在调出仓库无可用库存 | ERP 即时库存无该批号 |
| 调拨数量不能超过批号可用库存 n | qty 大于可用量 |
| 调出仓库:… / 调入仓库:… | 仓位校验失败(启用仓位却未选等) |
| 请选择计量单位 | 未传单位且 ERP 也未加载到默认单位 |
| 尚未发货检 / 已发货 / 物料不一致 | 传入了 traySns 且复核未通过 |
传 traySns 时额外规则:
batchStatus=1)materialNumber / lotNumber,用扫码结果回填qty,用各托盘 nums 合计2),并写入调拨单号 erp_transfer_bill_no列表点某行调用。
请求URL: /js/a/mes/erpTransferDirect/pda/detailData
请求方式: POST
参数:
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
| billNo | 是 | string | 直接调拨单号 ZJDB,来自列表 list[].billNo |
参数示例:
curl --location --request POST 'http://127.0.0.1:8980/js/a/mes/erpTransferDirect/pda/detailData?billNo=ZJDB110260605001'
返回示例:
{
"result": "true",
"message": "成功",
"data": {
"pageNo": 1,
"pageSize": 20,
"count": 1,
"list": [
{
"seq": "1",
"materialNumber": "8.10.HEV.10.047696",
"materialName": "下壳体",
"qty": 100,
"unitName": "个",
"srcStockNumber": "1100105",
"srcStockName": "五金库",
"destStockNumber": "1100217",
"destStockName": "成品仓",
"lotNumber": "110260605001",
"documentStatusName": "已审核",
"date": "2026-06-05"
}
]
}
}
返回字段说明: 分页字段同接口 1;list[] 字段与接口 1 的 list[] 相同(该单全部分录)。展示建议:行号、物料、数量、单位、调出仓、调入仓、批号。
| 用途 | 推荐 URL | 何时调用 |
|---|---|---|
| 物料 + 仓库(进新增页) | POST /js/a/mes/erpTransferDirect/formInit |
点新增一次 |
| 只刷新仓库 | POST /js/a/mes/erpStockPda/stockList |
可选 |
| 查仓位 | POST /js/a/mes/erpStockPda/stockLocOptions?stockNumber= |
调出仓、调入仓各一次;切换仓库再调 |
| 选批号 | POST /js/a/mes/erpTransferDirect/pda/lotOptions |
选物料 + 调出仓库后;切换后再调 |
| 扫码加数量 | POST /js/a/mes/erpTransferDirect/batchScan |
每扫一枪 |
| 提交 | POST /js/a/mes/erpTransferDirect/submit |
填完提交,traySns 逗号拼接托盘码 |
仓位规则:data.required=true 必须选仓位并提交对应 *StockLocNumber;false 不传仓位。不要写死 locKey。
| 接口 | 说明 |
|---|---|
pda/selectOrderData |
旧:选生产订单 |
pda/instockSourceData |
旧:按生产订单查入库源行 |