From d940590c25d7381ba7bc08b068d223d7aa0b9c77 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期四, 30 四月 2026 20:43:12 +0800
Subject: [PATCH] 南华附一 和  登陆优化

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java |  172 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 103 insertions(+), 69 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
index d242f63..bb35beb 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
@@ -28,6 +28,8 @@
 
 import javax.validation.Validator;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 /**
@@ -177,87 +179,103 @@
     public SysUser selectUserByUserName2(String userName) {
         String[] split = userName.split("&");
         SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], null);
+        if (Objects.isNull(sysUser)) return sysUser;
 
-        //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌锟�?
+        boolean isAdmin = StringUtils.isNotEmpty(split[0]) && "admin".equals(split[0]);
         IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
-        Map<String, String> userOrgInfo = userExtInfoService.getUserOrgInfo(
-                sysUser.getUserId().toString(),
-                split[1],
-                split[2]);
+        java.util.concurrent.Executor executor = SpringUtils.getBean("threadPoolTaskExecutor");
+
+        // === 骞惰鏌ヨ: 鐢ㄦ埛鏈烘瀯淇℃伅 + 閮ㄩ棬鍒楄〃 ===
+        CompletableFuture<Map<String, String>> orgInfoFuture = CompletableFuture.supplyAsync(() ->
+                userExtInfoService.getUserOrgInfo(sysUser.getUserId().toString(), split[1], split[2]), executor);
+
+        CompletableFuture<List<SysDept>> deptsFuture;
+        if (isAdmin) {
+            SysDept dept = new SysDept();
+            dept.setOrgid(split[1]);
+            deptsFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(dept), executor);
+        } else {
+            deptsFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId()), executor);
+        }
+
+        // 绛夊緟鏈烘瀯淇℃伅
+        Map<String, String> userOrgInfo = new HashMap<>();
+        try {
+            userOrgInfo = orgInfoFuture.get(5, TimeUnit.SECONDS);
+        } catch (Exception e) {
+            log.warn("鑾峰彇鐢ㄦ埛鏈烘瀯淇℃伅瓒呮椂鎴栧紓甯�", e);
+        }
         if (!userOrgInfo.isEmpty()) {
             sysUser.setOrgid(userOrgInfo.get("orgid"));
             sysUser.setCampusid(userOrgInfo.get("campusid"));
         }
 
-        if (Objects.isNull(sysUser)) return sysUser;
-        List<SysDept> sysDepts = null;
-        if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
-            SysDept dept = new SysDept();
-            dept.setOrgid(split[1]);
-            sysDepts = sysDeptMapper.selectDeptList(dept);
-        } else {
-            sysDepts = sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
+        // 绛夊緟閮ㄩ棬鍒楄〃
+        List<SysDept> sysDepts = new ArrayList<>();
+        try {
+            sysDepts = deptsFuture.get(5, TimeUnit.SECONDS);
+        } catch (Exception e) {
+            log.warn("鑾峰彇閮ㄩ棬鍒楄〃瓒呮椂鎴栧紓甯�", e);
         }
+
         List<Long> deptIds = new ArrayList<>();
         for (SysDept sysDept : sysDepts) {
             deptIds.add(sysDept.getDeptId());
         }
-        SysUserDept sysUserDept = new SysUserDept();
-        sysUserDept.setUserId(sysUser.getUserId());
-        sysUserDept.setDeptType(sysUser.getSearchscope());
-        sysUserDept.setOrgid(split[1]);
+
+        // === 鏌ヨ绉戝鍜岀梾鍖轰俊鎭� ===
         List<SysUserDept> sysUserDeptKSs = null;
         List<SysUserDept> sysUserDeptBQs = null;
-        if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("0")) {
-            if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
-                sysUserDept.setUserId(null);
-            }
-            sysUserDept.setDeptType("1");
-            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
-            sysUserDept.setDeptType("2");
-            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
-            //濡傛灉鏄痑dmin锛岄渶瑕佸sysUserDeptBQs锛宻ysUserDeptBQs鍘婚噸
-            if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
-                //濡傛灉鏄痑dmin锛屽彧鑳藉幓sys_dept鍘诲彇鏁版嵁
-                SysDept dept = new SysDept();
-                dept.setOrgid(split[1]);
-                dept.setDeptType("1");
-                sysDepts = sysDeptMapper.selectDeptList(dept);
-                sysUserDeptKSs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
-
-                dept.setDeptType("2");
-                sysDepts = sysDeptMapper.selectDeptList(dept);
-                sysUserDeptBQs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
-
-                List<SysUserDept> distinctUserDepts = new ArrayList<>();
-                Set<String> uniqueDeptCodes = new HashSet<>();
-                for (SysUserDept userDept : sysUserDeptKSs) {
-                    String deptCode = userDept.getDeptCode();
-                    if (StringUtils.isNotEmpty(deptCode) && !uniqueDeptCodes.contains(deptCode)) {
-                        distinctUserDepts.add(userDept);
-                        uniqueDeptCodes.add(deptCode);
+        if (StringUtils.isNotEmpty(sysUser.getSearchscope())) {
+            if ("0".equals(sysUser.getSearchscope())) {
+                if (isAdmin) {
+                    // admin鐩存帴浠巗ys_dept鏌ヨ锛岃烦杩囨棤鎰忎箟鐨剆electSysUserDeptList
+                    SysDept deptKS = new SysDept();
+                    deptKS.setOrgid(split[1]);
+                    deptKS.setDeptType("1");
+                    SysDept deptBQ = new SysDept();
+                    deptBQ.setOrgid(split[1]);
+                    deptBQ.setDeptType("2");
+                    CompletableFuture<List<SysDept>> ksFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(deptKS), executor);
+                    CompletableFuture<List<SysDept>> bqFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(deptBQ), executor);
+                    try {
+                        sysUserDeptKSs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(ksFuture.get(5, TimeUnit.SECONDS), SysUserDept.class));
+                        sysUserDeptBQs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(bqFuture.get(5, TimeUnit.SECONDS), SysUserDept.class));
+                    } catch (Exception e) {
+                        log.warn("鑾峰彇admin绉戝/鐥呭尯淇℃伅瓒呮椂鎴栧紓甯�", e);
+                    }
+                } else {
+                    // 骞惰鏌ヨ绉戝鍜岀梾鍖�
+                    SysUserDept queryKS = new SysUserDept();
+                    queryKS.setUserId(sysUser.getUserId());
+                    queryKS.setDeptType("1");
+                    queryKS.setOrgid(split[1]);
+                    SysUserDept queryBQ = new SysUserDept();
+                    queryBQ.setUserId(sysUser.getUserId());
+                    queryBQ.setDeptType("2");
+                    queryBQ.setOrgid(split[1]);
+                    CompletableFuture<List<SysUserDept>> ksFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectSysUserDeptList(queryKS), executor);
+                    CompletableFuture<List<SysUserDept>> bqFuture = CompletableFuture.supplyAsync(() -> sysUserDeptMapper.selectSysUserDeptList(queryBQ), executor);
+                    try {
+                        sysUserDeptKSs = ksFuture.get(5, TimeUnit.SECONDS);
+                        sysUserDeptBQs = bqFuture.get(5, TimeUnit.SECONDS);
+                    } catch (Exception e) {
+                        log.warn("鑾峰彇绉戝/鐥呭尯淇℃伅瓒呮椂鎴栧紓甯�", e);
                     }
                 }
-
-                List<SysUserDept> distinctUserBQs = new ArrayList<>();
-                Set<String> uniqueBQCodes = new HashSet<>();
-                for (SysUserDept userDept : sysUserDeptBQs) {
-                    String deptCode = userDept.getDeptCode();
-                    if (StringUtils.isNotEmpty(deptCode) && !uniqueBQCodes.contains(deptCode)) {
-                        distinctUserBQs.add(userDept);
-                        uniqueBQCodes.add(deptCode);
-                    }
-                }
-                sysUserDeptKSs = distinctUserDepts;
-                sysUserDeptBQs = distinctUserBQs;
+            } else if ("1".equals(sysUser.getSearchscope())) {
+                SysUserDept queryKS = new SysUserDept();
+                queryKS.setUserId(sysUser.getUserId());
+                queryKS.setDeptType("1");
+                queryKS.setOrgid(split[1]);
+                sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(queryKS);
+            } else if ("2".equals(sysUser.getSearchscope())) {
+                SysUserDept queryBQ = new SysUserDept();
+                queryBQ.setUserId(sysUser.getUserId());
+                queryBQ.setDeptType("2");
+                queryBQ.setOrgid(split[1]);
+                sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(queryBQ);
             }
-
-        } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("1")) {
-            sysUserDept.setDeptType("1");
-            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
-        } else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("2")) {
-            sysUserDept.setDeptType("2");
-            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
         }
 
         sysUser.setDepts(deptIds);
@@ -285,16 +303,32 @@
                 if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("deptName", sud.getDeptName());
                 list.add(map);
             }
-            //鑾峰彇褰撳墠鏈烘瀯鐨勬弧鎰忓害闂鍒嗙被
             sysUser.setBelongDepts(list);
-            Map<String, Object> satisfactionCategories = new HashMap<>();
-            //璁剧疆褰撳墠鐢ㄦ埛鐨勫0闊抽棶棰樺垎绫诲拰闂嵎闂鍒嗙被
-            IUserExtInfoService userExtInfoService3 = SpringUtils.getBean(IUserExtInfoService.class);
-            sysUser.setSatisfactionCategories(userExtInfoService3.getSatisfactionCategories(sysUser.getOrgid()));
+            // 璁剧疆婊℃剰搴﹀垎绫伙紙璧扮紦瀛橈級
+            sysUser.setSatisfactionCategories(userExtInfoService.getSatisfactionCategories(sysUser.getOrgid()));
         }
         return sysUser;
     }
 
+    /**
+     * 鎸塪eptCode鍘婚噸
+     */
+    private List<SysUserDept> distinctByDeptCode(List<SysUserDept> list) {
+        if (CollectionUtils.isEmpty(list)) {
+            return list;
+        }
+        List<SysUserDept> result = new ArrayList<>();
+        Set<String> uniqueCodes = new HashSet<>();
+        for (SysUserDept item : list) {
+            String deptCode = item.getDeptCode();
+            if (StringUtils.isNotEmpty(deptCode) && !uniqueCodes.contains(deptCode)) {
+                result.add(item);
+                uniqueCodes.add(deptCode);
+            }
+        }
+        return result;
+    }
+
     @Override
     public SysUser selectUserByUserNameAndDeptId(String userName) {
         String[] split = userName.split("&");

--
Gitblit v1.9.3