refactor code

This commit is contained in:
Cauchy
2023-10-16 14:55:34 +08:00
parent 5d0633d1bb
commit 08cc5c3a3d
67 changed files with 695 additions and 3053 deletions

View File

@@ -1,41 +1,33 @@
package com.peanut.common.Interface;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.peanut.common.utils.HttpClientUtils;
import com.peanut.common.utils.KdUtils;
import com.peanut.modules.book.entity.FMSCommodity;
import com.peanut.modules.book.entity.FMSOrderEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
*
* @技术QQ群: 可登录官网https://www.kdniao.com/右侧查看技术群号
* @see: https://kdniao.com/api-eorder
* @copyright: 深圳市快金数据技术服务有限公司
* ID和Key请到官网申请https://kdniao.com/reg
* <p>
* <p>
* 电子面单接口
* 此接口用于向快递/快运公司下发订单并获取快递单号返回电子面单html模板通知快递员上门取件。该功能支持情况需查看技术文档。
*正式地址https://api.kdniao.com/api/EOrderService
*
*
* 正式地址https://api.kdniao.com/api/EOrderService
* <p>
* <p>
* 系统级参数
* RequestData String R 请求内容为JSON格式 详情可参考接口技术文档https://www.kdniao.com/documents
* EBusinessID String R 用户ID
* RequestType String R 请求接口指令
* DataSign String R 数据内容签名,加密方法为:把(请求内容(未编码)+ApiKey)进行MD5加密--32位小写然后Base64编码最后进行URL(utf-8)编码
* DataType String R DataType=2请求、返回数据类型均为JSON格式
* <p>
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* Callback String(50) O 用户自定义回传字段
@@ -95,258 +87,127 @@ import java.util.Map;
public class KdApiEOrder {
//用户ID快递鸟提供注意保管不要泄漏
private static String EBusinessID="1788532";//即用户ID
// private static String EBusinessID="test1788532";//即用户ID
//用户ID快递鸟提供注意保管不要泄漏
private static String EBusinessID = "1788532";//即用户ID
// private static String EBusinessID="test1788532";//即用户ID
//API key快递鸟提供注意保管不要泄漏
private static String ApiKey="f4342e6c-5cfa-458f-997b-f973eb29eb1d";//即API key
private static String ApiKey = "f4342e6c-5cfa-458f-997b-f973eb29eb1d";//即API key
// private static String ApiKey="34f033ae-9c73-4b9a-899e-943a65fd86bf";//即API key
// 电子面单
private static String OnlineReqURL="https://api.kdniao.com/api/EOrderService";
// 电子面单
private static String OnlineReqURL = "https://api.kdniao.com/api/EOrderService";
// 取消电子面单
private static String ReqURL="https://api.kdniao.com/api/EOrderService";
private static String ReqURL = "https://api.kdniao.com/api/EOrderService";
// 物流信息跟踪
private String TrackReqURL="https://api.kdniao.com/api/dist";
// 物流信息跟踪
private String TrackReqURL = "https://api.kdniao.com/api/dist";
// private static String TrackReqURL="http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
// 即时查询物流信息
private static String QueryReqURL="https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
// private static String QueryReqURL="http://sandboxapi.kdniao.com:8080/kdniaosandbox/gateway/exterfaceInvoke.json";
// 即时查询物流信息
private static String QueryReqURL = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
/**
* 电子面单取消接口
* 此接口用于取消“电子面单接口”下单成功的订单,回收快递单号。
* <p>
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* ShipperCode String(10) R 快递公司编码
* OrderCode String(30) R 订单编号
* ExpNo String(30) R 快递单号
* CustomerName String(50) R 电子面单客户号
* CustomerPwd String(30) R 电子面单密码(顺丰不需要)
*/
@RequestMapping("/cancel")
public static String cancelOrderByJson(@RequestParam Map<String, Object> param) throws Exception {
// 组装应用级参数
String RequestData = "{" +
"'ShipperCode':" + param.get("ShipperCode") + "," +
"'OrderCode': " + param.get("orderSn") + "," +
"'ExpNo': '" + param.get("ExpNo") + "'," +
"}";
// 组装系统级参数
Map<String, String> params = new HashMap<String, String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "1147");
String dataSign = KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result = HttpClientUtils.kdSendPost(ReqURL, params);
//根据公司业务处理返回的信息......
return result;
}
// public static void main(String[] args) {
// try {
// KdApiEOrder api = new KdApiEOrder();
// System.out.println(api.orderOnlineByJson());
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
/**
* 电子面单接口
* 此接口用于向快递/快运公司下发订单并获取快递单号返回电子面单html模板通知快递员上门取件。
* @return
* @throws Exception
*/
public static JSONArray orderOnlineByJson(List<FMSOrderEntity> fmsOrderList) throws Exception{
String RequestData= "";
JSONArray jsonArray = new JSONArray();
String cust = "";
for(FMSOrderEntity fms : fmsOrderList){
// 组装应用级参数
RequestData= "{"+
"'OrderCode': '" + fms.getOrderCode() + "',"+
"'ShipperCode': '" + fms.getShipperCode() + "',";
if("JD".equals(fms.getShipperCode())){
cust = "'CustomerName': '010K1598220',"+
"'CustomerPwd': '',";
}
if ("YD".equals(fms.getShipperCode())){
// cust = "'CustomerName': '114198226272',"+
// "'CustomerPwd': 'gcs5XavNGRVqbhUmHpnkDd7Fi3T9Ef',";
cust = "'CustomerName': 'testyd',"+
"'CustomerPwd': 'testydpwd',";
}
cust += "'MonthCode': '',"+
"'SendSite': '',"+
"'PayType': 1,"+
"'MonthCode': '',"+
"'ExpType': 1,"+
"'Cost': 1.0,"+
"'OtherCost': 1.0,"+
// "'TemplateSize':'130'"+
"'Sender': {"+
"'Company': '众妙之门',"+
"'Name': 'Taylor',"+
"'Mobile': '12345678901',"+
"'ProvinceName': '天津',"+
"'CityName': '天津市',"+
"'ExpAreaName': '南开区',"+
"'Address': '天津市南开区融创中心中南广场东区2号楼605'"+
"},"+
"'Receiver': {"+
"'Company': '',"+
"'Name': '" + fms.getReceiverName() + "',"+
"'Mobile': '" + fms.getReceiverMobile() + "',"+
"'ProvinceName': '" + fms.getReceiverProvinceName() + "',"+
"'CityName': '" + fms.getReceiverCityName() + "',"+
"'ExpAreaName': '" + fms.getReceiverExpAreaName() + "',"+
"'Address': '" + fms.getReceiverAddress() + "'"+
"},"+
"'Commodity': [" ;
String s = "";
for(FMSCommodity fmsCommodity : fms.getCommodityList() ){
s += "{'GoodsName': '"+fmsCommodity.getGoodsName()+ "'},";
}
s = s.substring(0,s.lastIndexOf(','));
String a = s + "],"+
"'AddService': [],"+
"'IsReturnPrintTemplate':1,"+
"'Remark': "+ fms.getRemark()+""+
"}";
// 组装系统级参数
Map<String, String> params = new HashMap<String, String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData + cust + a, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "1007");
// params.put("RequestType", "1001");
String dataSign=KdUtils.encrypt(RequestData + cust + a, ApiKey, "UTF-8");
System.out.println(RequestData + a);
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result= HttpClientUtils.kdSendPost(OnlineReqURL, params);
jsonArray.add(result);
}
return jsonArray;
}
/**
* 电子面单取消接口
* 此接口用于取消“电子面单接口”下单成功的订单,回收快递单号。
*
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* ShipperCode String(10) R 快递公司编码
* OrderCode String(30) R 订单编号
* ExpNo String(30) R 快递单号
* CustomerName String(50) R 电子面单客户号
* CustomerPwd String(30) R 电子面单密码(顺丰不需要)
*
*/
@RequestMapping("/cancel")
public static String cancelOrderByJson(@RequestParam Map<String,Object> param) throws Exception{
// 组装应用级参数
String RequestData= "{"+
"'ShipperCode':" +param.get("ShipperCode")+","+
"'OrderCode': "+param.get("orderSn")+","+
"'ExpNo': '"+param.get("ExpNo")+"',"+
"}";
// 组装系统级参数
Map<String, String> params = new HashMap<String, String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "1147");
String dataSign=KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result=HttpClientUtils.kdSendPost(ReqURL, params);
// JSONObject json = JSONObject.parseObject(result);
// if(json.get("Success").equals("true")){
// // TODO 返回值为Success时 存入到系统中的 sys_interface_log 表
//
// }else{
// // TODO 存入到系统中的 sys_interface_fail 表中
// // TODO 存入interfaceType 值为 2 用作以后人工干预重推 区分是什么接口
//
// }
//根据公司业务处理返回的信息......
return result;
}
/**
*
* 即时查询接口(增值版)
* 此接口用于向快递公司实时查询物流轨迹信息。
*
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* OrderCode String(30) O 订单编号
* CustomerName String(50) C ShipperCode为SF时必填对应寄件人/收件人手机号后四位ShipperCode为其他快递时可不填或保留字段不可传值
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
* LogisticCode String(30) R 快递单号
*/
@RequestMapping("/queryOrder")
public static String queryOrderOnlineByJson(@RequestParam Map<String,Object> param) throws Exception{
// 组装应用级参数
String RequestData= "{"+
"'ShipperCode': '"+ param.get("ShipperCode") +"',"+
"'LogisticCode': '"+ param.get("LogisticCode") +"',"+
"}";
// 组装系统级参数
Map<String,String> params = new HashMap<String,String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "8001");//在途监控即时查询接口指令8001/地图版即时查询接口指令8003
String dataSign=KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result=HttpClientUtils.kdSendPost(QueryReqURL, params);
return result;
}
/**
* 物流跟踪接口(增值版)
* 此接口用于向快递鸟订阅物流轨迹信息。
*
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* Callback String(50) O 用户自定义回传字段
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
* LogisticCode String(30) R 快递单号
* CustomerName String(50) C ShipperCode为SF时必填对应寄件人/收件人手机号后四位ShipperCode为其他快递时可不填或保留字段不可传值
*/
@RequestMapping("/track")
public String trackOrderByJson(@RequestParam Map<String,Object> param) throws Exception{
// 组装应用级参数
String RequestData= "{"+
"'Callback':'OrderCode',"+
"'ShipperCode':'" + param.get("ShipperCode") + "',"+
"'LogisticCode':'" + param.get("LogisticCode") + "',"+
"}";
// 组装系统级参数
Map<String,String> params = new HashMap<String,String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "8008");//在途监控订阅接口指令8008/地图版订阅接口指令8005
// params.put("RequestType", "8005");//在途监控订阅接口指令8008/地图版订阅接口指令8005
String dataSign=KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result=HttpClientUtils.kdSendPost(TrackReqURL, params);
return result;
}
/**
*
* 此接口用于快递鸟推送物流轨迹信息。
* @return
* @throws Exception
*/
// TODO 后续编写 获取信息存库 调用消息队列 异步推送给 一路健康 or 疯子读书
@RequestMapping("/pushOrder")
public String subscribeOrderByJSON() throws Exception{
// JSONObject json = JSONObject.parseObject(result);
// if(json.get("Success").equals("true")){
// // TODO 返回值为Success时 存入到系统中的 sys_interface_log 表
//
// }else{
// // TODO 存入到系统中的 sys_interface_fail 表中
// // TODO 存入interfaceType 值为 5 用作以后人工干预重推 区分是什么接口
//
// }
return "";
}
/**
* 即时查询接口(增值版)
* 此接口用于向快递公司实时查询物流轨迹信息。
* <p>
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* OrderCode String(30) O 订单编号
* CustomerName String(50) C ShipperCode为SF时必填对应寄件人/收件人手机号后四位ShipperCode为其他快递时可不填或保留字段不可传值
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
* LogisticCode String(30) R 快递单号
*/
@RequestMapping("/queryOrder")
public static String queryOrderOnlineByJson(@RequestParam Map<String, Object> param) throws Exception {
// 组装应用级参数
String RequestData = "{" +
"'ShipperCode': '" + param.get("ShipperCode") + "'," +
"'LogisticCode': '" + param.get("LogisticCode") + "'," +
"}";
// 组装系统级参数
Map<String, String> params = new HashMap<String, String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "8001");//在途监控即时查询接口指令8001/地图版即时查询接口指令8003
String dataSign = KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result = HttpClientUtils.kdSendPost(QueryReqURL, params);
return result;
}
/**
* 物流跟踪接口(增值版)
* 此接口用于向快递鸟订阅物流轨迹信息。
* <p>
* 应用级参数
* R-必填RequiredO-可选OptionalC-报文中该参数在一定条件下可选Conditional
* Callback String(50) O 用户自定义回传字段
* ShipperCode String(10) R 快递公司编码 详细编码参考《快递鸟接口支持快递公司编码.xlsx》
* LogisticCode String(30) R 快递单号
* CustomerName String(50) C ShipperCode为SF时必填对应寄件人/收件人手机号后四位ShipperCode为其他快递时可不填或保留字段不可传值
*/
@RequestMapping("/track")
public String trackOrderByJson(@RequestParam Map<String, Object> param) throws Exception {
// 组装应用级参数
String RequestData = "{" +
"'Callback':'OrderCode'," +
"'ShipperCode':'" + param.get("ShipperCode") + "'," +
"'LogisticCode':'" + param.get("LogisticCode") + "'," +
"}";
// 组装系统级参数
Map<String, String> params = new HashMap<String, String>();
params.put("RequestData", KdUtils.urlEncoder(RequestData, "UTF-8"));
params.put("EBusinessID", EBusinessID);
params.put("RequestType", "8008");//在途监控订阅接口指令8008/地图版订阅接口指令8005
String dataSign = KdUtils.encrypt(RequestData, ApiKey, "UTF-8");
params.put("DataSign", KdUtils.urlEncoder(dataSign, "UTF-8"));
params.put("DataType", "2");
// 以form表单形式提交post请求post请求体中包含了应用级参数和系统级参数
String result = HttpClientUtils.kdSendPost(TrackReqURL, params);
return result;
}
}