Bladeren bron

快递鸟相关代码

zyy 1 maand geleden
bovenliggende
commit
42bb1e32e6
30 gewijzigde bestanden met toevoegingen van 479 en 58 verwijderingen
  1. 78 0
      fs-admin/src/main/java/com/fs/kdniao/controller/KdniaoUniversalEOrderController.java
  2. 2 2
      fs-service/src/main/java/com/fs/kdniao/config/KdniaoUniversalConfig.java
  3. 1 1
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoAddServiceNew.java
  4. 1 1
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoCarrierConfig.java
  5. 1 1
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoCommodityNew.java
  6. 1 1
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoPersonNew.java
  7. 1 1
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoSubmitCommand.java
  8. 1 1
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoUniversalResponse.java
  9. 42 0
      fs-service/src/main/java/com/fs/kdniao/domain/KdniaoWaybill.java
  10. 17 0
      fs-service/src/main/java/com/fs/kdniao/mapper/KdniaoWaybillMapper.java
  11. 2 3
      fs-service/src/main/java/com/fs/kdniao/rule/AbstractKdniaoCarrierRule.java
  12. 3 3
      fs-service/src/main/java/com/fs/kdniao/rule/IKdniaoCarrierRule.java
  13. 28 0
      fs-service/src/main/java/com/fs/kdniao/rule/impl/BnsyCarrierRule.java
  14. 28 0
      fs-service/src/main/java/com/fs/kdniao/rule/impl/CncyCarrierRule.java
  15. 28 0
      fs-service/src/main/java/com/fs/kdniao/rule/impl/CnsdCarrierRule.java
  16. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/DefaultCarrierRule.java
  17. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/EmsCarrierRule.java
  18. 28 0
      fs-service/src/main/java/com/fs/kdniao/rule/impl/FypCarrierRule.java
  19. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/JdKyCarrierRule.java
  20. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/JdsxyyCarrierRule.java
  21. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/JosCarrierRule.java
  22. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/SfCarrierRule.java
  23. 28 0
      fs-service/src/main/java/com/fs/kdniao/rule/impl/YjyyllCarrierRule.java
  24. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/ZtoCarrierRule.java
  25. 4 4
      fs-service/src/main/java/com/fs/kdniao/rule/impl/ZtoColdCarrierRule.java
  26. 3 3
      fs-service/src/main/java/com/fs/kdniao/service/IKdniaoUniversalEOrderService.java
  27. 94 0
      fs-service/src/main/java/com/fs/kdniao/service/KdniaoWaybillService.java
  28. 11 8
      fs-service/src/main/java/com/fs/kdniao/service/impl/KdniaoUniversalEOrderServiceImpl.java
  29. 1 1
      fs-service/src/main/java/com/fs/kdniao/util/KdniaoRequestUtil.java
  30. 48 0
      fs-service/src/main/resources/mapper/Kdniao/KdniaoWaybillMapper.xml

+ 78 - 0
fs-admin/src/main/java/com/fs/kdniao/controller/KdniaoUniversalEOrderController.java

@@ -0,0 +1,78 @@
+package com.fs.kdniao.controller;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.domain.KdniaoUniversalResponse;
+import com.fs.kdniao.domain.KdniaoWaybill;
+import com.fs.kdniao.service.IKdniaoUniversalEOrderService;
+import com.fs.kdniao.service.KdniaoWaybillService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 快递鸟统一电子面单控制器
+ */
+@RestController
+@RequestMapping("/kdniao/universal/eorder")
+public class KdniaoUniversalEOrderController extends BaseController {
+
+    @Autowired
+    private IKdniaoUniversalEOrderService kdniaoUniversalEOrderService;
+
+    @Autowired
+    private KdniaoWaybillService kdniaoWaybillService;
+
+
+    /**
+     * 统一下单
+     */
+    @Log(title = "快递鸟统一电子面单", businessType = BusinessType.INSERT)
+    @PostMapping("/submit")
+    public AjaxResult submit(@RequestBody KdniaoSubmitCommand command) {
+        try {
+            // 1. 先查本地是否已有面单,避免重复下单
+            KdniaoWaybill exist = kdniaoWaybillService.selectByOrderCode(command.getBizOrderNo());
+            if (exist != null) {
+                return AjaxResult.success("该订单已生成面单,返回已保存数据", exist);
+            }
+
+            KdniaoUniversalResponse response = kdniaoUniversalEOrderService.submit(command);
+
+            if (Boolean.TRUE.equals(response.getSuccess()) && "100".equals(response.getResultCode())) {
+                KdniaoWaybill waybill = kdniaoWaybillService.saveWaybill(command, response);
+                return AjaxResult.success("下单成功", waybill);
+            }
+
+            // 订单重复:优先查本地已保存面单
+            if ("106".equals(response.getResultCode())) {
+                KdniaoWaybill dbWaybill = kdniaoWaybillService.selectByOrderCode(command.getBizOrderNo());
+                if (dbWaybill != null) {
+                    return AjaxResult.success("该订单号已存在面单,返回本地保存数据", dbWaybill);
+                }
+                return AjaxResult.error("订单号重复,快递鸟返回:该订单号已下单成功,但本地未保存到面单");
+            }
+
+            return AjaxResult.error("下单失败:" + response.getReason(), response);
+        } catch (Exception e) {
+            return AjaxResult.error("下单异常:" + e.getMessage());
+        }
+    }
+
+
+    /**
+     * 查看订单面单信息
+     */
+//    @PreAuthorize("@ss.hasPermi('store:storeOrder:query')")
+    @GetMapping("/waybill/{orderCode}")
+    public AjaxResult getWaybillInfo(@PathVariable Long orderCode) {
+        KdniaoWaybill waybill = kdniaoWaybillService.selectByOrderCode(String.valueOf(orderCode));
+        if (waybill == null) {
+            return AjaxResult.error("该订单暂无面单信息");
+        }
+
+        return AjaxResult.success(waybill);
+    }
+}

+ 2 - 2
fs-admin/src/main/java/com/fs/kdniaoNew/config/KdniaoUniversalConfig.java → fs-service/src/main/java/com/fs/kdniao/config/KdniaoUniversalConfig.java

@@ -1,6 +1,6 @@
-package com.fs.kdniaoNew.config;
+package com.fs.kdniao.config;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/domain/KdniaoAddServiceNew.java → fs-service/src/main/java/com/fs/kdniao/domain/KdniaoAddServiceNew.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.domain;
+package com.fs.kdniao.domain;
 
 import lombok.Data;
 

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/domain/KdniaoCarrierConfig.java → fs-service/src/main/java/com/fs/kdniao/domain/KdniaoCarrierConfig.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.domain;
+package com.fs.kdniao.domain;
 
 import lombok.Data;
 

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/domain/KdniaoCommodityNew.java → fs-service/src/main/java/com/fs/kdniao/domain/KdniaoCommodityNew.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.domain;
+package com.fs.kdniao.domain;
 
 import lombok.Data;
 

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/domain/KdniaoPersonNew.java → fs-service/src/main/java/com/fs/kdniao/domain/KdniaoPersonNew.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.domain;
+package com.fs.kdniao.domain;
 
 import lombok.Data;
 

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/domain/KdniaoSubmitCommand.java → fs-service/src/main/java/com/fs/kdniao/domain/KdniaoSubmitCommand.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.domain;
+package com.fs.kdniao.domain;
 
 import lombok.Data;
 

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/domain/KdniaoUniversalResponse.java → fs-service/src/main/java/com/fs/kdniao/domain/KdniaoUniversalResponse.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.domain;
+package com.fs.kdniao.domain;
 
 import lombok.Data;
 

+ 42 - 0
fs-service/src/main/java/com/fs/kdniao/domain/KdniaoWaybill.java

@@ -0,0 +1,42 @@
+package com.fs.kdniao.domain;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 增值服务
+ */
+@Data
+public class KdniaoWaybill {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 业务订单号(系统的订单号)
+     */
+    private String orderCode;
+
+    /**
+     * 运单号(快递鸟返回)
+     */
+    private String logisticCode;
+
+    /**
+     * 快递公司编码(SF / EMS / ZTO)
+     */
+    private String shipperCode;
+
+    /**
+     * 面单HTML(用于预览/打印)
+     */
+    private String printTemplate;
+
+    /**
+     * 创建时间
+     */
+    private Date createTime;
+}

+ 17 - 0
fs-service/src/main/java/com/fs/kdniao/mapper/KdniaoWaybillMapper.java

@@ -0,0 +1,17 @@
+package com.fs.kdniao.mapper;
+
+import com.fs.kdniao.domain.KdniaoWaybill;
+import org.apache.ibatis.annotations.Param;
+
+public interface KdniaoWaybillMapper {
+
+    /**
+     * 保存面单
+     */
+    int insertKdniaoWaybill(KdniaoWaybill waybill);
+
+    /**
+     * 根据业务订单号查询面单
+     */
+    KdniaoWaybill selectKdniaoWaybillByOrderCode(@Param("orderCode") String orderCode);
+}

+ 2 - 3
fs-admin/src/main/java/com/fs/kdniaoNew/rule/AbstractKdniaoCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/AbstractKdniaoCarrierRule.java

@@ -1,7 +1,6 @@
-package com.fs.kdniaoNew.rule;
+package com.fs.kdniao.rule;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
 import org.springframework.util.StringUtils;
 
 import java.math.BigDecimal;

+ 3 - 3
fs-admin/src/main/java/com/fs/kdniaoNew/rule/IKdniaoCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/IKdniaoCarrierRule.java

@@ -1,7 +1,7 @@
-package com.fs.kdniaoNew.rule;
+package com.fs.kdniao.rule;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
 
 import java.util.Map;
 

+ 28 - 0
fs-service/src/main/java/com/fs/kdniao/rule/impl/BnsyCarrierRule.java

@@ -0,0 +1,28 @@
+package com.fs.kdniao.rule.impl;//package com.fs.kdniaoNew.rule.impl;
+//
+//import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
+//import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+//import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+///**
+// * 笨鸟速运规则
+// */
+//@Component
+//public class BnsyCarrierRule extends AbstractKdniaoCarrierRule {
+//
+//    @Override
+//    public boolean supports(String shipperCode) {
+//        return "BNSY".equalsIgnoreCase(shipperCode);
+//    }
+//
+//    @Override
+//    public void apply(KdniaoSubmitCommand command, KdniaoCarrierConfig config, Map<String, Object> requestData) {
+//        require(config != null, "笨鸟速运未配置账号信息");
+//        requireText(config.getCustomerName(), "笨鸟速运要求customerName不能为空");
+//        fillAccountFields(config, requestData);
+//        fillCommandExtraFields(command, requestData);
+//    }
+//}

+ 28 - 0
fs-service/src/main/java/com/fs/kdniao/rule/impl/CncyCarrierRule.java

@@ -0,0 +1,28 @@
+package com.fs.kdniao.rule.impl;//package com.fs.kdniaoNew.rule.impl;
+//
+//import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
+//import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+//import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+///**
+// * 菜鸟橙运规则
+// */
+//@Component
+//public class CncyCarrierRule extends AbstractKdniaoCarrierRule {
+//
+//    @Override
+//    public boolean supports(String shipperCode) {
+//        return "CNCY".equalsIgnoreCase(shipperCode);
+//    }
+//
+//    @Override
+//    public void apply(KdniaoSubmitCommand command, KdniaoCarrierConfig config, Map<String, Object> requestData) {
+//        require(config != null, "菜鸟橙运未配置账号信息");
+//        requireText(config.getCustomerName(), "菜鸟橙运要求customerName不能为空");
+//        fillAccountFields(config, requestData);
+//        fillCommandExtraFields(command, requestData);
+//    }
+//}

+ 28 - 0
fs-service/src/main/java/com/fs/kdniao/rule/impl/CnsdCarrierRule.java

@@ -0,0 +1,28 @@
+package com.fs.kdniao.rule.impl;//package com.fs.kdniaoNew.rule.impl;
+//
+//import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
+//import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+//import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+///**
+// * 菜鸟速递规则
+// */
+//@Component
+//public class CnsdCarrierRule extends AbstractKdniaoCarrierRule {
+//
+//    @Override
+//    public boolean supports(String shipperCode) {
+//        return "CNSD".equalsIgnoreCase(shipperCode);
+//    }
+//
+//    @Override
+//    public void apply(KdniaoSubmitCommand command, KdniaoCarrierConfig config, Map<String, Object> requestData) {
+//        require(config != null, "菜鸟速递未配置账号信息");
+//        requireText(config.getCustomerName(), "菜鸟速递要求customerName不能为空");
+//        fillAccountFields(config, requestData);
+//        fillCommandExtraFields(command, requestData);
+//    }
+//}

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/DefaultCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/DefaultCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/EmsCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/EmsCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 

+ 28 - 0
fs-service/src/main/java/com/fs/kdniao/rule/impl/FypCarrierRule.java

@@ -0,0 +1,28 @@
+package com.fs.kdniao.rule.impl;//package com.fs.kdniaoNew.rule.impl;
+//
+//import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
+//import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+//import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+///**
+// * 丰云配规则
+// */
+//@Component
+//public class FypCarrierRule extends AbstractKdniaoCarrierRule {
+//
+//    @Override
+//    public boolean supports(String shipperCode) {
+//        return "FYP".equalsIgnoreCase(shipperCode);
+//    }
+//
+//    @Override
+//    public void apply(KdniaoSubmitCommand command, KdniaoCarrierConfig config, Map<String, Object> requestData) {
+//        require(config != null, "丰云配未配置账号信息");
+//        requireText(config.getCustomerName(), "丰云配要求customerName不能为空");
+//        fillAccountFields(config, requestData);
+//        fillCommandExtraFields(command, requestData);
+//    }
+//}

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/JdKyCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/JdKyCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/JdsxyyCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/JdsxyyCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/JosCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/JosCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/SfCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/SfCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 28 - 0
fs-service/src/main/java/com/fs/kdniao/rule/impl/YjyyllCarrierRule.java

@@ -0,0 +1,28 @@
+package com.fs.kdniao.rule.impl;//package com.fs.kdniaoNew.rule.impl;
+//
+//import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
+//import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
+//import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+//import org.springframework.stereotype.Component;
+//
+//import java.util.Map;
+//
+///**
+// * 云集医药冷链规则
+// */
+//@Component
+//public class YjyyllCarrierRule extends AbstractKdniaoCarrierRule {
+//
+//    @Override
+//    public boolean supports(String shipperCode) {
+//        return "YJYYLL".equalsIgnoreCase(shipperCode);
+//    }
+//
+//    @Override
+//    public void apply(KdniaoSubmitCommand command, KdniaoCarrierConfig config, Map<String, Object> requestData) {
+//        require(config != null, "云集医药冷链未配置账号信息");
+//        requireText(config.getCustomerName(), "云集医药冷链要求customerName不能为空");
+//        fillAccountFields(config, requestData);
+//        fillCommandExtraFields(command, requestData);
+//    }
+//}

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/ZtoCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/ZtoCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 4 - 4
fs-admin/src/main/java/com/fs/kdniaoNew/rule/impl/ZtoColdCarrierRule.java → fs-service/src/main/java/com/fs/kdniao/rule/impl/ZtoColdCarrierRule.java

@@ -1,8 +1,8 @@
-package com.fs.kdniaoNew.rule.impl;
+package com.fs.kdniao.rule.impl;
 
-import com.fs.kdniaoNew.domain.KdniaoCarrierConfig;
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.rule.AbstractKdniaoCarrierRule;
+import com.fs.kdniao.domain.KdniaoCarrierConfig;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.rule.AbstractKdniaoCarrierRule;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;

+ 3 - 3
fs-admin/src/main/java/com/fs/kdniaoNew/service/IKdniaoUniversalEOrderService.java → fs-service/src/main/java/com/fs/kdniao/service/IKdniaoUniversalEOrderService.java

@@ -1,7 +1,7 @@
-package com.fs.kdniaoNew.service;
+package com.fs.kdniao.service;
 
-import com.fs.kdniaoNew.domain.KdniaoSubmitCommand;
-import com.fs.kdniaoNew.domain.KdniaoUniversalResponse;
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.domain.KdniaoUniversalResponse;
 
 /**
  * 快递鸟统一电子面单服务

+ 94 - 0
fs-service/src/main/java/com/fs/kdniao/service/KdniaoWaybillService.java

@@ -0,0 +1,94 @@
+package com.fs.kdniao.service;
+
+
+import com.fs.kdniao.domain.KdniaoSubmitCommand;
+import com.fs.kdniao.domain.KdniaoUniversalResponse;
+import com.fs.kdniao.domain.KdniaoWaybill;
+import com.fs.kdniao.mapper.KdniaoWaybillMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.Map;
+
+/**
+ * 快递鸟统一电子面单服务
+ */
+@Service
+public class KdniaoWaybillService {
+    @Autowired
+    private KdniaoWaybillMapper kdniaoWaybillMapper;
+
+    /**
+     * 根据业务订单号查询面单
+     */
+    public KdniaoWaybill selectByOrderCode(String orderCode) {
+        return kdniaoWaybillMapper.selectKdniaoWaybillByOrderCode(orderCode);
+    }
+
+    /**
+     * 保存面单
+     *
+     * 逻辑说明:
+     * 1. 先查数据库,防止重复保存
+     * 2. 校验快递鸟返回是否成功
+     * 3. 从 response.Order 这个 Map 中提取 LogisticCode
+     * 4. 保存 printTemplate
+     */
+    public KdniaoWaybill saveWaybill(KdniaoSubmitCommand command, KdniaoUniversalResponse response) {
+
+        // 1. 防重复
+        KdniaoWaybill exist = kdniaoWaybillMapper.selectKdniaoWaybillByOrderCode(command.getBizOrderNo());
+        if (exist != null) {
+            return exist;
+        }
+
+        // 2. 基础校验
+        if (response == null) {
+            throw new RuntimeException("快递鸟返回为空,无法保存面单");
+        }
+
+        if (!Boolean.TRUE.equals(response.getSuccess())) {
+            throw new RuntimeException("快递鸟下单失败,无法保存面单:" + response.getReason());
+        }
+
+        // 3. 从 Map<String,Object> Order 中取运单号
+        String logisticCode = extractLogisticCode(response.getOrder());
+
+        if (!StringUtils.hasText(logisticCode)) {
+            throw new RuntimeException("快递鸟返回成功,但未获取到LogisticCode");
+        }
+
+        if (!StringUtils.hasText(response.getPrintTemplate())) {
+            throw new RuntimeException("快递鸟返回成功,但未获取到PrintTemplate");
+        }
+
+        // 4. 组装实体
+        KdniaoWaybill waybill = new KdniaoWaybill();
+        waybill.setOrderCode(command.getBizOrderNo());
+        waybill.setShipperCode(command.getShipperCode());
+        waybill.setLogisticCode(logisticCode);
+        waybill.setPrintTemplate(response.getPrintTemplate());
+
+        // 5. 落库
+        kdniaoWaybillMapper.insertKdniaoWaybill(waybill);
+
+        return waybill;
+    }
+
+    /**
+     * 从快递鸟返回的 Order Map 中提取运单号
+     */
+    private String extractLogisticCode(Map<String, Object> orderMap) {
+        if (orderMap == null || orderMap.isEmpty()) {
+            return null;
+        }
+
+        Object logisticCodeObj = orderMap.get("LogisticCode");
+        if (logisticCodeObj == null) {
+            return null;
+        }
+
+        return String.valueOf(logisticCodeObj);
+    }
+}

+ 11 - 8
fs-admin/src/main/java/com/fs/kdniaoNew/service/impl/KdniaoUniversalEOrderServiceImpl.java → fs-service/src/main/java/com/fs/kdniao/service/impl/KdniaoUniversalEOrderServiceImpl.java

@@ -1,17 +1,20 @@
-package com.fs.kdniaoNew.service.impl;
+package com.fs.kdniao.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.fs.kdniaoNew.config.KdniaoUniversalConfig;
-import com.fs.kdniaoNew.domain.*;
-import com.fs.kdniaoNew.rule.IKdniaoCarrierRule;
-import com.fs.kdniaoNew.rule.impl.DefaultCarrierRule;
-import com.fs.kdniaoNew.service.IKdniaoUniversalEOrderService;
-import com.fs.kdniaoNew.util.KdniaoRequestUtil;
+import com.fs.kdniao.config.KdniaoUniversalConfig;
+import com.fs.kdniao.domain.*;
+import com.fs.kdniao.rule.IKdniaoCarrierRule;
+import com.fs.kdniao.rule.impl.DefaultCarrierRule;
+import com.fs.kdniao.service.IKdniaoUniversalEOrderService;
+import com.fs.kdniao.util.KdniaoRequestUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import java.net.URLEncoder;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**

+ 1 - 1
fs-admin/src/main/java/com/fs/kdniaoNew/util/KdniaoRequestUtil.java → fs-service/src/main/java/com/fs/kdniao/util/KdniaoRequestUtil.java

@@ -1,4 +1,4 @@
-package com.fs.kdniaoNew.util;
+package com.fs.kdniao.util;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;

+ 48 - 0
fs-service/src/main/resources/mapper/Kdniao/KdniaoWaybillMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.kdniaoNew.mapper.KdniaoWaybillMapper">
+
+    <resultMap id="KdniaoWaybillResult" type="com.fs.kdniao.domain.KdniaoWaybill">
+        <id property="id" column="id"/>
+        <result property="orderCode" column="order_code"/>
+        <result property="logisticCode" column="logistic_code"/>
+        <result property="shipperCode" column="shipper_code"/>
+        <result property="printTemplate" column="print_template"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <insert id="insertKdniaoWaybill" parameterType="com.fs.kdniao.domain.KdniaoWaybill" useGeneratedKeys="true" keyProperty="id">
+        insert into kdniao_waybill
+        (
+            order_code,
+            logistic_code,
+            shipper_code,
+            print_template,
+            create_time
+        )
+        values
+            (
+                #{orderCode},
+                #{logisticCode},
+                #{shipperCode},
+                #{printTemplate},
+                now()
+            )
+    </insert>
+
+    <select id="selectKdniaoWaybillByOrderCode" resultMap="KdniaoWaybillResult">
+        select
+            id,
+            order_code,
+            logistic_code,
+            shipper_code,
+            print_template,
+            create_time
+        from kdniao_waybill
+        where order_code = #{orderCode}
+            limit 1
+    </select>
+
+</mapper>