From 8ed881dab49e67b329ba45f5de41324cb22f1e07 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期六, 07 三月 2026 10:18:19 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
index e2b402c..5f49af6 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -44,6 +44,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -391,6 +392,30 @@
             xpElectronicFence.setCityCode(dto.getCityCode());
 
             this.updateById(xpElectronicFence);
+
+            // 禁行区(areaType=2)差异删除:对比原有禁行区与本次编辑入参禁行区(按id)
+            List<XpElectronicFenceArea> existingProhibitedAreas = xpElectronicFenceAreaService.lambdaQuery()
+                    .eq(XpElectronicFenceArea::getElectronicId, dto.getId())
+                    .eq(XpElectronicFenceArea::getAreaType, 2)
+                    .list();
+            Set<Long> incomingProhibitedIds = updatedElectronicFenceAreas.stream()
+                    .filter(a -> a != null && a.getAreaType() != null && a.getAreaType() == 2 && a.getId() != null)
+                    .map(XpElectronicFenceArea::getId)
+                    .collect(Collectors.toSet());
+            List<Long> toDeleteProhibitedIds = existingProhibitedAreas.stream()
+                    .map(XpElectronicFenceArea::getId)
+                    .filter(id -> id != null && !incomingProhibitedIds.contains(id))
+                    .collect(Collectors.toList());
+            if (!toDeleteProhibitedIds.isEmpty()) {
+                // 逻辑删除MySQL禁行区
+                xpElectronicFenceAreaService.removeByIds(toDeleteProhibitedIds);
+                // 同步删除Mongo禁行区多边形
+                List<String> toDeleteAreaIdStrings = toDeleteProhibitedIds.stream().map(String::valueOf).collect(Collectors.toList());
+                Query delMongoQuery = new Query();
+                delMongoQuery.addCriteria(Criteria.where("fenceId").is(String.valueOf(dto.getId())));
+                delMongoQuery.addCriteria(Criteria.where("areaId").in(toDeleteAreaIdStrings));
+                mongoTemplate.remove(delMongoQuery, XpGeoFencingProhibitedPolygon.class);
+            }
             // 删除旧的区域数据,然后保存新的区域数据
             mongoTemplate.remove(new Query(Criteria.where("fenceId").is(String.valueOf(dto.getId()))), XpGeoFencingPolygon.class);
             if (xpElectronicFence.getStatus() == 2) {

--
Gitblit v1.7.1