puzhibing
2026-03-07 2a889bf2b917b72fcc03104f5064cf305ce1612b
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) {