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.api.feignClient.vehicleConvoy.XpFleetVehicleClient;
|
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
|
import com.xiaopeng.api.model.order.XpCruiseOrder;
|
import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
|
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
|
import com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType;
|
import com.xiaopeng.common.core.domain.R;
|
import com.xiaopeng.common.core.utils.StringUtils;
|
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;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.stereotype.Service;
|
import org.springframework.util.CollectionUtils;
|
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 订单 服务实现类
|
* </p>
|
*
|
* @author mitao
|
* @since 2026-02-03
|
*/
|
@Slf4j
|
@Service
|
@RequiredArgsConstructor(onConstructor_ = @Lazy)
|
public class XpCruiseOrderServiceImpl extends ServiceImpl<XpCruiseOrderMapper, XpCruiseOrder> implements IXpCruiseOrderService {
|
|
private final XpVehicleClient xpVehicleClient;
|
private final XpFleetVehicleClient xpFleetVehicleClient;
|
private final XpFleetClient xpFleetClient;
|
private final OrderMissionClient orderMissionClient;
|
/**
|
* 关闭当前巡游单子
|
* @param vin
|
*/
|
@Override
|
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.get(0).getId();
|
}
|
return null;
|
}
|
|
|
@Override
|
public R cancelCruiseOrderById(Long orderId) {
|
XpCruiseOrder xpCruiseOrder = this.getById(orderId);
|
if (xpCruiseOrder != null) {
|
xpCruiseOrder.setStatus(2);
|
xpCruiseOrder.setVehicleId(null);
|
this.updateById(xpCruiseOrder);
|
PushOrderDto pushOrderDto = new PushOrderDto();
|
pushOrderDto.setVin(xpCruiseOrder.getVehicleVin());
|
pushOrderDto.setOrderId("XU" + xpCruiseOrder.getId());
|
pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER);
|
R<Boolean> booleanR = orderMissionClient.cancelOrder(pushOrderDto);
|
if(booleanR==null || !booleanR.getData()){
|
log.error("XPU取消巡游订单失败");
|
return R.fail("XPU取消巡游订单失败");
|
}
|
return R.ok();
|
}
|
return R.fail("获取订单失败");
|
}
|
|
@Override
|
public void completeCruiseOrder(Long id) {
|
XpCruiseOrder xpCruiseOrder = this.getById(id);
|
if (xpCruiseOrder != null) {
|
xpCruiseOrder.setStatus(3);
|
xpCruiseOrder.setVehicleId(null);
|
this.updateById(xpCruiseOrder);
|
}
|
}
|
|
|
|
@Override
|
public PageInfo<XpCruiseOrderPageVO> pageList(XpCruiseOrderPageQuery query) {
|
PageInfo<XpCruiseOrderPageVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize());
|
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())) {
|
pageInfo.setRecords(Collections.emptyList());
|
return pageInfo;
|
}
|
List<Long> vehicleIds = vehicleResult.getData().stream().map(XpVehicle::getId).collect(Collectors.toList());
|
wrapper.in(XpCruiseOrder::getVehicleId, vehicleIds);
|
}
|
|
wrapper.orderByDesc(XpCruiseOrder::getCreateTime);
|
Page<XpCruiseOrder> page = new Page<>(query.getPageNum(), query.getPageSize());
|
Page<XpCruiseOrder> pageResult = this.page(page, wrapper);
|
if (CollectionUtils.isEmpty(pageResult.getRecords())) {
|
pageInfo.setTotal(0L);
|
pageInfo.setRecords(Collections.emptyList());
|
return pageInfo;
|
}
|
Set<Long> vehicleIds = pageResult.getRecords().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 = pageResult.getRecords().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 = pageResult.getRecords().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());
|
pageInfo.setTotal(pageResult.getTotal());
|
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;
|
}
|
}
|