From a1560b8169a15a2189722c89c9cc06031758cae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E6=96=87=E9=9D=99WWW?= <15144434+wen-wenjing-www@user.noreply.gitee.com> Date: Wed, 20 Aug 2025 21:29:39 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=9A=84=E5=AD=90=E5=8D=95?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=B7=BB=E5=8A=A0=E4=B8=BB=E5=8D=95=E7=BC=96?= =?UTF-8?q?=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OrderDetailAnalysisController.java | 6 ++- .../order/domain/dto/OrderDetailDTO.java | 9 ++++ .../order/mapper/OrderDetailMapper.java | 5 +- .../order/service/IOrderDetailService.java | 1 + .../service/OrderDetailAnalysisService.java | 2 +- .../impl/OrderDetailAnalysisServiceImpl.java | 51 +++++++++++-------- .../mapper/order/OrderDetailMapper.xml | 15 ++++++ 7 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 aircraft-system/src/main/java/com/aircraft/modules/order/domain/dto/OrderDetailDTO.java diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderDetailAnalysisController.java b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderDetailAnalysisController.java index d449b77..f62c69a 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderDetailAnalysisController.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/controller/OrderDetailAnalysisController.java @@ -2,6 +2,7 @@ package com.aircraft.modules.order.controller; import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.dto.*; +import com.aircraft.modules.order.mapper.OrderDetailMapper; import com.aircraft.modules.order.service.IOrderDetailService; import com.aircraft.modules.order.service.OrderDetailAnalysisService; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; @@ -37,6 +38,9 @@ public class OrderDetailAnalysisController { @Autowired private IOrderDetailService orderDetailService; + @Autowired + private OrderDetailMapper orderDetailMapper; + // 日期格式化器 private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final Pattern QUARTER_PATTERN = Pattern.compile("^\\d{4}-Q[1-4]$"); @@ -47,7 +51,7 @@ public class OrderDetailAnalysisController { public ResponseEntity> analyzeAllOrderDetails() { try { // 1. 获取所有子单数据 - List allDetails = orderDetailService.list(); + List allDetails = orderDetailMapper.getAllOrderDetail(); // 2. 校验数据 if (CollectionUtils.isEmpty(allDetails)) { diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/domain/dto/OrderDetailDTO.java b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/dto/OrderDetailDTO.java new file mode 100644 index 0000000..f1ce969 --- /dev/null +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/domain/dto/OrderDetailDTO.java @@ -0,0 +1,9 @@ +package com.aircraft.modules.order.domain.dto; + +import com.aircraft.modules.order.domain.OrderDetail; +import lombok.Data; + +@Data +public class OrderDetailDTO extends OrderDetail { + private String orderNo; //主单订单编号 +} diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/mapper/OrderDetailMapper.java b/aircraft-system/src/main/java/com/aircraft/modules/order/mapper/OrderDetailMapper.java index 02a9b4c..141ea73 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/mapper/OrderDetailMapper.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/mapper/OrderDetailMapper.java @@ -1,9 +1,11 @@ package com.aircraft.modules.order.mapper; import com.aircraft.modules.order.domain.OrderDetail; +import com.aircraft.modules.order.domain.dto.OrderDetailDTO; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.springframework.stereotype.Repository; +import java.time.LocalDateTime; import java.util.List; /** @@ -18,6 +20,7 @@ import java.util.List; public interface OrderDetailMapper extends BaseMapper { List getOrderDetailsByOrderIds(List orderIds); + List queryByDateRange(LocalDateTime startTime, LocalDateTime endTime); - List getOrderDetailsByOrderId(Long id); + List getAllOrderDetail(); } diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java index aa944e3..d124177 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/IOrderDetailService.java @@ -1,6 +1,7 @@ package com.aircraft.modules.order.service; import com.aircraft.modules.order.domain.OrderDetail; +import com.aircraft.modules.order.domain.dto.OrderDetailDTO; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/OrderDetailAnalysisService.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/OrderDetailAnalysisService.java index 1802780..193b308 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/OrderDetailAnalysisService.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/OrderDetailAnalysisService.java @@ -10,7 +10,7 @@ import java.util.List; @Service public interface OrderDetailAnalysisService { - OrderDetailAnalysisResult analyzeAllOrderDetails(List allDetails); + OrderDetailAnalysisResult analyzeAllOrderDetails(List allDetails); OrderDetailAnalysisResult> analyzeByDayRange(LocalDate start, LocalDate end); diff --git a/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailAnalysisServiceImpl.java b/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailAnalysisServiceImpl.java index 2fe34b5..3cb5f28 100644 --- a/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailAnalysisServiceImpl.java +++ b/aircraft-system/src/main/java/com/aircraft/modules/order/service/impl/OrderDetailAnalysisServiceImpl.java @@ -6,6 +6,7 @@ import com.aircraft.modules.order.controller.OrderAnalysisController; import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.dto.*; import com.aircraft.modules.order.mapper.OrderDetailMapper; +import com.aircraft.modules.order.mapper.OrderMainMapper; import com.aircraft.modules.order.service.IOrderDetailService; import com.aircraft.modules.order.service.OrderDetailAnalysisService; import com.aircraft.modules.route.domain.CpRoute; @@ -45,7 +46,8 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic private static final Integer STATUS_PROCESSING = 1;//进行中 private static final Integer STATUS_COMPLETED = 2;//已完成 private static final Integer STATUS_FAILED = 3;//执行失败 - + @Autowired + private OrderMainMapper orderMainMapper; @Autowired private OrderDetailMapper orderDetailMapper; @Autowired @@ -58,14 +60,14 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic private IOrderDetailService orderDetailService; @Override - public OrderDetailAnalysisResult analyzeAllOrderDetails(List allDetails) { + public OrderDetailAnalysisResult analyzeAllOrderDetails(List allDetails) { return buildOrderDetailAnalysisResult(allDetails); } @Override public OrderDetailAnalysisResult> analyzeByDayRange(LocalDate start, LocalDate end) { // 1. 查询时间范围内的所有订单 - List orders = queryOrderDetailByDateRange(start, end); + List orders = queryOrderDetailByDateRange(start, end); if (CollectionUtils.isEmpty(orders)) { return buildEmptyResult(); } @@ -107,7 +109,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic @Override public OrderDetailAnalysisResult> analyzeByMonthRange(LocalDate start, LocalDate end) { // 1. 查询时间范围内的所有订单 - List orders = queryOrderDetailByDateRange(start, end); + List orders = queryOrderDetailByDateRange(start, end); if (CollectionUtils.isEmpty(orders)) { return buildEmptyResult(); } @@ -146,7 +148,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic @Override public OrderDetailAnalysisResult> analyzeByQuarterRange(LocalDate start, LocalDate end) { // 1. 查询时间范围内的所有订单 - List orders = queryOrderDetailByDateRange(start, end); + List orders = queryOrderDetailByDateRange(start, end); if (CollectionUtils.isEmpty(orders)) { return buildEmptyResult(); } @@ -194,7 +196,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic @Override public OrderDetailAnalysisResult> analyzeByYearRange(LocalDate start, LocalDate end) { // 1. 查询时间范围内的所有订单 - List orders = queryOrderDetailByDateRange(start, end); + List orders = queryOrderDetailByDateRange(start, end); if (CollectionUtils.isEmpty(orders)) { return buildEmptyResult(); } @@ -233,28 +235,33 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 根据日期范围查询订单 */ - private List queryOrderDetailByDateRange(LocalDate start, LocalDate end) { + private List queryOrderDetailByDateRange(LocalDate start, LocalDate end) { // MyBatis Plus 条件构造器:查询 create_time 在 [start, end] 范围内的订单 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.ge(OrderDetail::getCreateTime, start.atStartOfDay()) // 开始时间:当天00:00:00 - .le(OrderDetail::getCreateTime, end.atTime(23, 59, 59)); // 结束时间:当天23:59:59 - return orderDetailMapper.selectList(queryWrapper); + // 转换日期为包含时间的LocalDateTime + LocalDateTime startTime = start.atStartOfDay(); // 开始时间:当天00:00:00 + LocalDateTime endTime = end.atTime(23, 59, 59); // 结束时间:当天23:59:59 + return orderDetailMapper.queryByDateRange(startTime, endTime); } /** * 构建完整的订单分析结果 */ - private OrderDetailAnalysisResult buildAnalysisResult(List orderDetails, T timeSeriesData) { + private OrderDetailAnalysisResult buildAnalysisResult(List orderDetails, T timeSeriesData) { OrderDetailAnalysisResult result = buildOrderDetailAnalysisResult(orderDetails); // 时间序列数据(日/月/季/年统计) result.setTimeSeriesData(timeSeriesData); + //通过子单id获取orderId(主单id) +// Long orderId=orderDetailMapper.getOrderIdById(); +// //通过orderId获取主单订单编号 +// Long orderNo=orderMainMapper.getOrderNo(orderId); +// result.setOrderNo(orderNo); return result; } /** * 处理任务分析结果 */ - private OrderDetailAnalysisResult buildOrderDetailAnalysisResult(List orderDetails) { + private OrderDetailAnalysisResult buildOrderDetailAnalysisResult(List orderDetails) { OrderDetailAnalysisResult result = new OrderDetailAnalysisResult<>(); // 1. 基础统计指标 @@ -341,7 +348,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic } //计算平均任务周期 - private double calculateAverageTaskCycle(List orderDetails) { + private double calculateAverageTaskCycle(List orderDetails) { //获取任务数 List completedTasks = orderDetails.stream() .filter(task -> task.getOrderItemStatus() == STATUS_COMPLETED) @@ -385,7 +392,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 按状态统计时间范围内的任务数量 */ - private long countTasksByStatus(List tasks, Integer status) { + private long countTasksByStatus(List tasks, Integer status) { return tasks.stream() .filter(task -> status.equals(task.getOrderItemStatus())) .count(); @@ -394,7 +401,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 按日期和状态统计每日订单数量 */ - private Map calculateDailyStatusCount(List orderDetails, Integer status) { + private Map calculateDailyStatusCount(List orderDetails, Integer status) { return orderDetails.stream() .filter(order -> order.getOrderItemStatus().equals(status)) .collect(Collectors.groupingBy( @@ -406,7 +413,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 按月份和状态统计每月订单数量 */ - private Map calculateMonthlyStatusCount(List orderDetails, Integer status) { + private Map calculateMonthlyStatusCount(List orderDetails, Integer status) { return orderDetails.stream() .filter(order -> order.getOrderItemStatus().equals(status)) .collect(Collectors.groupingBy( @@ -418,7 +425,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 按季节和状态统计每计季节订单数量 */ - private Map calculateQuarterlyStatusCount(List orderDetails, Integer status) { + private Map calculateQuarterlyStatusCount(List orderDetails, Integer status) { return orderDetails.stream() .filter(order -> order.getOrderItemStatus().equals(status)) .collect(Collectors.groupingBy( @@ -430,7 +437,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 按年份和状态统计每计年订单数量 */ - private Map calculateYearlyStatusCount(List orderDetails, Integer status) { + private Map calculateYearlyStatusCount(List orderDetails, Integer status) { return orderDetails.stream() .filter(order -> order.getOrderItemStatus().equals(status)) .collect(Collectors.groupingBy( @@ -455,7 +462,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 构建任务分页信息 */ - private PageInfo buildTaskPageInfo(List tasks, int pageNum, int pageSize) { + private PageInfo buildTaskPageInfo(List tasks, int pageNum, int pageSize) { PageInfo pageInfo = new PageInfo(); pageInfo.setPageNum(pageNum); pageInfo.setPageSize(pageSize); @@ -466,7 +473,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 获取分页后的任务列表 */ - private List getPagedTasks(List tasks, PageInfo pageInfo) { + private List getPagedTasks(List tasks, PageInfo pageInfo) { int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize(); int end = Math.min(start + pageInfo.getPageSize(), tasks.size()); return tasks.subList(start, end); @@ -492,7 +499,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic /** * 计算景区内各路线的任务分布 */ - public List calculateRouteDistribution(List orderDetails) { + public List calculateRouteDistribution(List orderDetails) { // 1. 校验输入 if (CollectionUtils.isEmpty(orderDetails)) { return Collections.emptyList(); diff --git a/aircraft-system/src/main/resources/mapper/order/OrderDetailMapper.xml b/aircraft-system/src/main/resources/mapper/order/OrderDetailMapper.xml index c017f2f..964c638 100644 --- a/aircraft-system/src/main/resources/mapper/order/OrderDetailMapper.xml +++ b/aircraft-system/src/main/resources/mapper/order/OrderDetailMapper.xml @@ -57,4 +57,19 @@ AND del_flag = 0 ORDER BY create_time ASC + + + + \ No newline at end of file