lubo il y a 5 mois
Parent
commit
8ec7878e4c

+ 5 - 1
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidyModeAutoServiceImpl.java

@@ -324,7 +324,7 @@ public class SubsidyModeAutoServiceImpl implements ISubsidyModeAutoService {
 
         if(currentMode.getSharedMode() && !currentMode.getImmediateArrival())
         {
-            SubsidySharedPool subsidySharedPool = subsidySharedPoolService.loadSharedPool(subsidyModeAuto.getBusinessId());
+            SubsidySharedPool subsidySharedPool = subsidySharedPoolService.loadSharedPoolAndLock(subsidyModeAuto.getBusinessId());
             if(subsidySharedPool==null)
             {
                 log.info("均摊池不存在,商户ID:{}", businessId);
@@ -357,6 +357,10 @@ public class SubsidyModeAutoServiceImpl implements ISubsidyModeAutoService {
             .conversionTime(new Date())
             .build());
 
+        //关闭自动切换
+        subsidyModeAuto.setEnabled(false);
+        baseMapper.updateById(subsidyModeAuto);
+
         if(targetMode.getSharedMode() && !targetMode.getImmediateArrival())
         {
             SubsidySharedPool subsidySharedPool = subsidySharedPoolService.initSharedPool(targetMode, BigDecimal.ZERO);

+ 2 - 0
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidyQueueServiceImpl.java

@@ -419,12 +419,14 @@ public class SubsidyQueueServiceImpl implements ISubsidyQueueService {
             .changeTime(order.getPayTime())
             .build());
 
+        //如果队满人数要切换模式
         Long newValidQueueCount = this.validQueueCountAndLock(order.getBusinessId());
         SubsidySharedPool subsidySharedPool = subsidyModeAutoService.switchMode(order.getBusinessId(), newValidQueueCount);
         if(ObjectUtil.isNull(subsidySharedPool) || ObjectUtil.isNull(subsidySharedPool.getExpireTime()) || subsidySharedPool.getSettlemented())
         {
             return ;
         }
+        //如果模式切换了,则发送延迟消息,为下一次均摊准备
         int lazyTime = Long.valueOf(DateUtil.between(new Date(), subsidySharedPool.getExpireTime(), DateUnit.MS)).intValue();
         rabbitMqClient.send(DelayedConstant.SubsidySharedPoolExpireDelayedConstant.SUBSIDY_SHARED_POOL_EXPIRE_DELAYED_EXCHANGE,
             DelayedConstant.SubsidySharedPoolExpireDelayedConstant.SUBSIDY_SHARED_POOL_EXPIRE_DELAYED_ROUTING,

+ 1 - 0
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidySharedPoolServiceImpl.java

@@ -343,6 +343,7 @@ public class SubsidySharedPoolServiceImpl implements ISubsidySharedPoolService {
         return this.baseMapper.selectOne(new LambdaQueryWrapper<SubsidySharedPool>()
             .eq(SubsidySharedPool::getBusinessId, businessId)
             .eq(SubsidySharedPool::getSettlemented, false)
+            .orderByDesc(SubsidySharedPool::getExpireTime)
             .last("limit 1")
         );
     }