Browse Source

优化物流批量导入接口

yjwang 2 months ago
parent
commit
d0f7bc3e7e

+ 35 - 5
fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java

@@ -3,6 +3,8 @@ package com.fs.course.dto;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * 订单发货下载模板
  * **/
@@ -11,12 +13,40 @@ public class FsOrderDeliveryNoteDTO {
     /**
      * 系统订单号
      * **/
-    @Excel(name = "系统订单号(必填)",width = 40,sort = 1)
+    @Excel(name = "系统订单号(必填)",width = 20,sort = 1)
     private String orderNumber;
 
-    /**
-     * 发货状态
-     * **/
-    @Excel(name = "系统订单号(1:待发货、2:待收货、3:交易完成,-3:已取消)填写对应数字",width = 90,sort = 2)
+    @Excel(name = "物流公司编号(必填)(SF:顺丰、EMS:邮政、ZTO:中通、JD:京东、DBL:德邦)",width = 30,sort = 2)
+    private String deliverySn;
+
+    private String deliveryName;
+
+    @Excel(name = "快递单号(必填)",width = 20,sort = 3)
+    private String deliveryId;
+
+    @Excel(name = "物流状态(0:暂无信息、1:已揽收、2:在途中、3:签收、4:问题件)",width = 40,sort = 4)
+    private Integer deliveryStatus;
+
+    @Excel(name = "物流结算费用",width = 20,sort = 5)
+    private BigDecimal deliveryPayMoney;
+
+    @Excel(name = "物流跟踪状态(311:快递柜或驿站签收、304:派件异常后最终签收、301:正常签收、211:已放入快递柜或驿站、202:派件中、201:到达派件城市、401:发货无信息、412:快递柜或驿站超时未取、407:退货未签收)",width = 40,sort = 6)
+    private Integer deliveryType;
+
+    @Excel(name = "物流结算状态(1:已结算、2:冻结、3:解冻、4:退回运费、5.调账)",width = 20,sort = 7)
+    private Integer deliveryPayStatus;
+
+    @Excel(name = "快递账单日期",width = 20,sort = 8)
+    private String deliveryTime;
+
+    @Excel(name = "快递结算日期",width = 20,sort = 9)
+    private String deliveryPayTime;
+
+//    /**
+//     * 发货状态
+//     * **/
+//    @Excel(name = "系统订单号(1:待发货、2:待收货、3:交易完成,-3:已取消)填写对应数字",width = 40,sort = 7)
+//    private Integer deliveryNoteStatus;
+
     private Integer deliveryNoteStatus;
 }

+ 21 - 4
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -2920,15 +2920,17 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         try {
             // 检查必填字段
             List<FsOrderDeliveryNoteDTO> list=new LinkedList<>();
+            Map<String,String> expressDeliveryMap=buildExpressDeliveryMap();
             for (FsOrderDeliveryNoteDTO dto : dtoList) {
                 if (StringUtils.isEmpty(dto.getOrderNumber())) {
                     return R.error("导入失败,系统订单不能为空!");
                 } else if (StringUtils.isEmpty(dto.getDeliveryId())) {
                     return R.error("导入失败,快递单号不能为空!");
-                } else if (StringUtils.isEmpty(dto.getDeliveryName())) {
-                    return R.error("导入失败,快递公司名称不能为空!");
-                } else if (dto.getDeliveryStatus() == null) {
-                    return R.error("导入失败,物流状态不能为空!");
+                } else if (StringUtils.isEmpty(dto.getDeliverySn())) {
+                    return R.error("导入失败,快递公司编号不能为空!");
+                }
+                if (dto.getDeliveryStatus() == null) {
+                    dto.setDeliveryStatus(0);
                 }
                 if(ObjectUtil.isNotNull(dto.getDeliveryTime())){
                     dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
@@ -2936,6 +2938,11 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 if(ObjectUtil.isNotNull(dto.getDeliveryPayTime()) && !dto.getDeliveryPayTime().equals("")){
                     dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
                 }
+                if(expressDeliveryMap.containsKey(dto.getDeliverySn())){
+                    dto.setDeliveryName(expressDeliveryMap.get(dto.getDeliverySn()));
+                }else {
+                    return R.error("导入失败,订单号为"+dto.getOrderNumber()+"物流编码异常,请核对后再导入!");
+                }
                 list.add(dto);
             }
 
@@ -2984,4 +2991,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         return dateTime != null ? dateTime.format(DateTimeFormatter
                 .ofPattern("yyyy-MM-dd")) : null;
     }
+
+    public Map<String,String> buildExpressDeliveryMap(){
+        Map<String,String> map=new HashMap<>();
+        map.put("SF","顺丰");
+        map.put("EMS","邮政");
+        map.put("ZTO","中通");
+        map.put("JD","京东");
+        map.put("DBL","德邦");
+        return map;
+    }
 }

+ 6 - 1
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -883,13 +883,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <update id="batchUpdateInOrderCode">
         UPDATE fs_store_order_scrm
         <set>
+            delivery_sn = CASE
+            <foreach collection="list" item="item">
+                WHEN order_code = #{item.orderNumber} THEN #{item.deliverySn}
+            </foreach>
+            ELSE delivery_sn
+            END,
             delivery_name = CASE
             <foreach collection="list" item="item">
                 WHEN order_code = #{item.orderNumber} THEN #{item.deliveryName}
             </foreach>
             ELSE delivery_name
             END,
-
             delivery_id = CASE
             <foreach collection="list" item="item">
                 WHEN order_code = #{item.orderNumber} THEN #{item.deliveryId}