From 1c82e21ac936241bf56109e7fff87446b0b6a131 Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期一, 19 十月 2026 15:31:22 +0800
Subject: [PATCH] 【丽水】新增接口 修复Sys_User_Dept数据缺失问题
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java | 524 +++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 387 insertions(+), 137 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 0a9d673..f403771 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
@@ -4,23 +4,27 @@
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.*;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.TreeUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.domain.SysPost;
import com.ruoyi.system.domain.SysUserPost;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.system.service.ISysUserService;
-import com.smartor.domain.SvyTaskVO;
-import com.smartor.domain.SysUserOrg;
-import com.smartor.mapper.SysUserDeptMapper;
-import com.smartor.mapper.SysUserOrgMapper;
+import com.ruoyi.common.core.service.IUserExtInfoService;
+import com.ruoyi.system.mapper.SysUserDeptMapper;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -29,10 +33,13 @@
import javax.validation.Validator;
import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
/**
- * 鐢ㄦ埛 涓氬姟灞傚鐞�
+ * 鐢ㄦ埛 涓氬姟灞傚锟�?
*
* @author ruoyi
*/
@@ -40,17 +47,21 @@
public class SysUserServiceImpl implements ISysUserService {
private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class);
+ private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
@Autowired
private SysUserMapper userMapper;
@Autowired
- private SysUserOrgMapper sysUserOrgMapper;
+ private ISysDeptService sysDeptService;
@Autowired
private SysDeptMapper sysDeptMapper;
@Autowired
+ @Qualifier("sysUserDeptSystemMapper")
private SysUserDeptMapper sysUserDeptMapper;
+
@Autowired
private SysRoleMapper roleMapper;
@@ -92,7 +103,7 @@
}
/**
- * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛�
+ * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪锟�?
*
* @param user 鐢ㄦ埛淇℃伅
* @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
@@ -104,7 +115,7 @@
}
/**
- * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛�
+ * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪锟�?
*
* @param user 鐢ㄦ埛淇℃伅
* @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅
@@ -116,9 +127,9 @@
}
/**
- * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴�
+ * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤锟�?
*
- * @param userName 鐢ㄦ埛鍚�
+ * @param userName 鐢ㄦ埛锟�?
* @return 鐢ㄦ埛瀵硅薄淇℃伅
*/
@Override
@@ -132,19 +143,20 @@
SysUserDept sysUserDept = new SysUserDept();
sysUserDept.setUserId(sysUser.getUserId());
sysUserDept.setDeptType(sysUser.getSearchscope());
+ sysUserDept.setOrgid(sysUser.getOrgid());
List<SysUserDept> sysUserDeptKSs = null;
List<SysUserDept> sysUserDeptBQs = null;
if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("0")) {
sysUserDept.setDeptType("1");
- sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+ sysUserDeptKSs = selectLeafSysDeptList(sysUserDept);
sysUserDept.setDeptType("2");
- sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+ sysUserDeptBQs = selectLeafSysDeptList(sysUserDept);
} else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("1")) {
sysUserDept.setDeptType("1");
- sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+ sysUserDeptKSs = selectLeafSysDeptList(sysUserDept);
} else if (StringUtils.isNotEmpty(sysUser.getSearchscope()) && sysUser.getSearchscope().equals("2")) {
sysUserDept.setDeptType("2");
- sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+ sysUserDeptBQs = selectLeafSysDeptList(sysUserDept);
}
sysUser.setDepts(deptIds);
@@ -179,87 +191,105 @@
public SysUser selectUserByUserName2(String userName) {
String[] split = userName.split("&");
SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], null);
-
- //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌鍖�
- SysUserOrg sysUserOrg = new SysUserOrg();
- sysUserOrg.setUserId(sysUser.getUserId().toString());
- sysUserOrg.setOrgid(split[1].equals("null") ? "" : split[1]);
- sysUserOrg.setCampusid(split[2].equals("null") ? "" : split[2]);
- List<SysUserOrg> sysUserOrgs = sysUserOrgMapper.selectSysUserOrgList(sysUserOrg);
- if (!CollectionUtils.isEmpty(sysUserOrgs)) {
- sysUser.setOrgid(sysUserOrgs.get(0).getOrgid());
- sysUser.setCampusid(sysUserOrgs.get(0).getCampusid());
- }
-
if (Objects.isNull(sysUser)) return sysUser;
- List<SysDept> sysDepts = null;
- if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
+ //杩欓噷鍙崱鐢ㄦ埛绫诲瀷涓衡�滄偅鑰呪�濈殑
+ if (sysUser.getUserType().equals("鎮h��") && StringUtils.isNotEmpty(split[3]) && !split[3].equals("null") && !sysUser.getUserType().equals(split[3].trim()))
+ throw new BaseException("褰撳墠鐢ㄦ埛绫诲瀷涓庣櫥褰曠敤鎴风被鍨嬩笉涓�鑷�");
+
+ boolean isAdmin = StringUtils.isNotEmpty(split[0]) && "admin".equals(split[0]);
+ IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
+ 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]);
- sysDepts = sysDeptMapper.selectDeptList(dept);
+ deptsFuture = CompletableFuture.supplyAsync(() -> sysDeptMapper.selectDeptList(dept), executor);
} else {
- sysDepts = sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
+ 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"));
+ }
+
+ // 绛夊緟閮ㄩ棬鍒楄〃
+ 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(() -> selectLeafSysDeptForAdmin(deptKS), executor);
+ CompletableFuture<List<SysDept>> bqFuture = CompletableFuture.supplyAsync(() -> selectLeafSysDeptForAdmin(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(() -> selectLeafSysDeptList(queryKS), executor);
+ CompletableFuture<List<SysUserDept>> bqFuture = CompletableFuture.supplyAsync(() -> selectLeafSysDeptList(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 = selectLeafSysDeptList(queryKS);
+ } else if ("2".equals(sysUser.getSearchscope())) {
+ SysUserDept queryBQ = new SysUserDept();
+ queryBQ.setUserId(sysUser.getUserId());
+ queryBQ.setDeptType("2");
+ queryBQ.setOrgid(split[1]);
+ sysUserDeptBQs = selectLeafSysDeptList(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);
@@ -288,8 +318,29 @@
list.add(map);
}
sysUser.setBelongDepts(list);
+ // 璁剧疆婊℃剰搴﹀垎绫伙紙璧扮紦瀛橈級
+ 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
@@ -300,15 +351,12 @@
}
SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], split[2]);
- //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌鍖�
- SysUserOrg sysUserOrg = new SysUserOrg();
- sysUserOrg.setUserId(sysUser.getUserId().toString());
- sysUserOrg.setOrgid(split[1].equals("null") ? "" : split[1]);
- sysUserOrg.setCampusid(split[3].equals("null") ? "" : split[3]);
- List<SysUserOrg> sysUserOrgs = sysUserOrgMapper.selectSysUserOrgList(sysUserOrg);
- if (!CollectionUtils.isEmpty(sysUserOrgs)) {
- sysUser.setOrgid(sysUserOrgs.get(0).getOrgid());
- sysUser.setCampusid(sysUserOrgs.get(0).getCampusid());
+ //鑾峰彇褰撳墠鐧婚檰浜虹殑鏈烘瀯鍜岄櫌锟�?
+ IUserExtInfoService userExtInfoService2 = SpringUtils.getBean(IUserExtInfoService.class);
+ Map<String, String> userOrgInfo2 = userExtInfoService2.getUserOrgInfo(sysUser.getUserId().toString(), split[1], split[3]);
+ if (!userOrgInfo2.isEmpty()) {
+ sysUser.setOrgid(userOrgInfo2.get("orgid"));
+ sysUser.setCampusid(userOrgInfo2.get("campusid"));
}
log.info("selectUserByUserNameAndDeptId鐨剆ysUser鐨勫�间负锛歿}", sysUser);
@@ -336,20 +384,20 @@
sysUserDept.setUserId(null);
}
sysUserDept.setDeptType("1");
- sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+ sysUserDeptKSs = selectLeafSysDeptList(sysUserDept);
sysUserDept.setDeptType("2");
- sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+ sysUserDeptBQs = selectLeafSysDeptList(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);
+ sysDepts = selectLeafSysDeptForAdmin(dept);
sysUserDeptKSs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
dept.setDeptType("2");
- sysDepts = sysDeptMapper.selectDeptList(dept);
+ sysDepts = selectLeafSysDeptForAdmin(dept);
sysUserDeptBQs = DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
List<SysUserDept> distinctUserDepts = new ArrayList<>();
@@ -435,7 +483,7 @@
/**
* 鏌ヨ鐢ㄦ埛鎵�灞炶鑹茬粍
*
- * @param userName 鐢ㄦ埛鍚�
+ * @param userName 鐢ㄦ埛锟�?
* @return 缁撴灉
*/
@Override
@@ -450,7 +498,7 @@
/**
* 鏌ヨ鐢ㄦ埛鎵�灞炲矖浣嶇粍
*
- * @param userName 鐢ㄦ埛鍚�
+ * @param userName 鐢ㄦ埛锟�?
* @return 缁撴灉
*/
@Override
@@ -523,7 +571,7 @@
}
/**
- * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄�
+ * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈锟�?
*
* @param userId 鐢ㄦ埛id
*/
@@ -534,7 +582,7 @@
user.setUserId(userId);
List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
if (StringUtils.isEmpty(users)) {
- throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛�");
+ throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁");
}
}
}
@@ -550,7 +598,7 @@
public int insertUser(SysUser user) {
// 鏂板鐢ㄦ埛淇℃伅
int rows = userMapper.insertUser(user);
- //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧鑱�
+ //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧锟�?
// if (!CollectionUtils.isEmpty(user.getDepts())) {
// for (Long deptId : user.getDepts()) {
// SysUserDept sysUserDep = new SysUserDept();
@@ -564,7 +612,7 @@
// }
if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
for (String deptCode : user.getDeptCodes()) {
- SysDept sysDept = sysDeptMapper.selectDeptByCode(user.getOrgid(), deptCode);
+ SysDept sysDept = sysDeptMapper.selectDeptByCode("1", user.getOrgid(), deptCode);
if (ObjectUtils.isEmpty(sysDept)) {
continue;
}
@@ -590,7 +638,7 @@
}
if (!CollectionUtils.isEmpty(user.getWardCodes())) {
for (String wardCode : user.getWardCodes()) {
- SysDept sysDept = sysDeptMapper.selectDeptByCode(user.getOrgid(), wardCode);
+ SysDept sysDept = sysDeptMapper.selectDeptByCode("2", user.getOrgid(), wardCode);
if (ObjectUtils.isEmpty(sysDept)) {
continue;
}
@@ -615,7 +663,7 @@
}
// 鏂板鐢ㄦ埛宀椾綅鍏宠仈
insertUserPost(user);
- // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+ // 鏂板鐢ㄦ埛涓庤鑹茬锟�?
insertUserRole(user);
return rows;
}
@@ -641,24 +689,24 @@
@Transactional
public int updateUser(SysUser user) {
Long userId = user.getUserId();
- // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+ // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧锟�?
userRoleMapper.deleteUserRoleByUserId(userId);
- // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+ // 鏂板鐢ㄦ埛涓庤鑹茬锟�?
insertUserRole(user);
- // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
+ // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧锟�?
userPostMapper.deleteUserPostByUserId(userId);
- // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
+ // 鏂板鐢ㄦ埛涓庡矖浣嶇锟�?
insertUserPost(user);
//鍒犻櫎鐢ㄦ埛涓庨儴闂ㄧ殑鍏宠仈
Long[] ids = {user.getUserId()};
- //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧鑱�
+ //鏂板鐢ㄦ埛涓庨儴闂ㄥ叧锟�?
// sysUserDeptMapper.deleteSysUserDeptByIds(ids);
// if (!CollectionUtils.isEmpty(user.getDepts())) {
// for (Long deptId : user.getDepts()) {
// SysUserDept sysUserDep = new SysUserDept();
// sysUserDep.setUserId(user.getUserId());
// sysUserDep.setDeptId(deptId);
-// //鏌ヨ鏄惁 宸茬粡鍏宠仈璇ラ儴闂�
+// //鏌ヨ鏄惁 宸茬粡鍏宠仈璇ラ儴锟�?
// List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDep);
// if (!CollectionUtils.isEmpty(sysUserDepts)) {
// SysUserDept sysUserDept = sysUserDepts.get(0);
@@ -671,9 +719,15 @@
// sysUserDeptMapper.insertSysUserDept(sysUserDep);
// }
// }
+ //鍒犻櫎鍘熸湁鍏崇郴
+ SysUserDept delSysUserDept = new SysUserDept();
+ delSysUserDept.setUserId(user.getUserId());
+ delSysUserDept.setOrgid(user.getOrgid());
+ sysUserDeptMapper.deleteSysUserDeptByUserId(delSysUserDept);
+
if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
for (String deptCode : user.getDeptCodes()) {
- SysDept sysDept = sysDeptMapper.selectDeptByCode(user.getOrgid(), deptCode);
+ SysDept sysDept = sysDeptMapper.selectDeptByCode("1", user.getOrgid(), deptCode);
if (ObjectUtils.isEmpty(sysDept)) {
continue;
}
@@ -683,23 +737,18 @@
sysUserDept.setOrgid(user.getOrgid());
sysUserDept.setDeptCode(deptCode);
sysUserDept.setDeptId(sysDept.getDeptId());
- List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
sysUserDept.setDelFlag(0L);
sysUserDept.setDeptType("1");
sysUserDept.setDeptName(sysDept.getDeptName());
sysUserDept.setUpdateTime(new Date());
- if (!CollectionUtils.isEmpty(sysUserDepts)) {
- sysUserDept.setId(sysUserDepts.get(0).getId());
- sysUserDeptMapper.updateSysUserDept(sysUserDept);
- continue;
- }
sysUserDept.setCreateTime(new Date());
sysUserDeptMapper.insertSysUserDept(sysUserDept);
}
}
+
if (!CollectionUtils.isEmpty(user.getWardCodes())) {
for (String wardCode : user.getWardCodes()) {
- SysDept sysDept = sysDeptMapper.selectDeptByCode(user.getOrgid(), wardCode);
+ SysDept sysDept = sysDeptMapper.selectDeptByCode("2", user.getOrgid(), wardCode);
if (ObjectUtils.isEmpty(sysDept)) {
continue;
}
@@ -708,16 +757,11 @@
sysUserDept.setDeptCode(wardCode);
sysUserDept.setDeptId(sysDept.getDeptId());
sysUserDept.setOrgid(user.getOrgid());
- List<SysUserDept> sysUserDepts = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
sysUserDept.setDelFlag(0L);
sysUserDept.setDeptType("2");
sysUserDept.setOrgid(user.getOrgid());
sysUserDept.setDeptName(sysDept.getDeptName());
sysUserDept.setUpdateTime(new Date());
- if (!CollectionUtils.isEmpty(sysUserDepts)) {
- sysUserDeptMapper.updateSysUserDept(sysUserDept);
- continue;
- }
sysUserDept.setCreateTime(new Date());
sysUserDeptMapper.insertSysUserDept(sysUserDept);
}
@@ -729,7 +773,7 @@
* 鐢ㄦ埛鎺堟潈瑙掕壊
*
* @param userId 鐢ㄦ埛ID
- * @param roleIds 瑙掕壊缁�
+ * @param roleIds 瑙掕壊锟�?
*/
@Override
@Transactional
@@ -739,7 +783,7 @@
}
/**
- * 淇敼鐢ㄦ埛鐘舵��
+ * 淇敼鐢ㄦ埛鐘讹拷?
*
* @param user 鐢ㄦ埛淇℃伅
* @return 缁撴灉
@@ -763,7 +807,7 @@
/**
* 淇敼鐢ㄦ埛澶村儚
*
- * @param userName 鐢ㄦ埛鍚�
+ * @param userName 鐢ㄦ埛锟�?
* @param avatar 澶村儚鍦板潃
* @return 缁撴灉
*/
@@ -786,7 +830,7 @@
/**
* 閲嶇疆鐢ㄦ埛瀵嗙爜
*
- * @param userName 鐢ㄦ埛鍚�
+ * @param userName 鐢ㄦ埛锟�?
* @param password 瀵嗙爜
* @return 缁撴灉
*/
@@ -812,7 +856,7 @@
public void insertUserPost(SysUser user) {
Long[] posts = user.getPostIds();
if (StringUtils.isNotEmpty(posts)) {
- // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞�
+ // 鏂板鐢ㄦ埛涓庡矖浣嶇锟�?
List<SysUserPost> list = new ArrayList<SysUserPost>(posts.length);
for (Long postId : posts) {
SysUserPost up = new SysUserPost();
@@ -829,11 +873,11 @@
* 鏂板鐢ㄦ埛瑙掕壊淇℃伅
*
* @param userId 鐢ㄦ埛ID
- * @param roleIds 瑙掕壊缁�
+ * @param roleIds 瑙掕壊锟�?
*/
public void insertUserRole(Long userId, Long[] roleIds, String orgid) {
if (StringUtils.isNotEmpty(roleIds)) {
- // 鏂板鐢ㄦ埛涓庤鑹茬鐞�
+ // 鏂板鐢ㄦ埛涓庤鑹茬锟�?
List<SysUserRole> list = new ArrayList<SysUserRole>(roleIds.length);
for (Long roleId : roleIds) {
SysUserRole ur = new SysUserRole();
@@ -855,7 +899,7 @@
@Override
@Transactional
public int deleteUserById(Long userId) {
- // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+ // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧锟�?
userRoleMapper.deleteUserRoleByUserId(userId);
// 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃
userPostMapper.deleteUserPostByUserId(userId);
@@ -875,9 +919,9 @@
checkUserAllowed(new SysUser(userId));
checkUserDataScope(userId);
}
- // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱�
+ // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧锟�?
userRoleMapper.deleteUserRole(userIds);
- // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱�
+ // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧锟�?
userPostMapper.deleteUserPost(userIds);
return userMapper.deleteUserByIds(userIds);
}
@@ -893,7 +937,7 @@
@Override
public String importUser(List<SysUser> userList, Boolean isUpdateSupport, String operName) {
if (StringUtils.isNull(userList) || userList.size() == 0) {
- throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖锛�");
+ throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖");
}
int successNum = 0;
int failureNum = 0;
@@ -910,7 +954,7 @@
user.setCreateBy(operName);
this.insertUser(user);
successNum++;
- successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆鎴愬姛");
+ successMsg.append("<br/>" + successNum + "銆佽处锟�?" + user.getUserName() + " 瀵煎叆鎴愬姛");
} else if (isUpdateSupport) {
BeanValidators.validateWithException(validator, user);
checkUserAllowed(user);
@@ -918,14 +962,14 @@
user.setUpdateBy(operName);
this.updateUser(user);
successNum++;
- successMsg.append("<br/>" + successNum + "銆佽处鍙� " + user.getUserName() + " 鏇存柊鎴愬姛");
+ successMsg.append("<br/>" + successNum + "璐﹀彿?" + user.getUserName() + " 鏇存柊鎴愬姛");
} else {
failureNum++;
- failureMsg.append("<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 宸插瓨鍦�");
+ failureMsg.append("<br/>" + failureNum + "璐﹀彿" + user.getUserName() + " 宸插瓨鍦�");
}
} catch (Exception e) {
failureNum++;
- String msg = "<br/>" + failureNum + "銆佽处鍙� " + user.getUserName() + " 瀵煎叆澶辫触锛�";
+ String msg = "<br/>" + failureNum + "璐﹀彿" + user.getUserName() + " 瀵煎叆澶辫触";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
@@ -934,8 +978,214 @@
failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細");
throw new ServiceException(failureMsg.toString());
} else {
- successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏� " + successNum + " 鏉★紝鏁版嵁濡備笅锛�");
+ successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏�" + successNum + "鏉★紝鏁版嵁濡備笅锛�");
}
return successMsg.toString();
}
+
+ public List<SysUserDept> selectLeafSysDeptList(SysUserDept sysUserDept){
+ List<SysDept> list = sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
+ if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
+ list = TreeUtils.getLeafDepts(list);
+ }
+ List<SysUserDept> list1 = DtoConversionUtils.sourceToTarget(list, SysUserDept.class);
+ return list1;
+ }
+
+ public List<SysDept> selectLeafSysDeptForAdmin(SysDept sysDept){
+ SysUserDept sysUserDept = DtoConversionUtils.sourceToTarget(sysDept, SysUserDept.class);
+ List<SysDept> list = sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
+ if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
+ list = TreeUtils.getLeafDepts(list);
+ }
+ return list;
+ }
+
+ /**
+ * 鏍规嵁 sys_user.hosp_info锛堢瀹わ級鍜� sys_user.dept_info锛堢梾鍖猴級琛ュ叏 sys_user_dept 鏁版嵁
+ *
+ * @param orgid 鏈烘瀯ID锛屼负绌烘椂澶勭悊鍏ㄩ儴鏈烘瀯
+ * @param userId 鐢ㄦ埛ID锛屼负绌烘椂澶勭悊鍏ㄩ儴鐢ㄦ埛
+ * @return 澶勭悊缁撴灉缁熻
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Map<String, Object> repairUserDeptByHospAndDeptInfo(String orgid, Long userId) {
+ List<SysUser> users = userMapper.selectUsersForRepairUserDept(orgid, userId);
+ int processedUsers = 0;
+ int inserted = 0;
+ int updated = 0;
+ int restored = 0;
+ int deptNotFound = 0;
+ Set<String> missingDeptCodes = new LinkedHashSet<>();
+
+ for (SysUser user : users) {
+ if (user.getUserId() == null) {
+ continue;
+ }
+ List<String> hospCodes = parseDeptCodes(user.getHospInfo());
+ List<String> wardCodes = parseDeptCodes(user.getDeptInfo());
+ if (hospCodes.isEmpty() && wardCodes.isEmpty()) {
+ continue;
+ }
+ processedUsers++;
+
+ int[] hospStat = repairUserDept(user, hospCodes, "1", missingDeptCodes);
+ int[] wardStat = repairUserDept(user, wardCodes, "2", missingDeptCodes);
+ inserted += hospStat[0] + wardStat[0];
+ updated += hospStat[1] + wardStat[1];
+ restored += hospStat[2] + wardStat[2];
+ deptNotFound += hospStat[3] + wardStat[3];
+ }
+
+ Map<String, Object> result = new LinkedHashMap<>();
+ result.put("scannedUsers", users.size());
+ result.put("processedUsers", processedUsers);
+ result.put("inserted", inserted);
+ result.put("updated", updated);
+ result.put("restored", restored);
+ result.put("deptMetaNotFound", deptNotFound);
+ result.put("missingDeptCodes", missingDeptCodes);
+ log.info("鏍规嵁hosp_info/dept_info琛ュ叏鐢ㄦ埛閮ㄩ棬鍏崇郴瀹屾垚锛岀粨鏋滐細{}", result);
+ return result;
+ }
+
+ /**
+ * 琛ュ叏鍗曚釜鐢ㄦ埛鎸囧畾绫诲瀷鐨勯儴闂ㄥ叧绯汇��
+ * hosp_info / dept_info 鐢� Gson 搴忓垪鍖� List<List<String>> 鐢熸垚锛�
+ * 姣忎釜鍏冪礌褰㈠ [["code"]]锛屽洜姝や互閮ㄩ棬缂栫爜浣滀负琛ュ叏渚濇嵁锛屼笌鍘熷閲囬泦閫昏緫涓�鑷淬��
+ *
+ * @param user 鐢ㄦ埛
+ * @param deptCodes 閮ㄩ棬缂栫爜闆嗗悎
+ * @param expectedDeptType 閮ㄩ棬绫诲瀷锛�1绉戝 2鐥呭尯锛屽搴� hosp_info / dept_info锛�
+ * @param missingDeptCodes sys_dept 涓湭鍖归厤鍒扮殑閮ㄩ棬缂栫爜
+ * @return [鏂板鏁�, 鏇存柊鏁�, 鎭㈠鏁�, sys_dept鏈尮閰嶆暟]
+ */
+ private int[] repairUserDept(SysUser user, List<String> deptCodes, String expectedDeptType, Set<String> missingDeptCodes) {
+ int[] stat = new int[4];
+ for (String deptCode : deptCodes) {
+ // sys_dept 鍙敤浜庤ˉ鍏� dept_id銆乨ept_name 绛変俊鎭紝鏌ヤ笉鍒颁篃缁х画鎸夌紪鐮佽ˉ鍏�
+ SysDept sysDept = sysDeptMapper.selectDeptByCode(expectedDeptType, user.getOrgid(), deptCode);
+ if (ObjectUtils.isEmpty(sysDept)) {
+ // dept_type 鍙兘瀛樺湪鍘嗗彶鑴忔暟鎹紝鎸夌紪鐮佸厹搴曞啀鏌ヤ竴娆�
+ sysDept = sysDeptMapper.selectDeptByCode(null, user.getOrgid(), deptCode);
+ }
+ if (ObjectUtils.isEmpty(sysDept)) {
+ stat[3]++;
+ if (missingDeptCodes.size() < 100) {
+ missingDeptCodes.add(deptCode);
+ }
+ }
+
+ String userDeptOrgid = StringUtils.isNotEmpty(user.getOrgid()) ? user.getOrgid()
+ : (sysDept == null ? null : sysDept.getOrgid());
+ String campusid = sysDept != null && StringUtils.isNotEmpty(sysDept.getCampusid())
+ ? sysDept.getCampusid() : user.getCampusid();
+ Date now = new Date();
+
+ // 涓庡師濮嬬敓鎴愰�昏緫淇濇寔涓�鑷达紝user_id + dept_code + orgid 浣滀负涓氬姟鍞竴閿�
+ SysUserDept sysUserDept = sysUserDeptMapper.selectSysUserDeptByUserAndCode(user.getUserId(), deptCode, user.getOrgid());
+ if (ObjectUtils.isEmpty(sysUserDept)) {
+ sysUserDept = new SysUserDept();
+ sysUserDept.setUserId(user.getUserId());
+ sysUserDept.setDeptCode(deptCode);
+ sysUserDept.setDeptType(expectedDeptType);
+ sysUserDept.setOrgid(userDeptOrgid);
+ sysUserDept.setCampusid(campusid);
+ if (sysDept != null) {
+ sysUserDept.setDeptId(sysDept.getDeptId());
+ sysUserDept.setDeptName(sysDept.getDeptName());
+ }
+ sysUserDept.setDelFlag(0L);
+ sysUserDept.setCreateTime(now);
+ sysUserDept.setUpdateTime(now);
+ sysUserDeptMapper.insertSysUserDept(sysUserDept);
+ stat[0]++;
+ continue;
+ }
+
+ boolean wasDeleted = !Long.valueOf(0L).equals(sysUserDept.getDelFlag());
+ sysUserDept.setDeptCode(deptCode);
+ sysUserDept.setDeptType(expectedDeptType);
+ sysUserDept.setOrgid(userDeptOrgid);
+ sysUserDept.setCampusid(campusid);
+ if (sysDept != null) {
+ sysUserDept.setDeptId(sysDept.getDeptId());
+ sysUserDept.setDeptName(sysDept.getDeptName());
+ }
+ sysUserDept.setDelFlag(0L);
+ sysUserDept.setUpdateTime(now);
+ sysUserDeptMapper.updateSysUserDept(sysUserDept);
+ if (wasDeleted) {
+ stat[2]++;
+ } else {
+ stat[1]++;
+ }
+ }
+ return stat;
+ }
+
+ /**
+ * 瑙f瀽 hosp_info / dept_info 涓殑閮ㄩ棬缂栫爜銆�
+ * 鍘熷鐢熸垚閫昏緫浣跨敤 Gson 搴忓垪鍖� List<List<String>>锛屾牸寮忓 [["code1"],["code2"]]锛�
+ * 杩欓噷鍏煎璇ユ牸寮忥紝鍚屾椂鍏煎 ["code"]銆乕{"deptCode":"code"}] 绛夊巻鍙叉牸寮忋��
+ */
+ private List<String> parseDeptCodes(String json) {
+ if (StringUtils.isEmpty(json)) {
+ return Collections.emptyList();
+ }
+ List<String> codes = new ArrayList<>();
+ try {
+ collectDeptCodes(OBJECT_MAPPER.readTree(json), codes);
+ } catch (Exception e) {
+ log.warn("瑙f瀽鐢ㄦ埛绉戝/鐥呭尯淇℃伅澶辫触锛屽唴瀹癸細{}", json, e);
+ }
+ return codes.stream().filter(StringUtils::isNotEmpty).distinct().collect(Collectors.toList());
+ }
+
+ private void collectDeptCodes(JsonNode node, List<String> codes) {
+ if (node == null || node.isNull()) {
+ return;
+ }
+ if (node.isArray()) {
+ for (JsonNode item : node) {
+ collectDeptCodes(item, codes);
+ }
+ return;
+ }
+ if (node.isObject()) {
+ JsonNode codeNode = node.get("deptCode");
+ if (codeNode == null) {
+ codeNode = node.get("code");
+ }
+ if (codeNode == null) {
+ codeNode = node.get("deptId");
+ }
+ if (codeNode == null) {
+ codeNode = node.get("hisDeptId");
+ }
+ if (codeNode != null) {
+ collectDeptCodes(codeNode, codes);
+ return;
+ }
+ Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
+ while (fields.hasNext()) {
+ JsonNode value = fields.next().getValue();
+ if (value != null && value.isValueNode() && !value.isNull()) {
+ collectDeptCodes(value, codes);
+ return;
+ }
+ }
+ return;
+ }
+ if (node.isValueNode()) {
+ String code = node.asText();
+ if (StringUtils.isNotEmpty(code)) {
+ code = code.trim();
+ if (StringUtils.isNotEmpty(code) && !"null".equalsIgnoreCase(code)) {
+ codes.add(code);
+ }
+ }
+ }
+ }
}
--
Gitblit v1.9.3