yyy
2026-04-21 1d2370a15e299c033c11a3fd1416596f9b9f1a2d
1.场站功能开发
13个文件已修改
292 ■■■■■ 已修改文件
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpStation.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpStationQuery.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpStationManagementController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/job/base/AbstractJob.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/job/jobs/ElectronicEffectJob.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/XpPointService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/XpStationService.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpPointServiceImpl.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-map-boot/src/main/resources/mapper/XpPointMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpOpenCityServiceImpl.java 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpStation.java
@@ -43,7 +43,7 @@
    @ApiModelProperty(value = "场站编号唯一 规则:城市首字母-HUB-4位流水号")
    private String stationNumber;
    @ApiModelProperty(value = "场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效")
    @ApiModelProperty(value = "场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效")
    private Integer status;
@@ -52,20 +52,12 @@
            if(status == 0){
                return "草稿";
            }else if(status == 1){
                return "待测试";
                return "待启用";
            } else if(status == 2){
                return "测试中";
            }else if(status == 3){
                return "测试未通过";
            }else if(status == 4){
                return "可运营";
            }else if(status == 5){
                return "待生效";
            }else if(status == 6){
                return "启用中";
            }else if(status == 7){
            }else if(status == 3){
                return "已停用";
            }else if(status == 8){
            }else if(status == 4){
                return "失效";
            }
        }
xp-robotaxi-api/src/main/java/com/xiaopeng/api/query/operation/XpStationQuery.java
@@ -15,10 +15,10 @@
    @ApiModelProperty(value = "场站名称编码")
    private String stationNameOrNumber;
    @ApiModelProperty(value = "场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效")
    @ApiModelProperty(value = "场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效")
    private Integer status;
    @ApiModelProperty(value = "场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效")
    @ApiModelProperty(value = "场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效")
    private List<Integer> statusList;
    @ApiModelProperty(value = "创建人")
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
@@ -3,6 +3,7 @@
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.baomidou.mybatisplus.annotation.TableField;
import com.xiaopeng.api.dto.map.XpPointExportExcelQuery;
import com.xiaopeng.api.dto.operation.PointAddDto;
import com.xiaopeng.api.dto.operation.PointUpdateDto;
@@ -25,6 +26,7 @@
import com.xiaopeng.map.service.XpElectronicFenceService;
import com.xiaopeng.map.service.XpPointService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
@@ -70,10 +72,12 @@
    @ApiOperation(value = "获取所有运营中的区域", response = XpElectronicFenceArea.class)
    @PostMapping("/listElectronicFenceArea")
    public R<List<XpElectronicFenceArea>> listElectronicFenceArea() {
    public R<List<XpElectronicFenceArea>> listElectronicFenceArea(@RequestParam String cityCode) {
        // 获取所有启用的电子围栏
        List<XpElectronicFence> electronicFences = xpElectronicFenceService.lambdaQuery()
                .eq(XpElectronicFence::getStatus, 2).list();
                .eq(XpElectronicFence::getStatus, 2)
                .eq(XpElectronicFence::getCityCode, cityCode)
                .list();
        List<Long> electronicFenceIds = electronicFences.stream().map(XpElectronicFence::getId).collect(Collectors.toList());
        if (electronicFenceIds.isEmpty()) {
            return R.ok(new ArrayList<XpElectronicFenceArea>());
@@ -224,6 +228,15 @@
            }
        }
        xpPoint.setFpElectronicAreaId(null);
        Long stationId = pointAddDto.getStationId();
        Integer stationSortNo = pointAddDto.getStationSortNo(); //点位在场站内排序
        if(stationId != null && stationId > 0){
            if(stationSortNo == null){
                stationSortNo = 0;
            }
        }
        // 使用 lambdaUpdate 确保 pointPictures 为 null 时也能将数据库字段清空
        // (updateById 默认策略 NOT_NULL 会跳过 null 值,导致删除图片后数据库仍保留旧图片)
        xpPointService.lambdaUpdate()
@@ -252,9 +265,12 @@
                .set(XpPoint::getCityName, xpPoint.getCityName())
                .set(XpPoint::getDistrictName, xpPoint.getDistrictName())
                .set(XpPoint::getDistrictCode, xpPoint.getDistrictCode())
                .set(XpPoint::getStationId, xpPoint.getStationId())
                .set(XpPoint::getStationSortNo, xpPoint.getStationSortNo())
                .set(XpPoint::getStationId, stationId)
                .set(XpPoint::getStationSortNo, stationSortNo)
                .update();
        //场站点位排序 后添加的点位 排第一个。
        xpPointService.setStationSortNo(xpPoint.getStationId(),stationSortNo);
        return R.ok();
    }
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpStationManagementController.java
@@ -2,6 +2,7 @@
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.xiaopeng.api.model.operation.XpStation;
import com.xiaopeng.api.query.operation.XpStationQuery;
import com.xiaopeng.api.vo.account.LoginUser;
@@ -47,7 +48,17 @@
    private TokenService tokenService;
    @ApiOperation(value = "场站管理列表", tags = {"管理后台-运营-场站管理"})
    @ApiOperation(value = "场站管理已经启动列表", tags = {"管理后台-运营-场站管理"})
    @GetMapping("/findListEnable")
    public R<List<XpStation>> findListEnable(@RequestParam String cityCode) {
        LambdaQueryWrapper<XpStation> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(XpStation::getStatus, 2);
        queryWrapper.eq(XpStation::getCityCode, cityCode);
        queryWrapper.eq(XpStation::getDeleted, false);
        return R.ok( xpStationService.list(queryWrapper));
    }
    @ApiOperation(value = "场站管理分页列表", tags = {"管理后台-运营-场站管理"})
    @PostMapping("/pageList")
    public R<PageInfo<XpStation>> pageList(@RequestBody XpStationQuery query) {
        PageInfo<XpStation> pageList = xpStationService.pageList(query);
@@ -66,11 +77,9 @@
        LoginUser loginUser = tokenService.getLoginUser();
        vo.setCreateBy(loginUser.getUsername());
        vo.setUpdateBy(loginUser.getUsername());
        vo.setCreateTime(LocalDateTime.now());
        vo.setUpdateBy(loginUser.getUsername());
        vo.setUpdateTime(LocalDateTime.now());
        return xpStationService.add(vo);
    }
@@ -89,6 +98,10 @@
        if(bean == null){
            return R.fail("参数错误");
        }
        //场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效
        if(bean.getStatus() == 2){
            return R.fail("场站在启动中不能编辑");
        }
        LoginUser loginUser = tokenService.getLoginUser();
@@ -106,18 +119,22 @@
     *       - 否:子点位维持当前状态,但自动退回为“独立点位”。
     */
    @ApiOperation(value = "停用" , tags = {"管理后台-运营-场站管理"})
    @PostMapping("/updateStatus/{id}")
    public R updateStatusStop(@PathVariable Long id, @RequestParam Boolean pointStop) {
    @GetMapping("/updateStatus/{id}")
    public R updateStatusStop(@PathVariable Long id, @RequestParam Boolean isEnable, @RequestParam Boolean pointStop) {
        XpStation bean = xpStationService.getById(id);
        if (bean == null) {
            throw new ServiceException("场站不存在,请刷新重试");
        }
//        Integer status =6;
//        if(!statusEnable){
//            status = 7;
//        }
        //场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
        xpStationService.updateStatusStop(bean,pointStop);
        if(isEnable){
            xpStationService.updateStatusEnable(bean);
        }else{
            if(bean.getStatus() == 2){//场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效
                return R.fail("场站状态未启动,不能停用");
            }
            //场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
            xpStationService.updateStatusStop(bean,pointStop);
        }
        return R.ok();
    }
    /**
@@ -137,18 +154,10 @@
        if (bean == null) {
            throw new ServiceException("场站不存在,请刷新重试");
        }
        // 场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
        // 场站状态  0=草稿 1=待启用 2=启用中 3=已停用 4=失效
        // 只有状态为已停用(7)时才能删除
        if (bean.getStatus() == 4 || bean.getStatus() == 5 || bean.getStatus() == 6) {
            String msg = "";
            if(bean.getStatus() == 4){
                msg = "可运营";
            }else if (bean.getStatus() == 5){
                msg = "待生效";
            }else {
                msg = "启用中";
            }
            throw new ServiceException("场站"+msg+",无法删除");
        if (bean.getStatus() == 2 ) {
            throw new ServiceException("场站启用中,无法删除");
        }
        boolean b = xpStationService.removeById(bean,pointDelete);
        if (b){
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/job/base/AbstractJob.java
@@ -2,10 +2,7 @@
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
import com.xiaopeng.map.job.utils.SpringContextsUtil;
import com.xiaopeng.map.service.AdcFencePushService;
import com.xiaopeng.map.service.XpElectronicFenceAreaService;
import com.xiaopeng.map.service.XpElectronicFenceService;
import com.xiaopeng.map.service.XpPointService;
import com.xiaopeng.map.service.*;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
@@ -23,6 +20,7 @@
    protected XpPointService xpPointService;
    protected XpPushMessageClient xpPushMessageClient;
    protected AdcFencePushService adcFencePushService;
    protected XpStationService xpStationService;
    public AbstractJob(){
        this.xpElectronicFenceService = SpringContextsUtil.getBean(XpElectronicFenceService.class);
@@ -30,6 +28,7 @@
        this.xpPointService = SpringContextsUtil.getBean(XpPointService.class);
        this.xpPushMessageClient = SpringContextsUtil.getBean(XpPushMessageClient.class);
        this.adcFencePushService = SpringContextsUtil.getBean(AdcFencePushService.class);
        this.xpStationService = SpringContextsUtil.getBean(XpStationService.class);
    }
     
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/job/jobs/ElectronicEffectJob.java
@@ -59,6 +59,7 @@
                }
                xpElectronicFenceAreaService.updateBatchById(electronicFenceAreaList);
                xpStationService.setStatusFailure(electronicId);//场站失效
                // 清除绑定车辆的 FBS 数据
                try {
                    adcFencePushService.deactivateFenceForVehicles(electronicId);
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/XpPointService.java
@@ -41,6 +41,10 @@
     */
    XpPoint addPointWithGeneratedNumber(@Valid PointAddDto pointAddDto);
    @Transactional
    void setStationSortNo(Long stationId, Integer stationSortNo);
    String getPointNumber(Long electronicAreaId);
    /**
@@ -113,5 +117,8 @@
    void statusStopByStationId(Long stationId, Boolean pointStop);
    @Transactional(rollbackFor = Exception.class)
    void statusEnableByStationId(Long stationId);
    @Transactional(rollbackFor = Exception.class)
    void pointDeleteByStationId(Long stationId, Boolean pointDelete);
}
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/XpStationService.java
@@ -37,8 +37,12 @@
    R edit(XpStationVo dto);
    void setStatusFailure(Long electronicId);
    boolean setStatus(XpStation bean, Integer status);
    boolean updateStatusEnable(XpStation bean);
    boolean updateStatusStop(XpStation bean, Boolean pointStop);
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpElectronicFenceServiceImpl.java
@@ -828,6 +828,13 @@
        );
    }
    /**
     * 失效
     * @param electronicId
     * @param failureType
     * @param failureTime
     * @param now
     */
    private void registerFailureJobIfNeeded(Long electronicId, Integer failureType, LocalDateTime failureTime, LocalDateTime now) {
        QuartzManager.removeJob((ElectronicEffectJob.failure + electronicId).toUpperCase(), TimeJobType.ELECTRONIC_FAILURE);
        if (failureType == null || failureType != 2 || failureTime == null || failureTime.isBefore(now)) {
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpPointServiceImpl.java
@@ -136,9 +136,40 @@
        BeanUtils.copyProperties(pointAddDto, xpPoint);
        xpPoint.setFpElectronicAreaId(pointAddDto.getElectronicAreaId());
        xpPoint.setPointNumber(pointNumber);
        xpPoint.setStationSortNo(0);
        this.save(xpPoint);
        //场站点位排序 后添加的点位 排第一个。
        this.setStationSortNo(xpPoint.getStationId(),0);
        return xpPoint;
    }
    /**
     * 场站 点位排序
     * @param stationId
     * @param stationSortNo
     */
    @Transactional
    @Override
    public void setStationSortNo(Long stationId, Integer stationSortNo){
        if(null != stationId  && stationSortNo != null && stationSortNo ==0){
            // 查询该场站下的所有点位,按 stationSortNo 排序
            List<XpPoint> points = this.lambdaQuery()
                    .eq(XpPoint::getStationId, stationId)
                    .orderByAsc(XpPoint::getStationSortNo)
                    .list();
            if (CollUtil.isNotEmpty(points)) {
                int newSortNo = 1;
                for (XpPoint point : points) {
                    point.setStationSortNo(newSortNo++);
                }
                this.updateBatchById(points);
            }
        }
    }
    @Override
    public String getPointNumber(Long electronicAreaId) {
        String cityPrefix = buildCityPrefix(electronicAreaId);
@@ -746,6 +777,18 @@
        }
    }
    @Transactional(rollbackFor = Exception.class)
    @Override
    public void statusEnableByStationId(Long stationId) {
        if (stationId == null) {
            return;
        }
        this.lambdaUpdate()
                .eq(XpPoint::getStationId, stationId)
                .set(XpPoint::getOperationStatus, 2)//运营状态 1=待启用 2=启用中 3=已停用 4=已失效
                .update();
    }
    /**
     * 场站删除
     *       - 删除拦截逻辑:
xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/service/serviceimpl/XpStationServiceImpl.java
@@ -7,10 +7,12 @@
import com.xiaopeng.api.model.map.XpGeoFencingPolygon;
import com.xiaopeng.api.model.operation.*;
import com.xiaopeng.api.query.operation.XpStationQuery;
import com.xiaopeng.api.vo.account.LoginUser;
import com.xiaopeng.api.vo.operation.XpStationVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.exception.ServiceException;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.security.service.TokenService;
import com.xiaopeng.map.constant.I18nKeyConstant;
import com.xiaopeng.map.mapper.XpRegionMapper;
import com.xiaopeng.map.mapper.XpStationMapper;
@@ -34,7 +36,6 @@
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
@@ -49,6 +50,8 @@
public class XpStationServiceImpl extends ServiceImpl<XpStationMapper, XpStation> implements XpStationService {
    @Resource
    private TokenService tokenService;
    @Autowired
    private MongoTemplate mongoTemplate;
@@ -314,7 +317,10 @@
                );
            }
        }
    }
    public static String getPinyinInitials(String chinese) {
        StringBuilder pinyinInitials = new StringBuilder();
@@ -354,9 +360,11 @@
            this.updateById(dto);
            save_operatingArea(dto);
            savePoint(dto);
            saveMongo_operatingArea(dto);
            return R.ok();
        } catch (Exception e) {
            log.error("新增场站失败", e);
@@ -373,11 +381,11 @@
        try {
//            dto.setStatus(0); //status = 场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
            this.updateById(dto);
            // 删除旧的区域数据,然后保存新的区域数据
            remove_operatingArea(dto);
            save_operatingArea(dto);
            xpPointService.clearStationInfoByStationId(dto.getId());
            savePoint(dto);
            // 删除旧的区域数据,然后保存新的区域数据
            removeMongo_operatingArea(dto);
            saveMongo_operatingArea(dto);
            return R.ok();
        } catch (Exception e) {
            log.error("新增场站失败", e);
@@ -412,45 +420,78 @@
        }
    }
    /**
     * 场站 失效-围栏失效 场站失效
     * @param electronicId
     */
    @Override
    public void setStatusFailure(Long electronicId){
        LambdaQueryWrapper<XpStation> query = new LambdaQueryWrapper<>();
        query.eq(XpStation::getElectronicId, electronicId);
        query.eq(XpStation::getDeleted, 0);
        List<XpStation> list = this.list(query);
        if(!list.isEmpty()){
            for (XpStation xpStation : list) {
                this.setStatus(xpStation,4);
            }
        }
    }
    @Override
    public boolean setStatus(XpStation bean, Integer status){
        bean.setStatus(status);
        LoginUser loginUser = tokenService.getLoginUser();
        bean.setUpdateBy(loginUser.getUsername());
        bean.setUpdateTime(LocalDateTime.now());
        bean.setStatus(status);//场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效
        boolean b = updateById(bean);
        if(b){
            //场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
            List<Integer> statusList = Arrays.asList(4, 5, 6, 7) ;
            if(statusList.contains(status) ){
                save_operatingArea(bean);
            }
            if(status == 7 ){
                remove_operatingArea(bean);
            if(status == 2){
                saveMongo_operatingArea(bean);
            }else if(status == 3 || status == 4){
                removeMongo_operatingArea(bean);
            }
        }
        return b;
    }
    private void remove_operatingArea(XpStation bean) {
    private void removeMongo_operatingArea(XpStation bean) {
        // 同步删除Mongo电子围栏多边形
        Query delMongoQuery = new Query();
        delMongoQuery.addCriteria(Criteria.where("stationId").is(String.valueOf(bean.getId())));
        mongoTemplate.remove(delMongoQuery, XpGeoFencingPolygon.class);
    }
    private void save_operatingArea (XpStation bean) {
        XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
        xpGeoFencingPolygon.setFenceId(String.valueOf(bean.getElectronicId()));
        xpGeoFencingPolygon.setName(bean.getStationName());
        xpGeoFencingPolygon.setAreaId(String.valueOf(bean.getElectronicAreaId()));
        xpGeoFencingPolygon.setCityCode(bean.getCityCode());
        xpGeoFencingPolygon.setStationId(String.valueOf(bean.getId()));
        xpGeoFencingPolygon.setOperationStrategy(null);//运营策略
        // 将围栏点转换为GeoJSON多边形
        GeoJsonPolygon geoJsonPolygon = xpElectronicFenceService.convertToGeoJsonPolygon(bean.getFencePoints());
        xpGeoFencingPolygon.setPoints(geoJsonPolygon);
        mongoTemplate.insert(xpGeoFencingPolygon);
    private void saveMongo_operatingArea (XpStation bean) {
        //场站状态 0=草稿 1=待启用 2=启用中 3=已停用 4=失效
        if(bean.getStatus() == 2){
            XpGeoFencingPolygon xpGeoFencingPolygon = new XpGeoFencingPolygon();
            xpGeoFencingPolygon.setFenceId(String.valueOf(bean.getElectronicId()));
            xpGeoFencingPolygon.setName(bean.getStationName());
            xpGeoFencingPolygon.setAreaId(String.valueOf(bean.getElectronicAreaId()));
            xpGeoFencingPolygon.setCityCode(bean.getCityCode());
            xpGeoFencingPolygon.setStationId(String.valueOf(bean.getId()));
            xpGeoFencingPolygon.setOperationStrategy(null);//运营策略
            // 将围栏点转换为GeoJSON多边形
            GeoJsonPolygon geoJsonPolygon = xpElectronicFenceService.convertToGeoJsonPolygon(bean.getFencePoints());
            xpGeoFencingPolygon.setPoints(geoJsonPolygon);
            mongoTemplate.insert(xpGeoFencingPolygon);
        }
    }
    /**
     * 启用操作
     * @param bean
     * @return
     */
    @Override
    public boolean updateStatusEnable(XpStation bean){
        xpPointService.statusEnableByStationId(bean.getId());
        return setStatus(bean, 2);
    }
    /**
     * 停用
@@ -462,7 +503,7 @@
    public boolean updateStatusStop(XpStation bean, Boolean pointStop){
        xpPointService.statusStopByStationId(bean.getId(),pointStop);
        return setStatus(bean, 7);
        return setStatus(bean, 3);
    }
    /**
@@ -478,18 +519,16 @@
    @Override
    public boolean removeById(XpStation bean, Boolean pointDelete){
        boolean b = true;
        //场站状态 0=草稿 1=待测试 2=测试中 3=测试不通过 4=可运营 5=待生效 6=启用中 7=已停用 8=失效
        if(bean.getStatus() == 1 || bean.getStatus() == 2 || bean.getStatus() == 3 || bean.getStatus() == 7 || bean.getStatus() == 8){
        //场站状态  0=草稿 1=待启用 2=启用中 3=已停用 4=失效
        if(bean.getStatus() != 2){
            b = super.removeById(bean.getId());
        }
        if(bean.getStatus() == 7 || bean.getStatus() == 8){
             xpPointService.pointDeleteByStationId(bean.getId(),pointDelete);
        }
        if(b){
            // 同步删除Mongo电子围栏多边形
            Query delMongoQuery = new Query();
            delMongoQuery.addCriteria(Criteria.where("stationId").is(String.valueOf(bean.getId())));
            mongoTemplate.remove(delMongoQuery, XpGeoFencingPolygon.class);
            xpPointService.pointDeleteByStationId(bean.getId(),pointDelete);
            if(b){
                // 同步删除Mongo电子围栏多边形
                Query delMongoQuery = new Query();
                delMongoQuery.addCriteria(Criteria.where("stationId").is(String.valueOf(bean.getId())));
                mongoTemplate.remove(delMongoQuery, XpGeoFencingPolygon.class);
            }
        }
        return b;
xp-robotaxi-map-boot/src/main/resources/mapper/XpPointMapper.xml
@@ -72,6 +72,9 @@
        select t1.*
        from xp_point t1
        where t1.is_deleted = 0
        <if test="query.cityCode != null and query.cityCode != ''">
            and t1.city_code = #{query.cityCode}
        </if>
        <if test="query.queryParams != null and query.queryParams != ''">
            and (
            t1.point_name like concat('%',#{query.queryParams},'%')
xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpOpenCityServiceImpl.java
@@ -76,11 +76,11 @@
                        .orderByAsc(XpOpenCity::getId)
        );
        List<Long> existsOpenCityIds = new ArrayList<>();
        //2.根据type过滤已配置的开通城市
        //2.根据type过滤已配置的开通城市  类型:1-路线规划配置使用 2-定价管理配置使用
        if (Integer.valueOf(1).equals(type)) {
            //路径规划
            existsOpenCityIds = xpRoutePlanService.list().stream().map(XpRoutePlan::getOpenCityId).collect(Collectors.toList());
        } else {
        } else if (Integer.valueOf(2).equals(type)){
            //定价管理
            existsOpenCityIds = xpPricingService.list().stream().map(XpPricing::getCityId).collect(Collectors.toList());
        }