xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpSchedulingDetailServiceImpl.java
@@ -35,6 +35,7 @@ import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.util.CellRangeAddress; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -565,85 +566,80 @@ public void exportExcel(String month, HttpServletResponse response) { PageInfo<SchedulingDetailDto> pageInfo = new PageInfo<>(0, 10000); List<SchedulingDetailDto> schedulingDetailDtos = this.baseMapper.pageList(pageInfo, month); List<ExportSchedulingDetailDto> exportSchedulingDetailDtos = new ArrayList<>(); HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // for (int i = 0; i < titles.size(); i++) { // HSSFSheet hssfSheet = hssfWorkbook.createSheet(); // hssfSheet.setColumnWidth(0, 6 * 256); // hssfSheet.setDefaultRowHeightInPoints(20f); // // HSSFRow hssfRow = hssfSheet.createRow(0);//设置第一行数据(标题) // HSSFCellStyle style = hssfWorkbook.createCellStyle(); // HSSFFont font = hssfWorkbook.createFont(); // font.setBold(true); // style.setFont(font); // style.setAlignment(HorizontalAlignment.CENTER); // for (int l = 0; l < titles.get(i).size(); l++) { // HSSFCell hssfCell = hssfRow.createCell(l); // hssfCell.setCellType(CellType.STRING);//设置表格类型 // hssfCell.setCellValue(titles.get(i).get(l)); // hssfCell.setCellStyle(style); // hssfSheet.setColumnWidth(l, 20 * 256); // } // // //将数据添加到表格中 // List<String> data = null; // for (int l = 0; l < datas.get(i).size(); l++) { // hssfRow = hssfSheet.createRow(l + 1); // data = datas.get(i).get(l); // for (int j = 0; j < data.size(); j++) { // HSSFCell hssfCell = hssfRow.createCell(j); // hssfCell.setCellType(CellType.STRING);//设置表格类型 // hssfCell.setCellValue(data.get(j)); // } // } // } //获取月份的最大天数 int m = Integer.parseInt(month.split("-")[1]); LocalDate parse1 = LocalDate.parse(month + "-01", DateTimeFormatter.ofPattern("yyyy-MM-dd")); int dayOfMonth = parse1.with(TemporalAdjusters.lastDayOfMonth()).getDayOfMonth(); //构建表头第二行数据 ExportSchedulingDetailDto exportSchedulingDetailDto = new ExportSchedulingDetailDto(); exportSchedulingDetailDto.setFleetName(""); for (int i = 1; i <= dayOfMonth; i++) { LocalDate parse = LocalDate.parse(month + "-" + String.format("%02d", i), DateTimeFormatter.ofPattern("yyyy-MM-dd")); String week = ""; switch (parse.getDayOfWeek()) { case MONDAY: week = "一"; break; case TUESDAY: week = "二"; break; case WEDNESDAY: week = "三"; break; case THURSDAY: week = "四"; break; case FRIDAY: week = "五"; break; case SATURDAY: week = "六"; break; case SUNDAY: week = "日"; break; } setEnglishDay(i, exportSchedulingDetailDto, week); } exportSchedulingDetailDto.setAllDay("全天"); exportSchedulingDetailDto.setMorning("早"); exportSchedulingDetailDto.setMidDay("中"); exportSchedulingDetailDto.setEvening("晚"); exportSchedulingDetailDtos.add(exportSchedulingDetailDto); HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); HSSFSheet hssfSheet = hssfWorkbook.createSheet(); hssfSheet.setColumnWidth(0, 6 * 256); hssfSheet.setDefaultRowHeightInPoints(20f); //添加第一行标题 HSSFRow hssfRow = hssfSheet.createRow(0); List<XpShift> xpShifts = xpShiftService.list(new QueryWrapper<XpShift>().eq("is_deleted", 0)); //设置单元格数量 int totalCell = dayOfMonth + 1 + xpShifts.size(); //设置表头样式,合并单元格 CellRangeAddress region = new CellRangeAddress(0, 1, 0, 0); hssfSheet.addMergedRegion(region); region = new CellRangeAddress(0, 1, dayOfMonth + 1, totalCell); hssfSheet.addMergedRegion(region); //设置单元格数据 for (int i = 0; i < totalCell; i++) { HSSFCell cell = hssfRow.createCell(i); if(0 == i){ cell.setCellValue("车队"); }else if(i <= dayOfMonth){ cell.setCellValue(m + "/" + i); }else{ cell.setCellValue("排班小计"); } } //添加第二行标题 HSSFRow hssfRow1 = hssfSheet.createRow(1); //设置单元格数量 //设置单元格数据 for (int i = 0; i < totalCell; i++) { HSSFCell cell = hssfRow1.createCell(i); if(i > 0 && i <= dayOfMonth){ LocalDate parse = LocalDate.parse(month + "-" + String.format("%02d", i), DateTimeFormatter.ofPattern("yyyy-MM-dd")); String week = ""; switch (parse.getDayOfWeek()) { case MONDAY: week = "一"; break; case TUESDAY: week = "二"; break; case WEDNESDAY: week = "三"; break; case THURSDAY: week = "四"; break; case FRIDAY: week = "五"; break; case SATURDAY: week = "六"; break; case SUNDAY: week = "日"; break; } cell.setCellValue(week); } } //构建数据部分的内容 int rowNum = 2; for (SchedulingDetailDto schedulingDetailDto : schedulingDetailDtos) { exportSchedulingDetailDto = new ExportSchedulingDetailDto(); exportSchedulingDetailDto.setFleetName(schedulingDetailDto.getFleetName()); HSSFRow row = hssfSheet.createRow(rowNum); row.createCell(0).setCellValue(schedulingDetailDto.getFleetName()); String days = schedulingDetailDto.getDays(); if (StringUtils.isNotBlank(days)) { String[] split = days.split(","); @@ -657,32 +653,17 @@ break; } } setEnglishDay(i, exportSchedulingDetailDto, shiftName); } long allDay = list.stream().filter(s -> s.contains("全天")).count(); long morning = list.stream().filter(s -> s.contains("早")).count(); long midDay = list.stream().filter(s -> s.contains("中")).count(); long evening = list.stream().filter(s -> s.contains("晚")).count(); exportSchedulingDetailDto.setAllDay(allDay + ""); exportSchedulingDetailDto.setMorning(morning + ""); exportSchedulingDetailDto.setMidDay(midDay + ""); exportSchedulingDetailDto.setEvening(evening + ""); } else { for (int i = 1; i <= 31; i++) { String shiftName = "休"; setEnglishDay(i, exportSchedulingDetailDto, shiftName); } exportSchedulingDetailDto.setAllDay("0"); exportSchedulingDetailDto.setMorning("0"); exportSchedulingDetailDto.setMidDay("0"); exportSchedulingDetailDto.setEvening("0"); } exportSchedulingDetailDtos.add(exportSchedulingDetailDto); } String[] split = month.split("-"); ExcelUtil<ExportSchedulingDetailDto> excelUtil = new ExcelUtil<>(ExportSchedulingDetailDto.class); excelUtil.exportExcel(response, exportSchedulingDetailDtos, "排班计划[日期:" + split[0] + "年" + split[1] + "月]"); row.createCell(i).setCellValue(shiftName); } for (int i = 0; i < xpShifts.size(); i++) { String shiftName = xpShifts.get(i).getShiftName(); long allDay = list.stream().filter(s -> s.contains(shiftName)).count(); row.createCell(dayOfMonth + 1 + i).setCellValue(allDay + allDay); } } } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/OssController.java
@@ -35,22 +35,22 @@ public R<FileUploadVO> uploadOSS(@RequestParam(value = "file") MultipartFile file) { try { // 上传并返回访问地址 // String fileName = file.getOriginalFilename(); // String prefix = fileName.substring(fileName.lastIndexOf(".")); // long fileSize = file.getSize(); // String fileId = UUID.randomUUID().toString(); // //上传文件 // aliOssService.uploadFile(file.getBytes(), fileId); // String downloadUrl = aliOssService.getDownloadUrl(fileId, fileName,true); // FileUploadVO fileUploadVO = new FileUploadVO(); // fileUploadVO.setId(fileId); // fileUploadVO.setName(fileName); // fileUploadVO.setUrl(downloadUrl); String fileName = file.getOriginalFilename(); String prefix = fileName.substring(fileName.lastIndexOf(".")); long fileSize = file.getSize(); String fileId = UUID.randomUUID().toString(); //上传文件 aliOssService.uploadFile(file.getBytes(), fileId); String downloadUrl = aliOssService.getDownloadUrl(fileId, fileName,true); FileUploadVO fileUploadVO = new FileUploadVO(); fileUploadVO.setId(UUID.randomUUID().toString()); fileUploadVO.setName("测试.jpg"); fileUploadVO.setUrl("https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/552a3a31-e4dd-4a28-8748-fd8b87dd3055.png"); fileUploadVO.setId(fileId); fileUploadVO.setName(fileName); fileUploadVO.setUrl(downloadUrl); // FileUploadVO fileUploadVO = new FileUploadVO(); // fileUploadVO.setId(UUID.randomUUID().toString()); // fileUploadVO.setName("测试.jpg"); // fileUploadVO.setUrl("https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/552a3a31-e4dd-4a28-8748-fd8b87dd3055.png"); return R.ok(fileUploadVO); } catch (Exception e) { System.err.println("上传文件失败"+e); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderHistoryListVO.java
@@ -63,6 +63,9 @@ private Integer endParkingTimeLimit; private Integer status; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -25,6 +25,7 @@ import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO; import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO; import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto; import com.xiaopeng.api.dto.vehicleConvoy.UpdateVehicleStateDto; import com.xiaopeng.api.feignClient.account.UserResourcesClient; import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient; import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient; @@ -94,6 +95,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; @@ -151,8 +153,10 @@ private MongoTemplate mongoTemplate; @Autowired private HolidayUtil holidayUtil; // @Autowired // private XpPricingUtil xpPricingUtil; @Value("${robotaxi.appId:xp_robotaxi_api}") private String appid; @Override public OrderStatisticsDTO getOrderStatistics(StatisticsQueryDTO query) { @@ -570,6 +574,27 @@ * 取消订单 */ private void cancelOrder(XpOrder order) { redisService.removeByPattern(order.getQueueName(),order.getOrderNumber()); //判断还原车辆状态 if(null == order.getVehicleId()){ Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString()); if(null != cacheObject1){ com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString()); String vin = jsonObject.getString("vin"); XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData(); if(null != vehicle && 0 != vehicle.getState()){ vehicle.setState(0); xpVehicleClient.updateVehicleById(vehicle); } } } if (order.getStatus() == 1) { order.setStatus(0); order.setAppUserId(null); baseMapper.updateById(order); return; } // 1. 更新订单状态为已取消(0) lambdaUpdate().set(XpOrder::getStatus, 0) .eq(XpOrder::getId, order.getId()).update(); @@ -584,11 +609,31 @@ //查询车辆信息 R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getId()); if (xpVehicleR.getCode() == HttpStatus.SUCCESS && Objects.nonNull(xpVehicleR.getData())) { XpVehicle xpVehicle = xpVehicleR.getData(); // 组装调用车机参数 CancelTaxiPassengerVo cancelTaxiPassengerVo = new CancelTaxiPassengerVo(); cancelTaxiPassengerVo.setVin(xpVehicle.getVehicleVin()); cancelTaxiPassengerVo.setUid(order.getAppUserId().toString()); cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber()); // TODO 加配置文件取 cancelTaxiPassengerVo.setAppId(appid); BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); if (baseVehicleUserDto == null) { // TODO 本地无法调通 // throw new RuntimeException("取消订单失败"); } //还原车辆状态 if(1 == xpVehicle.getState()){ xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0)); } // 下发命令 if (order.getStatus() > 1) { PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setOrderId(order.getId().toString()); pushOrderDto.setVin(xpVehicleR.getData().getVehicleVin()); pushOrderDto.setVin(xpVehicle.getVehicleVin()); pushOrderDto.setOperation_type(com.xiaopeng.api.vo.automaticPilot.protobuf.OrderOperationType.CLOUD_CANCEL_ORDER); orderMissionClient.cancelOrder(pushOrderDto); } @@ -685,7 +730,7 @@ cancelVo.setVin(oldVehicle.getVehicleVin()); cancelVo.setUid(order.getAppUserId().toString()); cancelVo.setOrderNo(order.getOrderNumber()); cancelVo.setAppId(""); cancelVo.setAppId(appid); userVehicleClient.cancelTaxiPassenger(cancelVo); log.info("已解绑乘客与原车辆关系,用户ID: {}, VIN: {}", order.getAppUserId(), oldVehicle.getVehicleVin()); } @@ -767,7 +812,7 @@ addVo.setVin(newVehicle.getVehicleVin()); addVo.setUid(order.getAppUserId().toString()); addVo.setOrderNo(order.getOrderNumber()); addVo.setAppId(""); // TODO 获取appId addVo.setAppId(appid); // TODO 获取appId userVehicleClient.addTaxiPassenger(addVo); log.info("已绑定乘客与新车辆关系,用户ID: {}, VIN: {}", order.getAppUserId(), newVehicle.getVehicleVin()); } @@ -1057,6 +1102,20 @@ } redisService.removeByPattern(order.getQueueName(),order.getOrderNumber()); //判断还原车辆状态 if(null == order.getVehicleId()){ Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString()); if(null != cacheObject1){ com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString()); String vin = jsonObject.getString("vin"); XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData(); if(null != vehicle && 0 != vehicle.getState()){ vehicle.setState(0); xpVehicleClient.updateVehicleById(vehicle); } } } if (order.getStatus() == 1) { order.setStatus(0); order.setAppUserId(null); @@ -1082,7 +1141,7 @@ cancelTaxiPassengerVo.setUid(order.getAppUserId().toString()); cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber()); // TODO 加配置文件取 cancelTaxiPassengerVo.setAppId(""); cancelTaxiPassengerVo.setAppId(appid); BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); if (baseVehicleUserDto == null) { @@ -1097,16 +1156,9 @@ xpOrderCancel.setCancelSource(1); xpOrderCancel.setCancelReason("用户取消订单"); xpOrderCancelService.save(xpOrderCancel); //判断还原车辆状态 Object cacheObject1 = redisService.getCacheObject("CREATE_ORDER:" + order.getId().toString()); if(null != cacheObject1){ com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSON.parseObject(cacheObject1.toString()); String vin = jsonObject.getString("vin"); XpVehicle vehicle = xpVehicleClient.findByVehicleVin(vin).getData(); if(null != vehicle && 0 != vehicle.getState()){ vehicle.setState(0); xpVehicleClient.updateVehicleById(vehicle); } //还原车辆状态 if(1 == xpVehicle.getState()){ xpVehicleClient.updateVehicleStatus(new UpdateVehicleStateDto(xpVehicle.getVehicleVin(), 0)); } // 设置当天的取消次数缓存 @@ -1330,7 +1382,7 @@ cancelTaxiPassengerVo.setUid(uid); cancelTaxiPassengerVo.setOrderNo(order.getOrderNumber()); // TODO 加配置文件取 cancelTaxiPassengerVo.setAppId(""); cancelTaxiPassengerVo.setAppId(appid); userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); // 修改车辆接单状态 @@ -2237,7 +2289,7 @@ this.updateById(order); addTaxiPassengerVo.setOrderNo(order.getOrderNumber()); // TODO appid addTaxiPassengerVo.setAppId(""); addTaxiPassengerVo.setAppId(appid); userVehicleClient.addTaxiPassenger(addTaxiPassengerVo); //推送乘客车辆到达预约点的导航数据 sendRoute(addTaxiPassengerVo.getUid(), orderId, "ORDER_NAVIGATION_START_DATA", dto.getXpVehicleVin()); xp-robotaxi-order-boot/src/main/resources/mapper/order/XpOrderMapper.xml
@@ -47,7 +47,7 @@ <select id="getHistoryOrderList" resultType="com.xiaopeng.order.model.vo.XpOrderHistoryListVO"> select start_point_name as originAddress, end_point_name as destinationAddress,start_point_id as startPointId,end_point_id as endPointId, DATE_FORMAT(create_time, '%H:%i') AS orderTime, pay_money as amount,create_time as time,DATE_FORMAT(create_time,'%Y-%m-%d') AS timeStr, id as orderId from xp_order where app_user_id = #{uid} and is_deleted = 0 and status in (9,10) id as orderId,status from xp_order where app_user_id = #{uid} and is_deleted = 0 <if test="query.status != null"> and status = #{query.status} </if>