From 3d047130b059efd46f56be37465a751ab16ee8cb Mon Sep 17 00:00:00 2001
From: 陈昶聿 <chychen@nbjetron.com>
Date: 星期三, 11 十一月 2026 14:06:56 +0800
Subject: [PATCH] Merge branch 'smartor_ls_merge' into 20261111-妇幼档案随访

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java |   86 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 72 insertions(+), 14 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 f403771..f8a826b 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
@@ -18,6 +18,7 @@
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysUserService;
 import com.ruoyi.common.core.service.IUserExtInfoService;
+import com.ruoyi.common.core.service.ISatisfactionCategoryService;
 import com.ruoyi.system.mapper.SysUserDeptMapper;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -84,6 +85,10 @@
     @Value("${isAdmin}")
     private List<Long> isAdmin;
 
+
+    @Value("${spring.profiles.active}")
+    private String active;
+
     /**
      * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃
      *
@@ -141,7 +146,10 @@
             deptIds.add(sysDept.getDeptId());
         }
         SysUserDept sysUserDept = new SysUserDept();
-        sysUserDept.setUserId(sysUser.getUserId());
+        // 绠$悊鍛橈細涓嶆寜鐢ㄦ埛杩囨护锛坰ys_user_dept 閲屾病鏈� admin 鐨勬暟鎹級锛岀洿鎺ュ彇鏈満鏋勫叏閮ㄧ瀹�/鐥呭尯
+        if (!isAdminUser(sysUser)) {
+            sysUserDept.setUserId(sysUser.getUserId());
+        }
         sysUserDept.setDeptType(sysUser.getSearchscope());
         sysUserDept.setOrgid(sysUser.getOrgid());
         List<SysUserDept> sysUserDeptKSs = null;
@@ -196,7 +204,7 @@
         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]);
+        boolean isAdmin = isAdminUser(sysUser);
         IUserExtInfoService userExtInfoService = SpringUtils.getBean(IUserExtInfoService.class);
         Executor executor = SpringUtils.getBean("threadPoolTaskExecutor");
 
@@ -215,7 +223,7 @@
         // 绛夊緟鏈烘瀯淇℃伅
         Map<String, String> userOrgInfo = new HashMap<>();
         try {
-            userOrgInfo = orgInfoFuture.get(5, TimeUnit.SECONDS);
+            userOrgInfo = orgInfoFuture.get(50, TimeUnit.SECONDS);
         } catch (Exception e) {
             log.warn("鑾峰彇鐢ㄦ埛鏈烘瀯淇℃伅瓒呮椂鎴栧紓甯�", e);
         }
@@ -253,8 +261,8 @@
                     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));
+                        sysUserDeptKSs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(ksFuture.get(50, TimeUnit.SECONDS), SysUserDept.class));
+                        sysUserDeptBQs = distinctByDeptCode(DtoConversionUtils.sourceToTarget(bqFuture.get(50, TimeUnit.SECONDS), SysUserDept.class));
                     } catch (Exception e) {
                         log.warn("鑾峰彇admin绉戝/鐥呭尯淇℃伅瓒呮椂鎴栧紓甯�", e);
                     }
@@ -319,9 +327,57 @@
             }
             sysUser.setBelongDepts(list);
             // 璁剧疆婊℃剰搴﹀垎绫伙紙璧扮紦瀛橈級
-            sysUser.setSatisfactionCategories(userExtInfoService.getSatisfactionCategories(sysUser.getOrgid()));
+            // 婊℃剰搴︽ā鍧楀寲鍚庯細涓嶅啀缁忕敱 smartor 鐨� IUserExtInfoService锛�
+            // 鏀逛负鎸� ruoyi-common 鐨� ISatisfactionCategoryService 鎺ュ彛鏌ユ壘瀹炵幇
+            // 锛堝疄鐜板湪 ruoyi-satisfaction锛岀敱甯搁┗闂ㄩ潰淇濊瘉"妯″潡鍏抽棴/缂哄け鏃惰繑鍥炵┖ Map"锛�
+            sysUser.setSatisfactionCategories(loadSatisfactionCategories(sysUser.getOrgid()));
         }
         return sysUser;
+    }
+
+    /**
+     * 瀹夊叏鍦拌幏鍙栨弧鎰忓害鍒嗙被銆�
+     * <p>
+     * 婊℃剰搴︽ā鍧楀彲浠ヨ閰嶇疆鍏抽棴锛坽@code sys_config} 鍙傛暟 {@code satisfaction.enabled=false}锛夛紝涔熷彲浠ユ暣浣撲笉鍦ㄤ緷璧栭噷锛�
+     * 杩欎袱绉嶆儏鍐典笅閮藉繀椤�<b>涓嶅奖鍝嶇櫥褰曚富娴佺▼</b>锛屽洜姝よ繖閲岋細
+     * <ul>
+     *   <li>瀹瑰櫒閲屾病鏈� {@code ISatisfactionCategoryService} 瀹炵幇鏃惰繑鍥炵┖ Map锛�</li>
+     *   <li>璋冪敤杩囩▼涓姏浠讳綍寮傚父涔熷彧璁版棩蹇楀苟杩斿洖绌� Map銆�</li>
+     * </ul>
+     *
+     * @param orgid 鏈烘瀯ID
+     * @return 婊℃剰搴﹀垎绫伙紱涓嶅彲鐢ㄦ椂杩斿洖绌� Map锛堜笉浼氳繑鍥� null锛�
+     */
+    private Map<String, Object> loadSatisfactionCategories(String orgid) {
+        try {
+            ISatisfactionCategoryService satisfactionCategoryService =
+                    SpringUtils.getBean(ISatisfactionCategoryService.class);
+            if (satisfactionCategoryService == null) {
+                return Collections.emptyMap();
+            }
+            Map<String, Object> categories = satisfactionCategoryService.getSatisfactionCategories(orgid);
+            return categories == null ? Collections.emptyMap() : categories;
+        } catch (Exception e) {
+            log.warn("鑾峰彇婊℃剰搴﹀垎绫诲け璐ワ紝宸查檷绾т负绌虹粨鏋滐紙涓嶅奖鍝嶇櫥褰曪級銆俹rgid={}", orgid, e);
+            return Collections.emptyMap();
+        }
+    }
+
+    /**
+     * 鏄惁绠$悊鍛橈細璐﹀彿鍚嶄负 admin锛屾垨鐢ㄦ埛ID鍛戒腑閰嶇疆椤� isAdmin銆�
+     * <p>
+     * 绠$悊鍛樺彇绉戝/鐥呭尯鏃朵笉鎸� sys_user_dept 杩囨护鈥斺�擧IS 閲囬泦鍐欒琛ㄦ椂鏄庣‘鎺掗櫎浜� admin
+     * 锛圕ollectHISMapper 鐨� yhyksxx/yhybfxx 閮芥湁 {@code ud.user_id != 'admin'}锛夛紝
+     * 璧板叧鑱旀煡璇細寰楀埌绌哄垪琛紝琛ㄧ幇涓恒�岀櫥褰曟垚鍔熶絾鍒涘缓浠诲姟鏃堕�変笉鍒扮瀹ょ梾鍖恒�嶃��
+     */
+    private boolean isAdminUser(SysUser sysUser) {
+        if (sysUser == null) {
+            return false;
+        }
+        if ("admin".equalsIgnoreCase(sysUser.getUserName())) {
+            return true;
+        }
+        return sysUser.getUserId() != null && isAdmin != null && isAdmin.contains(sysUser.getUserId());
     }
 
     /**
@@ -346,7 +402,8 @@
     @Override
     public SysUser selectUserByUserNameAndDeptId(String userName) {
         String[] split = userName.split("&");
-        if (split[2].contains("null")) {
+        //鍗楀崕闄勪竴涔熶笉楠岃瘉dept_id浜�
+        if (split[2].contains("null") || active.equals("nhfy")) {
             split[2] = null;
         }
         SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1], split[2]);
@@ -985,8 +1042,11 @@
 
     public List<SysUserDept> selectLeafSysDeptList(SysUserDept sysUserDept){
         List<SysDept> list =  sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
-        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
-            list = TreeUtils.getLeafDepts(list);
+        // userId 涓虹┖ = 绠$悊鍛樺彇鏈満鏋勫叏閲忥細瑕併�屾墍鏈夌瀹ょ梾鍖恒�嶏紝涓嶈兘鍐嶆寜鍙跺瓙鑺傜偣杩囨护
+        if (sysUserDept == null || sysUserDept.getUserId() != null) {
+            if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(list)){
+                list = TreeUtils.getLeafDepts(list);
+            }
         }
         List<SysUserDept> list1 = DtoConversionUtils.sourceToTarget(list, SysUserDept.class);
         return list1;
@@ -994,11 +1054,9 @@
 
     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;
+        // 绠$悊鍛樺垎鏀細sysUserDept 涓嶅甫 userId锛宮apper 浼氱洿鎺ユ煡 sys_dept锛堜笉鍏宠仈 sys_user_dept锛夛紝
+        // 杩斿洖鏈満鏋勫叏閮ㄧ瀹�/鐥呭尯锛涜繖閲屼笉鍐嶅仛鍙跺瓙杩囨护锛屽惁鍒欍�屾墍鏈夌瀹ょ梾鍖恒�嶄細琚爫鎺夌埗绾ч儴闂ㄣ��
+        return sysDeptMapper.selectSysDeptListBySysUserDept(sysUserDept);
     }
 
     /**

--
Gitblit v1.9.3