xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
@@ -39,8 +39,10 @@ import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import static com.xiaopeng.map.service.serviceimpl.XpElectronicFenceServiceImpl.getPinyinInitials; @@ -239,7 +241,7 @@ I18nKeyConstant.FENCE_STATUS_CANNOT_COPIED ); } electronicFence.setElectronicName("副本_"+electronicFence.getElectronicName()); electronicFence.setElectronicName(buildCopyFenceName(electronicFence.getElectronicName())); electronicFence.setId(null); electronicFence.setStatus(0); List<XpElectronicFenceArea> electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery().eq(XpElectronicFenceArea::getElectronicId, id) @@ -267,6 +269,21 @@ return R.ok(electronicFence.getId()); } private String buildCopyFenceName(String sourceName) { Set<String> existingNames = new HashSet<>(xpElectronicFenceService.lambdaQuery() .likeRight(XpElectronicFence::getElectronicName, sourceName) .list() .stream() .map(XpElectronicFence::getElectronicName) .collect(Collectors.toSet())); String candidateName = sourceName + "_副本"; while (existingNames.contains(candidateName)) { candidateName = candidateName + "_副本"; } return candidateName; } /** * 根据ID列表批量查询电子围栏 * xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpOpenCityController.java
@@ -11,6 +11,7 @@ import com.xiaopeng.operation.vo.OpenCityListVO; import com.xiaopeng.operation.vo.XpOpenCityVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; @@ -51,8 +52,9 @@ */ @ApiOperation(value = "获取开通城市列表(管理后台)", tags = {"管理后台-交易管理"}, response = OpenCityListVO.class) @GetMapping("/api/v1/openCity/list") public R<List<OpenCityListVO>> getOpenCityList() { List<OpenCityListVO> list = xpOpenCityService.getOpenCityListForAdmin(); @ApiImplicitParam(name = "type", value = "类型:1-路线规划配置使用 2-定价管理配置使用", required = true, dataTypeClass = Integer.class) public R<List<OpenCityListVO>> getOpenCityList(@RequestParam("type") Integer type) { List<OpenCityListVO> list = xpOpenCityService.getOpenCityListForAdmin(type); return R.ok(list); } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/XpOpenCityService.java
@@ -9,7 +9,6 @@ import com.xiaopeng.operation.query.OpenCityPageQuery; import com.xiaopeng.operation.vo.OpenCityListVO; import com.xiaopeng.operation.vo.XpOpenCityVo; import org.springframework.web.bind.annotation.RequestParam; import javax.validation.Valid; import java.util.List; @@ -32,7 +31,7 @@ * * @return 开通城市列表 */ List<OpenCityListVO> getOpenCityListForAdmin(); List<OpenCityListVO> getOpenCityListForAdmin(Integer type); /** * 开通城市分页列表 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpOpenCityServiceImpl.java
@@ -2,23 +2,28 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.model.operation.XpOpenCity; import com.xiaopeng.api.model.operation.XpPricing; import com.xiaopeng.api.model.operation.XpRoutePlan; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.security.utils.SecurityUtils; import com.xiaopeng.operation.constant.I18nKeyConstant; import com.xiaopeng.operation.dto.OpenCityAddDTO; import com.xiaopeng.operation.dto.OpenCityEditDTO; import com.xiaopeng.operation.mapper.XpOpenCityMapper; import com.xiaopeng.operation.query.OpenCityPageQuery; import com.xiaopeng.operation.service.IXpPricingItemService; import com.xiaopeng.operation.service.IXpRoutePlanService; import com.xiaopeng.operation.service.XpOpenCityService; import com.xiaopeng.operation.service.XpPricingService; import com.xiaopeng.operation.vo.OpenCityListVO; import com.xiaopeng.operation.vo.XpOpenCityNextVo; import com.xiaopeng.operation.vo.XpOpenCityVo; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -36,7 +41,11 @@ */ @Service public class XpOpenCityServiceImpl extends ServiceImpl<XpOpenCityMapper, XpOpenCity> implements XpOpenCityService { @Autowired private IXpRoutePlanService xpRoutePlanService; @Autowired private XpPricingService xpPricingService; @Override @@ -59,14 +68,26 @@ } @Override public List<OpenCityListVO> getOpenCityListForAdmin() { public List<OpenCityListVO> getOpenCityListForAdmin(Integer type) { // 1. 查询所有启用状态的开通城市 List<XpOpenCity> xpOpenCities = this.baseMapper.selectList( new LambdaQueryWrapper<XpOpenCity>() .eq(XpOpenCity::getStatus, 1) .orderByAsc(XpOpenCity::getId) ); List<Long> existsOpenCityIds = new ArrayList<>(); //2.根据type过滤已配置的开通城市 if (Integer.valueOf(1).equals(type)) { //路径规划 existsOpenCityIds = xpRoutePlanService.list().stream().map(XpRoutePlan::getOpenCityId).collect(Collectors.toList()); } else { //定价管理 existsOpenCityIds = xpPricingService.list().stream().map(XpPricing::getCityId).collect(Collectors.toList()); } if (CollUtil.isNotEmpty(existsOpenCityIds)) { List<Long> finalExistsOpenCityIds = existsOpenCityIds; xpOpenCities = xpOpenCities.stream().filter(item -> !finalExistsOpenCityIds.contains(item.getId())).collect(Collectors.toList()); } // 2. 转换为VO,处理区/县级拼接逻辑 return xpOpenCities.stream() .map(city -> {