package com.norteksoft.acs.service.organization; import java.util.ArrayList; import java.util.List; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.norteksoft.acs.base.orm.hibernate.SimpleHibernateTemplate; import com.norteksoft.acs.base.utils.log.LogUtilDao; import com.norteksoft.acs.entity.authorization.BusinessSystem; import com.norteksoft.acs.entity.authorization.Role; import com.norteksoft.acs.entity.authorization.RoleWorkgroup; 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.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; @SuppressWarnings("deprecation") @Service @Transactional public class WorkGroupManager { private SimpleHibernateTemplate<Workgroup, Long> workGroupDao; private SimpleHibernateTemplate<User,Long> userDao; private SimpleHibernateTemplate<UserInfo,Long> userInfoDao; private SimpleHibernateTemplate<WorkgroupUser,Long> workGroupToUserDao; private SimpleHibernateTemplate<Role,Long> roleDao; private SimpleHibernateTemplate<RoleWorkgroup,Long> role_wDao; private LogUtilDao logUtilDao; private static String hql = "from Workgroup w where w.company.id=? and w.deleted=? order by w.weight desc"; private static String DELETED = "deleted"; private static String COMPANYID = "companyId"; private static String WORKGROUPID = "workgroup.id"; private static String ACS = "acs"; private static final String HQL = "from UserInfo u where u.user.id = ? "; @Autowired private AcsUtils acsUtils; public Long getSystemIdByCode(String code) { return acsUtils.getSystemsByCode(code).getId(); } @Autowired public void setSessionFactory(SessionFactory sessionFactory) { workGroupDao = new SimpleHibernateTemplate<Workgroup, Long>(sessionFactory, Workgroup.class); userDao = new SimpleHibernateTemplate<User, Long>(sessionFactory, User.class); userInfoDao = new SimpleHibernateTemplate<UserInfo, Long>(sessionFactory, UserInfo.class); workGroupToUserDao = new SimpleHibernateTemplate<WorkgroupUser, Long>(sessionFactory, WorkgroupUser.class); roleDao = new SimpleHibernateTemplate<Role, Long>(sessionFactory, Role.class); role_wDao = new SimpleHibernateTemplate<RoleWorkgroup, Long>(sessionFactory, RoleWorkgroup.class); logUtilDao = new LogUtilDao(sessionFactory); } /** * 验证工作组名称唯一性 */ public boolean checkWorkName(String workGroupName,Long id){ String hql = "FROM Workgroup d WHERE d.name=? AND d.id<>? AND d.company.id=? AND d.deleted=0"; Object obj = workGroupDao.findUnique(hql, workGroupName,id,ContextUtils.getCompanyId()); if(obj == null){ return false; } return true; } /** * 验证工作组名称唯一性 */ public boolean checkWorkName(String workGroupName){ String hql = "FROM Workgroup d WHERE d.name=? AND d.company.id=? AND d.deleted=0"; Object obj = workGroupDao.findUnique(hql, workGroupName,ContextUtils.getCompanyId()); if(obj == null){ return false; } return true; } /** * 验证工作组编号唯一性 * liudongxia */ public boolean checkWorkCode(String workGroupCode,Long id){ String hql = "FROM Workgroup d WHERE d.code=? AND d.id<>? AND d.company.id=? AND d.deleted=0"; Object obj = workGroupDao.findUnique(hql, workGroupCode,id,ContextUtils.getCompanyId()); if(obj == null){ return false; } return true; } /** * 验证工作组编号唯一性 * liudongxia */ public boolean checkWorkCode(String workGroupCode){ String hql = "FROM Workgroup d WHERE d.code=? AND d.company.id=? AND d.deleted=0"; Object obj = workGroupDao.findUnique(hql, workGroupCode,ContextUtils.getCompanyId()); if(obj == null){ return false; } return true; } public LogUtilDao getLogUtilDao() { return logUtilDao; } public void setLogUtilDao(LogUtilDao logUtilDao) { this.logUtilDao = logUtilDao; } private Long companyId; public Long getCompanyId() { if(companyId == null){ return ContextUtils.getCompanyId(); }else return companyId; } public void setCompanyId(Long companyId) { this.companyId = companyId; } /** * 查询所有工作组信息 */ @Transactional(readOnly = true) public List<Workgroup> getAllWorkGroup(){ return workGroupDao.findByCriteria(Restrictions.eq("company.id", getCompanyId()),Restrictions.eq(DELETED,false)); } /** * 获取单条工作组信息 */ @Transactional(readOnly = true) public Workgroup getWorkGroup(Long id) { return workGroupDao.get(id); } /** * 工作组添加用户时查询所有用户 */ public Page<User> workGroupToUsers(Page<User> userPage, Long workgroupId){ userDao.searchPageByHql(userPage, "select ui.user from UserInfo ui where ui.companyId=? and ui.deleted=false and (ui.user.id not in " + "(select u.id from User u inner join u.workgroupUsers wu where u.deleted=false and wu.deleted=false and wu.workgroup.id=?))", getCompanyId(), workgroupId); return userPage; } /** * 公司添加工作组(保存公司与工作组的关系) */ public List<Workgroup> saveWorkGroup(List<Long> workGroupIds){ return workGroupDao.findByCriteria(Restrictions.in("id", workGroupIds)); } public Page<User> workGroupToUsers(Page<User> userPage){ return userDao.findAll(userPage); } /** * * 查询工作组己添加的用户 */ public List<Long> getUserIds(Long workGroupId) throws Exception { List<Long> userIds = new ArrayList<Long>(); List<WorkgroupUser> workGroupToUsers = workGroupToUserDao.findByCriteria(Restrictions.eq(WORKGROUPID, workGroupId), Restrictions.eq("companyId", ContextUtils.getCompanyId()), Restrictions.eq(DELETED,false) ); for (WorkgroupUser workGroupToUser : workGroupToUsers) { userIds.add(workGroupToUser.getUser().getUserInfo().getId()); } return userIds; } /** * 查询工作组要移除的用户 */ public Page<User> workGroupToRomoveUserList(Page<User> page,User user,Long workGroupId){ String hql = "select userInfo.user from UserInfo userInfo join userInfo.user.workgroupUsers wu where wu.workgroup.id=? and wu.companyId=? and userInfo.deleted=? and wu.deleted=?"; if(user!=null){ String userName = user.getLoginName(); if(userName!=null&&!"".equals(userName)){ StringBuilder hqL = new StringBuilder(hql); hqL.append(" and userInfo.user.loginName like ? "); return userDao.searchPageByHql(page, hqL.toString(), workGroupId,getCompanyId(),false,false,"%"+userName+"%"); } } return userDao.searchPageByHql(page, hql, workGroupId,getCompanyId(),false,false); } /** * 工作组添加人员 */ public void workGroupToUser(Long workGroupId, List<Long> userIds,Integer isAdd) { if(userIds == null){ return; } //根据工作组ID查询工作组信息 Workgroup workGroup = workGroupDao.get(workGroupId); StringBuilder userName = new StringBuilder(); /** * 添加人员 */ if (isAdd == 0) { WorkgroupUser workGroupToUser; //User user = null; UserInfo userInfo =null; for (Long userId : userIds) { workGroupToUser = new WorkgroupUser(); userInfo = userInfoDao.get(userId); workGroupToUser.setUser(userInfo.getUser()); workGroupToUser.setWorkgroup(workGroup); workGroupToUser.setCompanyId(getCompanyId()); workGroupToUserDao.save(workGroupToUser); userName.append(workGroupToUser.getUser().getLoginName()); userName.append(","); } userName.deleteCharAt(userName.length()-1); } /** *移除人员 */ if(isAdd==1){ List<UserInfo> uif = userInfoDao.findByCriteria(Restrictions.in("id", userIds)); List<Long> ids = new ArrayList<Long>(); for (UserInfo userInfo : uif) { ids.add(userInfo.getUser().getId()); } List<WorkgroupUser> list = workGroupToUserDao.findByCriteria(Restrictions.in("user.id", ids), Restrictions.eq(WORKGROUPID, workGroupId), Restrictions.eq(COMPANYID, getCompanyId()), Restrictions.eq(DELETED, false) ); for (WorkgroupUser workGroupToUser : list) { workGroupToUser.setDeleted(true); workGroupToUserDao.save(workGroupToUser); userName.append(workGroupToUser.getUser().getLoginName()); userName.append(","); } userName.deleteCharAt(userName.length()-1); } } /** * 分页查询所有工作组信息 */ @Transactional(readOnly = true) public Page<Workgroup> getAllWorkGroup(Page<Workgroup> page) { workGroupDao.findPage(page, hql, getCompanyId(), false); return page; } /** * 保存工作组信息 */ public void saveWorkGroup(Workgroup workGroup){ workGroupDao.save(workGroup); } /** * 删除工作组信息 */ public void deleteWorkGroup(Long id) { Workgroup workGroup = workGroupDao.get(id); workGroup.setDeleted(true); workGroupDao.save(workGroup); } /** * 按条件检索工作组 */ @Transactional(readOnly = true) public Page<Workgroup> getSearchWorkGroup(Page<Workgroup> page,Workgroup workGroup,boolean deleted) { StringBuilder workGroupHql = new StringBuilder(hql); if (workGroup != null) { String workGroupCode = workGroup.getCode(); String workGroupName = workGroup.getName(); if (!"".equals(workGroupCode) && !"".equals(workGroupName)) { workGroupHql.append(" and w.code like ?"); workGroupHql.append(" and w.name like ?"); return workGroupDao.find(page, workGroupHql.toString(), getCompanyId(), false, "%" + workGroupCode+ "%", "%" + workGroupName + "%"); } if (!"".equals(workGroupCode)) { workGroupHql.append(" and w.code like ?"); return workGroupDao.find(page, workGroupHql.toString(), getCompanyId(), false, "%" + workGroupCode+ "%"); } if (!"".equals(workGroupName)) { workGroupHql.append(" and w.name like ?"); return workGroupDao.find(page, workGroupHql.toString(), getCompanyId(), false, "%" + workGroupName + "%"); } } return workGroupDao.find(page, hql, getCompanyId(),false); } /** * 工作组添加角色 */ public Page<Role> workGroupToRoleList(Page<Role> page,Role entity){ if(entity!=null){ String roleName = entity.getName(); if(roleName!=null&&!"".equals(roleName)){ return roleDao.findByCriteria(page, Restrictions.like("name", "%" + roleName + "%"), Restrictions.eq(DELETED, false)); } } return roleDao.findByCriteria(page ,Restrictions.eq(DELETED, false)); } /** * 工作组移除角色 */ public Page<Role> workGroupRomoveRoleList(Page<Role> page,Role entity,Long workId){ String hql = "select role from Role role join role.role_WorkGroup r_w where r_w.workGroup.id=? and r_w.companyId=? and role.deleted=? and r_w.deleted=? "; if(entity!=null){ String roleName = entity.getName(); if(roleName!=null&&!"".equals(roleName)){ StringBuilder hqL = new StringBuilder(hql); hqL.append(" and role.name like ?"); return roleDao.find(page,hqL.toString(),workId,getCompanyId(),false,false ,"%" + roleName + "%"); } } return roleDao.find(page ,hql,workId,getCompanyId(),false,false); } /** * 工作组移除角色 * @param workGroupId * @return */ public List<BusinessSystem> workGroupRomoveRoleList(Long workId){ /*//租户购买的订单的有效期大于当前日期 String hql = "select p.systemId from Product p join p.subscibers s join s.tenant t" + " where t.id=? and s.validDate > ? and s.deleted = ?"; List<Long> idList = businessDao.find(hql, getCompanyId(), new Date(), false); List<BusinessSystem> list = businessDao.findByCriteria(Restrictions.in("id", idList), Restrictions.eq(DELETED, false)); hql = "select from BusinessSystem sys join sys.role join Role_WorkGroup work_r " + "where work_r.workGroup.id=? and work_r.deleted=? and sys.deleted=? and work_r.companyId=?";*/ // return businessDao.find(hql,workId,false,false,getCompanyId()); return null; } public List<Long> getRoleIds(Long workGroupId){ List<Long> roleIds = new ArrayList<Long>(); List<RoleWorkgroup> role_WorkGroups = role_wDao.findByCriteria(Restrictions.eq(WORKGROUPID, workGroupId), Restrictions.eq(COMPANYID, getCompanyId()), Restrictions.eq(DELETED, false)); for (RoleWorkgroup role_WorkGroup : role_WorkGroups) { roleIds.add(role_WorkGroup.getRole().getId()); } return roleIds; } public List<Role> getRole(Long workGroupId){ List<Role> roleIds = new ArrayList<Role>(); List<RoleWorkgroup> role_WorkGroups = role_wDao.findByCriteria(Restrictions.eq(WORKGROUPID, workGroupId), Restrictions.eq("companyId", getCompanyId()), Restrictions.eq(DELETED, false)); for (RoleWorkgroup role_WorkGroup : role_WorkGroups) { roleIds.add(role_WorkGroup.getRole()); } return roleIds; } public void workGroupAddRole(Long workGroupId, List<Long> roleIds,Integer isAdd){ Workgroup workGroup = getWorkGroup(workGroupId); StringBuilder roleName = new StringBuilder(); if(isAdd==0){ RoleWorkgroup role_WorkGroup; Role role =null; for (Long roId : roleIds) { role_WorkGroup = new RoleWorkgroup(); role = roleDao.get(roId); role_WorkGroup.setRole(roleDao.get(roId)); role_WorkGroup.setWorkgroup(workGroup); role_WorkGroup.setCompanyId(getCompanyId()); role_wDao.save(role_WorkGroup); roleName.append(role.getName()); roleName.append(","); } roleName.deleteCharAt(roleName.length()-1); } if(isAdd==1){ List<RoleWorkgroup> list = role_wDao.findByCriteria(Restrictions.in("role.id", roleIds), Restrictions.eq(WORKGROUPID, workGroupId), Restrictions.eq(COMPANYID, getCompanyId()), Restrictions.eq(DELETED, false)); for (RoleWorkgroup role_work : list) { role_work.setDeleted(true); role_wDao.save(role_work); roleName.append(role_work.getRole().getName()); roleName.append(","); } roleName.deleteCharAt(roleName.length()-1); } } public List<Workgroup> queryWorkGroupByCompany(Long companyId){ return workGroupDao.findList( "from Workgroup w where w.company.id=? and w.deleted=? order by w.weight desc", companyId, false); } @SuppressWarnings("unchecked") public 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); } public SimpleHibernateTemplate<Workgroup, Long> getWorkGroupDao() { return workGroupDao; } public SimpleHibernateTemplate<Role, Long> getRoleDao() { return roleDao; } public SimpleHibernateTemplate<RoleWorkgroup, Long> getRole_wDao() { return role_wDao; } public SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.User, Long> getUserDao() { return userDao; } public SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.WorkgroupUser, Long> getWorkGroupToUserDao() { return workGroupToUserDao; } public void setUserInfoDao( SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.UserInfo, Long> userInfoDao) { this.userInfoDao = userInfoDao; } public SimpleHibernateTemplate<com.norteksoft.acs.entity.organization.UserInfo, Long> getUserInfoDao() { return userInfoDao; } /** * 保存工作组添加用户 * userIds:当是全公司时其值为[0],否则是人员id集合 * @return * @throws Exception */ public void workgroupAddUser(Long workGroupId, List<Long> userIds, int isAdd) { if(userIds==null){ return; } Workgroup workgroup = workGroupDao.get(workGroupId); /** * 添加人员 */ if (isAdd == 0) { for (Long userId : userIds) { if(userId.equals(0L)){//全公司时 List<com.norteksoft.product.api.entity.User> users = ApiFactory.getAcsService().getAllUsersByCompany(ContextUtils.getCompanyId()); for(com.norteksoft.product.api.entity.User u:users){ workgroupAddSingleUser(u.getId(),workgroup); } }else{ workgroupAddSingleUser(userId,workgroup); } } } /** *移除人员 */ if (isAdd == 1) { List<User> uif = userDao.findByCriteria(Restrictions.in( "id", userIds)); List<Long> ids = new ArrayList<Long>(); for (User user : uif) { ids.add(user.getId()); } List<WorkgroupUser> list = workGroupToUserDao.findByCriteria( Restrictions.in("user.id", ids), Restrictions.eq( WORKGROUPID, workGroupId), Restrictions.eq( COMPANYID, getCompanyId()), Restrictions.eq( DELETED, false)); for (WorkgroupUser workgroupUser : list) { workgroupUser.setDeleted(true); workGroupToUserDao.save(workgroupUser); } } } private void workgroupAddSingleUser(Long userId,Workgroup workgroup){ WorkgroupUser workgroupUser; User user = null; List<WorkgroupUser> wu=getWorkgroupUserByuserId(userId,workgroup.getId()); if(wu.size()==0){ workgroupUser = new WorkgroupUser(); user = userDao.get(userId); workgroupUser.setUser(user); workgroupUser.setWorkgroup(workgroup); workgroupUser.setCompanyId(getCompanyId()); workGroupToUserDao.save(workgroupUser); }else{ WorkgroupUser w=wu.get(0); w.setDeleted(false); workGroupToUserDao.save(w); } } /** *根据userId得到WorkgroupUser */ @SuppressWarnings("unchecked") public List<WorkgroupUser> getWorkgroupUserByuserId(Long userId,Long workgroupId){ String hql="from WorkgroupUser d where d.user.id=? and d.workgroup.id=?"; return workGroupToUserDao.find(hql, userId,workgroupId); } }