Jelajahi Sumber

存在文化发货批量导入

yjwang 22 jam lalu
induk
melakukan
e6eb0cadb8

+ 1 - 3
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java

@@ -312,9 +312,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
             param.setBeginTime(null);
             param.setEndTime(null);
         }
-        if (fsStoreOrderService.isEntityNull(param)){
-            return AjaxResult.error("请筛选数据导出");
-        }else if(param.getProductId() == null || param.getProductId() <= 0L){
+         if(fsStoreOrderService.isEntityNull(param) || param.getProductId() == null || param.getProductId() <= 0L){
             return AjaxResult.error("查询条件,请选择发货商品!");
         }
         if(!StringUtils.isEmpty(param.getCreateTimeRange())){

+ 64 - 26
fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java

@@ -10,43 +10,81 @@ import java.math.BigDecimal;
  * **/
 @Data
 public class FsOrderDeliveryNoteDTO {
-    /**
-     * 系统订单号
-     * **/
-    @Excel(name = "系统订单号(必填)",width = 20,sort = 1)
+    //系统订单号
+    @Excel(name = "原始单号",width = 20,sort = 1)
     private String orderNumber;
 
-    @Excel(name = "物流公司编号(必填)(SF:顺丰、EMS:邮政、ZTO:中通、JD:京东、DBL:德邦)",width = 30,sort = 2)
-    private String deliverySn;
+    @Excel(name = "收件人",width = 10,sort = 2)
+    private String recipient;
 
-    private String deliveryName;
+    @Excel(name = "收件人手机",width = 20,sort = 3)
+    private String recipientPhone;
 
-    @Excel(name = "快递单号(必填)",width = 20,sort = 3)
-    private String deliveryId;
+    @Excel(name = "收件人电话",width = 20,sort = 4)
+    private String recipientTelephone;
+
+    //具体到某个街道和小区
+    @Excel(name = "收件人详细地址",width = 30,sort = 5)
+    private String recipientAddress;
+
+//    //省市区
+//    @Excel(name = "收货地址",width = 20,sort = 6)
+//    private String receivingAddress;
+
+    //编号和数量:662551*2
+    @Excel(name = "组合编号及数量",width = 20,sort = 7)
+    private String number;
+
+    //名称和数量:商品名称*2
+    @Excel(name = "组合名称及数量",width = 20,sort = 8)
+    private String nameAndNumber;
+
+    @Excel(name = "代收金额",width = 10,sort = 9)
+    private BigDecimal collectionAmount;
+
+    @Excel(name = "物流公司",width = 10,sort = 10)
+    private String logisticsCompany;
 
-    @Excel(name = "物流状态(0:暂无信息、1:已揽收、2:在途中、3:签收、4:问题件)",width = 40,sort = 4)
-    private Integer deliveryStatus;
+    @Excel(name = "物流产品",width = 10,sort = 11)
+    private String logisticsProduct;
 
-    @Excel(name = "物流结算费用",width = 20,sort = 5)
-    private BigDecimal deliveryPayMoney;
+    @Excel(name = "物流付款方式",width = 15,sort = 12)
+    private String logisticsPayMethod;
 
-    @Excel(name = "物流跟踪状态(311:快递柜或驿站签收、304:派件异常后最终签收、301:正常签收、211:已放入快递柜或驿站、202:派件中、201:到达派件城市、401:发货无信息、412:快递柜或驿站超时未取、407:退货未签收)",width = 40,sort = 6)
-    private Integer deliveryType;
+    @Excel(name = "包裹数",width = 10,sort = 13)
+    private Long packageNum;
 
-    @Excel(name = "物流结算状态(1:已结算、2:冻结、3:解冻、4:退回运费、5.调账)",width = 20,sort = 7)
-    private Integer deliveryPayStatus;
+    @Excel(name = "寄件人",width = 10,sort = 14)
+    private String sender;
 
-    @Excel(name = "快递账单日期",width = 20,sort = 8)
-    private String deliveryTime;
+    @Excel(name = "寄件人手机",width = 20,sort = 15)
+    private String senderPhone;
 
-    @Excel(name = "快递结算日期",width = 20,sort = 9)
-    private String deliveryPayTime;
+    @Excel(name = "寄件人电话",width = 20,sort = 16)
+    private String senderTelephone;
 
-//    /**
-//     * 发货状态
-//     * **/
-//    @Excel(name = "系统订单号(1:待发货、2:待收货、3:交易完成,-3:已取消)填写对应数字",width = 40,sort = 7)
-//    private Integer deliveryNoteStatus;
+    @Excel(name = "寄件公司",width = 10,sort = 17)
+    private String senderCompany;
+
+    //具体到某个街道和小区
+    @Excel(name = "寄件人详细地址",width = 30,sort = 18)
+    private String senderAddress;
+
+    @Excel(name = "出库仓库",width = 10,sort = 19)
+    private String outboundWarehouse;
+
+    @Excel(name = "订单付款方式",width = 10,sort = 20)
+    private String payMethod;
+
+    @Excel(name = "订单备注",width = 20,sort = 21)
+    private String orderNotes;
+
+    @Excel(name = "快递单号(必填)",width = 20,sort = 22)
+    private String deliveryId;
+
+    //物流编码
+    private String deliverySn;
 
+    //发货状态
     private Integer deliveryNoteStatus;
 }

+ 47 - 28
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreOrderScrmServiceImpl.java

@@ -3603,9 +3603,14 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 if (StringUtils.isEmpty(dto.getOrderNumber())) {
                     builder.append("数据第").append(i + 2).append("行系统订单为空!").append(System.lineSeparator());
                 } else {
+                    //处理订单ID信息
+                    String originalOrderNumber = dto.getOrderNumber();
+                    String processedOrderNumber = extractNumbers(originalOrderNumber);
+                    dto.setOrderNumber(processedOrderNumber);
                     orderCodeList.add(dto.getOrderNumber());
                 }
             }
+
             //批量查询订单信息
             if (orderCodeList.isEmpty()) {
                 return R.ok(builder.toString());
@@ -3615,7 +3620,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
             Map<String, List<FsStoreOrderCodeOpenIdVo>> orderDetailsMap = new HashMap<>(orderCodeOpenIdVoList.size());
 
             for (FsStoreOrderCodeOpenIdVo vo : orderCodeOpenIdVoList) {
-                orderMap.computeIfAbsent(vo.getOrderCode(), k -> {
+                orderMap.computeIfAbsent(vo.getId(), k -> {
                     OrderOpenIdTransDTO dto = new OrderOpenIdTransDTO();
                     dto.setOpenId(vo.getOpenId());
                     dto.setTransactionId(vo.getOutTransId());
@@ -3623,7 +3628,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                 });
 
                 orderDetailsMap
-                        .computeIfAbsent(vo.getOrderCode(), k -> new ArrayList<>())
+                        .computeIfAbsent(vo.getId(), k -> new ArrayList<>())
                         .add(vo);
             }
             final WxMaService wxService = WxMaConfiguration.getMaService(appId);
@@ -3642,31 +3647,31 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                     continue;
                 }
 
-                if (StringUtils.isEmpty(dto.getDeliverySn())) {
+                if (StringUtils.isEmpty(dto.getLogisticsCompany())) {
                     builder.append("数据第").append(rowNum).append("行快递公司编号为空!")
                             .append(System.lineSeparator());
                     continue;
                 }
-                if (dto.getDeliveryStatus() == null) {
-                    dto.setDeliveryStatus(0);
-                }
-                if (ObjectUtil.isNotNull(dto.getDeliveryTime())) {
-                    dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
-                }
-
-                if (ObjectUtil.isNotNull(dto.getDeliveryPayTime()) &&
-                        !dto.getDeliveryPayTime().isEmpty()) {
-                    dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
-                }
+//                if (dto.getDeliveryStatus() == null) {
+//                    dto.setDeliveryStatus(0);
+//                }
+//                if (ObjectUtil.isNotNull(dto.getDeliveryTime())) {
+//                    dto.setDeliveryTime(parseCstToDateOnlyString(dto.getDeliveryTime()));
+//                }
+//
+//                if (ObjectUtil.isNotNull(dto.getDeliveryPayTime()) &&
+//                        !dto.getDeliveryPayTime().isEmpty()) {
+//                    dto.setDeliveryPayTime(parseCstToDateOnlyString(dto.getDeliveryPayTime()));
+//                }
                 // 验证快递公司
-                String deliveryName = expressDeliveryMap.get(dto.getDeliverySn());
-                if (deliveryName == null) {
+                String deliverySn = expressDeliveryMap.get(dto.getLogisticsCompany());
+                if (deliverySn == null) {
                     builder.append("数据第").append(rowNum).append("行订单号为")
-                            .append(dto.getOrderNumber()).append("物流编码异常")
+                            .append(dto.getOrderNumber()).append("物流公司名称异常")
                             .append(System.lineSeparator());
                     continue;
                 }
-                dto.setDeliveryName(deliveryName);
+                dto.setDeliverySn(deliverySn);
 
                 // 检查订单是否存在
                 String orderNumber = dto.getOrderNumber();
@@ -3690,6 +3695,7 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
                     successList.add(dto);
                 }
             }
+
             //批量更新数据
             if (!successList.isEmpty()) {
                 batchUpdateDeliveryNotes(successList);
@@ -3948,24 +3954,37 @@ public class FsStoreOrderScrmServiceImpl implements IFsStoreOrderScrmService {
         }
     }
 
-    public static String parseCstToDateOnlyString(String cstDateStr) {
-        LocalDateTime dateTime = parseCstToLocalDateTime(cstDateStr);
-        return dateTime != null ? dateTime.format(DATE_ONLY_FORMATTER) : null;
-    }
+//    public static String parseCstToDateOnlyString(String cstDateStr) {
+//        LocalDateTime dateTime = parseCstToLocalDateTime(cstDateStr);
+//        return dateTime != null ? dateTime.format(DATE_ONLY_FORMATTER) : null;
+//    }
     private static final Map<String, String> EXPRESS_DELIVERY_MAP = createExpressDeliveryMap();
 
     private static Map<String, String> createExpressDeliveryMap() {
         Map<String, String> map = new HashMap<>();
-        map.put("SF", "顺丰");
-        map.put("EMS", "邮政");
-        map.put("ZTO", "中通");
-        map.put("JD", "京东");
-        map.put("DBL", "德邦");
-        map.put("YT", "圆通");
+        map.put("顺丰", "SF");
+        map.put("邮政", "EMS");
+        map.put("中通", "ZTO");
+        map.put("京东", "JD");
+        map.put("德邦", "DBL");
+        map.put("圆通", "YT");
         return map;
     }
 
     public Map<String, String> buildExpressDeliveryMap() {
         return EXPRESS_DELIVERY_MAP;
     }
+
+    //高性能截取订单ID
+    private static String extractNumbers(String str) {
+        if (str == null || str.isEmpty()) {
+            return "";
+        }
+        int start = 0;
+        int len = str.length();
+        while (start < len && !Character.isDigit(str.charAt(start))) {
+            start++;
+        }
+        return start < len ? str.substring(start) : "";
+    }
 }

+ 7 - 2
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreOrderCodeOpenIdVo.java

@@ -5,10 +5,15 @@ import lombok.Data;
 import java.io.Serializable;
 @Data
 public class FsStoreOrderCodeOpenIdVo implements Serializable {
+//    /**
+//     * 订单编码
+//     * **/
+//    private String orderCode;
+
     /**
-     * 订单编码
+     * 订单id
      * **/
-    private String orderCode;
+    private String id;
 
     /**
      * 用户openId

+ 8 - 59
fs-service/src/main/resources/mapper/hisStore/FsStoreOrderScrmMapper.xml

@@ -885,81 +885,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <set>
             delivery_sn = CASE
             <foreach collection="list" item="item">
-                WHEN order_code = #{item.orderNumber} THEN #{item.deliverySn}
+                WHEN id = #{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}
+                WHEN id = #{item.orderNumber} THEN #{item.logisticsCompany}
             </foreach>
             ELSE delivery_name
             END,
             delivery_id = CASE
             <foreach collection="list" item="item">
-                WHEN order_code = #{item.orderNumber} THEN #{item.deliveryId}
+                WHEN id = #{item.orderNumber} THEN #{item.deliveryId}
             </foreach>
             ELSE delivery_id
             END,
-
-            delivery_status = CASE
-            <foreach collection="list" item="item">
-                WHEN order_code = #{item.orderNumber} THEN #{item.deliveryStatus}
-            </foreach>
-            ELSE delivery_status
-            END,
-
             status = CASE
             WHEN status = 1 THEN 2
             ELSE status
             END,
-            delivery_send_time = NOW(),
-            <if test="list != null and list.size() > 0 and list[0].deliveryPayMoney != null">
-                delivery_pay_money = CASE
-                <foreach collection="list" item="item">
-                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryPayMoney}
-                </foreach>
-                ELSE delivery_pay_money
-                END,
-            </if>
-
-            <if test="list != null and list.size() > 0 and list[0].deliveryType != null">
-                delivery_type = CASE
-                <foreach collection="list" item="item">
-                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryType}
-                </foreach>
-                ELSE delivery_type
-                END,
-            </if>
-
-            <if test="list != null and list.size() > 0 and list[0].deliveryPayStatus != null">
-                delivery_pay_status = CASE
-                <foreach collection="list" item="item">
-                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryPayStatus}
-                </foreach>
-                ELSE delivery_pay_status
-                END,
-            </if>
-
-            <if test="list != null and list.size() > 0 and list[0].deliveryTime != null">
-                delivery_time = CASE
-                <foreach collection="list" item="item">
-                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryTime}
-                </foreach>
-                ELSE delivery_time
-                END,
-            </if>
-
-            <if test="list != null and list.size() > 0 and list[0].deliveryPayTime != null">
-                delivery_pay_time = CASE
-                <foreach collection="list" item="item">
-                    WHEN order_code = #{item.orderNumber} THEN #{item.deliveryPayTime}
-                </foreach>
-                ELSE delivery_pay_time
-                END
-            </if>
+            delivery_send_time = NOW()
         </set>
-        WHERE order_code IN
+        WHERE id IN
         <foreach collection="list" item="item" open="(" separator="," close=")">
             #{item.orderNumber}
         </foreach>
@@ -974,7 +922,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="selectOrderCodeOpenIdInOrderCode" resultType="com.fs.hisStore.vo.FsStoreOrderCodeOpenIdVo">
         SELECT
-        os.order_code,
+        os.id,
         fu.phone,
         fu.ma_open_id openId,
         ois.json_info,
@@ -984,7 +932,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         INNER JOIN fs_user fu ON os.user_id = fu.user_id
         INNER JOIN fs_store_order_item_scrm ois ON ois.order_id = os.id
         INNER JOIN fs_store_payment_scrm sps ON os.id=sps.order_id
-                                                  WHERE os.order_code IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
+                                                  WHERE os.id IN <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
         #{item}
     </foreach>
     AND  sps.`status` = 1
@@ -1001,6 +949,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             sos.paid = 1
           AND sps.business_type = 2
           AND sos.`status` = 2
+          AND sps.`status`=1
           AND DATEDIFF(
                       NOW(),
                       sos.delivery_send_time