From 3e9a4992d78cf5c75486b3bed0f6f52d5cbdfadf Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期三, 30 十月 2024 09:52:18 +0800 Subject: [PATCH] 修改 --- ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java | 241 +++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 199 insertions(+), 42 deletions(-) diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java index b833c5b..e5ea233 100644 --- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java +++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/controller/TChargingOrderController.java @@ -3,6 +3,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; +import java.text.DecimalFormat; import java.time.*; @@ -26,10 +27,12 @@ import com.ruoyi.common.security.service.TokenService; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.core.web.page.PageInfo; +import com.ruoyi.integration.api.model.PageChargingOrderAndUploadRealTimeMonitoringDataDto; import com.ruoyi.integration.api.model.UploadRealTimeMonitoringData; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.integration.api.feignClient.UploadRealTimeMonitoringDataClient; import com.ruoyi.integration.api.model.ChargingOrderAndUploadRealTimeMonitoringDataDto; +import com.ruoyi.integration.api.model.UploadRealTimeMonitoringPageData; import com.ruoyi.order.api.model.*; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.common.core.dto.MongoChargingOrderQuery; @@ -345,7 +348,6 @@ public AjaxResult<ChargingOrderInfoVO> chargingOrderInfo(String strategyId) { TChargingOrder byId = chargingOrderService.getById(strategyId); ChargingOrderInfoVO chargingOrderInfoVO = new ChargingOrderInfoVO(); - chargingOrderInfoVO.setCdElectronic(byId.getCurrent()!=null?byId.getCurrent().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":""); chargingOrderInfoVO.setCdVoltage(byId.getVoltage()!=null?byId.getVoltage().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":""); chargingOrderInfoVO.setSurplus(byId.getTotalElectricity()!=null?byId.getTotalElectricity().setScale(2, BigDecimal.ROUND_HALF_DOWN)+"":""); @@ -508,7 +510,7 @@ @PostMapping(value = "/chargingOrderWXCallback") public void chargingOrderWXCallback(@RequestParam("out_trade_no") String out_trade_no, @RequestParam("transaction_id") String transaction_id, @RequestParam("attach") String attach) { - AjaxResult ajaxResult = chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach); + chargingOrderService.chargingOrderCallback(1, out_trade_no, transaction_id, attach); } @@ -790,53 +792,61 @@ @PostMapping(value = "/watch/chargingOrder") @ApiOperation(value = "监控订单", tags = {"管理后台-订单管理"}) public R watchChargingOrder(@RequestBody MongoChargingOrderQuery mongoChargingOrderQuery) { -// Integer page = dto.getPageCurr(); -// Integer pageSize = dto.getPageSize(); -// List<Long> data = appUserClient.getUserIdsByPhone(dto.getPhone()).getData(); -// dto.setUserIds(data); -// dto.setPageCurr(1); -// dto.setPageSize(99999); - -// Map<String,TChargingOrder> map = new HashMap<>(); -// //吧list放入map中 -// for (ChargingOrderVO record : res.getList().getRecords()) { -// map.put(record.getCode(),record); -// } -// Set<String> strings = map.keySet(); mongoChargingOrderQuery.setPageSize(10); - List<UploadRealTimeMonitoringData> data1 = uploadRealTimeMonitoringDataClient.getAll(mongoChargingOrderQuery).getData(); + UploadRealTimeMonitoringPageData data1 = uploadRealTimeMonitoringDataClient.getAll(mongoChargingOrderQuery).getData(); List<ChargingOrderAndUploadRealTimeMonitoringDataDto> dtos = new ArrayList<>(); Map<String,ChargingOrderVO> map = new HashMap<>(); - for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1) { + for (UploadRealTimeMonitoringData uploadRealTimeMonitoringData : data1.getRecords()) { ChargingOrderAndUploadRealTimeMonitoringDataDto dataDto = new ChargingOrderAndUploadRealTimeMonitoringDataDto(); ChargingOrderQuery dto = new ChargingOrderQuery(); dto.setCode(uploadRealTimeMonitoringData.getTransaction_serial_number()); - TCharingOrderVO vo = chargingOrderService.chargingOrder(dto); - if (!vo.getList().getRecords().isEmpty()) { - ChargingOrderVO chargingOrderVO = vo.getList().getRecords().get(0); - if (chargingOrderVO != null) { - BeanUtils.copyProperties(chargingOrderVO, dataDto); + + if (map.get(uploadRealTimeMonitoringData.getTransaction_serial_number())==null) { + TCharingOrderVO vo = chargingOrderService.chargingOrder(dto); + map.put(uploadRealTimeMonitoringData.getTransaction_serial_number(),vo.getList().getRecords().get(0)); + if (!vo.getList().getRecords().isEmpty()) { + ChargingOrderVO chargingOrderVO = vo.getList().getRecords().get(0); + if (chargingOrderVO != null) { + BeanUtils.copyProperties(chargingOrderVO, dataDto); + } + BeanUtils.copyProperties(uploadRealTimeMonitoringData, dataDto); + dataDto.setStartTime(uploadRealTimeMonitoringData.getStartTime()); + dataDto.setEndTime(uploadRealTimeMonitoringData.getEndTime() == null ? null : uploadRealTimeMonitoringData.getEndTime()); + dataDto.setStatus(uploadRealTimeMonitoringData.getStatus()); + dtos.add(dataDto); } - BeanUtils.copyProperties(uploadRealTimeMonitoringData,dataDto); - dataDto.setStartTime(uploadRealTimeMonitoringData.getStartTime()); - dataDto.setEndTime(uploadRealTimeMonitoringData.getEndTime()==null?null:uploadRealTimeMonitoringData.getEndTime()); - dataDto.setStatus(chargingOrderVO.getStatus()); - dtos.add(dataDto); }else { - continue; + ChargingOrderVO vo = map.get(uploadRealTimeMonitoringData.getTransaction_serial_number()); + BeanUtils.copyProperties(vo, dataDto); + BeanUtils.copyProperties(uploadRealTimeMonitoringData, dataDto); + dataDto.setStartTime(uploadRealTimeMonitoringData.getStartTime()); + dataDto.setEndTime(uploadRealTimeMonitoringData.getEndTime() == null ? null : uploadRealTimeMonitoringData.getEndTime()); + dataDto.setStatus(uploadRealTimeMonitoringData.getStatus()); + dtos.add(dataDto); } } for (int i = 0; i < dtos.size(); i++) { dtos.get(i).setIndex(i); } - return R.ok(dtos); + PageChargingOrderAndUploadRealTimeMonitoringDataDto page = new PageChargingOrderAndUploadRealTimeMonitoringDataDto(); + page.setTotal(data1.getCount()); + page.setRecords(dtos); + + return R.ok(page); } - - - + + + + @ResponseBody + @GetMapping(value = "/watch/deletes") + @ApiOperation(value = "监控订单-删除", tags = {"管理后台-订单管理"}) + public R watchChargingOrder(@RequestParam String id) { + uploadRealTimeMonitoringDataClient.delete(id); + return R.ok(); + } /** * 处理充电订单实时监控数据相关的业务逻辑 @@ -925,19 +935,151 @@ if (statisticsQueryDto.getDayType()==1){ List<Map<String,Object>> maps1 = chargingOrderService.getDateData(chargingOrderIds); - tCharingOrderMapVO.setMaps1(maps1); + + List<Map<String, Object>> charMap = new ArrayList<>(); + // 生成从 "00:00" 到 "23:00" 的时间数据 + for (int hour = 0; hour < 24; hour++) { + String time = String.format("%02d:00", hour); + Map<String, Object> mapWithTimeValue = findMapWithTimeValue(maps1, time); + if (mapWithTimeValue!=null){ + charMap.add(mapWithTimeValue); + }else { + Map<String, Object> timeMap = new HashMap<>(); + timeMap.put("time", time); // 初始化值为 null + timeMap.put("electrovalence", 0); + timeMap.put("orderCount", 0); + timeMap.put("paymentAmount", 0); + timeMap.put("paymoney", 0); + timeMap.put("servicecharge", 0); + + charMap.add(timeMap); + } + } + + tCharingOrderMapVO.setMaps1(charMap); }else if (statisticsQueryDto.getDayType()==2){ + + + List<Map<String,Object>> maps1 = chargingOrderService.getWeekData(chargingOrderIds); - tCharingOrderMapVO.setMaps1(maps1); + + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("electrovalence", 0); + dateMap.put("orderCount", 0); + dateMap.put("paymentAmount", 0); + dateMap.put("paymoney", 0); + dateMap.put("servicecharge", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + tCharingOrderMapVO.setMaps1(dateRangeStatistics); }else if (statisticsQueryDto.getDayType()==3){ List<Map<String,Object>> maps1 = chargingOrderService.getMonthData(chargingOrderIds); - tCharingOrderMapVO.setMaps1(maps1); + + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("electrovalence", 0); + dateMap.put("orderCount", 0); + dateMap.put("paymentAmount", 0); + dateMap.put("paymoney", 0); + dateMap.put("servicecharge", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + tCharingOrderMapVO.setMaps1(dateRangeStatistics); }else if (statisticsQueryDto.getDayType()==4){ List<Map<String,Object>> maps1 = chargingOrderService.getYearData(chargingOrderIds); - tCharingOrderMapVO.setMaps1(maps1); + + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("electrovalence", 0); + dateMap.put("orderCount", 0); + dateMap.put("paymentAmount", 0); + dateMap.put("paymoney", 0); + dateMap.put("servicecharge", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + tCharingOrderMapVO.setMaps1(dateRangeStatistics); }else if (statisticsQueryDto.getDayType()==5){ List<Map<String,Object>> maps1 = chargingOrderService.getByDate(chargingOrderIds); - tCharingOrderMapVO.setMaps1(maps1); + + LocalDate startDate = statisticsQueryDto.getStartTime(); + LocalDate endDate = statisticsQueryDto.getEndTime(); + + List<Map<String, Object>> dateRangeStatistics = new ArrayList<>(); + + // 遍历日期范围 + while (!startDate.isAfter(endDate)) { + String formattedDate = startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + Map<String, Object> dailyStats = findMapWithDateValue(maps1, formattedDate); + + if (dailyStats != null) { + dateRangeStatistics.add(dailyStats); + } else { + Map<String, Object> dateMap = new HashMap<>(); + dateMap.put("time", formattedDate); + dateMap.put("electrovalence", 0); + dateMap.put("orderCount", 0); + dateMap.put("paymentAmount", 0); + dateMap.put("paymoney", 0); + dateMap.put("servicecharge", 0); + dateRangeStatistics.add(dateMap); + } + + // 移动到下一天 + startDate = startDate.plusDays(1); + } + tCharingOrderMapVO.setMaps1(dateRangeStatistics); } @@ -1239,8 +1381,8 @@ return R.ok(tCharingUserEquimentVO); } - - private static double calculateAveragePercent(List<Map<String, Object>> mapList1, List<Map<String, Object>> mapList2) { + private static final DecimalFormat DF = new DecimalFormat("#.00"); + public static double calculateAveragePercent(List<Map<String, Object>> mapList1, List<Map<String, Object>> mapList2) { int totalElements = mapList1.size() + mapList2.size(); double sum = 0.0; @@ -1262,7 +1404,10 @@ } // 计算平均值 - return sum / totalElements; + double average = sum / totalElements; + + // 格式化为两位小数 + return Double.parseDouble(DF.format(average)); } @ResponseBody @@ -1292,7 +1437,7 @@ //当日的订单总数 int size = list.size(); //计算list中paymentAmount的总和 - BigDecimal totalPaymentAmount = list.stream().map(TChargingOrder::getOrderAmount).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalPaymentAmount = list.stream().map(TChargingOrder::getPaymentAmount).reduce(BigDecimal.ZERO, BigDecimal::add); //计算list中electrovalence的总和 BigDecimal totalElectrovalence = list.stream().map(TChargingOrder::getElectrovalence).reduce(BigDecimal.ZERO, BigDecimal::add); //计算list中serviceCharge的总和 @@ -1534,7 +1679,7 @@ Long userId = tokenService.getLoginUserApplet().getUserId(); List<TChargingOrder> list = chargingOrderService.list(Wrappers.lambdaQuery(TChargingOrder.class) .eq(TChargingOrder::getAppUserId, userId) - .eq(TChargingOrder::getStatus, 3)); + .in(TChargingOrder::getStatus, Arrays.asList(1,2,3,4))); List<Integer> gunIds = list.stream().map(TChargingOrder::getChargingGunId).collect(Collectors.toList()); return R.ok(gunIds); } @@ -1638,4 +1783,16 @@ EndOfChargePageInfo endOfChargePageInfo = chargingOrderService.getEndOfChargePageInfo(id); return AjaxResult.success(endOfChargePageInfo); } + + + /** + * 获取订单数据 + * @param order + * @return + */ + @PostMapping("/getChargingOrder") + public R<List<TChargingOrder>> getChargingOrder(@RequestBody TChargingOrderVo order){ + List<TChargingOrder> chargingOrder = chargingOrderService.getChargingOrder(order); + return R.ok(chargingOrder); + } } -- Gitblit v1.7.1