package org.springblade.desk.utils; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.system.entity.Dept; import org.springblade.system.feign.ISysClient; import org.springblade.system.user.entity.User; import org.springblade.system.user.feign.IUserClient; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /***/ @Slf4j @Component @AllArgsConstructor public class DeptUserUtil { private ISysClient sysClient ; private IUserClient userClient; /** * 获取职位postId * @param postName * @param tenantId * @return */ public String getPostId(String postName,String tenantId){ R<String> rPost = sysClient.getPostIds(Func.toStr(tenantId,"000000"),postName); return rPost.getData(); } /** * 根据角色roleName获取roleId */ public String getRoleId(String tenantId,String roleName){ R<String> rRole = sysClient.getRoleIds(tenantId,roleName); return rRole.getData(); } /** * 根据部门deptName获取deptId */ public String getDeptId(String tenantId,String deptName){ R<String> rDept = sysClient.getDeptIds(Func.toStr(tenantId,"000000"),deptName); return rDept.getData(); } /** * 根据UserId,获取用户信息User */ public User getUserById(Long userId){ R<User> rUser = userClient.userInfoById(userId); return rUser.getData(); } /** * 根据RoleId,获取用户列表 */ public List<User> getUserListByRoleId(String roleId){ HashMap<String ,Object> map = new HashMap<String,Object>(); map.put("roleId",roleId); R<List<User>> rUsers = userClient.getUserList(map); return rUsers.getData(); } /** * 根据postId,获取用户列表 */ public List<User> getUserListByPostId(String postId){ HashMap<String ,Object> map = new HashMap<String,Object>(); map.put("postId",postId); R<List<User>> rUsers = userClient.getUserList(map); return rUsers.getData(); } /** * 根据RoleId、deptId,获取用户列表 */ public List<User> getUserListByRoleIdAndDeptId(String roleId,String deptId){ HashMap<String ,Object> map = new HashMap<String,Object>(); map.put("deptId",deptId); map.put("roleId",roleId); R<List<User>> rUsers = userClient.getUserList(map); return rUsers.getData(); } /** * 根据RoleId、deptId,获取用户列表 */ public List<User> getUserListByPostIdAndDeptId(String postId,String deptId){ HashMap<String ,Object> map = new HashMap<String,Object>(); map.put("deptId",deptId); map.put("postId",postId); R<List<User>> rUsers = userClient.getUserList(map); return rUsers.getData(); } /** * 根据RoleId、deptId,获取用户列表,向上级部门查询 */ public List<User> getUserListByRoleIdAndDeptId(String roleId,String deptId,boolean isParent){ List<User> list = getUserListByRoleIdAndDeptId(roleId,deptId); if(isParent&&Func.isEmpty(list)) { Dept dept = getDeptById(Long.parseLong(deptId)); if (Func.isEmpty(dept)) { return null; } list = getUserListByRoleIdAndDeptId(roleId, String.valueOf(dept.getParentId()), true); } return list; } /** * 根据postId、deptId,获取用户列表,向上级部门查询 */ public List<User> getUserListByPostIdAndDeptId(String postId,String deptId,boolean isParent){ List<User> list = getUserListByPostIdAndDeptId(postId,deptId); if(isParent&&Func.isEmpty(list)) { Dept dept = getDeptById(Long.parseLong(deptId)); if (Func.isEmpty(dept)) { return null; } list = getUserListByPostIdAndDeptId(postId, String.valueOf(dept.getParentId()), true); } return list; } /** * 根据部门deptId,获取部门信息Dept(包含部门主管managerUser) */ public Dept getDeptById(Long deptId){ R<Dept> rDept = sysClient.getDept(deptId); return rDept.getData(); } /** * 根据部门deptId,获取所有子部门信息Dept */ public List<Dept> getChildDeptsById(Long deptId){ R<List<Dept>> rDept = sysClient.getDeptChild(deptId); return rDept.getData(); } /** * 根据部门deptIds,获取所有部门信息Dept */ public List<Dept> getChildDeptsById(String deptIds){ R<List<Dept>> rDept = sysClient.getDepts(deptIds); return rDept.getData(); } /** * 根据部门deptId,获取上级部门(包含上级主管managerUser),区分用户userId */ public Dept getManagerDept(Long deptId,Long distinctUserId){ if(Func.isEmpty(distinctUserId)){ return null; } Dept dept = getDeptById(deptId); if(dept==null){ return null; } Long managerUserId = dept.getManagerUser(); if(Func.isEmpty(managerUserId)){ dept = getManagerDept(dept.getParentId(),distinctUserId); } if(!Func.isEmpty(dept)&&distinctUserId.equals(dept.getManagerUser())){ dept = getManagerDept(dept.getParentId(),distinctUserId); } return dept; } /** * 根据部门deptId,获取上级部门(包含上级主管managerUser),区分用户userId,设置上级部门上限 * 部门等级 level : 1 -> 10 最高级 -> 最低级 */ public Dept getManagerDept(Long deptId,Long distinctUserId,Integer level){ if(Func.isEmpty(distinctUserId) || Func.isEmpty(level)){ return null; } Dept dept = getDeptById(deptId); if(dept==null){ return null; } Long managerUserId = dept.getManagerUser(); if(Func.isEmpty(managerUserId)){ dept = getManagerDept(dept.getParentId(),distinctUserId,level); } Integer managerDeptLevel = dept.getLevel(); if(Func.isEmpty(managerDeptLevel) || managerDeptLevel.compareTo(level)<0){ return null; } if(!Func.isEmpty(dept)&&distinctUserId.equals(dept.getManagerUser())){ dept = getManagerDept(dept.getParentId(),distinctUserId,level); } return dept; } /** * 根据部门deptId及职位postId,获取上级部门(包含上级主管managerUser),区分用户userId */ public Dept getManagerDept(Long deptId,Long distinctUserId,Long postId){ if(Func.isEmpty(postId) || Func.isEmpty(distinctUserId)|| Func.isEmpty(deptId)){ return null; } Dept dept = getDeptById(deptId); if(dept==null){ return null; } Long managerUserId = dept.getManagerUser(); if(Func.isEmpty(managerUserId)){ dept = getManagerDept(dept.getParentId(),distinctUserId,postId); } if(!Func.isEmpty(dept)&&!distinctUserId.equals(dept.getManagerUser())){ R<User> rUser = userClient.userInfoById(dept.getManagerUser()); User user = rUser.getData(); if(user==null || !postId.equals(user.getPostId())){ dept = getManagerDept(dept.getParentId(),distinctUserId,postId); } } else if(!Func.isEmpty(dept)&&distinctUserId.equals(dept.getManagerUser())){ dept = getManagerDept(dept.getParentId(),distinctUserId,postId); } return dept; } /** * 判断是否是部门主管 */ public boolean isManagerUser(Long deptId,Long userId){ if(Func.isEmpty(deptId) || Func.isEmpty(userId)){ return false; } Dept dept = getDeptById(deptId); if(dept==null){ return false; } Long managerUserId = dept.getManagerUser(); if(userId.compareTo(managerUserId)==0){ return true; } return false; } public String isStrManagerUser(Long deptId,Long userId){ if(Func.isEmpty(deptId) || Func.isEmpty(userId)){ return "N"; } Dept dept = getDeptById(deptId); if(dept==null){ return "N"; } Long managerUserId = dept.getManagerUser(); if(userId.compareTo(managerUserId)==0){ return "Y"; } return "N"; } /** * 判断是否是某个部门 */ public boolean isOneDept(String deptName,Long deptId){ if(Func.isEmpty(deptName) || Func.isEmpty(deptId)){ return false; } String deptIds = getDeptId(AuthUtil.getTenantId(),deptName); if(deptIds==null){ return false; } if(deptId.equals(deptIds)){ return true; } return false; } public String isStrOneDept(String deptName,Long deptId){ if(Func.isEmpty(deptName) || Func.isEmpty(deptId)){ return "N"; } String deptIds = getDeptId(AuthUtil.getTenantId(),deptName); if(Func.isEmpty(deptIds)){ return "N"; } if(deptIds.equals(deptId)){ return "Y"; } return "N"; } /** * 判断是否最高主管 */ public boolean isHighManagerUser(){ return false; } /** * 判断是分公司,还是总部 */ public String SubStrCompany(Long deptId){ String result ="速品"; if(Func.isEmpty(deptId)){ return result; } Dept dept = getDeptById(deptId); if(dept==null){ return result; } R<List<String>> rDeptNames = sysClient.getDeptNames(dept.getAncestors()); if(Func.isNotEmpty(rDeptNames) && Func.isNotEmpty(rDeptNames.getData())){ for(String deptName : rDeptNames.getData()){ if(deptName.contains("福州")){ result = "福州"; return result; } if(deptName.contains("厦门")){ result = "厦门"; return result; } if(deptName.contains("泉州")){ result = "泉州"; return result; } } } return result; } /** * 判断是否分公司 */ public boolean isSubCompany(Long deptId){ if(Func.isEmpty(deptId)){ return false; } Dept dept = getDeptById(deptId); if(dept==null){ return false; } if(dept.getDeptCategory().equals(1)){ return true; } if(!Func.isEmpty(dept.getParentId())){ return isSubCompany(dept.getParentId()); } return false; } /** * 根据租户id获取部门列表 * @param tenantId * @return */ public List<Dept>getDeptList(String tenantId){ List<Dept>list=sysClient.getDeptList(tenantId).getData(); return list; } /** * 获取用户列表 * @param tenantId * @return */ public List<User> getUserList(String tenantId){ HashMap<String,Object>map=new HashMap<String,Object>(); map.put("tenant_id",tenantId); return userClient.getUserList(map).getData(); } /** * 根据部门id,租户id 获取本部门人员list; * @param deptId * @return */ public List<User>getDeptUser(String deptId,String tenantId){ HashMap<String,Object>map=new HashMap<String,Object>(); map.put("tenant_id",tenantId); List<User>users=userClient.getUserList(map).getData(); List<User>list=new ArrayList<User>(); //根据部门id筛选,本部门下人员 for(User user:users){ if(deptId.equals(user.getDeptId())){ list.add(user); } } return list; } }