Commit d8e1610495fb3dfc66c1d368d4e26af952e8d37f
1 parent
eca93073
feat: enhance MyBatis utility for sorting and update SQL aliases in TradeOrderStatisticsMapper
Showing
3 changed files
with
25 additions
and
11 deletions
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} |