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<SysMenu> getPrivilegesMenus(String userId) {
|
|
// 获取当前用户角色ID, 过滤当前角色
|
String currRoleId = null;
|
Short currOrgType = null;
|
if (null != ClientUtils.getUserInfo() && StringUtils.isNotBlank(ClientUtils.getOrgId())) {
|
currRoleId = ClientUtils.getCurrentRoleId();
|
}
|
|
List<SysMenu> firstLevelMenus = new ArrayList<SysMenu>(5);
|
|
// 获取该用户当前角色的所有菜单权限
|
List<SysMenu> allMenus = initAllMenus(currRoleId);
|
|
// 过滤出第一层及第二层菜单权限
|
initFirstSecondMenu(allMenus, firstLevelMenus, currOrgType);
|
|
// 排序
|
sortMenuList(firstLevelMenus);
|
|
return firstLevelMenus;
|
}
|
|
private List<SysMenu> initAllMenus(String currRoleId) {
|
|
List<SysMenu> allMenus = new ArrayList<SysMenu>(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<SysMenu> allMenus, List<SysMenu> firstLevelMenus, Short currOrgType) {
|
|
List<SysMenu> childMenus = null;
|
List<SysMenu> secondMenus = null;
|
|
for (SysMenu menu : allMenus) {
|
|
if (menu.getLevel() == 1 && !firstLevelMenus.contains(menu)) {
|
childMenus = menu.getChildren();
|
secondMenus = new ArrayList<SysMenu>(5);
|
|
initSecondMenu(allMenus, secondMenus, childMenus, currOrgType);
|
|
if (!secondMenus.isEmpty()) {
|
// 排序
|
sortMenuList(secondMenus);
|
menu.setChildren(secondMenus);
|
firstLevelMenus.add(menu);
|
}
|
}
|
}
|
|
}
|
|
private void initSecondMenu(List<SysMenu> allMenus, List<SysMenu> secondMenus, List<SysMenu> 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<String, List<SysButton>> 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<SysButton> lstButtons = this.find(hql, CollectionUtils.newList(topOrgId, roleId), SysButton.class);
|
|
Map<String, List<SysButton>> resultMap = new HashMap<String, List<SysButton>>();
|
List<SysButton> lsts;
|
|
for (SysButton button : lstButtons) {
|
|
if (!resultMap.containsKey(button.getModule())) {
|
lsts = new ArrayList<SysButton>(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<SysMenu> sysMenus) {
|
Collections.sort(sysMenus, new Comparator<SysMenu>() {
|
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<ClsClass> 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<ClsClass> 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<ClsClass> 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<ClsClass> 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<ClsClass> 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<ClsClass> 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<SysPrivilege> lstPrivileges = new ArrayList<SysPrivilege>(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<String, Object> argsMap = new HashMap<String, Object>();
|
argsMap.put("menuIds", deleteMenuIds);
|
argsMap.put("roleId", roleId);
|
List<SysPrivilege> 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<Map<String, Object>> menuLst = findListWithMapByHql(hql,
|
CollectionUtils.newObjectMap("userId", user.getUserId()));
|
System.out.println(menuLst);
|
for (Map<String, Object> 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));
|
}
|
}
|