Explorar el Código

refactor(消费服务): 优化缓存更新与日志一致性

1. 调整请求消费完成后的缓存更新逻辑,在更新前先删除旧缓存,确保缓存数据一致性。
2. 设备获取授权V2版本的统一异常处理返回类型为`ReturnResult`,提升接口响应格式一致性。
3. 将多处`latch.await`超时时间从200毫秒调整为300毫秒,优化任务等待时间。
autumnal_wind hace 11 meses
padre
commit
6ca24aa005

+ 13 - 4
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/BaseBusiness.java

@@ -190,8 +190,14 @@ public class BaseBusiness {
 
         userCardVo.setLastMeal(mealType);
         userCardVo.setLastPay(consumeDate);
-        RedisUtils.setCacheMapValue(CacheNames.PT_USER_CARD_NO, userCardVo.getCardNo().toString(), userCardVo);
-        RedisUtils.setCacheMapValue(CacheNames.PT_USER_CARD_USER_ID, userCardVo.getUserId().toString(), userCardVo);
+        String cardNo = String.valueOf(userCardVo.getCardNo());
+        String userId = String.valueOf(userCardVo.getUserId());
+
+        RedisUtils.delCacheMapValue(CacheNames.PT_USER_CARD_NO, cardNo);
+        RedisUtils.delCacheMapValue(CacheNames.PT_USER_CARD_USER_ID, userId);
+
+        RedisUtils.setCacheMapValue(CacheNames.PT_USER_CARD_NO, cardNo, userCardVo);
+        RedisUtils.setCacheMapValue(CacheNames.PT_USER_CARD_USER_ID, userId, userCardVo);
 
         // 更新数据库
         remoteCardService.updateCardDayData(userCardVo);
@@ -206,6 +212,8 @@ public class BaseBusiness {
     public void resetUserBalance(Long userId, BigDecimal balance) {
         log.info("[请求交易完成]-[更新人员余额数据]");
         String strUserId = String.valueOf(userId);
+
+        RedisUtils.delCacheMapValue(CacheNames.USER_TOTAL_BALANCE, strUserId);
         RedisUtils.setCacheMapValue(CacheNames.USER_TOTAL_BALANCE, strUserId, balance);
     }
 
@@ -231,8 +239,9 @@ public class BaseBusiness {
             cardLimitedVo.setMealCount(cardLimitedVo.getMealCount() + 1);
             cardLimitedVo.setDayCount(cardLimitedVo.getDayCount() + 1);
         }
-
-        RedisUtils.setCacheMapValue(CacheNames.T_XF_CARD_LIMITED, String.valueOf(cardLimitedVo.getCardNo()), cardLimitedVo);
+        String cardNo = String.valueOf(cardLimitedVo.getCardNo());
+        RedisUtils.delCacheMapValue(CacheNames.T_XF_CARD_LIMITED, cardNo);
+        RedisUtils.setCacheMapValue(CacheNames.T_XF_CARD_LIMITED, cardNo, cardLimitedVo);
         cardLimitedService.updateByVo(cardLimitedVo);
 
     }

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/check/CardConsumeValidation.java

@@ -105,7 +105,7 @@ public class CardConsumeValidation {
 
         try {
             // 等待所有任务完成或超时
-            if (!latch.await(200, TimeUnit.MILLISECONDS)) {
+            if (!latch.await(300, TimeUnit.MILLISECONDS)) {
                 return commonCheck.createError(TradeStatusEnum.VALIDATION_TIMEOUT);
             }
 

+ 1 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/check/CommonCheck.java

@@ -116,7 +116,7 @@ public class CommonCheck {
 
         try {
             // 等待所有任务完成或超时
-            if (!latch.await(200, TimeUnit.MILLISECONDS)) {
+            if (!latch.await(300, TimeUnit.MILLISECONDS)) {
                 return createError(TradeStatusEnum.VALIDATION_TIMEOUT);
             }
 

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

@@ -303,7 +303,7 @@ public class ConsumeRequestCheck {
 
         try {
             // 等待所有任务完成或超时
-            if (!latch.await(200, TimeUnit.MILLISECONDS)) {
+            if (!latch.await(300, TimeUnit.MILLISECONDS)) {
                 return commonCheck.createError(TradeStatusEnum.VALIDATION_TIMEOUT);
             }
 

+ 2 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/controller/v1/AuthController.java

@@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.api.ReturnResult;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.domain.model.ErrorResult;
 import org.dromara.server.consume.business.TermBusiness;
@@ -58,7 +59,7 @@ public class AuthController {
             // 5. 捕获所有未处理异常
             log.error("{}-[系统异常: {}]-[详情: {}]",
                 logPrefix, e.getClass().getSimpleName(), e.getMessage(), e);
-            return ErrorResult.innternalErrorResponse("服务暂时不可用,请稍后重试");
+            return new ReturnResult(false, 503, "服务暂时不可用,请稍后重试", null, startTime);
         }
     }
 }

+ 6 - 7
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/controller/v2/AuthController.java

@@ -1,9 +1,11 @@
 package org.dromara.server.consume.controller.v2;
 
+import cn.hutool.json.JSONUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.api.ReturnResult;
 import org.dromara.common.core.domain.R;
+import org.dromara.common.core.domain.model.ErrorResult;
 import org.dromara.server.consume.business.TermBusiness;
 import org.dromara.server.consume.domain.vo.yc.TermToken;
 import org.springframework.web.bind.annotation.*;
@@ -26,7 +28,6 @@ public class AuthController {
 	public Object getTermToken(@PathVariable("termId") Long termId, @RequestHeader(name = "admin") String admin,
                                @RequestHeader(name = "pwd") String pwd) {
         final String logPrefix = String.format("[获取设备TokenV2]-[termId:%s]", termId);
-        log.info("{}-[开始]", logPrefix);
         long startTime = System.currentTimeMillis();
 
         try {
@@ -40,19 +41,17 @@ public class AuthController {
 
             // 3. 处理业务结果
             if (R.isError(mapResult)) {
-                log.error("{}-[业务失败: {}]", logPrefix, mapResult.getMsg());
+                log.error("{}-[失败: {}]", logPrefix, mapResult.getMsg());
                 return new ReturnResult(false, 500, "获取Token失败: " + mapResult.getMsg(), null, startTime);
             }
-
+            log.info("{}-[成功:{}]-[耗时: {} ms]", logPrefix, JSONUtil.toJsonStr(mapResult.getData()), System.currentTimeMillis() - startTime);
             return new ReturnResult(true, 200, "获取成功", mapResult.getData(), startTime);
 
         } catch (Exception e) {
             // 4. 异常处理
             log.error("{}-[系统异常: {}]-[详情: {}]",
-                      logPrefix, e.getClass().getSimpleName(), e.getMessage(), e);
-            return new ReturnResult(false, 503, "服务暂时不可用,请稍后重试", null, startTime);
-        }finally {
-            log.info("{}-[结束,耗时: {}ms]", logPrefix, System.currentTimeMillis() - startTime);
+                logPrefix, e.getClass().getSimpleName(), e.getMessage(), e);
+            return ErrorResult.innternalErrorResponse("服务暂时不可用,请稍后重试");
         }
 	}
 }