huanglizhi 1 سال پیش
والد
کامیت
9c0755dc07

+ 24 - 7
module-erp/src/main/java/com/hys/app/controller/erp/use/KdnController.java

@@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
 import java.util.List;
+import java.util.Map;
 
 /**
  * OAuth2.0 授权 API
@@ -33,8 +34,8 @@ import java.util.List;
 public class KdnController {
     private KuaiDiNiaoService kuaiDiNiaoService;
 
-    @PostMapping("/returnBack")
-    public resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase) {
+    @PostMapping("/returnBack/instant")
+    public resReturnBackBase kdnReturnBackInstant(ReturnBackInstant returnBackBase) {
         return kuaiDiNiaoService.kdnReturnBack(returnBackBase);
     }
 
@@ -52,29 +53,45 @@ public class KdnController {
     @PostMapping("/createStore")
     @Log(client = LogClient.admin, detail = "快递鸟创建店铺")
     public void createStore(@RequestBody @Valid CreateStoreModel createStoreModel) {
-         kuaiDiNiaoService.createStore(createStoreModel,KdConstants.createStore);
+        kuaiDiNiaoService.createStore(createStoreModel, KdConstants.createStore);
     }
 
     @ApiOperation(value = "创建失败修改参数再次创建快递鸟门店")
     @PostMapping("/updateStore")
     @Log(client = LogClient.admin, detail = "快递鸟创建店铺")
     public void updateStore(@RequestBody @Valid CreateStoreModel createStoreModel) {
-        kuaiDiNiaoService.createStore(createStoreModel,KdConstants.updateStore);
+        kuaiDiNiaoService.createStore(createStoreModel, KdConstants.updateStore);
     }
 
     @ApiOperation(value = "快递鸟门店列表")
     @GetMapping("/list")
     @Log(client = LogClient.admin, detail = "获取快递鸟店铺列表")
     public Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam) {
-      return   kuaiDiNiaoService.getStoreList(baseQueryParam);
+        return kuaiDiNiaoService.getStoreList(baseQueryParam);
     }
 
     @ApiOperation(value = "selectAudit")
     @GetMapping("/selectAudit")
     @Log(client = LogClient.admin, detail = "获取快递鸟店铺列表")
-    public void  selectAudit(CreateStoreModel createStoreModel) {
-           kuaiDiNiaoService.selectAudit(createStoreModel);
+    public void selectAudit(CreateStoreModel createStoreModel) {
+        kuaiDiNiaoService.selectAudit(createStoreModel);
     }
 
 
+    @ApiOperation(value = "queryLogistics")
+    @PostMapping("/queryLogistics/{logisticsType}{logistics}/{userPhone}")
+    @Log(client = LogClient.admin, detail = "订阅物流查询")
+    public void queryLogistics(@PathVariable String logistics, @PathVariable String logisticsType, @PathVariable String userPhone) {
+        kuaiDiNiaoService.queryLogistics(logistics,logisticsType,userPhone);
+    }
+
+    @PostMapping("/returnBack/logistics")
+    public void kdnReturnBackLogistics(ReturnBackLogistics returnBackBase) {
+        if (returnBackBase.getCount() > 1){
+            List<Map> maps = JSON.parseArray(returnBackBase.getData(), Map.class);
+            for (Map map : maps) {
+                kuaiDiNiaoService.kdnReturnBackLogistics(map);
+            }
+        }
+    }
 }

+ 1 - 1
module-erp/src/main/java/com/hys/app/framework/security/AdminAccessDecisionManager.java

@@ -43,7 +43,7 @@ public class AdminAccessDecisionManager implements org.springframework.security.
         result = result || matcher.match("/configuration/security", url);
         result = result || matcher.match("/actuator/**", url);
         result = result || matcher.match("/import-tpl/**", url);
-        result = result || matcher.match("/admin/erp/kdn/returnBack", url);
+        result = result || matcher.match("/admin/erp/kdn/returnBack/**", url);
         result = result || matcher.match("/admin/erp/scancode/**", url);
         if (result) {
             return;

+ 23 - 13
module-erp/src/main/java/com/hys/app/model/erp/dos/OrderSendDO.java

@@ -16,10 +16,7 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 订单 DO
@@ -210,35 +207,35 @@ public class OrderSendDO extends BaseDO {
 
     @ApiModelProperty(name = "kdn_order_code", value = "快递鸟下单失败 0")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> createOrderFail = new HashMap<>();
+    private Map<String, Object> createOrderFail = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "待接单状态 1")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> createOrderSuccess = new HashMap<>();
+    private Map<String, Object> createOrderSuccess = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "业务员接单状态 2")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> userTakeOrder = new HashMap<>();
+    private Map<String, Object> userTakeOrder = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "业务员到达状态 3")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> userArrives = new HashMap<>();
+    private Map<String, Object> userArrives = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "业务员配送中 4")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> userSending = new HashMap<>();
+    private Map<String, Object> userSending = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "订单费用 5")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> orderFee = new HashMap<>();
+    private Map<String, Object> orderFee = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "签收 6")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> signIn = new HashMap<>();
+    private Map<String, Object> signIn = new HashMap<>();
 
     @ApiModelProperty(name = "kdn_order_code", value = "取消状态  0")
     @TableField(typeHandler = FastjsonTypeHandler.class)
-    private Map<String,Object> cancelOrderKdn = new HashMap<>();
+    private Map<String, Object> cancelOrderKdn = new HashMap<>();
 
     @TableField(exist = false)
     private OrderDO orderVo;
@@ -249,6 +246,19 @@ public class OrderSendDO extends BaseDO {
     @TableField(exist = false)
     private WarehouseDO warehouseVO;
 
-   private Integer selfPickupNum;
+    @ApiModelProperty(name = "kdn_order_code", value = "自提单号")
+    private Integer selfPickupNum;
 
+    @ApiModelProperty("物流轨迹")
+    @TableField(typeHandler = FastjsonTypeHandler.class)
+    private List<Map> logistics = new ArrayList<>();
+
+    @ApiModelProperty("快递类型")
+    private String logisticsType;
+
+    @ApiModelProperty("快递单号")
+    private String logisticsCode;
+
+    @ApiModelProperty("快递员电话后4位")
+    private String logisticsPhone;
 }

+ 4 - 1
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KdConstants.java

@@ -35,9 +35,12 @@ public class KdConstants {
     public static final String queryRoad = "2215";
 
 
-    @ApiModelProperty(value = "查询路由轨迹地图接口")
+    @ApiModelProperty(value = "查询门店创建状态")
     public static final String queryStoreStatus = "2218";
 
+    @ApiModelProperty(value = "查询路由轨迹地图接口")
+    public static final String orderLogistics = "8808";
+
 
     @ApiModelProperty(value = "回调")
     public static final String callBack = "103";

+ 16 - 2
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoService.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hys.app.framework.database.BaseQueryParam;
 import com.hys.app.service.kuaidiniao.entity.*;
 
+import java.util.Map;
+
 public interface KuaiDiNiaoService {
 
 
@@ -13,7 +15,7 @@ public interface KuaiDiNiaoService {
      * @param returnBackBase
      * @return
      */
-    resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase);
+    resReturnBackBase kdnReturnBack(ReturnBackInstant returnBackBase);
 
 
     /**
@@ -25,20 +27,32 @@ public interface KuaiDiNiaoService {
 
     /**
      * 快递鸟创建门店
+     *
      * @param createStoreModel
      */
     void createStore(CreateStoreModel createStoreModel, String constants);
 
     /**
      * 获取门店列表
+     *
      * @param baseQueryParam
      * @return
      */
     Page<CreateStoreModel> getStoreList(BaseQueryParam baseQueryParam);
 
     /**
-     *
      * @param createStoreModel
      */
     void selectAudit(CreateStoreModel createStoreModel);
+
+    /**
+     * 根据物流单号查询快递状态
+     *
+     * @param logistics
+     * @return
+     */
+    void queryLogistics(String logistics,String logisticsType,String userPhone);
+
+    void kdnReturnBackLogistics(Map map);
+
 }

+ 64 - 4
module-erp/src/main/java/com/hys/app/service/kuaidiniao/KuaiDiNiaoServiceImpl.java

@@ -49,12 +49,31 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
      */
     @Value("${kuaidianiao.key}")
     private String apiKey;
+
     /**
      * 快递鸟请求地址
      */
     @Value("${kuaidianiao.apiUrl}")
     private String url;
 
+
+    /**
+     * 快递鸟apiId
+     */
+    @Value("${kuaidianiao.kuaidi.id}")
+    private String kuaiDiId;
+    /**
+     * 快递鸟apiKey
+     */
+    @Value("${kuaidianiao.kuaidi.key}")
+    private String kuaiDiKey;
+
+    /**
+     * 快递鸟请求地址
+     */
+    @Value("${kuaidianiao.kuaidi.apiUrl}")
+    private String kuaiDiUrl;
+
     @Autowired
     private OrderSendManager orderSendManager;
 
@@ -113,10 +132,10 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
             }
             Map dataMap = JSON.parseObject(JSON.toJSONString(map.get("data")), Map.class);
             createStoreModel.setKdnStoreCode(dataMap.get("kdnStoreCode").toString());
-            if (ObjectUtil.isNotNull(modelId)){
+            if (ObjectUtil.isNotNull(modelId)) {
                 createStoreModel.setId(modelId);
                 kdnMapper.updateById(createStoreModel);
-            }else {
+            } else {
                 kdnMapper.insert(createStoreModel);
             }
         } catch (Exception e) {
@@ -133,7 +152,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
     @Override
     public void selectAudit(CreateStoreModel createStoreModel) {
         Map<String, Object> hashMap = new HashMap<>();
-        hashMap.put("storeCode",createStoreModel.getStoreCode());
+        hashMap.put("storeCode", createStoreModel.getStoreCode());
         try {
             String design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(hashMap) + apiKey)), "UTF-8");
             System.out.println("获取门店状态签名--------------------------------------" + design);
@@ -170,6 +189,47 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
         }
     }
 
+    /**
+     * 订阅就行了,订阅成功与否均不影响货物的正常派发
+     *
+     * @param logistics
+     * @param logisticsType
+     * @param userPhone
+     */
+    @Override
+    public void queryLogistics(String logistics, String logisticsType, String userPhone) {
+        Map<String, Object> map = new HashMap<>();
+        map.put("ShipperCode", logisticsType);
+        map.put("LogisticCode", logistics);
+        map.put("CustomerName", userPhone);
+        String design = null;
+        try {
+            design = URLEncoder.encode(Base64.encode(DigestUtil.md5Hex(JSONUtil.toJsonStr(map) + apiKey)), "UTF-8");
+
+        } catch (Exception e) {
+
+        }
+        Map<String, Object> paramMap = new HashMap<>();
+        paramMap.put("RequestData", map);
+        paramMap.put("DataType", 2);
+        paramMap.put("EBusinessID", kuaiDiId);
+        paramMap.put("DataSign", design);
+        paramMap.put("RequestType", KdConstants.orderLogistics);
+        //发请求
+        String res = HttpUtil.post(kuaiDiUrl, paramMap);
+        log.info(logistics + "快递鸟轨迹订阅" + res);
+    }
+
+    @Override
+    public void kdnReturnBackLogistics(Map map) {
+        OrderSendDO sendDO = orderSendManager.getOne(new LambdaQueryWrapper<OrderSendDO>().eq(OrderSendDO::getLogisticsCode, map.get("LogisticCode").toString()).last("limit 1"));
+        if (ObjectUtil.isNotNull(sendDO)) {
+            List<Map> maps = JSON.parseArray(JSON.toJSONString(map.get("Traces")), Map.class);
+            sendDO.setLogistics(maps);
+        }
+        orderSendManager.updateById(sendDO);
+    }
+
 
     /**
      * @param dataJson 业务参数
@@ -244,7 +304,7 @@ public class KuaiDiNiaoServiceImpl implements KuaiDiNiaoService {
      */
 
     @Override
-    public resReturnBackBase kdnReturnBack(ReturnBackBase returnBackBase) {
+    public resReturnBackBase kdnReturnBack(ReturnBackInstant returnBackBase) {
         Map map = JSON.parseObject(returnBackBase.getRequestData(), Map.class);
         resReturnBackBase base = new resReturnBackBase();
         base.setKdnOrderCode(map.get("kdnOrderCode").toString());

+ 1 - 1
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnBackBase.java → module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnBackInstant.java

@@ -7,7 +7,7 @@ import lombok.Data;
  * 快递鸟  预下单商品接收类
  */
 @Data
-public class ReturnBackBase {
+public class ReturnBackInstant {
 
     //客户编号
     private String customerCode;

+ 23 - 0
module-erp/src/main/java/com/hys/app/service/kuaidiniao/entity/ReturnBackLogistics.java

@@ -0,0 +1,23 @@
+package com.hys.app.service.kuaidiniao.entity;
+
+
+import lombok.Data;
+
+/**
+ * 快递鸟  预下单商品接收类
+ */
+@Data
+public class ReturnBackLogistics {
+
+    //用户ID
+    private String EBusinessID;
+
+    //推送时间,示例:2021-01-01 09:00:00
+    private String PushTime;
+
+    //推送的快递单号个数
+    private Integer Count;
+
+    //应用级参数,内容为JSON格式
+    private String Data;
+}

+ 4 - 0
server/src/main/resources/application.yml

@@ -54,6 +54,10 @@ kuaidianiao:
   id: 1663339
   key: 0b15b75c-94b4-482b-a462-fd21e45a50f5
   apiUrl: http://183.62.170.46:38092/tcpapi/orderdist
+  kuaidi:
+    id: 1852670
+    key: 653b24a5-6dd8-40a8-8f69-2a51a71f49a1
+    apiUrl: https://api.kdniao.com/api/dist