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/FenceListener.java b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FenceListener.java
new file mode 100644
index 0000000..d4b0c42
--- /dev/null
+++ b/cloud-modules/cloud-modules-carData/src/main/java/com/muyu/carData/listener/FenceListener.java
@@ -0,0 +1,73 @@
+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);
+
+
+
+
+
+
+
+
+
+
+
+
+
}