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)); // Èç¹ûÊdz¬¹Ü£¬²Ëµ¥ 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 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)); } }