liujunchi 2 年之前
父节点
当前提交
154d168dd3

+ 10 - 0
cooleshow-mall/mall-common/pom.xml

@@ -64,6 +64,16 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
+<!--        快递100-->
+        <dependency>
+            <groupId>com.github.kuaidi100-api</groupId>
+            <artifactId>sdk</artifactId>
+            <version>1.0.10</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 40 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/domain/CourierInfo.java

@@ -0,0 +1,40 @@
+package com.yonge.cooleshow.mall.common.courier.domain;
+
+import java.util.Date;
+
+/**
+ * Description 快递运输信息
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public class CourierInfo {
+
+    // 时间
+    private Date time;
+
+    //内容
+    private String context;
+
+
+    //行政区域的编码
+    private String areaCode;
+
+    //行政区域的名称
+    private String areaName;
+
+    //物流状态名称或者高级状态名称
+    private String status;
+
+    //快件当前地点
+    private String location;
+
+    //行政区域经纬度
+    private String areaCenter;
+
+    //行政区域拼音
+    private String areaPinYin;
+
+    //高级物流状态值
+    private String statusCode;
+}

+ 42 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/enums/CompanyEnum.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.mall.common.courier.enums;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public enum CompanyEnum {
+
+    SHUNFENG("shunfeng","顺丰"),
+    ZHONGTONG("zhongtong","中通"),
+    YUANTONG("yuantong","圆通"),
+    HUITONGKUAIDI("huitongkuaidi","汇通"),
+    SHENTONG("shentong","申通"),
+    YUNDA("yunda","韵达"),
+    EMS("ems","ems"),
+    JD("jd","京东"),
+    ZHAIJISONG("zhaijisong","宅急送"),
+    DEBANGKUAIDI("debangkuaidi","德邦快递"),
+    ;
+
+
+    // 快递100对应编号
+    private String code;
+
+    // 公司描述
+    private String msg;
+
+    CompanyEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 7 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/package-info.java

@@ -0,0 +1,7 @@
+/**
+ * Description 快递
+ *
+ * @author: feng-ji
+ * @date: 2022-10-26
+ */
+package com.yonge.cooleshow.mall.common.courier;

+ 42 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/CourierService.java

@@ -0,0 +1,42 @@
+package com.yonge.cooleshow.mall.common.courier.service;
+
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public interface CourierService {
+
+
+    /**
+     * 查询快递信息
+     *
+     * @param company 快递公司
+     * @param courierNo 快递编号
+     */
+    List<CourierInfo> queryTrack(CompanyEnum company,String courierNo);
+
+
+    /**
+     * 回调返回数据转 快递信息
+     *
+     * @param body
+     * @return
+     */
+    List<CourierInfo> getCourierInfos(String body);
+
+    /**
+     * 快递信息订阅
+     *
+     * @param company 快递公司编号
+     * @param courierNo 快递单号
+     * @param url 回调地址
+     */
+    boolean subscribe(CompanyEnum company,String courierNo,String url);
+}

+ 139 - 0
cooleshow-mall/mall-common/src/main/java/com/yonge/cooleshow/mall/common/courier/service/impl/Courier100ServiceImpl.java

@@ -0,0 +1,139 @@
+package com.yonge.cooleshow.mall.common.courier.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.google.gson.Gson;
+import com.kuaidi100.sdk.api.QueryTrack;
+import com.kuaidi100.sdk.api.Subscribe;
+import com.kuaidi100.sdk.contant.ApiInfoConstant;
+import com.kuaidi100.sdk.contant.CompanyConstant;
+import com.kuaidi100.sdk.core.IBaseClient;
+import com.kuaidi100.sdk.pojo.HttpResult;
+import com.kuaidi100.sdk.request.QueryTrackParam;
+import com.kuaidi100.sdk.request.QueryTrackReq;
+import com.kuaidi100.sdk.request.SubscribeParam;
+import com.kuaidi100.sdk.request.SubscribeParameters;
+import com.kuaidi100.sdk.request.SubscribeReq;
+import com.kuaidi100.sdk.utils.SignUtils;
+import com.yonge.cooleshow.mall.common.courier.domain.CourierInfo;
+import com.yonge.cooleshow.mall.common.courier.enums.CompanyEnum;
+import com.yonge.cooleshow.mall.common.courier.service.CourierService;
+import com.yonge.toolset.base.exception.BizException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ * Description
+ *
+ * @author liujunchi
+ * @date 2022-10-26
+ */
+public class Courier100ServiceImpl implements CourierService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(Courier100ServiceImpl.class);
+
+    private String key = "VCjiLJPi6082";
+
+    private String customer ="9D9FE2336BB04B0414E243E7700FBD83";
+
+
+    @Override
+    public List<CourierInfo> queryTrack(CompanyEnum company, String courierNo) {
+        QueryTrackReq queryTrackReq = new QueryTrackReq();
+        QueryTrackParam queryTrackParam = new QueryTrackParam();
+
+        queryTrackParam.setCom(getCompanyConstant(company));
+        queryTrackParam.setNum(courierNo);
+        queryTrackParam.setResultv2("4");
+        String param = new Gson().toJson(queryTrackParam);
+
+        queryTrackReq.setParam(param);
+        queryTrackReq.setCustomer(customer);
+        queryTrackReq.setSign(SignUtils.querySign(param , key, customer));
+
+        IBaseClient baseClient = new QueryTrack();
+        try {
+            LOG.debug("查询快递参数: {}",queryTrackParam);
+            HttpResult execute = baseClient.execute(queryTrackReq);
+            LOG.info("查询快递信息参数: {}",execute);
+            if (execute.getStatus() != 200) {
+                throw new BizException(execute.getError());
+            }
+            String body = execute.getBody();
+            return getCourierInfos(body);
+        } catch (Exception e) {
+            LOG.error(e.getLocalizedMessage());
+            e.printStackTrace();
+            throw new BizException(e.getMessage());
+        }
+    }
+
+    @Override
+    public List<CourierInfo> getCourierInfos(String body) {
+        JSONObject jsonObject = JSON.parseObject(body);
+        if (!"200".equals(jsonObject.getString("status"))) {
+            throw new BizException(jsonObject.getString("message"));
+        }
+        return JSON.parseArray(jsonObject.getString("data"), CourierInfo.class);
+    }
+
+    @Override
+    public boolean subscribe(CompanyEnum company, String courierNo, String url) {
+        SubscribeParameters subscribeParameters = new SubscribeParameters();
+        subscribeParameters.setCallbackurl(url);
+        subscribeParameters.setResultv2("4");
+
+        SubscribeParam subscribeParam = new SubscribeParam();
+        subscribeParam.setParameters(subscribeParameters);
+
+        subscribeParam.setCompany(getCompanyConstant(company));
+        subscribeParam.setNumber(courierNo);
+        subscribeParam.setKey(key);
+
+        SubscribeReq subscribeReq = new SubscribeReq();
+        subscribeReq.setSchema(ApiInfoConstant.SUBSCRIBE_SCHEMA);
+        subscribeReq.setParam(new Gson().toJson(subscribeParam));
+
+        IBaseClient subscribe = new Subscribe();
+        try {
+            LOG.debug("快递信息订阅参数: {}",subscribeReq);
+            HttpResult execute = subscribe.execute(subscribeReq);
+            LOG.info("快递信息订阅返回参数: {}",execute);
+            if (execute.getStatus() != 200) {
+                throw new BizException(execute.getError());
+            }
+            JSONObject jsonObject = JSON.parseObject(execute.getBody());
+            if (!"200".equals(jsonObject.getString("status"))) {
+                throw new BizException(jsonObject.getString("message"));
+            }
+            return true;
+        } catch (Exception e) {
+            LOG.error(e.getLocalizedMessage());
+            e.printStackTrace();
+            throw new BizException(e.getMessage());
+        }
+    }
+
+    private String getCompanyConstant(CompanyEnum companyEnum) {
+        switch (companyEnum) {
+            case JD: return CompanyConstant.JD;
+            case EMS: return CompanyConstant.EMS;
+            case YUNDA: return CompanyConstant.YD;
+            case SHENTONG: return CompanyConstant.ST;
+            case SHUNFENG: return CompanyConstant.SF;
+            case YUANTONG: return CompanyConstant.YT;
+            case ZHONGTONG: return CompanyConstant.ZT;
+            case ZHAIJISONG: return CompanyConstant.ZJS;
+            case DEBANGKUAIDI: return CompanyConstant.DB;
+            case HUITONGKUAIDI: return CompanyConstant.HT;
+            default: return null;
+        }
+    }
+
+    public static void main(String[] args) {
+        Courier100ServiceImpl courier100Service = new Courier100ServiceImpl();
+        courier100Service.queryTrack(CompanyEnum.DEBANGKUAIDI,"75606690482924");
+    }
+}