lubo 3 months ago
parent
commit
9615bda0cc

+ 1 - 1
ruoyi-admin/src/main/java/com/ruoyi/schedule/SubsidyModeAutoSchedule.java

@@ -41,7 +41,7 @@ public class SubsidyModeAutoSchedule {
     private final RabbitMqClient rabbitMqClient;
 
     /**
-     * 每晚0点过1分开始执行一次模式自动切换
+     * 每晚0点过30秒分开始执行一次模式自动切换
      */
     @Scheduled(cron = "${task0h30}")
     public void subsidyModeAuto() {

+ 6 - 4
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidyModeAutoServiceImpl.java

@@ -349,6 +349,12 @@ public class SubsidyModeAutoServiceImpl implements ISubsidyModeAutoService {
         targetMode.setDefaulted( true);
         subsidyModeMapper.updateById(targetMode);
 
+
+        //关闭自动切换
+        subsidyModeAuto.setEnabled(false);
+        baseMapper.updateById(subsidyModeAuto);
+
+        //添加模式转换日志
         subsidyModeConversionLogService.insertByBo(SubsidyModeConversionLogBo.builder()
             .businessId(businessId)
             .fromModeId(currentMode.getModeId())
@@ -358,10 +364,6 @@ 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);

+ 62 - 51
ruoyi-line/src/main/java/com/ruoyi/subsidy/service/impl/SubsidySharedPoolServiceImpl.java

@@ -244,6 +244,7 @@ public class SubsidySharedPoolServiceImpl implements ISubsidySharedPoolService {
     @Transactional(rollbackFor = Exception.class)
     @Override
     public SubsidySharedPool settlement(Long sharedId, SharedSettlementMode sharedSettlementMode) {
+        log.info("开始执行均摊池到期结算");
         SubsidySharedPool subsidySharedPool = loadById(sharedId, false);
         if(subsidySharedPool.getSettlemented())
         {
@@ -251,58 +252,68 @@ public class SubsidySharedPoolServiceImpl implements ISubsidySharedPoolService {
         }
         if(subsidySharedPool.getTotalSharedAmount().compareTo(BigDecimal.ZERO)<=0)
         {
-            return null;
+            log.info("商户当前均摊池为{},无法结算", subsidySharedPool.getTotalSharedAmount());
+            subsidySharedPool.setSettlemented(true);
+            subsidySharedPool.setSettlementMode(sharedSettlementMode);
+            subsidySharedPool.setSettlementTime(new Date());
+            subsidySharedPool.setSettlementRemark("均摊定时补贴到期,但均堆池为零");
+            baseMapper.updateById(subsidySharedPool);
         }
-        BigDecimal totalSharedAmount = subsidySharedPool.getTotalSharedAmount();
-        //开始结算,并把结算剩余还给商家,同时需要记好均摊池改变日志
-        BigDecimal remaining = subsidyQueueService.sharedSubsidyCompute(subsidySharedPool.getBusinessId(), subsidySharedPool.getTotalSharedAmount());
-
-
-        subsidySharedPool.setReturnBusinessAmount(remaining);
-        subsidySharedPool.setSettlemented(true);
-        subsidySharedPool.setSettlementMode(sharedSettlementMode);
-        subsidySharedPool.setSettlementTime(new Date());
-        subsidySharedPool.setSettlementRemark("均摊定时补贴");
-        baseMapper.updateById(subsidySharedPool);
-
-        //添加均摊池改变日志
-        subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
-            .sharedId(subsidySharedPool.getSharedId())
-            .businessId(subsidySharedPool.getBusinessId())
-            .behaviorType(SharedPoolBehaviorType.SETTLEMENT_SUBSIDY)
-            .prevValue(totalSharedAmount)
-            .changeValue(MathUtils.subtract(totalSharedAmount, remaining))
-            .resultValue(remaining)
-            .remark(SharedSettlementMode.DUE_SETTLEMENT.getMsg()+"给用户")
-            .build());
-
-        if(remaining.compareTo(BigDecimal.ZERO)>0)
-        {
-            Long businessId = subsidySharedPool.getBusinessId();
-            Business business = businessService.loadById(businessId, false);
-            if(ObjectUtil.isNotNull( business)) {
-                //用户余额增加
-                userService.changeUserBalance(UserChangeBalanceBo.builder()
-                    .userId(business.getRelationUserId())
-                    .entryValue(remaining)
-                    .isAdd(true)
-                    .sourceType(BalanceSourceType.SUBSIDY_OVERFLOW_RETURN)
-                    .sourceId(subsidySharedPool.getSharedId())
-                    .remark("消费排队均摊补贴溢出退回")
-                    .businessId(businessId)
-                    .businessName(business.getBusinessName())
-                    .build());
-
-                //均摊池改变日志
-                subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
-                    .sharedId(subsidySharedPool.getSharedId())
-                    .businessId(subsidySharedPool.getBusinessId())
-                    .behaviorType(SharedPoolBehaviorType.REFUND_SUBSIDY)
-                    .prevValue(remaining)
-                    .changeValue(remaining)
-                    .resultValue(BigDecimal.ZERO)
-                    .remark("剩余返还给商家")
-                    .build());
+        else {
+            BigDecimal totalSharedAmount = subsidySharedPool.getTotalSharedAmount();
+            //开始结算,并把结算剩余还给商家,同时需要记好均摊池改变日志
+            log.info("开始结算商户均摊池");
+            BigDecimal remaining = subsidyQueueService.sharedSubsidyCompute(subsidySharedPool.getBusinessId(), subsidySharedPool.getTotalSharedAmount());
+
+            log.info("商户均摊池结算剩余金额{}", remaining);
+            subsidySharedPool.setReturnBusinessAmount(remaining);
+            subsidySharedPool.setSettlemented(true);
+            subsidySharedPool.setSettlementMode(sharedSettlementMode);
+            subsidySharedPool.setSettlementTime(new Date());
+            subsidySharedPool.setSettlementRemark("均摊定时补贴");
+            baseMapper.updateById(subsidySharedPool);
+
+            //添加均摊池改变日志
+            log.info("添加商户均摊池改变日志,均摊给用户");
+            subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
+                .sharedId(subsidySharedPool.getSharedId())
+                .businessId(subsidySharedPool.getBusinessId())
+                .behaviorType(SharedPoolBehaviorType.SETTLEMENT_SUBSIDY)
+                .prevValue(totalSharedAmount)
+                .changeValue(MathUtils.subtract(totalSharedAmount, remaining))
+                .resultValue(remaining)
+                .remark(sharedSettlementMode.getMsg() + "给用户")
+                .build());
+
+            if (remaining.compareTo(BigDecimal.ZERO) > 0) {
+                Long businessId = subsidySharedPool.getBusinessId();
+                Business business = businessService.loadById(businessId, false);
+                if (ObjectUtil.isNotNull(business)) {
+                    //用户余额增加
+                    log.info("用户余额增加{}", remaining);
+                    userService.changeUserBalance(UserChangeBalanceBo.builder()
+                        .userId(business.getRelationUserId())
+                        .entryValue(remaining)
+                        .isAdd(true)
+                        .sourceType(BalanceSourceType.SUBSIDY_OVERFLOW_RETURN)
+                        .sourceId(subsidySharedPool.getSharedId())
+                        .remark("消费排队均摊补贴溢出退回")
+                        .businessId(businessId)
+                        .businessName(business.getBusinessName())
+                        .build());
+
+                    //均摊池改变日志
+                    log.info("添加商户均摊池改变日志:剩余返还给商家");
+                    subsidySharedPoolLogService.insertByBo(SubsidySharedPoolLogBo.builder()
+                        .sharedId(subsidySharedPool.getSharedId())
+                        .businessId(subsidySharedPool.getBusinessId())
+                        .behaviorType(SharedPoolBehaviorType.REFUND_SUBSIDY)
+                        .prevValue(remaining)
+                        .changeValue(remaining)
+                        .resultValue(BigDecimal.ZERO)
+                        .remark("剩余返还给商家")
+                        .build());
+                }
             }
         }
 

+ 1 - 1
ruoyi-rabbitmq/src/main/java/com/ruoyi/rabbitmq/client/RabbitMqClient.java

@@ -390,7 +390,7 @@ public class RabbitMqClient {
         String msgId = IdUtil.simpleUUID();
         if(!"prod".equals(active))
         {
-            delaySec = 120*1000;
+            delaySec = 300*1000;
 //            delaySec = 1800*1000;
         }
         //请求头设置消息id(messageId)