package com.norteksoft.acs.base.utils.authHelp;
import java.util.ArrayList;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate;
import com.norteksoft.acs.entity.authorization.BusinessSystem;
import com.norteksoft.acs.entity.authorization.Role;
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.Department;
import com.norteksoft.acs.entity.organization.DepartmentUser;
import com.norteksoft.acs.entity.organization.User;
import com.norteksoft.acs.entity.organization.UserInfo;
import com.norteksoft.acs.entity.organization.Workgroup;
import com.norteksoft.acs.entity.organization.WorkgroupUser;
import com.norteksoft.acs.entity.sysSetting.ServerConfig;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
/**
* 权限API
* @author Administrator
*/
@Deprecated
@Service
@Transactional
public class AuthHelpAPI {
public final static String DEPARTMENT = "department";
public final static String WORKGROUP = "workgroup";
public final static String DELETED = "deleted";
protected static SessionFactory sessionFactory;
private static SimpleHibernateTemplate<Department, Long> departmentDao;
private static SimpleHibernateTemplate<Workgroup, Long> workGroupDao;
private static SimpleHibernateTemplate<DepartmentUser, Long> depUserDao;
private static SimpleHibernateTemplate<WorkgroupUser, Long> workGroupToUserDao;
private static SimpleHibernateTemplate<User, Long> userDao;
private static SimpleHibernateTemplate<UserInfo, Long> userInfoDao;
private static SimpleHibernateTemplate<Company, Long> companyDao;
private static SimpleHibernateTemplate<BusinessSystem, Long> businessSystemDao;
private static SimpleHibernateTemplate<RoleUser, Long> roleUserDao;
private static SimpleHibernateTemplate<Role, Long> roleDao;
private static SimpleHibernateTemplate<LoginLog, Long> loginUserLogDao;
private static SimpleHibernateTemplate<ServerConfig, Long> serverConfigDao;
static {
init();
}
private AuthHelpAPI() {
}
private static void init() {
sessionFactory = getSessionFactory();
departmentDao = new SimpleHibernateTemplate<Department, Long>(sessionFactory, Department.class);
workGroupDao = new SimpleHibernateTemplate<Workgroup, Long>(sessionFactory, Workgroup.class);
depUserDao = new SimpleHibernateTemplate<DepartmentUser, Long>(sessionFactory, DepartmentUser.class);
workGroupToUserDao = new SimpleHibernateTemplate<WorkgroupUser, Long>(sessionFactory, WorkgroupUser.class);
userDao = new SimpleHibernateTemplate<User, Long>(sessionFactory,User.class);
userInfoDao = new SimpleHibernateTemplate<UserInfo, Long>(sessionFactory,UserInfo.class);
companyDao = new SimpleHibernateTemplate<Company, Long>(sessionFactory,Company.class);
businessSystemDao = new SimpleHibernateTemplate<BusinessSystem, Long>(sessionFactory,BusinessSystem.class);
roleUserDao = new SimpleHibernateTemplate<RoleUser, Long>(sessionFactory,RoleUser.class);
roleDao = new SimpleHibernateTemplate<Role, Long>(sessionFactory,Role.class);
loginUserLogDao = new SimpleHibernateTemplate<LoginLog, Long>(sessionFactory, LoginLog.class);
serverConfigDao=new SimpleHibernateTemplate<ServerConfig, Long>(sessionFactory, ServerConfig.class);
}
/**
* 查询在线用户数量
* @param companyId
* @return
*/
public static Long getOnlineUserCount(Long companyId){
return loginUserLogDao.findLong(
"select count(u) from LoginLog u where u.exitTime is null and u.companyId=? and u.deleted=?",
companyId, false);
}
protected static SessionFactory getSessionFactory() {
sessionFactory = (SessionFactory)ContextUtils.getBean("sessionFactory");
return sessionFactory;
}
/**
* 根据公司ID查询该公司所有的部门和工作组
* @param companyId
* @return
*/
// @SuppressWarnings("unchecked")
// @Transactional(readOnly = true)
// public static Map<String, List> getOrganization(Long companyId) {
// Map<String, List> map = new HashMap<String, List>();
// map.put(DEPARTMENT, getDepartmentList(companyId));
// map.put(WORKGROUP, getWorkGroupList(companyId));
// return map;
// }
/**
* 根据公司ID查询该公司所有的部门
*
* @param companyId 公司ID
* @return List<Department>
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public static List<Department> getDepartmentList(Long companyId) {
return departmentDao.find(
"FROM Department d WHERE d.company.id=? AND d.deleted=? and d.parent.id is null ORDER BY d.weight desc",
companyId, false);
}
/**
* 根据公司ID查询该公司所有的工作组
*
* @param companyId 公司ID
* @return List<WorkGroup>
*/
@Transactional(readOnly = true)
public static List<Workgroup> getWorkGroupList(Long companyId) {
List<Workgroup> workGroupList = workGroupDao.findByCriteria(
Restrictions.eq("company.id", companyId), Restrictions.eq(
DELETED, false));
return workGroupList;
}
/**
* 根据部门ID查询该部门所有的人员
*
* @param departmentId 部门Id
* @return List<User>
*/
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
public static List<User> getUserListByDepartmentId(Long departmentId) {
List<User> userList = new ArrayList<User>();
String hql = "FROM DepartmentUser d WHERE d.department.id=? AND d.deleted=? ORDER BY d.user.weight DESC";
List<DepartmentUser> list = depUserDao.find(hql, departmentId,false);
UserInfo userif = null;
for (DepartmentUser departmentToUser : list) {
userif = departmentToUser.getUser().getUserInfo();
if (userif != null && userif.getDr() == 0)
userList.add(departmentToUser.getUser());
}
return userList;
}
/**
* 根据部门名称得到部门下用户的登录名
* @param companyId
* @param loginName
* @return
*/
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
public static List<String> getUserLoginNameListByDepartmentName(String departmentName,Long companyId) {
String dhql ="from Department d where d.departmentName=? and d.deleted=? and d.company.id=?";
Department department=(Department)departmentDao.findUnique(dhql, departmentName,false,companyId);
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) {
userLoginNameList.add(departmentToUser.getUser().getLoginName());
}
return userLoginNameList;
}
/**
* 根据工作组ID查询该工作组所有的人员
*
* @param workGroupId 工作组Id
* @return List<User>
*/
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
public static List<User> getUserListByWorkGroupId(Long workGroupId) {
List<User> userList = new ArrayList<User>();
String hql = "FROM WorkGroupUser d WHERE d.workgroup.id=? AND d.deleted=? ORDER BY d.user.weight DESC";
List<WorkgroupUser> list = workGroupDao.find(hql, workGroupId,false);
UserInfo userif = null;
for (WorkgroupUser workGroupToUser : list) {
userif = workGroupToUser.getUser().getUserInfo();
if (userif != null && userif.getDr() == 0)
userList.add(workGroupToUser.getUser());
}
userList = doSort(userList);
return userList;
}
/**
* 根据父部门id查询该父部门下所有子部门
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public static List<Department> getSubDepartmentList(Long paternDepartmentId) {
return departmentDao.find(
"FROM Department d WHERE d.parent.id=? AND d.deleted=? ORDER BY d.weight desc",
paternDepartmentId, false);
}
/**
* 根据用户Id得到用户实体
* @return User
*/
@Transactional(readOnly = true)
public static User getUserById(Long id) {
if (id instanceof Long)
return userDao.get(id);
return null;
}
/**
* 通过公司code获取公司Id
* @param companyCode
* @return Long
*/
@Transactional(readOnly = true)
public static Long getCompanyIdByCompanycode(String companyCode) {
if (companyCode == null || companyCode.trim().length() <= 0)
return null;
Object obj = companyDao.findUnique(
"from Company company where company.code=? and company.deleted=?",
companyCode, false);
if (obj instanceof Company) {
return ((Company) obj).getId();
}
return null;
}
/**
* 获取当前用户所有角色的字符串表示形式(即角色编码以逗号隔开)
* @return String
*/
@Transactional(readOnly = true)
public static String getCurrentUserRoles(){
Long userId = ContextUtils.getUserId();
if(userId == null) return "";
User user = userDao.get(userId);
if(user == null) return "";
return getRoleCodesFromUser(user);
}
@Transactional(readOnly = true)
public static String getCurrentUserRoles(Long userId){
User user = userDao.get(userId);
if(user == null) return "";
return getRoleCodesFromUser(user);
}
/**
* 查询用户委托的角色。
* @param userId
* @param sourceId
* @param companyId
* @return
*/
@Transactional(readOnly = true)
@SuppressWarnings("unchecked")
public static Set<Role> getRolesByUserId(Long userId,Long sourceId,Long companyId){
String hql="FROM RoleUser ru WHERE ru.consigner=? AND ru.user.id=? AND ru.companyId=?";
List<RoleUser> roleUsers = roleUserDao.find(hql, sourceId,userId,companyId);
Set<Role> roles = new HashSet<Role>();
for(RoleUser ru : roleUsers){
Role role=roleDao.get(ru.getRole().getId());
roles.add(role);
}
return roles;
}
/**
* 根据用户获取用户的角色字符串形式(不含委托)
*/
public static String getRoleCodesFromUser(User user){
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 = 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());
}
}
// 生成字符串形式
StringBuilder roleStrings = new StringBuilder();
for(Role role : roles){
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 static Set<Role> getRolesByUser(Long userId){
User user = userDao.get(userId);
if(user == null) return null;
return getRolesByUser(user);
}
/**
* 根据用户查询用户的角色(不含委托)
* @param user
* @return
*/
public static Set<Role> getRolesByUser(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 = 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());
}
}
return roles;
}
@Transactional(readOnly = true)
public static List<Role> getRolesListByUser(Long userId){
User user = userDao.get(userId);
if(user == null) return null;
return getRolesListByUser(user);
}
/**
* 根据用户查询用户角色(不含委托)
* @param user
* @return
*/
public static List<Role> getRolesListByUser(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 = 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(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(rw.getRole());
}
}
}
}
return roles;
}
/**
* 获取租户名称
* @param businessSystemId
* @return
*/
public String getBusinessSystemNameById(Long businessSystemId){
BusinessSystem entity = businessSystemDao.get(businessSystemId);
if(entity==null){
return "";
}else{
return entity.getName();
}
}
/**
* 获取不属于任何部门的用户
* @return List<User>
*/
@Transactional(readOnly = true)
public static List<User> getUsersNotInDepartment(Long companyId){
if(companyId == null) return null;
StringBuilder sqlString = new StringBuilder();
sqlString.append("SELECT ACS_USER.* 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.WEIGHING DESC");
return userDao.findByJdbc(sqlString.toString(), companyId);
}
/**
* 获取不属于任何部门的用户
* @return page
*/
public static 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.WEIGHING DESC");
List<User>us =userDao.findByJdbc(sqlString.toString(), companyId);
List<UserInfo> uiList = new ArrayList<UserInfo>();
for(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 static void assignRolesToSomeone(Long someoneId,String[] roleIds,Long companyId,Long sourceUserId){
// deleteAssignedAuthority(sourceUserId,someoneId,companyId);
for(int i=0;i<roleIds.length;i++){
if(StringUtils.isNotEmpty(roleIds[i])){
if((getRoleUserBySourceId(someoneId, Long.parseLong(roleIds[i]), companyId,sourceUserId))==null){
RoleUser roleUser = new RoleUser();
Role role = roleDao.get(Long.parseLong(roleIds[i]));
User user = userDao.get(someoneId);
roleUser.setRole(role);
roleUser.setUser(user);
roleUser.setCompanyId(companyId);
roleUser.setConsigner(sourceUserId);
roleUserDao.save(roleUser);
}else{
RoleUser roleUser=getRoleUserBySourceId(someoneId, Long.parseLong(roleIds[i]), companyId,sourceUserId);
roleUser.setDeleted(false);
roleUserDao.save(roleUser);
}
}
}
}
public static void deleteRoleUsers(Long userId,String[] rIds,Long companyId) {
if(rIds==null) return;
for(int j=0;j<rIds.length;j++){
RoleUser roleUser=AuthHelpAPI.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 static void deleteRoleUsers(Long userId,String[] rIds,Long companyId,Long sourceId) {
if(rIds==null) return;
for(int j=0;j<rIds.length;j++){
RoleUser roleUser=AuthHelpAPI.getRoleUserBySourceId(userId,Long.parseLong(rIds[j]),companyId,sourceId);
if(roleUser!=null){
roleUser.setDeleted(true);
roleUserDao.save(roleUser);
}
}
}
/**
* 根据roleId得到role
* @param sourceId
* @param userId
* @param companyId
*/
public static Role getRoleById(Long roleId){
Role role = roleDao.get(roleId);
return role;
}
/**
* 根据userId得到name
* @param companyId
*/
public static String getNameByUserId(){
String hql="from User u where u.id=? ";
User user=(User) userDao.findUnique(hql, ContextUtils.getUserId());
return user.getName();
}
/**
* 删除由别人分配的权限
* @param sourceId
* @param userId
* @param companyId
*/
@SuppressWarnings("unchecked")
public static void deleteAssignedAuthority(Long sourceId,Long userId,Long companyId){
String hql = "FROM RoleUser ru WHERE ru.consigner=? AND ru.user.id=? AND ru.companyId=?";
List<RoleUser> roleUsers = roleUserDao.find(hql, sourceId,userId,companyId);
for(RoleUser ru:roleUsers){
roleUserDao.delete(ru);
}
}
/**
* 按条件获取角色用户表数据
* @param userId
* @param roleId
* @param companyId
*/
public static 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 static 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 static List<User> getAllUsers(){
String hql = "from User u where u.deleted=0 order by u.weight desc";
return userDao.find(hql);
}
/**
* 通过工作组ID获取工作组实体
* @param workGroupId
* @return
*/
@Transactional(readOnly = true)
public static Workgroup getWorkGroupById(Long workGroupId){
if(workGroupId == null)
return null;
return workGroupDao.get(workGroupId);
}
@SuppressWarnings("unchecked")
public static Workgroup getWorkGroupByName(String name, Long companyId){
List<Workgroup> workGroups = workGroupDao.find("from Workgroup wg where wg.company.id=? and wg.name=? ", companyId, name);
if(workGroups.size() == 1){
return workGroups.get(0);
}
return null;
}
/**
* 通过部门ID获取部门实体
* @param workGroupId
* @return
*/
@Transactional(readOnly = true)
public static Department getDepartmentById(Long departmentId){
if(departmentId == null)
return null;
return departmentDao.get(departmentId);
}
/**
* 通过部门名称获取部门实体
* @param name
* @param companyId
* @return
*/
@SuppressWarnings("unchecked")
public static Department getDepartmentByName(String name, Long companyId){
List<Department> depts = departmentDao.find("from Department d where d.company.id=? and d.departmentName=? and d.deleted=?", companyId, name, false);
if(depts.size() == 1){
return depts.get(0);
}
return null;
}
/**
* 保存注册用户信息
* @param userInfo
* @param workGroupId
* @param companyId
*/
public static 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(getWorkGroupById(workGroupId));
workUser.setCompanyId(companyId);
workGroupToUserDao.save(workUser);
}
/**
* 根据用户得到电话
* @param userInfo
* @param workGroupId
* @param companyId
*/
public static 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 static List<User> getUsersByCompany(Long companyId){
return 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);
}
public static void setSessionFactory(SessionFactory sessionFactory) {
AuthHelpAPI.sessionFactory = sessionFactory;
}
@SuppressWarnings("unchecked")
public static Set<User> getUsersByRoleName(Long systemId, Long companyId, String roleName){
List<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, companyId, roles.get(0).getCode());
}
return new HashSet<User>(0);
}
@SuppressWarnings("unchecked")
public static Set<User> getUsersExceptRoleName(Long systemId, Long companyId, String roleName){
Set<User> userSet = new HashSet<User>();
List<Role> roles = roleDao.find("from Role r where r.businessSystem.id=? and r.name<>? and r.deleted=?", systemId, roleName, false);
for(Role role: roles){
userSet.addAll(getUsersByRole(systemId, companyId, role.getCode()));
}
return userSet;
}
/**
* 通过角色编号查询所有的用户(不含委托)
* @param systemId
* @param companyId
* @param roleCode
* @return
*/
@SuppressWarnings("unchecked")
public static Set<User> getUsersByRole(Long systemId, Long companyId, String roleCode){
Set<User> result = new LinkedHashSet<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<User> roleUsers = userDao.find(usersByRole.toString(), systemId, roleCode, companyId);
//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<User> roleDeptUsers = userDao.find(usersByDeptRoleHql.toString(), systemId, roleCode, companyId);
//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<User> roleWgUsers = userDao.find(usersByWgRoleHql.toString(), systemId, roleCode, companyId);
result.addAll(roleUsers);
result.addAll(roleDeptUsers);
result.addAll(roleWgUsers);
return result;
}
private static List<User> doSort(List<User> departments){
for(int i=0;i<departments.size()-1;i++){
for(int j=departments.size()-1;j>i;j--){
if(!(departments.get(j).getWeight() instanceof Integer)){
departments.get(j).setWeight(1);
}
if(!(departments.get(j-1).getWeight() instanceof Integer)){
departments.get(j-1).setWeight(1);
}
if(departments.get(j).getWeight() > departments.get(j-1).getWeight()){
User dt = departments.get(j);
departments.set(j,departments.get(j-1));
departments.set(j-1,dt);
}
}
}
return departments;
}
public static String getRtxUrl(Long companyId){
String rtxurl="";
ServerConfig serverConfig= serverConfigDao.findUniqueByProperty("companyId", companyId);
if(serverConfig!=null && serverConfig.getRtxUrl()!=null && isRtxInvocation(companyId)){
rtxurl=serverConfig.getRtxUrl();
if(rtxurl.endsWith("/")){
rtxurl=rtxurl.substring(0,rtxurl.lastIndexOf("/"));
}
}
return rtxurl;
}
/**
* 是否启用了rtx集成
* @param companyId
* */
public static Boolean isRtxInvocation(Long companyId){
ServerConfig serverConfig= serverConfigDao.findUniqueByProperty("companyId", companyId);
if(serverConfig!=null){
return serverConfig.getRtxInvocation();
}else{
return false;
}
}
/**
* 根据用户ID查询用户所在的部门
* @param companyId
* @param userId
* @return
*/
@SuppressWarnings("unchecked")
public static List<Department> getDepartmentsByUser(Long companyId,Long userId){
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");
return departmentDao.find(hql.toString(), companyId, userId, false, false, false);
}
/**
* 根据登录名查询用户信息
* @param companyId
* @param loginName
* @return
*/
public static User getUser(Long companyId, String loginName){
return (User)userDao.findUnique("from User u where u.companyId=? and u.loginName=? and u.deleted=? ", companyId, loginName, false);
}
/**
* 根据邮件地址查询用户信息
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
public static User getUser(String email){
List<User> list=userDao.find("from User u where u.email=? and u.deleted=? ",email, false);
if(list!=null&&!list.isEmpty()){
return list.get(0);
}
return null;
}
/**
* 查询出该登录名外的其他用户的登录名
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
public static Set<String> getUserExceptLoginName(Long companyId,String loginName){
return new HashSet<String>(userDao.find("select u.loginName from User u where u.companyId=? and u.loginName<>? and u.deleted=? ", companyId, loginName, false));
}
/**
* 根据用户登录名查询用户所在的部门
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
public static List<Department> getDepartmentsByUser(Long companyId, String loginName){
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=?");
return departmentDao.find(hql.toString(), companyId, loginName, false, false, false);
}
/**
* 根据用户登录名查询用户所在的部门
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
public static 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=?");
return departmentDao.find(hql.toString(), companyId, "%"+name+"%", false, false, false);
}
/**
* 根据公司ID和用户的登录名查询该用户所具有的角色的字符串表示
* @param companyId
* @param loginName
* @return
*/
public static Set<Role> getRolesByUser(Long companyId, String loginName){
User user = getUser(companyId, loginName);
return getRolesByUser(user.getId());
}
/**
* 根据公司ID和用户登录名查询该用户所在的工作组
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
public static List<Workgroup> getWorkGroupsByUser(Long companyId, String loginName){
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=?");
return workGroupDao.find(hql.toString(), companyId, loginName, false, false, false);
}
/**
* 根据公司ID和用户登录名查询该用户所在的工作组
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
public static 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=?");
return workGroupDao.find(hql.toString(), companyId, "%"+name+"%", false, false, false);
}
/**
* 查询所有的系统并排序
* @return
*/
@SuppressWarnings("unchecked")
public static List<BusinessSystem> getSystems(){
return businessSystemDao.find("from BusinessSystem bs where bs.deleted=? order by bs.id", false);
}
public static BusinessSystem getSystemByCode(String code){
return businessSystemDao.findUniqueByProperty("code", code);
}
@SuppressWarnings("unchecked")
public static List<User> getUsersByLoginNames(Long companyId, List<String> loginNames){
StringBuilder hql = new StringBuilder("from User u where u.companyId=? and (");
Object[] parameters = new Object[loginNames.size()+1];
parameters[0] = companyId;
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");
return userDao.find(hql.toString(), parameters);
}
@Transactional(readOnly = true)
public static List<Role> getRolesListByUserExceptDelegateMain(Long userId){
User user = userDao.get(userId);
if(user == null) return null;
return getRolesListByUserExceptDelegateMain(user);
}
/**
* 根据用户查询角色(不含委托)
* @param user
* @return
*/
@Transactional(readOnly = true)
public static List<Role> getRolesListByUserExceptDelegateMain(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 = 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(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(rw.getRole());
}
}
}
}
return roles;
}
/**
* 根据用户登录名查询用户所在的部门的上级部门
* @param companyId
* @param loginName
* @return
*/
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)
public static List<Department> getSuperiorDepartmentsByUser(Long companyId, String loginName){
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=?");
return departmentDao.find(hql.toString(), companyId, loginName, false, false, false,false);
}
/**
* 获得用户的顶级部门
* @param companyId
* @param loginName
* @return
*/
public static List<Department> getUpstageDepartmentsByUser(Long companyId, String loginName){
Set<Department> result = new HashSet<Department>();
List<Department> departments = getDepartmentsByUser(companyId, loginName);
for(Department department:departments){
result.add(getFirstDegreeDepartment(department));
}
return new ArrayList<Department>(result);
}
/**
* 获得用户的顶级部门
* @param companyId
* @param loginName
* @return
*/
public static List<Department> getUpstageDepartmentsByUserLike(Long companyId, String loginName){
Set<Department> result = new HashSet<Department>();
List<Department> departments = getDepartmentsByUserLike(companyId, loginName);
for(Department department:departments){
result.add(getFirstDegreeDepartment(department));
}
return new ArrayList<Department>(result);
}
/**
* 返回该部门的一级部门
* @param department
* @return
*/
public static Department getFirstDegreeDepartment(Department department){
if(department.getParent()!=null){
return getFirstDegreeDepartment(department.getParent());
}else{
return department;
}
}
/**
* 员工查询
* @param department
* @return
*/
public static void userSearch(String userName ,String userDepart, boolean userSex, Long companyId, Page<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 ui.sex=? and d.departmentName like ?");
userDao.find(page,hql.toString(), companyId,false,false,false,false,"%" + userName + "%", userSex, "%" + userDepart+ "%");
}
/**
* 员工查询所有性别
* @param department
* @return
*/
public static void userSearchAllSex(String userName ,String userDepart, Long companyId, Page<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.departmentName like ?");
userDao.find(page,hql.toString(), companyId,false,false,false,false,"%" + userName + "%", "%" + userDepart+ "%");
}
/**
* 获取本公司所有用户的生日
* @return
*/
@SuppressWarnings("unchecked")
public static 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 static 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);
}
}