package com.norteksoft.product.api.impl; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate; import com.norteksoft.acs.entity.authorization.RoleDepartment; import com.norteksoft.acs.entity.authorization.RoleUser; import com.norteksoft.acs.entity.authorization.RoleWorkgroup; import com.norteksoft.acs.entity.log.LoginLog; import com.norteksoft.acs.entity.organization.Company; import com.norteksoft.acs.entity.organization.DepartmentUser; import com.norteksoft.acs.entity.organization.UserInfo; import com.norteksoft.acs.entity.organization.WorkgroupUser; import com.norteksoft.acs.entity.sysSetting.ServerConfig; import com.norteksoft.acs.service.organization.CompanyManager; import com.norteksoft.acs.service.organization.DepartmentManager; import com.norteksoft.acs.service.organization.UserManager; import com.norteksoft.product.api.AcsService; import com.norteksoft.product.api.entity.BusinessSystem; import com.norteksoft.product.api.entity.Department; import com.norteksoft.product.api.entity.User; import com.norteksoft.product.api.entity.Workgroup; import com.norteksoft.product.api.entity.Role; import com.norteksoft.product.api.utils.BeanUtil; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.ParameterUtils; import com.norteksoft.product.util.ThreadParameters; @Service @Transactional public class AcsServiceImpl implements AcsService{ public final static String DEPARTMENT = "department"; public final static String WORKGROUP = "workgroup"; public final static String DELETED = "deleted"; protected SessionFactory sessionFactory; private SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.Department, Long> departmentDao; private SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.Workgroup, Long> workGroupDao; private SimpleHibernateTemplate<DepartmentUser, Long> depUserDao; private SimpleHibernateTemplate<WorkgroupUser, Long> workGroupToUserDao; private SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.User, Long> userDao; private SimpleHibernateTemplate<UserInfo, Long> userInfoDao; private SimpleHibernateTemplate<com.norteksoft.acs.entity.authorization.BusinessSystem, Long> businessSystemDao; private SimpleHibernateTemplate<RoleUser, Long> roleUserDao; private SimpleHibernateTemplate<com.norteksoft.acs.entity.authorization.Role, Long> roleDao; private SimpleHibernateTemplate<LoginLog, Long> loginUserLogDao; private SimpleHibernateTemplate<ServerConfig, Long> serverConfigDao; @Autowired private UserManager userManager; @Autowired private DepartmentManager departmentManager; @Autowired private CompanyManager companyManager; @Autowired public void setSessionFactory(SessionFactory sessionFactory) { departmentDao = new SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.Department, Long>(sessionFactory, com.norteksoft.acs.entity.organization.Department.class); workGroupDao = new SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.Workgroup, Long>(sessionFactory, com.norteksoft.acs.entity.organization.Workgroup.class); depUserDao = new SimpleHibernateTemplate<DepartmentUser, Long>(sessionFactory, DepartmentUser.class); workGroupToUserDao = new SimpleHibernateTemplate<WorkgroupUser, Long>(sessionFactory, WorkgroupUser.class); userDao = new SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.User, Long>(sessionFactory,com.norteksoft.acs.entity.organization.User.class); userInfoDao = new SimpleHibernateTemplate<UserInfo, Long>(sessionFactory,UserInfo.class); businessSystemDao = new SimpleHibernateTemplate<com.norteksoft.acs.entity.authorization.BusinessSystem, Long>(sessionFactory,com.norteksoft.acs.entity.authorization.BusinessSystem.class); roleUserDao = new SimpleHibernateTemplate<RoleUser, Long>(sessionFactory,RoleUser.class); roleDao = new SimpleHibernateTemplate<com.norteksoft.acs.entity.authorization.Role, Long>(sessionFactory,com.norteksoft.acs.entity.authorization.Role.class); loginUserLogDao = new SimpleHibernateTemplate<LoginLog, Long>(sessionFactory, LoginLog.class); serverConfigDao=new SimpleHibernateTemplate<ServerConfig, Long>(sessionFactory, ServerConfig.class); } protected SessionFactory getSessionFactory() { sessionFactory = (SessionFactory)ContextUtils.getBean("sessionFactory"); return sessionFactory; } private Long getCompanyId(){ Long id = ContextUtils.getCompanyId(); if(id == null) throw new RuntimeException("公司ID为空"); return id; } /** * 请使用 getOnlineUserCount() */ @Deprecated public Long getOnlineUserCount(Long companyId){ return getOnlineUserCount(); } /** * 查询在线用户数量 * @param companyId * @return */ public Long getOnlineUserCount(){ return loginUserLogDao.findLong( "select count(u) from LoginLog u where u.exitTime is null and u.companyId=? and u.deleted=?", getCompanyId(), false); } @SuppressWarnings("unchecked") public List<Long> getOnlineUserIds(){ return loginUserLogDao.find( "select u.userId from LoginLog u where u.exitTime is null and u.companyId=? and u.deleted=?", getCompanyId(), false); } /** * 请使用 getDepartments() */ @Deprecated public List<Department> getDepartmentList(Long companyId) { return getDepartments(); } /** * 根据公司ID查询该公司所有的部门 * * @param companyId 公司ID * @return List<Department> */ @SuppressWarnings("unchecked") @Transactional(readOnly = true) public List<Department> getDepartments() { List<com.norteksoft.acs.entity.organization.Department> list = departmentDao.find( "FROM Department d WHERE d.company.id=? AND d.deleted=? and d.parent.id is null ORDER BY d.weight desc", getCompanyId(), false); return BeanUtil.turnToModelDepartmentList(list); } /** * 请使用 getWorkgroups() */ @Deprecated public List<Workgroup> getWorkGroupList(Long companyId) { return getWorkgroups(); } /** * 根据公司ID查询该公司所有的工作组 * * @param companyId 公司ID * @return List<WorkGroup> */ @Transactional(readOnly = true) public List<Workgroup> getWorkgroups() { List<com.norteksoft.acs.entity.organization.Workgroup> workGroupList = workGroupDao.findByCriteria( Restrictions.eq("company.id", getCompanyId()), Restrictions.eq( DELETED, false)); return BeanUtil.turnToModelWorkgroupList(workGroupList); } /** * 请使用 getUsersByDepartmentId */ @Deprecated public List<com.norteksoft.acs.entity.organization.User> getUserListByDepartmentId(Long departmentId) { if(departmentId == null) throw new RuntimeException("没有给定查询用户集合的查询条件:部门ID"); String hql = "select u FROM DepartmentUser d join d.user u WHERE u.deleted=? and d.department.id=? AND d.deleted=? order by u.weight desc"; return depUserDao.find(hql, false,departmentId,false); } /** * 根据部门ID查询该部门所有的人员 * * @param departmentId 部门Id * @return List<User> */ @Transactional(readOnly = true) public List<User> getUsersByDepartmentId(Long departmentId) { if(departmentId == null) throw new RuntimeException("没有给定查询用户集合的查询条件:部门ID"); List<Object[]> list = getUsersByDepartment(departmentId); return BeanUtil.turnToModelUserList1(list); } /** * 根据部门ID查询该部门所有的人员 * * @param departmentId 部门Id * @return List<User> */ @Transactional(readOnly = true) @SuppressWarnings("unchecked") public List<Object[]> getUsersByDepartment(Long departmentId) { if(departmentId == null) throw new RuntimeException("没有给定查询用户集合的查询条件:部门ID"); String hql = "select u,ui FROM DepartmentUser d join d.user u join u.userInfos ui WHERE u.deleted=? and d.department.id=? AND d.deleted=? order by u.weight desc"; return depUserDao.find(hql, false,departmentId,false); } /** * 请使用 getUserLoginNamesByDepartmentName */ @Deprecated public List<String> getUserLoginNameListByDepartmentName(String departmentName,Long companyId) { return getUserLoginNamesByDepartmentName(departmentName); } /** * 根据部门名称得到部门下用户的登录名 * @param companyId * @param loginName * @return */ @Transactional(readOnly = true) @SuppressWarnings("unchecked") public List<String> getUserLoginNamesByDepartmentName(String departmentName) { if(StringUtils.isEmpty(departmentName)) throw new RuntimeException("没有给定查询用户登录名的查询条件:部门名称"); String dhql ="from Department d where d.name=? and d.deleted=? and d.company.id=?"; com.norteksoft.acs.entity.organization.Department department=(com.norteksoft.acs.entity.organization.Department)departmentDao.findUnique(dhql, departmentName,false,getCompanyId()); List<String> userLoginNameList = new ArrayList<String>(); String hql = "FROM DepartmentUser d WHERE d.department.id=? AND d.deleted=? ORDER BY d.user.weight DESC"; List<DepartmentUser> list = depUserDao.find(hql, department.getId(),false); for (DepartmentUser departmentToUser : list) { com.norteksoft.acs.entity.organization.User user = departmentToUser.getUser(); if(user!=null&&!user.isDeleted()){ userLoginNameList.add(user.getLoginName()); } } return userLoginNameList; } /** * 请使用 getUsersByWorkgroupId */ @Deprecated public List<com.norteksoft.acs.entity.organization.User> getUserListByWorkGroupId(Long workgroupId) { if(workgroupId == null) throw new RuntimeException("没有给定查询用户集合的查询条件: 工作组ID"); String hql = "select u FROM WorkgroupUser d join d.user u WHERE u.deleted=? and d.workgroup.id=? AND d.deleted=? ORDER BY d.user.weight DESC"; return workGroupDao.find(hql,false, workgroupId,false); } /** * 根据工作组ID查询该工作组所有的人员 * * @param workGroupId 工作组Id * @return List<User> */ @Transactional(readOnly = true) @SuppressWarnings("unchecked") public List<User> getUsersByWorkgroupId(Long workgroupId) { if(workgroupId == null) throw new RuntimeException("没有给定查询用户集合的查询条件: 工作组ID"); String hql = "select u FROM WorkgroupUser d join d.user u WHERE u.deleted=? and d.workgroup.id=? AND d.deleted=? ORDER BY d.user.weight DESC"; List<com.norteksoft.acs.entity.organization.User> list = workGroupDao.find(hql,false, workgroupId,false); return BeanUtil.turnToModelUserList(list); } /** * 根据父部门id查询该父部门下所有子部门 */ @SuppressWarnings("unchecked") @Transactional(readOnly = true) public List<Department> getSubDepartmentList(Long paternDepartmentId) { if(paternDepartmentId == null) throw new RuntimeException("没有给定查询子部门集合的查询条件: 父部门ID"); List<com.norteksoft.acs.entity.organization.Department> list = departmentDao.find( "FROM Department d WHERE d.parent.id=? AND d.deleted=? ORDER BY d.weight desc", paternDepartmentId, false); return BeanUtil.turnToModelDepartmentList(list); } /** * 根据用户Id得到用户实体 * @return User */ @Transactional(readOnly = true) public User getUserById(Long id) { if (id instanceof Long) return BeanUtil.turnToModelUser(userDao.get(id)); return null; } /** * 获取当前用户所有角色的字符串表示形式(即角色编码以逗号隔开) * @return String */ @Transactional(readOnly = true) public String getCurrentUserRoles(){ Long userId = ContextUtils.getUserId(); if(userId == null) return ""; com.norteksoft.acs.entity.organization.User user = userDao.get(userId); if(user == null) return ""; return getRoleCodesFromUser(user); } @Transactional(readOnly = true) public String getCurrentUserRoles(Long userId){ com.norteksoft.acs.entity.organization.User user = userDao.get(userId); if(user == null) return ""; return getRoleCodesFromUser(user); } @Deprecated public Set<Role> getRolesByUserId(Long userId,Long consigner,Long companyId){ return getTrustedRolesByUserId(userId, consigner); } /** * 查询用户委托的角色。 * @param userId * @param sourceId * @param companyId * @return */ @Transactional(readOnly = true) @SuppressWarnings("unchecked") public Set<Role> getTrustedRolesByUserId(Long trusteeId, Long trustorId){ if(trusteeId == null) throw new RuntimeException("没有给定查询委托角色的查询条件:受托人ID"); if(trustorId == null) throw new RuntimeException("没有给定查询委托角色的查询条件:委托人ID"); String hql="FROM RoleUser ru WHERE ru.consigner=? AND ru.user.id=? AND ru.companyId=?"; List<RoleUser> roleUsers = roleUserDao.find(hql, trustorId, trusteeId, getCompanyId()); Set<Role> roles = new HashSet<Role>(); for(RoleUser ru : roleUsers){ Role role=BeanUtil.turnToModelRole(roleDao.get(ru.getRole().getId())); roles.add(role); } return roles; } /** * 根据用户获取用户的角色字符串形式(不含委托) */ @Deprecated public String getRoleCodesFromUser(com.norteksoft.acs.entity.organization.User user){ return getRolesExcludeTrustedRole(user); } @Deprecated public String getRolesExcludeTrustedRole(com.norteksoft.acs.entity.organization.User user){ if(user == null) return ""; Set<com.norteksoft.acs.entity.authorization.Role> roles = new HashSet<com.norteksoft.acs.entity.authorization.Role>(); // 用户具有的角色 Set<RoleUser> roleUsers = user.getRoleUsers(); for(RoleUser ru : roleUsers){ if(ru.isDeleted()) continue; if(ru.getConsigner()!= null) continue; com.norteksoft.acs.entity.authorization.Role role = ru.getRole(); if(!role.isDeleted()) roles.add(role); } // 用户具有的部门拥有的角色 Set<DepartmentUser> departmentUsers = user.getDepartmentUsers(); for(DepartmentUser du : departmentUsers){ if(du.isDeleted() || du.getDepartment().isDeleted()) continue; for(RoleDepartment rd : du.getDepartment().getRoleDepartments()){ if(!rd.isDeleted() && !rd.getRole().isDeleted()) roles.add(rd.getRole()); } } // 用户具有的工作组拥有的角色 Set<WorkgroupUser> workgroupUsers = user.getWorkgroupUsers(); for(WorkgroupUser wu : workgroupUsers){ if(wu.isDeleted() || wu.getWorkgroup().isDeleted()) continue; for(RoleWorkgroup rw : wu.getWorkgroup().getRoleWorkgroups()){ if(!rw.isDeleted() && !rw.getRole().isDeleted()) roles.add(rw.getRole()); } } List< com.norteksoft.acs.entity.authorization.Role> roleList = new ArrayList<com.norteksoft.acs.entity.authorization.Role>(); roleList.addAll(roles); //角色按权重排序 sortRoles(roleList); // 生成字符串形式 StringBuilder roleStrings = new StringBuilder(); for(com.norteksoft.acs.entity.authorization.Role role : roleList){ roleStrings.append(role.getCode()).append(","); } // 去掉最后一个逗号 if(roleStrings.lastIndexOf(",") != -1 && roleStrings.lastIndexOf(",") == roleStrings.length()-1){ roleStrings.replace(roleStrings.length()-1, roleStrings.length(), ""); } return roleStrings.toString(); } @SuppressWarnings("unchecked") public String getRolesExcludeTrustedRole(User user){ if(user == null) return ""; Set<com.norteksoft.acs.entity.authorization.Role> roles = new HashSet<com.norteksoft.acs.entity.authorization.Role>(); // 用户具有的角色 String hql = "select r from Role r join r.roleUsers ru where r.deleted=? and ru.deleted=? and ru.user is not null and ru.user.id=? and ru.consigner is not null"; List<com.norteksoft.acs.entity.authorization.Role> userRoles = roleDao.find(hql, false,false,user.getId()); roles.addAll(userRoles); // 用户具有的部门拥有的角色 hql = "select r from Role r join r.roleDepartments rd join rd.department d join d.departmentUsers du where r.deleted=? and rd.deleted=? and d.deleted=? and du.deleted=? and du.user is not null and du.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> deptRoles = roleDao.find(hql, false,false,false,false,user.getId()); roles.addAll(deptRoles); // 用户具有的工作组拥有的角色 hql = "select r from Role r join r.roleWorkgroups rw join rw.workgroup wg join wg.workgroupUsers wu where r.deleted=? and rw.deleted=? and wg.deleted=? and wu.deleted=? and wu.user is not null and wu.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> workgroupRoles = roleDao.find(hql, false,false,false,false,user.getId()); roles.addAll(workgroupRoles); List< com.norteksoft.acs.entity.authorization.Role> roleList = new ArrayList<com.norteksoft.acs.entity.authorization.Role>(); roleList.addAll(roles); //角色按权重排序 sortRoles(roleList); // 生成字符串形式 StringBuilder roleStrings = new StringBuilder(); for(com.norteksoft.acs.entity.authorization.Role role : roleList){ roleStrings.append(role.getCode()).append(","); } // 去掉最后一个逗号 if(roleStrings.lastIndexOf(",") != -1 && roleStrings.lastIndexOf(",") == roleStrings.length()-1){ roleStrings.replace(roleStrings.length()-1, roleStrings.length(), ""); } return roleStrings.toString(); } /** * 根据用户获取用户的角色 * @param userId * @return */ @Transactional(readOnly = true) public Set<Role> getRolesByUser(Long userId){ com.norteksoft.acs.entity.organization.User user = userDao.get(userId); if(user == null) return null; User modeUser = BeanUtil.turnToModelUser(user); return getRolesByUser(modeUser); } @Deprecated public Set<Role> getRolesByUser(com.norteksoft.acs.entity.organization.User user){ if(user == null) return null; Set<Role> roles = new HashSet<Role>(); // 用户具有的角色 Set<RoleUser> roleUsers = user.getRoleUsers(); for(RoleUser ru : roleUsers){ if(ru.isDeleted()) continue; if(ru.getConsigner() != null) continue; Role role = BeanUtil.turnToModelRole(ru.getRole()); if(!role.isDeleted()) roles.add(role); } // 用户具有的部门拥有的角色 Set<DepartmentUser> departmentUsers = user.getDepartmentUsers(); for(DepartmentUser du : departmentUsers){ if(du.isDeleted() || du.getDepartment().isDeleted()) continue; for(RoleDepartment rd : du.getDepartment().getRoleDepartments()){ if(!rd.isDeleted() && !rd.getRole().isDeleted()) roles.add(BeanUtil.turnToModelRole(rd.getRole())); } } // 用户具有的工作组拥有的角色 Set<WorkgroupUser> workgroupUsers = user.getWorkgroupUsers(); for(WorkgroupUser wu : workgroupUsers){ if(wu.isDeleted() || wu.getWorkgroup().isDeleted()) continue; for(RoleWorkgroup rw : wu.getWorkgroup().getRoleWorkgroups()){ if(!rw.isDeleted() && !rw.getRole().isDeleted()) roles.add(BeanUtil.turnToModelRole(rw.getRole())); } } return roles; } /** * 根据用户查询用户的角色(不含委托) * @param user * @return */ @SuppressWarnings("unchecked") public Set<Role> getRolesByUser(User user){ if(user == null) return null; Set<Role> roles = new HashSet<Role>(); Set<com.norteksoft.acs.entity.authorization.Role> oldRoles = new HashSet<com.norteksoft.acs.entity.authorization.Role>(); // 用户具有的角色 String hql = "select r from Role r join r.roleUsers ru where r.deleted=? and ru.deleted=? and ru.user is not null and ru.user.id=? and ru.consigner is null"; List<com.norteksoft.acs.entity.authorization.Role> userRoles = roleDao.find(hql, false,false,user.getId()); oldRoles.addAll(userRoles); // 用户具有的部门拥有的角色 hql = "select r from Role r join r.roleDepartments rd join rd.department d join d.departmentUsers du where r.deleted=? and rd.deleted=? and d.deleted=? and du.deleted=? and du.user is not null and du.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> deptRoles = roleDao.find(hql, false,false,false,false,user.getId()); oldRoles.addAll(deptRoles); // 用户具有的工作组拥有的角色 hql = "select r from Role r join r.roleWorkgroups rw join rw.workgroup wg join wg.workgroupUsers wu where r.deleted=? and rw.deleted=? and wg.deleted=? and wu.deleted=? and wu.user is not null and wu.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> workgroupRoles = roleDao.find(hql, false,false,false,false,user.getId()); oldRoles.addAll(workgroupRoles); roles = BeanUtil.turnToModelRoleSet(oldRoles); return roles; } @Transactional(readOnly = true) public List<Role> getRolesListByUser(Long userId){ com.norteksoft.acs.entity.organization.User user = userDao.get(userId); if(user == null) return null; User modeUser = BeanUtil.turnToModelUser(user); return getRolesListByUser(modeUser); } @Deprecated public List<Role> getRolesListByUser(com.norteksoft.acs.entity.organization.User user){ if(user == null) return null; List<Role> roles = new ArrayList<Role>(); // 用户具有的角色 Set<RoleUser> roleUsers = user.getRoleUsers(); for(RoleUser ru : roleUsers){ if(ru.isDeleted()) continue; if(ru.getConsigner() != null) continue; Role role = BeanUtil.turnToModelRole(ru.getRole()); if(!role.isDeleted()) { if(!roles.contains(role)){ roles.add(role); } } } // 用户具有的部门拥有的角色 Set<DepartmentUser> departmentUsers = user.getDepartmentUsers(); for(DepartmentUser du : departmentUsers){ if(du.isDeleted() || du.getDepartment().isDeleted()) continue; for(RoleDepartment rd : du.getDepartment().getRoleDepartments()){ if(!rd.isDeleted() && !rd.getRole().isDeleted()) { if(!roles.contains(rd.getRole())){ roles.add(BeanUtil.turnToModelRole(rd.getRole())); } } } } // 用户具有的工作组拥有的角色 Set<WorkgroupUser> workgroupUsers = user.getWorkgroupUsers(); for(WorkgroupUser wu : workgroupUsers){ if(wu.isDeleted() || wu.getWorkgroup().isDeleted()) continue; for(RoleWorkgroup rw : wu.getWorkgroup().getRoleWorkgroups()){ if(!rw.isDeleted() && !rw.getRole().isDeleted()) { if(!roles.contains(rw.getRole())){ roles.add(BeanUtil.turnToModelRole(rw.getRole())); } } } } //角色按权重排序 sortRole(roles); return roles; } /** * 根据用户查询用户角色(不含委托) * @param user * @return */ @SuppressWarnings("unchecked") public List<Role> getRolesListByUser(User user){ if(user == null) return null; List<Role> roles = new ArrayList<Role>(); Set<com.norteksoft.acs.entity.authorization.Role> oldRoles = new HashSet<com.norteksoft.acs.entity.authorization.Role>(); // 用户具有的角色 String hql = "select r from Role r join r.roleUsers ru where r.deleted=? and ru.deleted=? and ru.user is not null and ru.user.id=? and ru.consigner is null"; List<com.norteksoft.acs.entity.authorization.Role> userRoles = roleDao.find(hql, false,false,user.getId()); oldRoles.addAll(userRoles); // 用户具有的部门拥有的角色 hql = "select r from Role r join r.roleDepartments rd join rd.department d join d.departmentUsers du where r.deleted=? and rd.deleted=? and d.deleted=? and du.deleted=? and du.user is not null and du.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> deptRoles = roleDao.find(hql, false,false,false,false,user.getId()); oldRoles.addAll(deptRoles); // 用户具有的工作组拥有的角色 hql = "select r from Role r join r.roleWorkgroups rw join rw.workgroup wg join wg.workgroupUsers wu where r.deleted=? and rw.deleted=? and wg.deleted=? and wu.deleted=? and wu.user is not null and wu.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> workgroupRoles = roleDao.find(hql, false,false,false,false,user.getId()); oldRoles.addAll(workgroupRoles); Set<Role> modeRoles = BeanUtil.turnToModelRoleSet(oldRoles); if(modeRoles!=null){ roles.addAll(modeRoles); } //角色按权重排序 sortRole(roles); return roles; } /** * 获取租户名称 * @param businessSystemId * @return */ public String getBusinessSystemNameById(Long businessSystemId){ com.norteksoft.acs.entity.authorization.BusinessSystem entity = businessSystemDao.get(businessSystemId); if(entity==null){ return ""; }else{ return entity.getName(); } } /** * 获取不属于任何部门的用户 * @return List<User> */ @Transactional(readOnly = true) public List<User> getUsersNotInDepartment(Long companyId){ return getUsersWithoutDepartment(); } public List<User> getUsersWithoutDepartment(){ StringBuilder sqlString = new StringBuilder(); sqlString.append("SELECT u.* FROM ACS_USERINFO "); sqlString.append("inner join ACS_USER u on ACS_USERINFO.FK_USER_ID=u.id "); sqlString.append("LEFT OUTER JOIN "); sqlString.append("(SELECT * FROM ACS_DEPARTMENT_USER WHERE ACS_DEPARTMENT_USER.DELETED = 0)"); sqlString.append(" DEPT_USER ON ACS_USERINFO.FK_USER_ID = DEPT_USER.FK_USER_ID "); sqlString.append("WHERE ACS_USERINFO.DELETED=0 AND ACS_USERINFO.FK_COMPANY_ID = ? "); sqlString.append("AND DEPT_USER.ID IS NULL ORDER BY ACS_USERINFO.ID DESC "); return BeanUtil.turnToModelUserList(userDao.findByJdbc(sqlString.toString(), ContextUtils.getCompanyId())); } /** * 获取不属于任何部门的用户 * @return page */ public Page<UserInfo> getNoDepartmentUsers(Page<UserInfo> page,Long companyId){ if(companyId == null) return null; StringBuilder sqlString = new StringBuilder(); sqlString.append("SELECT * FROM ACS_USER LEFT OUTER JOIN "); sqlString.append("(SELECT * FROM ACS_DEPARTMENT_USER WHERE ACS_DEPARTMENT_USER.DELETED = 0)"); sqlString.append(" DEPT_USER ON ACS_USER.ID = DEPT_USER.FK_USER_ID "); sqlString.append("WHERE ACS_USER.DELETED=0 AND ACS_USER.FK_COMPANY_ID = ? "); sqlString.append("AND DEPT_USER.ID IS NULL ORDER BY ACS_USER.WEIGHT DESC"); List<com.norteksoft.acs.entity.organization.User>us =userDao.findByJdbc(sqlString.toString(), companyId); List<UserInfo> uiList = new ArrayList<UserInfo>(); for(com.norteksoft.acs.entity.organization.User u : us){ UserInfo ui= (UserInfo)userInfoDao.findUnique("from UserInfo ui where ui.user.id=? and ui.companyId=? ",u.getId() ,companyId); uiList.add(ui); } page.setResult(uiList); page.setPageSize(15); return page; } /** * 将角色授权给别人,自己还保留该角色 * @param someoneId 受权人 * @param roleIds 角色id数组 * @param companyId * @param sourceUserId //授权人 */ public void assignRolesToSomeone(Long someoneId,String[] roleIds,Long companyId,Long sourceUserId){ assignTrustedRole(sourceUserId, roleIds, someoneId); } public void assignTrustedRole(Long trustorId, String[]roleIds, Long trusteeId){ if(trustorId == null) throw new RuntimeException("没有给定委托角色时的委托人"); if(roleIds == null) throw new RuntimeException("没有给定需要委托的角色集合"); if(trusteeId == null) throw new RuntimeException("没有给定委托角色时的受托人"); for(int i=0;i<roleIds.length;i++){ if(StringUtils.isNotEmpty(roleIds[i])){ if((getRoleUserBySourceId(trusteeId, Long.parseLong(roleIds[i]), getCompanyId(),trustorId))==null){ RoleUser roleUser = new RoleUser(); com.norteksoft.acs.entity.authorization.Role role = roleDao.get(Long.parseLong(roleIds[i])); com.norteksoft.acs.entity.organization.User user = userDao.get(trusteeId); roleUser.setRole(role); roleUser.setUser(user); roleUser.setCompanyId(getCompanyId()); roleUser.setConsigner(trustorId); roleUserDao.save(roleUser); }else{ RoleUser roleUser=getRoleUserBySourceId(trusteeId, Long.parseLong(roleIds[i]), getCompanyId(), trustorId); roleUser.setDeleted(false); roleUserDao.save(roleUser); } } } } public void deleteRoleUsers(Long userId,String[] rIds,Long companyId) { if(rIds==null) return; for(int j=0;j<rIds.length;j++){ RoleUser roleUser=getRoleUserByRelation(userId,Long.parseLong(rIds[j]),companyId); if(roleUser!=null){ roleUser.setDeleted(true); roleUserDao.save(roleUser); } } } /** * 删除委托人委托出去的角色 * @param userId 受委托人的id * @param rIds 角色id数组 * @param companyId 公司id * @param sourceId 委托人id */ public void deleteRoleUsers(Long userId,String[] rIds,Long companyId,Long sourceId) { deleteTrustedRole(sourceId, rIds, userId); } public void deleteTrustedRole(Long trustorId, String[]roleIds,Long trusteeId){ if(trustorId == null) throw new RuntimeException("没有给定解除委托角色时的委托人"); if(trusteeId == null) throw new RuntimeException("没有给定解除委托角色时的受托人"); if(roleIds==null) return; for(int j=0;j<roleIds.length;j++){ RoleUser roleUser=getRoleUserBySourceId(trusteeId,Long.parseLong(roleIds[j]),getCompanyId(),trustorId); if(roleUser!=null){ roleUser.setDeleted(true); roleUserDao.save(roleUser); } } } /** * 根据roleId得到role * @param sourceId * @param userId * @param companyId */ public Role getRoleById(Long roleId){ Role role = BeanUtil.turnToModelRole(roleDao.get(roleId)); return role; } /** * 根据userId得到name * @param companyId */ public String getNameByUserId(){ String hql="from User u where u.id=? "; com.norteksoft.acs.entity.organization.User user=(com.norteksoft.acs.entity.organization.User) userDao.findUnique(hql, ContextUtils.getUserId()); return user.getName(); } /** * 删除由别人分配的权限 * @param sourceId * @param userId * @param companyId */ public void deleteAssignedAuthority(Long sourceId,Long userId,Long companyId){ deleteAllTrustedRole(sourceId, userId); } @SuppressWarnings("unchecked") public void deleteAllTrustedRole(Long trustorId, Long trusteeId){ if(trustorId == null) throw new RuntimeException("没有给定删除角色委托关系时的委托人"); if(trusteeId == null) throw new RuntimeException("没有给定删除角色委托关系时的受托人"); String hql = "FROM RoleUser ru WHERE ru.consigner=? AND ru.user.id=? AND ru.companyId=?"; List<RoleUser> roleUsers = roleUserDao.find(hql, trustorId,trusteeId,getCompanyId()); for(RoleUser ru:roleUsers){ roleUserDao.delete(ru); } } /** * 按条件获取角色用户表数据 * @param userId * @param roleId * @param companyId */ public RoleUser getRoleUserByRelation(Long userId,Long roleId,Long companyId){ String hql = "FROM RoleUser ru WHERE ru.role.id=? AND ru.user.id=? AND ru.companyId=?"; return (RoleUser)roleUserDao.findUnique(hql, roleId,userId,companyId); } /** * 按条件获取角色用户表数据 * @param userId * @param roleId * @param companyId */ public RoleUser getRoleUserBySourceId(Long userId,Long roleId,Long companyId,Long sourceId){ String hql = "FROM RoleUser ru WHERE ru.role.id=? AND ru.user.id=? AND ru.companyId=? and ru.consigner=?"; return (RoleUser)roleUserDao.findUnique(hql, roleId,userId,companyId,sourceId); } /** * 获取所有公司的用户 * @return List<User> */ @SuppressWarnings("unchecked") @Transactional(readOnly = true) public List<User> getAllUsers(){ String hql = "from User u where u.deleted=0 order by u.weight desc"; List<com.norteksoft.acs.entity.organization.User> list = userDao.find(hql); return BeanUtil.turnToModelUserList(list); } /** * 通过工作组ID获取工作组实体 * @param workGroupId * @return */ @Transactional(readOnly = true) public Workgroup getWorkgroupById(Long workGroupId){ if(workGroupId == null) return null; return BeanUtil.turnToModelWorkgroup(workGroupDao.get(workGroupId)); } public Workgroup getWorkGroupByName(String name, Long companyId){ return getWorkgroupByName(name); } @SuppressWarnings("unchecked") public Workgroup getWorkgroupByName(String name){ if(name == null) throw new RuntimeException("没有给定查询工作组时的查询条件:工作组名称"); List<com.norteksoft.acs.entity.organization.Workgroup> workGroups = workGroupDao.find("from Workgroup wg where wg.company.id=? and wg.name=? ", getCompanyId(), name); if(workGroups.size() == 1){ return BeanUtil.turnToModelWorkgroup(workGroups.get(0)); } return null; } @SuppressWarnings("unchecked") public Workgroup getWorkgroupByCode(String code){ if(code == null) throw new RuntimeException("没有给定查询工作组时的查询条件:工作组编号"); List<com.norteksoft.acs.entity.organization.Workgroup> workGroups = workGroupDao.find("from Workgroup wg where wg.company.id=? and wg.code=? ", getCompanyId(), code); if(workGroups.size() == 1){ return BeanUtil.turnToModelWorkgroup(workGroups.get(0)); } return null; } /** * 通过部门ID获取部门实体 * @param workGroupId * @return */ @Transactional(readOnly = true) public Department getDepartmentById(Long departmentId){ if(departmentId == null) return null; return BeanUtil.turnToModelDepartment(departmentDao.get(departmentId)); } /** * 通过部门名称获取部门实体 * @param name * @param companyId * @return */ public Department getDepartmentByName(String name, Long companyId){ return getDepartmentByName(name); } @SuppressWarnings("unchecked") public Department getDepartmentByName(String name){ if(name == null) throw new RuntimeException("没有给定查询部门时的查询条件:部门名称"); List<com.norteksoft.acs.entity.organization.Department> depts = departmentDao.find("from Department d where d.company.id=? and d.name=? and d.deleted=?", getCompanyId(), name, false); if(depts.size() == 1){ return BeanUtil.turnToModelDepartment(depts.get(0)); } return null; } @SuppressWarnings("unchecked") public Department getDepartmentByCode(String code){ if(code == null) throw new RuntimeException("没有给定查询部门时的查询条件:部门编号"); List<com.norteksoft.acs.entity.organization.Department> depts = departmentDao.find("from Department d where d.company.id=? and d.code=? and d.deleted=?", getCompanyId(), code, false); if(depts.size() == 1){ return BeanUtil.turnToModelDepartment(depts.get(0)); } return null; } /** * 保存注册用户信息 * @param userInfo * @param workGroupId * @param companyId */ public void saveRegisterUser(UserInfo userInfo,Long workGroupId,Long companyId){ userInfo.getUser().setCompanyId(companyId); userInfo.setCompanyId(companyId); userInfo.setPasswordUpdatedTime(new Date()); userInfoDao.save(userInfo); WorkgroupUser workUser = new WorkgroupUser(); workUser.setUser(userInfo.getUser()); workUser.setWorkgroup(BeanUtil.turnToWorkgroup(getWorkgroupById(workGroupId))); workUser.setCompanyId(companyId); workGroupToUserDao.save(workUser); } /** * 根据用户得到电话 * @param userInfo * @param workGroupId * @param companyId */ public String getPhoneByUserId(Long userId,Long companyId){ UserInfo userInfo=(UserInfo)userInfoDao.findUnique("from UserInfo ui where ui.user.id=? and ui.companyId=? ",userId ,companyId); if(userInfo.getTelephone()==null){ return ""; }else{ return userInfo.getTelephone(); } } /** * * @param companyId * @return */ @SuppressWarnings("unchecked") public List<User> getUsersByCompany(Long companyId){ if(companyId == null) throw new RuntimeException("没有给定查询用户列表的查询条件:公司ID"); List<com.norteksoft.acs.entity.organization.User> list = userDao.find("select distinct u FROM User u join u.departmentUsers du join du.department d WHERE u.companyId=? AND u.deleted=? AND du.deleted=? AND d.deleted=? ORDER BY u.weight DESC", companyId,false,false,false); return BeanUtil.turnToModelUserList(list); } /** * * @param companyId * @return */ @SuppressWarnings("unchecked") public List<User> getAllUsersByCompany(Long companyId){ if(companyId == null) throw new RuntimeException("没有给定查询用户列表的查询条件:公司ID"); List<com.norteksoft.acs.entity.organization.User> list = userDao.find("select distinct u FROM User u WHERE u.companyId=? AND u.deleted=? ORDER BY u.weight DESC", companyId,false ); return BeanUtil.turnToModelUserList(list); } public Set<User> getUsersByRoleName(Long systemId, Long companyId, String roleName){ return getUsersByRoleName(systemId, roleName); } @SuppressWarnings("unchecked") public Set<User> getUsersByRoleName(Long systemId, String roleName){ if(systemId == null) throw new RuntimeException("没有给定查询拥有某角色的用户列表的查询条件:系统ID"); if(roleName == null) throw new RuntimeException("没有给定查询拥有某角色的用户列表的查询条件:角色名称"); List<com.norteksoft.acs.entity.authorization.Role> roles = roleDao.find("from Role r where r.businessSystem.id=? and r.name=? and r.deleted=?", systemId, roleName, false); if(roles.size() == 1){ return getUsersByRole(systemId, getCompanyId(), roles.get(0).getCode()); } return new HashSet<User>(0); } public Set<User> getUsersExceptRoleName(Long systemId, Long companyId, String roleName){ return getUsersWithoutRoleName(systemId, roleName); } @SuppressWarnings("unchecked") public Set<User> getUsersWithoutRoleName(Long systemId, String roleName){ if(systemId == null) throw new RuntimeException("没有给定查询没有某角色的用户列表的查询条件:系统ID"); if(roleName == null) throw new RuntimeException("没有给定查询没有某角色的用户列表的查询条件:角色名称"); Set<User> userSet = new HashSet<User>(); List<com.norteksoft.acs.entity.authorization.Role> roles = roleDao.find("from Role r where r.businessSystem.id=? and r.name<>? and r.deleted=?", systemId, roleName, false); for(com.norteksoft.acs.entity.authorization.Role role: roles){ userSet.addAll(getUsersByRole(systemId, getCompanyId(), role.getCode())); } return userSet; } @SuppressWarnings("unchecked") public Set<User> getUsersWithoutRoleCode(Long systemId, String roleCode){ if(systemId == null) throw new RuntimeException("没有给定查询没有某角色的用户列表的查询条件:系统ID"); if(roleCode == null) throw new RuntimeException("没有给定查询没有某角色的用户列表的查询条件:角色编号"); Set<User> userSet = new HashSet<User>(); List<com.norteksoft.acs.entity.authorization.Role> roles = roleDao.find("from Role r where r.businessSystem.id=? and r.code<>? and r.deleted=?", systemId, roleCode, false); for(com.norteksoft.acs.entity.authorization.Role role: roles){ userSet.addAll(getUsersByRole(systemId, getCompanyId(), role.getCode())); } return userSet; } /** * 通过角色编号查询所有的用户(不含委托) * @param systemId * @param companyId * @param roleCode * @return */ public Set<User> getUsersByRole(Long systemId, Long companyId, String roleCode){ return getUsersByRoleCodeExceptTrustedRole(systemId, roleCode); } @SuppressWarnings("unchecked") public Set<User> getUsersByRoleCodeExceptTrustedRole(Long systemId, String roleCode){ if(systemId == null) throw new RuntimeException("没有给定查询拥有某角色的用户列表的查询条件:系统ID"); if(roleCode == null) throw new RuntimeException("没有给定查询拥有某角色的用户列表的查询条件:角色编号"); Set<com.norteksoft.acs.entity.organization.User> result = new LinkedHashSet<com.norteksoft.acs.entity.organization.User>(); //users role StringBuilder usersByRole = new StringBuilder(); usersByRole.append("select u from User u join u.roleUsers ru join ru.role r join r.businessSystem rbs "); usersByRole.append("where rbs.id=? and r.code = ? and u.companyId=? and r.deleted=false and "); usersByRole.append("ru.deleted=false and ru.consigner is null and u.deleted=false "); List<com.norteksoft.acs.entity.organization.User> roleUsers = userDao.find(usersByRole.toString(), systemId, roleCode, getCompanyId()); //users department role StringBuilder usersByDeptRoleHql = new StringBuilder(); usersByDeptRoleHql.append("select u from User u join u.departmentUsers du join du.department d "); usersByDeptRoleHql.append("join d.roleDepartments rd join rd.role r join r.businessSystem rbs "); usersByDeptRoleHql.append("where rbs.id=? and r.code = ? and d.company.id=? and r.deleted=false and "); usersByDeptRoleHql.append("rd.deleted=false and d.deleted=false and du.deleted=false and u.deleted=false "); List<com.norteksoft.acs.entity.organization.User> roleDeptUsers = userDao.find(usersByDeptRoleHql.toString(), systemId, roleCode, getCompanyId()); //users work-group role StringBuilder usersByWgRoleHql = new StringBuilder(); usersByWgRoleHql.append("select u from User u join u.workgroupUsers wgu join wgu.workgroup wg "); usersByWgRoleHql.append("join wg.roleWorkgroups rwg join rwg.role r join r.businessSystem rbs "); usersByWgRoleHql.append("where rbs.id=? and r.code = ? and wg.company.id=? and rbs.deleted=false and r.deleted=false and "); usersByWgRoleHql.append("rwg.deleted=false and wg.deleted=false and wgu.deleted=false and u.deleted=false "); List<com.norteksoft.acs.entity.organization.User> roleWgUsers = userDao.find(usersByWgRoleHql.toString(), systemId, roleCode, getCompanyId()); result.addAll(roleUsers); result.addAll(roleDeptUsers); result.addAll(roleWgUsers); return BeanUtil.turnToModelUserSet(result); } public String getRtxUrl(Long companyId){ return getRtxUrl(); } public String getRtxUrl(){ String rtxurl=""; ServerConfig serverConfig= serverConfigDao.findUniqueByProperty("companyId", getCompanyId()); if(serverConfig!=null && serverConfig.getRtxUrl()!=null && isRtxInvocation(getCompanyId())){ rtxurl=serverConfig.getRtxUrl(); if(rtxurl.endsWith("/")){ rtxurl=rtxurl.substring(0,rtxurl.lastIndexOf("/")); } } return rtxurl; } /** * 是否启用了rtx集成 * @param companyId * */ public Boolean isRtxInvocation(Long companyId){ return isRtxEnable(); } public Boolean isRtxEnable(){ ServerConfig serverConfig= serverConfigDao.findUniqueByProperty("companyId", getCompanyId()); if(serverConfig!=null){ return serverConfig.getRtxInvocation(); }else{ return false; } } /** * 根据用户ID查询用户所在的部门 * @param companyId * @param userId * @return */ public List<Department> getDepartmentsByUser(Long companyId,Long userId){ return getDepartmentsByUserId(userId); } @SuppressWarnings("unchecked") public List<Department> getDepartmentsByUserId(Long userId){ if(userId == null) throw new RuntimeException("没有给定查询用户所在部门列表的查询条件:用户ID"); StringBuilder hql = new StringBuilder(); hql.append("select d from Department d join d.departmentUsers du join du.user u "); hql.append("where u.companyId=? and u.id=? and u.deleted=? and du.deleted=? and d.deleted=? order by d.weight desc"); List<com.norteksoft.acs.entity.organization.Department> list = departmentDao.find(hql.toString(), getCompanyId(), userId, false, false, false); return BeanUtil.turnToModelDepartmentList(list); } /** * 根据登录名查询用户信息 * @param companyId * @param loginName * @return */ public User getUser(Long companyId, String loginName){ return getUserByLoginName(loginName); } public User getUserByLoginName(String loginName){ if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给定查询用户的查询条件:用户登录名"); com.norteksoft.acs.entity.organization.User oldUser= (com.norteksoft.acs.entity.organization.User)userDao.findUnique("from User u where u.companyId=? and u.loginName=? and u.deleted=? ", getCompanyId(), loginName, false); return BeanUtil.turnToModelUser(oldUser); } public com.norteksoft.acs.entity.organization.User getUserByLoginNameOld(String loginName){ if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给定查询用户的查询条件:用户登录名"); com.norteksoft.acs.entity.organization.User oldUser= (com.norteksoft.acs.entity.organization.User)userDao.findUnique("from User u where u.companyId=? and u.loginName=? and u.deleted=? ", getCompanyId(), loginName, false); return oldUser; } public User getUser(String email){ return getUserByEmail(email); } /** * 根据邮件地址查询用户信息 * @param companyId * @param loginName * @return */ @SuppressWarnings("unchecked") public User getUserByEmail(String email){ if(StringUtils.isEmpty(email)) throw new RuntimeException("没有给定查询用户的查询条件:用户邮件地址"); List<com.norteksoft.acs.entity.organization.User> list=userDao.find("from User u where u.email=? and u.deleted=? ",email, false); if(list!=null&&!list.isEmpty()){ return BeanUtil.turnToModelUser(list.get(0)); } return null; } public Set<String> getUserExceptLoginName(Long companyId,String loginName){ return getLoginNamesExclude(loginName); } /** * 查询出该登录名外的其他用户的登录名 * @param companyId * @param loginName * @return */ @SuppressWarnings("unchecked") public Set<String> getLoginNamesExclude(String loginName){ if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给定查询不含某登录名用户列表的查询条件:用户登录名"); return new HashSet<String>(userDao.find("select u.loginName from User u where u.companyId=? and u.loginName<>? and u.deleted=? ", getCompanyId(), loginName, false)); } /** * 根据用户登录名查询用户所在的部门 * @param companyId * @param loginName * @return */ public List<Department> getDepartmentsByUser(Long companyId, String loginName){ ThreadParameters parameters = new ThreadParameters(companyId); ParameterUtils.setParameters(parameters); return getDepartments(loginName); } @SuppressWarnings("unchecked") public List<Department> getDepartments(String loginName){ if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给定用户所在部门列表的查询条件:用户登录名"); StringBuilder hql = new StringBuilder(); hql.append("select d from Department d join d.departmentUsers du join du.user u "); hql.append("where u.companyId=? and u.loginName =? and u.deleted=? and du.deleted=? and d.deleted=?"); List<com.norteksoft.acs.entity.organization.Department> list = departmentDao.find(hql.toString(), getCompanyId(), loginName, false, false, false); return BeanUtil.turnToModelDepartmentList(list); } /** * 根据用户登录名查询用户所在的部门 * @param companyId * @param loginName * @return */ @SuppressWarnings("unchecked") public List<Department> getDepartmentsByUserLike(Long companyId, String name){ StringBuilder hql = new StringBuilder(); hql.append("select d from Department d join d.departmentUsers du join du.user u "); hql.append("where u.companyId=? and u.name like ? and u.deleted=? and du.deleted=? and d.deleted=?"); List<com.norteksoft.acs.entity.organization.Department> list = departmentDao.find(hql.toString(), companyId, "%"+name+"%", false, false, false); return BeanUtil.turnToModelDepartmentList(list); } /** * 根据公司ID和用户的登录名查询该用户所具有的角色的字符串表示 * @param companyId * @param loginName * @return */ public Set<Role> getRolesByUser(Long companyId, String loginName){ return getRolesByUser(loginName); } public Set<Role> getRolesByUser(String loginName){ if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给定用户角色列表的查询条件:用户登录名"); com.norteksoft.acs.entity.organization.User user = getUserByLoginNameOld(loginName); if(user == null) throw new RuntimeException("用户登录名为["+loginName+"]的用户不存在"); return getRolesByUser(user.getId()); } /** * 根据公司ID和用户登录名查询该用户所在的工作组 * @param companyId * @param loginName * @return */ public List<Workgroup> getWorkGroupsByUser(Long companyId, String loginName){ return getWorkgroupsByUser(loginName); } @SuppressWarnings("unchecked") public List<Workgroup> getWorkgroupsByUser(String loginName){ if(StringUtils.isEmpty(loginName)) throw new RuntimeException("没有给出查询用户所在工作组列表的查询条件:用户登录名"); StringBuilder hql = new StringBuilder(); hql.append("select wg from Workgroup wg join wg.workgroupUsers wgu join wgu.user u "); hql.append("where u.companyId=? and u.loginName=? and u.deleted=? and wgu.deleted=? and wg.deleted=?"); List<com.norteksoft.acs.entity.organization.Workgroup> list = workGroupDao.find(hql.toString(), getCompanyId(), loginName, false, false, false); return BeanUtil.turnToModelWorkgroupList(list); } /** * 根据公司ID和用户登录名查询该用户所在的工作组 * @param companyId * @param loginName * @return */ @SuppressWarnings("unchecked") public List<Workgroup> getWorkGroupsByUserLike(Long companyId, String name){ StringBuilder hql = new StringBuilder(); hql.append("select wg from Workgroup wg join wg.workgroupUsers wgu join wgu.user u "); hql.append("where u.companyId=? and u.name like ? and u.deleted=? and wgu.deleted=? and wg.deleted=?"); List<com.norteksoft.acs.entity.organization.Workgroup> list = workGroupDao.find(hql.toString(), companyId, "%"+name+"%", false, false, false); return BeanUtil.turnToModelWorkgroupList(list); } /** * 查询所有的系统并排序 * @return */ @SuppressWarnings("unchecked") public List<BusinessSystem> getSystems(){ List<com.norteksoft.acs.entity.authorization.BusinessSystem> list = businessSystemDao.find("from BusinessSystem bs where bs.deleted=? order by bs.id", false); return BeanUtil.turnToModelBusinessSystemList(list); } public BusinessSystem getSystemByCode(String code){ if(StringUtils.isEmpty(code)) throw new RuntimeException("没有查询业务系统的查询条件:系统编号"); return BeanUtil.turnToModelBusinessSystem(businessSystemDao.findUniqueByProperty("code", code)); } public BusinessSystem getSystemById(Long id){ if(id == null) throw new RuntimeException("没有查询业务系统的查询条件:系统ID"); return BeanUtil.turnToModelBusinessSystem(businessSystemDao.findUniqueByProperty("id", id)); } public List<User> getUsersByLoginNames(Long companyId, List<String> loginNames){ if(companyId == null) throw new RuntimeException("没有给定根据用户登录名集合查询用户列表的查询条件:公司ID"); if(loginNames == null) throw new RuntimeException("没有给定根据用户登录名集合查询用户列表的查询条件:用户登录名集合"); ThreadParameters parameters=new ThreadParameters(companyId); ParameterUtils.setParameters(parameters); return getUsersByLoginNames(loginNames); } @SuppressWarnings("unchecked") public List<User> getUsersByLoginNames(List<String> loginNames){ if(loginNames == null) throw new RuntimeException("没有给定根据用户登录名集合查询用户列表的查询条件:用户登录名集合"); StringBuilder hql = new StringBuilder("from User u where u.companyId=? and ("); Object[] parameters = new Object[loginNames.size()+1]; parameters[0] = getCompanyId(); int index = 1; for(String loginName : loginNames){ parameters[index++] = loginName; hql.append(" u.loginName=? or"); } hql.replace(hql.length()-2, hql.length(), ""); hql.append(") and u.deleted=false order by u.weight desc"); List<com.norteksoft.acs.entity.organization.User> list = userDao.find(hql.toString(), parameters); return BeanUtil.turnToModelUserList(list); } public List<Role> getRolesListByUserExceptDelegateMain(Long userId){ return getRolesExcludeTrustedRole(userId); } public List<Role> getRolesExcludeTrustedRole(Long userId){ com.norteksoft.acs.entity.organization.User user = userDao.get(userId); if(user == null) return null; User modeUser = BeanUtil.turnToModelUser(user); return getRolesListByUserExceptDelegateMain(modeUser); } @Deprecated @Transactional(readOnly = true) public List<Role> getRolesListByUserExceptDelegateMain(com.norteksoft.acs.entity.organization.User user){ if(user == null) return null; List<Role> roles = new ArrayList<Role>(); // 用户具有的角色 Set<RoleUser> roleUsers = user.getRoleUsers(); for(RoleUser ru : roleUsers){ if(ru.isDeleted()) continue; if(ru.getConsigner()!=null)continue; Role role = BeanUtil.turnToModelRole(ru.getRole()); if(!role.isDeleted()) { if(!roles.contains(role)){ roles.add(role); } } } // 用户具有的部门拥有的角色 Set<DepartmentUser> departmentUsers = user.getDepartmentUsers(); for(DepartmentUser du : departmentUsers){ if(du.isDeleted() || du.getDepartment().isDeleted()) continue; for(RoleDepartment rd : du.getDepartment().getRoleDepartments()){ if(!rd.isDeleted() && !rd.getRole().isDeleted()) { if(!roles.contains(rd.getRole())){ roles.add(BeanUtil.turnToModelRole(rd.getRole())); } } } } // 用户具有的工作组拥有的角色 Set<WorkgroupUser> workgroupUsers = user.getWorkgroupUsers(); for(WorkgroupUser wu : workgroupUsers){ if(wu.isDeleted() || wu.getWorkgroup().isDeleted()) continue; for(RoleWorkgroup rw : wu.getWorkgroup().getRoleWorkgroups()){ if(!rw.isDeleted() && !rw.getRole().isDeleted()) { if(!roles.contains(rw.getRole())){ roles.add(BeanUtil.turnToModelRole(rw.getRole())); } } } } //角色按权重排序 sortRole(roles); return roles; } /** * 根据用户查询角色(不含委托) * @param user * @return */ @Transactional(readOnly = true) @SuppressWarnings("unchecked") public List<Role> getRolesListByUserExceptDelegateMain(User user){ if(user == null) return null; List<Role> roles = new ArrayList<Role>(); Set<com.norteksoft.acs.entity.authorization.Role> oldRoles = new HashSet<com.norteksoft.acs.entity.authorization.Role>(); // 用户具有的角色 String hql = "select r from Role r join r.roleUsers ru where r.deleted=? and ru.deleted=? and ru.user is not null and ru.user.id=? and ru.consigner is null"; List<com.norteksoft.acs.entity.authorization.Role> userRoles = roleDao.find(hql, false,false,user.getId()); oldRoles.addAll(userRoles); // 用户具有的部门拥有的角色 hql = "select r from Role r join r.roleDepartments rd join rd.department d join d.departmentUsers du where r.deleted=? and rd.deleted=? and d.deleted=? and du.deleted=? and du.user is not null and du.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> deptRoles = roleDao.find(hql, false,false,false,false,user.getId()); oldRoles.addAll(deptRoles); // 用户具有的工作组拥有的角色 hql = "select r from Role r join r.roleWorkgroups rw join rw.workgroup wg join wg.workgroupUsers wu where r.deleted=? and rw.deleted=? and wg.deleted=? and wu.deleted=? and wu.user is not null and wu.user.id=?"; List<com.norteksoft.acs.entity.authorization.Role> workgroupRoles = roleDao.find(hql, false,false,false,false,user.getId()); oldRoles.addAll(workgroupRoles); Set<Role> modeRoles = BeanUtil.turnToModelRoleSet(oldRoles); if(modeRoles!=null){ roles.addAll(modeRoles); } //角色按权重排序 sortRole(roles); return roles; } //角色按权重排序 private void sortRole(List<Role> roles){ Collections.sort(roles, new Comparator<Role>() { public int compare(Role role1, Role role2) { if(role1.getWeight()==null&&role2.getWeight()!=null)return 1; if(role1.getWeight()!=null&&role2.getWeight()==null)return 0; if(role1.getWeight()==null&&role2.getWeight()==null)return 0; if(role1.getWeight()<role2.getWeight()){ return 1; } return 0; } }); } @Deprecated private void sortRoles(List<com.norteksoft.acs.entity.authorization.Role> roles){ Collections.sort(roles, new Comparator<com.norteksoft.acs.entity.authorization.Role>() { public int compare(com.norteksoft.acs.entity.authorization.Role role1, com.norteksoft.acs.entity.authorization.Role role2) { if(role1.getWeight()==null&&role2.getWeight()!=null)return 1; if(role1.getWeight()!=null&&role2.getWeight()==null)return 0; if(role1.getWeight()==null&&role2.getWeight()==null)return 0; if(role1.getWeight()<role2.getWeight()){ return 1; } return 0; } }); } public List<Department> getSuperiorDepartmentsByUser(Long companyId, String loginName){ return getParentDepartmentsByUser(loginName); } /** * 根据用户登录名查询用户所在的部门的上级部门 * @param companyId * @param loginName * @return */ @SuppressWarnings("unchecked") @Transactional(readOnly = true) public List<Department> getParentDepartmentsByUser(String loginName){ if(loginName == null) throw new RuntimeException("没有查询用户所在的部门的上级部门的查询条件:用户登录名"); StringBuilder hql = new StringBuilder(" select d from Department d join d.children sd join sd.departmentUsers du join du.user u "); hql.append(" where u.companyId=? and u.loginName=? and u.deleted=? and du.deleted=? and sd.deleted=? and d.deleted=?"); List<com.norteksoft.acs.entity.organization.Department> list = departmentDao.find(hql.toString(), getCompanyId(), loginName, false, false, false,false); return BeanUtil.turnToModelDepartmentList(list); } /** * 获得用户的顶级部门 * @param companyId * @param loginName * @return */ public List<Department> getUpstageDepartmentsByUser(Long companyId, String loginName){ return getTopDepartmentsByUser(loginName); } public List<Department> getTopDepartmentsByUser(String loginName){ if(loginName == null) throw new RuntimeException("没有查询用户所在的部门的顶级部门的查询条件:用户登录名"); Set<Department> result = new HashSet<Department>(); List<Department> departments = getDepartmentsByUser(getCompanyId(), loginName); for(Department department:departments){ result.add(getFirstDegreeDepartment(department)); } return new ArrayList<Department>(result); } /** * 获得用户的顶级部门 * @param companyId * @param loginName * @return */ public List<Department> getUpstageDepartmentsByUserLike(Long companyId, String userName){ Set<Department> result = new HashSet<Department>(); List<Department> departments = getDepartmentsByUserLike(companyId, userName); for(Department department:departments){ result.add(getFirstDegreeDepartment(department)); } return new ArrayList<Department>(result); } /** * 返回该部门的一级部门 * @param department * @return */ public Department getFirstDegreeDepartment(Department department){ return getTopDepartment(department); } public Department getTopDepartment(Department department){ if(department == null) throw new RuntimeException("没有查询部门的顶级部门的查询条件:部门实体"); Department parentDept = getParentDepartment(department.getId()); if(parentDept!=null){ return getFirstDegreeDepartment(parentDept); }else{ return department; } } /** * 员工查询 * @param department * @return */ @Deprecated public void userSearch(String userName ,String userDepart, boolean userSex, Long companyId, Page<com.norteksoft.acs.entity.organization.User> page){ StringBuilder hql = new StringBuilder(); hql.append("select distinct u from User u join u.userInfos ui join u.departmentUsers du join du.department d "); hql.append("where u.companyId=? and u.deleted=? and ui.deleted=? and du.deleted=? and d.deleted=? "); hql.append("and u.name like ? and u.sex=? and d.name like ?"); userDao.find(page,hql.toString(), companyId,false,false,false,false,"%" + userName + "%", userSex, "%" + userDepart+ "%"); } /** * 员工查询所有性别 * @param department * @return */ @Deprecated public void userSearchAllSex(String userName ,String userDepart, Long companyId, Page<com.norteksoft.acs.entity.organization.User> page){ StringBuilder hql = new StringBuilder(); hql.append("select distinct u from User u join u.userInfos ui join u.departmentUsers du join du.department d "); hql.append("where u.companyId=? and u.deleted=? and ui.deleted=? and du.deleted=? and d.deleted=? "); hql.append("and u.name like ? and d.name like ?"); userDao.find(page,hql.toString(), companyId,false,false,false,false,"%" + userName + "%", "%" + userDepart+ "%"); } /** * 获取本公司所有用户的生日 * @return */ @SuppressWarnings("unchecked") public Map<Long,String> getUserBirthdayByCompany(Long companyId){ List<UserInfo> userInfoList=userInfoDao.find("from UserInfo ui where ui.companyId=? and ui.deleted=?",companyId,false); Map<Long,String> birthdayMap=new HashMap(); for(int i=0;i<userInfoList.size();i++){ if(StringUtils.isNotEmpty(userInfoList.get(i).getBirthday())){ birthdayMap.put(userInfoList.get(i).getUser().getId(), userInfoList.get(i).getBirthday()); } } return birthdayMap; } /** * 得到无部门人员 * @return */ public List<UserInfo> getNoDepartmentUsers(Long companyId){ StringBuilder sqlString = new StringBuilder(); sqlString.append("SELECT ACS_USERINFO.* FROM ACS_USERINFO LEFT OUTER JOIN "); sqlString.append("(SELECT * FROM ACS_DEPARTMENT_USER WHERE ACS_DEPARTMENT_USER.DELETED = 0)"); sqlString.append(" DEPT_USER ON ACS_USERINFO.FK_USER_ID = DEPT_USER.FK_USER_ID "); sqlString.append("WHERE ACS_USERINFO.DELETED=0 AND ACS_USERINFO.FK_COMPANY_ID = ? "); sqlString.append("AND DEPT_USER.ID IS NULL ORDER BY ACS_USERINFO.ID DESC "); return userInfoDao.findByJdbc( sqlString.toString(), companyId); } public void deleteUser(Long userId) { if(userId==null)return; com.norteksoft.acs.entity.organization.User user = userDao.get(userId); if(user!=null){ user.getUserInfo().setDeleted(true); user.getUserInfo().setDr(1); userInfoDao.save(user.getUserInfo()); } } public void saveUser(com.norteksoft.acs.entity.organization.User user,UserInfo userInfo) { if(user.getCompanyId()==null){ user.setCompanyId(ContextUtils.getCompanyId()); } if(userInfo.getCompanyId()==null){ userInfo.setCompanyId(user.getCompanyId()); } userDao.save(user); userInfo.setUser(user); userInfoDao.save(userInfo); } public void deleteDepartment(Long departmentId) { if(departmentId==null)return; com.norteksoft.acs.entity.organization.Department department=departmentDao.get(departmentId); if(department==null)return; List<com.norteksoft.acs.entity.organization.User> users=userManager.getUsersByDeptId(departmentId); departmentManager.deleteDepart(department,users); } @Deprecated public void saveDepartment(com.norteksoft.acs.entity.organization.Department department,Long companyId) { if(companyId==null)throw new RuntimeException("公司id不能为null"); Company company=companyManager.getCompany(companyId); if(company==null)throw new RuntimeException("公司不存在"); department.setCompany(company); departmentDao.save(department); } public void saveDepartment(Department department,Long companyId) { if(companyId==null)throw new RuntimeException("公司id不能为null"); Company company=companyManager.getCompany(companyId); if(company==null)throw new RuntimeException("公司不存在"); department.setCompany(company); departmentDao.save(BeanUtil.turnToDepartment(department)); } @Deprecated public void saveDepartmentUser(List<Long> userIds, com.norteksoft.acs.entity.organization.Department department) { if(userIds==null||department==null)return; departmentManager.departmentToUser(department.getId(), userIds, 0); } public void saveDepartmentUser(List<Long> userIds, Department department) { if(userIds==null||department==null)return; departmentManager.departmentToUser(department.getId(), userIds, 0); } @SuppressWarnings("unchecked") public List<User> getUsersByName(String userName) { List<com.norteksoft.acs.entity.organization.User> list = userDao.find("from User u where u.companyId=? and u.name=? and u.deleted=? ", getCompanyId(), userName, false); return BeanUtil.turnToModelUserList(list); } public String getCurrentUserRolesExcludeTrustedRole() { Long userId=ContextUtils.getUserId(); if(userId==null) return ""; com.norteksoft.acs.entity.organization.User user = userDao.get(userId); return getRolesExcludeTrustedRole(user); } public String getUserRolesExcludeTrustedRole(Long userId) { if(userId==null) return ""; com.norteksoft.acs.entity.organization.User user = userDao.get(userId); return getRolesExcludeTrustedRole(user); } public List<User> getTacheUsersByLoginNames(Long companyId, List<String> loginNames){ if(companyId == null) throw new RuntimeException("没有给定根据用户登录名集合查询用户列表的查询条件:公司ID"); if(loginNames == null) throw new RuntimeException("没有给定根据用户登录名集合查询用户列表的查询条件:用户登录名集合"); ThreadParameters parameters=new ThreadParameters(companyId); ParameterUtils.setParameters(parameters); return getTacheUsersByLoginNames(loginNames); } private List<User> getTacheUsersByLoginNames(List<String> loginNames) { if(loginNames == null) throw new RuntimeException("没有给定根据用户登录名集合查询用户列表的查询条件:用户登录名集合"); List<com.norteksoft.acs.entity.organization.User> users = new ArrayList<com.norteksoft.acs.entity.organization.User>(); for (String loginName : loginNames) { com.norteksoft.acs.entity.organization.User user = (com.norteksoft.acs.entity.organization.User)userDao.findUnique("from User u where u.companyId=? and u.loginName=? and u.deleted = false ",getCompanyId(), loginName); if(user!=null)users.add(user); } return BeanUtil.turnToModelUserList(users); } @SuppressWarnings("unchecked") public String getSystemAdminLoginName() { StringBuilder hql = new StringBuilder(); hql.append("from User u "); hql.append("where u.companyId=? and u.deleted=? and u.loginName like ?"); List<com.norteksoft.acs.entity.organization.User> users = userDao.find(hql.toString(), ContextUtils.getCompanyId(),false,"%.systemAdmin%"); if(users.size()>0)return users.get(0).getLoginName(); return null; } @Deprecated public void saveDepartment(com.norteksoft.acs.entity.organization.Department department) { saveDepartment(department,ContextUtils.getCompanyId()); } public void saveDepartment(Department department) { saveDepartment(department,ContextUtils.getCompanyId()); } /** * 查询公司中所有人员(不包含无部门人员) * @param companyId * @return */ @SuppressWarnings("unchecked") public List<String> getLoginNamesByCompany(Long companyId){ if(companyId == null) throw new RuntimeException("没有给定查询用户列表的查询条件:公司ID"); return userDao.find("select distinct u.loginName FROM User u join u.departmentUsers du join du.department d WHERE u.companyId=? AND u.deleted=? AND du.deleted=? AND d.deleted=? ORDER BY u.weight DESC", companyId,false,false,false); } /** * 查询工作组所有人员 * @param companyId * @return */ @SuppressWarnings("unchecked") public List<String> getLoginNamesByWorkgroup(Long companyId){ if(companyId == null) throw new RuntimeException("查询工作组人员时,没有给定查询用户列表的查询条件:公司ID"); return userDao.find("select distinct u.loginName FROM User u join u.workgroupUsers du join du.workgroup d WHERE u.companyId=? AND u.deleted=? AND du.deleted=? AND d.deleted=? ORDER BY u.weight DESC", companyId,false,false,false); } public void saveUser(User user) { com.norteksoft.acs.entity.organization.User oldUser = BeanUtil.turnToUser(user); userDao.save(oldUser); } @SuppressWarnings("unchecked") public Department getParentDepartment(Long departmentId){ String hql = "select d.parent from Department d where d.parent is not null and d.id=? and d.deleted=? and d.parent.deleted=?"; List<com.norteksoft.acs.entity.organization.Department> parents = departmentDao.find(hql, departmentId,false,false); if(parents.size()>0)return BeanUtil.turnToModelDepartment(parents.get(0)); return null; } }