From 2cc014deb1fe813d12586854c8514fbeaa177adb Mon Sep 17 00:00:00 2001 From: wuxiaolong <3210950394@qq.com> Date: Tue, 5 Dec 2023 09:18:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=B5=E5=AD=90=E5=9B=B4=E6=A0=8F=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E7=AC=AC=E4=B8=80=E7=89=88=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- pom.xml | 6 ++ .../parseSystem/event/impl/FenceEvent.java | 31 ++++++++-- .../com/parseSystem/vehicle/FenceData.java | 61 +++++++++++++++++++ src/test/java/Test.java | 45 ++++++++++++++ 5 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 src/main/java/com/parseSystem/vehicle/FenceData.java create mode 100644 src/test/java/Test.java diff --git a/.gitignore b/.gitignore index 09bdfea..ea9089e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,7 @@ target/ ###################################################################### # IDE - +IDEA/ ### STS ### .apt_generated .classpath @@ -43,4 +43,4 @@ nbdist/ !*/build/*.java !*/build/*.html -!*/build/*.xml \ No newline at end of file +!*/build/*.xml diff --git a/pom.xml b/pom.xml index c949e43..024c53b 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,11 @@ spring-boot-starter 2.7.15 + + org.springframework.boot + spring-boot-starter-test + 2.7.15 + org.springframework.boot spring-boot-starter-web @@ -68,6 +73,7 @@ dragon-common-redis 3.6.3 + diff --git a/src/main/java/com/parseSystem/event/impl/FenceEvent.java b/src/main/java/com/parseSystem/event/impl/FenceEvent.java index 377a34e..c820b71 100644 --- a/src/main/java/com/parseSystem/event/impl/FenceEvent.java +++ b/src/main/java/com/parseSystem/event/impl/FenceEvent.java @@ -1,10 +1,13 @@ package com.parseSystem.event.impl; +import com.alibaba.fastjson.JSONObject; import com.dragon.common.redis.service.RedisService; import com.parseSystem.event.EventHandlerService; import com.parseSystem.event.VehicleEventService; import com.parseSystem.utils.eventRuleJudge.PolygonUtil; +import com.parseSystem.vehicle.FenceData; import com.parseSystem.vehicle.VehicleData; +import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,6 +26,7 @@ import java.util.stream.Collectors; * @date 2023/11/27 20:57 */ @Service("fenceEvent") +@Log4j2 public class FenceEvent extends EventHandlerService implements VehicleEventService { @Autowired @@ -33,25 +37,40 @@ public class FenceEvent extends EventHandlerService implements VehicleEventServi */ @Override public void executeEvent(VehicleData vehicleData) { + //获取报文解析的车辆vin String vin = vehicleData.getVin(); - List fenceList = redisService.getCacheList("fence_VIN123456789"); + List arr1 = null; + arr1.add(vehicleData); + //redis为(vin,fenceList)即vin为键,电子围栏为值存入redis + List fenceList = redisService.getCacheList("fence_"+vin); + redisService.setCacheList("fence_VIN123456789",arr1); + //将报文的经纬度赋值给变量 Double latitude = Double.valueOf(vehicleData.getLatitude()); //实时纬度 Double longitude = Double.valueOf(vehicleData.getLongitude()); + //创建工具类使用所需要的对象变量类赋值 Point2D.Double point = new Point2D.Double(); + //赋值 point.setLocation(longitude,latitude); - List pts = new ArrayList<>(); + //循环切割redis中拿到的电子围栏数据 fenceList.stream().forEach(item -> { + //将围栏存放的信息转型拿到每个对象的属性 + FenceData fenceData = JSONObject.parseObject(item, FenceData.class); //循环得到每个电子围栏的坐标拼接的一个以;为分割点表示多边形的一个字符串 List locationPts = Arrays.stream(item.split(";")) .map(s -> s.split(",")) .map(arr -> new Point2D.Double(Double.valueOf(arr[0]), Double.valueOf(arr[1]))) .collect(Collectors.toList()); boolean inPolygon = PolygonUtil.isInPolygon(point, locationPts); - if (inPolygon){ - System.out.println("在电子围栏内"); - }else{ - System.out.println("在电子围栏外"); + //判断如果在围栏平面内,则判断围栏的报警状态 0-驶入警告 1-驶出警告 + if (inPolygon == true && fenceData.getAlarmType()==0){ + log.info("----当前车辆已驶入围栏 警告!!!"); + }else if(inPolygon == false && fenceData.getAlarmType()==1){ + log.info("----当前车辆已驶出围栏 警告!!!"); + }else { + log.info("----该车辆为绑定围栏"); } }); } + + } diff --git a/src/main/java/com/parseSystem/vehicle/FenceData.java b/src/main/java/com/parseSystem/vehicle/FenceData.java new file mode 100644 index 0000000..805de8a --- /dev/null +++ b/src/main/java/com/parseSystem/vehicle/FenceData.java @@ -0,0 +1,61 @@ +package com.parseSystem.vehicle; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 电子围栏实体类 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class FenceData { + /** + * 字段属性:围栏主键id + */ + @TableId(type = IdType.AUTO) + private Integer fenceId; + /** + * 字段属性:围栏名称 + */ + private String fenceName; + /** + * 字段属性:围栏数据 + */ + private String fenceData; + /**s + * 字段属性:围栏状态 + */ + private Integer status; + /** + * 字段属性:告警类型 + */ + private Integer alarmType; + /** + * 字段属性:围栏标签id + */ + private Integer fenceTagId; + /** + * 字段属性:创建人 + */ + private String createdBy; + /** + * 字段属性:创建时间 + */ + private Date createdTime; + /** + * 字段属性:更新人 + */ + private String updatedBy; + /** + * 字段属性:更新时间 + */ + private Date updatedTime; +} diff --git a/src/test/java/Test.java b/src/test/java/Test.java new file mode 100644 index 0000000..0698051 --- /dev/null +++ b/src/test/java/Test.java @@ -0,0 +1,45 @@ +import com.parseSystem.ParseSystemApplication; +import com.parseSystem.event.impl.FenceEvent; +import com.parseSystem.vehicle.VehicleData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.ArrayList; +import java.util.List; + +@SpringBootTest(classes = ParseSystemApplication.class) +public class Test { + + @Autowired + private FenceEvent fenceEvent; + @org.junit.jupiter.api.Test + public void aa(){ + ArrayList vehicleData = new ArrayList<>(); + VehicleData vehicleData1 = new VehicleData(); + //车辆当前地位 + vehicleData1.setVin("1234567989000"); + vehicleData1.setLongitude("116.48965348217772"); + vehicleData1.setLatitude("39.90816602515441"); + + //车辆一分钟后的位置 + VehicleData vehicleData2 = new VehicleData(); + vehicleData2.setVin("1234567989000"); + vehicleData2.setLongitude("117.48965348217772"); + vehicleData2.setLatitude("40.90816602515441"); + + //车辆二分钟后的位置 + VehicleData vehicleData3 = new VehicleData(); + vehicleData3.setVin("1234567989000"); + vehicleData3.setLongitude("118.48965348217772"); + vehicleData3.setLatitude("41.90816602515441"); + + vehicleData.add(vehicleData1); + vehicleData.add(vehicleData2); + vehicleData.add(vehicleData3); + + for (VehicleData vehicleDatum : vehicleData) { + fenceEvent.executeEvent(vehicleDatum); + } + + } +}