| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | |
| | | @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.setOrgid(orgId); |
| | | return sysUserDept; |
| | | } |
| | | 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); |
| | | |
| | | /** |
| | | * 获取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); |
| | | } |
| | | } |
| | | |
| | | 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; |
| | | return distinctDepts; |
| | | } |
| | | |
| | | } 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); |
| | | /** |
| | | * 设置病区信息 |
| | | */ |
| | | private void setBelongWards(SysUser sysUser, List<SysUserDept> sysUserDeptBQs) { |
| | | if (CollectionUtils.isEmpty(sysUserDeptBQs)) { |
| | | return; |
| | | } |
| | | |
| | | sysUser.setDepts(deptIds); |
| | | if (!CollectionUtils.isEmpty(sysUserDeptBQs)) { |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | for (SysUserDept sud : sysUserDeptBQs) { |
| | | List<Map<String, Object>> wardList = sysUserDeptBQs.stream() |
| | | .filter(sud -> StringUtils.isNotEmpty(sud.getDeptCode())) |
| | | .map(sud -> { |
| | | 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); |
| | | map.put("districtCode", StringUtils.defaultString(sud.getDeptCode(), "")); |
| | | map.put("districtName", StringUtils.defaultString(sud.getDeptName(), "")); |
| | | return map; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | |
| | | sysUser.setBelongWards(wardList); |
| | | } |
| | | sysUser.setBelongWards(list); |
| | | |
| | | /** |
| | | * 设置科室信息 |
| | | */ |
| | | private void setBelongDepts(SysUser sysUser, List<SysUserDept> sysUserDeptKSs) { |
| | | if (CollectionUtils.isEmpty(sysUserDeptKSs)) { |
| | | return; |
| | | } |
| | | if (!CollectionUtils.isEmpty(sysUserDeptKSs)) { |
| | | List<Map<String, Object>> list = new ArrayList<>(); |
| | | for (SysUserDept sud : sysUserDeptKSs) { |
| | | |
| | | List<Map<String, Object>> deptList = sysUserDeptKSs.stream() |
| | | .filter(sud -> StringUtils.isNotEmpty(sud.getDeptCode())) |
| | | .map(sud -> { |
| | | 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 sysUser; |
| | | map.put("deptCode", StringUtils.defaultString(sud.getDeptCode(), "")); |
| | | map.put("deptName", StringUtils.defaultString(sud.getDeptName(), "")); |
| | | return map; |
| | | }) |
| | | .collect(Collectors.toList()); |
| | | |
| | | sysUser.setBelongDepts(deptList); |
| | | } |
| | | |
| | | /** |