puzhibing
2026-04-28 19787c0b4f5f29026c1790bbb043b9186cdd0e11
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -12,6 +12,8 @@
import com.xiaopeng.api.model.map.XpGeoFencingProhibitedPolygon;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.query.operation.ElectronicPageListQuery;
import com.xiaopeng.api.query.operation.PointListQuery;
import com.xiaopeng.api.query.operation.PointPageListListQuery;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.utils.DateUtils;
@@ -56,6 +58,7 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
import java.util.stream.Collectors;
@@ -77,6 +80,9 @@
    private XpElectronicFenceAreaMapper xpElectronicFenceAreaMapper;
    @Autowired
    private MongoTemplate mongoTemplate;
    @Lazy
    @Resource
    private BootCommonService bootCommonService;
    @Autowired
    private XpPointMapper xpPointMapper;
@@ -98,6 +104,8 @@
    @Lazy
    protected XpStationService xpStationService;
    @Override
    public PageInfo<XpElectronicFence> pageList(ElectronicPageListQuery query) {
        if (query == null) {
@@ -111,6 +119,7 @@
        if (total == 0L) {
            return new PageInfo<>();
        }
        LocalTime localTime = LocalTime.now();
        List<XpElectronicFence> list = this.baseMapper.pageList(pageInfo, query);
        List<Long> electronicIds = list.stream().map(XpElectronicFence::getId).collect(Collectors.toList());
        Map<Long, List<XpElectronicFenceArea>> electronicFenceAreaMap = xpElectronicFenceAreaMapper.selectList(new LambdaQueryWrapper<XpElectronicFenceArea>()
@@ -118,13 +127,34 @@
                .collect(Collectors.groupingBy(XpElectronicFenceArea::getElectronicId));
        for (XpElectronicFence xpElectronicFence : list) {
            List<XpElectronicFenceArea> xpElectronicFenceAreas = electronicFenceAreaMap.get(xpElectronicFence.getId());
            xpElectronicFence.setOperatingAreaCount(0L);
            xpElectronicFence.setProhibitedAreaCount(0L);
            xpElectronicFence.setFenceAreaPointCount(0l);
            if (xpElectronicFenceAreas != null) {
                xpElectronicFence.setOperatingAreaCount(xpElectronicFenceAreas.stream().filter(xpElectronicFenceArea -> xpElectronicFenceArea.getAreaType() == 1).count());
                xpElectronicFence.setProhibitedAreaCount(xpElectronicFenceAreas.stream().filter(xpElectronicFenceArea -> xpElectronicFenceArea.getAreaType() == 2).count());
            } else {
                xpElectronicFence.setOperatingAreaCount(0L);
                xpElectronicFence.setProhibitedAreaCount(0L);
            }
            try {
                PointPageListListQuery queryPoint = new PointPageListListQuery();
                queryPoint.setElectronicId(xpElectronicFence.getId());
                List<XpPoint> xpPoints = xpPointMapper.pageList( queryPoint);
                if(CollUtil.isNotEmpty(xpPoints)){
                    Long fenceAreaPointCount = 0L;
                    for (XpPoint xpPoint : xpPoints) {
                        boolean intime = bootCommonService.getPointOperation(localTime, xpPoint);
                        if(intime){
                            fenceAreaPointCount++;
                        }
                    }
                    xpElectronicFence.setFenceAreaPointCount(fenceAreaPointCount);
                }
            } catch (Exception e) {
                e.printStackTrace();
                throw new ServiceException("查询错误");
            }
        }
        pageInfo.setRecords(list);
        return pageInfo;
@@ -1056,16 +1086,18 @@
        List<XpElectronicFenceArea> electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery()
                .eq(XpElectronicFenceArea::getElectronicId, electronicId)
                .list();
        List<Long> electronicAreaIds = new ArrayList<>();
        if (!CollUtil.isEmpty(electronicFenceAreaList)) {
            for (XpElectronicFenceArea electronicFenceArea : electronicFenceAreaList) {
                electronicFenceArea.setAreaStatus(2);
                toDeleteAreaIdStrings.add(String.valueOf(electronicFenceArea.getId()));
                electronicAreaIds.add(electronicFenceArea.getId());
            }
            xpElectronicFenceAreaService.updateBatchById(electronicFenceAreaList);
        }
        //点位失效
        xpPointService.setStatusFailure(electronicAreaIds);
        //场站失效
        xpStationService.setStatusFailure(electronicId);//场站失效
        // 删除旧的区域数据,然后保存新的区域数据