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