| | |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.Wrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | |
| | | import com.xiaopeng.api.vo.vehicleConvoy.*; |
| | | import com.xiaopeng.common.core.constant.CacheConstants; |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.enums.PushMessageTypeEnum; |
| | | import com.xiaopeng.common.core.exception.ServiceException; |
| | | import com.xiaopeng.common.core.exception.base.BaseException; |
| | | import com.xiaopeng.common.core.utils.GeodesyUtil; |
| | | import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil; |
| | | import com.xiaopeng.common.core.web.page.PageInfo; |
| | | import com.xiaopeng.common.redis.service.RedisService; |
| | | import com.xiaopeng.evi.oss.service.AliOssService; |
| | |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.Serializable; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDate; |
| | |
| | | return new ArrayList<>(); |
| | | } |
| | | //查询车型和 车队信息 |
| | | return super.listByIds(ids); |
| | | List<XpVehicle> list = super.listByIds(ids); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | |
| | | query.setPlateNumber(plateNumber); |
| | | |
| | | List<XpVehicleVO> list = baseMapper.findList(query); |
| | | decryptVehicleVos(list); |
| | | //获取车的位置 和订单的位置 并计算 距离 和 时间 |
| | | if(!list.isEmpty()){ |
| | | for (XpVehicle xpVehicle : list) { |
| | |
| | | query.setElectronicIdList(Arrays.asList(query.getElectronicId().split(","))); |
| | | } |
| | | List<XpVehicleVO> list = this.baseMapper.pageList(pageInfo, query); |
| | | decryptVehicleVos(list); |
| | | if (CollectionUtils.isEmpty(list)) { |
| | | return pageInfo; |
| | | } |
| | |
| | | return Collections.emptyList(); |
| | | } |
| | | |
| | | return lambdaQuery().like(XpVehicle::getPlateNumber, plateNumber).list(); |
| | | List<XpVehicle> list = lambdaQuery().like(XpVehicle::getPlateNumber, plateNumber).list(); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (fenceId == null) { |
| | | return Collections.emptyList(); |
| | | } |
| | | return lambdaQuery().eq(XpVehicle::getElectronicId, fenceId).eq(XpVehicle::getOperatingStatus, 1).eq(XpVehicle::getState, 0).list(); |
| | | List<XpVehicle> list = lambdaQuery().eq(XpVehicle::getElectronicId, fenceId).eq(XpVehicle::getOperatingStatus, 1).eq(XpVehicle::getState, 0).list(); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (fenceId == null) { |
| | | return Collections.emptyList(); |
| | | } |
| | | return lambdaQuery().eq(XpVehicle::getElectronicId, fenceId).list(); |
| | | List<XpVehicle> list = lambdaQuery().eq(XpVehicle::getElectronicId, fenceId).list(); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | |
| | | .ne(excludeId != null, XpVehicle::getId, excludeId) |
| | | .and(w -> w.eq(XpVehicle::getVehicleCode, vehicleCode) |
| | | .or() |
| | | .eq(XpVehicle::getVehicleVin, vehicleVin) |
| | | .in(XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(vehicleVin)) |
| | | .or() |
| | | .eq(XpVehicle::getPlateNumber, plateNumber)) |
| | | .last("limit 3") |
| | |
| | | throw new ServiceException("车辆编码已存在", I18nKeyConstant.VEHICLE_CODE_EXISTS, new Object[]{vehicleCode}); |
| | | } |
| | | |
| | | boolean vehicleVinExists = duplicates.stream().anyMatch(v -> vehicleVin.equals(v.getVehicleVin())); |
| | | boolean vehicleVinExists = duplicates.stream().anyMatch(v -> vehicleVin.equals(SensitiveDataCryptoUtil.decryptIfPossible(v.getVehicleVin()))); |
| | | if (vehicleVinExists) { |
| | | throw new ServiceException("车辆VIN码已存在", I18nKeyConstant.VEHICLE_VIN_EXISTS, new Object[]{vehicleVin}); |
| | | } |
| | |
| | | |
| | | @Override |
| | | public PageInfo<XpVehicle> vehiclePageList(VehiclePageQuery query) { |
| | | query.setVehicleVinQueryValues(SensitiveDataCryptoUtil.queryValues(query.getVehicleVin())); |
| | | PageInfo<XpVehicle> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); |
| | | List<XpVehicle> list = this.baseMapper.vehiclePageList(pageInfo, query); |
| | | decryptVehicles(list); |
| | | //查询运营区域名称 |
| | | List<Long> electronicIds = list.stream() |
| | | .map(XpVehicle::getElectronicId) |
| | |
| | | |
| | | @Override |
| | | public List<XpVehicle> vehicleExportList(VehicleExportQuery query) { |
| | | return this.baseMapper.vehicleExportList(query); |
| | | query.setVehicleVinQueryValues(SensitiveDataCryptoUtil.queryValues(query.getVehicleVin())); |
| | | List<XpVehicle> list = this.baseMapper.vehicleExportList(query); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | |
| | | LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(XpVehicle::getVehicleType, 2) |
| | | .like(StringUtils.isNotBlank(query.getVehicleCode()), XpVehicle::getVehicleCode, query.getVehicleCode()) |
| | | .like(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, query.getVehicleVin()) |
| | | .in(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(query.getVehicleVin())) |
| | | .like(StringUtils.isNotBlank(query.getPlateNumber()), XpVehicle::getPlateNumber, query.getPlateNumber()) |
| | | .eq(Objects.nonNull(query.getOperatingStatus()), XpVehicle::getOperatingStatus, query.getOperatingStatus()) |
| | | .eq(Objects.nonNull(query.getElectronicId()), XpVehicle::getElectronicId, query.getElectronicId()); |
| | |
| | | wrapper.orderByDesc(XpVehicle::getCreateTime); |
| | | //3.执行分页查询 |
| | | PageInfo<XpVehicle> page = this.page(pageInfo, wrapper); |
| | | decryptVehicles(page.getRecords()); |
| | | |
| | | //4.批量查询围栏名称并填充 |
| | | Set<Long> electronicIdSet = page.getRecords().stream().map(XpVehicle::getElectronicId).collect(Collectors.toSet()); |
| | |
| | | LambdaQueryWrapper<XpVehicle> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(XpVehicle::getVehicleType, 2) |
| | | .like(StringUtils.isNotBlank(query.getVehicleCode()), XpVehicle::getVehicleCode, query.getVehicleCode()) |
| | | .like(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, query.getVehicleVin()) |
| | | .in(StringUtils.isNotBlank(query.getVehicleVin()), XpVehicle::getVehicleVin, SensitiveDataCryptoUtil.queryValues(query.getVehicleVin())) |
| | | .like(StringUtils.isNotBlank(query.getPlateNumber()), XpVehicle::getPlateNumber, query.getPlateNumber()) |
| | | .eq(Objects.nonNull(query.getOperatingStatus()), XpVehicle::getOperatingStatus, query.getOperatingStatus()) |
| | | .eq(Objects.nonNull(query.getElectronicId()), XpVehicle::getElectronicId, query.getOperatingStatus()) |
| | |
| | | wrapper.orderByDesc(XpVehicle::getCreateTime); |
| | | //2.执行查询 |
| | | List<XpVehicle> list = this.list(wrapper); |
| | | decryptVehicles(list); |
| | | |
| | | //3.批量查询围栏名称并填充 |
| | | Set<Long> electronicIdSet = list.stream().map(XpVehicle::getElectronicId).collect(Collectors.toSet()); |
| | |
| | | PageInfo<XpVehicle> page = this.page(pageInfo, new QueryWrapper<XpVehicle>().eq("vehicle_type", 2) |
| | | .eq("status", 2).eq("operating_status", 1) |
| | | .eq("is_deleted", 0).like(StringUtils.isNotBlank(dto.getPlateNumber()), "plate_number", dto.getPlateNumber()) |
| | | .like(StringUtils.isNotBlank(dto.getVin()), "vehicle_vin", dto.getVin()) |
| | | .in(StringUtils.isNotBlank(dto.getVin()), "vehicle_vin", SensitiveDataCryptoUtil.queryValues(dto.getVin())) |
| | | .last(" order by create_time desc")); |
| | | decryptVehicles(page.getRecords()); |
| | | return page.getRecords(); |
| | | } |
| | | |
| | |
| | | } |
| | | log.info("同步查询车辆空调状态成功,开始等到查询回调结果"); |
| | | try { |
| | | Thread.sleep(2000); |
| | | Thread.sleep(5000); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | |
| | | } |
| | | log.info("同步查询车辆空调状态成功,开始等到查询回调结果"); |
| | | try { |
| | | Thread.sleep(2000); |
| | | Thread.sleep(5000); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | |
| | | if(null == dto.getLatitude() || null == dto.getLongitude()){ |
| | | throw new ServiceException("无效数据"); |
| | | } |
| | | XpVehicle vehicle = this.getOne(new QueryWrapper<XpVehicle>().eq("vehicle_vin", dto.getVin()).eq("is_deleted", 0)); |
| | | XpVehicle vehicle = this.getOne(new QueryWrapper<XpVehicle>().in("vehicle_vin", SensitiveDataCryptoUtil.queryValues(dto.getVin())).eq("is_deleted", 0)); |
| | | if(null == vehicle){ |
| | | throw new ServiceException("无效数据"); |
| | | } |
| | |
| | | //调用推送服务接口,给乘客推送剩余轨迹和里程时长 |
| | | if (null != orderId) { |
| | | PushOrderRouteDTO dto1 = new PushOrderRouteDTO(); |
| | | dto1.setMessageType(PushMessageTypeEnum.ORDER_ROUTE.getDesc()); |
| | | dto1.setOrderId(orderId); |
| | | dto1.setRouteType(1); |
| | | dto1.setLongitude(longitude); |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public XpVehicle getById(Serializable id) { |
| | | XpVehicle vehicle = super.getById(id); |
| | | decryptVehicle(vehicle); |
| | | return vehicle; |
| | | } |
| | | |
| | | @Override |
| | | public boolean save(XpVehicle entity) { |
| | | encryptVehicle(entity); |
| | | try { |
| | | return super.save(entity); |
| | | } finally { |
| | | decryptVehicle(entity); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean saveBatch(Collection<XpVehicle> entityList) { |
| | | if (entityList != null) { |
| | | entityList.forEach(this::encryptVehicle); |
| | | } |
| | | try { |
| | | return super.saveBatch(entityList); |
| | | } finally { |
| | | decryptVehicles(entityList); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean updateById(XpVehicle entity) { |
| | | encryptVehicle(entity); |
| | | try { |
| | | return super.updateById(entity); |
| | | } finally { |
| | | decryptVehicle(entity); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public List<XpVehicle> list() { |
| | | List<XpVehicle> list = super.list(); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public List<XpVehicle> list(Wrapper<XpVehicle> queryWrapper) { |
| | | List<XpVehicle> list = super.list(queryWrapper); |
| | | decryptVehicles(list); |
| | | return list; |
| | | } |
| | | |
| | | @Override |
| | | public XpVehicle getOne(Wrapper<XpVehicle> queryWrapper) { |
| | | XpVehicle vehicle = super.getOne(queryWrapper); |
| | | decryptVehicle(vehicle); |
| | | return vehicle; |
| | | } |
| | | |
| | | private void encryptVehicle(XpVehicle vehicle) { |
| | | if (vehicle != null) { |
| | | vehicle.setVehicleVin(SensitiveDataCryptoUtil.encrypt(vehicle.getVehicleVin())); |
| | | } |
| | | } |
| | | |
| | | private void decryptVehicle(XpVehicle vehicle) { |
| | | if (vehicle != null) { |
| | | vehicle.setVehicleVin(SensitiveDataCryptoUtil.decryptIfPossible(vehicle.getVehicleVin())); |
| | | } |
| | | } |
| | | |
| | | private void decryptVehicles(Collection<? extends XpVehicle> vehicles) { |
| | | if (vehicles != null) { |
| | | vehicles.forEach(this::decryptVehicle); |
| | | } |
| | | } |
| | | |
| | | private void decryptVehicleVos(Collection<XpVehicleVO> vehicles) { |
| | | if (vehicles != null) { |
| | | vehicles.forEach(this::decryptVehicle); |
| | | } |
| | | } |
| | | } |