Explorar o código

2022-12-12 修改redis存的set结构的数据,会出现null数据,全部转换成字符串处理。

chaiyunlong %!s(int64=3) %!d(string=hai) anos
pai
achega
b11c652f34

+ 8 - 3
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/controller/LabExitLineVertexController.java

@@ -1,5 +1,7 @@
 package com.zd.laboratory.controller;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.Feature;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import com.zd.common.core.annotation.Log;
 import com.zd.common.core.annotation.PreAuthorize;
@@ -23,6 +25,7 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -99,8 +102,8 @@ public class LabExitLineVertexController extends BaseController {
     @ApiOperation(value = "查询逃生线路主列表")
     public ResultData executeEvacuation(@RequestBody LabExitLineEvacuationVo labExitLineEvacuationVo) {
         Map <String, Object> joinPointVOS = labExitLineVertexService.executeEvacuation(labExitLineEvacuationVo);
-                //todo redis把计算的逃生线路相关信息存储起来
-        redisService.setCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId(), joinPointVOS, 3L, TimeUnit.HOURS);
+        //todo redis把计算的逃生线路相关信息存储起来
+        redisService.setCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId(), JSON.toJSONString(joinPointVOS), 3L, TimeUnit.HOURS);
         //todo 下发前端页面通知
         messageSendService.exitLineToFloor(labExitLineEvacuationVo.getFloorId());
         return ResultData.success(joinPointVOS);
@@ -127,7 +130,9 @@ public class LabExitLineVertexController extends BaseController {
     @ApiOperation(value = "获取redis的疏散数据")
     public ResultData getRedisEvacuation(@RequestBody LabExitLineEvacuationVo labExitLineEvacuationVo) {
         if(redisService.getCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId())!=null){
-            return ResultData.success(redisService.getCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId()));
+            String joinPointVOSStr = redisService.getCacheObject("exitLineBy"+labExitLineEvacuationVo.getBuildId()+""+labExitLineEvacuationVo.getFloorId());
+            Map <String, Object> joinPointVOS = (Map <String, Object>) JSON.parseObject(joinPointVOSStr, Object.class, Feature.OrderedField);
+            return ResultData.success(joinPointVOS);
         }
         return ResultData.success(new LinkedHashMap <>());
     }

+ 16 - 6
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/LabExitPointRelayServiceImpl.java

@@ -1,5 +1,9 @@
 package com.zd.laboratory.service.impl;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
+import com.alibaba.fastjson.parser.Feature;
 import com.zd.common.core.redis.RedisService;
 import com.zd.laboratory.config.TimeWaitConfigUtils;
 import com.zd.laboratory.domain.LabExitPointRelay;
@@ -62,14 +66,17 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
     }
 
     @Override
+    @SuppressWarnings("all")
     public int openLight(LabExitPointRelay labExitPointRelay) {
         List <LabExitPointRelay> labExitPointRelays = labExitPointRelayMapper.selectLabExitPointRelayList(labExitPointRelay);
 
         Map <String, Object> relayListMap = new HashMap <>();
         Set <LabExitLineJoinPointVO> lightPointSet = new HashSet <>();
         if(redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId())!=null){
-            relayListMap = redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId());
-            lightPointSet = (Set <LabExitLineJoinPointVO>) relayListMap.get("lightPointSet");
+            String joinPointVOSStr = redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId());
+            relayListMap = (Map <String, Object>) JSON.parseObject(joinPointVOSStr, Object.class, Feature.OrderedField);
+            JSONObject jsonObj = (JSONObject) JSONObject.parseObject(joinPointVOSStr, Object.class, Feature.OrderedField);
+            lightPointSet = jsonObj.getObject("lightPointSet", new TypeReference <Set <LabExitLineJoinPointVO>>(){});
         }
         //todo  开启继电器开关
         for(LabExitPointRelay relay : labExitPointRelays){
@@ -106,13 +113,14 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
             }
         }
         relayListMap.put("lightPointSet",lightPointSet);
-        redisService.setCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId(), relayListMap, 3L, TimeUnit.HOURS);
+        redisService.setCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId(), JSON.toJSONString(relayListMap), 3L, TimeUnit.HOURS);
         //todo  发送前端消息
         messageSendService.exitLineToFloor(labExitPointRelay.getFloorId());
         return 1;
     }
 
     @Override
+    @SuppressWarnings("all")
     public int closeLight(LabExitPointRelay labExitPointRelay) {
         List <LabExitPointRelay> labExitPointRelays = labExitPointRelayMapper.selectLabExitPointRelayList(labExitPointRelay);
 
@@ -120,8 +128,10 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
         Set <LabExitLineJoinPointVO> lightPointSet = new HashSet <>();
         Set <LabExitLineJoinPointVO> newLightPointSet = new HashSet <>();
         if(redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId())!=null){
-            relayListMap = redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId());
-            lightPointSet = (Set <LabExitLineJoinPointVO>) relayListMap.get("lightPointSet");
+            String joinPointVOSStr = redisService.getCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId());
+            relayListMap = (Map <String, Object>) JSON.parseObject(joinPointVOSStr, Object.class, Feature.OrderedField);
+            JSONObject jsonObj = (JSONObject) JSONObject.parseObject(joinPointVOSStr, Object.class, Feature.OrderedField);
+            lightPointSet = jsonObj.getObject("lightPointSet", new TypeReference <Set <LabExitLineJoinPointVO>>(){});
             newLightPointSet.addAll(lightPointSet) ;
         }
         //todo  开启继电器开关
@@ -149,7 +159,7 @@ public class LabExitPointRelayServiceImpl implements ILabExitPointRelayService {
             }
         }
         relayListMap.put("lightPointSet",newLightPointSet);
-        redisService.setCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId(), relayListMap, 3L, TimeUnit.HOURS);
+        redisService.setCacheObject("exitLineBy"+labExitPointRelay.getBuildId()+""+labExitPointRelay.getFloorId(), JSON.toJSONString(relayListMap), 3L, TimeUnit.HOURS);
         //todo  发送前端消息
         messageSendService.exitLineToFloor(labExitPointRelay.getFloorId());
         return 1;