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