فهرست منبع

feat(消费服务): 代码优化

1.消费机获取token不再锁,直接从redis中获取
2.检查消费用户信息时使用了bean.copy改为用mapstruct映射
luo.yibo@datuai.com 11 ماه پیش
والد
کامیت
75780c13f5

+ 19 - 8
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/CheckBusiness.java

@@ -23,6 +23,7 @@ import org.dromara.common.core.utils.RecordIdUtils;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.consume.cache.TokenManager;
 import org.dromara.server.consume.domain.bo.XfCardLimitedBo;
+import org.dromara.server.consume.domain.convert.RemoteVoConvert;
 import org.dromara.server.consume.domain.vo.PtBagVo;
 import org.dromara.server.consume.domain.vo.XfCardLimitedVo;
 import org.dromara.server.consume.domain.vo.XfConsumeDetailOriginalVo;
@@ -178,6 +179,8 @@ public class CheckBusiness {
         long factoryId = ObjectUtil.isEmpty(bo.getFactoryId()) ? 0 : bo.getFactoryId();
         long userNo = ObjectUtil.isEmpty(bo.getUserNo()) ? 0 : bo.getUserNo();
         String userNumb = bo.getUserNumb() == null ? null : bo.getUserNumb();
+
+
         // 卡流水号检查
         if (cardNo > 0) {
             return checkCardNo(bo, userAccountVo, userCardVo);
@@ -375,8 +378,10 @@ public class CheckBusiness {
         bo.setCardTypeName(cardVo.getCardTypeName());
         bo.setExpireDate(accountVo.getLifespan());
         bo.setDeptName(accountVo.getDeptName());
-        BeanUtil.copyProperties(accountVo, userAccountVo);
-        BeanUtil.copyProperties(cardVo, userCardVo);
+        // BeanUtil.copyProperties(accountVo, userAccountVo);
+        RemoteVoConvert.INSTANCE.copyRemoteUserAccountVo(accountVo, userAccountVo);
+        // BeanUtil.copyProperties(cardVo, userCardVo);
+        RemoteVoConvert.INSTANCE.copyRemoteCardVo(cardVo, userCardVo);
         return R.ok();
     }
 
@@ -409,8 +414,10 @@ public class CheckBusiness {
         bo.setCardTypeName(cardVo.getCardTypeName());
         bo.setExpireDate(accountVo.getLifespan());
         bo.setDeptName(accountVo.getDeptName());
-        BeanUtil.copyProperties(accountVo, userAccountVo);
-        BeanUtil.copyProperties(cardVo, userCardVo);
+        // BeanUtil.copyProperties(accountVo, userAccountVo);
+        RemoteVoConvert.INSTANCE.copyRemoteUserAccountVo(accountVo, userAccountVo);
+        // BeanUtil.copyProperties(cardVo, userCardVo);
+        RemoteVoConvert.INSTANCE.copyRemoteCardVo(cardVo, userCardVo);
         return R.ok();
     }
 
@@ -453,8 +460,10 @@ public class CheckBusiness {
         bo.setCardTypeName(cardVo.getCardTypeName());
         bo.setExpireDate(accountVo.getLifespan());
         bo.setDeptName(accountVo.getDeptName());
-        BeanUtil.copyProperties(accountVo, userAccountVo);
-        BeanUtil.copyProperties(cardVo, userCardVo);
+        // BeanUtil.copyProperties(accountVo, userAccountVo);
+        RemoteVoConvert.INSTANCE.copyRemoteUserAccountVo(accountVo, userAccountVo);
+        // BeanUtil.copyProperties(cardVo, userCardVo);
+        RemoteVoConvert.INSTANCE.copyRemoteCardVo(cardVo, userCardVo);
         return R.ok();
     }
 
@@ -498,8 +507,10 @@ public class CheckBusiness {
         bo.setFactoryId(cardVo.getFactoryId());
         bo.setCardTypeName(cardVo.getCardTypeName());
 
-        BeanUtil.copyProperties(accountVo, userAccountVo);
-        BeanUtil.copyProperties(cardVo, userCardVo);
+        // BeanUtil.copyProperties(accountVo, userAccountVo);
+        RemoteVoConvert.INSTANCE.copyRemoteUserAccountVo(accountVo, userAccountVo);
+        // BeanUtil.copyProperties(cardVo, userCardVo);
+        RemoteVoConvert.INSTANCE.copyRemoteCardVo(cardVo, userCardVo);
 
         return R.ok();
     }

+ 25 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/TermBusiness.java

@@ -11,6 +11,8 @@ import org.dromara.common.core.config.DefaultConfig;
 import org.dromara.common.core.constant.DefaultConstants;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.enums.SystemUseTypeEnum;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.server.consume.cache.TokenManager;
 import org.dromara.server.consume.domain.vo.XfTermVo;
 import org.dromara.server.consume.domain.vo.yc.RoomInfo;
@@ -106,6 +108,29 @@ public class TermBusiness {
         return R.ok(MessageFormat.format("获取token成功,设备编号[{0}],账号[{1}]", termNo, admin), termToken);
     }
 
+    public R<TermToken> getTermTokenNew(Long termNo, String admin, String pwd){
+        String strTermNo = String.valueOf(termNo);
+        String cacheName = StringUtils.format("{}:term_token", defaultConfig.getTenantId());
+        TermToken termToken =  RedisUtils.getCacheMapValue(cacheName, strTermNo);
+        if(ObjectUtil.isEmpty(termToken)|| termToken.getExpireTime() < new Date().getTime()){
+            LocalDateTime ldt = LocalDateTime.of(2000, 1, 1, 0, 0, 0);
+            Date minDate = Date.from(ldt.toInstant(ZoneOffset.of("+8")));
+
+            LocalDateTime now = LocalDateTime.now();
+            LocalDateTime expireTime = now.plusHours(1);
+
+            RemoteXfTermVo remoteVo = remoteTermService.queryByNo(termNo, defaultConfig.getTenantId());
+            if (ObjectUtil.isEmpty(remoteVo)) {
+                return R.fail(MessageFormat.format("机号为[{0}]的设备不存在", termNo), null);
+            }
+
+            termToken = new TermToken(strTermNo, UUID.randomUUID().toString(), admin, new Date().getTime(), minDate.getTime(),
+                                      Date.from(expireTime.toInstant(ZoneOffset.of("+8"))).getTime(), remoteVo.getRoomName());
+
+            RedisUtils.setCacheMapValue(cacheName, strTermNo, termToken);
+        }
+        return R.ok(MessageFormat.format("获取token成功,设备编号[{0}],账号[{1}]", termNo, admin), termToken);
+    }
     public R<TermInfo> getTermInfoByTermNo(Long termNo) {
         return this.getTermInfoByTermNo(termNo, defaultConfig.getTenantId());
     }

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

@@ -35,7 +35,8 @@ public class AuthController {
         if (ObjectUtil.isEmpty(pwd)) {
             pwd = "123456";
         }
-        R<TermToken> mapResult = termBusiness.getTermToken(termId, admin, pwd);
+        // R<TermToken> mapResult = termBusiness.getTermToken(termId, admin, pwd);
+        R<TermToken> mapResult = termBusiness.getTermTokenNew(termId, admin, pwd);
 
         if (R.isError(mapResult)) {
             ErrorResult result = new ErrorResult();

+ 0 - 1
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/controller/v1/TermsController.java

@@ -50,7 +50,6 @@ public class TermsController {
      * @param termNo 设备编号
      * @return 校时
      */
-
     @GetMapping("/CheckTime/{termNo}")
     public Object checkTermTime(@PathVariable("termNo") Integer termNo){
         R<Map<String,Object>> mapResult = termBusiness.checkTermTime(termNo);

+ 27 - 0
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/domain/convert/RemoteVoConvert.java

@@ -0,0 +1,27 @@
+package org.dromara.server.consume.domain.convert;
+
+import org.dromara.backstage.api.domain.vo.RemoteCardVo;
+import org.dromara.backstage.api.domain.vo.RemoteUserAccountVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.MappingTarget;
+import org.mapstruct.ReportingPolicy;
+import org.mapstruct.factory.Mappers;
+
+/**
+ * 消费业务对象转换类
+ * <p>
+ *
+ * @author luoyibo
+ * @version 2.2.0
+ * @date 2025-06-06
+ * @since JDK17
+ */
+@Mapper(componentModel = MappingConstants.ComponentModel.SPRING, unmappedTargetPolicy = ReportingPolicy.IGNORE)
+public interface RemoteVoConvert {
+    RemoteVoConvert INSTANCE = Mappers.getMapper(RemoteVoConvert.class);
+
+    void copyRemoteUserAccountVo(@MappingTarget RemoteUserAccountVo target, RemoteUserAccountVo source);
+
+    void copyRemoteCardVo(@MappingTarget RemoteCardVo target, RemoteCardVo source);
+}