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