xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/SysLoginService.java
@@ -107,7 +107,7 @@ } if (Integer.valueOf("1").equals(user.getStatus())) { recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_FAIL_STATUS, "用户已停用,请联系管理员"); throw new ServiceException("您的账号:" + username + " 已禁用", I18nKeyConstant.LOGIN_ACCOUNT_DISABLED); throw new ServiceException("您的账号:" + username + " 已禁用", I18nKeyConstant.LOGIN_ACCOUNT_DISABLED, new Object[]{username}); } passwordService.validate(user, password, request); // recordLogService.recordLogininfor(request, user.getId().intValue(), username, Constants.LOGIN_SUCCESS_STATUS, "登录成功"); xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpChargingRecord.java
@@ -41,6 +41,8 @@ @ApiModelProperty(value = "开始剩余电量") private Integer startRemainingBattery; @ApiModelProperty(value = "开始剩余续航") private Float startMileageRange; @ApiModelProperty(value = "开始充电图片") private String startChargingPicture; @@ -51,7 +53,8 @@ @ApiModelProperty(value = "结束剩余电量") private Integer endRemainingBattery; @ApiModelProperty(value = "结束剩余续航") private Float endMileageRange; @ApiModelProperty(value = "结束充电图片") private String endChargingPicture; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleCleanController.java
@@ -107,6 +107,10 @@ List<XpVehicleClean> records = page.getRecords(); if(data==null){ List<Long> userIds = records.stream().map(XpVehicleClean::getOperationsUserId).collect(Collectors.toList()); if(userIds.isEmpty()){ return R.ok(page); } R<List<XpOperationsUser>> r = xpOperationUserClient.listByIds(userIds); if(r.getData().isEmpty()){ return R.ok(page); xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleRepairController.java
@@ -56,20 +56,12 @@ */ @ApiOperation(value = "车辆运维-车辆运维-车辆取回", tags = {"运维APP-车辆管理"}) @PostMapping("/api/v1/vehicleRepair/saveReturnRepair") public R<String> saveReturnRepair(@RequestBody XpVehicleRepairReturnDTO dto) { public R<String> saveReturnRepair(@Validated @RequestBody XpVehicleRepairReturnDTO dto) { Long id = tokenService.getLoginOperationUser().getId(); if (dto.getRepairMoney().toString().length() > 200) { throw new ServiceException("维修费用不能超过200字符", I18nKeyConstant.REPAIR_MONEY_TOO_LONG); } XpVehicleRepair xpVehicleRepair = xpVehicleRepairService.getById(dto.getId()); xpVehicleRepair.setVehicleId(null); // 修改车辆取回信息 xpVehicleRepair.setRepairMoney(dto.getRepairMoney()); xpVehicleRepair.setRepairMoneyDetail(dto.getRepairMoneyDetail()); xpVehicleRepair.setReturnUserId(id); xpVehicleRepair.setReturnTime(LocalDateTime.now()); xpVehicleRepairService.updateById(xpVehicleRepair); xpVehicleRepairService.saveReturnRepair(dto,id); return R.ok(); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/OperationRecordsVO.java
@@ -42,4 +42,10 @@ @ApiModelProperty(value = "结束剩余电量") private Integer endRemainingBattery; @ApiModelProperty(value = "开始剩余续航") private Float startMileageRange; @ApiModelProperty(value = "结束剩余续航") private Float endMileageRange; } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleRepairService.java
@@ -3,6 +3,7 @@ import com.xiaopeng.api.model.maintenance.XpVehicleRepair; import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.maintenance.dto.XpVehicleRepairReturnDTO; import com.xiaopeng.maintenance.dto.XpVehicleRepairStartDTO; import com.xiaopeng.maintenance.model.query.XpVehicleRepairPageQuery; import com.xiaopeng.maintenance.model.vo.XpVehicleRepairVO; @@ -50,4 +51,12 @@ * @param id */ void saveRepair(XpVehicleRepairStartDTO dto, Long id); /** * 保存车辆维修结束信息 * * @param dto * @param id */ void saveReturnRepair(XpVehicleRepairReturnDTO dto, Long id); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpChargingRecordServiceImpl.java
@@ -8,6 +8,7 @@ import com.xiaopeng.api.model.maintenance.XpChargingRecord; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; import com.xiaopeng.maintenance.model.query.XpChargingRecordPageQuery; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; @@ -20,6 +21,9 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -42,6 +46,8 @@ private XpVehicleClient xpVehicleClient; @Autowired private XpOperationUserClient xpOperationUserClient; @Autowired private MongoTemplate mongoTemplate; @Override public void startCharging(XpChargingRecordStartDTO dto, Long id) { // 创建车辆充电记录 @@ -51,6 +57,17 @@ xpChargingRecord.setVehicleId(dto.getVehicleId()); xpChargingRecord.setStartTime(LocalDateTime.now()); xpChargingRecord.setStartOperationsUserId(id); // 查询车辆信息 XpVehicle xpVehicle = xpVehicleClient.queryById(dto.getVehicleId()).getData(); if(Objects.nonNull(xpVehicle)){ // 查询车辆的续航里程 VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); if(Objects.nonNull(vehiclePosition)){ xpChargingRecord.setStartMileageRange(vehiclePosition.getMileageRange()); }else { xpChargingRecord.setStartMileageRange(0F); } } this.save(xpChargingRecord); } @@ -58,11 +75,22 @@ public void stopCharging(XpChargingRecordStopDTO dto, Long id) { // 查询车辆充电记录 进行修改 XpChargingRecord xpChargingRecord = this.getById(dto.getId()); // 查询车辆信息 XpVehicle xpVehicle = xpVehicleClient.queryById(xpChargingRecord.getVehicleId()).getData(); xpChargingRecord.setVehicleId(null); xpChargingRecord.setEndChargingPicture(dto.getEndChargingPicture()); xpChargingRecord.setEndRemainingBattery(dto.getEndRemainingBattery()); xpChargingRecord.setEndTime(LocalDateTime.now()); xpChargingRecord.setEndOperationsUserId(id); if(Objects.nonNull(xpVehicle)){ // 查询车辆的续航里程 VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); if(Objects.nonNull(vehiclePosition)){ xpChargingRecord.setStartMileageRange(vehiclePosition.getMileageRange()); }else { xpChargingRecord.setStartMileageRange(0F); } } this.updateById(xpChargingRecord); } @@ -88,7 +116,7 @@ } XpOperationsUser operationsUserEnd = xpOperationUserClient.queryById(xpChargingRecordVO.getEndOperationsUserId()).getData(); if (Objects.nonNull(operationsUserEnd)) { xpChargingRecordVO.setOperatorStartName(operationsUserEnd.getNickName()); xpChargingRecordVO.setOperatorEndName(operationsUserEnd.getNickName()); } return xpChargingRecordVO; } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleRepairServiceImpl.java
@@ -12,6 +12,7 @@ import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.maintenance.dto.XpVehicleRepairReturnDTO; import com.xiaopeng.maintenance.dto.XpVehicleRepairStartDTO; import com.xiaopeng.maintenance.mapper.XpVehicleRepairMapper; import com.xiaopeng.maintenance.model.query.XpVehicleRepairPageQuery; @@ -67,7 +68,7 @@ } XpOperationsUser operationsUserEnd = xpOperationUserClient.queryById(xpVehicleRepairVO.getReturnUserId()).getData(); if (Objects.nonNull(operationsUserEnd)) { xpVehicleRepairVO.setOperatorStartName(operationsUserEnd.getNickName()); xpVehicleRepairVO.setOperatorEndName(operationsUserEnd.getNickName()); } return xpVehicleRepairVO; } @@ -222,4 +223,22 @@ xpVehicleClient.updateVehicleById(xpVehicle); } } @Override public void saveReturnRepair(XpVehicleRepairReturnDTO dto, Long id) { XpVehicleRepair xpVehicleRepair = this.getById(dto.getId()); // 查询车辆信息 XpVehicle xpVehicle = xpVehicleClient.queryById(xpVehicleRepair.getVehicleId()).getData(); if(Objects.nonNull(xpVehicle)){ // 修改车辆状态 xpVehicle.setOperatingStatus(1); xpVehicleClient.updateVehicleById(xpVehicle); } xpVehicleRepair.setVehicleId(null); // 修改车辆取回信息 xpVehicleRepair.setRepairMoney(dto.getRepairMoney()); xpVehicleRepair.setRepairMoneyDetail(dto.getRepairMoneyDetail()); xpVehicleRepair.setReturnUserId(id); xpVehicleRepair.setReturnTime(LocalDateTime.now()); } } xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpChargingRecordMapper.xml
@@ -11,6 +11,7 @@ <select id="operationRecords" resultType="com.xiaopeng.maintenance.model.vo.OperationRecordsVO"> SELECT xcr.id, xcr.vehicle_id, xcr.start_remaining_battery,xcr.end_remaining_battery, xcr.start_mileage_range,xcr.end_mileage_range, xcr.start_operations_user_id AS operationsUserId,xcr.start_time AS operationTime FROM xp_charging_record xcr WHERE xcr.is_deleted = 0 xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/constant/I18nKeyConstant.java
@@ -97,4 +97,7 @@ String POINT_NUMBER_LOCK_FAIL = "point.number.lock.fail"; // 点位-编号解析失败 String POINT_NUMBER_PARSE_FAIL = "point.number.parse.fail"; // 点位删除-存在关联巡游点位 String POINT_DELETE_HAS_CRUISE_PLAN_POINT = "point.delete.has.cruise.plan.point"; } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
@@ -4,11 +4,13 @@ import com.xiaopeng.api.dto.operation.PointAddDto; import com.xiaopeng.api.dto.operation.PointUpdateDto; import com.xiaopeng.api.dto.operation.XpPointEnableDisableDto; import com.xiaopeng.api.model.operation.XpCruisePlanPoint; import com.xiaopeng.api.model.operation.XpElectronicFence; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.api.query.operation.PointListQuery; import com.xiaopeng.api.query.operation.PointPageListListQuery; import com.xiaopeng.map.constant.I18nKeyConstant; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.WebUtils; @@ -16,12 +18,14 @@ import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.api.dto.map.XpPointExportExcelQuery; import com.xiaopeng.map.exportExcel.XpPointExportExcel; import com.xiaopeng.map.mapper.XpCruisePlanPointMapper; import com.xiaopeng.map.mangodb.service.XpGeoFencingPolygonService; import com.xiaopeng.map.service.XpElectronicFenceAreaService; import com.xiaopeng.map.service.XpElectronicFenceService; import com.xiaopeng.map.service.XpPointService; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -67,6 +71,8 @@ private XpElectronicFenceService xpElectronicFenceService; @Resource private XpGeoFencingPolygonService xpGeoFencingPolygonService; @Resource private XpCruisePlanPointMapper xpCruisePlanPointMapper; @ApiOperation(value = "获取所有运营中的区域", response = XpElectronicFenceArea.class) @@ -154,9 +160,9 @@ @PostMapping("/add") @ResponseBody @ApiOperation(value = "新增点位") public R<XpPoint> add(@Validated @RequestBody PointAddDto pointAddDto) { if (!xpGeoFencingPolygonService.isInFence(pointAddDto.getPointLon(), pointAddDto.getPointLat(), pointAddDto.getFenceId(), "prohibited_area")) { return R.fail("in_prohibited_area"); public R<?> add(@Validated @RequestBody PointAddDto pointAddDto) { if (xpGeoFencingPolygonService.isInFence(pointAddDto.getPointLon(), pointAddDto.getPointLat(), pointAddDto.getFenceId(), "prohibited_area")) { return R.ok("in_prohibited_area"); } return R.ok(xpPointService.addPointWithGeneratedNumber(pointAddDto)); } @@ -168,7 +174,22 @@ @ResponseBody @ApiOperation(value = "删除点位") public R deletePoint(@RequestParam("ids") String ids) { xpPointService.removeBatchByIds(Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList())); List<Long> pointIds = Arrays.stream(ids.split(",")) .map(String::trim) .filter(s -> !s.isEmpty()) .map(Long::parseLong) .distinct() .collect(Collectors.toList()); if (pointIds.isEmpty()) { return R.ok(); } Long relatedCount = xpCruisePlanPointMapper.selectCount( new LambdaQueryWrapper<XpCruisePlanPoint>().in(XpCruisePlanPoint::getPointId, pointIds) ); if (relatedCount != null && relatedCount > 0) { throw new ServiceException("操作失败,该点位有关联的巡游点位", I18nKeyConstant.POINT_DELETE_HAS_CRUISE_PLAN_POINT); } xpPointService.removeBatchByIds(pointIds); return R.ok(); } @@ -184,14 +205,14 @@ if (!xpPoint.getElectronicAreaId().equals(pointAddDto.getElectronicAreaId())) { BeanUtils.copyProperties(pointAddDto, xpPoint); if (!xpGeoFencingPolygonService.isInFence(pointAddDto.getPointLon(), pointAddDto.getPointLat(), pointAddDto.getFenceId(), "prohibited_area")) { return R.fail("in_prohibited_area"); if (xpGeoFencingPolygonService.isInFence(pointAddDto.getPointLon(), pointAddDto.getPointLat(), pointAddDto.getFenceId(), "prohibited_area")) { return R.ok("in_prohibited_area"); } xpPointService.updateById(xpPoint); } else { if (!xpGeoFencingPolygonService.isInFence(pointAddDto.getPointLon(), pointAddDto.getPointLat(), pointAddDto.getFenceId(), "prohibited_area")) { return R.fail("in_prohibited_area"); if (xpGeoFencingPolygonService.isInFence(pointAddDto.getPointLon(), pointAddDto.getPointLat(), pointAddDto.getFenceId(), "prohibited_area")) { return R.ok("in_prohibited_area"); } //先删除原有的数据,因为会存在点位的从属区域变化的情况,所以先删除原有的数据后添加新的数据重新分片到新的库中 xp-robotaxi-map-boot/src/main/resources/i18n/messages.properties
@@ -39,3 +39,4 @@ point.city.not.exist=城市信息不存在 point.number.lock.fail=点位编号生成繁忙,请稍后重试 point.number.parse.fail=点位编号生成失败(历史编号格式异常) point.delete.has.cruise.plan.point=操作失败,该点位有关联的巡游点位 xp-robotaxi-map-boot/src/main/resources/i18n/messages_en_US.properties
@@ -32,3 +32,4 @@ point.city.not.exist=City information does not exist point.number.lock.fail=Point number generation is busy, please try again later point.number.parse.fail=Point number generation failed (invalid historical number format) point.delete.has.cruise.plan.point=Operation failed. This point is associated with cruise plan points. xp-robotaxi-map-boot/src/main/resources/i18n/messages_zh_CN.properties
@@ -32,3 +32,4 @@ point.city.not.exist=城市信息不存在 point.number.lock.fail=点位编号生成繁忙,请稍后重试 point.number.parse.fail=点位编号生成失败(历史编号格式异常) point.delete.has.cruise.plan.point=操作失败,该点位有关联的巡游点位 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
@@ -81,9 +81,6 @@ @Override public PageInfo<XpElectronicFence> pageList(ElectronicPageListQuery query) { PageInfo<XpElectronicFence> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); if (StringUtils.isEmpty(query.getCreateSort())&& StringUtils.isEmpty(query.getUpdateSort())){ query.setCreateSort("2"); } List<XpElectronicFence> list = this.baseMapper.pageList(pageInfo, query); if (list.isEmpty()) { return new PageInfo<>(); xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/model/vo/FleetVehicleVO.java
@@ -32,6 +32,12 @@ @ApiModelProperty(value = "运营状态") private Integer operatingStatus; @ApiModelProperty(value = "车辆类型 1=在库 2=运营") private Integer vehicleType; @ApiModelProperty(value = "车辆状态 1=待完善 2=待运营 3=保险/年检过期") private Integer status; @ApiModelProperty(value = "运营状态描述") private String operatingStatusDesc; xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpFleetServiceImpl.java
@@ -461,6 +461,8 @@ vo.setVehicleColor(vehicle.getVehicleColor()); vo.setVehicleModel(vehicle.getVehicleModel()); vo.setOperatingStatus(vehicle.getOperatingStatus()); vo.setVehicleType(vehicle.getVehicleType()); vo.setStatus(vehicle.getStatus()); vo.setProcurementSource(vehicle.getProcurementSource()); vo.setElectronicId(vehicle.getElectronicId()); vo.setElectronicName(electronicNameMap.get(vehicle.getElectronicId())); xp-robotaxi-vehicle-convoy-boot/src/main/java/com/xiaopeng/vehicleConvoy/service/impl/XpPolicyApplicationServiceImpl.java
@@ -255,6 +255,7 @@ XpVehicle xpVehicle = xpVehicleMapper.selectById(xpPolicyApplication.getVehicleId()); xpPolicyApplicationVO.setPlateNumber(xpVehicle.getPlateNumber()); xpPolicyApplicationVO.setVehicleCode(xpVehicle.getVehicleCode()); xpPolicyApplicationVO.setAuditRemarks(xpPolicyApplication.getAuditRemarks()); if (xpPolicyApplicationVO.getAuditStatus() == 2) { xpPolicyApplicationVO.setPolicyInformation(xpVehicle.getPolicyInformation()); }