Эх сурвалжийг харах

处理ws链接后 删除redis缓存半小时的逻辑

jingyuanchao 10 сар өмнө
parent
commit
da2a92c788

+ 4 - 5
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/iot/service/impl/IotDeviceInfoServiceImpl.java

@@ -21,6 +21,7 @@ import com.xunmei.common.core.domain.work.dto.ControlDeviceDto;
 import com.xunmei.common.core.domain.work.dto.WorkDayDto;
 import com.xunmei.common.core.enums.iot.BaseDeviceTypeEnum;
 import com.xunmei.common.core.enums.iot.DefenceAreaType;
+import com.xunmei.common.core.enums.iot.DeviceNetStatusEnum;
 import com.xunmei.common.core.enums.work.RedirectTypeEnum;
 import com.xunmei.common.core.utils.JacksonUtils;
 import com.xunmei.common.redis.enums.RedisDelayQueueEnum;
@@ -44,7 +45,6 @@ import com.xunmei.host.websocket.dto.dvs.DevicePushResult;
 import com.xunmei.host.websocket.dto.dvs.DvsBaseInfo;
 import com.xunmei.host.websocket.dto.dvs.SubDeviceInfo;
 import com.xunmei.host.websocket.enums.DeviceCacheEnum;
-import com.xunmei.common.core.enums.iot.DeviceNetStatusEnum;
 import com.xunmei.host.websocket.enums.ProductEnums;
 import com.xunmei.host.websocket.enums.TopicTypeEnums;
 import com.xunmei.host.websocket.redis.delay.RedisDelayQueueHandle;
@@ -354,10 +354,8 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
                     List<IotDeviceInfo> syncToAssetDeviceList = new ArrayList<>();
                     handleDvsAndFSUDeviceInfo(dataList, serverInfo, syncToAssetDeviceList);
                     handleAlarmHostDeviceInfo(dataList, serverInfo, syncToAssetDeviceList);
-
                     handelAssetDeviceInfo(syncToAssetDeviceList);
-
-                    return WebsocketResult.replySuccess(req);
+                    break;
                 case WebSocketConstants.DEVICES_STATUS_EVENT:
                     JSONArray statusArray = (JSONArray) data;
                     List<DeviceStatusInfo> statusInfos = statusArray.toJavaList(DeviceStatusInfo.class);
@@ -370,6 +368,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
                 //平台下发设备后,主机上报该设备保存结果
                 case WebSocketConstants.INCREMENT_DEVICES_RESULT_EVENT:
                     dealPushDeviceResult(data);
+                    break;
                 default:
                     return WebsocketResult.replyError(req, ErrorMsgConstants.ERROR_ROUTE);
             }
@@ -1382,7 +1381,7 @@ public class IotDeviceInfoServiceImpl extends ServiceImpl<IotDeviceInfoMapper, I
         object.put("equipmentTypeId", deviceTypeEnum.getCode());
         final Long deviceBrand = deviceInfo.getDeviceBrand();
         final SysMultiLayerDictionary dictionary = baseMapper.selectSysMultiLayerDictionaryById(deviceBrand);
-        if (dictionary!=null){
+        if (dictionary != null) {
             object.put("producer", dictionary.getName());
         }
         object.put("netAddress", extend.getNetAddress());

+ 3 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/server/service/IotServerInfoService.java

@@ -5,6 +5,7 @@ import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
 import com.xunmei.system.api.domain.SysOrg;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * <p>
@@ -29,4 +30,6 @@ public interface IotServerInfoService extends IService<IotServerInfo> {
     SysOrg selectOrgByToken(String token);
 
     void updateConnectTimeByToken(String token, Date date);
+
+    List<IotServerInfo> selectOnlineServer(List<Long> orgIds);
 }

+ 14 - 0
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/server/service/impl/IotServerInfoServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xunmei.common.core.constant.Constants;
 import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
+import com.xunmei.common.core.enums.iot.IotServerConnectStatus;
 import com.xunmei.common.core.utils.uuid.UUID;
 import com.xunmei.common.redis.utils.RedisUtils;
 import com.xunmei.host.server.mapper.IotServerInfoMapper;
@@ -18,6 +19,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Date;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -108,4 +110,16 @@ public class IotServerInfoServiceImpl extends ServiceImpl<IotServerInfoMapper, I
         wrapper.last(Constants.LIMIT1);
         return baseMapper.selectOne(wrapper);
     }
+
+    @Override
+    public List<IotServerInfo> selectOnlineServer(List<Long> orgIds) {
+        LambdaQueryWrapper<IotServerInfo> wrapper=new LambdaQueryWrapper<IotServerInfo>();
+
+        wrapper.eq(IotServerInfo::getEnable,0);
+        wrapper.eq(IotServerInfo::getRegisterCodeStatus,1);
+        wrapper.eq(IotServerInfo::getIotStatus, IotServerConnectStatus.CONNECTED.getIdx());
+        wrapper.in(ObjectUtil.isNotEmpty(orgIds),IotServerInfo::getOrgId);
+        wrapper.select(IotServerInfo::getIotCode,IotServerInfo::getOrgId);
+        return baseMapper.selectList(wrapper);
+    }
 }

+ 1 - 4
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/holder/WebSocketSessionHolder.java

@@ -64,10 +64,7 @@ public class WebSocketSessionHolder {
      */
     public static void addSession(String sessionKey, WebSocketSession session) {
         USER_SESSION_MAP.put(sessionKey, session);
-        /**
-         * 设置缓存,半个小时失效
-         */
-        RedisUtils.setCacheObject(REDIS_TOPIC_WEBSOCKET_TOKEN + sessionKey, sessionKey, Duration.ofMillis(1000 * 60 * 35));
+        RedisUtils.setCacheObject(REDIS_TOPIC_WEBSOCKET_TOKEN + sessionKey, sessionKey);
     }
 
     /**

+ 9 - 24
soc-modules/soc-modules-host/src/main/java/com/xunmei/host/websocket/service/impl/WebsocketServiceImpl.java

@@ -2,33 +2,28 @@ package com.xunmei.host.websocket.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.xunmei.common.redis.utils.RedisUtils;
-import com.xunmei.host.north.service.IotWebsocketMsgService;
+import com.xunmei.common.core.domain.iot.domain.IotServerInfo;
+import com.xunmei.host.server.service.IotServerInfoService;
 import com.xunmei.host.websocket.constant.WebSocketConstants;
 import com.xunmei.host.websocket.dto.WebsocketResult;
 import com.xunmei.host.websocket.enums.TopicTypeEnums;
-import com.xunmei.host.websocket.holder.WebSocketSessionHolder;
 import com.xunmei.host.websocket.redis.WebsocketPublisher;
 import com.xunmei.host.websocket.service.WebsocketService;
 import com.xunmei.system.api.domain.websocket.RedisWebsocketMsg;
 import com.xunmei.system.api.util.LogUtils;
-import org.redisson.api.RKeys;
-import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.Resource;
-import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 @Service
 public class WebsocketServiceImpl implements WebsocketService {
     @Autowired
     private WebsocketPublisher websocketPublisher;
-    @Resource
-    @Lazy
-    private IotWebsocketMsgService websocketMsgService;
+    @Autowired
+    private IotServerInfoService serverInfoService;
 
     @Override
     public void getDevices() {
@@ -76,18 +71,8 @@ public class WebsocketServiceImpl implements WebsocketService {
         }
     }
 
-    public  Set<String> getAllIotCode() {
-        RedissonClient client = RedisUtils.getClient();
-        RKeys keys = client.getKeys();
-        Iterable<String> keyTokens = keys.getKeysByPattern(WebSocketSessionHolder.REDIS_TOPIC_WEBSOCKET_TOKEN + "*");
-        Set<String> tokens = new HashSet();
-        for (String keyToken : keyTokens) {
-            String token = (String) RedisUtils.getCacheObject(keyToken);
-            tokens.add(token);
-        }
-        //tokens.add("d690deb4-5bf8-4d63-b7a7-dd698559910c");
-        return tokens;
+    public Set<String> getAllIotCode() {
+        final List<IotServerInfo> server = serverInfoService.selectOnlineServer(null);
+        return server.stream().map(IotServerInfo::getIotCode).collect(Collectors.toSet());
     }
-
-
 }