Compare commits
No commits in common. "675ab2f1e677c01f9ee60e9a39253632e6b528cb" and "eb8d98af011f54266a2fc2793583cd8560098ef4" have entirely different histories.
675ab2f1e6
...
eb8d98af01
@ -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)) {
|
||||||
|
@ -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; //主单订单编号
|
|
||||||
}
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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 >= #{startTime}
|
|
||||||
AND od.create_time <= #{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>
|
Loading…
Reference in New Issue
Block a user