From e4282457d992fd59acdaf0de9f150105a7015b9c Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期二, 21 四月 2026 14:38:46 +0800
Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/Robotaxi into 1.0
---
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java | 61 +++++++++++++++++++++++++++++-
1 files changed, 59 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 000244d..84d6dd9 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
@@ -215,6 +215,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);
@@ -347,6 +348,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);
@@ -452,7 +454,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()) {
@@ -465,7 +469,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()) {
@@ -535,6 +541,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);
}
}
}
@@ -756,6 +768,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();
@@ -965,6 +992,36 @@
return list();
}
+ @Override
+ @Transactional
+ @ShardingSphereTransactionType(TransactionType.BASE)
+ public void expireFence(Long electronicId) {
+ if (electronicId == null) {
+ return;
+ }
+ XpElectronicFence electronicFence = this.getById(electronicId);
+ if (electronicFence == null || electronicFence.getStatus() == null) {
+ return;
+ }
+ Integer status = electronicFence.getStatus();
+ if (status != 1 && status != 2) {
+ return;
+ }
+ electronicFence.setStatus(3);
+ this.updateById(electronicFence);
+
+ List<XpElectronicFenceArea> electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery()
+ .eq(XpElectronicFenceArea::getElectronicId, electronicId)
+ .list();
+ if (CollUtil.isEmpty(electronicFenceAreaList)) {
+ return;
+ }
+ for (XpElectronicFenceArea electronicFenceArea : electronicFenceAreaList) {
+ electronicFenceArea.setAreaStatus(2);
+ }
+ xpElectronicFenceAreaService.updateBatchById(electronicFenceAreaList);
+ }
+
/**
* 计算围栏中心点
--
Gitblit v1.7.1