diff --git a/cloud-modules/cloud-modules-carData/pom.xml b/cloud-modules/cloud-modules-carData/pom.xml index 5388022..87b697b 100644 --- a/cloud-modules/cloud-modules-carData/pom.xml +++ b/cloud-modules/cloud-modules-carData/pom.xml @@ -97,5 +97,11 @@ com.muyu cloud-common-rabbit + + com.muyu + cloud-modules-enterprise-common + 1.0.0 + compile + diff --git a/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FaultWarningListener.java b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FaultWarningListener.java new file mode 100644 index 0000000..f097ecd --- /dev/null +++ b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FaultWarningListener.java @@ -0,0 +1,47 @@ +package com.muyu.carData.listener; + +import com.alibaba.fastjson.JSONObject; +import com.muyu.carData.event.EsSaveEvent; +import com.muyu.carData.event.EventListener; +import com.muyu.carData.util.CacheUtil; +import com.muyu.domain.WarnRule; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.math.BigDecimal; +import java.util.HashMap; + +/** + * 预警信息监听器 + */ +@Component +@Log4j2 +public class FaultWarningListener implements EventListener { + + @Autowired + private CacheUtil cacheUtil; + + @Override + public void onEvent(EsSaveEvent event) { + try { + log.info("事件开始"); + JSONObject data = event.getData(); + String vin = (String) data.get("VIN"); + HashMap map = (HashMap) cacheUtil.get(vin); + if (map != null) { + WarnRule warnRule = (WarnRule) map.get("warnRule"); + Long maxValue = warnRule.getMaxValue(); + Long minValue = warnRule.getMinValue(); + } + } catch (Exception e) { + log.error("事件发送错误",e); + throw new RuntimeException(e); + } + } + + @Override + public void onApplicationEvent(EsSaveEvent event) { + onEvent(event); + } +} diff --git a/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FenceListener.java b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FenceListener.java new file mode 100644 index 0000000..12bb1e1 --- /dev/null +++ b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FenceListener.java @@ -0,0 +1,76 @@ +package com.muyu.carData.listener; + +import com.alibaba.fastjson.JSONObject; +import com.muyu.carData.event.EsSaveEvent; +import com.muyu.carData.event.EventListener; +import com.muyu.carData.util.CacheUtil; +import com.muyu.carData.util.FenceGroup; +import com.muyu.domain.req.FenceGroupReq; +import io.swagger.v3.oas.models.security.SecurityScheme; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.muyu.domain.resp.CarFenceGroupsResp; +import java.util.List; +import java.awt.*; +import java.util.ArrayList; +import java.util.HashMap; + +/** + * 电子围栏区域判定 + */ +@Log4j2 +@Component +public class FenceListener implements EventListener { + + @Autowired + private CacheUtil cacheUtil; + + + /** + * 监听事件 + * @param event + */ + @Override + public void onEvent(EsSaveEvent event) { + try { + log.info("开始事件运行监听"); + + JSONObject data = event.getData(); + String vin = (String) data.get("VIN"); + Integer longitude = (Integer) data.get("longitude"); + Integer latitude = (Integer) data.get("latitude"); + HashMap map = (HashMap) cacheUtil.get(vin); + if (map != null) { + CarFenceGroupsResp fence = (CarFenceGroupsResp) map.get("fence"); + String status = fence.getStatus(); //启动状态(1.驶入 2.驶出) + String fenceText = fence.getFenceText(); + String[] split = fenceText.split(";"); + ArrayList points = new ArrayList<>(); + for (int i = 0; i < split.length; i++) { + String[] latitudeAndLongitude = split[i].split(","); + Integer longi = Integer.valueOf(latitudeAndLongitude[0]); + Integer lati = Integer.valueOf(latitudeAndLongitude[1]); + Point point = new Point(longi, lati); + points.add(point); + } + List> fences = List.of( + points + ); + FenceGroup fenceGroup = new FenceGroup(fences); + Point testPoint = new Point(longitude, latitude); // 应该在第一个围栏内 + System.out.println(fenceGroup.isPointInFenceGroup(testPoint)); // 应该输出true + } + }catch(NumberFormatException e){ + log.error("数据格式异常,数据发送错误",e); + throw new RuntimeException(e); + + } + + } + + @Override + public void onApplicationEvent(EsSaveEvent event) { + onEvent(event); + } +} diff --git a/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/util/FenceGroup.java b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/util/FenceGroup.java new file mode 100644 index 0000000..c310d4a --- /dev/null +++ b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/util/FenceGroup.java @@ -0,0 +1,59 @@ +package com.muyu.carData.util; + +import java.awt.*; +import java.util.List; + +public class FenceGroup { + private List> fences; + + public FenceGroup(List> fences){ + this.fences = fences; + } + + /** + * 判断点是否在围栏组内。 + * @param point 检查的点。 + * @return 如果点在任何围栏内返回true,否则返回false。 + */ + public boolean isPointInFenceGroup(Point point) { + for (List fence : fences) { + if (isPointInsidePolygon(point, fence)) { + return true; + } + } + return false; + } + + /** + * 辅助方法,判断点是否在多边形内。 + * @param point 检查的点。 + * @param polygon 多边形的顶点列表。 + * @return 如果点在多边形内返回true,否则返回false。 + */ + private boolean isPointInsidePolygon(Point point, List polygon) { + int n = polygon.size(); + boolean inside = false; + + Point p1 = polygon.get(0); + for (int i = 1; i <= n; i++) { + Point p2 = polygon.get(i % n); + if (point.getY() > Math.min(p1.getY(), p2.getY())) { + if (point.getY() <= Math.max(p1.getY(), p2.getY())) { + if (point.getX() <= Math.max(p1.getX(), p2.getX())) { + if (p1.getY() != p2.getY()) { + double xinters = (point.getY() - p1.getY()) * (p2.getX() - p1.getX()) / (p2.getY() - p1.getY()) + p1.getX(); + if (p1.getX() == p2.getX() || point.getX() <= xinters) { + inside = !inside; + } + } + } + } + } + p1 = p2; + } + return inside; + } + + + +} diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/src/main/java/com/muyu/domain/resp/CarFenceGroupsResp.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/src/main/java/com/muyu/domain/resp/CarFenceGroupsResp.java index 853c580..043d665 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/src/main/java/com/muyu/domain/resp/CarFenceGroupsResp.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-common/src/main/java/com/muyu/domain/resp/CarFenceGroupsResp.java @@ -31,7 +31,7 @@ public class CarFenceGroupsResp { */ private Integer priority; /** - * 启动状态 + * 启动状态(1.驶入 2.驶出) */ private String status; /** diff --git a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/server/service/CarMessageService.java b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/server/service/CarMessageService.java index ea6d162..fc47bc6 100644 --- a/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/server/service/CarMessageService.java +++ b/cloud-modules/cloud-modules-enterprise/cloud-modules-enterprise-server/src/main/java/com/muyu/server/service/CarMessageService.java @@ -53,4 +53,17 @@ public interface CarMessageService extends IService { * 获取报文最终信息 */ JSONObject inciseCarMessage(String testString); + + + + + + + + + + + + + }