Prechádzať zdrojové kódy

refactor(消费服务): 优化缓存数据处理与日志记录逻辑

1. 调整缓存存储逻辑,将卡片限制信息缓存成json字符串而不是对象,临时解决对象序列化时间出错的问题。
autumnal_wind 11 mesiacov pred
rodič
commit
6016c16374

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

@@ -213,7 +213,7 @@ public class BaseBusiness {
      * @param balance 新的余额,表示用户账户的新金额
      */
     public void resetUserBalance(Long userId, BigDecimal balance) {
-        log.info("[请求交易完成]-[更新人员余额数据]");
+        log.info("[请求交易完成]-[更新人员余额缓存]");
         String strUserId = String.valueOf(userId);
 
         RedisUtils.delCacheMapValue(CacheNames.USER_TOTAL_BALANCE, strUserId);
@@ -244,8 +244,9 @@ public class BaseBusiness {
         }
         log.info("待更新的卡片限制数据,[{}]", JSONUtil.toJsonStr(cardLimitedVo));
         String cardNo = String.valueOf(cardLimitedVo.getCardNo());
+
         RedisUtils.delCacheMapValue(CacheNames.T_XF_CARD_LIMITED, cardNo);
-        RedisUtils.setCacheMapValue(CacheNames.T_XF_CARD_LIMITED, cardNo, cardLimitedVo);
+        RedisUtils.setCacheMapValue(CacheNames.T_XF_CARD_LIMITED, cardNo, JsonUtils.toJsonString(cardLimitedVo));
         cardLimitedService.updateByVo(cardLimitedVo);
 
     }

+ 1 - 10
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/InitBusiness.java

@@ -293,16 +293,7 @@ public class InitBusiness {
         if (CollUtil.isNotEmpty(list)) {
             RedisUtils.deleteKeys(CacheNames.T_XF_CARD_LIMITED);
             list.forEach(p -> {
-                // p.setDayCount(0L);
-                // p.setDayMoney(BigDecimal.ZERO);
-                // p.setMealCount(0L);
-                // p.setMealMoney(BigDecimal.ZERO);
-                // p.setDayDiscountCount(0L);
-                // p.setMealDiscountCount(0L);
-                // p.setLastPay(new Date());
-                // p.setLastMeal(1L);
-
-                RedisUtils.setCacheMapValue(CacheNames.T_XF_CARD_LIMITED, p.getCardNo().toString(), p);
+                RedisUtils.setCacheMapValue(CacheNames.T_XF_CARD_LIMITED, p.getCardNo().toString(), JsonUtils.toJsonString(p));
             });
             RedisUtils.expire(CacheNames.T_XF_CARD_LIMITED, Duration.ofHours(5));
         }

+ 4 - 2
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/check/CardConsumeValidationContext.java

@@ -9,6 +9,7 @@ import org.dromara.backstage.api.domain.vo.RemoteDiscountVo;
 import org.dromara.backstage.api.domain.vo.RemoteLimitedVo;
 import org.dromara.backstage.api.domain.vo.RemoteQuotaVo;
 import org.dromara.common.core.constant.CacheNames;
+import org.dromara.common.json.utils.JsonUtils;
 import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.common.util.CardDateUtils;
@@ -133,13 +134,14 @@ public class CardConsumeValidationContext {
         context.lastPayTime = CardDateUtils.toLocalDateTime(bo.getConsumeDate());
 
         // 从缓存获取卡片限制数据
-        context.cardLimitedVo = RedisUtils.getCacheMapValue(CacheNames.T_XF_CARD_LIMITED, String.valueOf(userCardVo.getCardNo()));
+        String strCardNo = String.valueOf(userCardVo.getCardNo());
+        context.cardLimitedVo = JsonUtils.parseObject(RedisUtils.getCacheMapValue(CacheNames.T_XF_CARD_LIMITED, strCardNo).toString(), XfCardLimitedVo.class);
         // 如果缓存中没有则初始化为当天当餐
         if (ObjectUtil.isEmpty(context.cardLimitedVo)) {
             context.cardLimitedVo = initXfCardLimited(context.cardNo, context.consumeDate, context.lastMeal);
         }
         LocalDateTime lastPayLimitLocalDt = CardDateUtils.toLocalDateTime(context.cardLimitedVo.getLastPay());
-        log.info("limit-last-pay:{},consumeDate:{}", context.cardLimitedVo.getLastPay(), context.lastPayTime.toLocalDate());
+        log.info("limit-last-pay:{},consumeDate:{}", lastPayLimitLocalDt.toLocalDate(), context.lastPayTime.toLocalDate());
         if (!lastPayLimitLocalDt.toLocalDate().isEqual(context.lastPayTime.toLocalDate())) {
             // 如果和消费时间不是同天,初始化为当天
             initCardDayLimitedData(context.cardLimitedVo, Long.valueOf(context.lastMeal), context.consumeDate);