package com.norteksoft.acs.service.organization; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.enumeration.MailboxDeploy; import com.norteksoft.acs.base.enumeration.SecretGrade; import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate; import com.norteksoft.acs.base.utils.log.LogUtilDao; 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.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.sale.Subsciber; import com.norteksoft.acs.service.AcsUtils; import com.norteksoft.product.api.ApiFactory; import com.norteksoft.product.api.utils.BeanUtil; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; @Service @Transactional public class UserManager { private Log log = LogFactory.getLog(UserManager.class); private SimpleHibernateTemplate<User, Long> userDao; private SimpleHibernateTemplate<UserInfo, Long> userInfoDao; private SimpleHibernateTemplate<RoleUser, Long> roleUserDao; private SimpleHibernateTemplate<DepartmentUser, Long> departmentToUserDao; private SimpleHibernateTemplate<WorkgroupUser, Long> workGroupToUserDao; private SimpleHibernateTemplate<Department, Long> departmentDao; private SimpleHibernateTemplate<Workgroup, Long> workGroupDao; private SimpleHibernateTemplate<Company, Long> companyDao; private SimpleHibernateTemplate<Subsciber, Long> subsciberDao; private Long companyId; private static String USERID = "user.id"; private static String DELETED = "deleted"; private static String COMPANYID = "companyId"; private LogUtilDao logUtilDao; private static String ACS = "acs"; @Autowired private AcsUtils acsUtils; @Autowired private UserInfoManager userInfoManager; public Long getSystemIdByCode(String code) { return acsUtils.getSystemsByCode(code).getId(); } @Autowired public void setSessionFactory(SessionFactory sessionFactory) { userDao = new SimpleHibernateTemplate<User, Long>(sessionFactory, User.class); roleUserDao = new SimpleHibernateTemplate<RoleUser, Long>(sessionFactory, RoleUser.class); workGroupToUserDao = new SimpleHibernateTemplate<WorkgroupUser, Long>(sessionFactory, WorkgroupUser.class); departmentToUserDao = new SimpleHibernateTemplate<DepartmentUser, Long>(sessionFactory, DepartmentUser.class); departmentDao = new SimpleHibernateTemplate<Department, Long>(sessionFactory, Department.class); workGroupDao = new SimpleHibernateTemplate<Workgroup, Long>(sessionFactory, Workgroup.class); userInfoDao = new SimpleHibernateTemplate<UserInfo, Long>(sessionFactory, UserInfo.class); companyDao=new SimpleHibernateTemplate<Company, Long>(sessionFactory, Company.class); subsciberDao=new SimpleHibernateTemplate<Subsciber, Long>(sessionFactory, Subsciber.class); logUtilDao = new LogUtilDao(sessionFactory); } @SuppressWarnings("unchecked") public Integer getAllowedNumbByCompany(Long companyId){ List<Subsciber> subscibers = subsciberDao.find("select ss from Subsciber ss where ss.tenantId=? and deleted=?", companyId, false); Integer num = 0; for(Subsciber sb : subscibers){ Date now = new Date(); if(now.after(sb.getBeginDate()) && now.before(sb.getValidDate())){ if(num < sb.getUseNumber()){ num = sb.getUseNumber(); } } } return num; } @SuppressWarnings("unchecked") public Department getManDepartment(String loginName){ List<Department> depts = departmentDao.find("select d from Department d,User u where d.id=u.mainDepartmentId and u.companyId=? and u.loginName=?", getCompanyId(), loginName); if(depts.size() == 1){ return depts.get(0); } return null; } @SuppressWarnings("unchecked") public Department getManDepartment(Long userId){ List<Department> depts = departmentDao.find("select d from Department d,User u where d.id=u.mainDepartmentId and u.companyId=? and u.id=?", getCompanyId(), userId); if(depts.size() == 1){ return depts.get(0); } return null; } public void saveUser(User user){ userDao.save(user); } @Transactional(readOnly = true) public List<User> getAllUser(){ return userDao.findAll(); } public User getUserById(Long id){ return userDao.get(id); } public User getUserByLoginName(String name){ log.debug("*** getUserByLoginName 开始"); log.debug("*** Received parameter: loginName:" + name); User user = (User) userDao.findUnique("select user from User user where user.deleted=false and user.loginName=?", name); log.debug("*** Return:" + user); log.debug("*** getUserByLoginName 结束"); return user; } @SuppressWarnings("unchecked") public List<User> getUsersByLoginName(String name){ log.debug("*** getUsersByLoginName 开始"); log.debug("*** Received parameter: loginName:" + name); List<User> users = userDao.find("from User user where user.loginName=?", name); log.debug("*** getUserByLoginName 结束"); return users; } public User getCompanyUserByLoginName(String name){ log.debug("*** getUserByLoginName 开始"); log.debug("*** Received parameter: loginName:" + name); User user = (User) userDao.findUnique("select user from User user where user.deleted=false and user.loginName=? and user.companyId=?", name,ContextUtils.getCompanyId()); log.debug("*** Return:" + user); log.debug("*** getUserByLoginName 结束"); return user; } @SuppressWarnings("unchecked") public Integer getUserNumberByCompanyId(long companyId){ List<UserInfo> userList =userInfoDao.find("from UserInfo userInfo where userInfo.companyId=? and userInfo.dr=? order by userInfo.user.weight ,userInfo.user.loginName desc", getCompanyId(),0); return new Integer(userList.size()); } public User getDelUserByLoginName(String name){ log.debug("*** getUserByLoginName 开始"); log.debug("*** Received parameter: loginName:" + name); User user = (User) userDao.findUnique("select user from User user where user.deleted=true and user.loginName=?", name); log.debug("*** Return:" + user); log.debug("*** getUserByLoginName 结束"); return user; } /** * 设置用户为禁用 */ public void closeUser(List<User> users){} /** * 设置用户为启用 */ public void openUser(List<User> users){} /** * 设置用户为解锁 */ public void unlock(List<User> users){} /** *查询已删除用户 */ public List<User> queryDeletedUser(){ return userDao.findByCriteria(Restrictions.eq("user.deleted", true)); } /** * 选中用户(己删除)添加部门 */ public void addDepartmentToUserDel(Long userInfoId, List<Long> departmentIds,Integer isAdd) { User user = userInfoDao.get(userInfoId).getUser(); List<Department> departments = departmentDao.findByCriteria(Restrictions.in("id", departmentIds)); DepartmentUser departmentToUsers = null; StringBuilder departmentName = new StringBuilder(); /* 添加部门*/ if (isAdd == 0) { for (Department department : departments) { departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); departmentToUserDao.save(departmentToUsers); departmentName.append(department.getName()); departmentName.append(","); } if(departmentName.indexOf(",")>=0){ departmentName.deleteCharAt(departmentName.length()-1); } /* 移除部门*/ } else { List<DepartmentUser> departmentToUser = departmentToUserDao.findByCriteria(Restrictions.in("department.id", departmentIds),Restrictions.eq(USERID, user.getId())); for (DepartmentUser departmentToUser2 : departmentToUser) { departmentToUserDao.delete(departmentToUser2); } } } /** * 删除部门和用户关系 */ public void deleteDepartmemtToUser(List<Long> departmentIds,Long userId){ List<DepartmentUser> departmentToUser = departmentToUserDao.findByCriteria(Restrictions.in("department.id", departmentIds),Restrictions.eq(USERID, userId)); for (DepartmentUser departmentToUser2 : departmentToUser) { departmentToUserDao.delete(departmentToUser2); } } /** * 获得部门和用户关系 */ public List<DepartmentUser> getDepartmemtToUser(Long departmentId,Long userId){ List<DepartmentUser> departmentToUser = departmentToUserDao.findByCriteria(Restrictions.eq("department.id", departmentId),Restrictions.eq(USERID, userId)); return departmentToUser; } /** * 还原用户 */ public void rebackUser(Long id){ UserInfo userif = userInfoDao.get(id); userif.setDr(0); userInfoDao.save(userif); } public List<Long> getCheckedRoleIdsByUser(Long userId){ List<RoleUser> roleUsers = roleUserDao.findByCriteria( Restrictions.eq(USERID, userId), Restrictions.eq(DELETED, false), Restrictions.eq(COMPANYID, ContextUtils.getCompanyId())); List<Long> checkedRoleIds = new ArrayList<Long>(); for(RoleUser ru : roleUsers){ checkedRoleIds.add(ru.getRole().getId()); } return checkedRoleIds; } /** * 选中用户添加角色 */ public void addRolesToUser(Long userId, List<Long> roleIds, Integer isAdd){ User user = userDao.get(userId); if(isAdd == 0){ RoleUser roleUser = null; Role role = null; for(Long id: roleIds){ role = new Role(); role.setId(id); roleUser = new RoleUser(); roleUser.setRole(role); roleUser.setUser(user); roleUser.setCompanyId(ContextUtils.getCompanyId()); roleUserDao.save(roleUser); } }else if(isAdd == 1){ List<RoleUser> roleUsers = roleUserDao.findByCriteria( Restrictions.eq(USERID, userId), Restrictions.in("role.id", roleIds), Restrictions.eq(DELETED, false), Restrictions.eq(COMPANYID, ContextUtils.getCompanyId())); for(RoleUser ru : roleUsers){ ru.setDeleted(true); roleUserDao.save(ru); } } } /** * 查询用户要移除的部门 */ public Page<Department> userToRomoveDepartmentList(Page<Department> page,Department department,Long userId){ String hql = "select department from Department department join department.departmentUsers ud where ud.user.userInfo.id=? and ud.companyId=? and department.deleted=? and ud.deleted=? "; if(department!=null){ String departmentName = department.getName(); if(departmentName!=null&&!"".equals(departmentName)){ StringBuilder hqL = new StringBuilder(hql); hqL.append(" and department.name like ? "); return departmentDao.find(page, hqL.toString(), userId,getCompanyId(),false,false,"%"+departmentName+"%"); } } return departmentDao.find(page, hql, userId,getCompanyId(),false,false); } /** * 查询用户要移除的工作组 */ public Page<Workgroup> userToRomoveWorkGroupList(Page<Workgroup> page,Workgroup workGroup,Long userId){ String hql = "select workgroup from Workgroup workGroup join workGroup.workgroupUsers uw where uw.user.userInfo.id=? and uw.companyId=? and workGroup.deleted=? and uw.deleted=? "; if(workGroup!=null){ String workGroupName = workGroup.getName(); if(workGroupName!=null&&!"".equals(workGroupName)){ StringBuilder hqL = new StringBuilder(hql); hqL.append(" and workGroup.name like ? "); return workGroupDao.find(page, hqL.toString(), userId,getCompanyId(),false,false,"%"+workGroupName+"%"); } } return workGroupDao.find(page, hql, userId,getCompanyId(),false,false); } /** * 选中人员添加部门 */ public void addDepartmentToUser(Long userInfoId, List<Long> departmentIds,Integer isAdd) { User user = userInfoDao.get(userInfoId).getUser(); StringBuilder departmentName = new StringBuilder(); /** * 添加部门 */ if (isAdd == 0) { DepartmentUser departmentToUser; Department department = null; for (Long departmentId : departmentIds) { departmentToUser = new DepartmentUser(); department = departmentDao.get(departmentId); departmentToUser.setUser(user); departmentToUser.setDepartment(department); departmentToUser.setCompanyId(getCompanyId()); departmentToUserDao.save(departmentToUser); departmentName.append(departmentToUser.getDepartment().getName()); departmentName.append(","); } departmentName.deleteCharAt(departmentName.length()-1); } /** *移除部门 */ if(isAdd==1) { List<DepartmentUser> list_d = departmentToUserDao.findByCriteria(Restrictions.in("department.id", departmentIds), Restrictions.eq(USERID, user.getId()), Restrictions.eq(COMPANYID, getCompanyId()), Restrictions.eq(DELETED, false) ); for (DepartmentUser departmentToUser : list_d) { departmentToUser.setDeleted(true); departmentToUserDao.save(departmentToUser); departmentName.append(departmentToUser.getDepartment().getName()); departmentName.append(","); } departmentName.deleteCharAt(departmentName.length()-1); } } /** * 选中人员添加工作组 */ public void addWorkGroupToUser(Long userInfoId, List<Long> workGroupIds,Integer isAdd) { User user = userInfoDao.get(userInfoId).getUser(); StringBuilder workGroupName = new StringBuilder(); //添加工作组 if (isAdd == 0) { WorkgroupUser workGroupToUser; Workgroup workGroup = null; for (Long workGroupId : workGroupIds) { workGroupToUser = new WorkgroupUser(); workGroup = workGroupDao.get(workGroupId); workGroupToUser.setUser(user); workGroupToUser.setWorkgroup(workGroup); workGroupToUser.setCompanyId(getCompanyId()); workGroupToUserDao.save(workGroupToUser); workGroupName.append(workGroupToUser.getWorkgroup().getName()); workGroupName.append(","); } workGroupName.deleteCharAt(workGroupName.length()-1); } //移除工作组 if(isAdd==1) { List<WorkgroupUser> list_d = workGroupToUserDao.findByCriteria(Restrictions.in("workgroup.id", workGroupIds), Restrictions.eq(USERID, user.getId()), Restrictions.eq(COMPANYID, getCompanyId()), Restrictions.eq(DELETED, false) ); for (WorkgroupUser workGroupToUser : list_d) { workGroupToUser.setDeleted(true); workGroupToUserDao.save(workGroupToUser); workGroupName.append(workGroupToUser.getUser().getLoginName()); workGroupName.append(","); } workGroupName.deleteCharAt(workGroupName.length()-1); } } /** * 查询人员己分配的部门 */ public Page<Department> getDepartmentList(Page<Department> page){ return departmentDao.find(page, "from Department d where d.company.id=? and d.deleted=?", ContextUtils.getCompanyId(), false); } public List<Long> getCheckedDepartmentIds(Long userInfoId){ List<Long> departmentIds = new ArrayList<Long>(); User user = userInfoDao.get(userInfoId).getUser(); List<DepartmentUser> d_u= departmentToUserDao.findByCriteria(Restrictions.eq(USERID, user.getId()),Restrictions.eq(COMPANYID, getCompanyId()) ,Restrictions.eq(DELETED,false)); for (DepartmentUser departmentToUser : d_u) { departmentIds.add(departmentToUser.getDepartment().getId()); } return departmentIds; } public List<Department> getDepartmentsByUser(Long userId){ List<Department> departments = new ArrayList<Department>(); User user = userDao.get(userId); List<DepartmentUser> d_u= departmentToUserDao.findByCriteria(Restrictions.eq(USERID, user.getId()),Restrictions.eq(COMPANYID, getCompanyId()) ,Restrictions.eq(DELETED,false)); for (DepartmentUser departmentToUser : d_u) { departments.add(departmentToUser.getDepartment()); } return departments; } /** * 查询查询人员己分配的工作组 */ public Page<Workgroup> getWorkGroupList(Page<Workgroup> page){ return workGroupDao.findByCriteria(page, Restrictions.eq("company.id", ContextUtils.getCompanyId()) ,Restrictions.eq(DELETED,false)); } public List<Long> getCheckedWorkGroupIds(Long userInfoId){ List<Long> workGroupIds = new ArrayList<Long>(); User user = userInfoDao.get(userInfoId).getUser(); List<WorkgroupUser> w_u= workGroupToUserDao.findByCriteria(Restrictions.eq(USERID, user.getId()), Restrictions.eq(DELETED,false), Restrictions.eq(COMPANYID,getCompanyId())); for (WorkgroupUser workGroupToUser : w_u) { workGroupIds.add(workGroupToUser.getWorkgroup().getId()); } return workGroupIds; } public SimpleHibernateTemplate<UserInfo, Long> getUserInfoDao() { return userInfoDao; } public SimpleHibernateTemplate<User, Long> getUserDao() { return userDao; } public SimpleHibernateTemplate<DepartmentUser, Long> getDepartmentToUserDao() { return departmentToUserDao; } public SimpleHibernateTemplate<WorkgroupUser, Long> getWorkGroupToUserDao() { return workGroupToUserDao; } public SimpleHibernateTemplate<Department, Long> getDepartmentDao() { return departmentDao; } public SimpleHibernateTemplate<Workgroup, Long> getWorkGroupDao() { return workGroupDao; } public Long getCompanyId() { if (companyId == null) { return ContextUtils.getCompanyId(); } else return companyId; } public void setCompanyId(Long companyId) { this.companyId = companyId; } /** * 获取所有公司的用户 * @return List<User> */ @SuppressWarnings("unchecked") @Transactional(readOnly = true) public List<User> getAllUsers(){ String hql = "from User ui where ui.deleted=0 "; return userDao.find(hql); } @SuppressWarnings("unchecked") public List<User> getUsersByDeptId(Long deptId){ return userDao.find("select u from User u join u.departmentUsers du where u.deleted=? and du.deleted=? and du.department.id=? order by u.weight desc", false, false, deptId); } @SuppressWarnings("unchecked") public boolean getLoginName(String loginName,Long deptId){ List<User> users=userDao.find("select u from User u join u.departmentUsers du where u.deleted=? and du.deleted=? and du.department.id=? order by u.weight desc", false, false, deptId); for(User user:users){ String ln=user.getLoginName(); if(loginName.equals(ln)){ return true; }else{ return false; } } return false; } @SuppressWarnings("unchecked") public String importUser(File file){ FileInputStream fis=null; InputStreamReader fr=null; BufferedReader br=null; Integer currentUserNumber=null; Integer companyUserLimit=getAllowedNumbByCompany(getCompanyId()); Integer importCount = 0; try{ fis=new FileInputStream(file); fr=new InputStreamReader(fis,"utf-8"); br=new BufferedReader(fr); String content=null; content=br.readLine();//读出文件第一行 currentUserNumber = getUserNumberByCompanyId(getCompanyId()); while((content=br.readLine())!=null){ String[] values=content.split(","); if(StringUtils.isNotEmpty(content)){//部门不为空 //####部门 if(StringUtils.isNotEmpty(values[0])){ String[] depts=values[0].split("/"); for(int i=0;i<depts.length;i++){ Department department=null; if(isDepartmentExist(depts[i],getCompanyId())){//部门存在 department=getDepartmentByName(depts[i]); }else{ department=new Department(); } Company company = companyDao.get(getCompanyId()); department.setCompany(company); department.setCode(depts[i]); department.setName(depts[i]); if(i>0){ Department parentDept=getDepartmentByName(depts[i-1]); department.setParent(parentDept); } //如果是最后一个部门,则添加人。如:办公室/后勤/车队,周宏1,zhouhong1,68963158,男,zhouhong@bky.com,50,10,如果是“车队”则添加人员 if(depts.length-1==i){ //#####用户 if(StringUtils.isNotEmpty(values[2])){//用户登录名不为空,添加用户 if(currentUserNumber+importCount+1>companyUserLimit)return "已导入"+importCount+"条,超出系统允许注册人数"; departmentDao.save(department); UserInfo userInfo=importUserSaveUser(values,department); //新建用户时默认给用户portal普通用户权限 userInfoManager.giveNewUserPortalCommonRole(userInfo.getUser()); //####部门人员 DepartmentUser departmentToUser; List<DepartmentUser> dtu=departmentToUserDao.find("from DepartmentUser d where d.user.id=? and d.department.id=?", userInfo.getUser().getId(),department.getId()); if(dtu.size()==0){ departmentToUser = new DepartmentUser(); userInfo = userInfoDao.get(userInfo.getId()); departmentToUser.setUser(userInfo.getUser()); departmentToUser.setDepartment(department); departmentToUser.setCompanyId(getCompanyId()); departmentToUserDao.save(departmentToUser); //记录公司用户数量 importCount++; }else{ DepartmentUser d=dtu.get(0); d.setDeleted(false); departmentToUserDao.save(d); } } } } }else{//部门为空,即无部门人员导入 if(StringUtils.isNotEmpty(values[2])){ if(currentUserNumber+importCount+1>companyUserLimit)return "已导入"+importCount+"条,超出系统允许注册人数"; importUserSaveUser(values,null); User user = getUserByLoginName(StringUtils.trim(values[2])); //新建用户时默认给用户portal普通用户权限 if(user!=null)userInfoManager.giveNewUserPortalCommonRole(user); if(user==null){ //记录公司用户数量 importCount++; } } } } } }catch(IOException exception){ log.debug(exception.getStackTrace()); }finally{ try{ if(br!=null)br.close(); if(fr!=null)fr.close(); if(fis!=null)fis.close(); }catch(IOException ep){ log.debug(ep.getStackTrace()); } } return null; } @SuppressWarnings("unchecked") public Department getDepartmentByName(String name){ if(name == null) throw new RuntimeException("没有给定查询部门时的查询条件:部门名称"); List<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 depts.get(0); } return null; } @SuppressWarnings("unchecked") public Date getUserTs(Long companyId){ List<Date> dates = userDao.find("select max(l.loginTime) from LoginLog l where l.companyId=?", companyId); if(dates.isEmpty()){ dates = userDao.find("select max(u.ts) from User u where u.companyId=?", companyId); } if(!dates.isEmpty()){ return dates.get(0); } return new Date(); } public UserInfo importUserSaveUser(String[] values,Department dept){ //#####用户 User user = getCompanyUserByLoginName(values[2]); UserInfo userInfo =null; List<UserInfo> userInfos=new ArrayList<UserInfo>(); if(user==null){ user=new User(); userInfo = new UserInfo(); }else{ userInfo=user.getUserInfo(); } if(dept!=null)user.setMainDepartmentId(dept.getId()); user.setName(StringUtils.trim(values[1])); user.setPassword("123"); user.setLoginName(StringUtils.trim(values[2])); user.setCompanyId(getCompanyId()); userInfo.setCompanyId(getCompanyId()); userInfo.setPasswordUpdatedTime(getNewDate()); for(int i=4;i<=values.length;i++){ switch (i) { case 4: if(StringUtils.isNotEmpty(values[3]))userInfo.setTelephone(StringUtils.trim(values[3])); break; case 5: user.setSex("男".equals(values[4])); break; case 6: if(StringUtils.isNotEmpty(values[5]))user.setEmail(StringUtils.trim(values[5])); break; case 7: if(StringUtils.isNotEmpty(values[6]))user.setWeight(Integer.parseInt(StringUtils.trim(values[6]))); break; case 8: if(StringUtils.isNotEmpty(values[7]))user.setMailSize(Float.parseFloat(StringUtils.trim(values[7]))); break; case 9: if(StringUtils.isNotEmpty(values[8])){ if("一般".equals(StringUtils.trim(values[8]))){ user.setSecretGrade(SecretGrade.COMMON); }else if("重要".equals(StringUtils.trim(values[8]))){ user.setSecretGrade(SecretGrade.MAJOR); }else if("核心".equals(StringUtils.trim(values[8]))){ user.setSecretGrade(SecretGrade.CENTRE); } } break; case 10: if(StringUtils.isNotEmpty(values[9])){ if("内网".equals(StringUtils.trim(values[9]))){ user.setMailboxDeploy(MailboxDeploy.INSIDE); }else if("外网".equals(StringUtils.trim(values[9]))){ user.setMailboxDeploy(MailboxDeploy.EXTERIOR); } } break; } } userInfos.add(userInfo); user.setUserInfos(userInfos); userDao.save(user); userInfo.setUser(user); userInfoDao.save(userInfo); return userInfo; } /** * 验证部门是否存在 * @param name * @param companyId * @return */ @SuppressWarnings("unchecked") public boolean isDepartmentExist(String name, Long companyId){ List<Department> depts = departmentDao.find("from Department d where d.company.id=? and d.name=? and d.deleted=?", companyId, name, false); if(depts.size() >= 1){ return true; } return false; } private Date newDate; private Date getNewDate() { if(newDate==null){ Calendar cal=Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DATE); cal.clear(); cal.set(year, month, day); newDate = cal.getTime(); } return newDate; } /** * 解锁用户 */ public String unlockUser(String userIds){ StringBuilder result=new StringBuilder(); int successNum=0; int failNum=0; if(StringUtils.isNotEmpty(userIds)){ String[] ids=userIds.split(","); for(String id:ids){ if(StringUtils.isNotEmpty(id)){ Long userId=Long.parseLong(id); User user=getUserById(userId); if(user.getAccountLocked()){//true为锁定,false为未锁 user.setAccountLocked(false); saveUser(user); successNum++; } } } failNum=ids.length-successNum; } result.append("解锁").append(successNum).append("个;") .append(failNum).append("个").append("不需解锁"); return result.toString(); } /** * 批量更换用户的主职部门 */ public void batchChangeMainDepartment(String ids, Long departmentId) { String[] idArr = ids.split(","); DepartmentUser departmentToUsers ; Department department = departmentDao.findUniqueByProperty("id", departmentId); for(int i=0;i<idArr.length;i++){ User user= this.getUserById(Long.valueOf(idArr[i])); //更换的正职部门与原正职部门相同就不用重新设置正职部门 if(departmentId.equals(user.getMainDepartmentId()))continue; //建立新主职部门和用户的关系 List<DepartmentUser> departmentToUser = departmentToUserDao .findByCriteria(Restrictions.eq("department.id", departmentId),Restrictions.eq(USERID, user.getId())); if(departmentToUser.isEmpty()){ departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); departmentToUserDao.save(departmentToUsers); } //删除原来主职部门和用户的关系 Long oldMainDepartmentId = user.getMainDepartmentId(); if(oldMainDepartmentId!=null){ List<DepartmentUser> oldDepartmentToUser = departmentToUserDao .findByCriteria(Restrictions.eq("department.id", oldMainDepartmentId),Restrictions.eq(USERID, user.getId())); if(!oldDepartmentToUser.isEmpty()){ departmentToUserDao.delete(oldDepartmentToUser.get(0)); } } //重新设置主职部门 user.setMainDepartmentId(departmentId); userDao.save(user); } } @SuppressWarnings("unchecked") public List<User> getUsersByLoginNames(Set<String> loginNames){ List<User> users = new ArrayList<User>(); if(loginNames.size()>0){ Object[] objs =new Object[loginNames.size()+1]; StringBuilder hql = new StringBuilder("from User u where u.deleted=? and ("); objs[0] = false; int i = 0; for(String loginName:loginNames){ i++; if(i==loginNames.size()){ hql.append(" u.loginName=?)"); }else{ hql.append(" u.loginName=? or "); } objs[i] = loginName; } users = userDao.find(hql.toString(), objs); } return users; } 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>(); // 用户具有的角色 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); //角色按权重排序 sortRole(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(); } //角色按权重排序 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; } }); } @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"); return departmentDao.find(hql.toString(), getCompanyId(), userId, false, false, false); } @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=?"); return departmentDao.find(hql.toString(), getCompanyId(), loginName, false, false, false); } /** * 根据公司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 workGroupList; } @SuppressWarnings("unchecked") public Workgroup getWorkgroupByName(String name){ if(name == null) throw new RuntimeException("没有给定查询工作组时的查询条件:工作组名称"); List<Workgroup> workGroups = workGroupDao.find("from Workgroup wg where wg.company.id=? and wg.name=? ", getCompanyId(), name); if(workGroups.size() == 1){ return workGroups.get(0); } return null; } @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=?"); return workGroupDao.find(hql.toString(), getCompanyId(), loginName, false, false, false); } }