零售和第三方物流
  # 零售 (POS) Web Services
# 获取 POS 会员记录
获取详细信息,包括 POS 会员的客户编号/ID。
HTTP 请求
POST http://[server]/jsf/rfws/erp/poscore/member/getCustomer/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| code | string |  会员编号 | 
| displayName | string |  会员显示名称 | 
string |  会员邮箱 | |
| mobile | string |  会员手机 | 
| tel | string |  会员电话 | 
结果 (JSON 数组: "data" )
| 名字 | 类型 | 说明 | 
|---|---|---|
| memCode | string |  会员编号 | 
| memName | string |  会员显示名称 | 
| cusId | int |  客户ID | 
| cusCode | string |  客户编号 | 
| mobile | string |  会员手机 | 
| tel | string |  会员电话 | 
string |  会员邮箱 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("mobile", "98765432");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/poscore/member/getCustomer/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
  "code": "0",
  "data": [
    {
      "memCode": "KS_M001",
      "memName": "Mr. TM Cheung",
      "cusId": 27394,
      "mobile": "98765432",
      "tel": "32459876",
      "cusCode": "KS_M001",
      "email": "tmchan@mailexpress.com"
    },
    {
      "memCode": "KS_M005",
      "memName": "Mr. Expire Cardo",
      "cusId": 27408,
      "mobile": "98765432",
      "tel": "",
      "cusCode": "KS_M005",
      "email": ""
    }
  ],
  "success": true,
  "message": "Success"
}
# 获取客户交易历史
获取指定日期范围内客户的交易历史记录(来自wholesale、 e-commerce、 magento 和 POS)。
HTTP 请求
POST http://[server]/jsf/rfws/erp/generalCus/getTransaction/
参数
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| tranType | string |  必填. 交易类型: pos / ecom / magento / wholesale | 
| customers | JSONArray |  客户编号的JSON数组 | 
| orders | JSONArray |  订单编号的JSON数组 | 
| dateFrom | date |  起始日期,格式为 "YYYY-MM-DD" | 
| dateTo | date |  结束日期,格式为 "YYYY-MM-DD" | 
参数 (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| code | string |  必填. 客户编号 | 
orders (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| code | string |  必填. 订单编号 | 
结果 (JSON 数组: "data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| header | JSON |  Header 信息 JSON 字符串 | 
| footers | JSONArray |  Footer 信息 JSON 数组 | 
| relations | JSONArray |  相关发票或送货单 JSON 数组 | 
header (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| code | string |  交易编号 | 
| tDate | date |  交易日期 | 
| cus | JSON |  客户信息 JSON 字符串 | 
| cur | JSON |  货币信息 JSON 字符串 | 
| netAmt | decimal |  发票净额 | 
| invDiscAmt | decimal |  整张发票的折扣金额 | 
cus (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  客户 ID | 
| code | string |  客户编号 | 
cur (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  货币 ID | 
| code | string |  货币编号 | 
| desc | string |  货币代号 | 
footers (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| proId | int |  产品 ID | 
| proDesc | String |  产品说明 | 
| qty | decimal |  数量 | 
| unit | JSON |  单位信息 JSON 字符串 | 
| discAmt | decimal |  产品折扣金额 | 
| amt | decimal |  金额 | 
| up | decimal |  单价 | 
unit (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  单位 ID | 
| code | string |  单位编号 | 
relations (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| code | string |  编号 | 
| module | string |  模块名称: pos / dn / siso | 
请求示例:
JsonArray orderJsonArray = new JsonArray();
JsonObject orderJsonObj = new JsonObject();
orderJsonObj.put("code", "00320180611193917507");
orderJsonArray.add(orderJsonObj);
orderJsonObj = new JsonObject();
orderJsonObj.put("code", "00320180611170803142");
orderJsonArray.add(orderJsonObj);
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("dateFrom", "2018-06-11");
data.addProperty("tranType", "pos");
data.addProperty("orders", orderJsonArray);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/generalCus/getTransaction/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
  "code": "0",
  "data": [
    {
      "header": {
        "cus": {
          "code": "",
          "id": 0
        },
        "tDate": "2018-06-11",
        "cur": {
          "code": "H",
          "id": 2,
          "desc": "HK$"
        },
        "netAmt": 1550,
        "code": "00320180611170803142",
        "invDiscAmt": 50
      },
      "relations": [],
      "footers": [
        {
          "proDesc": "KC Computer",
          "unit": {
            "code": "",
            "id": 39321
          },
          "proId": 4308,
          "qty": 1,
          "amt": 1600,
          "up": 1600,
          "discAmt": 0
        }
      ]
    },
    {
      "header": {
        "cus": {
          "code": "",
          "id": 0
        },
        "tDate": "2018-06-11",
        "cur": {
          "code": "H",
          "id": 2,
          "desc": "HK$"
        },
        "netAmt": 56,
        "code": "00320180611193917507",
        "invDiscAmt": 20
      },
      "relations": [
        {
          "code": "00320180611193230187",
          "module": "pos"
        }
      ],
      "footers": [
        {
          "proDesc": "雞肶",
          "unit": {
            "code": "",
            "id": 39298
          },
          "proId": 4288,
          "qty": 1,
          "amt": 19,
          "up": 19,
          "discAmt": 0
        },
        {
          "proDesc": "雞肶",
          "unit": {
            "code": "",
            "id": 39298
          },
          "proId": 4288,
          "qty": 1,
          "amt": 19,
          "up": 19,
          "discAmt": 0
        },
        {
          "proDesc": "雞肶",
          "unit": {
            "code": "",
            "id": 39298
          },
          "proId": 4288,
          "qty": 2,
          "amt": 38,
          "up": 19,
          "discAmt": 0
        }
      ]
    }
  ],
  "success": true,
  "message": "Success"
}
# 获取 POS 产品定价
从自动定价/价目表(POS)和产品 FM 中加载价格,获取特定日期的产品售价/折扣。
HTTP 请求
POST http://[server]/jsf/rfws/erp/poscore/product/getProInfoByCus/
参数
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| date | date |  必填. 指定日期,格式为 "YYYY-MM-DD" | 
| customers | JSONArray |  客户编号 JSON 数组 | 
| products | JSONArray |  产品编号 JSON 数组 | 
| shopId | int |  POS 门店 ID | 
customers (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| code | string |  必填. 客户编号 | 
products (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| code | string |  必填. 产品编号 | 
结果 (JSON 数组:"data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| cusCode | string |  客户编号 | 
| pros | JSONArray |  产品信息 JSON 数组 | 
pros (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  产品 ID | 
| code | string |  产品编号 | 
| desc | string |  产品说明 | 
| unit | JSON |  单位信息 JSON 字符串 | 
| price | JSON |  价格信息 JSON 字符串 | 
| series | JSON |  系列信息 JSON 字符串 | 
| amt | decimal |  金额 | 
| retailType | string |  零售类型: retail / packPro / service | 
unit (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  单位 ID | 
| code | string |  单位编号 | 
price (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| disc | decimal |  折扣 | 
| up | int |  单价 | 
| type | string |  价格来源: autoPricing / priceList / product | 
series (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  系列 ID | 
| code | string |  系列编号 | 
| desc | string |  系列说明 | 
请求示例:
JsonArray cusJsonArray = new JsonArray();
JsonObject cusJsonObj new JsonObject();
cusJsonObj.put("code", "KS_M001");
cusJsonArray.add(cusJsonObj);
JsonArray proJsonArray = new JsonArray();
JsonObject proJsonObj = new JsonObject();
proJsonObj.put("code", "KC_POS_001");
proJsonArray.add(proJsonObj);
proJsonObj = new JsonObject();
proJsonObj.put("code", "KC_PC_001");
proJsonArray.add(proJsonObj);
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("date", "2018-06-05");
data.addProperty("customers", cusJsonArray);
data.addProperty("products", proJsonArray);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/poscore/product/getProInfoByCus/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
  "code": "0",
  "data": [
    {
      "pros": [
        {
          "unit": {
            "code": "PCS",
            "id": 3
          },
          "retailType": "retail",
          "code": "KC_PC_001",
          "price": {
            "disc": 23,
            "up": 369,
            "type": "priceList"
          },
          "series": {
            "code": "KC-SES-001",
            "id": 3,
            "desc": "日常用品"
          },
          "id": 4308,
          "desc": "PC (HX84953)"
        },
        {
          "unit": {
            "code": "PCS",
            "id": 3
          },
          "retailType": "retail",
          "code": "KC_POS_001",
          "price": {
            "disc": 10,
            "up": 33,
            "type": "autoPricing"
          },
          "series": {
            "code": "KC-SES-001",
            "id": 3,
            "desc": "日常用品"
          },
          "id": 4288,
          "desc": "POS 雞肶"
        }
      ],
      "cusCode": "KS_M001"
    }
  ],
  "success": true,
  "message": "Success"
}
# 注册新 POS 会员
注册新 POS 会员。
HTTP 请求
POST http://[server]/jsf/rfws/erp/poscore/member/add/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| memTypeId | int |  必填. 会员类别 ID | 
| mainCardNo | string |  主卡编号 | 
| cardNameId | int |  卡名 | 
| mobile | string |  手机 | 
| titleCode | string |  称谓编号: mr / mrs / miss | 
| firstName | string |  名字 | 
| lastName | string |  姓氏 | 
| displayName | string |  简称 | 
| dayOfBirth | int |  出生日期 | 
| monthOfBirth | int |  出生月份 | 
| age | int |  年龄 | 
| idNo | string |  ID 编号 | 
| gender | string |  性别: 男 / 女 | 
| shopId | int |  POS 门店 ID | 
结果
| 名字 | 类型 | 说明 | 
|---|---|---|
| success | int |  true 表示成功; false 表示错误 | 
| messageCode | string |  0001 表示成功; 其他信息编号代表着不同的信息 | 
| message | string |  成功 / 失败原因 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("lastName", "Chan");
data.addProperty("gender", "male");
data.addProperty("displayName", "Mr. Ben Chan");
data.addProperty("mobile", "23456789");
data.addProperty("titleCode", "mr");
data.addProperty("monthOfBirth", 1);
data.addProperty("firstName", "Ben");
data.addProperty("dayOfBirth", 1);
data.addProperty("cardNameId", 15);
data.addProperty("shopId", 2);
data.addProperty("memTypeId", 10);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/poscore/member/add/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
    "success": true,
    "messageCode": "0001",
    "message":"Success"
}
# 获取会员的储值结余
获取指定日期会员的储值结余。
HTTP 请求
POST http://[server]/jsf/rfws/erp/storeValue/getSVBalance/
参数
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| memId | int |  必填. 会员 ID | 
| svId | int |  必填. 储值 ID | 
| chkDate | date |  截至日期,格式为 "YYYY-MM-DD",默认为今天 | 
结果 (JSON 对象:"data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| balance | string |  储值结余 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("memId", 5);
data.addProperty("svId", 28);
data.addProperty("chkDate", "2019-06-28");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "//jsf/rfws/erp/bonus/getBpBal/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "balance": 25
  }
}
# 保存储值明细
保存储值明细。
HTTP 请求
POST http://[server]/jsf/rfws/erp/poscore/storeValue/saveSVLedger/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  企业法人 ID, 数据列表的默认值。 | 
| memId | int |  会员 ID, 数据列表的默认值。 | 
| svId | int |  储值 ID, 数据列表的默认值。 | 
| svfId | int |  储值券 ID, 数据列表的默认值。 | 
| data | JSONArray |  储值明细数据列表。 | 
数据列表 (JSON 对象: "data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  企业法人 ID | 
| memId | int |  会员 ID | 
| svId | int |  储值 ID | 
| svfId | int |  储值券 ID | 
| svLedger | decimal |  必填. 储值明细,不能为0。 | 
| tranType | String |  来源交易类别 | 
| tranId | int |  来源交易 ID | 
| tranCode | String |  来源交易编号 | 
| tranDate | date |  来源交易日期,格式为 "YYYY-MM-DD"。 | 
| expDate | date |  失效日期,格式为 "YYYY-MM-DD"。 | 
| desc | String |  说明 | 
结果
| 名字 | 类型 | 说明 | 
|---|---|---|
| status | boolean |  true 表示成功;false 表示错误 | 
| message | string |  失败原因 | 
请求示例:
JSONObject data = new JSONObject();
data.put("beId", "298");
data.put("memId", "196");
data.put("svId", "34");
data.put("svfId", "0");
JSONArray dataArray = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("beId", "298");
obj.put("memId", "196");
obj.put("svId", "34");
obj.put("svfId", "0");
obj.put("svLedger", "30297.3600");
obj.put("tranType", "poscoreSVTransfer");
obj.put("tranId", "1");
obj.put("tranDate", "2019-04-22");
obj.put("tranCode", "TEST");
obj.put("expDate", "9999-12-31");
obj.put("desc", "");
dataArray.put(obj);
data.put("data", dataArray);
String path = PRE_URL + "/jsf/rfws/erp/poscore/storeValue/saveSVLedger";
HttpPost post = new HttpPost(path);
post.setEntity(new StringEntity(data.toString()));
post.addHeader("authorization", AUTHORIZATION);
post.addHeader("client_id", clientID);
post.addHeader("Content-Type", "application/json");
HttpResponse res = client.execute(post);
响应示例:
{
    "success": true,
    "message":"ce01_poscore.dataEmpty"
}
# 电子商务和 Magento Web Services
# 获取电商会员记录
获取详细信息,包括电商会员的客户编号/ID。
HTTP 请求
POST http://[server]/jsf/rfws/erp/ecom/member/getCustomer/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| name | string |  会员名字 | 
string |  会员邮箱 | |
| mobile | string |  会员手机 | 
结果 (JSON 数组:"data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| memName | string |  会员名字 | 
| cusId | int |  客户 ID | 
| cusCode | string |  客户编号 | 
| mobile | string |  会员手机 | 
string |  会员邮箱 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("name", "Lillie Dach");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/ecom/member/getCustomer/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
  "code": "0",
  "data": [
    {
      "memName": "Lillie Dach",
      "cusId": 27406,
      "mobile": "",
      "cusCode": "CUS180005",
      "email": "Lillie.Dach@data-generator.com"
    }
  ],
  "success": true,
  "message": "Success"
}
# 获取 Magento 会员记录
获取详细信息,包括Magento会员的客户编号/ID。
HTTP 请求
POST http://[server]/jsf/rfws/eshop/getCustomer/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| firstName | string |  会员名字 | 
| lastName | string |  会员姓氏 | 
string |  会员邮箱 | 
结果 (JSON 数组: "data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| memId | int |  会员 ID | 
| cusId | int |  客户 ID | 
| cusCode | string |  客户编号 | 
| firstName | string |  会员名字 | 
| lastName | string |  会员姓氏 | 
string |  会员邮箱 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 203);
data.addProperty("lastName", "Alan");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/eshop/getCustomer/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
  "code": "0",
  "data": [
    {
      "firstName": "Alan",
      "lastName": "Alan",
      "cusId": 27099,
      "cusCode": "CUS170004",
      "email": "alan.wk.wong@mac.hk",
      "memId": 1
    }
  ],
  "success": true,
  "message": "Success"
}
# 第三方物流 (3PL) Web Services
# 获取捡货单列表
获取特定企业法人的捡货单列表。
HTTP 请求
POST http://[server]/jsf/rfws/erp/lsp/pickinglist/getList/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| locId | int |  地点 ID | 
| notYetScannedOnly | boolean |  如果为true,结果集将只返回至少有一行下款尚未扫描(scanned = 0)的捡货单。 | 
结果 (JSON 数组: "data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  捡货单 ID | 
| code | string |  捡货单编号 | 
| genDate | date |  捡货单的生成日期 | 
| lastScanDate | date |  捡货单的最后扫描日期 | 
| plStatus | string |  捡货单状态: open / pending / done | 
| scanBy | json |  用户信息 JSON 字符串 | 
| be | json |  企业法人信息 JSON 字符串 | 
scanBy (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  用户 ID | 
| code | string |  用户编号 | 
| desc | string |  用户说明 | 
| avatar | string |  用户照片的URL | 
be (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  企业法人 ID | 
| code | string |  企业法人编号 | 
| desc | string |  企业法人说明 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 173);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/lsp/pickinglist/getList/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
    "data": [
        {
            "code": "PL20170065",
            "genDate": "2017-11-09 00:00:00",
            "lastScanDate": "1900-01-01 00:00:00",
            "scanBy": {
                  "code": "",
                  "id": 0,
                  "desc": "",
              	  "avatar": ""
            },
            "id": 51,
            "plStatus": "open",
            "be": {
                  "code": "KC_TEST_PICKING_LIST",
                  "id": 216,
                  "desc": "Test Picking List Company"
              }
        },
        {
            "code": "PL20170057",
            "genDate": "2017-11-09 00:00:00",
            "lastScanDate": "1900-01-01 00:00:00",
            "scanBy": {
                  "code": "",
                  "id": 0,
                  "desc": "",
              	  "avatar": ""
            },
            "id": 49,
            "plStatus": "open"",
            "be": {
                  "code": "KC_TEST_PICKING_LIST",
                  "id": 216,
                  "desc": "Test Picking List Company"
              }
        },
       {
            "code": "PL20170039",
            "genDate": "2017-10-13 00:00:00",
            "lastScanDate": "1900-01-01 00:00:00",
            "plStatus": "open",
            "scanBy": 0,
            "id": 33",
            "be": {
                  "code": "KC_TEST_PICKING_LIST",
                  "id": 216,
                  "desc": "Test Picking List Company"
              }
        }
    ],
    "success": true,
    "messageCode": "0001",
    "message": "Success"
}
# 获取捡货单详情
获取特定企业法人的特定捡货单。
HTTP 请求
POST http://[server]/jsf/rfws/erp/lsp/pickinglist/get/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  必填. 捡货单 ID | 
| beId | int |  必填. 企业法人 ID | 
结果 (JSON 对象: "data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  捡货单 ID | 
| code | string |  捡货单编号 | 
| plStatus | string |  捡货单状态: open / pending / done | 
| lsp | json |  物流服务供应商信息 JSON 字符串 | 
| products | json |  产品信息 JSON 数组 | 
| parcels | json |  包裹信息 JSON 数组 | 
lsp (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  物流服务供应商 ID | 
| code | string |  物流服务供应商编号 | 
| desc | string |  物流服务供应商说明 | 
products (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  产品 ID | 
| code | string |  产品编号 | 
| desc | string |  产品说明 | 
| finalQty | decimal |  要交付的产品数量 | 
| scanned | decimal |  产品的扫描数量 | 
| adjQty | decimal |  产品的调整数量 | 
| photos | JSON |  产品 FM 中选中了 打印 属性的照片列表 | 
| toBePicked | decimal |  待捡货产品数量 | 
| useLotno | boolean |  说明产品是否使用批号 | 
| baseUnit | JSON |  基本单位信息 JSON 字符串 | 
| lotNos | JSON |  批号信息 JSON 数组 | 
baseUnit (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  单位 ID | 
| code | string |  单位编号 | 
lotNos (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  批号 ID | 
| code | string |  批号编号 | 
| scanned | decimal |  批号的扫描数量 | 
| qty | decimal |  批号的最终数量 | 
parcels (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| widthCm | decimal |  包裹的宽 | 
| heightCm | decimal |  包裹的高 | 
| lengthCm | decimal |  包裹的长 | 
| ttlVolumeCBM | decimal |  总体积 | 
| ttlWeightKG | decimal |  总重量 | 
| ttlQty | decimal |  总数量 | 
| parcel | JSON |  包裹信息 JSON 字符串 | 
parcel (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  包裹 ID | 
| code | string |  包裹编号 | 
| desc | string |  包裹说明 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("beId", 173);
data.addProperty("id", 33);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/lsp/pickinglist/get/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
    "data": {
        "code": "PL20180115",
        "lsp": {
            "code": "4PX_H3",
            "id": 18,
            "desc": "4PX Hong Kong"
        },
        "plStatus": "open",
        "id": 89,
        "parcels": [
            {
                "parcel": {
                    "code": "4PX_H3_P",
                    "id": 14,
                    "desc": "4PX Parcel "
                },
                "widthCm": 2,
                "heightCm": 3,
                "ttlVolumeCBM": 0.000006,
                "lengthCm": 1,
                "ttlWeightKG": 1,
                "ttlQty": 1
            }
        ],
        "products": [
            {
                "baseUnit": {
                    "code": "PCS",
                    "id": 3
                },
                "code": "IPAD 5",
                "finalQty": 10,
                "scanned": 0,
                "adjQty": 10,
                "id": 3982,
                "useLotno" : true,
                "lotNos": [
                    {
                        "code": "OS018015300000000000",
                        "scanned": 1,
                        "qty": 4,
                        "id": 1542
                    }
                ],
                "photos": [],
                "toBePicked": 10,
                "desc": "iPad 5"
            }
        ]
    },
    "success": true,
    "messageCode": "0001",
    "message": "Success"
}
# 保存捡货单
为特定的企业法人保存捡货单
HTTP 请求
POST http://[server]/jsf/rfws/erp/lsp/pickinglist/save/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
如果不提供包裹或产品,下款将保持不变。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| id | int |  必填. 捡货单 ID | 
| action | string |  pending / done / clear | 
| lspId | int |  物流服务供应商 ID | 
| parcels | JSON |  包裹信息 JSON 数组 (可选) | 
| products | JSON |  产品信息 JSON 数组 (可选) | 
parcels (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| widthCm | decimal |  必填. 包裹的宽 | 
| heightCm | decimal |  必填. 包裹的高 | 
| lengthCm | decimal |  必填. 包裹的长 | 
| ttlVolumeCBM | decimal |  必填. 总体积 | 
| ttlWeightKG | decimal |  必填. 总重量 | 
| parcel | JSON |  必填. 包裹信息 JSON 字符串 | 
parcel (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  必填. 包裹 ID | 
products (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  必填. 产品 ID | 
| finalQty | decimal |  必填. 要交付的产品数量 | 
| scanned | decimal |  必填. 产品的扫描数量 | 
| baseUnit | JSON |  必填. 基本单位信息 JSON 字符串 | 
| lotNos | JSON |  必填. 批号信息 JSON 数组 | 
baseUnit (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  必填. 单位 ID | 
lotNos (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  必填. 批号 ID | 
| code | string |  批号编号 | 
| scanned | decimal |  必填. 批号的扫描数量 | 
| qty | decimal |  必填. 批号的最终数量 | 
结果
| 名字 | 类型 | 说明 | 
|---|---|---|
| success | int |  true 表示成功; false 表示错误 | 
| messageCode | string |  0001 表示成功; 其他信息编号代表着不同的信息 | 
| message | string |  成功 / 失败原因 | 
请求示例:
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/lsp/pickinglist/save/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
    "success": true,
    "messageCode": "0001",
    "message":"Success"
}
# 获取包裹列表
获取特定企业法人的包裹列表。
HTTP 请求
POST http://[server]/jsf/rfws/erp/lsp/serviceProvider/getParcelList/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| lspId | int |  物流服务供应商 ID | 
结果 (JSON 数组:"data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  包裹 ID | 
| code | string |  包裹编号 | 
| desc | string |  包裹说明 | 
| length | decimal |  包裹的长 | 
| width | decimal |  包裹的宽 | 
| height | decimal |  包裹的高 | 
| lsp | json |  物流服务供应商信息 JSON 字符串 | 
lsp (JSON 对象)
| 名字 | 类型 | 说明 | 
|---|---|---|
| id | int |  物流服务供应商 ID | 
| code | String |  物流服务供应商编号 | 
| desc | String |  物流服务供应商说明 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("lspId", 17);
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/lsp/serviceProvider/getParcelList/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
响应示例:
{
    "data": [
        {
            "code": "BIG",
            "length": 30,
            "width": 40,
            "lsp": {
                "code": "SF",
                "id": 5,
                "desc": "S.F. Express"
            },
            "id": 1,
            "desc": "Big size",
            "height": 20
        },
        {
            "code": "KC_ZTO_OBJ",
            "length": 1,
            "width": 2,
            "lsp": {
                "code": "ZTO",
                "id": 7,
                "desc": "中通"
            },
            "id": 3,
            "desc": "中通貨",
            "height": 3
        }
    ],
    "success": true,
    "messageCode": "0001",
    "message": "Success"
}
# 物流追踪
获取特定企业法人送货单的物流追踪信息。
HTTP 请求
POST http://[server]/jsf/rfws/erp/lsp/service/getTrackStatus/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| dnCode | string |  aiM18中的送货单编号 | 
| trackCode | string |  物流商提供的追踪编号 | 
只需要提供 dnCode 或 trackCode。
结果 (JSON 对象:"data")
| 名字 | 类型 | 说明 | 
|---|---|---|
| dnCode | string |  送货单编号 | 
| trackCode | string |  物流追踪编号 | 
| state | string |  状态 | 
| tracks | json |  物流追踪信息 JSON 数组 | 
tracks (JSON 数组)
| 名字 | 类型 | 说明 | 
|---|---|---|
| date | date |  日期 | 
| status | String |  状态 | 
| remarks | String |  备注 | 
请求示例:
JsonObject data = new JsonObject();
data.addProperty("dnCode", "DN201806300125");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/lsp/serviceProvider/getTrackStatus/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
# 下载物流标签
下载特定企业法人送货单的物流标签。
HTTP 请求
POST http://[server]/jsf/rfws/erp/lsp/service/printLabel/
参数
所有参数都封装在一个 JSON 对象中。请阅读请求示例了解详情。
| 名字 | 类型 | 说明 | 
|---|---|---|
| beId | int |  必填. 企业法人 ID | 
| dnCode | string |  aiM18中的送货单编号 | 
| trackCode | string |  物流商提供的追踪编号 | 
只需要提供 dnCode 或 trackCode。
结果
HTML response code = 200,将下载物流标签的 pdf 或 html 文件。
请求示例:
JsonObject data = new JsonObject();
data.addProperty("dnCode", "DN201806300125");
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), data.toString());
String url = "http://" + server + "/jsf/rfws/erp/lsp/serviceProvider/printLabel/";
Request request = new Request.Builder()
  .url(url)
  .addHeader("client_id", MyValue.clientID)
  .addHeader("authorization", "Bearer " + access_token)
  .addHeader("cache-control", "no-cache")
  .post(requestBody)
  .build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();