Compare commits

..

No commits in common. "675ab2f1e677c01f9ee60e9a39253632e6b528cb" and "eb8d98af011f54266a2fc2793583cd8560098ef4" have entirely different histories.

7 changed files with 25 additions and 64 deletions

View File

@ -2,7 +2,6 @@ package com.aircraft.modules.order.controller;
import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.OrderDetail;
import com.aircraft.modules.order.domain.dto.*; 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.IOrderDetailService;
import com.aircraft.modules.order.service.OrderDetailAnalysisService; import com.aircraft.modules.order.service.OrderDetailAnalysisService;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
@ -38,9 +37,6 @@ public class OrderDetailAnalysisController {
@Autowired @Autowired
private IOrderDetailService orderDetailService; private IOrderDetailService orderDetailService;
@Autowired
private OrderDetailMapper orderDetailMapper;
// 日期格式化器 // 日期格式化器
private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private static final Pattern QUARTER_PATTERN = Pattern.compile("^\\d{4}-Q[1-4]$"); private static final Pattern QUARTER_PATTERN = Pattern.compile("^\\d{4}-Q[1-4]$");
@ -51,7 +47,7 @@ public class OrderDetailAnalysisController {
public ResponseEntity<OrderDetailAnalysisResult<T>> analyzeAllOrderDetails() { public ResponseEntity<OrderDetailAnalysisResult<T>> analyzeAllOrderDetails() {
try { try {
// 1. 获取所有子单数据 // 1. 获取所有子单数据
List<OrderDetailDTO> allDetails = orderDetailMapper.getAllOrderDetail(); List<OrderDetail> allDetails = orderDetailService.list();
// 2. 校验数据 // 2. 校验数据
if (CollectionUtils.isEmpty(allDetails)) { if (CollectionUtils.isEmpty(allDetails)) {

View File

@ -1,9 +0,0 @@
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; //主单订单编号
}

View File

@ -1,11 +1,9 @@
package com.aircraft.modules.order.mapper; package com.aircraft.modules.order.mapper;
import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.OrderDetail;
import com.aircraft.modules.order.domain.dto.OrderDetailDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
/** /**
@ -20,7 +18,6 @@ import java.util.List;
public interface OrderDetailMapper extends BaseMapper<OrderDetail> { public interface OrderDetailMapper extends BaseMapper<OrderDetail> {
List<OrderDetail> getOrderDetailsByOrderIds(List<Long> orderIds); List<OrderDetail> getOrderDetailsByOrderIds(List<Long> orderIds);
List<OrderDetailDTO> queryByDateRange(LocalDateTime startTime, LocalDateTime endTime);
List<OrderDetailDTO> getAllOrderDetail(); List<OrderDetail> getOrderDetailsByOrderId(Long id);
} }

View File

@ -1,7 +1,6 @@
package com.aircraft.modules.order.service; package com.aircraft.modules.order.service;
import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.OrderDetail;
import com.aircraft.modules.order.domain.dto.OrderDetailDTO;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List; import java.util.List;

View File

@ -10,7 +10,7 @@ import java.util.List;
@Service @Service
public interface OrderDetailAnalysisService { public interface OrderDetailAnalysisService {
OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetailDTO> allDetails); OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetail> allDetails);
OrderDetailAnalysisResult<List<DailyStat>> analyzeByDayRange(LocalDate start, LocalDate end); OrderDetailAnalysisResult<List<DailyStat>> analyzeByDayRange(LocalDate start, LocalDate end);

View File

@ -6,7 +6,6 @@ import com.aircraft.modules.order.controller.OrderAnalysisController;
import com.aircraft.modules.order.domain.OrderDetail; import com.aircraft.modules.order.domain.OrderDetail;
import com.aircraft.modules.order.domain.dto.*; import com.aircraft.modules.order.domain.dto.*;
import com.aircraft.modules.order.mapper.OrderDetailMapper; 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.IOrderDetailService;
import com.aircraft.modules.order.service.OrderDetailAnalysisService; import com.aircraft.modules.order.service.OrderDetailAnalysisService;
import com.aircraft.modules.route.domain.CpRoute; import com.aircraft.modules.route.domain.CpRoute;
@ -46,8 +45,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
private static final Integer STATUS_PROCESSING = 1;//进行中 private static final Integer STATUS_PROCESSING = 1;//进行中
private static final Integer STATUS_COMPLETED = 2;//已完成 private static final Integer STATUS_COMPLETED = 2;//已完成
private static final Integer STATUS_FAILED = 3;//执行失败 private static final Integer STATUS_FAILED = 3;//执行失败
@Autowired
private OrderMainMapper orderMainMapper;
@Autowired @Autowired
private OrderDetailMapper orderDetailMapper; private OrderDetailMapper orderDetailMapper;
@Autowired @Autowired
@ -60,14 +58,14 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
private IOrderDetailService orderDetailService; private IOrderDetailService orderDetailService;
@Override @Override
public OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetailDTO> allDetails) { public OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetail> allDetails) {
return buildOrderDetailAnalysisResult(allDetails); return buildOrderDetailAnalysisResult(allDetails);
} }
@Override @Override
public OrderDetailAnalysisResult<List<DailyStat>> analyzeByDayRange(LocalDate start, LocalDate end) { public OrderDetailAnalysisResult<List<DailyStat>> analyzeByDayRange(LocalDate start, LocalDate end) {
// 1. 查询时间范围内的所有订单 // 1. 查询时间范围内的所有订单
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end); List<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
if (CollectionUtils.isEmpty(orders)) { if (CollectionUtils.isEmpty(orders)) {
return buildEmptyResult(); return buildEmptyResult();
} }
@ -109,7 +107,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
@Override @Override
public OrderDetailAnalysisResult<List<MonthlyStat>> analyzeByMonthRange(LocalDate start, LocalDate end) { public OrderDetailAnalysisResult<List<MonthlyStat>> analyzeByMonthRange(LocalDate start, LocalDate end) {
// 1. 查询时间范围内的所有订单 // 1. 查询时间范围内的所有订单
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end); List<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
if (CollectionUtils.isEmpty(orders)) { if (CollectionUtils.isEmpty(orders)) {
return buildEmptyResult(); return buildEmptyResult();
} }
@ -148,7 +146,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
@Override @Override
public OrderDetailAnalysisResult<List<QuarterlyStat>> analyzeByQuarterRange(LocalDate start, LocalDate end) { public OrderDetailAnalysisResult<List<QuarterlyStat>> analyzeByQuarterRange(LocalDate start, LocalDate end) {
// 1. 查询时间范围内的所有订单 // 1. 查询时间范围内的所有订单
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end); List<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
if (CollectionUtils.isEmpty(orders)) { if (CollectionUtils.isEmpty(orders)) {
return buildEmptyResult(); return buildEmptyResult();
} }
@ -196,7 +194,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
@Override @Override
public OrderDetailAnalysisResult<List<YearlyStat>> analyzeByYearRange(LocalDate start, LocalDate end) { public OrderDetailAnalysisResult<List<YearlyStat>> analyzeByYearRange(LocalDate start, LocalDate end) {
// 1. 查询时间范围内的所有订单 // 1. 查询时间范围内的所有订单
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end); List<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
if (CollectionUtils.isEmpty(orders)) { if (CollectionUtils.isEmpty(orders)) {
return buildEmptyResult(); return buildEmptyResult();
} }
@ -235,33 +233,28 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 根据日期范围查询订单 * 根据日期范围查询订单
*/ */
private List<OrderDetailDTO> queryOrderDetailByDateRange(LocalDate start, LocalDate end) { private List<OrderDetail> queryOrderDetailByDateRange(LocalDate start, LocalDate end) {
// MyBatis Plus 条件构造器查询 create_time [start, end] 范围内的订单 // MyBatis Plus 条件构造器查询 create_time [start, end] 范围内的订单
// 转换日期为包含时间的LocalDateTime LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
LocalDateTime startTime = start.atStartOfDay(); // 开始时间当天00:00:00 queryWrapper.ge(OrderDetail::getCreateTime, start.atStartOfDay()) // 开始时间当天00:00:00
LocalDateTime endTime = end.atTime(23, 59, 59); // 结束时间当天23:59:59 .le(OrderDetail::getCreateTime, end.atTime(23, 59, 59)); // 结束时间当天23:59:59
return orderDetailMapper.queryByDateRange(startTime, endTime); return orderDetailMapper.selectList(queryWrapper);
} }
/** /**
* 构建完整的订单分析结果 * 构建完整的订单分析结果
*/ */
private <T> OrderDetailAnalysisResult<T> buildAnalysisResult(List<OrderDetailDTO> orderDetails, T timeSeriesData) { private <T> OrderDetailAnalysisResult<T> buildAnalysisResult(List<OrderDetail> orderDetails, T timeSeriesData) {
OrderDetailAnalysisResult<T> result = buildOrderDetailAnalysisResult(orderDetails); OrderDetailAnalysisResult<T> result = buildOrderDetailAnalysisResult(orderDetails);
// 时间序列数据///年统计 // 时间序列数据///年统计
result.setTimeSeriesData(timeSeriesData); result.setTimeSeriesData(timeSeriesData);
//通过子单id获取orderId(主单id)
// Long orderId=orderDetailMapper.getOrderIdById();
// //通过orderId获取主单订单编号
// Long orderNo=orderMainMapper.getOrderNo(orderId);
// result.setOrderNo(orderNo);
return result; return result;
} }
/** /**
* 处理任务分析结果 * 处理任务分析结果
*/ */
private <T> OrderDetailAnalysisResult<T> buildOrderDetailAnalysisResult(List<OrderDetailDTO> orderDetails) { private <T> OrderDetailAnalysisResult<T> buildOrderDetailAnalysisResult(List<OrderDetail> orderDetails) {
OrderDetailAnalysisResult<T> result = new OrderDetailAnalysisResult<>(); OrderDetailAnalysisResult<T> result = new OrderDetailAnalysisResult<>();
// 1. 基础统计指标 // 1. 基础统计指标
@ -348,7 +341,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
} }
//计算平均任务周期 //计算平均任务周期
private double calculateAverageTaskCycle(List<OrderDetailDTO> orderDetails) { private double calculateAverageTaskCycle(List<OrderDetail> orderDetails) {
//获取任务数 //获取任务数
List<OrderDetail> completedTasks = orderDetails.stream() List<OrderDetail> completedTasks = orderDetails.stream()
.filter(task -> task.getOrderItemStatus() == STATUS_COMPLETED) .filter(task -> task.getOrderItemStatus() == STATUS_COMPLETED)
@ -392,7 +385,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 按状态统计时间范围内的任务数量 * 按状态统计时间范围内的任务数量
*/ */
private long countTasksByStatus(List<OrderDetailDTO> tasks, Integer status) { private long countTasksByStatus(List<OrderDetail> tasks, Integer status) {
return tasks.stream() return tasks.stream()
.filter(task -> status.equals(task.getOrderItemStatus())) .filter(task -> status.equals(task.getOrderItemStatus()))
.count(); .count();
@ -401,7 +394,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 按日期和状态统计每日订单数量 * 按日期和状态统计每日订单数量
*/ */
private Map<String, Long> calculateDailyStatusCount(List<OrderDetailDTO> orderDetails, Integer status) { private Map<String, Long> calculateDailyStatusCount(List<OrderDetail> orderDetails, Integer status) {
return orderDetails.stream() return orderDetails.stream()
.filter(order -> order.getOrderItemStatus().equals(status)) .filter(order -> order.getOrderItemStatus().equals(status))
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
@ -413,7 +406,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 按月份和状态统计每月订单数量 * 按月份和状态统计每月订单数量
*/ */
private Map<String, Long> calculateMonthlyStatusCount(List<OrderDetailDTO> orderDetails, Integer status) { private Map<String, Long> calculateMonthlyStatusCount(List<OrderDetail> orderDetails, Integer status) {
return orderDetails.stream() return orderDetails.stream()
.filter(order -> order.getOrderItemStatus().equals(status)) .filter(order -> order.getOrderItemStatus().equals(status))
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
@ -425,7 +418,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 按季节和状态统计每计季节订单数量 * 按季节和状态统计每计季节订单数量
*/ */
private Map<String, Long> calculateQuarterlyStatusCount(List<OrderDetailDTO> orderDetails, Integer status) { private Map<String, Long> calculateQuarterlyStatusCount(List<OrderDetail> orderDetails, Integer status) {
return orderDetails.stream() return orderDetails.stream()
.filter(order -> order.getOrderItemStatus().equals(status)) .filter(order -> order.getOrderItemStatus().equals(status))
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
@ -437,7 +430,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 按年份和状态统计每计年订单数量 * 按年份和状态统计每计年订单数量
*/ */
private Map<String, Long> calculateYearlyStatusCount(List<OrderDetailDTO> orderDetails, Integer status) { private Map<String, Long> calculateYearlyStatusCount(List<OrderDetail> orderDetails, Integer status) {
return orderDetails.stream() return orderDetails.stream()
.filter(order -> order.getOrderItemStatus().equals(status)) .filter(order -> order.getOrderItemStatus().equals(status))
.collect(Collectors.groupingBy( .collect(Collectors.groupingBy(
@ -462,7 +455,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 构建任务分页信息 * 构建任务分页信息
*/ */
private PageInfo buildTaskPageInfo(List<OrderDetailDTO> tasks, int pageNum, int pageSize) { private PageInfo buildTaskPageInfo(List<OrderDetail> tasks, int pageNum, int pageSize) {
PageInfo pageInfo = new PageInfo(); PageInfo pageInfo = new PageInfo();
pageInfo.setPageNum(pageNum); pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize); pageInfo.setPageSize(pageSize);
@ -473,7 +466,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 获取分页后的任务列表 * 获取分页后的任务列表
*/ */
private List<OrderDetailDTO> getPagedTasks(List<OrderDetailDTO> tasks, PageInfo pageInfo) { private List<OrderDetail> getPagedTasks(List<OrderDetail> tasks, PageInfo pageInfo) {
int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize(); int start = (pageInfo.getPageNum() - 1) * pageInfo.getPageSize();
int end = Math.min(start + pageInfo.getPageSize(), tasks.size()); int end = Math.min(start + pageInfo.getPageSize(), tasks.size());
return tasks.subList(start, end); return tasks.subList(start, end);
@ -499,7 +492,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
/** /**
* 计算景区内各路线的任务分布 * 计算景区内各路线的任务分布
*/ */
public List<RouteStat> calculateRouteDistribution(List<OrderDetailDTO> orderDetails) { public List<RouteStat> calculateRouteDistribution(List<OrderDetail> orderDetails) {
// 1. 校验输入 // 1. 校验输入
if (CollectionUtils.isEmpty(orderDetails)) { if (CollectionUtils.isEmpty(orderDetails)) {
return Collections.emptyList(); return Collections.emptyList();

View File

@ -57,19 +57,4 @@
AND del_flag = 0 AND del_flag = 0
ORDER BY create_time ASC ORDER BY create_time ASC
</select> </select>
<select id="queryByDateRange" resultType="com.aircraft.modules.order.domain.dto.OrderDetailDTO">
SELECT od.*, om.order_no as orderNo
FROM fms_od_order_detail od
LEFT JOIN fms_od_order_main om ON od.order_id = om.id
WHERE od.create_time &gt;= #{startTime}
AND od.create_time &lt;= #{endTime}
</select>
<select id="getAllOrderDetail" resultType="com.aircraft.modules.order.domain.dto.OrderDetailDTO">
SELECT od.*, om.order_no as orderNo
FROM fms_od_order_detail od
LEFT JOIN fms_od_order_main om ON od.order_id = om.id
ORDER BY od.create_time DESC
</select>
</mapper> </mapper>