Ver Fonte

优化订单状态查询的定时任务

lighter há 2 anos atrás
pai
commit
6e46ca4f18

+ 2 - 2
src/main/java/thyyxxk/wxservice_server/dao/WxApiDao.java

@@ -66,8 +66,8 @@ public interface WxApiDao {
     @Select("select * from t_wechat_pay_order with(nolock) where trade_no=#{tradeNo}")
     WxPayOrder selectOrderByTradeNo(@Param("tradeNo") String tradeNo);
 
-    @Select("select trade_no, query_state_times from t_wechat_pay_order with(nolock) where his_status=0 " +
-            "and order_type<=3 and pay_status in (99, 0, 5, 6, 100) ")
+    @Select("select trade_no, query_state_times,offset=datediff(minute,create_datetime,last_query_state) " +
+            "from t_wechat_pay_order with(nolock) where his_status=0 and order_type<=3 and pay_status in (99, 0, 5, 6, 100) ")
     List<TradeNo> selectTradeNosForScheduleTask();
 
     @Select("select open_id from t_wechat_patient_bind with(nolock) where patient_id=#{cardNo} and del_flag=0")

+ 1 - 0
src/main/java/thyyxxk/wxservice_server/entity/scheduled/TradeNo.java

@@ -6,5 +6,6 @@ import lombok.Data;
 public class TradeNo {
     private String tradeNo;
     private Integer queryStateTimes;
+    private Integer offset;
 }
 

+ 12 - 10
src/main/java/thyyxxk/wxservice_server/scheduled/QueryOrderStateTask.java

@@ -52,18 +52,20 @@ public class QueryOrderStateTask {
     public void queryOrderState() throws Exception {
         if (canScheduleRun && production) {
             List<TradeNo> tradeNos = dao.selectTradeNosForScheduleTask();
-            if (null != tradeNos && !tradeNos.isEmpty()) {
-                log.info("定时查询订单支付状态:{}", tradeNos);
-                for (TradeNo tradeNo : tradeNos) {
-                    if (tradeNo.getQueryStateTimes() >= 20) {
-                        WxPayOrder order = new WxPayOrder();
-                        order.setTradeNo(tradeNo.getTradeNo());
-                        service.closeWxOrder(order);
-                    } else {
-                        service.queryOrderState(tradeNo.getTradeNo(), QuerySource.SCHEDULE);
-                    }
+            log.info("定时查询订单支付状态:{}", tradeNos);
+            for (TradeNo tradeNo : tradeNos) {
+                if (tradeNo.getQueryStateTimes() >= 20 || overOneHour(tradeNo.getOffset())) {
+                    WxPayOrder order = new WxPayOrder();
+                    order.setTradeNo(tradeNo.getTradeNo());
+                    service.closeWxOrder(order);
+                } else {
+                    service.queryOrderState(tradeNo.getTradeNo(), QuerySource.SCHEDULE);
                 }
             }
         }
     }
+
+    private boolean overOneHour(Integer offset) {
+        return null != offset && offset >= 60;
+    }
 }