Przeglądaj źródła

feat:1、设备登录、设备鉴权增加租户ID字段,进行租户间数据隔离。2、设备HTTP心跳接口增加返回任务中心最新任务。3、心跳记录通过租户ID字段进行数据隔离

lihao16 3 miesięcy temu
rodzic
commit
b8f964cd58

+ 0 - 3
smsb-admin/src/main/resources/application.yml

@@ -186,9 +186,6 @@ tenant:
     - smsb_source_tree_rel
     - smsb_ota_package
     - smsb_ota_record
-    - smsb_device_login
-    - smsb_device_auth
-    - smsb_device_heart_record
     - smsb_dify_datasets_file
 
 # MyBatisPlus配置

+ 5 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/SmsbDeviceAuth.java

@@ -60,6 +60,11 @@ public class SmsbDeviceAuth {
      */
     private String authKey;
 
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
     /**
      * 创建时间
      */

+ 6 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/SmsbDeviceHeartRecord.java

@@ -57,6 +57,12 @@ public class SmsbDeviceHeartRecord {
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;
 
+    /**
+     * 租户ID
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private String tenantId;
+
     /**
      * 请求参数
      */

+ 5 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/SmsbDeviceLogin.java

@@ -59,6 +59,11 @@ public class SmsbDeviceLogin {
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;
 
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
     /**
      * 请求参数
      */

+ 11 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/constants/DeviceTaskConstants.java

@@ -6,6 +6,17 @@ package com.inspur.device.domain.constants;
  */
 public class DeviceTaskConstants {
 
+    /**
+     * 设备任务记录缓存key
+     */
+    public static final String GLOBAL_DEVICE_TASK_KEY_RECORD_KEY = "global:device:task:record:";
+
+    /**
+     * 设备任务超时时间
+     * 90 秒
+     */
+    public static final Integer DEVICE_TASK_TIME_OUT = 90;
+
     /** 设备任务类型 begin */
 
     /** 设备时序更新 */

+ 1 - 1
smsb-modules/smsb-device/src/main/java/com/inspur/device/mapper/SmsbDeviceAuthMapper.java

@@ -22,6 +22,6 @@ public interface SmsbDeviceAuthMapper extends BaseMapperPlus<SmsbDeviceAuth, Sms
      * @param bo
      * @return
      */
-    @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
+    // @InterceptorIgnore(tenantLine = "true", dataPermission = "false")
     Page<SmsbDeviceAuthVo> selectPageVoList(@Param("page") Page<SmsbDeviceAuth> page, @Param("bo") SmsbDeviceAuthBo bo);
 }

+ 11 - 2
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceAuthServiceImpl.java

@@ -11,6 +11,7 @@ import com.inspur.device.domain.constants.DeviceConstants;
 import com.inspur.device.domain.vo.*;
 import com.inspur.device.mapper.*;
 import com.inspur.device.service.ISmsbDeviceAuthService;
+import com.inspur.device.service.ISmsbDeviceService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.dromara.common.core.domain.R;
@@ -41,6 +42,8 @@ public class SmsbDeviceAuthServiceImpl implements ISmsbDeviceAuthService {
     private final SmsbDeviceXfApiMapper xfApiMapper;
     private final SmsbDeviceChatKeyMapper chatKeyMapper;
 
+    private final ISmsbDeviceService smsbDeviceService;
+
     /**
      * 查询设备鉴权
      *
@@ -143,7 +146,6 @@ public class SmsbDeviceAuthServiceImpl implements ISmsbDeviceAuthService {
 
     @Override
     public R<String> deviceAuth(HttpHeartbeatReq requestParam) {
-
         SmsbDeviceAuth insert = new SmsbDeviceAuth();
         String deviceIp = requestParam.getDeviceIp();
         insert.setDeviceIp(deviceIp);
@@ -151,6 +153,10 @@ public class SmsbDeviceAuthServiceImpl implements ISmsbDeviceAuthService {
         insert.setEncryptCode(encryptCode);
         // test for fan 设备mac加密出来的设备表示,
         String identifier = requestParam.getIdentifier();
+        SmsbDeviceVo smsbDeviceVo = smsbDeviceService.getDeviceByIdentifier(identifier);
+        if (null != smsbDeviceVo) {
+            insert.setTenantId(smsbDeviceVo.getTenantId());
+        }
         insert.setIdentifier(identifier);
         Integer authResult = 1;
         String authRemark = "";
@@ -197,7 +203,6 @@ public class SmsbDeviceAuthServiceImpl implements ISmsbDeviceAuthService {
         return R.ok(authRemark);
     }
 
-//  test for fan 这里是鉴权实现
     @Override
     public R<AgentAuthRes> deviceAgentAuth(HttpHeartbeatReq requestParam) {
         SmsbDeviceAuth insert = new SmsbDeviceAuth();
@@ -207,6 +212,10 @@ public class SmsbDeviceAuthServiceImpl implements ISmsbDeviceAuthService {
         insert.setEncryptCode(encryptCode);
         // test for fan 设备mac加密出来的设备表示,
         String identifier = requestParam.getIdentifier();
+        SmsbDeviceVo smsbDeviceVo = smsbDeviceService.getDeviceByIdentifier(identifier);
+        if (null != smsbDeviceVo) {
+            insert.setTenantId(smsbDeviceVo.getTenantId());
+        }
         insert.setIdentifier(identifier);
         Integer authResult = 1;
         String authRemark = "";

+ 1 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceLoginServiceImpl.java

@@ -162,6 +162,7 @@ public class SmsbDeviceLoginServiceImpl implements ISmsbDeviceLoginService {
         // 合法设备
         add.setLoginResult(1);
         add.setIdentifier(reqIdentifier);
+        add.setIdentifier(smsbDeviceVo.getTenantId());
         baseMapper.insert(add);
         // 2 数据库缓存auth key
         String authKey = UUID.randomUUID().toString().replace("-","");

+ 5 - 2
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceServiceImpl.java

@@ -17,6 +17,7 @@ import com.inspur.device.domain.SmsbDeviceRunInfo;
 import com.inspur.device.domain.bo.HttpHeartbeatReq;
 import com.inspur.device.domain.bo.SmsbDeviceBo;
 import com.inspur.device.domain.constants.DeviceConstants;
+import com.inspur.device.domain.constants.DeviceTaskConstants;
 import com.inspur.device.domain.constants.ResultCodeEnum;
 import com.inspur.device.domain.vo.*;
 import com.inspur.device.mapper.SmsbDeviceHeartRecordMapper;
@@ -424,6 +425,7 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
         }else {
             smsbDeviceHeartRecord.setTimeInterval(0L);
         }
+        smsbDeviceHeartRecord.setTenantId(smsbDeviceVo.getTenantId());
         smsbDeviceHeartRecordMapper.insert(smsbDeviceHeartRecord);
         // 5 记录设备状态
         SmsbDeviceRunInfo deviceRunInfo = new SmsbDeviceRunInfo();
@@ -439,8 +441,9 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
         smsbDeviceRunInfoMapper.insert(deviceRunInfo);
         // 6 Redis 缓存
         RedisUtils.setCacheObject(DeviceConstants.REDIS_DEVICE_RUN_INFO_KEY + requestParam.getIdentifier(), deviceRunInfo, Duration.ofMinutes(1));
-
-        return R.ok();
+        // 返回当前设备的Redis缓存的任务中心任务
+        String taskCache = RedisUtils.getCacheObject(DeviceTaskConstants.GLOBAL_DEVICE_TASK_KEY_RECORD_KEY + requestParam.getIdentifier());
+        return StringUtils.isEmpty(taskCache) ? R.ok() : R.ok(taskCache);
     }
 
     @Override

+ 10 - 1
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceTaskServiceImpl.java

@@ -20,8 +20,11 @@ import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.config.RedisConfig;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.springframework.stereotype.Service;
 
+import java.time.Duration;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -61,7 +64,9 @@ public class SmsbDeviceTaskServiceImpl implements ISmsbDeviceTaskService {
         lqw.orderByDesc(SmsbDeviceTask::getCreateTime);
         lqw.last("limit 1");
         SmsbDeviceTaskVo result = baseMapper.selectVoOne(lqw);
-
+        // 清空任务缓存
+        String redisKey = DeviceTaskConstants.GLOBAL_DEVICE_TASK_KEY_RECORD_KEY + identifier;
+        RedisUtils.deleteObject(redisKey);
         return R.ok(result);
     }
 
@@ -74,6 +79,10 @@ public class SmsbDeviceTaskServiceImpl implements ISmsbDeviceTaskService {
         smsbDeviceTask.setTaskParam(taskParam);
         smsbDeviceTask.setIsEnd(0);
         baseMapper.insert(smsbDeviceTask);
+        // 缓存Redis key
+        String redisValue = taskType + "/" + smsbDeviceTask.getId();
+        String redisKey = DeviceTaskConstants.GLOBAL_DEVICE_TASK_KEY_RECORD_KEY + deviceVo.getIdentifier();
+        RedisUtils.setCacheObject(redisKey, redisValue, Duration.ofSeconds(DeviceTaskConstants.DEVICE_TASK_TIME_OUT));
     }
 
     @Override

+ 9 - 0
smsb-modules/smsb-netty/src/main/java/com/inspur/netty/handler/HeartServerHandler.java

@@ -1,8 +1,10 @@
 package com.inspur.netty.handler;
 
 import com.inspur.device.domain.SmsbDeviceHeartRecord;
+import com.inspur.device.domain.vo.SmsbDeviceVo;
 import com.inspur.device.mapper.SmsbDeviceHeartRecordMapper;
 import com.inspur.device.mapper.SmsbDeviceMapper;
+import com.inspur.device.service.ISmsbDeviceService;
 import com.inspur.netty.message.push.PushMessageType;
 import com.inspur.netty.message.receive.ReceiveMessageType;
 import com.inspur.netty.util.NettyConstants;
@@ -31,6 +33,8 @@ public class HeartServerHandler extends ChannelInboundHandlerAdapter {
 
     private static final SmsbDeviceHeartRecordMapper smsbDeviceHeartRecordMapper = SpringUtils.getBean(SmsbDeviceHeartRecordMapper.class);
 
+    private static final ISmsbDeviceService smsbDeviceService = SpringUtils.getBean(ISmsbDeviceService.class);
+
 
     @Override
     public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
@@ -96,6 +100,11 @@ public class HeartServerHandler extends ChannelInboundHandlerAdapter {
             smsbDeviceHeartRecord.setTimeInterval(currentNettyHeartTime - lastNettyHeartTime);
         }
         smsbDeviceHeartRecord.setIdentifier(identifier);
+        // 获取设备信息 缓存中
+        SmsbDeviceVo smsbDeviceVo = smsbDeviceService.getDeviceByIdentifier(identifier);
+        if (null != smsbDeviceVo) {
+            smsbDeviceHeartRecord.setTenantId(smsbDeviceVo.getTenantId());
+        }
         smsbDeviceHeartRecordMapper.insert(smsbDeviceHeartRecord);
 
     }

+ 6 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbItemPushServiceImpl.java

@@ -43,6 +43,7 @@ import org.dromara.common.core.utils.StreamUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.redis.utils.RedisUtils;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.workflow.common.constant.FlowConstant;
 import org.dromara.workflow.common.enums.MessageTypeEnum;
@@ -543,6 +544,11 @@ public class SmsbItemPushServiceImpl implements ISmsbItemPushService {
             insertList.add(deviceTask);
         }
         smsbDeviceTaskMapper.insertBatch(insertList);
+        for (SmsbDeviceTask deviceTask : insertList) {
+            String redisValue = DeviceTaskConstants.DEVICE_TASK_PLAY_LINE_UPDATE + "/" + deviceTask.getId();
+            RedisUtils.setCacheObject(DeviceTaskConstants.GLOBAL_DEVICE_TASK_KEY_RECORD_KEY + deviceTask.getIdentifier(),
+                redisValue, Duration.ofSeconds(DeviceTaskConstants.DEVICE_TASK_TIME_OUT));
+        }
     }
 
     private void pushNettyMsg(List<Long> deviceIds) {