From 47aa3631a929533782652bb72fa689f90f19623d Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期一, 02 三月 2026 11:13:33 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java |  315 +++++++++++++++++++++++++--------------------------
 1 files changed, 155 insertions(+), 160 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 8bb0fbe..8a154b4 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
@@ -110,174 +110,169 @@
     }
     @Override
     public R addElectronic(ElectronicFenceAddDto dto) {
-        try {
-            // 获取现有的运营区域(areaType=1)
-            LambdaQueryWrapper<XpElectronicFenceArea> xpElectronicFenceAreaLambdaQueryWrapper = new LambdaQueryWrapper<>();
-            xpElectronicFenceAreaLambdaQueryWrapper.eq(XpElectronicFenceArea::getAreaType, 1);
-            List<XpElectronicFenceArea> existingOperationAreas = xpElectronicFenceAreaMapper.selectList(xpElectronicFenceAreaLambdaQueryWrapper);
+        // 获取现有的运营区域(areaType=1)
+        LambdaQueryWrapper<XpElectronicFenceArea> xpElectronicFenceAreaLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        xpElectronicFenceAreaLambdaQueryWrapper.eq(XpElectronicFenceArea::getAreaType, 1);
+        List<XpElectronicFenceArea> existingOperationAreas = xpElectronicFenceAreaMapper.selectList(xpElectronicFenceAreaLambdaQueryWrapper);
 
-            // 获取待添加的新区域
-            List<XpElectronicFenceArea> newElectronicFenceAreas = dto.getElectronicFenceAreas();
+        // 获取待添加的新区域
+        List<XpElectronicFenceArea> newElectronicFenceAreas = dto.getElectronicFenceAreas();
 
 
-            // 检查新区域与现有运营区域是否有重叠
-            for (XpElectronicFenceArea newArea : newElectronicFenceAreas) {
-                if (newArea.getAreaType() == 1) { // 只检查运营区域
-                    for (XpElectronicFenceArea existingArea : existingOperationAreas) {
-                        if (polygonOverlapService.checkPolygonOverlap(
-                                newArea.getFencePoints(),
-                                existingArea.getFencePoints())) {
-                            throw new ServiceException(
-                                    "运营区域{}与现有运营区域{}发生重叠",
-                                    I18nKeyConstant.EDIT_ELECTRONIC_ERROR,
-                                    new Object[]{existingArea.getAreaName(), existingArea.getAreaName()}
-                            );
-                        }
-                    }
-                }
-            }
-
-            // 保存主表数据
-            XpElectronicFence xpElectronicFence = new XpElectronicFence();
-            BeanUtils.copyProperties(dto, xpElectronicFence);
-            xpElectronicFence.setStatus(0);
-
-            if (dto.getStatus() == 0) {
-                xpElectronicFence.setStatus(0);
-            } else if (dto.getStatus() == 1) {
-                if (dto.getEffectType() == 1) {
-                    // 设置为启用中
-                    xpElectronicFence.setStatus(2);
-                    xpElectronicFence.setEffectTime(LocalDateTime.now());
-                } else {
-                    if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
-                        // 设置为启用中
-                        xpElectronicFence.setStatus(2);
-                    } else {
-                        xpElectronicFence.setStatus(1);
-                    }
-                }
-            }
-            xpElectronicFence.setCityCode(dto.getCityCode());
-            // 生成围栏id 规则:城市首字母-类型简写-4位自增流水号(如 SZ-OP-001),支持复制;数据停用或删除后,流水号不回收
-            XpRegion xpRegion = xpRegionMapper.selectOne(new LambdaQueryWrapper<XpRegion>()
-                    .eq(XpRegion::getCode, dto.getCityCode()));
-            String name = xpRegion.getName();
-            this.save(xpElectronicFence);
-            // 根据城市中文名,截取前两位的首字母并且大写
-            // 截取前两个字符
-            String prefix = name.substring(0, 2);
-            // 获取拼音首字母并大写
-            String result = getPinyinInitials(prefix).toUpperCase();
-            xpElectronicFence.setElectronicNumber(result + "-OP-" + String.format("%04d", xpElectronicFence.getId()));
-            if (dto.getStatus() == 0) {
-                xpElectronicFence.setStatus(0);
-            } else if (dto.getStatus() == 1) {
-                if (dto.getEffectType() == 1) {
-                    // 设置为启用中
-                    xpElectronicFence.setStatus(2);
-                    xpElectronicFence.setEffectTime(LocalDateTime.now());
-                } else {
-                    if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
-                        // 设置为启用中
-                        xpElectronicFence.setStatus(2);
-                    } else {
-                        // 添加定时任务job type=1电子围栏生效 type=2电子围栏失效
-                        Map<String, ? extends Object> maps =
-                                new ImmutableMap.Builder<String, Long>().
-                                        put("type", 1L)
-                                        .put("id", xpElectronicFence.getId())
-                                        .build();
-                        QuartzManager.addJob(
-                                ElectronicEffectJob.class,
-                                (ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(),
-                                TimeJobType.ELECTRONIC_EFFECT,
-                                DateUtils.localDateTimeToDate(dto.getEffectTime()),
-                                maps
+        // 检查新区域与现有运营区域是否有重叠
+        for (XpElectronicFenceArea newArea : newElectronicFenceAreas) {
+            if (newArea.getAreaType() == 1) { // 只检查运营区域
+                for (XpElectronicFenceArea existingArea : existingOperationAreas) {
+                    if (polygonOverlapService.checkPolygonOverlap(
+                            newArea.getFencePoints(),
+                            existingArea.getFencePoints())) {
+                        throw new ServiceException(
+                                "运营区域{}与现有运营区域{}发生重叠",
+                                I18nKeyConstant.EDIT_ELECTRONIC_ERROR,
+                                new Object[]{existingArea.getAreaName(), existingArea.getAreaName()}
                         );
-                        xpElectronicFence.setStatus(1);
-                    }
-                }
-                if (dto.getFailureType() != null && dto.getFailureType() == 2) {
-
-                    if (dto.getFailureTime().isBefore(LocalDateTime.now())) {
-                        // 设置待启用
-                        xpElectronicFence.setStatus(1);
-                    } else {
-                        // 添加定时任务job type=1电子围栏生效 type=2电子围栏失效
-                        Map<String, ? extends Object> maps =
-                                new ImmutableMap.Builder<String, Long>().
-                                        put("type", 2L)
-                                        .put("id", xpElectronicFence.getId())
-                                        .build();
-                        QuartzManager.addJob(
-                                ElectronicEffectJob.class,
-                                (ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(),
-                                TimeJobType.ELECTRONIC_FAILURE,
-                                DateUtils.localDateTimeToDate(dto.getEffectTime()),
-                                maps
-                        );
-                        xpElectronicFence.setStatus(1);
                     }
                 }
             }
-            this.updateById(xpElectronicFence);
-            if (xpElectronicFence.getStatus() == 2) {
-                // 设置电子围栏ID并保存区域数据
-                for (XpElectronicFenceArea area : newElectronicFenceAreas) {
-                    area.setElectronicId(xpElectronicFence.getId());
-                    area.setAreaStatus(1);
-                    area.setArea(area.getArea());
-                    area.setCityCode(dto.getCityCode());
-                    xpElectronicFenceAreaMapper.insert(area);
-                }
-
-            }else{
-                // 设置电子围栏ID并保存区域数据
-                for (XpElectronicFenceArea area : newElectronicFenceAreas) {
-                    area.setElectronicId(xpElectronicFence.getId());
-                    area.setAreaStatus(2);
-                    area.setArea(area.getArea());
-                    area.setCityCode(dto.getCityCode());
-                    xpElectronicFenceAreaMapper.insert(area);
-
-                }
-            }
-
-            if (xpElectronicFence.getStatus() == 2) {
-                for (XpElectronicFenceArea newElectronicFenceArea : newElectronicFenceAreas) {
-                    if (newElectronicFenceArea.getAreaType() == 1
-                            && newElectronicFenceArea.getAreaStatus() == 1) {
-                        XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
-                        xpGeoFencingPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
-                        xpGeoFencingPolygon.setName(xpElectronicFence.getElectronicName());
-                        xpGeoFencingPolygon.setAreaId(String.valueOf(newElectronicFenceArea.getId()));
-                        xpGeoFencingPolygon.setCityCode(xpElectronicFence.getCityCode());
-                        xpGeoFencingPolygon.setOperationStrategy(xpElectronicFence.getOperationStrategy());
-                        // 将围栏点转换为GeoJSON多边形
-                        GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());
-                        xpGeoFencingPolygon.setPoints(geoJsonPolygon);
-                        mongoTemplate.insert(xpGeoFencingPolygon);
-                    }
-                    if (newElectronicFenceArea.getAreaType() == 2
-                            && newElectronicFenceArea.getAreaStatus() == 1) {
-                        XpGeoFencingProhibitedPolygon xpGeoFencingProhibitedPolygon = new XpGeoFencingProhibitedPolygon();
-                        xpGeoFencingProhibitedPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
-                        xpGeoFencingProhibitedPolygon.setName(xpElectronicFence.getElectronicName());
-                        xpGeoFencingProhibitedPolygon.setAreaId(String.valueOf(newElectronicFenceArea.getId()));
-                        // 将围栏点转换为GeoJSON多边形
-                        GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());
-                        xpGeoFencingProhibitedPolygon.setPoints(geoJsonPolygon);
-                        mongoTemplate.save(xpGeoFencingProhibitedPolygon);
-                    }
-                }
-            }
-
-            return R.ok();
-        } catch (Exception e) {
-            log.error("新增电子围栏失败", e);
-            throw new ServiceException("新增电子围栏失败", I18nKeyConstant.ADD_ELECTRONIC_ERROR);
         }
+
+        // 保存主表数据
+        XpElectronicFence xpElectronicFence = new XpElectronicFence();
+        BeanUtils.copyProperties(dto, xpElectronicFence);
+        xpElectronicFence.setStatus(0);
+
+        if (dto.getStatus() == 0) {
+            xpElectronicFence.setStatus(0);
+        } else if (dto.getStatus() == 1) {
+            if (dto.getEffectType() == 1) {
+                // 设置为启用中
+                xpElectronicFence.setStatus(2);
+                xpElectronicFence.setEffectTime(LocalDateTime.now());
+            } else {
+                if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
+                    // 设置为启用中
+                    xpElectronicFence.setStatus(2);
+                } else {
+                    xpElectronicFence.setStatus(1);
+                }
+            }
+        }
+        xpElectronicFence.setCityCode(dto.getCityCode());
+        // 生成围栏id 规则:城市首字母-类型简写-4位自增流水号(如 SZ-OP-001),支持复制;数据停用或删除后,流水号不回收
+        XpRegion xpRegion = xpRegionMapper.selectOne(new LambdaQueryWrapper<XpRegion>()
+                .eq(XpRegion::getCode, dto.getCityCode()));
+        String name = xpRegion.getName();
+        this.save(xpElectronicFence);
+        // 根据城市中文名,截取前两位的首字母并且大写
+        // 截取前两个字符
+        String prefix = name.substring(0, 2);
+        // 获取拼音首字母并大写
+        String result = getPinyinInitials(prefix).toUpperCase();
+        xpElectronicFence.setElectronicNumber(result + "-OP-" + String.format("%04d", xpElectronicFence.getId()));
+        if (dto.getStatus() == 0) {
+            xpElectronicFence.setStatus(0);
+        } else if (dto.getStatus() == 1) {
+            if (dto.getEffectType() == 1) {
+                // 设置为启用中
+                xpElectronicFence.setStatus(2);
+                xpElectronicFence.setEffectTime(LocalDateTime.now());
+            } else {
+                if (dto.getEffectTime().isBefore(LocalDateTime.now())) {
+                    // 设置为启用中
+                    xpElectronicFence.setStatus(2);
+                } else {
+                    // 添加定时任务job type=1电子围栏生效 type=2电子围栏失效
+                    Map<String, ? extends Object> maps =
+                            new ImmutableMap.Builder<String, Long>().
+                                    put("type", 1L)
+                                    .put("id", xpElectronicFence.getId())
+                                    .build();
+                    QuartzManager.addJob(
+                            ElectronicEffectJob.class,
+                            (ElectronicEffectJob.effect + xpElectronicFence.getId()).toUpperCase(),
+                            TimeJobType.ELECTRONIC_EFFECT,
+                            DateUtils.localDateTimeToDate(dto.getEffectTime()),
+                            maps
+                    );
+                    xpElectronicFence.setStatus(1);
+                }
+            }
+            if (dto.getFailureType() != null && dto.getFailureType() == 2) {
+
+                if (dto.getFailureTime().isBefore(LocalDateTime.now())) {
+                    // 设置待启用
+                    xpElectronicFence.setStatus(1);
+                } else {
+                    // 添加定时任务job type=1电子围栏生效 type=2电子围栏失效
+                    Map<String, ? extends Object> maps =
+                            new ImmutableMap.Builder<String, Long>().
+                                    put("type", 2L)
+                                    .put("id", xpElectronicFence.getId())
+                                    .build();
+                    QuartzManager.addJob(
+                            ElectronicEffectJob.class,
+                            (ElectronicEffectJob.failure + xpElectronicFence.getId()).toUpperCase(),
+                            TimeJobType.ELECTRONIC_FAILURE,
+                            DateUtils.localDateTimeToDate(dto.getEffectTime()),
+                            maps
+                    );
+                    xpElectronicFence.setStatus(1);
+                }
+            }
+        }
+        this.updateById(xpElectronicFence);
+        if (xpElectronicFence.getStatus() == 2) {
+            // 设置电子围栏ID并保存区域数据
+            for (XpElectronicFenceArea area : newElectronicFenceAreas) {
+                area.setElectronicId(xpElectronicFence.getId());
+                area.setAreaStatus(1);
+                area.setArea(area.getArea());
+                area.setCityCode(dto.getCityCode());
+                xpElectronicFenceAreaMapper.insert(area);
+            }
+
+        }else{
+            // 设置电子围栏ID并保存区域数据
+            for (XpElectronicFenceArea area : newElectronicFenceAreas) {
+                area.setElectronicId(xpElectronicFence.getId());
+                area.setAreaStatus(2);
+                area.setArea(area.getArea());
+                area.setCityCode(dto.getCityCode());
+                xpElectronicFenceAreaMapper.insert(area);
+
+            }
+        }
+
+        if (xpElectronicFence.getStatus() == 2) {
+            for (XpElectronicFenceArea newElectronicFenceArea : newElectronicFenceAreas) {
+                if (newElectronicFenceArea.getAreaType() == 1
+                        && newElectronicFenceArea.getAreaStatus() == 1) {
+                    XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
+                    xpGeoFencingPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
+                    xpGeoFencingPolygon.setName(xpElectronicFence.getElectronicName());
+                    xpGeoFencingPolygon.setAreaId(String.valueOf(newElectronicFenceArea.getId()));
+                    xpGeoFencingPolygon.setCityCode(xpElectronicFence.getCityCode());
+                    xpGeoFencingPolygon.setOperationStrategy(xpElectronicFence.getOperationStrategy());
+                    // 将围栏点转换为GeoJSON多边形
+                    GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());
+                    xpGeoFencingPolygon.setPoints(geoJsonPolygon);
+                    mongoTemplate.insert(xpGeoFencingPolygon);
+                }
+                if (newElectronicFenceArea.getAreaType() == 2
+                        && newElectronicFenceArea.getAreaStatus() == 1) {
+                    XpGeoFencingProhibitedPolygon xpGeoFencingProhibitedPolygon = new XpGeoFencingProhibitedPolygon();
+                    xpGeoFencingProhibitedPolygon.setFenceId(String.valueOf(xpElectronicFence.getId()));
+                    xpGeoFencingProhibitedPolygon.setName(xpElectronicFence.getElectronicName());
+                    xpGeoFencingProhibitedPolygon.setAreaId(String.valueOf(newElectronicFenceArea.getId()));
+                    // 将围栏点转换为GeoJSON多边形
+                    GeoJsonPolygon geoJsonPolygon = convertToGeoJsonPolygon(newElectronicFenceArea.getFencePoints());
+                    xpGeoFencingProhibitedPolygon.setPoints(geoJsonPolygon);
+                    mongoTemplate.save(xpGeoFencingProhibitedPolygon);
+                }
+            }
+        }
+
+        return R.ok();
     }
 
     @Override

--
Gitblit v1.7.1