Просмотр исходного кода

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

YunaiV месяцев назад: 11
Родитель
Сommit
d8e1610495

+ 1 - 0
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> {
     default PageResult<T> selectPage(PageParam pageParam, Collection<SortingField> sortingFields, @Param("ew") Wrapper<T> queryWrapper) {
         // 特殊:不分页,直接查询全部
         if (PageParam.PAGE_SIZE_NONE.equals(pageParam.getPageSize())) {
+            MyBatisUtils.addOrder(queryWrapper, sortingFields);
             List<T> list = selectList(queryWrapper);
             return new PageResult<>(list, (long) list.size());
         }

+ 20 - 7
yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/util/MyBatisUtils.java

@@ -1,6 +1,6 @@
 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.LambdaUtil;
 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.mybatis.core.enums.DbTypeEnum;
 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.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
@@ -20,7 +22,6 @@ import net.sf.jsqlparser.schema.Table;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * MyBatis 工具类
@@ -37,15 +38,27 @@ public class MyBatisUtils {
         // 页码 + 数量
         Page<T> page = new Page<>(pageParam.getPageNo(), pageParam.getPageSize());
         // 排序字段
-        if (!CollectionUtil.isEmpty(sortingFields)) {
-            page.addOrder(sortingFields.stream().map(sortingField -> SortingField.ORDER_ASC.equals(sortingField.getOrder())
-                            ? OrderItem.asc(StrUtil.toUnderlineCase(sortingField.getField()))
-                            : OrderItem.desc(StrUtil.toUnderlineCase(sortingField.getField())))
-                    .collect(Collectors.toList()));
+        if (CollUtil.isNotEmpty(sortingFields)) {
+            for (SortingField sortingField : sortingFields) {
+                page.addOrder(new OrderItem().setAsc(SortingField.ORDER_ASC.equals(sortingField.getOrder()))
+                        .setColumn(StrUtil.toUnderlineCase(sortingField.getField())));
+            }
         }
         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 不支持添加拦截器,所以只能全量设置

+ 4 - 4
yudao-module-mall/yudao-module-statistics/src/main/resources/mapper/trade/TradeOrderStatisticsMapper.xml

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