Pārlūkot izejas kodu

海博订单推送重试机制

wangming 1 nedēļu atpakaļ
vecāks
revīzija
8ffcefd9cb

+ 2 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/PlatformApplication.java

@@ -16,10 +16,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.builder.SpringApplicationBuilder;
 import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 import org.springframework.context.annotation.ComponentScan;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
  * @author lgh
  */
+@EnableScheduling
 @SpringBootApplication
 @ComponentScan("com.yami.shop")
 public class PlatformApplication extends SpringBootServletInitializer{

+ 26 - 0
yami-shop-platform/src/main/java/com/yami/shop/platform/task/OrderPushTask.java

@@ -0,0 +1,26 @@
+package com.yami.shop.platform.task;
+
+import com.yami.shop.service.OrderService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+
+@Component("OrderPushTask")
+public class OrderPushTask {
+
+    private Logger log = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private OrderService orderService;
+
+    @Scheduled(cron = "0 0 */1 * * ?")
+    public synchronized void syncHBOrder() {
+        log.info("海博订单同步定时任务开始");
+        orderService.syncHBOrder();
+        log.info("海博订单同步定时任务结束");
+    }
+
+}

+ 7 - 0
yami-shop-service/src/main/java/com/yami/shop/dao/OrderMapper.java

@@ -150,4 +150,11 @@ public interface OrderMapper extends BaseMapper<Order> {
 
     String getRiderInfo(String orderNumber);
 
+    void addOrderPushLog(@Param("orderNumber") String orderNumber, @Param("isSuccess") Integer isSuccess, @Param("result") String result);
+
+    List<String> syncOrderList();
+
+    Integer getOrderPushLog(String orderNumber);
+
+    void updateOrderPushLog(@Param("orderNumber") String orderNumber, @Param("isSuccess") Integer isSuccess, @Param("result") String result);
 }

+ 2 - 0
yami-shop-service/src/main/java/com/yami/shop/service/OrderService.java

@@ -219,4 +219,6 @@ public interface OrderService extends IService<Order> {
     String addSMOrder(SMOrderPo orderPo);
 
     void returnRefundCheck(String refundNumber);
+
+    void syncHBOrder();
 }

+ 18 - 0
yami-shop-service/src/main/java/com/yami/shop/service/hb/impl/HBOrderService.java

@@ -135,6 +135,24 @@ public class HBOrderService implements IHBOrderService {
         log.info("post 创建订单推送单号参数:{}", JSON.toJSONString(build));
         String post = post(hbSignUtil.getHBHost() + "/api/order/createOrderAsync", build);
         log.info("post 创建订单推送结果:{}", post);
+
+        JSONObject jsonObject = JSONObject.parseObject(post);
+        if (jsonObject!=null){
+            Integer count = orderMapper.getOrderPushLog(channelOrderId);
+            if (count==0){
+                if (jsonObject.getBoolean("success")){
+                    orderMapper.addOrderPushLog(channelOrderId,1,post);
+                }else {
+                    orderMapper.addOrderPushLog(channelOrderId,0,post);
+                }
+            }else {
+                if (jsonObject.getBoolean("success")){
+                    orderMapper.updateOrderPushLog(channelOrderId,1,post);
+                }else {
+                    orderMapper.updateOrderPushLog(channelOrderId,0,post);
+                }
+            }
+        }
         return post;
     }
 

+ 10 - 0
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderServiceImpl.java

@@ -52,6 +52,7 @@ import com.yami.shop.common.util.PageParam;
 import com.yami.shop.common.util.R;
 import com.yami.shop.dao.*;
 import com.yami.shop.service.*;
+import com.yami.shop.service.hb.IHBOrderService;
 import com.yami.shop.utils.BinPackingUtil;
 import com.yami.shop.utils.CullenUtils;
 import com.yami.shop.utils.ExportUtils;
@@ -121,6 +122,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     private final TzSysUserMapper userMapper;
     @Autowired
     private ExportTaskService exportTaskService;
+    @Autowired
+    private IHBOrderService hbOrderService;
+
     //导出
     // 线程池配置
     private final ExecutorService exportExecutor = Executors.newFixedThreadPool(
@@ -1827,6 +1831,12 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
     }
 
+    @Override
+    public void syncHBOrder() {
+        List<String> orderList = orderMapper.syncOrderList();
+        orderList.forEach(c->hbOrderService.createOrderAsync(c));
+    }
+
     /**
      * 退款成功后,修改订单状态
      *

+ 16 - 0
yami-shop-service/src/main/resources/mapper/OrderMapper.xml

@@ -237,6 +237,10 @@
         </collection>
     </resultMap>
 
+    <insert id="addOrderPushLog">
+        INSERT INTO tz_order_push_log(order_number,is_success,result,create_time) VALUES(#{orderNumber},#{isSuccess},#{result},NOW())
+    </insert>
+
     <select id="getOrderByOrderNumber" resultType="com.yami.shop.bean.model.Order">
         select *
         from tz_order o
@@ -776,6 +780,15 @@
                          LEFT JOIN tz_group_team gt ON gt.`group_team_id` = go.`group_team_id`
                      WHERE gt.`group_team_id` = #{groupTeamId}) temp)
     </update>
+    <update id="syncOrderList">
+        SELECT a.order_number FROM `tz_order` a
+        LEFT JOIN tz_order_push_log b on a.order_number=b.order_number
+        WHERE a.create_time >'2026-05-09 12:00:00' and ((ISNULL(b.order_number)) or (b.is_success=0))
+
+    </update>
+    <update id="updateOrderPushLog">
+        update tz_order_push_log set is_success=#{isSuccess},result=#{result} WHERE order_number=#{orderNumber}
+    </update>
 
     <select id="getOrderByOrderNumberAndUserId" resultType="com.yami.shop.bean.model.Order">
         select o.*
@@ -1371,4 +1384,7 @@
         SELECT CONCAT('骑手:',courier_name,',电话:', SUBSTRING_INDEX(courier_phone, ',', 1)) info
         FROM `tz_order_rider_location` WHERE order_number=#{orderNumber}
     </select>
+    <select id="getOrderPushLog" resultType="java.lang.Integer">
+        SELECT COUNT(1) FROM tz_order_push_log WHERE order_number=#{orderNumber}
+    </select>
 </mapper>