Jelajahi Sumber

新增预约订单自动接单功能

codingliang 1 tahun lalu
induk
melakukan
d22df296fe

+ 6 - 0
src/main/java/com/sqx/modules/order/dao/AppOrderDao.java

@@ -83,4 +83,10 @@ public interface AppOrderDao extends BaseMapper<TbOrder> {
      * @return
      */
     int countByShopIdAndActivityIdAndUserIdAndCurDate(@Param("shopId") Long shopId, @Param("activityId") Long activityId, @Param("userId") Long userId, @Param("orderId") Long orderId);
+
+    /**
+     * 获取小于(当前时间+30分钟)还没有被接单的预约订单id
+     * @return 订单id集合
+     */
+    List<Long> selectCurWaitReceivingOrderIds();
 }

+ 6 - 0
src/main/java/com/sqx/modules/order/service/AppOrderService.java

@@ -154,4 +154,10 @@ public interface AppOrderService extends IService<TbOrder> {
      * @param img 图片地址
      */
     void addReceiveImg(Long orderId, String img);
+
+    /**
+     * 获取当前待接单的订单id集合
+     * @return 订单id集合
+     */
+    List<Long> getCurWaitReceivingOrderIds();
 }

+ 5 - 0
src/main/java/com/sqx/modules/order/service/impl/AppAppOrderServiceImpl.java

@@ -699,6 +699,11 @@ public class AppAppOrderServiceImpl extends ServiceImpl<AppOrderDao, TbOrder> im
     }
 
     @Override
+    public List<Long> getCurWaitReceivingOrderIds() {
+        return baseMapper.selectCurWaitReceivingOrderIds();
+    }
+
+    @Override
     public List<OrderGoods> getOrderGoods(Long orderId) {
         return orderGoodsDao.selectList(new QueryWrapper<OrderGoods>().eq("order_id", orderId));
     }

+ 61 - 0
src/main/java/com/sqx/modules/order/task/OrderTask.java

@@ -0,0 +1,61 @@
+package com.sqx.modules.order.task;
+
+import cn.hutool.core.collection.CollUtil;
+import com.sqx.modules.order.entity.TbOrder;
+import com.sqx.modules.order.service.AppOrderService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 订单定时任务
+ *
+ * @author : codingliang
+ * @date : 2024-08-19 20:42
+ */
+@Slf4j
+@Async
+@Component
+@RequiredArgsConstructor
+public class OrderTask {
+
+    private final AppOrderService orderService;
+
+    /**
+     * 预约订单自动接单
+     * 5分钟运行一次
+     */
+    @Scheduled(cron = "0 */5 * * * ?")
+    public void reservationAutoReceivingOrder() {
+        log.info("预约订单自动接单任务运行....");
+        List<Long> orderIds = orderService.getCurWaitReceivingOrderIds();
+        if (CollUtil.isEmpty(orderIds)) {
+            log.info("没有符合条件的预约订单,预约订单自动接单任务运行....");
+            return;
+        }
+
+        List<TbOrder> waitOrders = orderIds.stream().map(orderId -> {
+            TbOrder waitOrder = new TbOrder();
+            waitOrder.setOrderId(orderId);
+            waitOrder.setStatus(6);
+
+            return waitOrder;
+        }).collect(Collectors.toList());
+
+
+        for (TbOrder waitOrder : waitOrders) {
+            log.info("预约订单id:{},正在自动接单", waitOrder.getOrderId());
+            try {
+                orderService.updateOrder(waitOrder);
+            } catch (Exception e) {
+                e.printStackTrace();
+                log.error("预约单id:{},自动接单失败,失败原因:{}", waitOrder.getOrderId(), e.getMessage());
+            }
+        }
+    }
+}

+ 11 - 0
src/main/resources/mapper/order/OrderMapper.xml

@@ -429,4 +429,15 @@
             </if>
     </select>
 
+    <select id="selectCurWaitReceivingOrderIds" resultType="java.lang.Long">
+        select
+               order_id
+        from
+             tb_order
+        where
+              reservation_flag = '1'
+                and `status` = '7'
+                and expect_delivery_time <![CDATA[ <= ]]> adddate(now(),interval 30 minute)
+    </select>
+
 </mapper>