From 427f9796bf60fe1262131a8fd6ae6c25e02574be Mon Sep 17 00:00:00 2001 From: heheng <475597332@qq.com> Date: 星期二, 08 七月 2025 10:27:37 +0800 Subject: [PATCH] 排序改造 --- multi-common/src/main/java/com/gkhy/exam/common/utils/NaturalOrderComparator.java | 46 ++++++++++++++++++++++++++++++++++++++++++++++ multi-system/src/main/java/com/gkhy/exam/system/domain/vo/SysDeptSaveDTOReq.java | 2 +- multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysClauseManagementServiceImpl.java | 10 +++++++++- multi-system/src/main/resources/mapper/system/SysFunctionalDistributionMapper.xml | 2 +- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/multi-common/src/main/java/com/gkhy/exam/common/utils/NaturalOrderComparator.java b/multi-common/src/main/java/com/gkhy/exam/common/utils/NaturalOrderComparator.java new file mode 100644 index 0000000..af124ed --- /dev/null +++ b/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()); + } +} diff --git a/multi-system/src/main/java/com/gkhy/exam/system/domain/vo/SysDeptSaveDTOReq.java b/multi-system/src/main/java/com/gkhy/exam/system/domain/vo/SysDeptSaveDTOReq.java index 08aea38..8def8ad 100644 --- a/multi-system/src/main/java/com/gkhy/exam/system/domain/vo/SysDeptSaveDTOReq.java +++ b/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; /** 部门名称 */ diff --git a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysClauseManagementServiceImpl.java b/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysClauseManagementServiceImpl.java index 674b374..a9811d1 100644 --- a/multi-system/src/main/java/com/gkhy/exam/system/service/impl/SysClauseManagementServiceImpl.java +++ b/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 diff --git a/multi-system/src/main/resources/mapper/system/SysFunctionalDistributionMapper.xml b/multi-system/src/main/resources/mapper/system/SysFunctionalDistributionMapper.xml index a08c601..7d5b3c4 100644 --- a/multi-system/src/main/resources/mapper/system/SysFunctionalDistributionMapper.xml +++ b/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"> -- Gitblit v1.9.2