From d9142e583e71cea79dc4074f85712e83d941d88f Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期六, 07 三月 2026 21:01:05 +0800
Subject: [PATCH] 修改小程序

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java |   35 ++++++++++++++++++++++++++++-------
 1 files changed, 28 insertions(+), 7 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java
index 2a5c40b..3035b0e 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceAreaServiceImpl.java
@@ -25,6 +25,7 @@
 import com.xiaopeng.map.service.XpElectronicFenceAreaService;
 import com.xiaopeng.map.utils.AmapWalkingRouteUtil;
 import com.xiaopeng.map.utils.ElectricFenceUtil;
+import com.xiaopeng.map.utils.GDMapGeocodingUtil;
 import com.xiaopeng.map.utils.GaodeMapService;
 import com.xiaopeng.map.utils.holiday.HolidayUtil;
 import com.xiaopeng.map.vo.IsInOperationAreaVo;
@@ -37,8 +38,10 @@
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -73,6 +76,9 @@
     @Autowired
     private MongoTemplate mongoTemplate;
 
+    @Resource
+    private GDMapGeocodingUtil gdMapGeocodingUtil;
+
 
 
     @Override
@@ -100,11 +106,17 @@
                 continue;
             }
             // 是否运营时间内
-            Boolean inOperationTime = isInOperationTime(operationStrategy);
-            if(!inOperationTime){
-                continue;
+            if(xpElectronicFence.getFailureType() == 2){
+                Boolean inOperationTime = isInOperationTime(operationStrategy);
+                if(!inOperationTime){
+                    continue;
+                }
+            }else{
+                //永不失效,需要判断开始时间是否到达
+                if(LocalDateTime.now().isBefore(xpElectronicFence.getEffectTime())){
+                    continue;
+                }
             }
-
 
             XpElectronicFenceVo vo = new XpElectronicFenceVo();
             // 设置id(使用siteId作为id)
@@ -195,7 +207,12 @@
     public IsInOperationAreaVo isInOperationArea(LonLatDto dto) {
 
         IsInOperationAreaVo vo = new IsInOperationAreaVo();
-        List<XpGeoFencingPolygon> xpGeoFencingPolygons = xpGeoFencingPolygonService.findAll();
+        Map<String, String> geocode = gdMapGeocodingUtil.geocode(dto.getLongitude().toString(), dto.getLatitude().toString());
+        if(null == geocode){
+            throw new RuntimeException("经纬度转换城市code失败");
+        }
+        String cityCode = geocode.get("cityCode");
+        List<XpGeoFencingPolygon> xpGeoFencingPolygons = mongoTemplate.find(new Query(Criteria.where("cityCode").is(cityCode)), XpGeoFencingPolygon.class);
         for (XpGeoFencingPolygon polygon : xpGeoFencingPolygons) {
             if (polygon.getPoints() != null && polygon.getPoints().getCoordinates() != null) {
                 // GeoJsonPolygon的coordinates是一个二维数组,第一个元素是外部环
@@ -209,8 +226,12 @@
                     String fenceId = polygon.getFenceId();
                     R<XpElectronicFence> xpElectronicFence = xpElectronicFenceClient.selectById(fenceId);
                     if(xpElectronicFence!=null && null != xpElectronicFence.getData()){
-                        String operationStrategy = xpElectronicFence.getData().getOperationStrategy();
-                        Boolean inOperationTime = isInOperationTime(operationStrategy);
+                        XpElectronicFence electronicFence = xpElectronicFence.getData();
+                        String operationStrategy = electronicFence.getOperationStrategy();
+                        Boolean inOperationTime = true;
+                        if(electronicFence.getFailureType() == 2){
+                            inOperationTime = isInOperationTime(operationStrategy);
+                        }
                         if(inOperationTime){
                             vo.setStatus("inside");
                             vo.setElectronicAreaId(Long.valueOf(polygon.getAreaId()));

--
Gitblit v1.7.1