xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -82,11 +82,11 @@ @PostMapping("/v1/api/appUserCoupon/deleteByIds") @ApiOperation(value = "根据ids删除用户优惠券", tags = {"管理后台-白名单-删除用户优惠券"}) public R<Boolean> deleteByIds(@RequestBody List<Long> ids) { if (ids == null || ids.isEmpty()) { public R<Boolean> deleteByIds(@RequestBody XpAppUserCouponPageListQuery query ) { if (query.getIds() == null || query.getIds().isEmpty()) { return R.fail("ID列表不能为空"); } boolean result = xpAppUserCouponService.removeByIds(ids); boolean result = xpAppUserCouponService.removeByIds(query.getIds()); return R.ok(result); } 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/account/XpAppUserCouponPageListQuery.java
@@ -11,7 +11,7 @@ @Data public class XpAppUserCouponPageListQuery extends BasePage { private List<Long> ids; @ApiModelProperty(value = "用户id 根据手机号获取") private Long appUserId; 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-api/src/main/java/com/xiaopeng/api/query/operation/XpTargetedServiceQuery.java
@@ -5,11 +5,16 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "定向服务 query") public class XpTargetedServiceQuery extends BasePage { @ApiModelProperty(value = "ids") private List<Long> ids; @ApiModelProperty(value = "省份名称") private String provinceName; @ApiModelProperty(value = "省份code") xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleModelServiceImpl.java
@@ -43,12 +43,12 @@ @Override public boolean logicalRemoveById(String id) { XpVehicleModel entity = this.getById(id); if (entity != null) { entity.setDeleted(true); return this.updateById(entity); } return false; // XpVehicleModel entity = this.getById(id); // if (entity != null) { // entity.setDeleted(true); // return this.updateById(entity); // } return this.removeById(id); } /** * 获取指定车型ID关联的车辆数量 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/controller/XpTargetedServiceController.java
@@ -1,5 +1,6 @@ package com.xiaopeng.operation.controller; import cn.hutool.core.collection.CollUtil; import com.xiaopeng.api.model.account.SysUser; import com.xiaopeng.api.model.operation.XpTargetedService; import com.xiaopeng.api.model.operation.XpWhitelist; @@ -116,12 +117,14 @@ /** * 批量删除 */ @GetMapping("/api/v1/targetedService/deleteByIds") @PostMapping("/api/v1/targetedService/deleteByIds") @ApiOperation(value = "定向服务-批量删除", tags = {"管理后台-定向服务批量删除"}) public R deleteByIds(String ids) { public R deleteByIds(@RequestBody XpTargetedServiceQuery query ) { if(CollUtil.isEmpty(query.getIds())){ return R.fail("ID列表不能为空"); } SysUser sysUser = tokenService.getLoginUser().getSysUser(); List<Long> whiteIds = Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList()); return xpTargetedServiceService.deleteByIds(whiteIds, sysUser); return xpTargetedServiceService.deleteByIds(query.getIds(), sysUser); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/query/WhitelistPageListQuery.java
@@ -12,6 +12,8 @@ public class WhitelistPageListQuery extends BasePage { @ApiModelProperty(value = "白名单账号") private String account; @ApiModelProperty(value = "用户名称") private String nickName; @ApiModelProperty(value = "状态 0=冻结 1=正常") private Boolean status; @ApiModelProperty(value = "来源 1=添加 2=邀请码") 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()); } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpTargetedServiceServiceImpl.java
@@ -81,7 +81,7 @@ @Override public XpTargetedServiceVo getById(Long id) { XpTargetedService entity = this.getById(id); XpTargetedService entity = baseMapper.selectById(id); if (entity == null) { return null; } @@ -170,17 +170,21 @@ } @Override @Transactional public R deleteByIds(List<Long> ids, SysUser sysUser) { List<XpTargetedService> list = new ArrayList<>(); for (Long id : ids) { list.add(new XpTargetedService(){{ setId(id); setUpdateBy(sysUser.getNickName()); setDeleted(true); }}); // List<XpTargetedService> list = new ArrayList<>(); // for (Long id : ids) { // list.add(new XpTargetedService(){{ // setId(id); // setUpdateBy(sysUser.getNickName()); // setUpdateTime(LocalDateTime.now()); // setDeleted(true); // }}); // // } // this.updateBatchById(list); } this.updateBatchById(list); removeBatchByIds(ids); return R.ok(); } } xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpTargetedServiceMapper.xml
@@ -5,8 +5,8 @@ <select id="pageList" resultType="com.xiaopeng.api.vo.operation.XpTargetedServiceVo"> select a.* , (select count(1) from xp_targeted_service_vehicle where xp_targeted_service_id = a.id) as vehicleCount, (select count(1) from xp_targeted_service_whitelist where xp_targeted_service_id = a.id) as whitelistCount (select count(1) from xp_targeted_service_vehicle where targeted_service_id = a.id) as vehicleCount, (select count(1) from xp_targeted_service_whitelist where targeted_service_id = a.id) as whitelistCount from xp_targeted_service as a where a.is_deleted = 0 xp-robotaxi-operation-boot/src/main/resources/mapper/operation/XpWhitelistMapper.xml
@@ -16,6 +16,9 @@ <if test="query.account != null and query.account != ''"> and account like concat('%',#{query.account},'%') </if> <if test="query.nickName != null and query.nickName != ''"> and nick_name like concat('%',#{query.nickName},'%') </if> <if test="query.status != null"> and status = #{query.status} </if>