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

This commit is contained in:
YunaiV 2025-07-08 09:39:44 +08:00
parent eca9307344
commit d8e1610495
3 changed files with 25 additions and 11 deletions

View File

@ -42,6 +42,7 @@ public interface BaseMapperX<T> extends MPJBaseMapper<T> {
default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) { default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) {
// 特殊不分页直接查询全部 // 特殊不分页直接查询全部
if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) { if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
MyBatisUtils.addOrder(queryWrapper, sortingFields);
List<T> list = selectList(queryWrapper); List<T> list = selectList(queryWrapper);
return new PageResult<>(list, (long) list.size()); return new PageResult<>(list, (long) list.size());
} }

View File

@ -1,6 +1,6 @@
package cn.iocoder.yudao.framework.mybatis.core.util; package cn.iocoder.yudao.framework.mybatis.core.util;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.func.Func1; import cn.hutool.core.lang.func.Func1;
import cn.hutool.core.lang.func.LambdaUtil; import cn.hutool.core.lang.func.LambdaUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
@ -8,6 +8,8 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.SortingField; import cn.iocoder.yudao.framework.common.pojo.SortingField;
import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum; import cn.iocoder.yudao.framework.mybatis.core.enums.DbTypeEnum;
import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
@ -20,7 +22,6 @@ import net.sf.jsqlparser.schema.Table;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* MyBatis 工具类 * MyBatis 工具类
@ -37,15 +38,27 @@ public class MyBatisUtils {
// 页码 + 数量 // 页码 + 数量
Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize()); Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
// 排序字段 // 排序字段
if (!CollectionUtil.isEmpty(sortingFields)) { if (CollUtil.isNotEmpty(sortingFields)) {
page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder()) for (SortingField sortingField : sortingFields) {
? OrderItem.asc(StrUtil.toUnderlineCase(sortingField.getField())) page.addOrder(new OrderItem().setAsc(SortingField.ORDER_ASC.equals(sortingField.getOrder()))
: OrderItem.desc(StrUtil.toUnderlineCase(sortingField.getField()))) .setColumn(StrUtil.toUnderlineCase(sortingField.getField())));
.collect(Collectors.toList())); }
} }
return page; return page;
} }
public static <T> void addOrder(Wrapper<T> wrapper, Collection<SortingField> sortingFields) {
if (CollUtil.isEmpty(sortingFields)) {
return;
}
QueryWrapper<T> query = (QueryWrapper<T>) wrapper;
for (SortingField sortingField : sortingFields) {
query.orderBy(true,
SortingField.ORDER_ASC.equals(sortingField.getOrder()),
StrUtil.toUnderlineCase(sortingField.getField()));
}
}
/** /**
* 将拦截器添加到链中 * 将拦截器添加到链中
* 由于 MybatisPlusInterceptor 不支持添加拦截器所以只能全量设置 * 由于 MybatisPlusInterceptor 不支持添加拦截器所以只能全量设置

View File

@ -76,8 +76,8 @@
<select id="selectListByPayTimeBetweenAndGroupByMonth" <select id="selectListByPayTimeBetweenAndGroupByMonth"
resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO"> resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderTrendRespVO">
SELECT DATE_FORMAT(pay_time, '%Y-%m') AS date, SELECT DATE_FORMAT(pay_time, '%Y-%m') AS date,
COUNT(1) AS orderPayCount, COUNT(1) AS order_pay_count,
SUM(pay_price) AS orderPayPrice SUM(pay_price) AS order_pay_price
FROM trade_order FROM trade_order
WHERE pay_status = TRUE WHERE pay_status = TRUE
AND create_time BETWEEN #{beginTime} AND #{endTime} AND create_time BETWEEN #{beginTime} AND #{endTime}
@ -95,8 +95,8 @@
<select id="selectPaySummaryByPayStatusAndPayTimeBetween" <select id="selectPaySummaryByPayStatusAndPayTimeBetween"
resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO"> resultType="cn.iocoder.yudao.module.statistics.controller.admin.trade.vo.TradeOrderSummaryRespVO">
SELECT IFNULL(SUM(pay_price), 0) AS orderPayPrice, SELECT IFNULL(SUM(pay_price), 0) AS order_pay_price,
COUNT(1) AS orderPayCount COUNT(1) AS order_pay_count
FROM trade_order FROM trade_order
WHERE pay_status = #{payStatus} WHERE pay_status = #{payStatus}
AND pay_time BETWEEN #{beginTime} AND #{endTime} AND pay_time BETWEEN #{beginTime} AND #{endTime}