package com.qxueyou.scc.sys.service.impl; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import com.qxueyou.scc.admin.classes.model.ClsClass; import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.service.impl.CommonAppService; import com.qxueyou.scc.base.util.ClientUtils; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.TraceUtils; import com.qxueyou.scc.sys.model.SysButton; import com.qxueyou.scc.sys.model.SysMenu; import com.qxueyou.scc.sys.model.SysPrivilege; import com.qxueyou.scc.sys.service.IPrivilegeService; import com.qxueyou.scc.user.model.User; import com.qxueyou.scc.user.model.UserRole; /** * 系统权限服务 * * @author 德虎 * */ @Service public class PriviledgeService extends CommonAppService implements IPrivilegeService { /* * (non-Javadoc) * * @see * com.iqtogether.qxueyou.sys.service.IPrivilegeService#getPrivilegesMenus(com. * iqtogether.qxueyou.user.model.User) */ @Override public List getPrivilegesMenus(String userId) { // 获取当前用户角色ID, 过滤当前角色 String currRoleId = null; Short currOrgType = null; if (null != ClientUtils.getUserInfo() && StringUtils.isNotBlank(ClientUtils.getOrgId())) { currRoleId = ClientUtils.getCurrentRoleId(); } List firstLevelMenus = new ArrayList(5); // 获取该用户当前角色的所有菜单权限 List allMenus = initAllMenus(currRoleId); // 过滤出第一层及第二层菜单权限 initFirstSecondMenu(allMenus, firstLevelMenus, currOrgType); // 排序 sortMenuList(firstLevelMenus); return firstLevelMenus; } private List initAllMenus(String currRoleId) { List allMenus = new ArrayList(10); String hql = "select m from SysPrivilege s,SysMenu m where s.deleteFlag is false and m.deleteFlag is false " + " and s.menuId = m.menuId and s.roleId = ? "; allMenus.addAll(this.find(hql, CollectionUtils.newList(currRoleId), SysMenu.class)); // 如果是超管,菜单 if ("6".equals(currRoleId) && allMenus.isEmpty()) { UserRole role = this.read(UserRole.class, "6"); allMenus = role.getMenus(); } return allMenus; } private void initFirstSecondMenu(List allMenus, List firstLevelMenus, Short currOrgType) { List childMenus = null; List secondMenus = null; for (SysMenu menu : allMenus) { if (menu.getLevel() == 1 && !firstLevelMenus.contains(menu)) { childMenus = menu.getChildren(); secondMenus = new ArrayList(5); initSecondMenu(allMenus, secondMenus, childMenus, currOrgType); if (!secondMenus.isEmpty()) { // 排序 sortMenuList(secondMenus); menu.setChildren(secondMenus); firstLevelMenus.add(menu); } } } } private void initSecondMenu(List allMenus, List secondMenus, List childMenus, Short currOrgType) { for (SysMenu m : childMenus) { if (m.getDeleteFlag()) { continue; } if (allMenus.contains(m)) { // 非高校过滤掉 if (currOrgType == null) { continue; } secondMenus.add(m); } } } /** * 获取已授权按钮列表,默认已经编辑过按钮权限的用户 * * @param name * @return */ public Map> getPrivilegesButtons(String orgId, String topOrgId, String roleId) { String hql = "select b from SysButtonPrivilege s, SysButton b where " + " s.deleteFlag is false and b.deleteFlag is false and s.buttonId = b.buttonId " + " and s.topOrgId = ? and s.roleId = ? "; List lstButtons = this.find(hql, CollectionUtils.newList(topOrgId, roleId), SysButton.class); Map> resultMap = new HashMap>(); List lsts; for (SysButton button : lstButtons) { if (!resultMap.containsKey(button.getModule())) { lsts = new ArrayList(5); lsts.add(button); resultMap.put(button.getModule(), lsts); continue; } lsts = resultMap.get(button.getModule()); lsts.add(button); resultMap.put(button.getModule(), lsts); } return resultMap; } private void sortMenuList(List sysMenus) { Collections.sort(sysMenus, new Comparator() { public int compare(SysMenu menu1, SysMenu menu2) { Integer order1 = (Integer) menu1.getMenuOrder(); Integer order2 = (Integer) menu2.getMenuOrder(); // 升序 return order1.compareTo(order2); } }); } /* * (non-Javadoc) * * @see * com.iqtogether.qxueyou.sys.service.IPrivilegeService#getAdminClasses(java. * lang.String) */ @Override public List getChargerClasses(String userId, String orgId) { String hql = "select cls from ClsClass cls,OrgCharger charge " + "where cls.classChargerId = charge.orgChargerId " + "and charge.userId = ? " + "and charge.orgId = ? " + "and cls.deleteFlag is false order by cls.name asc"; return find(hql, CollectionUtils.newList(userId, ClientUtils.getOrgId()), ClsClass.class); } /* * (non-Javadoc) * * @see * com.iqtogether.qxueyou.sys.service.IPrivilegeService#getAdminLessons(java. * lang.String) */ @Override public List getTeacherClasses(String userId, String orgId) { String hql = "select distinct cls from SchClassSchedule lesson,OrgTeacher teacher , ClsClass cls " + "where lesson.teacherId = teacher.orgTeacherId " + "and lesson.classId = cls.classId " + "and teacher.userId= ? " + "and teacher.orgId= ? " + "and lesson.deleteFlag is false " + "and teacher.deleteFlag is false " + "and cls.deleteFlag is false "; return find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class); } /* * 获取讲师直播关联的class * */ @Override public List getTeacherLiveClasses(String userId, String orgId) { String hql = "select distinct cls from MediaVideoLive live,OrgTeacher teacher , ClsClass cls " + "where live.anchorId = teacher.orgTeacherId " + "and live.classId = cls.classId " + "and teacher.userId= ? " + "and teacher.orgId= ? " + "and live.deleteFlag is false " + "and teacher.deleteFlag is false " + "and cls.deleteFlag is false "; return find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class); } /** * 助理讲师班级列表 */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public List getAssisTeacherClasses(String userId, String orgId) { // 1、讲师助教 String hql = "select distinct cls from MediaVideoLive live,OrgAssistantTeacher teacher , ClsClass cls " + "where live.anchorId = teacher.orgTeacherId " + "and live.classId = cls.classId " + "and teacher.userId= ? " + "and teacher.orgId= ? " + "and live.deleteFlag is false " + "and teacher.deleteFlag is false " + "and cls.deleteFlag is false "; List teacherList = find(hql, CollectionUtils.newList(userId, orgId), ClsClass.class); // 2.班主任助教 String hql2 = "select distinct cls from OrgAssistantTeacher teacher , ClsClass cls " + "where teacher.orgTeacherId=cls.classChargerId " + "and teacher.classId = cls.classId " + "and teacher.userId= ? " + "and teacher.orgId= ? " + "and teacher.deleteFlag is false " + "and cls.deleteFlag is false "; List chargerList = find(hql2, CollectionUtils.newList(userId, orgId), ClsClass.class); teacherList.addAll(chargerList); // 去重 HashSet h = new HashSet(teacherList); teacherList.clear(); teacherList.addAll(h); return teacherList; } /** * 新增list * * @param privileges * @return */ public Result updatePrivileges(String[] arrMenuIds, String roleId) { List lstPrivileges = new ArrayList(arrMenuIds.length); SysPrivilege privilege; for (String menuId : arrMenuIds) { privilege = new SysPrivilege(); TraceUtils.setCreateTrace(privilege); privilege.setMenuId(menuId); privilege.setOrgId(ClientUtils.getOrgId()); privilege.setRoleId(roleId); lstPrivileges.add(privilege); } this.saveOrUpdateAll(lstPrivileges); return new Result(true); } /** * 删除list * * @param privileges * @return */ public Result deletePrivileges(String[] deleteMenuIds, String roleId) { // 修改为使用update // bulkUpdateInLoop("update SysPrivilege set deleteFlag = true where roleId = '" // + roleId + "' and menuId = ?", deleteMenuIds ); String hql = " from SysPrivilege where menuId in (:menuIds) and deleteFlag is false and roleId = :roleId "; Map argsMap = new HashMap(); argsMap.put("menuIds", deleteMenuIds); argsMap.put("roleId", roleId); List lstPrivileges = this.findByComplexHql(hql, argsMap, SysPrivilege.class); if (lstPrivileges.isEmpty()) { return new Result(true); } for (SysPrivilege privilege : lstPrivileges) { TraceUtils.setUpdateTrace(privilege); privilege.setDeleteFlag(true); } this.saveOrUpdateAll(lstPrivileges); return new Result(true); } @Override public Result getMenus(User user) { String hql = "select DISTINCT m.menuId as index ,m.name as title ,m.url as router , m.hover as hover , " + " m.icon as icon ,m.parentMenuId as parentMenuId ,m.menuOrder as menuOrder from SysMenu m , UserReRoleUser u ," + "SysPrivilege s where m.deleteFlag is false and u.deleteFlag is false and s.deleteFlag is false and " + "u.userId =:userId and u.roleId = s.roleId and s.menuId = m.menuId order by m.menuOrder "; List> menuLst = findListWithMapByHql(hql, CollectionUtils.newObjectMap("userId", user.getUserId())); System.out.println(menuLst); for (Map map : menuLst) { map.put("children", CollectionUtils.newList()); } String hqlRole = "select min(u.type) from UserRole u , UserReRoleUser r where u.deleteFlag is false and r.deleteFlag is false and r.userId =:userId and u.roleId =r.roleId"; String maxRoleTypeStr = findUniqueByHql(hqlRole, CollectionUtils.newObjectMap("userId", user.getUserId())); if (StringUtils.isBlank(maxRoleTypeStr)) { return new Result(false, "该用户没有权限,登录失败"); } Integer maxRoleType = Integer.valueOf(maxRoleTypeStr); return new Result(true, "success", CollectionUtils.newObjectMap("menuLst", menuLst, "userName", user.getName(), "userId", user.getUserId(), "imgPath", user.getImgPath(), "roleType", maxRoleType)); } }