From 37b33d638ca9448e3330269c861bc02b16ca976d Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期三, 01 四月 2026 17:36:14 +0800
Subject: [PATCH] fix(management):围栏复制名称处理

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
index efdfddc..c439b96 100644
--- a/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
+++ b/xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
@@ -39,8 +39,10 @@
 import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 import static com.xiaopeng.map.service.serviceimpl.XpElectronicFenceServiceImpl.getPinyinInitials;
@@ -239,7 +241,7 @@
                     I18nKeyConstant.FENCE_STATUS_CANNOT_COPIED
             );
         }
-        electronicFence.setElectronicName("副本_"+electronicFence.getElectronicName());
+        electronicFence.setElectronicName(buildCopyFenceName(electronicFence.getElectronicName()));
         electronicFence.setId(null);
         electronicFence.setStatus(0);
         List<XpElectronicFenceArea> electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery().eq(XpElectronicFenceArea::getElectronicId, id)
@@ -267,6 +269,21 @@
         return R.ok(electronicFence.getId());
     }
 
+    private String buildCopyFenceName(String sourceName) {
+        Set<String> existingNames = new HashSet<>(xpElectronicFenceService.lambdaQuery()
+                .likeRight(XpElectronicFence::getElectronicName, sourceName)
+                .list()
+                .stream()
+                .map(XpElectronicFence::getElectronicName)
+                .collect(Collectors.toSet()));
+
+        String candidateName = sourceName + "_副本";
+        while (existingNames.contains(candidateName)) {
+            candidateName = candidateName + "_副本";
+        }
+        return candidateName;
+    }
+
     /**
      * 根据ID列表批量查询电子围栏
      *

--
Gitblit v1.7.1