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

---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java                     |  104 ++++++------
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java |  306 ++++++++++++++++++++++++++++----------
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java      |    1 
 smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java    |   38 ++--
 smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml               |    4 
 5 files changed, 298 insertions(+), 155 deletions(-)

diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
index efd0e22..63c17b2 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java
@@ -17,7 +17,6 @@
 @ApiModel(value = "SysDept", description = "閮ㄩ棬琛�")
 public class SysDept extends BaseEntity {
     private static final long serialVersionUID = 1L;
-
     /**
      * 閮ㄩ棬ID
      */
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
index 74436c8..8989707 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java
@@ -750,9 +750,9 @@
      */
     private List<ThiedInhospInfo> parseResponseData(String result) {
         try {
-            Gson gson = new Gson();
-            JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
-            JsonArray resultArray = jsonObject.getAsJsonObject("data").getAsJsonArray("result");
+        Gson gson = new Gson();
+        JsonObject jsonObject = gson.fromJson(result, JsonObject.class);
+        JsonArray resultArray = jsonObject.getAsJsonObject("data").getAsJsonArray("result");
             Type resultType = new TypeToken<List<ThiedInhospInfo>>() {}.getType();
             return gson.fromJson(resultArray, resultType);
         } catch (Exception e) {
@@ -776,7 +776,7 @@
                 parentDir.mkdirs();
             }
             
-            if (!file.exists()) {
+        if (!file.exists()) {
                 file.createNewFile();
             }
             
@@ -855,7 +855,7 @@
         if (CollectionUtils.isEmpty(existingArchives)) {
             patArchiveService.insertPatArchive(patArchive);
             log.debug("銆恜rocessPatientArchive銆戞柊澧炴偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
-        } else {
+                } else {
             patArchive.setId(existingArchives.get(0).getId());
             patArchiveService.updateArchive(patArchive);
             log.debug("銆恜rocessPatientArchive銆戞洿鏂版偅鑰呮。妗堬紝鎮h�呯紪鍙凤細{}", patArchive.getPatientno());
@@ -871,18 +871,18 @@
         PatArchive patArchive = new PatArchive();
         
         // 鍩烘湰淇℃伅
-        patArchive.setPatientno(thiedInhospInfo.getPatiMediaNo());
+                patArchive.setPatientno(thiedInhospInfo.getPatiMediaNo());
         patArchive.setIdcardno(thiedInhospInfo.getPatiIdCardNo().trim());
         patArchive.setName(thiedInhospInfo.getPatiRecordName());
-        patArchive.setSourcefrom(2);
-        patArchive.setPattype("2");
+                patArchive.setSourcefrom(2);
+                patArchive.setPattype("2");
         
         // 鎬у埆
         patArchive.setSex("鐢�".equals(thiedInhospInfo.getPatiRecordGender()) ? 1L : 2L);
         
         // 姘戞棌鍜岀睄璐�
-        patArchive.setNation(thiedInhospInfo.getPatiNation());
-        patArchive.setNativePlace(thiedInhospInfo.getPatiNationality());
+                patArchive.setNation(thiedInhospInfo.getPatiNation());
+                patArchive.setNativePlace(thiedInhospInfo.getPatiNationality());
         
         // 灞呬綇鍦板潃
         String homeAddr = thiedInhospInfo.getPatiHomeAddr();
@@ -891,21 +891,21 @@
         // 鍑虹敓鏃ユ湡
         if (StringUtils.isNotEmpty(thiedInhospInfo.getPatiBirthday())) {
             try {
-                patArchive.setBirthdate(new SimpleDateFormat("yyyy-MM-dd").parse(thiedInhospInfo.getPatiBirthday()));
-            } catch (ParseException e) {
+                        patArchive.setBirthdate(new SimpleDateFormat("yyyy-MM-dd").parse(thiedInhospInfo.getPatiBirthday()));
+                } catch (ParseException e) {
                 log.warn("銆恇uildPatientArchive銆戣В鏋愬嚭鐢熸棩鏈熷け璐ワ細{}", thiedInhospInfo.getPatiBirthday(), e);
-            }
+                }
         }
         
         // 骞撮緞
-        if (thiedInhospInfo.getTreateAge() != null) {
-            patArchive.setAge(Long.valueOf(thiedInhospInfo.getTreateAge()));
-        }
-        patArchive.setAgeUnit(thiedInhospInfo.getTreatAgeunit());
+                if (thiedInhospInfo.getTreateAge() != null) {
+                    patArchive.setAge(Long.valueOf(thiedInhospInfo.getTreateAge()));
+                }
+                patArchive.setAgeUnit(thiedInhospInfo.getTreatAgeunit());
         
         // 鑱旂郴鏂瑰紡
-        patArchive.setTelcode(thiedInhospInfo.getCompanyTelNum());
-        patArchive.setRelativetelcode(thiedInhospInfo.getContactPersonPhone());
+                patArchive.setTelcode(thiedInhospInfo.getCompanyTelNum());
+                patArchive.setRelativetelcode(thiedInhospInfo.getContactPersonPhone());
         
         // 鍑洪櫌鏂瑰紡澶勭悊锛堟浜$瓑鐗规畩鎯呭喌锛�
         if (StringUtils.isNotEmpty(thiedInhospInfo.getOutWayId()) && "4".equals(thiedInhospInfo.getOutWayId())) {
@@ -918,9 +918,9 @@
         }
         
         // 绯荤粺瀛楁
-        patArchive.setDelFlag("0");
-        patArchive.setCreateTime(new Date());
-        patArchive.setUpdateTime(new Date());
+                patArchive.setDelFlag("0");
+                patArchive.setCreateTime(new Date());
+                patArchive.setUpdateTime(new Date());
         
         return patArchive;
     }
@@ -944,7 +944,7 @@
             patMedInhospService.updatePatMedInhosp(patMedInhosp);
             log.debug("銆恜rocessPatientInhospInfo銆戞洿鏂颁綇闄俊鎭紝鎮h�呯紪鍙凤細{}锛屾祦姘村彿锛歿}", 
                 patArchive.getPatientno(), patMedInhosp.getSerialnum());
-        } else {
+                } else {
             patMedInhospService.insertPatMedInhosp(patMedInhosp);
             log.debug("銆恜rocessPatientInhospInfo銆戞柊澧炰綇闄俊鎭紝鎮h�呯紪鍙凤細{}锛屾祦姘村彿锛歿}", 
                 patArchive.getPatientno(), patMedInhosp.getSerialnum());
@@ -955,74 +955,74 @@
      * 鏋勫缓鎮h�呬綇闄俊鎭�
      */
     private PatMedInhosp buildPatientInhospInfo(ThiedInhospInfo thiedInhospInfo, PatArchive patArchive, String cry) {
-        PatMedInhosp patMedInhosp = new PatMedInhosp();
+                PatMedInhosp patMedInhosp = new PatMedInhosp();
         
         // 鎮h�呭熀鏈俊鎭�
-        patMedInhosp.setPatid(patArchive.getId());
-        patMedInhosp.setPatno(patArchive.getPatientno());
-        patMedInhosp.setPatname(patArchive.getName());
+                patMedInhosp.setPatid(patArchive.getId());
+                patMedInhosp.setPatno(patArchive.getPatientno());
+                patMedInhosp.setPatname(patArchive.getName());
         
         // 鎶ょ悊淇℃伅
-        patMedInhosp.setNurseId(thiedInhospInfo.getNurseId());
-        patMedInhosp.setNurseName(thiedInhospInfo.getNurseName());
+                patMedInhosp.setNurseId(thiedInhospInfo.getNurseId());
+                patMedInhosp.setNurseName(thiedInhospInfo.getNurseName());
         
         // 浣忛櫌淇℃伅
-        patMedInhosp.setSerialnum(thiedInhospInfo.getInpatientId());
-        patMedInhosp.setFuflag("1");
+                patMedInhosp.setSerialnum(thiedInhospInfo.getInpatientId());
+                patMedInhosp.setFuflag("1");
         patMedInhosp.setInhospstate("0".equals(cry) ? "0" : "1");
         
         // 鍖婚櫌鍜岀瀹や俊鎭�
-        patMedInhosp.setHospitalcode(thiedInhospInfo.getAreaId());
+                patMedInhosp.setHospitalcode(thiedInhospInfo.getAreaId());
         patMedInhosp.setDeptcode(thiedInhospInfo.getAdmissDeptId());
         patMedInhosp.setDeptid(thiedInhospInfo.getAdmissDeptId());
         patMedInhosp.setDeptname(thiedInhospInfo.getAdmissDeptName());
         patMedInhosp.setBedNo(thiedInhospInfo.getAdmissBedNo());
         
         // 璇婃柇淇℃伅
-        patMedInhosp.setIcd10code(thiedInhospInfo.getDiagIcd10());
-        patMedInhosp.setDiagname(thiedInhospInfo.getDiagName());
+                patMedInhosp.setIcd10code(thiedInhospInfo.getDiagIcd10());
+                patMedInhosp.setDiagname(thiedInhospInfo.getDiagName());
         
         // 鏃堕棿淇℃伅
         if (StringUtils.isNotEmpty(thiedInhospInfo.getAdmissDate())) {
-            try {
-                patMedInhosp.setStarttime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(thiedInhospInfo.getAdmissDate()));
-            } catch (ParseException e) {
+                try {
+                        patMedInhosp.setStarttime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(thiedInhospInfo.getAdmissDate()));
+                } catch (ParseException e) {
                 log.warn("銆恇uildPatientInhospInfo銆戣В鏋愬叆闄㈡椂闂村け璐ワ細{}", thiedInhospInfo.getAdmissDate(), e);
-            }
+                }
         }
         
         if (StringUtils.isNotEmpty(thiedInhospInfo.getOutDate())) {
-            try {
-                patMedInhosp.setEndtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(thiedInhospInfo.getOutDate()));
-            } catch (ParseException e) {
+                try {
+                        patMedInhosp.setEndtime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(thiedInhospInfo.getOutDate()));
+                } catch (ParseException e) {
                 log.warn("銆恇uildPatientInhospInfo銆戣В鏋愬嚭闄㈡椂闂村け璐ワ細{}", thiedInhospInfo.getOutDate(), e);
             }
         }
         
         // 鍑洪櫌淇℃伅
-        patMedInhosp.setLeaveldeptcode(thiedInhospInfo.getCurrDeptId());
-        patMedInhosp.setLeaveldeptname(thiedInhospInfo.getCurrDeptName());
-        patMedInhosp.setLeavediagname(thiedInhospInfo.getDiagName());
-        patMedInhosp.setLeaveicd10code(thiedInhospInfo.getDiagIcd10());
-        patMedInhosp.setOutWayId(thiedInhospInfo.getOutWayId());
-        patMedInhosp.setOutWayName(thiedInhospInfo.getOutWayName());
+                patMedInhosp.setLeaveldeptcode(thiedInhospInfo.getCurrDeptId());
+                patMedInhosp.setLeaveldeptname(thiedInhospInfo.getCurrDeptName());
+                patMedInhosp.setLeavediagname(thiedInhospInfo.getDiagName());
+                patMedInhosp.setLeaveicd10code(thiedInhospInfo.getDiagIcd10());
+                patMedInhosp.setOutWayId(thiedInhospInfo.getOutWayId());
+                patMedInhosp.setOutWayName(thiedInhospInfo.getOutWayName());
         
         // 鍖荤敓淇℃伅
         patMedInhosp.setDrname(thiedInhospInfo.getDoctName());
         patMedInhosp.setDrcode(thiedInhospInfo.getDoctId());
         
         // 鐥呭尯淇℃伅
-        patMedInhosp.setLeavehospitaldistrictid(thiedInhospInfo.getCurrWardCode());
-        patMedInhosp.setLeavehospitaldistrictcode(thiedInhospInfo.getCurrWardId());
-        patMedInhosp.setLeavehospitaldistrictname(thiedInhospInfo.getCurrWardName());
-        patMedInhosp.setLeaveldeptid(thiedInhospInfo.getCurrDeptCode());
+                patMedInhosp.setLeavehospitaldistrictid(thiedInhospInfo.getCurrWardCode());
+                patMedInhosp.setLeavehospitaldistrictcode(thiedInhospInfo.getCurrWardId());
+                patMedInhosp.setLeavehospitaldistrictname(thiedInhospInfo.getCurrWardName());
+                patMedInhosp.setLeaveldeptid(thiedInhospInfo.getCurrDeptCode());
         
         // 鐘舵�佷俊鎭�
         patMedInhosp.setSchemestatus("0".equals(cry) ? 1L : 2L);
         
         // 绯荤粺瀛楁
         patMedInhosp.setDelFlag("0");
-        patMedInhosp.setOrgid("1");
+                patMedInhosp.setOrgid("1");
         
         return patMedInhosp;
     }
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 2525558..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,6 +14,7 @@
 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;
@@ -164,96 +166,238 @@
 
     @Override
     public SysUser selectUserByUserName2(String userName) {
-        String[] split = userName.split("&");
-        SysUser sysUser = userMapper.selectUserByUserNameByCondition(split[0], split[1]);
-        if (Objects.isNull(sysUser)) return sysUser;
-        List<SysDept> sysDepts = null;
-        if (StringUtils.isNotEmpty(split[0]) && split[0].equals("admin")) {
+        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(split[1]);
-            sysDepts = sysDeptMapper.selectDeptList(dept);
+            dept.setOrgid(orgId);
+            return sysDeptMapper.selectDeptList(dept);
         } else {
-            sysDepts = sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
+            return sysUserDeptMapper.selectDeptListByUserId(sysUser.getUserId());
         }
-        List<Long> deptIds = new ArrayList<>();
-        for (SysDept sysDept : sysDepts) {
-            deptIds.add(sysDept.getDeptId());
+    }
+    
+    /**
+     * 鎻愬彇閮ㄩ棬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(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")) {
-                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);
-                    }
-                }
-
-                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 (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);
+        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<>();
         }
-
-        sysUser.setDepts(deptIds);
-        if (!CollectionUtils.isEmpty(sysUserDeptBQs)) {
-            List<Map<String, Object>> list = new ArrayList<>();
-            for (SysUserDept sud : sysUserDeptBQs) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("districtCode", "");
-                if (StringUtils.isNotEmpty(sud.getDeptCode())) map.put("districtCode", sud.getDeptCode());
-                else continue;
-                map.put("districtName", "");
-                if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("districtName", sud.getDeptName());
-                list.add(map);
+        
+        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);
             }
-            sysUser.setBelongWards(list);
         }
-        if (!CollectionUtils.isEmpty(sysUserDeptKSs)) {
-            List<Map<String, Object>> list = new ArrayList<>();
-            for (SysUserDept sud : sysUserDeptKSs) {
-                Map<String, Object> map = new HashMap<>();
-                map.put("deptCode", "");
-                if (StringUtils.isNotEmpty(sud.getDeptCode())) map.put("deptCode", sud.getDeptCode());
-                else continue;
-                map.put("deptName", "");
-                if (StringUtils.isNotEmpty(sud.getDeptName())) map.put("deptName", sud.getDeptName());
-                list.add(map);
-            }
-            sysUser.setBelongDepts(list);
+        
+        return distinctDepts;
+    }
+    
+    /**
+     * 璁剧疆鐥呭尯淇℃伅
+     */
+    private void setBelongWards(SysUser sysUser, List<SysUserDept> sysUserDeptBQs) {
+        if (CollectionUtils.isEmpty(sysUserDeptBQs)) {
+            return;
         }
-        return sysUser;
+        
+        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);
     }
 
     /**
@@ -465,7 +609,7 @@
         if (!CollectionUtils.isEmpty(user.getDeptCodes())) {
             for (String deptCode : user.getDeptCodes()) {
                 SysDept sysDept = sysDeptMapper.selectDeptByCode(deptCode);
-                if(ObjectUtils.isEmpty(sysDept)){
+                if (ObjectUtils.isEmpty(sysDept)) {
                     continue;
                 }
 
@@ -491,7 +635,7 @@
         if (!CollectionUtils.isEmpty(user.getWardCodes())) {
             for (String wardCode : user.getWardCodes()) {
                 SysDept sysDept = sysDeptMapper.selectDeptByCode(wardCode);
-                if(ObjectUtils.isEmpty(sysDept)){
+                if (ObjectUtils.isEmpty(sysDept)) {
                     continue;
                 }
                 SysUserDept sysUserDept = new SysUserDept();
diff --git a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
index 3bc8980..52b7116 100644
--- a/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java
@@ -2183,10 +2183,10 @@
         List<ServiceSubtaskStatistic> serviceSubtaskStatistics = new ArrayList<>();
         //Map<String, List<ServiceSubtask>> collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
         Map<String, List<ServiceSubtask>> collect = new HashMap<>();
-        if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 1) {
+        if (serviceSubtaskCountReq.getLeavehospitaldistrictcodes() != null && serviceSubtaskCountReq.getLeavehospitaldistrictcodes().size() > 0) {
             collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getLeavehospitaldistrictname()).orElse("Unknown")));
 
-        }else if (serviceSubtaskCountReq.getStatisticaltype() != null && serviceSubtaskCountReq.getStatisticaltype() == 2){
+        } else if (serviceSubtaskCountReq.getDeptcodes() != null && serviceSubtaskCountReq.getDeptcodes().size() > 0) {
             collect = serviceSubtaskMapper.getSfStatistics(serviceSubtaskCountReq).stream().collect(Collectors.groupingBy(subtask -> Optional.ofNullable(subtask.getDeptname()).orElse("Unknown")));
         }
         for (List<ServiceSubtask> serviceSubtaskList : collect.values()) {
@@ -2211,7 +2211,7 @@
         serviceSubtaskStatistic.setLeavehospitaldistrictcode(serviceSubtaskList.get(0).getLeavehospitaldistrictcode());
         //鍑洪櫌浜烘
         serviceSubtaskStatistic.setDischargeCount(serviceSubtaskList.size());
-        for (ServiceSubtask serviceSubtask : serviceSubtaskList){
+        for (ServiceSubtask serviceSubtask : serviceSubtaskList) {
             //鏃犻渶闅忚浜烘
             if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 4) {
                 serviceSubtaskStatistic.setNonFollowUp(serviceSubtaskStatistic.getNonFollowUp() + 1L);
@@ -2221,67 +2221,67 @@
                 serviceSubtaskStatistic.setFollowUpNeeded(serviceSubtaskStatistic.getFollowUpNeeded() + 1L);
             }
             //棣栨鍑洪櫌闅忚
-            if(serviceSubtask.getVisitCount() == 1){
+            if (serviceSubtask.getVisitCount() != null && serviceSubtask.getVisitCount() == 1) {
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
                     serviceSubtaskStatistic.setNeedFollowUp(serviceSubtaskStatistic.getNeedFollowUp() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
                     serviceSubtaskStatistic.setPendingFollowUp(serviceSubtaskStatistic.getPendingFollowUp() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)){
+                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)) {
                     serviceSubtaskStatistic.setFollowUpSuccess(serviceSubtaskStatistic.getFollowUpSuccess() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
                     serviceSubtaskStatistic.setFollowUpFail(serviceSubtaskStatistic.getFollowUpFail() + 1L);
                 }
                 if (serviceSubtaskStatistic.getNeedFollowUp() > 0) {
-                    double rate = (double)(serviceSubtaskStatistic.getFollowUpSuccess() + serviceSubtaskStatistic.getFollowUpFail()) / serviceSubtaskStatistic.getNeedFollowUp();
+                    double rate = (double) (serviceSubtaskStatistic.getFollowUpSuccess() + serviceSubtaskStatistic.getFollowUpFail()) / serviceSubtaskStatistic.getNeedFollowUp();
                     serviceSubtaskStatistic.setFollowUpRate(percentFormat.format(rate));
                 } else {
                     serviceSubtaskStatistic.setFollowUpRate("0.00%");
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManual(serviceSubtaskStatistic.getManual() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSms(serviceSubtaskStatistic.getSms() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChat(serviceSubtaskStatistic.getWeChat() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
                     serviceSubtaskStatistic.setAbnormal(serviceSubtaskStatistic.getAbnormal() + 1L);
                 }
             }//浜屾鍑洪櫌闅忚
-            else if (serviceSubtask.getVisitCount() > 1){
+            else if (serviceSubtask.getVisitCount() != null && serviceSubtask.getVisitCount() > 1) {
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() != 4) {
                     serviceSubtaskStatistic.setNeedFollowUpAgain(serviceSubtaskStatistic.getNeedFollowUpAgain() + 1L);
                 }
                 if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 2) {
                     serviceSubtaskStatistic.setPendingFollowUpAgain(serviceSubtaskStatistic.getPendingFollowUpAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)){
+                if (serviceSubtask.getSendstate() != null && (serviceSubtask.getSendstate() == 1 || serviceSubtask.getSendstate() == 3 || serviceSubtask.getSendstate() == 6)) {
                     serviceSubtaskStatistic.setFollowUpSuccessAgain(serviceSubtaskStatistic.getFollowUpSuccessAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getSendstate() == 5) {
                     serviceSubtaskStatistic.setFollowUpFailAgain(serviceSubtaskStatistic.getFollowUpFailAgain() + 1L);
                 }
                 if (serviceSubtaskStatistic.getNeedFollowUp() > 0) {
-                    double rate = (double)(serviceSubtaskStatistic.getFollowUpSuccessAgain() + serviceSubtaskStatistic.getFollowUpFailAgain()) / serviceSubtaskStatistic.getNeedFollowUpAgain();
+                    double rate = (double) (serviceSubtaskStatistic.getFollowUpSuccessAgain() + serviceSubtaskStatistic.getFollowUpFailAgain()) / serviceSubtaskStatistic.getNeedFollowUpAgain();
                     serviceSubtaskStatistic.setFollowUpRateAgain(percentFormat.format(rate));
                 } else {
                     serviceSubtaskStatistic.setFollowUpRateAgain("0.00%");
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("1")) {
                     serviceSubtaskStatistic.setManualAgain(serviceSubtaskStatistic.getManualAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("4")) {
                     serviceSubtaskStatistic.setSmsAgain(serviceSubtaskStatistic.getSmsAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getPreachform().equals("5")) {
                     serviceSubtaskStatistic.setWeChatAgain(serviceSubtaskStatistic.getWeChatAgain() + 1L);
                 }
-                if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")){
+                if (serviceSubtask.getSendstate() != null && serviceSubtask.getExcep().equals("1")) {
                     serviceSubtaskStatistic.setAbnormalAgain(serviceSubtaskStatistic.getAbnormalAgain() + 1L);
                 }
             }
diff --git a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
index 6b379f6..5cba952 100644
--- a/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml
@@ -963,10 +963,10 @@
                 </foreach>
             </if>
             <if test="deptcodes != null and deptcodes.size() > 0">
-                AND leavehospitaldistrictcode IN
+                AND deptcode IN
                 <foreach collection="deptcodes" item="deptcode" open="(" separator=","
                          close=")">
-                    #{leavehospitaldistrictcode}
+                    #{deptcode}
                 </foreach>
             </if>
             <if test="serviceType != null and serviceType.size() > 0">

--
Gitblit v1.9.3