From 17c299030059485929fa2ca901b2ab3d0786f49b Mon Sep 17 00:00:00 2001 From: one Date: Sat, 2 Dec 2023 13:28:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E6=97=B6=E8=BD=A8=E8=BF=B9=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E7=BC=93=E5=AD=98=E4=BB=A3=E7=A0=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 + .../service/impl/RealTimeTrajectoryEvent.java | 62 ++++++--- src/main/java/com/god/data/test/SJZTest.java | 121 ++++++++++++++++++ src/main/java/com/god/data/test/Test007.java | 11 +- 4 files changed, 181 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/god/data/test/SJZTest.java diff --git a/pom.xml b/pom.xml index d44976f..868f900 100644 --- a/pom.xml +++ b/pom.xml @@ -116,6 +116,11 @@ god-common-datasource + + org.springframework.boot + spring-boot-starter-test + + com.god diff --git a/src/main/java/com/god/data/service/impl/RealTimeTrajectoryEvent.java b/src/main/java/com/god/data/service/impl/RealTimeTrajectoryEvent.java index 4c0ee96..22f9f9d 100644 --- a/src/main/java/com/god/data/service/impl/RealTimeTrajectoryEvent.java +++ b/src/main/java/com/god/data/service/impl/RealTimeTrajectoryEvent.java @@ -8,8 +8,10 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; /** * 实时轨迹事件 @@ -23,13 +25,14 @@ public class RealTimeTrajectoryEvent implements EventService { @Autowired private RedisService redisService; -// @Autowired -// private RedisTemplate redisTemplate; - @Autowired private RabbitTemplate rabbitTemplate; + /** + * 实时轨迹标识 + */ public static final String LOCUS = "locus"; + /** * 添加时间 */ @@ -49,20 +52,45 @@ public class RealTimeTrajectoryEvent implements EventService { carMessage.getLongitude(), carMessage.getLatitude() ); - //判断是否有key 有则更新数据 - if (redisService.hasKey(LOCUS + carMessage.getVin())){ - //获取所有车辆数据 - List cacheList = redisService.getCacheList(carMessage.getVin()); - //添加车辆信息 - cacheList.add(carMessage); - //redis更新 - redisService.setCacheList(LOCUS + carMessage.getVin(), cacheList);; - }else {//没有创建对应缓存 - ArrayList carMessages = new ArrayList<>(); - carMessages.add(carMessage); - redisService.setCacheList(LOCUS + carMessage.getVin(),carMessages); + //新建一个用于存经纬度的集合 保存精度和维度 + ArrayList bigDecimals = new ArrayList<>(); + //增加经纬度数据 + bigDecimals.add(carMessage.getLongitude()); + bigDecimals.add(carMessage.getLatitude()); + //预防redis空值 避免查询不存在的key返回导致无法操作 + if (redisService.hasKey(LOCUS + carMessage.getVin())){//vin轨迹的键存在 + //获取键 对应的 值 + Map cacheMap = redisService.getCacheMap(LOCUS + carMessage.getVin()); + //前端需要格式 [ [..] , [..] ] 所以需要再次新建一个集合来存之前的集合 + + ArrayList> orDefault = (ArrayList>) cacheMap.getOrDefault(carMessage.getVin(), new ArrayList>()); + addLocusRedisInfo(cacheMap, + orDefault, + bigDecimals, + carMessage.getVin()); + }else { + //代表当前vin没有实时轨迹相关数据 直接新建集合存储即可 + addLocusRedisInfo(new HashMap<>(), + new ArrayList<>(), + bigDecimals, + carMessage.getVin()); } - //rabbit进行通知开启实时轨迹 + } + + /** + * 封装公共存取redis方法 + * @param map + * @param lists + * @param list + * @param vin + */ + private void addLocusRedisInfo(Map map, + ArrayList> lists, + ArrayList list, + String vin) { + lists.add(list); + map.put(vin,lists); + redisService.setCacheMap(LOCUS + vin,map); } /** diff --git a/src/main/java/com/god/data/test/SJZTest.java b/src/main/java/com/god/data/test/SJZTest.java new file mode 100644 index 0000000..14efa5e --- /dev/null +++ b/src/main/java/com/god/data/test/SJZTest.java @@ -0,0 +1,121 @@ +package com.god.data.test; + +import com.god.common.redis.service.RedisService; +import com.god.data.common.domain.CarMessage; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.FactoryBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +/** + * Description: + * + * @Author: sun-cool-boy + * @Date: 2023/12/1 + * @info: + */ +@SpringBootTest +public class SJZTest { + /** + * 实时轨迹存储 + */ + public static final String ALL_LOCUS_INFO = "all_locus_info"; + /** + * 实时轨迹标识 + */ + public static final String LOCUS = "locus"; + + @Autowired + private RedisService redisService; + @Test + public void testRedis(){ + ArrayList bigDecimals = new ArrayList<>(); + bigDecimals.add(BigDecimal.valueOf(12.222)); + bigDecimals.add(BigDecimal.valueOf(35.232)); + ArrayList> arrayLists = new ArrayList<>(); + arrayLists.add(bigDecimals); + HashMap>> map = new HashMap<>(); + map.put("vim",arrayLists); + redisService.setCacheMap("123",map); + + Map cacheMap = redisService.getCacheMap("123"); + cacheMap.forEach((key,value)->{ + System.out.println(key + " " +value); + }); + + } + + @Test + public void test2(){ + CarMessage one = CarMessage.builder() + .vin("vin5211314") + .longitude(BigDecimal.valueOf(22.4512439)) + .latitude(BigDecimal.valueOf(23.49785)) + .build(); + + CarMessage two = CarMessage.builder() + .vin("vin5211314") + .longitude(BigDecimal.valueOf(44.91230)) + .latitude(BigDecimal.valueOf(55.45456)) + .build(); + + CarMessage three = CarMessage.builder() + .vin("vin5211314") + .longitude(BigDecimal.valueOf(29.41235)) + .latitude(BigDecimal.valueOf(36.41235)) + .build(); + + ArrayList list = new ArrayList<>(); + list.add(one); + list.add(two); + list.add(three); + for (CarMessage carMessage : list) { + //新建一个用于存经纬度的集合 保存精度和维度 + ArrayList bigDecimals = new ArrayList<>(); + bigDecimals.add(carMessage.getLongitude()); + bigDecimals.add(carMessage.getLatitude()); + if (redisService.hasKey(ALL_LOCUS_INFO)){//vin轨迹的键存在 + //获取键 对应的 值 + Map cacheMap = redisService.getCacheMap(ALL_LOCUS_INFO); + //前端需要格式 [ [..] , [..] ] 所以需要再次新建一个集合来存之前的集合 + ArrayList> orDefault = (ArrayList>) cacheMap.getOrDefault(carMessage.getVin(), new ArrayList>()); + addLocusRedisInfo(cacheMap, + orDefault, + bigDecimals, + carMessage.getVin()); + }else { + //代表当前vin没有实时轨迹相关数据 直接新建集合存储即可 + addLocusRedisInfo(new HashMap<>(), + new ArrayList<>(), + bigDecimals, + carMessage.getVin()); + } + + } + } + private void addLocusRedisInfo(Map map, + ArrayList> lists, + ArrayList list, + String vin) { + lists.add(list); + map.put(vin,lists); + redisService.setCacheMap(ALL_LOCUS_INFO,map); + } + + @Test + public void testThree(){ + Map cacheMap = redisService.getCacheMap(ALL_LOCUS_INFO); + ArrayList> orDefault = (ArrayList>) cacheMap.getOrDefault("vin123123123", new ArrayList>()); + ArrayList bigDecimals = orDefault.get(orDefault.size() - 1); + bigDecimals.forEach(obj -> { + System.out.println(obj); + }); + } + +} diff --git a/src/main/java/com/god/data/test/Test007.java b/src/main/java/com/god/data/test/Test007.java index 1a5bc22..ae1d429 100644 --- a/src/main/java/com/god/data/test/Test007.java +++ b/src/main/java/com/god/data/test/Test007.java @@ -1,9 +1,16 @@ package com.god.data.test; -import com.alibaba.fastjson2.JSONObject; +import com.god.common.redis.service.RedisService; import com.god.data.common.domain.CarMessage; import com.god.data.utils.AnalyzeUtils; import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; /** * @description: 解析测试 @@ -12,6 +19,7 @@ import org.junit.jupiter.api.Test; */ public class Test007 { + /** * 测试方法:showStr */ @@ -31,4 +39,5 @@ public class Test007 { System.out.println(carMessage); } + }