Bläddra i källkod

refactor(基础平台): 增加了充值、退款与错扣补款时更新缓存中的人员总余额

autumnal_wind 11 månader sedan
förälder
incheckning
a1946c61c4

+ 17 - 1
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/errfill/ErrFillBusiness.java

@@ -25,11 +25,13 @@ import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
 import org.dromara.backstage.payment.service.IPtBagService;
 import org.dromara.backstage.payment.service.IPtUserAccountService;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.enums.BalanceUpdateEnum;
 import org.dromara.common.core.enums.SystemUseTypeEnum;
 import org.dromara.common.core.exception.consume.BagException;
 import org.dromara.common.core.exception.consume.ConsumeException;
 import org.dromara.common.core.utils.RecordIdUtils;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -224,7 +226,10 @@ public class ErrFillBusiness {
         bagBo.setBagCode(bo.getBagType());
         bagBo.setReceiptMoney(bo.getOperatorMoney());
         bagBo.setOperationMode(BalanceUpdateEnum.COMPENSATE.code().toString());
-        return bagService.updateBalanceByBo(bagBo);
+        PtBagVo vo = bagService.updateBalanceByBo(bagBo);
+        // 补款成功,需要更新缓存中的总余额
+        updateCacheBalanceByUserId(bo.getUserId(), bo.getOperatorMoney());
+        return vo;
     }
 
     /**
@@ -297,4 +302,15 @@ public class ErrFillBusiness {
     private java.lang.String getRecordKeyId(ConsumptionBo bo, PtUserAccountVo accountVo, PtBagVo bagVo) {
         return RecordIdUtils.getRecordId(new Date(), Short.parseShort(bo.getTermNo().toString()), 0, accountVo.getUserNo().intValue(), Integer.parseInt(bagVo.getBagCode()));
     }
+
+    private void updateCacheBalanceByUserId(Long id, BigDecimal dealMoney) {
+        String userId = String.valueOf(id);
+        BigDecimal balance = BigDecimal.ZERO;
+        if (RedisUtils.getCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId) != null) {
+            balance = RedisUtils.getCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId);
+        }
+        balance = balance.add(dealMoney);
+        RedisUtils.delCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId);
+        RedisUtils.setCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId, balance);
+    }
 }

+ 20 - 3
ruoyi-modules/ruoyi-backstage/src/main/java/org/dromara/backstage/business/payments/PayOrderBusiness.java

@@ -16,13 +16,16 @@ import org.dromara.backstage.domain.vo.card.PtCardVo;
 import org.dromara.backstage.payment.domain.bo.PurseInOutBo;
 import org.dromara.backstage.payment.domain.vo.PtBagVo;
 import org.dromara.backstage.payment.domain.vo.PtUserAccountVo;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.*;
 import org.dromara.common.core.exception.consume.ConsumeException;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -152,7 +155,7 @@ public class PayOrderBusiness {
         list.parallelStream().forEach(item -> {
             // doSubsidyOrderHandle(item, mapCount, infoList);
             // 使用线程池进行补助入账
-            threadPoolTaskExecutor.execute(()->doSubsidyOrderHandle(item, mapCount, infoList));
+            threadPoolTaskExecutor.execute(() -> doSubsidyOrderHandle(item, mapCount, infoList));
         });
         java.lang.String message = MessageFormat.format("补助到账完成,成功[{0}]条,失败[{1}]条", mapCount.get("successCount"), mapCount.get("errorCount"));
         infoList.forEach(log::error);
@@ -161,7 +164,6 @@ public class PayOrderBusiness {
     }
 
 
-
     /**
      * 资金收支时计算管理费
      *
@@ -191,6 +193,8 @@ public class PayOrderBusiness {
             }
             R<PurseInOutBo> result = createNormalOrder(bo);
             if (result.getCode() == R.SUCCESS) {
+                // 如果充值成功,更新缓存中的余额
+                updateCacheBalanceByUserId(bo.getUserId(), bo.getReceiptMoney());
                 return R.ok(result.getData());
             } else {
                 return R.fail(result.getMsg());
@@ -219,6 +223,8 @@ public class PayOrderBusiness {
         try {
             R<PurseInOutBo> result = createNormalOrder(boCopy);
             if (result.getCode() == R.SUCCESS) {
+                // 如果退款成功,更新缓存中的余额
+                updateCacheBalanceByUserId(bo.getUserId(), boCopy.getReceiptMoney());
                 return R.ok(result.getData());
             } else {
                 return R.fail(result.getMsg(), boCopy);
@@ -274,10 +280,21 @@ public class PayOrderBusiness {
                 errorCount++;
                 mapCount.put("errorCount", errorCount);
                 infoList.add(MessageFormat.format("[补助到账失败]-[补助信息:{0}]-[错误信息:{1}]", JSONUtil.toJsonStr(orderBo),
-                                                  result.getData().toString()));
+                    result.getData().toString()));
             }
         } catch (Exception e) {
             infoList.add(MessageFormat.format("[补助到账失败]-[补助信息:{0}]-[错误信息:{1}]", JSONUtil.toJsonStr(orderBo), e.getMessage()));
         }
     }
+
+    private void updateCacheBalanceByUserId(Long id, BigDecimal dealMoney) {
+        String userId = String.valueOf(id);
+        BigDecimal balance = BigDecimal.ZERO;
+        if (RedisUtils.getCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId) != null) {
+            balance = RedisUtils.getCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId);
+        }
+        balance = balance.add(dealMoney);
+        RedisUtils.delCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId);
+        RedisUtils.setCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId, balance);
+    }
 }