瀏覽代碼

调整定时任务和订单之间的互斥逻辑

houweiyu 4 年之前
父節點
當前提交
03f1720c36

+ 1 - 1
dinner-core/src/main/java/com/fdage/base/entity/TmDesk.java

@@ -63,7 +63,7 @@ public class TmDesk implements Serializable {
     @ApiModelProperty(value = "是否删除: 0->未删除;1->已删除")
     private Integer isDelete;
 
-    @ApiModelProperty(value = "状态:0->可预订;1->已被预定;")
+    @ApiModelProperty(value = "状态:0->可预订;1->已被预定; --此字段已弃用")
     private Integer status;
 
 

+ 9 - 0
dinner-core/src/main/java/com/fdage/base/service/impl/TmDeskServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -40,6 +41,14 @@ public class TmDeskServiceImpl extends ServiceImpl<TmDeskDao, TmDesk> implements
         return getBaseMapper().selectPage(page , lambdaQueryWrapper);
     }
 
+    public List<TmDesk> getOrderedDeskList(){
+        LambdaQueryWrapper<TmDesk> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(TmDesk::getStatus , 1);
+        lambdaQueryWrapper.eq(TmDesk::getIsDelete , 0);
+        lambdaQueryWrapper.last("limit 300");
+        return getBaseMapper().selectList(lambdaQueryWrapper);
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public TmDesk getBySelectForUpdate(String deskId){
         if(StringUtils.isBlank(deskId)){

+ 4 - 3
dinner-core/src/main/java/com/fdage/base/service/impl/TmOrderServiceImpl.java

@@ -60,10 +60,10 @@ public class TmOrderServiceImpl extends ServiceImpl<TmOrderDao, TmOrder> impleme
         LambdaQueryWrapper<TmOrder> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(TmOrder::getIsDelete , 0);
         lambdaQueryWrapper.eq(TmOrder::getStatus , OrderStatusEnum.ORDER_ING.getStatus());
-        lambdaQueryWrapper.in(TmOrder::getPayStatus , OrderPayStatusEnum.REFUND_ING.getStatus() , OrderPayStatusEnum.PAY_FAIL.getStatus() ,
+        lambdaQueryWrapper.in(TmOrder::getPayStatus , OrderPayStatusEnum.PAYING.getStatus() , OrderPayStatusEnum.PAY_FAIL.getStatus() ,
                 OrderPayStatusEnum.UNPAID.getStatus());
         LocalDateTime fiveMinAgo =  LocalDateTime.now().minusMinutes(5L);
-        lambdaQueryWrapper.le(TmOrder::getCreateTime , fiveMinAgo).or().eq(TmOrder::getCreateTime , fiveMinAgo);
+        lambdaQueryWrapper.le(TmOrder::getCreateTime , fiveMinAgo);
         //TODO:以后需要根据数据量做调整
         lambdaQueryWrapper.last("limit 500");
         return getBaseMapper().selectList(lambdaQueryWrapper);
@@ -106,7 +106,7 @@ public class TmOrderServiceImpl extends ServiceImpl<TmOrderDao, TmOrder> impleme
         return getBaseMapper().selectList(lambdaQueryWrapper);
     }
 
-    public TmOrder getLatestByDesk(String deskId){
+    public TmOrder getCurDateLatestByDesk(String deskId){
         if(StringUtils.isBlank(deskId)){
             return null;
         }
@@ -114,6 +114,7 @@ public class TmOrderServiceImpl extends ServiceImpl<TmOrderDao, TmOrder> impleme
         lambdaQueryWrapper.eq(TmOrder::getDeskId , deskId);
         lambdaQueryWrapper.eq(TmOrder::getIsDelete , 0);
         lambdaQueryWrapper.eq(TmOrder::getStatus , OrderStatusEnum.ORDER_SUCCESS.getStatus());
+        lambdaQueryWrapper.eq(TmOrder::getReserveDate , LocalDate.now());
         lambdaQueryWrapper.orderByDesc(TmOrder::getCreateTime);
         lambdaQueryWrapper.last("limit 1");
         return getBaseMapper().selectOne(lambdaQueryWrapper);

+ 1 - 1
dinner-core/src/main/java/com/fdage/controller/app/AppDeskController.java

@@ -66,7 +66,7 @@ public class AppDeskController {
                  DeskListRspDto deskListRspDto = new DeskListRspDto();
                  deskListRspDto.setTmDesk(desk);
                  if(null != desk){
-                     TmOrder tmOrder = tmOrderService.getLatestByDesk(desk.getId());
+                     TmOrder tmOrder = tmOrderService.getCurDateLatestByDesk(desk.getId());
                      if(null != tmOrder){
                          deskListRspDto.setTmOrder(tmOrder);
                      }

+ 3 - 2
dinner-core/src/main/java/com/fdage/task/InvalidateOrderTask.java

@@ -32,17 +32,18 @@ public class InvalidateOrderTask {
     private TmOrderServiceImpl orderService;
 
     /**
-     * 每隔5分钟执行一次
+     * 每隔30秒执行一次
      * */
     @Scheduled(cron = "*/30 * * * * ?")
     @Transactional(rollbackFor = Exception.class)
     public void doTask(){
         log.info("========订单超5分钟未支付检测定时任务=======开始执行=====");
-        //捞取状态为:预定中,状态为(付款中、付款失败、未付款的订单)
+        //捞取状态为:预定中(0),状态为(付款中1、付款失败3、未付款0的订单)
         //如果超过5分钟不支付,默认翻转为6(支付超时),此单作废
         List<TmOrder> unPayTimeoutOrderList = orderService.getFiveMinAgoUnPayOrderList();
         int count = 0;
         if(!CollectionUtils.isEmpty(unPayTimeoutOrderList)){
+            log.info("捞取满足的订单数为:{}" , unPayTimeoutOrderList.size());
             for ( TmOrder order : unPayTimeoutOrderList) {
                 TmOrder dbOrder = orderService.getSelectByUpdate(order.getId());
                 if(null == dbOrder){

+ 19 - 21
dinner-core/src/main/java/com/fdage/task/ReInitDeskStatusTask.java

@@ -45,35 +45,33 @@ public class ReInitDeskStatusTask {
     public void run() throws InterruptedException {
         log.info("========每日凌晨初始化未使用的预定订单定时任务=====开始执行=======");
         List<TmOrder> unUsedOrderList = orderService.getUnUserOrder();
-        int count = 0;
+        int orderCount = 0;
         if(!CollectionUtils.isEmpty(unUsedOrderList)){
             for ( TmOrder order  : unUsedOrderList) {
                 TmOrder dbOrder = orderService.getSelectByUpdate(order.getId());
                 if(null == dbOrder){
                     log.info("订单[{}]抢锁失败,无法将其更新为已失效的状态" , order.getOrderNo());
                 }else{
-                    if(StringUtils.isNotBlank(dbOrder.getDeskId())){
-                        TmDesk desk = deskService.getBySelectForUpdate(dbOrder.getDeskId());
-                        if(null == desk){
-                            log.info("订单[{}]的预定桌子[{}]抢锁失败,暂时不初始化" , dbOrder.getId() , dbOrder.getDeskId());
-                        }else{
-                            if(null == desk.getStatus() || desk.getStatus().compareTo(1) == 1){
-                                desk.setStatus(0);
-                                int update = deskService.updateWithId(desk);
-                                if(update == 1){
-                                    dbOrder.setStatus(OrderStatusEnum.ORDER_USE_TIMEOUT.getStatus());
-                                    orderService.updateWithId(dbOrder);
-                                    count += 1;
-                                }
-                            }
-
-                        }
-                    }
-
+                    dbOrder.setStatus(OrderStatusEnum.ORDER_USE_TIMEOUT.getStatus());
+                    orderService.updateWithId(dbOrder);
+                    orderCount += 1;
                 }
             }
         }
-
-        log.info("========每日凌晨初始化未使用的预定订单定时任务=====执行完成{}个=======" , count);
+        List<TmDesk> orderedDeskList = deskService.getOrderedDeskList();
+        int countDesk = 0;
+        if(!CollectionUtils.isEmpty(orderedDeskList)){
+            for (TmDesk desk : orderedDeskList) {
+                TmDesk dbDesk = deskService.getBySelectForUpdate(desk.getId());
+                if(null == dbDesk){
+                    log.info("餐桌[{}]抢锁失败,无法将其更新为已可预订的状态" , desk.getId());
+                }else{
+                    dbDesk.setStatus(0);
+                    deskService.updateWithId(dbDesk);
+                    countDesk += 1;
+                }
+            }
+        }
+        log.info("========每日凌晨初始化未使用的预定订单定时任务=====执行完成{}个订单,{}个餐桌=======" , orderCount , countDesk);
     }
 }