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.utils.BeanUtil; import com.norteksoft.product.orm.Page; import com.norteksoft.product.util.ContextUtils; import com.norteksoft.product.util.MemCachedUtils; import com.norteksoft.product.util.ParameterUtils; import com.norteksoft.product.util.ThreadParameters; @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"; private static final String USERS_MEMCACHE_KEY = "_acs_user_infos~~"; @Autowired private AcsUtils acsUtils; @Autowired private UserInfoManager userInfoManager; @Autowired private DepartmentManager departmentManager; @Autowired private CompanyManager companyManager; 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){ List<User> users = userDao.find("from User user where user.id=?", id); if(users.size()>0)return users.get(0); return null; } 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; } public User getUserByLoginNameInCompany(String name,Long companyId){ 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=? and user.subCompanyId is null", name,companyId); log.debug("*** Return:" + user); log.debug("*** getUserByLoginName 结束"); return user; } public User getUserByLoginNameInBranch(String name,Long subCompanyId){ 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.subCompanyId=?", name,subCompanyId); 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; /* 添加部门*/ if (isAdd == 0) { for (Department department : departments) { departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); departmentToUsers.setSubCompanyId(department.getSubCompanyId()); //给部门添加人员时设置分支机构id //可以点击分支机构新建用户,用户会自动保存到分支机构的无部门人员中 if(department.getBranch()){ departmentToUsers.setSubCompanyId(department.getId()); }else{ departmentToUsers.setSubCompanyId(department.getSubCompanyId()); } user.setSubCompanyId(departmentToUsers.getSubCompanyId()); if(departmentToUsers.getSubCompanyId()!=null){ Department branch=departmentManager.getDepartmentById(departmentToUsers.getSubCompanyId()); user.setSubCompanyName(StringUtils.isNotEmpty(branch.getShortTitle())?branch.getShortTitle():branch.getName()); }else{ user.setSubCompanyName((companyManager.getCompany(ContextUtils.getCompanyId()).getName())); } departmentToUserDao.save(departmentToUsers); } /* 移除部门*/ } 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 addBranchUser(Long userInfoId, Long departmentId) { User user = userInfoDao.get(userInfoId).getUser(); Department department = departmentDao.get(departmentId); List<DepartmentUser> departmentToUser = departmentToUserDao.findByCriteria(Restrictions.eq("department.id", departmentId),Restrictions.eq(USERID, user.getId())); if(departmentToUser.size()==0){ if(department.getBranch()){ DepartmentUser departmentToUsers = null; departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); //给部门添加人员时设置分支机构id //可以点击分支机构新建用户,用户会自动保存到分支机构的无部门人员中 if(department.getBranch()){ departmentToUsers.setSubCompanyId(department.getId()); } user.setSubCompanyId(departmentToUsers.getSubCompanyId()); Department branch = departmentDao.get(departmentToUsers.getSubCompanyId()); user.setSubCompanyName(StringUtils.isNotEmpty(branch.getShortTitle())?branch.getShortTitle():branch.getName()); departmentToUserDao.save(departmentToUsers); } } } public void deleteBranchUser(Long userInfoId, Long departmentId) { User user = userInfoDao.get(userInfoId).getUser(); List<DepartmentUser> departmentToUser = departmentToUserDao.findByCriteria(Restrictions.eq("department.id", departmentId),Restrictions.eq(USERID, user.getId())); if(departmentToUser.size()!=0){ departmentToUserDao.delete(departmentToUser.get(0)); } } /** * 删除部门和用户关系 */ 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; if(validateBranchSame(department.getSubCompanyId(), user.getSubCompanyId())){ //建立新主职部门和用户的关系 List<DepartmentUser> departmentToUser = departmentToUserDao .findByCriteria(Restrictions.eq("department.id", departmentId),Restrictions.eq(USERID, user.getId())); if(departmentToUser.isEmpty()){ if(user.getSubCompanyId()!=null){//表示某分支机构下的人员 departmentToUsers=(DepartmentUser)departmentToUserDao.findUnique("from DepartmentUser d where d.companyId=? and d.user.id=? and d.department.id=? and d.subCompanyId=? ", ContextUtils.getCompanyId(),user.getId(),department.getSubCompanyId(),department.getSubCompanyId()); if(departmentToUsers != null){//表示某分支机构的无部门人员要更换正职部门 departmentToUsers.setDepartment(department); }else{ departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); departmentToUsers.setSubCompanyId(department.getSubCompanyId()); } departmentToUserDao.save(departmentToUsers); }else{//表示集团公司下的人员 departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); departmentToUsers.setSubCompanyId(department.getSubCompanyId()); 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)); } } }else{ departmentToUserDao.executeUpdate("delete DepartmentUser d where d.companyId=? and d.user.id=? ", ContextUtils.getCompanyId(),user.getId()); departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(department); departmentToUsers.setUser(user); departmentToUsers.setCompanyId(getCompanyId()); departmentToUsers.setSubCompanyId(department.getSubCompanyId()); departmentToUserDao.save(departmentToUsers); } //重新设置主职部门 user.setMainDepartmentId(departmentId); user.setSubCompanyId(department.getSubCompanyId()); if(department.getSubCompanyId()==null){ user.setSubCompanyName(ContextUtils.getCompanyName()); }else{ Department newBranch=departmentManager.getDepartment(department.getSubCompanyId()); user.setSubCompanyName(StringUtils.isNotEmpty(newBranch.getShortTitle())?newBranch.getShortTitle():newBranch.getName()); } userDao.save(user); } } private boolean validateBranchSame(Long firstId,Long secondId){ if(firstId==null&&secondId==null){ return true; }else if(firstId==null && secondId!=null){ return false; }else if(firstId!=null && secondId==null){ return false; }else{ if(firstId.equals(secondId)){ return true; }else{ return false; } } } /** * 验证兼职部门 * @param branchesId * @param user * @return */ public boolean sameBranches(Long branchesId,User user){ boolean result=true; //兼职 List<Department> concurrentPosts= getDepartmentsByUser(user.getId()); if(concurrentPosts.size()>0){ for(Department concurrentPost:concurrentPosts){ if(!concurrentPost.getId().equals(user.getMainDepartmentId())&&!concurrentPost.getBranch()){// 兼职部门 if(branchesId==null){//表示要更换的正职部门属于集团公司 if(concurrentPost.getSubCompanyId()!=null){//兼职部门与要更换的正职部门不在同一分支机构 result=false; break; } }else{//表示要更换的正职部门属于某个分支机构 if(!branchesId.equals(concurrentPost.getSubCompanyId())){//兼职部门与要更换的正职部门不在同一分支机构 result=false; break; } } } } } return result; } // @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; // } @SuppressWarnings("unchecked") public List<User> getUsersByUserIds(Set<Long> userIds){ List<User> users = new ArrayList<User>(); if(userIds.size()>0){ Object[] objs =new Object[userIds.size()+1]; StringBuilder hql = new StringBuilder("from User u where u.deleted=? and ("); objs[0] = false; int i = 0; for(Long userid:userIds){ i++; if(i==userIds.size()){ hql.append(" u.id=?)"); }else{ hql.append(" u.id=? or "); } objs[i] = userid; } users = userDao.find(hql.toString(), objs); } return users; } @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 Workgroup getWorkgroupByCode(String code){ if(code == null) throw new RuntimeException("没有给定查询工作组时的查询条件:工作组编号"); List<Workgroup> workGroups = workGroupDao.find("from Workgroup wg where wg.company.id=? and wg.code=? ", getCompanyId(), code); 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); } @SuppressWarnings("unchecked") public List<Workgroup> getWorkgroupsByUserId(Long userId){ if(userId==null) throw new RuntimeException("没有给出查询用户所在工作组列表的查询条件:用户id"); 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.id=? and u.deleted=? and wgu.deleted=? and wg.deleted=?"); return workGroupDao.find(hql.toString(), getCompanyId(), userId, false, false, false); } /** * 验证用户邮箱唯一 * @param id * @param userEmail * @return */ @SuppressWarnings("unchecked") public String validateEmail(Long id,String dscId,String validateLoginName,Long fromBracnhId,String branId) { if(id==null){//新建 if((StringUtils.isEmpty(branId)||"null".equals(branId))&&(StringUtils.isEmpty(dscId)||"null".equals(dscId))){//总公司 StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId is null"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),validateLoginName); if(users.size()>0) return "loginNameFlase"; }else{ //在分支内 StringBuilder sql = new StringBuilder(); Long sid=null; if(StringUtils.isEmpty(branId)||"null".equals(branId)){ sid=Long.valueOf(dscId); }else{ sid=Long.valueOf(branId); } sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId=?"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),validateLoginName,sid); if(users.size()>0) return "loginNameFlase"; } if(fromBracnhId!=null){ StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId=?"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),validateLoginName,fromBracnhId); if(users.size()>0) return "loginNameFlase"; } StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=?"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),validateLoginName); if(users.size()>0) return "loginNameMessage"; } return "true"; } /** * 跨分支机构时验证是否有重登录名用户 * @param id * @param userEmail * @return */ @SuppressWarnings("unchecked") public String validateLoginNameRepeat(String userLoginName,Long departmentId,String isCrossBranch) { //如果跨分支机构 if("true".equals(isCrossBranch)&&StringUtils.isNotEmpty(userLoginName)){ Department department = departmentDao.get(departmentId); if(department.getSubCompanyId()==null){ StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId is null"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),userLoginName); if(users.size()>0) return "false"; }else{ StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId=?"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),userLoginName,department.getSubCompanyId()); if(users.size()>0) return "false"; } } return "true"; } /** * 跨分支机构时验证是否有重登录名用户 * @param id * @param userEmail * @return */ @SuppressWarnings("unchecked") public String validateLoginNameRepeatByDepartIds(String userLoginName,String departmentIds,Long userId) { if((userId==null)||(userId!=null&&!inSameBranch(userId,departmentIds))){ String result=""; String[] arr = departmentIds.split("="); for(int i=0;i<arr.length;i++){ Department department = departmentDao.get(Long.valueOf(arr[i])); if(department.getSubCompanyId()==null){ StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId is null"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),userLoginName); if(users.size()>0){ result+=department.getName()+","; } }else{ StringBuilder sql = new StringBuilder(); sql.append("select u from User u "); sql.append("where u.companyId=? and u.loginName=? and u.subCompanyId=?"); List<User> users = userDao.find(sql.toString(),ContextUtils.getCompanyId(),userLoginName,department.getSubCompanyId()); if(users.size()>0){ result+=department.getName()+","; } } } if(StringUtils.isNotEmpty(result)){ return result.substring(0, result.length()-1); } } return "true"; } private boolean inSameBranch(Long userId,String departmentIds){ User user = userDao.get(userId); String[] arr = departmentIds.split("="); for(int i=0;i<arr.length;i++){ Department department = departmentDao.get(Long.valueOf(arr[i])); if((user.getSubCompanyId()==null&&department.getSubCompanyId()!=null) ||(user.getSubCompanyId()!=null&&department.getSubCompanyId()==null)){ return false; } if(user.getSubCompanyId()!=null&&department.getSubCompanyId()!=null){ if(!user.getSubCompanyId().equals(department.getSubCompanyId()))return false; } } return true; } /** * 在分支机构中查询用户 * @param loginName * @param companyId * @param subCompanyId * @return */ @SuppressWarnings("unchecked") public User getUserInBranchDepartment(String loginName,Long companyId,Long subCompanyId){ List<User> users = new ArrayList<User>(); if(subCompanyId==null){ users = userDao.find("from User user where user.loginName=? and user.companyId=? and user.deleted=? and user.subCompanyId is null", loginName,companyId,false); }else{ users = userDao.find("from User user where user.loginName=? and user.companyId=? and user.deleted=? and user.subCompanyId=?", loginName,companyId,false,subCompanyId); } if(users.size()>0)return users.get(0); return null; } /** * 在分支机构中查询已删除用户 * @param loginName * @param companyId * @param subCompanyId * @return */ @SuppressWarnings("unchecked") public User getDeleteUserInBranchDepartment(String loginName,Long companyId,Long subCompanyId){ List<User> users = new ArrayList<User>(); if(subCompanyId==null){ users = userDao.find("select user from User user join user.userInfos ui where ui.companyId=? and ui.dr=? and ui.deleted=? and user.deleted=? and user.loginName=? and user.subCompanyId is null ", companyId,0,true,true,loginName); }else{ users = userDao.find("select user from User user join user.userInfos ui where ui.companyId=? and ui.dr=? and ui.deleted=? and user.deleted=? and user.loginName=? and user.subCompanyId=? ", companyId,0,true,true,loginName,subCompanyId); } if(users.size()>0)return users.get(0); return null; } /** * 在总公司(非分支机构)中查询用户 * @param loginName * @param companyId * @return */ public User getUserInCompany(String loginName,Long companyId){ List<User> users = userDao.find("from User user where user.loginName=? and user.companyId=? and user.deleted=? and user.subCompanyId is null", loginName,companyId,false); if(users.size()>0)return users.get(0); return null; } @SuppressWarnings("unchecked") public List<User> getUsersByWorkgroupId(Long workgroupId){ return userDao.find("select u from User u join u.workgroupUsers du where u.deleted=? and du.deleted=? and du.workgroup.id=? order by u.weight desc", false, false, workgroupId); } @SuppressWarnings("unchecked") public List<Long> getUserIdsByWorkgroupId(Long workgroupId){ return userDao.find("select u.id from User u join u.workgroupUsers du where u.deleted=? and du.deleted=? and du.workgroup.id=? order by u.weight desc", false, false, workgroupId); } @SuppressWarnings("unchecked") public List<User> getUsersByCompanyId(Long companyId){ return userDao.find("from User u where u.companyId=? and u.deleted=? ", companyId,false); } /** * 更新用户缓存 */ public void updateUsers(){ List<Company> companys = companyManager.getCompanyList(); for(Company company:companys){ List<User> users=getUsersByCompanyId(company.getId()); ThreadParameters parameters=new ThreadParameters(); parameters.setCompanyCode(company.getCode()); parameters.setCompanyId(company.getId()); ParameterUtils.setParameters(parameters); List<com.norteksoft.product.api.entity.User> userList=BeanUtil.turnToModelUserList(users); MemCachedUtils.add(USERS_MEMCACHE_KEY+company.getCode(), userList); } } /** * 根据公司编号获得用户 * @param companyCode * @return */ public List<com.norteksoft.product.api.entity.User> getUsersByCompanyCode(String companyCode){ List<com.norteksoft.product.api.entity.User> userList=new ArrayList<com.norteksoft.product.api.entity.User>(); if(StringUtils.isNotEmpty(companyCode)){ Company company=companyManager.getCompanyByCode(companyCode); if(company!=null){ Object obj=MemCachedUtils.get(USERS_MEMCACHE_KEY+companyCode); if(obj!=null){ List<com.norteksoft.product.api.entity.User> users=(List<com.norteksoft.product.api.entity.User>)obj; for(com.norteksoft.product.api.entity.User u:users){ if(u.getSubCompanyId()==null){ userList.add(u); } } } }else{ Department branch=departmentManager.getBranchDepartmentByCode(companyCode); Object obj=MemCachedUtils.get(USERS_MEMCACHE_KEY+branch.getCompany().getCode()); if(obj!=null){ List<com.norteksoft.product.api.entity.User> users=(List<com.norteksoft.product.api.entity.User>)obj; for(com.norteksoft.product.api.entity.User u:users){ if(branch.getId().equals(u.getSubCompanyId())){ userList.add(u); } } } } } return userList; } public void getSubDepartment(Long departmentId, List<Department> subDepartmentList) { List<Department> subDeptments=departmentManager.getSubDeptments(departmentId); for(Department d:subDeptments){ subDepartmentList.add(d); getSubDepartment(d.getId(), subDepartmentList); } } public void getSubBranchs(Long departmentId, List<Long> subBranchSet) { List<Department> subDeptments=departmentManager.getSubBranchs(departmentId); for(Department d:subDeptments){ subBranchSet.add(d.getId()); getSubBranchs(d.getId(), subBranchSet); } } /* * */ public void addNoDepartmentToUser(Long id) { User user = userInfoDao.get(id).getUser(); DepartmentUser departmentToUsers = null; Long oldDid=user.getSubCompanyId(); //判断在集团下还是分支机构下 if(oldDid!=null){ String hql="from DepartmentUser d where d.department.id=? and d.user.id=? and d.subCompanyId=? and d.companyId=?"; //如果该关系存在则跳过 if(departmentToUserDao.countHqlResult(hql, oldDid,id,oldDid,ContextUtils.getCompanyId())>0){ return; } Department department=departmentManager.getDepartment(oldDid); if(department.getSubCompanyId()!=null){ Department department2=departmentDao.get(department.getSubCompanyId()); Department dept = new Department(); User u = new User(); u.setId(user.getId()); dept.setId(department2.getId()); departmentToUsers = new DepartmentUser(); departmentToUsers.setDepartment(dept); departmentToUsers.setUser(u); departmentToUsers.setCompanyId(getCompanyId()); departmentToUsers.setSubCompanyId(dept.getId()); user.setSubCompanyId(oldDid); departmentToUserDao.save(departmentToUsers); }else{ user.setSubCompanyId(null); } } } @SuppressWarnings("unchecked") public List<User> getUsersBySubCompany(Long deptId) { String hql="from User d where d.subCompanyId=? and d.companyId=?"; List<User> users=new ArrayList<User>(); if(deptId!=null){ users=userDao.find(hql, deptId,ContextUtils.getCompanyId()); } return users; } private static final String LINK_CHAR="~~"; /** * @param username其格式为loginName~~companyCode,由登录界面传过来的 * @return */ public User getUserByLoginNameAndBranchCode(String username){ String companyCode = ""; String[] names = getUserInfo(username); String loginName = names[0]; //公司编码或分支机构编码 companyCode = names[1]; User user = null; if(StringUtils.isNotEmpty(companyCode)){//如果公司编码或分支机构编码不为空(登录界面是带@的页面) Company company = getCompanyByCode(companyCode); if(company==null){ Department deptBranch = getBranchDepartmentByCode(companyCode); if(deptBranch!=null){ if(deptBranch.getCompany()!=null){ user = getUserInBranchDepartment(loginName, deptBranch.getCompany().getId(), deptBranch.getId()); } } }else{ user = getUserInCompany(loginName,company.getId()); } }else{//登录界面是没有@的页面 user = getUserByLoginName(loginName); } return user; } //前台传过来的登录名是否带有公司或分支机构编码,并获得用户和公司、分支机构信息 private String[] getUserInfo(String username){ String[] names = new String[2]; if(username.indexOf(LINK_CHAR)>=0){ names = username.split(LINK_CHAR);//loginName==companyCode return names; }else{ names[0] = username; names[1] = ""; } return names; } private Company getCompanyByCode(String code){ return companyManager.getCompanyByCode(code); } private Department getBranchDepartmentByCode(String code){ return departmentManager.getBranchDepartmentByCode(code); } /** * 是否存在于loginName同登录名的用户 * @param loginName * @return true表示有同登录名的,false表示没有同登录名的 */ @SuppressWarnings("unchecked") public boolean hasSameLoginNameUser(String loginName){ List<User> users = userDao.find("from User user where user.loginName=? and user.deleted=? and user.companyId=?", loginName,false,ContextUtils.getCompanyId()); if(users.size()>1)return true; return false; } }