Просмотр исходного кода

新增快递定时查询功能

codingliang 2 лет назад
Родитель
Сommit
dfdefaffbf

+ 2 - 2
src/main/java/com/study/mall/controller/OrderExpressInfoController.java

@@ -112,7 +112,7 @@ public class OrderExpressInfoController {
                 .put("returnCode", "200")
                 .put("returnCode", "200")
                 .put("message", "提交成功")
                 .put("message", "提交成功")
                 .build();
                 .build();
-        // 响应500
-        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(result);
+        // 响应200
+        return ResponseEntity.status(HttpStatus.OK).body(result);
     }
     }
 }
 }

+ 1 - 1
src/main/java/com/study/mall/entity/OrderExpressInfoEntity.java

@@ -49,7 +49,7 @@ public class OrderExpressInfoEntity implements Serializable {
 	 */
 	 */
 	private String detail;
 	private String detail;
 	/**
 	/**
-	 * 状态;0在途、1 揽收、2疑难、3签收、4退签、5派件、6退回、7转投、8清关、14拒签
+	 * 状态;0在途、1 揽收、2疑难、3签收、4退签、5派件、6退回、7转投、8清关、14拒签、99已发货
 	 */
 	 */
 	private String state;
 	private String state;
 	/**
 	/**

+ 45 - 0
src/main/java/com/study/mall/scheduler/ExpressScheduler.java

@@ -0,0 +1,45 @@
+package com.study.mall.scheduler;
+
+import com.study.mall.service.OrderExpressInfoService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 快递定时查询
+ *
+ * @auther: codingliang
+ * @date: 2023-12-14 17:08
+ * @description: 快递定时查询
+ */
+@Slf4j
+@Async
+@Component
+@RequiredArgsConstructor
+public class ExpressScheduler {
+
+    private final OrderExpressInfoService orderExpressInfoService;
+    private final RedissonClient redissonClient;
+
+    private final static String EXPRESS_QUERY_LOCK = "cloud:mall:lock:express";
+
+    /**
+     * 定时查询运单状态
+     * 每小时运行一次
+     */
+    @Scheduled(cron = "0 0 * * * ?")
+    public void queryExpressState() {
+        RLock lock = redissonClient.getLock(EXPRESS_QUERY_LOCK);
+        lock.lock();
+        try {
+            log.info("查询运单状态...");
+            orderExpressInfoService.queryExpress();
+        } finally {
+            lock.unlock();
+        }
+    }
+}

+ 4 - 8
src/main/java/com/study/mall/scheduler/PayScheduler.java

@@ -2,6 +2,7 @@ package com.study.mall.scheduler;
 
 
 import com.study.mall.service.PayOrderService;
 import com.study.mall.service.PayOrderService;
 import com.study.mall.service.PayRefundService;
 import com.study.mall.service.PayRefundService;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RLock;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.redisson.api.RedissonClient;
@@ -19,20 +20,15 @@ import org.springframework.stereotype.Component;
 @Slf4j
 @Slf4j
 @Async
 @Async
 @Component
 @Component
+@RequiredArgsConstructor
 public class PayScheduler {
 public class PayScheduler {
 
 
     private final PayOrderService payOrderService;
     private final PayOrderService payOrderService;
     private final PayRefundService payRefundService;
     private final PayRefundService payRefundService;
     private final RedissonClient redissonClient;
     private final RedissonClient redissonClient;
 
 
-    private final static String PAY_QUERY_LOCK = "cloud:mall:pay";
-    private final static String PAY_REFUND_QUERY_LOCK = "cloud:mall:pay_refund";
-
-    public PayScheduler(PayOrderService payOrderService, PayRefundService payRefundService, RedissonClient redissonClient) {
-        this.payOrderService = payOrderService;
-        this.payRefundService = payRefundService;
-        this.redissonClient = redissonClient;
-    }
+    private final static String PAY_QUERY_LOCK = "cloud:mall:lock:pay";
+    private final static String PAY_REFUND_QUERY_LOCK = "cloud:mall:lock:pay_refund";
 
 
     /**
     /**
      * 定时查询支付结果
      * 定时查询支付结果

+ 5 - 0
src/main/java/com/study/mall/service/OrderExpressInfoService.java

@@ -31,5 +31,10 @@ public interface OrderExpressInfoService extends IService<OrderExpressInfoEntity
     OrderExpressInfoVO getByOrderExpressId(Long orderExpressId);
     OrderExpressInfoVO getByOrderExpressId(Long orderExpressId);
 
 
     void subNotify(Long orderId, HttpServletRequest request);
     void subNotify(Long orderId, HttpServletRequest request);
+
+    /**
+     * 查询快递状态
+     */
+    void queryExpress();
 }
 }
 
 

+ 17 - 2
src/main/java/com/study/mall/service/impl/OrderExpressInfoServiceImpl.java

@@ -34,6 +34,7 @@ import org.springframework.util.StringUtils;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.util.List;
 
 
 @Slf4j
 @Slf4j
 @Service("orderExpressInfoService")
 @Service("orderExpressInfoService")
@@ -108,7 +109,7 @@ public class OrderExpressInfoServiceImpl extends ServiceImpl<OrderExpressInfoDao
         }
         }
 
 
         orderExpressInfo.setSubFlag("1");
         orderExpressInfo.setSubFlag("1");
-        orderExpressInfo.setState("1");
+        orderExpressInfo.setState("99");
 
 
         // 新增发货信息
         // 新增发货信息
         this.save(orderExpressInfo);
         this.save(orderExpressInfo);
@@ -138,7 +139,6 @@ public class OrderExpressInfoServiceImpl extends ServiceImpl<OrderExpressInfoDao
         orderExpressInfo.setState("1");
         orderExpressInfo.setState("1");
         orderExpressInfo.setUpdateTime(LocalDateTime.now());
         orderExpressInfo.setUpdateTime(LocalDateTime.now());
         orderExpressInfo.setLastQueryTime(null);
         orderExpressInfo.setLastQueryTime(null);
-        orderExpressInfo.setState("1");
         orderExpressInfo.setDetail(null);
         orderExpressInfo.setDetail(null);
 
 
         this.updateById(orderExpressInfo);
         this.updateById(orderExpressInfo);
@@ -203,6 +203,21 @@ public class OrderExpressInfoServiceImpl extends ServiceImpl<OrderExpressInfoDao
     }
     }
 
 
     /**
     /**
+     * 定时查询快递状态
+     */
+    @Override
+    public void queryExpress() {
+        LambdaQueryWrapper<OrderExpressInfoEntity> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.ne(OrderExpressInfoEntity::getState, "3");
+        List<OrderExpressInfoEntity> list = this.list(queryWrapper);
+        for (OrderExpressInfoEntity orderExpressInfo : list) {
+            try {
+                queryExpressInfo(orderExpressInfo);
+            } catch (Exception e) {}
+        }
+    }
+
+    /**
      * 检测物流公司
      * 检测物流公司
      * @param orderExpressInfo
      * @param orderExpressInfo
      * @param expressId
      * @param expressId

+ 5 - 0
src/main/java/com/study/mall/service/impl/OrderInfoServiceImpl.java

@@ -215,6 +215,8 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoDao, OrderInfoEnt
         order.setUpdateBy(order.getUserId());
         order.setUpdateBy(order.getUserId());
 
 
         this.updateById(order);
         this.updateById(order);
+
+        releaseStockNum(orderId);
     }
     }
 
 
     @Override
     @Override
@@ -440,6 +442,9 @@ public class OrderInfoServiceImpl extends ServiceImpl<OrderInfoDao, OrderInfoEnt
 
 
         orderInfo.setState("6");
         orderInfo.setState("6");
         this.updateById(orderInfo);
         this.updateById(orderInfo);
+
+        // 释放库存
+        releaseStockNum(orderId);
     }
     }
 
 
     @Transactional
     @Transactional

+ 2 - 1
src/main/java/com/study/mall/service/impl/PayOrderServiceImpl.java

@@ -83,6 +83,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
 
 
         // 更新支付订单状态
         // 更新支付订单状态
         payOrder.setState("2");
         payOrder.setState("2");
+        payOrder.setRefundFlag("0");
         payOrder.setPayId(transactionId);
         payOrder.setPayId(transactionId);
         payOrder.setPayTime(LocalDateTime.now());
         payOrder.setPayTime(LocalDateTime.now());
 
 
@@ -99,7 +100,7 @@ public class PayOrderServiceImpl extends ServiceImpl<PayOrderDao, PayOrderEntity
         }
         }
 
 
         // 订单为已支付并且是未退款状态
         // 订单为已支付并且是未退款状态
-        if ("2".equals(payOrder.getState()) && "0".equals(payOrder.getRefundFlag())) {
+        if ("2".equals(payOrder.getState()) && (!StringUtils.hasText(payOrder.getRefundFlag()) || "0".equals(payOrder.getRefundFlag()))) {
             payRefundService.applyRefund(payOrder, refundDTO);
             payRefundService.applyRefund(payOrder, refundDTO);
 
 
             payOrder.setRefundFlag("1");
             payOrder.setRefundFlag("1");