From 4bb2588c5579d43ae5d343c7343a425a80b02d6c Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 27 六月 2025 12:12:42 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java |  260 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 257 insertions(+), 3 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 3d779d2..1d555ae 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,6 +4,7 @@
 import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.domain.entity.*;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.DtoConversionUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.bean.BeanValidators;
@@ -13,13 +14,16 @@
 import com.ruoyi.system.mapper.*;
 import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.service.ISysUserService;
+import com.smartor.domain.SvyTaskVO;
 import com.smartor.mapper.SysUserDeptMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 
 import javax.validation.Validator;
 import java.util.*;
@@ -60,6 +64,9 @@
 
     @Autowired
     protected Validator validator;
+
+    @Value("${isAdmin}")
+    private List<Long> isAdmin;
 
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
@@ -155,6 +162,242 @@
             sysUser.setBelongDepts(list);
         }
         return sysUser;
+    }
+
+    @Override
+    public SysUser selectUserByUserName2(String userName) {
+        log.debug("寮�濮嬫煡璇㈢敤鎴蜂俊鎭紝鐢ㄦ埛鍚�: {}", userName);
+        
+        try {
+            // 鍙傛暟鏍¢獙
+            if (StringUtils.isEmpty(userName)) {
+                log.warn("鐢ㄦ埛鍚嶅弬鏁颁负绌�");
+                return null;
+            }
+            
+            // 瑙f瀽鐢ㄦ埛鍚嶅拰鏈烘瀯ID
+            String[] userInfo = parseUserName(userName);
+            if (userInfo == null) {
+                log.warn("鐢ㄦ埛鍚嶆牸寮忎笉姝g‘: {}", userName);
+                return null;
+            }
+            
+            String username = userInfo[0];
+            String orgId = userInfo[1];
+            
+            // 鏌ヨ鐢ㄦ埛鍩烘湰淇℃伅
+            SysUser sysUser = userMapper.selectUserByUserNameByCondition(username, orgId);
+            if (Objects.isNull(sysUser)) {
+                log.warn("鏈壘鍒扮敤鎴蜂俊鎭�: username={}, orgId={}", username, orgId);
+                return null;
+            }
+            
+            // 鏌ヨ鐢ㄦ埛閮ㄩ棬淇℃伅
+            List<SysDept> sysDepts = getUserDepts(sysUser, username, orgId);
+            List<Long> deptIds = extractDeptIds(sysDepts);
+            sysUser.setDepts(deptIds);
+            
+            // 鏍规嵁鎼滅储鑼冨洿澶勭悊绉戝鍜岀梾鍖轰俊鎭�
+            processUserDeptInfo(sysUser, username, orgId);
+            
+            log.debug("鐢ㄦ埛淇℃伅鏌ヨ瀹屾垚: userId={}", sysUser.getUserId());
+            return sysUser;
+            
+        } catch (Exception e) {
+            log.error("鏌ヨ鐢ㄦ埛淇℃伅鏃跺彂鐢熷紓甯�: userName={}", userName, e);
+            return null;
+        }
+    }
+    
+    /**
+     * 瑙f瀽鐢ㄦ埛鍚嶏紝鎻愬彇鐢ㄦ埛鍚嶅拰鏈烘瀯ID
+     */
+    private String[] parseUserName(String userName) {
+        if (StringUtils.isEmpty(userName) || !userName.contains("&")) {
+            return null;
+        }
+        return userName.split("&");
+    }
+    
+    /**
+     * 鑾峰彇鐢ㄦ埛閮ㄩ棬淇℃伅
+     */
+    private List<SysDept> getUserDepts(SysUser sysUser, String username, String orgId) {
+        if ("admin".equals(username)) {
+            SysDept dept = new SysDept();
+            dept.setOrgid(orgId);
+            return sysDeptMapper.selectDeptList(dept);
+        } else {
+            return sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
+        }
+    }
+    
+    /**
+     * 鎻愬彇閮ㄩ棬ID鍒楄〃
+     */
+    private List<Long> extractDeptIds(List<SysDept> sysDepts) {
+        if (CollectionUtils.isEmpty(sysDepts)) {
+            return new ArrayList<>();
+        }
+        return sysDepts.stream()
+                .map(SysDept::getDeptId)
+                .collect(Collectors.toList());
+    }
+    
+    /**
+     * 澶勭悊鐢ㄦ埛绉戝鍜岀梾鍖轰俊鎭�
+     */
+    private void processUserDeptInfo(SysUser sysUser, String username, String orgId) {
+        String searchScope = sysUser.getSearchscope();
+        if (StringUtils.isEmpty(searchScope)) {
+            return;
+        }
+        
+        switch (searchScope) {
+            case "0": // 鍏ㄩ儴鑼冨洿
+                processFullScopeDeptInfo(sysUser, username, orgId);
+                break;
+            case "1": // 绉戝鑼冨洿
+                processDeptScopeInfo(sysUser, orgId, "1");
+                break;
+            case "2": // 鐥呭尯鑼冨洿
+                processDeptScopeInfo(sysUser, orgId, "2");
+                break;
+            default:
+                log.warn("鏈煡鐨勬悳绱㈣寖鍥�: {}", searchScope);
+        }
+    }
+    
+    /**
+     * 澶勭悊鍏ㄩ儴鑼冨洿鐨勯儴闂ㄤ俊鎭�
+     */
+    private void processFullScopeDeptInfo(SysUser sysUser, String username, String orgId) {
+        SysUserDept sysUserDept = createSysUserDept(sysUser, orgId);
+        
+        List<SysUserDept> sysUserDeptKSs = null;
+        List<SysUserDept> sysUserDeptBQs = null;
+        
+        if ("admin".equals(username)) {
+            // admin鐢ㄦ埛鐗规畩澶勭悊
+            sysUserDept.setUserId(null);
+            sysUserDeptKSs = getAdminDeptList(orgId, "1");
+            sysUserDeptBQs = getAdminDeptList(orgId, "2");
+            
+            // 鍘婚噸澶勭悊
+            sysUserDeptKSs = removeDuplicateDepts(sysUserDeptKSs);
+            sysUserDeptBQs = removeDuplicateDepts(sysUserDeptBQs);
+        } else {
+            // 鏅�氱敤鎴峰鐞�
+            sysUserDept.setDeptType("1");
+            sysUserDeptKSs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+            sysUserDept.setDeptType("2");
+            sysUserDeptBQs = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+        }
+        
+        // 璁剧疆绉戝鍜岀梾鍖轰俊鎭�
+        setBelongWards(sysUser, sysUserDeptBQs);
+        setBelongDepts(sysUser, sysUserDeptKSs);
+    }
+    
+    /**
+     * 澶勭悊鎸囧畾鑼冨洿鐨勯儴闂ㄤ俊鎭�
+     */
+    private void processDeptScopeInfo(SysUser sysUser, String orgId, String deptType) {
+        SysUserDept sysUserDept = createSysUserDept(sysUser, orgId);
+        sysUserDept.setDeptType(deptType);
+        List<SysUserDept> deptList = sysUserDeptMapper.selectSysUserDeptList(sysUserDept);
+        
+        if ("1".equals(deptType)) {
+            setBelongDepts(sysUser, deptList);
+        } else if ("2".equals(deptType)) {
+            setBelongWards(sysUser, deptList);
+        }
+    }
+    
+    /**
+     * 鍒涘缓SysUserDept瀵硅薄
+     */
+    private SysUserDept createSysUserDept(SysUser sysUser, String orgId) {
+        SysUserDept sysUserDept = new SysUserDept();
+        sysUserDept.setUserId(sysUser.getUserId());
+        sysUserDept.setDeptType(sysUser.getSearchscope());
+        sysUserDept.setOrgid(orgId);
+        return sysUserDept;
+    }
+    
+    /**
+     * 鑾峰彇admin鐢ㄦ埛鐨勯儴闂ㄥ垪琛�
+     */
+    private List<SysUserDept> getAdminDeptList(String orgId, String deptType) {
+        SysDept dept = new SysDept();
+        dept.setOrgid(orgId);
+        dept.setDeptType(deptType);
+        List<SysDept> sysDepts = sysDeptMapper.selectDeptList(dept);
+        return DtoConversionUtils.sourceToTarget(sysDepts, SysUserDept.class);
+    }
+    
+    /**
+     * 鍘婚櫎閲嶅鐨勯儴闂ㄤ俊鎭�
+     */
+    private List<SysUserDept> removeDuplicateDepts(List<SysUserDept> deptList) {
+        if (CollectionUtils.isEmpty(deptList)) {
+            return new ArrayList<>();
+        }
+        
+        List<SysUserDept> distinctDepts = new ArrayList<>();
+        Set<String> uniqueCodes = new HashSet<>();
+        
+        for (SysUserDept dept : deptList) {
+            String deptCode = dept.getDeptCode();
+            if (StringUtils.isNotEmpty(deptCode) && !uniqueCodes.contains(deptCode)) {
+                distinctDepts.add(dept);
+                uniqueCodes.add(deptCode);
+            }
+        }
+        
+        return distinctDepts;
+    }
+    
+    /**
+     * 璁剧疆鐥呭尯淇℃伅
+     */
+    private void setBelongWards(SysUser sysUser, List<SysUserDept> sysUserDeptBQs) {
+        if (CollectionUtils.isEmpty(sysUserDeptBQs)) {
+            return;
+        }
+        
+        List<Map<String, Object>> wardList = sysUserDeptBQs.stream()
+                .filter(sud -> StringUtils.isNotEmpty(sud.getDeptCode()))
+                .map(sud -> {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("districtCode", StringUtils.defaultString(sud.getDeptCode(), ""));
+                    map.put("districtName", StringUtils.defaultString(sud.getDeptName(), ""));
+                    return map;
+                })
+                .collect(Collectors.toList());
+        
+        sysUser.setBelongWards(wardList);
+    }
+    
+    /**
+     * 璁剧疆绉戝淇℃伅
+     */
+    private void setBelongDepts(SysUser sysUser, List<SysUserDept> sysUserDeptKSs) {
+        if (CollectionUtils.isEmpty(sysUserDeptKSs)) {
+            return;
+        }
+        
+        List<Map<String, Object>> deptList = sysUserDeptKSs.stream()
+                .filter(sud -> StringUtils.isNotEmpty(sud.getDeptCode()))
+                .map(sud -> {
+                    Map<String, Object> map = new HashMap<>();
+                    map.put("deptCode", StringUtils.defaultString(sud.getDeptCode(), ""));
+                    map.put("deptName", StringUtils.defaultString(sud.getDeptName(), ""));
+                    return map;
+                })
+                .collect(Collectors.toList());
+        
+        sysUser.setBelongDepts(deptList);
     }
 
     /**
@@ -260,7 +503,7 @@
      */
     @Override
     public void checkUserAllowed(SysUser user) {
-        if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) {
+        if (StringUtils.isNotNull(user.getUserId()) && isAdmin.contains(user.getUserId())) {
             throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛");
         }
     }
@@ -272,7 +515,7 @@
      */
     @Override
     public void checkUserDataScope(Long userId) {
-        if (!SysUser.isAdmin(SecurityUtils.getUserId())) {
+        if (!isAdmin.contains(SecurityUtils.getUserId())) {
             SysUser user = new SysUser();
             user.setUserId(userId);
             List<SysUser> users = SpringUtils.getAopProxy(this).selectUserList(user);
@@ -366,16 +609,22 @@
         if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
             for (String deptCode : user.getDeptCodes()) {
                 SysDept sysDept = sysDeptMapper.selectDeptByCode(deptCode);
+                if (ObjectUtils.isEmpty(sysDept)) {
+                    continue;
+                }
 
                 SysUserDept sysUserDept = new SysUserDept();
                 sysUserDept.setUserId(user.getUserId());
+                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;
                 }
@@ -386,13 +635,18 @@
         if (!CollectionUtils.isEmpty(user.getWardCodes())) {
             for (String wardCode : user.getWardCodes()) {
                 SysDept sysDept = sysDeptMapper.selectDeptByCode(wardCode);
-
+                if (ObjectUtils.isEmpty(sysDept)) {
+                    continue;
+                }
                 SysUserDept sysUserDept = new SysUserDept();
                 sysUserDept.setUserId(user.getUserId());
                 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)) {

--
Gitblit v1.9.3