From 246c72b8e1cba97de66efd8112ed166210ebc686 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 17 四月 2026 12:02:38 +0800
Subject: [PATCH] fix:围栏点位重名校验、围栏禁行区禁用
---
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java | 31 +++++++++++++++++++++++++++++--
1 files changed, 29 insertions(+), 2 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 a54e6b9..dcf87ac 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
@@ -211,6 +211,7 @@
@Transactional
@ShardingSphereTransactionType(TransactionType.BASE)
public R addElectronic(ElectronicFenceAddDto dto) {
+ validateElectronicNameUnique(dto.getElectronicName(), null);
// 获取现有的运营区域(areaType=1)
LambdaQueryWrapper<XpElectronicFenceArea> xpElectronicFenceAreaLambdaQueryWrapper = new LambdaQueryWrapper<>();
xpElectronicFenceAreaLambdaQueryWrapper.eq(XpElectronicFenceArea::getAreaType, 1);
@@ -343,6 +344,7 @@
@Transactional
@ShardingSphereTransactionType(TransactionType.BASE)
public R editElectronic(ElectronicFenceUpdateDto dto) {
+ validateElectronicNameUnique(dto.getElectronicName(), dto.getId());
// 获取现有的运营区域(areaType=1),排除当前正在编辑的电子围栏
LambdaQueryWrapper<XpElectronicFenceArea> xpElectronicFenceAreaLambdaQueryWrapper = new LambdaQueryWrapper<>();
xpElectronicFenceAreaLambdaQueryWrapper.eq(XpElectronicFenceArea::getAreaType, 1);
@@ -448,7 +450,9 @@
// 设置电子围栏ID并保存区域数据
for (XpElectronicFenceArea area : updatedElectronicFenceAreas) {
area.setElectronicId(xpElectronicFence.getId());
- area.setAreaStatus(1);
+ if (area.getAreaType() == null || area.getAreaType() == 1) {
+ area.setAreaStatus(1);
+ }
area.setArea(area.getArea());
area.setCityCode(dto.getCityCode());
if (null != area.getId()) {
@@ -461,7 +465,9 @@
// 设置电子围栏ID并保存区域数据
for (XpElectronicFenceArea area : updatedElectronicFenceAreas) {
area.setElectronicId(xpElectronicFence.getId());
- area.setAreaStatus(2);
+ if (area.getAreaType() == null || area.getAreaType() == 1) {
+ area.setAreaStatus(2);
+ }
area.setArea(area.getArea());
area.setCityCode(dto.getCityCode());
if (null != area.getId()) {
@@ -531,6 +537,12 @@
old.setPoints(geoJsonPolygon);
mongoTemplate.save(old);
}
+ } else if (newElectronicFenceArea.getAreaType() == 2
+ && newElectronicFenceArea.getId() != null) {
+ Query query = new Query();
+ query.addCriteria(Criteria.where("fenceId").is(String.valueOf(xpElectronicFence.getId())));
+ query.addCriteria(Criteria.where("areaId").is(String.valueOf(newElectronicFenceArea.getId())));
+ mongoTemplate.remove(query, XpGeoFencingProhibitedPolygon.class);
}
}
}
@@ -749,6 +761,21 @@
return R.ok();
}
+
+ @Override
+ public void validateElectronicNameUnique(String electronicName, Long excludeId) {
+ if (!StringUtils.hasText(electronicName)) {
+ return;
+ }
+ long count = this.lambdaQuery()
+ .eq(XpElectronicFence::getElectronicName, electronicName)
+ .ne(excludeId != null, XpElectronicFence::getId, excludeId)
+ .count();
+ if (count > 0) {
+ throw new ServiceException("围栏名称已存在", I18nKeyConstant.FENCE_NAME_EXISTS);
+ }
+ }
+
private static List<Long> normalizePointIds(List<Long> ids) {
if (CollUtil.isEmpty(ids)) {
return Collections.emptyList();
--
Gitblit v1.7.1