Sfoglia il codice sorgente

perf(消费服务): 人员余额验证处理

1.人员账户余额默认从缓存获取,如果缓存不存在则从数据库获取并初始人化缓存
autumnal_wind 11 mesi fa
parent
commit
b779ad6f0d

+ 0 - 2
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/BaseBusiness.java

@@ -197,7 +197,6 @@ public class BaseBusiness {
         userCardVo.setLastMeal(mealType);
         userCardVo.setLastPay(consumeDate);
 
-        log.info("待更新的卡片日消费数据,[{}]", JSONUtil.toJsonStr(userCardVo));
         initBusiness.resetUserCard(userCardVo);
 
         // 更新数据库
@@ -240,7 +239,6 @@ public class BaseBusiness {
             cardLimitedVo.setMealCount(cardLimitedVo.getMealCount() + 1);
             cardLimitedVo.setDayCount(cardLimitedVo.getDayCount() + 1);
         }
-        log.info("待更新的卡片限制数据,[{}]", JSONUtil.toJsonStr(cardLimitedVo));
         String cardNo = String.valueOf(cardLimitedVo.getCardNo());
 
         RedisUtils.delCacheMapValue(CacheNames.T_XF_CARD_LIMITED, cardNo);

+ 2 - 7
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/InitBusiness.java

@@ -13,12 +13,9 @@ import org.dromara.common.json.utils.JsonUtils;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.server.common.util.CardDateUtils;
 import org.dromara.server.consume.cache.ValidationParam;
-import org.dromara.server.consume.domain.PtBag;
 import org.dromara.server.consume.domain.bo.XfCardLimitedBo;
-import org.dromara.server.consume.domain.bo.XfUserTotalBo;
 import org.dromara.server.consume.domain.vo.PtBagVo;
 import org.dromara.server.consume.domain.vo.XfCardLimitedVo;
-import org.dromara.server.consume.domain.vo.XfConsumeDetailVo;
 import org.dromara.server.consume.domain.vo.XfTermVo;
 import org.dromara.server.consume.service.IPtBagService;
 import org.dromara.server.consume.service.IXfCardLimitedService;
@@ -188,10 +185,8 @@ public class InitBusiness {
      */
     public void initUserBalanceByUserId(Long id) {
         String userId = String.valueOf(id);
-        BigDecimal balance = bagService.getUserBalance(id);
-        RedisUtils.delCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId);
-        RedisUtils.setCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userId, balance);
-        log.info("初始化指定人员余额完成,人员Id:{}", id);
+        BigDecimal balance = bagService.getUserTotalBalance(id);
+        log.info("初始化指定人员余额完成,人员Id:{}, 余额:{}", id, balance);
     }
 
     /**

+ 3 - 7
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/check/ConsumeRequestCheck.java

@@ -2,7 +2,6 @@ package org.dromara.server.consume.check;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.backstage.api.domain.vo.RemoteCardVo;
@@ -23,6 +22,7 @@ import org.dromara.server.consume.domain.convert.RemoteVoConvert;
 import org.dromara.server.consume.domain.vo.XfCardLimitedVo;
 import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
 import org.dromara.server.consume.domain.vo.XfTermVo;
+import org.dromara.server.consume.service.IPtBagService;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 
@@ -33,7 +33,6 @@ import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.function.Supplier;
 
@@ -54,6 +53,7 @@ public class ConsumeRequestCheck {
     private final CommonCheck commonCheck;
     private final CardConsumeValidation cardConsumevalidation;
     private final BaseBusiness baseBusiness;
+    private final IPtBagService bagService;
 
     public R<ErrorInfo> checkConsume(ConsumptionBo bo, RemoteUserAccountVo userAccountVo,
                                      RemoteCardVo userCardVo, XfTermVo useTermVo,
@@ -146,7 +146,7 @@ public class ConsumeRequestCheck {
     private R<ErrorInfo> checkWalletBalance(ConsumptionBo bo) {
         String userIdStr = bo.getUserId().toString();
         BigDecimal consumeMoney = bo.getConsumeMoney();
-        BigDecimal totalBalance = RedisUtils.getCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userIdStr);
+        BigDecimal totalBalance = bagService.getUserTotalBalance(bo.getUserId());
         if (ObjectUtil.isEmpty(totalBalance)) {
             totalBalance = BigDecimal.ZERO;
         }
@@ -157,10 +157,6 @@ public class ConsumeRequestCheck {
         // 计算扣费后的余额
         BigDecimal balance = totalBalance.subtract(consumeMoney);
         bo.setBalance(balance);
-
-        // 更新余额缓存
-        RedisUtils.setCacheMapValue(CacheNames.USER_TOTAL_BALANCE, userIdStr, balance);
-
         return R.ok();
     }
 

+ 6 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/IPtBagService.java

@@ -107,7 +107,12 @@ public interface IPtBagService {
      */
     PtBagVo queryByUserBagCode(Long userId,String bagCode);
 
-    BigDecimal getUserBalance(Long userId);
+    /**
+     * 查询指定人员的现金与补助钱包余额总和并设置至缓存
+     * @param userId 用户Id
+     * @return 两个钱包总余额
+     */
+    BigDecimal getUserTotalBalance(Long userId);
 
     void updateConsumeBalance(List<PtBagVo> bagVos);
 

+ 4 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/service/impl/PtBagServiceImpl.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.CacheNames;
 import org.dromara.common.core.enums.BalanceUpdateEnum;
 import org.dromara.common.core.exception.consume.BagException;
 import org.dromara.common.core.exception.consume.ConsumeException;
@@ -24,6 +25,7 @@ import org.dromara.server.consume.domain.bo.PtBagBo;
 import org.dromara.server.consume.domain.vo.PtBagVo;
 import org.dromara.server.consume.mapper.PtBagMapper;
 import org.dromara.server.consume.service.IPtBagService;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -290,7 +292,8 @@ public class PtBagServiceImpl implements IPtBagService {
     }
 
     @Override
-    public BigDecimal getUserBalance(Long userId) {
+    @Cacheable(cacheNames = CacheNames.USER_TOTAL_BALANCE, key = "#userId", unless = "#result == null")
+    public BigDecimal getUserTotalBalance(Long userId) {
         LambdaQueryWrapper<PtBag> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(PtBag::getUserId, userId);
         queryWrapper.in(PtBag::getBagCode, Arrays.asList("1", "3"));