xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpVehicleRepair.java
@@ -43,11 +43,11 @@ private Long vehicleId; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy年MM月dd日", timezone = "GMT+8") private LocalDate startTime; @ApiModelProperty(value = "结束时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy年MM月dd日", timezone = "GMT+8") private LocalDate endTime; @ApiModelProperty(value = "维修原因") @@ -66,14 +66,14 @@ private Long sendUserId; @ApiModelProperty(value = "送修时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy年MM月dd日 HH:mm:ss", timezone = "GMT+8") private LocalDateTime sendTime; @ApiModelProperty(value = "取回人") private Long returnUserId; @ApiModelProperty(value = "取回时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy年MM月dd日 HH:mm:ss", timezone = "GMT+8") private LocalDateTime returnTime; xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleRepairController.java
@@ -14,6 +14,7 @@ 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.XpVehicleRepairMgtVO; import com.xiaopeng.maintenance.model.vo.XpVehicleRepairVO; import com.xiaopeng.maintenance.schedule.InsuranceInspectionScheduleTask; import com.xiaopeng.maintenance.service.IXpVehicleRepairService; @@ -141,10 +142,10 @@ */ @ApiOperation(value = "通过车辆id查询维修分页列表", tags = {"管理后台-车辆管理-运营车辆管理"}) @PostMapping("/api/v1/vehicle/queryRepairByVehicleId") public R<PageInfo<XpVehicleRepairVO>> queryRepairByVehicleId(@Valid @RequestBody XpVehicleRepairPageQuery query) throws UnsupportedEncodingException { PageInfo<XpVehicleRepairVO> pageInfo = xpVehicleRepairService.queryDetectionByVehicleId(query); public R<PageInfo<XpVehicleRepairMgtVO>> queryRepairByVehicleId(@Valid @RequestBody XpVehicleRepairPageQuery query) throws UnsupportedEncodingException { PageInfo<XpVehicleRepairMgtVO> pageInfo = xpVehicleRepairService.queryDetectionByVehicleId(query); for (XpVehicleRepairVO record : pageInfo.getRecords()) { for (XpVehicleRepairMgtVO record : pageInfo.getRecords()) { String vehiclePictures = record.getVehiclePictures(); if (StringUtils.isNotBlank(vehiclePictures)) { JSONObject jsonObject = JSONObject.parseObject(vehiclePictures); xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/XpVehicleRepairMgtVO.java
New file @@ -0,0 +1,84 @@ package com.xiaopeng.maintenance.model.vo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.fasterxml.jackson.annotation.JsonFormat; import com.xiaopeng.api.model.maintenance.XpVehicleRepair; import com.xiaopeng.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.time.LocalDate; import java.time.LocalDateTime; @Data @ApiModel(value = "管理后台-车辆维修返回VO") public class XpVehicleRepairMgtVO extends BaseModel { @ApiModelProperty(value = "ID") private Long id; @ApiModelProperty(value = "任务id") private Long taskId; @ApiModelProperty(value = "车辆id") private Long vehicleId; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDate startTime; @ApiModelProperty(value = "结束时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDate endTime; @ApiModelProperty(value = "维修原因") private String repairReason; @ApiModelProperty(value = "维修前图片") private String startRepairPicture; @ApiModelProperty(value = "维修费用") private Double repairMoney; @ApiModelProperty(value = "维修费用明细") private String repairMoneyDetail; @ApiModelProperty(value = "送修人") private Long sendUserId; @ApiModelProperty(value = "送修时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime sendTime; @ApiModelProperty(value = "取回人") private Long returnUserId; @ApiModelProperty(value = "取回时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime returnTime; @ApiModelProperty(value = "车牌号") private String plateNumber; @ApiModelProperty(value = "车辆图片") private String vehiclePictures; @ApiModelProperty(value = "当前模式 1接单 2测试") private Integer acceptOrTest; @ApiModelProperty(value = "车辆颜色") private String vehicleColor; @ApiModelProperty(value = "开始操作人") private String operatorStartName; @ApiModelProperty(value = "结束操作人") private String operatorEndName; @ApiModelProperty(value = "操作时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime operationTime; } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/model/vo/XpVehicleRepairVO.java
@@ -31,7 +31,7 @@ private String operatorEndName; @ApiModelProperty(value = "操作时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @JsonFormat(pattern = "yyyy年MM月dd日 HH:mm:ss", timezone = "GMT+8") private LocalDateTime operationTime; } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpVehicleRepairService.java
@@ -6,6 +6,7 @@ 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.XpVehicleRepairMgtVO; import com.xiaopeng.maintenance.model.vo.XpVehicleRepairVO; import com.xiaopeng.maintenance.vo.RepairStatusVO; @@ -34,7 +35,7 @@ * * @return */ PageInfo<XpVehicleRepairVO> queryDetectionByVehicleId(@Valid XpVehicleRepairPageQuery query); PageInfo<XpVehicleRepairMgtVO> queryDetectionByVehicleId(@Valid XpVehicleRepairPageQuery query); /** * 获取车辆维修状态 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpVehicleRepairServiceImpl.java
@@ -19,6 +19,7 @@ import com.xiaopeng.maintenance.dto.XpVehicleRepairStartDTO; import com.xiaopeng.maintenance.mapper.XpVehicleRepairMapper; import com.xiaopeng.maintenance.model.query.XpVehicleRepairPageQuery; import com.xiaopeng.maintenance.model.vo.XpVehicleRepairMgtVO; import com.xiaopeng.maintenance.model.vo.XpVehicleRepairVO; import com.xiaopeng.maintenance.service.IXpVehicleRepairService; import com.xiaopeng.maintenance.vo.ChargingStatusVO; @@ -81,7 +82,7 @@ } @Override public PageInfo<XpVehicleRepairVO> queryDetectionByVehicleId(XpVehicleRepairPageQuery query) { public PageInfo<XpVehicleRepairMgtVO> queryDetectionByVehicleId(XpVehicleRepairPageQuery query) { // 1. 如果有操作人姓名过滤条件,先查询符合条件的用户ID列表 List<Long> userIds = null; if (StringUtils.isNotBlank(query.getSendUserName())) { @@ -131,7 +132,7 @@ Page<XpVehicleRepair> resultPage = this.page(page, wrapper); // 4. 转换为 VO 并填充操作人姓名 List<XpVehicleRepairVO> records = new ArrayList<>(); List<XpVehicleRepairMgtVO> records = new ArrayList<>(); if (!CollectionUtils.isEmpty(resultPage.getRecords())) { // 提取所有操作人ID List<Long> allUserIds = resultPage.getRecords().stream() @@ -155,7 +156,7 @@ // 转换并填充数据 for (XpVehicleRepair chargingRecord : resultPage.getRecords()) { XpVehicleRepairVO vo = new XpVehicleRepairVO(); XpVehicleRepairMgtVO vo = new XpVehicleRepairMgtVO(); BeanUtils.copyProperties(chargingRecord, vo); vo.setOperationTime(chargingRecord.getCreateTime()); @@ -168,9 +169,6 @@ String userName = userNameMap.get(chargingRecord.getReturnUserId()); vo.setOperatorEndName(userName); } String RepairMoneyDetail = vo.getRepairMoneyDetail(); if (StringUtils.isNotBlank(RepairMoneyDetail)) { @@ -213,16 +211,12 @@ } vo.setStartRepairPicture(JSONArray.toJSONString(jsonArray)); } records.add(vo); } } // 5. 构建分页结果 PageInfo<XpVehicleRepairVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); PageInfo<XpVehicleRepairMgtVO> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); pageInfo.setRecords(records); pageInfo.setTotal(resultPage.getTotal()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpCruiseOrderController.java
@@ -1,6 +1,8 @@ package com.xiaopeng.order.controller; import cn.hutool.core.util.IdUtil; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.xiaopeng.api.dto.automaticPilot.PushOrderDto; import com.xiaopeng.api.dto.order.AddCruiseMissionDto; @@ -8,22 +10,29 @@ import com.xiaopeng.api.model.order.XpCruiseOrder; import com.xiaopeng.api.vo.OrderType; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.WebUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.order.model.exportExcel.XpCruiseOrderExportExcel; import com.xiaopeng.order.model.exportExcel.XpOrderExportExcel; import com.xiaopeng.order.model.query.XpCruiseOrderExcelQuery; import com.xiaopeng.order.model.vo.XpOrderPageVO; import com.xiaopeng.order.service.IXpCruiseOrderService; import com.xiaopeng.order.model.query.XpCruiseOrderPageQuery; import com.xiaopeng.order.model.vo.XpCruiseOrderPageVO; import com.xiaopeng.order.service.IXpOrderService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.context.annotation.Lazy; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; import java.util.Arrays; import java.util.List; /** * <p> @@ -46,6 +55,7 @@ /** * 根据车辆VIN码取消订单 * 发送取消订单XPU报文 * * @param */ @PostMapping("/inner/cruiseOrder/cancelCruiseOrderByVin") @@ -53,6 +63,7 @@ Long id = xpCruiseOrderService.cancelCruiseOrderByVin(vin); return R.ok(id); } /** * 完成订单 * @@ -67,22 +78,24 @@ /** * 根据订单ID查询取消订单 * * @param orderId * @return */ @PostMapping("/inner/cruiseOrder/cancelCruiseOrderById") public R<?> cancelCruiseOrderById(@RequestParam Long orderId){ public R<?> cancelCruiseOrderById(@RequestParam Long orderId) { return xpCruiseOrderService.cancelCruiseOrderById(orderId); } /** * 查询订单信息 * * @param orderId * @return */ @PostMapping("/inner/cruiseOrder/getCruiseOrder") public R<XpCruiseOrder> getCruiseOrder(@RequestParam Long orderId){ public R<XpCruiseOrder> getCruiseOrder(@RequestParam Long orderId) { return R.ok(xpCruiseOrderService.getById(orderId)); } @@ -132,26 +145,86 @@ /** * 添加巡游任务 下发命令 * * @param * @param */ @PostMapping("/inner/cruiseOrder/addCruiseMission") public R<?> addCruiseMission(@RequestBody AddCruiseMissionDto dto){ xpOrderService.addCruiseMission(dto.getVehicle(),dto.getOrder()); public R<?> addCruiseMission(@RequestBody AddCruiseMissionDto dto) { xpOrderService.addCruiseMission(dto.getVehicle(), dto.getOrder()); return R.ok(); } /** * 终止所有没结束或者终止的订单 * * @param vin * @return */ @PostMapping("/inner/cruiseOrder/stopAllCruiseOrder") public R<?> stopAllCruiseOrder(@RequestParam String vin){ public R<?> stopAllCruiseOrder(@RequestParam String vin) { xpCruiseOrderService.update(new UpdateWrapper<XpCruiseOrder>().eq("vehicleVin", vin) .in("status", Arrays.asList(0, 1)).set("status", 2)); return R.ok(); } /** * 巡游订单导出 * * @param query 查询参数 */ @ApiOperation(value = "巡游订单导出", tags = {"管理后台-巡游订单"}) @PostMapping("/api/v1/cruiseOrder/exportExcel") public void exportExcel(@RequestBody XpCruiseOrderExcelQuery query) { // 1. 查询导出数据 List<XpCruiseOrderPageVO> dataList = xpCruiseOrderService.getExportList(query); // 2. 转换为导出对象 List<XpCruiseOrderExportExcel> exportList = BeanUtil.copyToList(dataList, XpCruiseOrderExportExcel.class); // 3. 生成 Excel Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpCruiseOrderExportExcel.class, exportList); // 4. 输出到响应流 HttpServletResponse response = WebUtils.response(); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); ServletOutputStream outputStream = null; try { String fileName = URLEncoder.encode("巡游订单订单列表.xls", "utf-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName); outputStream = response.getOutputStream(); workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } finally { try { if (outputStream != null) { outputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } /** * 删除巡游订单 * @param id * @return */ @ApiOperation(value = "删除巡游订单", tags = {"管理后台-巡游订单"}) @DeleteMapping(value = "/api/v1/cruise-order/deleteById/{id}") public R<?> deleteById(@PathVariable Long id){ xpCruiseOrderService.removeById(id); return R.ok(); } @ApiOperation(value = "巡游订单详情", tags = {"管理后台-巡游订单"}) @GetMapping(value = "/api/v1/cruise-order/getDetailById/{id}") public R<XpCruiseOrder> getDetailById(@PathVariable Long id){ XpCruiseOrder xpCruiseOrder = xpCruiseOrderService.getById(id); return R.ok(xpCruiseOrder); } } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/exportExcel/XpCruiseOrderExportExcel.java
New file @@ -0,0 +1,42 @@ package com.xiaopeng.order.model.exportExcel; import cn.afterturn.easypoi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; import java.time.LocalDateTime; /** * 巡游订单导出Excel * * @author mitao */ @Data public class XpCruiseOrderExportExcel { @Excel(name = "订单编号", width = 25) private Long id; @Excel(name = "下单时间", width = 20, exportFormat = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @Excel(name = "订单来源", width = 15, replace = {"小鹏小程序_1"}) private String orderSource; @Excel(name = "起点", width = 30) private String startAddress; @Excel(name = "终点", width = 30) private String endAddress; @Excel(name = "接单车辆", width = 15) private String plateNumber; @Excel(name = "归属车队", width = 15) private String fleetName; @Excel(name = "状态", width = 12, replace = {"进行中_1", "已停止_2", "已完成_3"}) private Integer status; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/query/XpCruiseOrderExcelQuery.java
New file @@ -0,0 +1,49 @@ package com.xiaopeng.order.model.query; import com.fasterxml.jackson.annotation.JsonFormat; import com.xiaopeng.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.NotNull; import java.time.LocalDate; import java.util.List; /** * 巡游订单分页查询请求 * * @author mitao */ @Data @ApiModel(value = "巡游订单导出查询请求", description = "巡游订单导出查询请求") public class XpCruiseOrderExcelQuery { @ApiModelProperty(value = "巡游计划ID", required = true) @NotNull(message = "巡游计划ID不能为空") private Long missionId; @ApiModelProperty(value = "订单ID") private Long id; @ApiModelProperty(value = "车牌号") private String plateNumber; @ApiModelProperty(value = "车队ID") private Long fleetId; @ApiModelProperty(value = "状态 1进行中 2已停止 3 已完成") private Integer status; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDate startTime; @ApiModelProperty(value = "结束时间") @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") private LocalDate endTime; @ApiModelProperty(value = "巡游订单ID列表") private List<Long> ids; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderDetailVO.java
@@ -176,6 +176,9 @@ @ApiModelProperty(value = "优惠券抵扣金额") private BigDecimal couponMoney; @ApiModelProperty(value = "里程公里") private Double mileageKilometers; // ========== 评价信息 ========== @ApiModelProperty(value = "订单评分 1-5分") private Integer orderRating; xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpCruiseOrderService.java
@@ -1,30 +1,12 @@ package com.xiaopeng.order.service; import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.api.dto.order.GetOrderNumDto; import com.xiaopeng.api.dto.order.PopOrderDto; import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; import com.xiaopeng.api.model.order.XpCruiseOrder; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.order.FareBreakdownVo; import com.xiaopeng.api.vo.order.XpHistoryEndPointsVo; import com.xiaopeng.api.vo.order.XpHistoryStartPointsVo; import com.xiaopeng.api.vo.order.XpPointInfoVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.order.mangodb.model.OrderTrajectory; import com.xiaopeng.order.model.dto.XpOrderCommentDto; import com.xiaopeng.order.model.dto.XpOrderPayDto; import com.xiaopeng.order.model.query.XpHistoryOrderListQuery; import com.xiaopeng.order.model.query.XpOrderPageQuery; 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.model.vo.XpOrderDetailVO; import com.xiaopeng.order.model.vo.XpOrderHistoryVO; import com.xiaopeng.order.model.vo.XpOrderPageVO; import com.xiaopeng.order.vo.OrderDetailVo; import java.util.List; @@ -55,5 +37,11 @@ */ PageInfo<XpCruiseOrderPageVO> pageList(XpCruiseOrderPageQuery query); /** * 巡游订单导出列表 * @param query * @return */ List<XpCruiseOrderPageVO> getExportList(XpCruiseOrderExcelQuery query); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpCruiseOrderServiceImpl.java
@@ -17,6 +17,7 @@ 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; @@ -224,4 +225,114 @@ 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; } }