liusheng
4 天以前 4bb2588c5579d43ae5d343c7343a425a80b02d6c
代码提交
已修改5个文件
453 ■■■■■ 文件已修改
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java 104 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java 306 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/ServiceSubtaskServiceImpl.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/ServiceSubtaskMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
     */
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("【processPatientArchive】新增患者档案,患者编号:{}", patArchive.getPatientno());
        } else {
                } else {
            patArchive.setId(existingArchives.get(0).getId());
            patArchiveService.updateArchive(patArchive);
            log.debug("【processPatientArchive】更新患者档案,患者编号:{}", 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("【buildPatientArchive】解析出生日期失败:{}", 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("【processPatientInhospInfo】更新住院信息,患者编号:{},流水号:{}", 
                patArchive.getPatientno(), patMedInhosp.getSerialnum());
        } else {
                } else {
            patMedInhospService.insertPatMedInhosp(patMedInhosp);
            log.debug("【processPatientInhospInfo】新增住院信息,患者编号:{},流水号:{}", 
                patArchive.getPatientno(), patMedInhosp.getSerialnum());
@@ -955,74 +955,74 @@
     * 构建患者住院信息
     */
    private PatMedInhosp buildPatientInhospInfo(ThiedInhospInfo thiedInhospInfo, PatArchive patArchive, String cry) {
        PatMedInhosp patMedInhosp = new PatMedInhosp();
                PatMedInhosp patMedInhosp = new PatMedInhosp();
        
        // 患者基本信息
        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("【buildPatientInhospInfo】解析入院时间失败:{}", 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("【buildPatientInhospInfo】解析出院时间失败:{}", 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;
    }
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;
            }
            // 解析用户名和机构ID
            String[] userInfo = parseUserName(userName);
            if (userInfo == null) {
                log.warn("用户名格式不正确: {}", 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;
        }
    }
    /**
     * 解析用户名,提取用户名和机构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);
            //如果是admin,需要对sysUserDeptBQs,sysUserDeptBQs去重
            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();
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);
                }
            }
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">