| | |
| | | package com.xiaopeng.order.service.impl; |
| | | |
| | | 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.google.common.collect.Lists; |
| | | import com.xiaopeng.api.dto.automaticPilot.PushOrderDto; |
| | | import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient; |
| | | import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient; |
| | |
| | | import com.xiaopeng.common.core.web.domain.BaseModel; |
| | | import com.xiaopeng.common.core.web.page.PageInfo; |
| | | import com.xiaopeng.order.mapper.XpCruiseOrderMapper; |
| | | import com.xiaopeng.order.model.query.XpCruiseOrderExcelQuery; |
| | | import com.xiaopeng.order.model.query.XpCruiseOrderPageQuery; |
| | | import com.xiaopeng.order.model.vo.XpCruiseOrderPageVO; |
| | | import com.xiaopeng.order.service.IXpCruiseOrderService; |
| | |
| | | * @param vin |
| | | */ |
| | | @Override |
| | | public Long updateCruiseOrder(String vin) { |
| | | LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).eq(XpCruiseOrder::getStatus, 1); |
| | | XpCruiseOrder xpCruiseOrder = this.getOne(wrapper); |
| | | if (xpCruiseOrder != null) { |
| | | xpCruiseOrder.setStatus(2); |
| | | this.update(xpCruiseOrder, wrapper); |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(vin); |
| | | pushOrderDto.setOrderId("XU" + xpCruiseOrder.getId()); |
| | | pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER); |
| | | R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto); |
| | | if(booleanR==null || !booleanR.getData()){ |
| | | log.info("XPU取消巡游订单失败"); |
| | | return null; |
| | | public Long cancelCruiseOrderByVin(String vin) { |
| | | LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).in(XpCruiseOrder::getStatus, Arrays.asList(0, 1)); |
| | | List<XpCruiseOrder> xpCruiseOrder = this.list(wrapper.orderByDesc(XpCruiseOrder::getCreateTime)); |
| | | if (xpCruiseOrder != null && !xpCruiseOrder.isEmpty()) { |
| | | xpCruiseOrder.forEach(s->{ |
| | | s.setStatus(2); |
| | | s.setVehicleId(null); |
| | | }); |
| | | this.updateBatchById(xpCruiseOrder); |
| | | for (XpCruiseOrder cruiseOrder : xpCruiseOrder) { |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(vin); |
| | | pushOrderDto.setOrderId("XU" + cruiseOrder.getId()); |
| | | pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER); |
| | | R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto); |
| | | if(booleanR==null || !booleanR.getData()){ |
| | | log.info("XPU取消巡游订单失败"); |
| | | } |
| | | } |
| | | return xpCruiseOrder.getId(); |
| | | return xpCruiseOrder.get(0).getId(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | @Override |
| | | public R updateCruiseOrderId(Long orderId) { |
| | | public R cancelCruiseOrderById(Long orderId) { |
| | | XpCruiseOrder xpCruiseOrder = this.getById(orderId); |
| | | if (xpCruiseOrder != null) { |
| | | xpCruiseOrder.setStatus(2); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public Long closeCruiseOrder(String vin) { |
| | | LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleVin, vin).eq(XpCruiseOrder::getStatus, 1); |
| | | XpCruiseOrder xpCruiseOrder = this.getOne(wrapper); |
| | | public void completeCruiseOrder(Long id) { |
| | | XpCruiseOrder xpCruiseOrder = this.getById(id); |
| | | if (xpCruiseOrder != null) { |
| | | xpCruiseOrder.setStatus(3); |
| | | this.update(xpCruiseOrder, wrapper); |
| | | return xpCruiseOrder.getId(); |
| | | xpCruiseOrder.setVehicleId(null); |
| | | this.updateById(xpCruiseOrder); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | pageInfo.setRecords(voList); |
| | | return pageInfo; |
| | | } |
| | | |
| | | @Override |
| | | public List<XpCruiseOrderPageVO> getExportList(XpCruiseOrderExcelQuery query) { |
| | | LambdaQueryWrapper<XpCruiseOrder> wrapper = new LambdaQueryWrapper<XpCruiseOrder>() |
| | | .eq(XpCruiseOrder::getMissionId, String.valueOf(query.getMissionId())) |
| | | .like(Objects.nonNull(query.getId()), XpCruiseOrder::getId, query.getId()) |
| | | .eq(query.getStatus() != null, XpCruiseOrder::getStatus, query.getStatus()) |
| | | .eq(Objects.nonNull(query.getFleetId()), XpCruiseOrder::getFleetId, query.getFleetId()); |
| | | |
| | | if (query.getStartTime() != null) { |
| | | wrapper.ge(BaseModel::getCreateTime, query.getStartTime().atStartOfDay()); |
| | | } |
| | | if (query.getEndTime() != null) { |
| | | wrapper.le(BaseModel::getCreateTime, query.getEndTime().plusDays(1).atStartOfDay()); |
| | | } |
| | | //使用订单中的车队ID进行查询 |
| | | // if (query.getFleetId() != null) { |
| | | // R<List<Long>> fleetVehicleResult = xpFleetVehicleClient.listVehicleIdsByFleetId(query.getFleetId()); |
| | | // if (fleetVehicleResult == null || CollectionUtils.isEmpty(fleetVehicleResult.getData())) { |
| | | // pageInfo.setRecords(Collections.emptyList()); |
| | | // return pageInfo; |
| | | // } |
| | | // wrapper.in(XpCruiseOrder::getVehicleId, fleetVehicleResult.getData()); |
| | | // } |
| | | |
| | | if (StringUtils.isNotBlank(query.getPlateNumber())) { |
| | | R<List<XpVehicle>> vehicleResult = xpVehicleClient.listByPlateNumber(query.getPlateNumber()); |
| | | if (vehicleResult == null || CollectionUtils.isEmpty(vehicleResult.getData())) { |
| | | return Collections.emptyList(); |
| | | } |
| | | List<Long> vehicleIds = vehicleResult.getData().stream().map(XpVehicle::getId).collect(Collectors.toList()); |
| | | wrapper.in(XpCruiseOrder::getVehicleId, vehicleIds); |
| | | } |
| | | if (!CollectionUtils.isEmpty(query.getIds())) { |
| | | wrapper.in(XpCruiseOrder::getId, query.getIds()); |
| | | } |
| | | wrapper.orderByDesc(XpCruiseOrder::getCreateTime); |
| | | List<XpCruiseOrder> resultList = this.list(wrapper); |
| | | if (CollectionUtils.isEmpty(resultList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | Set<Long> vehicleIds = resultList.stream() |
| | | .map(XpCruiseOrder::getVehicleId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, XpVehicle> vehicleMap; |
| | | if (!vehicleIds.isEmpty()) { |
| | | R<List<XpVehicle>> vehicleResult = xpVehicleClient.listByIds(new ArrayList<>(vehicleIds)); |
| | | if (vehicleResult != null && !CollectionUtils.isEmpty(vehicleResult.getData())) { |
| | | vehicleMap = vehicleResult.getData().stream().collect(Collectors.toMap(XpVehicle::getId, v -> v)); |
| | | } else { |
| | | vehicleMap = Collections.emptyMap(); |
| | | } |
| | | } else { |
| | | vehicleMap = Collections.emptyMap(); |
| | | } |
| | | // Map<Long, Long> vehicleFleetIdMap = new HashMap<>(); |
| | | // if (!vehicleIds.isEmpty()) { |
| | | // for (Long vehicleId : vehicleIds) { |
| | | // R<Long> fleetIdResult = xpFleetVehicleClient.getFleetIdByVehicleId(vehicleId); |
| | | // if (fleetIdResult != null && fleetIdResult.getData() != null) { |
| | | // vehicleFleetIdMap.put(vehicleId, fleetIdResult.getData()); |
| | | // } |
| | | // } |
| | | // } |
| | | // Map<Long, String> fleetNameMap; |
| | | // if (!vehicleFleetIdMap.isEmpty()) { |
| | | // List<Long> fleetIds = vehicleFleetIdMap.values().stream().distinct().collect(Collectors.toList()); |
| | | // R<List<XpFleet>> fleetResult = xpFleetClient.listByIds(fleetIds); |
| | | // if (fleetResult != null && !CollectionUtils.isEmpty(fleetResult.getData())) { |
| | | // fleetNameMap = fleetResult.getData().stream() |
| | | // .collect(Collectors.toMap(XpFleet::getId, XpFleet::getFleetName, (a, b) -> a)); |
| | | // } else { |
| | | // fleetNameMap = Collections.emptyMap(); |
| | | // } |
| | | // } else { |
| | | // fleetNameMap = Collections.emptyMap(); |
| | | // } |
| | | Map<Long, String> fleetNameMap; |
| | | Set<Long> fleetIds = resultList.stream() |
| | | .map(XpCruiseOrder::getFleetId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | if (!fleetIds.isEmpty()) { |
| | | R<List<XpFleet>> fleetResult = xpFleetClient.listByIds(new ArrayList<>(fleetIds)); |
| | | if (fleetResult != null && !CollectionUtils.isEmpty(fleetResult.getData())) { |
| | | fleetNameMap = fleetResult.getData().stream() |
| | | .collect(Collectors.toMap(XpFleet::getId, XpFleet::getFleetName, (a, b) -> a)); |
| | | } else { |
| | | fleetNameMap = Collections.emptyMap(); |
| | | } |
| | | } else { |
| | | fleetNameMap = Collections.emptyMap(); |
| | | } |
| | | List<XpCruiseOrderPageVO> voList = resultList.stream().map(order -> { |
| | | XpCruiseOrderPageVO vo = new XpCruiseOrderPageVO(); |
| | | BeanUtils.copyProperties(order, vo); |
| | | XpVehicle vehicle = vehicleMap.get(order.getVehicleId()); |
| | | if (vehicle != null) { |
| | | vo.setPlateNumber(vehicle.getPlateNumber()); |
| | | } |
| | | // Long fleetId = vehicleFleetIdMap.get(order.getVehicleId()); |
| | | Long fleetId = order.getFleetId(); |
| | | if (fleetId != null) { |
| | | vo.setFleetName(fleetNameMap.get(fleetId)); |
| | | } |
| | | return vo; |
| | | }).collect(Collectors.toList()); |
| | | return voList; |
| | | } |
| | | |
| | | @Override |
| | | public XpCruiseOrderPageVO getDetailById(Long id) { |
| | | XpCruiseOrder cruiseOrder = getById(id); |
| | | XpCruiseOrderPageVO xpCruiseOrderPageVO = BeanUtil.copyProperties(cruiseOrder, XpCruiseOrderPageVO.class); |
| | | if (Objects.isNull(xpCruiseOrderPageVO)) { |
| | | return new XpCruiseOrderPageVO(); |
| | | } |
| | | XpVehicle vehicle = xpVehicleClient.queryById(cruiseOrder.getVehicleId()).getData(); |
| | | if (Objects.nonNull(vehicle)) { |
| | | xpCruiseOrderPageVO.setPlateNumber(vehicle.getPlateNumber()); |
| | | } |
| | | List<XpFleet> data = xpFleetClient.listByIds(Lists.newArrayList(cruiseOrder.getFleetId())).getData(); |
| | | if (CollUtil.isNotEmpty(data)) { |
| | | XpFleet xpFleet = data.get(0); |
| | | xpCruiseOrderPageVO.setFleetName(xpFleet.getFleetName()); |
| | | } |
| | | return xpCruiseOrderPageVO; |
| | | } |
| | | } |