Commit d8e1610495fb3dfc66c1d368d4e26af952e8d37f

Authored by YunaiV
1 parent eca93073

feat: enhance MyBatis utility for sorting and update SQL aliases in TradeOrderStatisticsMapper

yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/mapper/BaseMapperX.java
@@ -42,6 +42,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> { @@ -42,6 +42,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
42 default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) { 42 default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) {
43 // 特殊:不分页,直接查询全部 43 // 特殊:不分页,直接查询全部
44 if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { 44 if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
  45 + MyBatisUtils.addOrder(queryWrapper, sortingFields);
45 List<T> list = selectList(queryWrapper); 46 List<T> list = selectList(queryWrapper);
46 return new PageResult<>(list, (long) list.size()); 47 return new PageResult<>(list, (long) list.size());
47 } 48 }
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java
1 package cn.iocoder.yudao.framework.mybatis.core.util; 1 package cn.iocoder.yudao.framework.mybatis.core.util;
2 2
3 -import cn.hutool.core.collection.CollectionUtil; 3 +import cn.hutool.core.collection.CollUtil;
4 import cn.hutool.core.lang.func.Func1; 4 import cn.hutool.core.lang.func.Func1;
5 import cn.hutool.core.lang.func.LambdaUtil; 5 import cn.hutool.core.lang.func.LambdaUtil;
6 import cn.hutool.core.util.StrUtil; 6 import cn.hutool.core.util.StrUtil;
@@ -8,6 +8,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -8,6 +8,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
8 import cn.iocoder.yudao.framework.common.pojo.SortingField; 8 import cn.iocoder.yudao.framework.common.pojo.SortingField;
9 import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum; 9 import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
10 import com.baomidou.mybatisplus.annotation.DbType; 10 import com.baomidou.mybatisplus.annotation.DbType;
  11 +import com.baomidou.mybatisplus.core.conditions.Wrapper;
  12 +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
11 import com.baomidou.mybatisplus.core.metadata.OrderItem; 13 import com.baomidou.mybatisplus.core.metadata.OrderItem;
12 import com.baomidou.mybatisplus.core.toolkit.StringPool; 14 import com.baomidou.mybatisplus.core.toolkit.StringPool;
13 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; 15 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
@@ -20,7 +22,6 @@ import net.sf.jsqlparser.schema.Table; @@ -20,7 +22,6 @@ import net.sf.jsqlparser.schema.Table;
20 import java.util.ArrayList; 22 import java.util.ArrayList;
21 import java.util.Collection; 23 import java.util.Collection;
22 import java.util.List; 24 import java.util.List;
23 -import java.util.stream.Collectors;  
24 25
25 /** 26 /**
26 * MyBatis 工具类 27 * MyBatis 工具类
@@ -37,15 +38,27 @@ public class MyBatisUtils { @@ -37,15 +38,27 @@ public class MyBatisUtils {
37 // 页码 + 数量 38 // 页码 + 数量
38 Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); 39 Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
39 // 排序字段 40 // 排序字段
40 - if (!CollectionUtil.isEmpty(sortingFields)) {  
41 - page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder())  
42 - ? OrderItem.asc(StrUtil.toUnderlineCase(sortingField.getField()))  
43 - : OrderItem.desc(StrUtil.toUnderlineCase(sortingField.getField())))  
44 - .collect(Collectors.toList())); 41 + if (CollUtil.isNotEmpty(sortingFields)) {
  42 + for (SortingField sortingField : sortingFields) {
  43 + page.addOrder(new OrderItem().setAsc(SortingField.ORDER_ASC.equals(sortingField.getOrder()))
  44 + .setColumn(StrUtil.toUnderlineCase(sortingField.getField())));
  45 + }
45 } 46 }
46 return page; 47 return page;
47 } 48 }
48 49
  50 + public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
  51 + if (CollUtil.isEmpty(sortingFields)) {
  52 + return;
  53 + }
  54 + QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
  55 + for (SortingField sortingField : sortingFields) {
  56 + query.orderBy(true,
  57 + SortingField.ORDER_ASC.equals(sortingField.getOrder()),
  58 + StrUtil.toUnderlineCase(sortingField.getField()));
  59 + }
  60 + }
  61 +
49 /** 62 /**
50 * 将拦截器添加到链中 63 * 将拦截器添加到链中
51 * 由于 MybatisPlusInterceptor 不支持添加拦截器,所以只能全量设置 64 * 由于 MybatisPlusInterceptor 不支持添加拦截器,所以只能全量设置
yudao-module-mall/yudao-module-statistics/src/main/resources/mapper/trade/TradeOrderStatisticsMapper.xml
@@ -76,8 +76,8 @@ @@ -76,8 +76,8 @@
76 <select id="selectListByPayTimeBetweenAndGroupByMonth" 76 <select id="selectListByPayTimeBetweenAndGroupByMonth"
77 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO"> 77 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO">
78 SELECT DATE_FORMAT(pay_time, '%Y-%m') AS date, 78 SELECT DATE_FORMAT(pay_time, '%Y-%m') AS date,
79 - COUNT(1) AS orderPayCount,  
80 - SUM(pay_price) AS orderPayPrice 79 + COUNT(1) AS order_pay_count,
  80 + SUM(pay_price) AS order_pay_price
81 FROM trade_order 81 FROM trade_order
82 WHERE pay_status = TRUE 82 WHERE pay_status = TRUE
83 AND create_time BETWEEN #{beginTime} AND #{endTime} 83 AND create_time BETWEEN #{beginTime} AND #{endTime}
@@ -95,8 +95,8 @@ @@ -95,8 +95,8 @@
95 95
96 <select id="selectPaySummaryByPayStatusAndPayTimeBetween" 96 <select id="selectPaySummaryByPayStatusAndPayTimeBetween"
97 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO"> 97 resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO">
98 - SELECT IFNULL(SUM(pay_price), 0) AS orderPayPrice,  
99 - COUNT(1) AS orderPayCount 98 + SELECT IFNULL(SUM(pay_price), 0) AS order_pay_price,
  99 + COUNT(1) AS order_pay_count
100 FROM trade_order 100 FROM trade_order
101 WHERE pay_status = #{payStatus} 101 WHERE pay_status = #{payStatus}
102 AND pay_time BETWEEN #{beginTime} AND #{endTime} 102 AND pay_time BETWEEN #{beginTime} AND #{endTime}