运输单导入
通过运输单导入接口,可以将不同外部系统如ERP系统、WMS系统的大量运输单进行批量的导入。
| 版本号 | 文档 | 说明 |
|---|---|---|
| 0.1 | 当前版本文档 |
oTMS同时在生产环境和测试环境中提供Web Service接口,其中测试环境用于集成测试。两种环境下都需要由oTMS系统管理员分配API帐号密码后方可使用。
注意: 请合理地调用公共接口。如果发现存在异常调用或者对我们系统性能造成影响等情况,会对API账号的调用进行限制,甚至停用。
目前对该接口的调用限制为每个公司每秒最多10个请求
注意: 请合理地调用公共接口。如果发现存在异常调用或者对我们系统性能造成影响等情况,会对API账号的调用进行限制,甚至停用。
目前对该接口的调用限制为每个公司每秒最多10个请求
目前对该接口的调用限制为每个公司每秒最多10个请求
公共参数
| 环境 | HTTP请求方法 | HTTPS请求地址 | 请求主体MIME类型 | 响应主体MIME类型 |
|---|---|---|---|---|
| 正式环境 | PUT | https://login.otms.cn/ws/jobSheetImport | application/xml | application/xml |
| 沙箱环境 | PUT | https://demo.otms.cn/ws/jobSheetImport | application/xml | application/xml |
请求参数
| 字段名 | 位置 | 是否必填 | 描述 | Schema |
|---|---|---|---|---|
| body | body | 是 | 运输单导入请求 | JobSheetImportRequest |
| Authorization | header | Basic Authorization。如果不为空,则优先使用该值作身份认证。否则使用请求报文中的用户名与密码 | string |
响应参数
| 状态码 | 描述 | 响应模型 |
|---|---|---|
| 200 | successful operation | JobSheetImportResponse |
ImportedCargoDetails
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| totalQuantity | integer (int32) | 否 | 所有运输单位的数量,不能为负数 | |
| totalWeight | number | 否 | 所有运输货物的总重量,单位为公斤,不能为负数 | |
| totalVolume | number | 否 | 所有运输货物的总体积,单位为立方米,不能为负数 | |
| totalInsurance | number | 否 | 所有运输货物的总投保价值,不能为负数 | |
| cargoType | integer (int32) | 否 | 货物类型,考虑到oTMS用户存在共识的运输订单交易的性质。包括如下常量: 1 - 普通货物 2 - 温控货物 3 - 危险品 4 - 危险品和温控货物 |
|
| packageType | string | 否 | 包装类型,oTMS根据运输用途将货物外包装分为4种,考虑到oTMS用户存在共识的运输订单交易的性质,如果订单包括不同的包装类型请用最高的那个。包括如下常量: A - 散箱,可堆叠,人工装卸货。已有的卡车容量可以被充分利用,运输提供商不需要特别的装货设备 B - 托盘或者木箱,可堆叠,需叉车装卸货。通常卡车利用率高,可以双重叠加托盘,运输提供商需要叉车装卸货 C - 托盘,木箱或不规则形状,不可堆叠,需叉车装卸货。卡车不能被充分利用,建议货物各方根据LDM而不是CBM/MT来协定零担价格 D - 不允许配货,包车运输。这些货主创建的只能整车收费 (根据卡车尺寸付款) 的订单无论大小都是整车装运 E - 保温箱,可堆叠,人工装卸货 |
ImportedContainer
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| containerType | string | 否 | 箱型要求 | |
| containerSize | number | 否 | 尺寸要求 |
ImportedCustomFields
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| customText1 | string | 否 | 自定义文本字段1 | |
| customText2 | string | 否 | 自定义文本字段2 | |
| customText3 | string | 否 | 自定义文本字段3 | |
| customText4 | string | 否 | 自定义文本字段4 | |
| customText5 | string | 否 | 自定义文本字段5 | |
| customText6 | string | 否 | 自定义文本字段6 | |
| customText7 | string | 否 | 自定义文本字段7 | |
| customText8 | string | 否 | 自定义文本字段8 | |
| customText9 | string | 否 | 自定义文本字段9 | |
| customText10 | string | 否 | 自定义文本字段10 | |
| customText11 | string | 否 | 自定义文本字段11 | |
| customText12 | string | 否 | 自定义文本字段12 | |
| customText13 | string | 否 | 自定义文本字段13 | |
| customText14 | string | 否 | 自定义文本字段14 | |
| customText15 | string | 否 | 自定义文本字段15 | |
| customText16 | string | 否 | 自定义文本字段16 | |
| customText17 | string | 否 | 自定义文本字段17 | |
| customText18 | string | 否 | 自定义文本字段18 | |
| customText19 | string | 否 | 自定义文本字段19 | |
| customText20 | string | 否 | 自定义文本字段20 | |
| customText21 | string | 否 | 自定义文本字段21 | |
| customText22 | string | 否 | 自定义文本字段22 | |
| customText23 | string | 否 | 自定义文本字段23 | |
| customText24 | string | 否 | 自定义文本字段24 | |
| customText25 | string | 否 | 自定义文本字段25 | |
| customText26 | string | 否 | 自定义文本字段26 | |
| customText27 | string | 否 | 自定义文本字段27 | |
| customText28 | string | 否 | 自定义文本字段28 | |
| customText29 | string | 否 | 自定义文本字段29 | |
| customText30 | string | 否 | 自定义文本字段30 | |
| customText31 | string | 否 | 自定义文本字段31 | |
| customText32 | string | 否 | 自定义文本字段32 | |
| customText33 | string | 否 | 自定义文本字段33 | |
| customText34 | string | 否 | 自定义文本字段34 | |
| customText35 | string | 否 | 自定义文本字段35 | |
| customText36 | string | 否 | 自定义文本字段36 | |
| customText37 | string | 否 | 自定义文本字段37 | |
| customText38 | string | 否 | 自定义文本字段38 | |
| customText39 | string | 否 | 自定义文本字段39 | |
| customText40 | string | 否 | 自定义文本字段40 | |
| customText41 | string | 否 | 自定义文本字段41 | |
| customText42 | string | 否 | 自定义文本字段42 | |
| customText43 | string | 否 | 自定义文本字段43 | |
| customText44 | string | 否 | 自定义文本字段44 | |
| customText45 | string | 否 | 自定义文本字段45 | |
| customText46 | string | 否 | 自定义文本字段46 | |
| customText47 | string | 否 | 自定义文本字段47 | |
| customText48 | string | 否 | 自定义文本字段48 | |
| customText49 | string | 否 | 自定义文本字段49 | |
| customText50 | string | 否 | 自定义文本字段50 | |
| customText51 | string | 否 | 自定义文本字段51 | |
| customText52 | string | 否 | 自定义文本字段52 | |
| customText53 | string | 否 | 自定义文本字段53 | |
| customText54 | string | 否 | 自定义文本字段54 | |
| customText55 | string | 否 | 自定义文本字段55 | |
| customText56 | string | 否 | 自定义文本字段56 | |
| customText57 | string | 否 | 自定义文本字段57 | |
| customText58 | string | 否 | 自定义文本字段58 | |
| customText59 | string | 否 | 自定义文本字段59 | |
| customText60 | string | 否 | 自定义文本字段60 | |
| customText61 | string | 否 | 自定义文本字段61 | |
| customText62 | string | 否 | 自定义文本字段62 | |
| customText63 | string | 否 | 自定义文本字段63 | |
| customText64 | string | 否 | 自定义文本字段64 | |
| customText65 | string | 否 | 自定义文本字段65 | |
| customText66 | string | 否 | 自定义文本字段66 | |
| customText67 | string | 否 | 自定义文本字段67 | |
| customText68 | string | 否 | 自定义文本字段68 | |
| customText69 | string | 否 | 自定义文本字段69 | |
| customText70 | string | 否 | 自定义文本字段70 | |
| customText71 | string | 否 | 自定义文本字段71 | |
| customText72 | string | 否 | 自定义文本字段72 | |
| customText73 | string | 否 | 自定义文本字段73 | |
| customText74 | string | 否 | 自定义文本字段74 | |
| customText75 | string | 否 | 自定义文本字段75 | |
| customText76 | string | 否 | 自定义文本字段76 | |
| customText77 | string | 否 | 自定义文本字段77 | |
| customText78 | string | 否 | 自定义文本字段78 | |
| customText79 | string | 否 | 自定义文本字段79 | |
| customText80 | string | 否 | 自定义文本字段80 | |
| customNum1 | number | 否 | 自定义小数字段1 -- 精确到18位数、6位小数 | |
| customNum2 | number | 否 | 自定义小数字段2 -- 精确到18位数、6位小数 | |
| customNum3 | number | 否 | 自定义小数字段3 -- 精确到18位数、6位小数 | |
| customNum4 | number | 否 | 自定义小数字段4 -- 精确到18位数、6位小数 | |
| customNum5 | number | 否 | 自定义小数字段5 -- 精确到18位数、6位小数 | |
| customNum6 | number | 否 | 自定义小数字段6 -- 精确到18位数、6位小数 | |
| customNum7 | number | 否 | 自定义小数字段7 -- 精确到18位数、6位小数 | |
| customNum8 | number | 否 | 自定义小数字段8 -- 精确到18位数、6位小数 | |
| customNum9 | number | 否 | 自定义小数字段9 -- 精确到18位数、6位小数 | |
| customNum10 | number | 否 | 自定义小数字段10 -- 精确到18位数、6位小数 | |
| customEnum1 | string | 否 | 自定义字段中定义并激活的枚举变量1的逻辑名 | |
| customEnum2 | string | 否 | 自定义字段中定义并激活的枚举变量2的逻辑名 | |
| customEnum3 | string | 否 | 自定义字段中定义并激活的枚举变量3的逻辑名 | |
| customEnum4 | string | 否 | 自定义字段中定义并激活的枚举变量4的逻辑名 | |
| customEnum5 | string | 否 | 自定义字段中定义并激活的枚举变量5的逻辑名 | |
| customEnum6 | string | 否 | 自定义字段中定义并激活的枚举变量6的逻辑名 | |
| customEnum7 | string | 否 | 自定义字段中定义并激活的枚举变量7的逻辑名 | |
| customEnum8 | string | 否 | 自定义字段中定义并激活的枚举变量8的逻辑名 | |
| customEnum9 | string | 否 | 自定义字段中定义并激活的枚举变量9的逻辑名 | |
| customEnum10 | string | 否 | 自定义字段中定义并激活的枚举变量10的逻辑名 |
ImportedJobSheet
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| sequence | integer (int32) | 是 | 序列数 | |
| clientCode | string | 否 | oTMS线下客户公司代码 (承运商帐户适用) | |
| clientReferenceNumber | string | 否 | 调用的系统订单标识符 | |
| branch | string | 否 | 地区设置中的地区名称 | |
| externalShipmentID | string | 否 | 运输单的外部单号,全局唯一 | |
| cargoDetails | ImportedCargoDetails | 是 | 包括工作单中的尺寸等货物具体参数 | |
| transportMode | ImportedTransportMode | 是 | 包括工作单中的货运信息 | |
| jobSheetOrders | array[ImportedJobSheetOrder] | 是 | 待导入运输单的订单集合 | |
| vendorCode | string | 否 | 承运商公司代码 (自动分配) | |
| cost | number | 否 | 运输单总价 (自动分配) | |
| autoDispatch | boolean | 是 | 是否需对运输单进行自动分配 | |
| applyTariffType | string | 否 | 运单匹配价格文件方式 | |
| customFields | ImportedCustomFields | 否 | 自定义字段。这适用于启用并且正确配置了自定义字段的公司。 | |
| container | ImportedContainer | 否 | 海运订单货柜要求 | |
| transportDistance | number | 否 | 运输距离 |
ImportedJobSheetOrder
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| clientCode | string | 否 | oTMS线下客户公司代码 (承运商帐户适用) | |
| clientReferenceNumber | string | 否 | 调用的系统订单标识符 | |
| orderNumber | string | 否 | 内部系统的唯一订单号 | |
| erpNumber | string | 否 | 外部系统的唯一的订单号,与orderNumber二选一,优先 | |
| sequence | integer (int32) | 是 | 订单的顺序编号 |
ImportedTransportMode
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| transportType | string | 否 | 货物运输类型,包括如下常量: FTL - 整车 LTL - 零担 AIR - 空运 EXPRESS - 快递 RAIL - 铁路 WATER - 水运 |
|
| truckType | string | 否 | 必需的卡车类型,包括如下常量: 0 - 敞篷车 1 - 厢式车 2 - 任意 3 - 轿运车 4 - 油罐车 5 - 飞翼车 6 - 高栏车 7 - 平板车 8 - 罐车 9 - 冷藏车 |
|
| transportRemarks | string | 否 | 运输模式的备注 | |
| loadingMeter | integer (int32) | 否 | 卡车的装载米数 | |
| truckLength | number | 否 | 车长。如果存在,必须从已经定义好的值中选择,按公司分别设置。oTMS定义了全局支持的车长,如果车长不能被oTMS匹配到,会返回错误代码1006。 | |
| truckCbmCapacity | number | 否 | 卡车装载 (立方米) 。如果存在,必须从已经定义好的值中选择,按车长对应装载 (立方米) 。oTMS定义了全局支持的车长和对应的装载 (吨/立方米) ,如果装载 (立方米) 不能被 oTMS 匹配到,会返回错误代码1006。 | |
| truckMtCapacity | number | 否 | 卡车装载 (吨) 。如果存在,必须从已经定义好的值中选择,按车长对应装载 (吨) 。oTMS定义了全局支持的车长和对应的装载 (吨/立方米) ,如果装载 (吨) 不能被oTMS匹配到,会返回错误代码1007。 |
JobSheetImportRequest
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| version | string | 是 | 请求的版本号。当前版本号为0.1 | |
| login | string | 否 | 用户名。用于 API 调用者身份认证。如果请求头中的Authorization不为空,则该值会被忽略。 | |
| password | string | 否 | 密码。用于 API 调用者身份认证。如果请求头中的Authorization不为空,则该值会被忽略。 | |
| jobSheets | array[ImportedJobSheet] | 是 | 待导入的运输单列表。一次请求最多可以导入100条运输单 |
JobSheetImportResponse
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| version | string | 是 | 响应版本号 | |
| responseCode | string | 否 | 全局的反馈代码 | |
| jobSheets | array[JobSheetResponse] | 否 | 处理的运输单列表 |
JobSheetOrderResponse
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| orderNumber | string | 否 | 订单号码 | |
| erpNumber | string | 否 | 订单外部单号 | |
| responseCodes | array[ResponseCode] | 否 | 订单响应代码列表,导入结果的详细说明,可能为空 |
JobSheetResponse
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| externalShipmentID | string | 否 | 运输单的外部单号 | |
| importStatus | string | 否 | 导入/分配状态,可取下列值: IMPORTED NOT IMPORTED DISPATCHED NOT DISPATCH |
|
| jobSheetOrdersResponse | array[JobSheetOrderResponse] | 否 | 运输单中各个订单的返回 | |
| responseCodes | array[ResponseCode] | 否 | 响应代码列表,导入结果的详细说明,可能为空 | |
| sequence | integer (int32) | 否 | 运输单序号 |
ResponseCode
| 字段名 | 类型 | 是否必填 | 描述 | 示例 |
|---|---|---|---|---|
| code | string | 否 | 返回码 |
请求示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jobSheetImportRequest version="0.1" login="login" password="password">
<jobSheets>
<importedJobSheet sequence="1122">
<externalShipmentID>外部单号</externalShipmentID>
<branch>Beijing DC</branch>
<cargoDetails>
<cargoType>1</cargoType>
<packageType>A</packageType>
</cargoDetails>
<transportMode>
<transportType>LTL</transportType>
<truckType>0</truckType>
<truckLength>1</truckLength>
<truckCbmCapacity>44</truckCbmCapacity>
<truckMtCapacity>5</truckMtCapacity>
</transportMode>
<autoDispatch>true</autoDispatch>
<vendorCode>SH00108</vendorCode>
<cost>100.1</cost>
<jobSheetOrders>
<jobSheetOrder>
<clientCode>SH00105</clientCode>
<orderNumber/>
<erpNumber>VCX000009</erpNumber>
<sequence>1</sequence>
</jobSheetOrder>
<jobSheetOrder>
<clientCode>SH00105</clientCode>
<orderNumber>SH00105091942</orderNumber>
<erpNumber/>
<sequence>2</sequence>
</jobSheetOrder>
</jobSheetOrders>
</importedJobSheet>
</jobSheets>
</jobSheetImportRequest>
响应示例
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jobSheetImportResponse version="0.1">
<responseCode>200</responseCode>
<jobSheets>
<jobSheet sequence="1122">
<externalShipmentID>0825-01</externalShipmentID>
<importStatus>DISPATCHED</importStatus>
<jobSheetOrdersResponse>
<jobSheetOrders>
<orderNumber>SH00105092157</orderNumber>
<responseCodes>
<responseCode>
<code>200</code>
</responseCode>
</responseCodes>
</jobSheetOrders>
<jobSheetOrders>
<orderNumber>SH00105092158</orderNumber>
<responseCodes>
<responseCode>
<code>200</code>
</responseCode>
</responseCodes>
</jobSheetOrders>
</jobSheetOrdersResponse>
<responseCodes>
<responseCode>
<code>200</code>
</responseCode>
</responseCodes>
</jobSheet>
</jobSheets>
</jobSheetImportResponse>
全局反馈代码
| 反馈代码 | 说明 |
| 0 | 客户验证失败/没有运输单权限 |
| 1 | 不支持的请求版本 |
| 2 | 请求中的导入运输单数量超过限制 |
单个请求反馈代码
| 反馈代码 | 说明 |
| 1001 | 请求参数不合法 |
| 1035 | 运输单和订单的地区不匹配 |
| 1040 | 参数 (branch) 对应的地区错误 |
| 1093 | 参数 (cost) 不合法 |
| 1102 | 导入运输单为空 |
| 1103 | 导入运输单中订单列表为空 |
| 1104 | 参数 (packageType) 不合法 |
| 1105 | 参数 (cargoType) 不合法 |
| 1106 | 订单状态不合法 (要求:已释放) |
| 1107 | 订单已存在运输单中 |
| 1108 | 运输单导入失败 |
| 1109 | 订单没有找到 |
| 1110 | 车长不合法 |
| 1111 | 订单总重量超过卡车容量 |
| 1112 | 订单总体积超过卡车容量 |
| 1113 | 订单参数 (clientCode) 为空 |
| 1114 | 参数 (externalShipmentID) 重复,不能导入 |
| 1121 | 改变订单状态失败 |
| 1122 | 承运商没有找到 |
| 1125 | 运输单自动分配失败 |
| 1126 | 没有运输单自动分配权限 |
| 1100 | 未知错误 |
