heheng
5 天以前 427f9796bf60fe1262131a8fd6ae6c25e02574be
排序改造
已修改3个文件
已添加1个文件
60 ■■■■■ 文件已修改
multi-common/src/main/java/com/gkhy/exam/common/utils/NaturalOrderComparator.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/domain/vo/SysDeptSaveDTOReq.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysClauseManagementServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-system/src/main/resources/mapper/system/SysFunctionalDistributionMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
multi-common/src/main/java/com/gkhy/exam/common/utils/NaturalOrderComparator.java
对比新文件
@@ -0,0 +1,46 @@
package com.gkhy.exam.common.utils;
import java.util.Comparator;
public class NaturalOrderComparator  implements Comparator<String> {
    private boolean isDigit(char ch) {
        return ch >= '0' && ch <= '9';
    }
    @Override
    public int compare(String s1, String s2) {
        if (s1 == null || s2 == null) {
            return 0; // 或根据业务决定 null 的排序位置
        }
        int i1 = 0, i2 = 0;
        while (i1 < s1.length() && i2 < s2.length()) {
            char c1 = s1.charAt(i1);
            char c2 = s2.charAt(i2);
            if (isDigit(c1) && isDigit(c2)) {
                // 比较数字部分
                long n1 = 0, n2 = 0;
                while (i1 < s1.length() && isDigit(s1.charAt(i1))) {
                    n1 = n1 * 10 + (s1.charAt(i1++) - '0');
                }
                while (i2 < s2.length() && isDigit(s2.charAt(i2))) {
                    n2 = n2 * 10 + (s2.charAt(i2++) - '0');
                }
                if (n1 != n2) {
                    return Long.compare(n1, n2);
                }
            } else {
                // 非数字字符比较
                if (c1 != c2) {
                    return Character.compare(c1, c2);
                }
                i1++;
                i2++;
            }
        }
        // 剩余长度比较
        return Integer.compare(s1.length(), s2.length());
    }
}
multi-system/src/main/java/com/gkhy/exam/system/domain/vo/SysDeptSaveDTOReq.java
@@ -24,7 +24,7 @@
    private String ancestors;
    /** 显示顺序 */
    @ApiModelProperty("显示顺序")
    @ApiModelProperty("显示顺序默认0")
    private Integer orderNum;
    /** 部门名称 */
multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysClauseManagementServiceImpl.java
@@ -1,9 +1,11 @@
package com.gkhy.exam.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.exam.common.exception.ApiException;
import com.gkhy.exam.common.utils.NaturalOrderComparator;
import com.gkhy.exam.common.utils.SecurityUtils;
import com.gkhy.exam.system.domain.SysClauseManagement;
import com.gkhy.exam.system.mapper.SysClauseManagementMapper;
@@ -12,6 +14,7 @@
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Comparator;
import java.util.List;
@Service
@@ -23,7 +26,12 @@
    public List<SysClauseManagement> getSysClauseManagements() {
        LambdaQueryWrapper<SysClauseManagement> lambdaQueryWrapper = Wrappers.<SysClauseManagement>lambdaQuery()
                .eq(SysClauseManagement::getDelFlag, "0").orderByAsc(SysClauseManagement::getClauseNum);
        return baseMapper.selectList(lambdaQueryWrapper);
        List<SysClauseManagement> sysClauseManagements = baseMapper.selectList(lambdaQueryWrapper);
        if (ObjectUtil.isNotEmpty(sysClauseManagements)){
            sysClauseManagements.sort(Comparator.comparing(SysClauseManagement::getClauseNum, new NaturalOrderComparator()));
        }
        return sysClauseManagements;
    }
    @Override
multi-system/src/main/resources/mapper/system/SysFunctionalDistributionMapper.xml
@@ -31,7 +31,7 @@
        from sys_functional_distribution a
        left join sys_dept b on a.dept_id = b.dept_id
        where 1=1 and a.company_id = #{companyId}
        order by a.clause_num asc
        order by b.order_num asc ,a.clause_num asc
    </select>
    <insert id="batchInsert">