Compare commits
2 Commits
eb8d98af01
...
675ab2f1e6
Author | SHA1 | Date | |
---|---|---|---|
![]() |
675ab2f1e6 | ||
![]() |
a1560b8169 |
@ -2,6 +2,7 @@ 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;
|
||||||
@ -37,6 +38,9 @@ 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]$");
|
||||||
@ -47,7 +51,7 @@ public class OrderDetailAnalysisController {
|
|||||||
public ResponseEntity<OrderDetailAnalysisResult<T>> analyzeAllOrderDetails() {
|
public ResponseEntity<OrderDetailAnalysisResult<T>> analyzeAllOrderDetails() {
|
||||||
try {
|
try {
|
||||||
// 1. 获取所有子单数据
|
// 1. 获取所有子单数据
|
||||||
List<OrderDetail> allDetails = orderDetailService.list();
|
List<OrderDetailDTO> allDetails = orderDetailMapper.getAllOrderDetail();
|
||||||
|
|
||||||
// 2. 校验数据
|
// 2. 校验数据
|
||||||
if (CollectionUtils.isEmpty(allDetails)) {
|
if (CollectionUtils.isEmpty(allDetails)) {
|
||||||
|
@ -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; //主单订单编号
|
||||||
|
}
|
@ -1,9 +1,11 @@
|
|||||||
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,6 +20,7 @@ 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<OrderDetail> getOrderDetailsByOrderId(Long id);
|
List<OrderDetailDTO> getAllOrderDetail();
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
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<OrderDetail> allDetails);
|
OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetailDTO> allDetails);
|
||||||
|
|
||||||
OrderDetailAnalysisResult<List<DailyStat>> analyzeByDayRange(LocalDate start, LocalDate end);
|
OrderDetailAnalysisResult<List<DailyStat>> analyzeByDayRange(LocalDate start, LocalDate end);
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ 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;
|
||||||
@ -45,7 +46,8 @@ 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
|
||||||
@ -58,14 +60,14 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
private IOrderDetailService orderDetailService;
|
private IOrderDetailService orderDetailService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetail> allDetails) {
|
public OrderDetailAnalysisResult<T> analyzeAllOrderDetails(List<OrderDetailDTO> 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<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
|
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end);
|
||||||
if (CollectionUtils.isEmpty(orders)) {
|
if (CollectionUtils.isEmpty(orders)) {
|
||||||
return buildEmptyResult();
|
return buildEmptyResult();
|
||||||
}
|
}
|
||||||
@ -107,7 +109,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<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
|
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end);
|
||||||
if (CollectionUtils.isEmpty(orders)) {
|
if (CollectionUtils.isEmpty(orders)) {
|
||||||
return buildEmptyResult();
|
return buildEmptyResult();
|
||||||
}
|
}
|
||||||
@ -146,7 +148,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<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
|
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end);
|
||||||
if (CollectionUtils.isEmpty(orders)) {
|
if (CollectionUtils.isEmpty(orders)) {
|
||||||
return buildEmptyResult();
|
return buildEmptyResult();
|
||||||
}
|
}
|
||||||
@ -194,7 +196,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<OrderDetail> orders = queryOrderDetailByDateRange(start, end);
|
List<OrderDetailDTO> orders = queryOrderDetailByDateRange(start, end);
|
||||||
if (CollectionUtils.isEmpty(orders)) {
|
if (CollectionUtils.isEmpty(orders)) {
|
||||||
return buildEmptyResult();
|
return buildEmptyResult();
|
||||||
}
|
}
|
||||||
@ -233,28 +235,33 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 根据日期范围查询订单
|
* 根据日期范围查询订单
|
||||||
*/
|
*/
|
||||||
private List<OrderDetail> queryOrderDetailByDateRange(LocalDate start, LocalDate end) {
|
private List<OrderDetailDTO> queryOrderDetailByDateRange(LocalDate start, LocalDate end) {
|
||||||
// MyBatis Plus 条件构造器:查询 create_time 在 [start, end] 范围内的订单
|
// MyBatis Plus 条件构造器:查询 create_time 在 [start, end] 范围内的订单
|
||||||
LambdaQueryWrapper<OrderDetail> queryWrapper = new LambdaQueryWrapper<>();
|
// 转换日期为包含时间的LocalDateTime
|
||||||
queryWrapper.ge(OrderDetail::getCreateTime, start.atStartOfDay()) // 开始时间:当天00:00:00
|
LocalDateTime startTime = start.atStartOfDay(); // 开始时间:当天00:00:00
|
||||||
.le(OrderDetail::getCreateTime, end.atTime(23, 59, 59)); // 结束时间:当天23:59:59
|
LocalDateTime endTime = end.atTime(23, 59, 59); // 结束时间:当天23:59:59
|
||||||
return orderDetailMapper.selectList(queryWrapper);
|
return orderDetailMapper.queryByDateRange(startTime, endTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建完整的订单分析结果
|
* 构建完整的订单分析结果
|
||||||
*/
|
*/
|
||||||
private <T> OrderDetailAnalysisResult<T> buildAnalysisResult(List<OrderDetail> orderDetails, T timeSeriesData) {
|
private <T> OrderDetailAnalysisResult<T> buildAnalysisResult(List<OrderDetailDTO> 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<OrderDetail> orderDetails) {
|
private <T> OrderDetailAnalysisResult<T> buildOrderDetailAnalysisResult(List<OrderDetailDTO> orderDetails) {
|
||||||
OrderDetailAnalysisResult<T> result = new OrderDetailAnalysisResult<>();
|
OrderDetailAnalysisResult<T> result = new OrderDetailAnalysisResult<>();
|
||||||
|
|
||||||
// 1. 基础统计指标
|
// 1. 基础统计指标
|
||||||
@ -341,7 +348,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
}
|
}
|
||||||
|
|
||||||
//计算平均任务周期
|
//计算平均任务周期
|
||||||
private double calculateAverageTaskCycle(List<OrderDetail> orderDetails) {
|
private double calculateAverageTaskCycle(List<OrderDetailDTO> orderDetails) {
|
||||||
//获取任务数
|
//获取任务数
|
||||||
List<OrderDetail> completedTasks = orderDetails.stream()
|
List<OrderDetail> completedTasks = orderDetails.stream()
|
||||||
.filter(task -> task.getOrderItemStatus() == STATUS_COMPLETED)
|
.filter(task -> task.getOrderItemStatus() == STATUS_COMPLETED)
|
||||||
@ -385,7 +392,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 按状态统计时间范围内的任务数量
|
* 按状态统计时间范围内的任务数量
|
||||||
*/
|
*/
|
||||||
private long countTasksByStatus(List<OrderDetail> tasks, Integer status) {
|
private long countTasksByStatus(List<OrderDetailDTO> tasks, Integer status) {
|
||||||
return tasks.stream()
|
return tasks.stream()
|
||||||
.filter(task -> status.equals(task.getOrderItemStatus()))
|
.filter(task -> status.equals(task.getOrderItemStatus()))
|
||||||
.count();
|
.count();
|
||||||
@ -394,7 +401,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 按日期和状态统计每日订单数量
|
* 按日期和状态统计每日订单数量
|
||||||
*/
|
*/
|
||||||
private Map<String, Long> calculateDailyStatusCount(List<OrderDetail> orderDetails, Integer status) {
|
private Map<String, Long> calculateDailyStatusCount(List<OrderDetailDTO> 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(
|
||||||
@ -406,7 +413,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 按月份和状态统计每月订单数量
|
* 按月份和状态统计每月订单数量
|
||||||
*/
|
*/
|
||||||
private Map<String, Long> calculateMonthlyStatusCount(List<OrderDetail> orderDetails, Integer status) {
|
private Map<String, Long> calculateMonthlyStatusCount(List<OrderDetailDTO> 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(
|
||||||
@ -418,7 +425,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 按季节和状态统计每计季节订单数量
|
* 按季节和状态统计每计季节订单数量
|
||||||
*/
|
*/
|
||||||
private Map<String, Long> calculateQuarterlyStatusCount(List<OrderDetail> orderDetails, Integer status) {
|
private Map<String, Long> calculateQuarterlyStatusCount(List<OrderDetailDTO> 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(
|
||||||
@ -430,7 +437,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 按年份和状态统计每计年订单数量
|
* 按年份和状态统计每计年订单数量
|
||||||
*/
|
*/
|
||||||
private Map<String, Long> calculateYearlyStatusCount(List<OrderDetail> orderDetails, Integer status) {
|
private Map<String, Long> calculateYearlyStatusCount(List<OrderDetailDTO> 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(
|
||||||
@ -455,7 +462,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 构建任务分页信息
|
* 构建任务分页信息
|
||||||
*/
|
*/
|
||||||
private PageInfo buildTaskPageInfo(List<OrderDetail> tasks, int pageNum, int pageSize) {
|
private PageInfo buildTaskPageInfo(List<OrderDetailDTO> 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);
|
||||||
@ -466,7 +473,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 获取分页后的任务列表
|
* 获取分页后的任务列表
|
||||||
*/
|
*/
|
||||||
private List<OrderDetail> getPagedTasks(List<OrderDetail> tasks, PageInfo pageInfo) {
|
private List<OrderDetailDTO> getPagedTasks(List<OrderDetailDTO> 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);
|
||||||
@ -492,7 +499,7 @@ public class OrderDetailAnalysisServiceImpl implements OrderDetailAnalysisServic
|
|||||||
/**
|
/**
|
||||||
* 计算景区内各路线的任务分布
|
* 计算景区内各路线的任务分布
|
||||||
*/
|
*/
|
||||||
public List<RouteStat> calculateRouteDistribution(List<OrderDetail> orderDetails) {
|
public List<RouteStat> calculateRouteDistribution(List<OrderDetailDTO> orderDetails) {
|
||||||
// 1. 校验输入
|
// 1. 校验输入
|
||||||
if (CollectionUtils.isEmpty(orderDetails)) {
|
if (CollectionUtils.isEmpty(orderDetails)) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
@ -57,4 +57,19 @@
|
|||||||
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