Pārlūkot izejas kodu

新增菜单管理api

wangliang 3 gadi atpakaļ
vecāks
revīzija
9bc091ae48
16 mainītis faili ar 486 papildinājumiem un 291 dzēšanām
  1. 31 0
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TSchoolPrivilegeParam.java
  2. 0 16
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSchoolPrivilegeService.java
  3. 3 6
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java
  4. 0 20
      distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSchoolPrivilegeServiceImpl.java
  5. 162 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/MenuCustomController.java
  6. 0 95
      distributed-print/src/main/java/com/qmth/distributed/print/api/MenuUpdateController.java
  7. 2 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  8. 13 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TSchoolPrivilege.java
  9. 24 16
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysPrivilegeMapper.java
  10. 2 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/TSchoolPrivilegeMapper.java
  11. 27 12
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java
  12. 25 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TSchoolPrivilegeService.java
  13. 113 77
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java
  14. 35 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TSchoolPrivilegeServiceImpl.java
  15. 48 44
      teachcloud-common/src/main/resources/mapper/SysPrivilegeMapper.xml
  16. 1 1
      teachcloud-common/src/main/resources/mapper/TSchoolPrivilegeMapper.xml

+ 31 - 0
distributed-print-business/src/main/java/com/qmth/distributed/print/business/bean/params/TSchoolPrivilegeParam.java

@@ -0,0 +1,31 @@
+package com.qmth.distributed.print.business.bean.params;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.entity.TSchoolPrivilege;
+
+import javax.validation.constraints.NotEmpty;
+
+/**
+ * @Description: 学校自定义菜单 param
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/10/30
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class TSchoolPrivilegeParam extends TSchoolPrivilege {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotEmpty(message = "权限集合不能为空")
+    private Long[] privilegeIds;
+
+    public Long[] getPrivilegeIds() {
+        return privilegeIds;
+    }
+
+    public void setPrivilegeIds(Long[] privilegeIds) {
+        this.privilegeIds = privilegeIds;
+    }
+}

+ 0 - 16
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/TSchoolPrivilegeService.java

@@ -1,16 +0,0 @@
-package com.qmth.distributed.print.business.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.qmth.distributed.print.business.entity.TSchoolPrivilege;
-
-/**
- * <p>
- * 学校菜单权限表 服务类
- * </p>
- *
- * @author wangliang
- * @since 2021-10-28
- */
-public interface TSchoolPrivilegeService extends IService<TSchoolPrivilege> {
-
-}

+ 3 - 6
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/ExamDetailCourseServiceImpl.java

@@ -10,15 +10,12 @@ import com.qmth.distributed.print.business.mapper.ExamDetailCourseMapper;
 import com.qmth.distributed.print.business.service.ExamDetailCourseService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.BasicCourse;
-import com.qmth.teachcloud.common.enums.TaskStatusEnum;
-import com.qmth.teachcloud.common.util.ConvertUtil;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -34,8 +31,8 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
     @Transactional(rollbackFor = Exception.class)
     @Override
     public double calculatePackagesByDetailId(Long examDetailId) {
-        System.out.println(this.count(new QueryWrapper<ExamDetailCourse>().lambda().eq(ExamDetailCourse::getExamDetailId,examDetailId)));
-        return this.count(new QueryWrapper<ExamDetailCourse>().lambda().eq(ExamDetailCourse::getExamDetailId,examDetailId));
+        System.out.println(this.count(new QueryWrapper<ExamDetailCourse>().lambda().eq(ExamDetailCourse::getExamDetailId, examDetailId)));
+        return this.count(new QueryWrapper<ExamDetailCourse>().lambda().eq(ExamDetailCourse::getExamDetailId, examDetailId));
     }
 
     @Override
@@ -64,7 +61,7 @@ public class ExamDetailCourseServiceImpl extends ServiceImpl<ExamDetailCourseMap
 
     @Override
     public List<String> listPaperNumberByPrintPlanId(String param, List<Long> printPlanIdList, Set<Long> orgIds) {
-        return this.baseMapper.listPaperNumberByPrintPlanId(SystemConstant.translateSpecificSign(param), printPlanIdList,orgIds);
+        return this.baseMapper.listPaperNumberByPrintPlanId(SystemConstant.translateSpecificSign(param), printPlanIdList, orgIds);
     }
 
     @Override

+ 0 - 20
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/TSchoolPrivilegeServiceImpl.java

@@ -1,20 +0,0 @@
-package com.qmth.distributed.print.business.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.qmth.distributed.print.business.entity.TSchoolPrivilege;
-import com.qmth.distributed.print.business.mapper.TSchoolPrivilegeMapper;
-import com.qmth.distributed.print.business.service.TSchoolPrivilegeService;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 学校菜单权限表 服务实现类
- * </p>
- *
- * @author wangliang
- * @since 2021-10-28
- */
-@Service
-public class TSchoolPrivilegeServiceImpl extends ServiceImpl<TSchoolPrivilegeMapper, TSchoolPrivilege> implements TSchoolPrivilegeService {
-
-}

+ 162 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/MenuCustomController.java

@@ -0,0 +1,162 @@
+package com.qmth.distributed.print.api;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.distributed.print.business.bean.params.TSchoolPrivilegeParam;
+import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
+import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.enums.PrivilegeEnum;
+import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 菜单权限修改
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/10/29
+ */
+@Api(tags = "菜单权限修改Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.menu}")
+//@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
+public class MenuCustomController {
+
+    @Resource
+    SysPrivilegeService sysPrivilegeService;
+
+    @Resource
+    TSchoolPrivilegeService tSchoolPrivilegeService;
+
+    @Resource
+    SysRolePrivilegeService sysRolePrivilegeService;
+
+    @Resource
+    SysRoleService sysRoleService;
+
+    @Resource
+    CommonCacheService commonCacheService;
+
+    @Resource
+    SysUserRoleService sysUserRoleService;
+
+    @Resource
+    TeachcloudCommonService commonService;
+
+    @ApiOperation(value = "查询自定义菜单权限")
+    @ApiResponses({@ApiResponse(code = 200, message = "菜单权限信息", response = SysPrivilege.class)})
+    @RequestMapping(value = "/custom/list", method = RequestMethod.POST)
+    public Result rolePrivilegeCountSync() {
+        QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
+        sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getEnable, true)
+                .eq(SysPrivilege::getDisplay, true)
+                .eq(SysPrivilege::getDefaultAuth, false)
+                .notIn(SysPrivilege::getUrl, Arrays.asList(SystemConstant.MENU_MANAGE, SystemConstant.CUSTOM_MENU));
+        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
+        List<PrivilegeDto> privilegeDtoList = null;
+        if (Objects.nonNull(sysPrivilegeList) && sysPrivilegeList.size() > 0) {
+            Set<Long> privilegeIds = new HashSet<>();
+            Map<Long, SysPrivilege> sysPrivilegeMap = new HashMap<>();
+            for (SysPrivilege s : sysPrivilegeList) {
+                if (!Objects.equals(s.getType(), PrivilegeEnum.MENU)) {
+                    privilegeIds.add(s.getId());
+                }
+                sysPrivilegeMap.put(s.getId(), s);
+            }
+            for (Long l : privilegeIds) {
+                List<SysPrivilege> sysPrivileges = sysPrivilegeService.findByConnectByParentId(l);
+                for (SysPrivilege s : sysPrivileges) {
+                    sysPrivilegeMap.put(s.getId(), s);
+                }
+            }
+            privilegeDtoList = (List<PrivilegeDto>) sysPrivilegeService.getMenuTreeCommon(sysPrivilegeMap.values());
+        }
+        return ResultUtil.ok(privilegeDtoList);
+    }
+
+    @ApiOperation(value = "学校新增/修改自定义菜单权限")
+    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+    @RequestMapping(value = "/custom/save", method = RequestMethod.POST)
+    @Transactional
+    public Result getRolePrivileges(@Valid @RequestBody TSchoolPrivilegeParam tSchoolPrivilegeParam, BindingResult bindingResult) throws NoSuchAlgorithmException {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        Set<Long> roleSetIds = null;
+        QueryWrapper<TSchoolPrivilege> tSchoolPrivilegeQueryWrapper = new QueryWrapper<>();
+        tSchoolPrivilegeQueryWrapper.lambda().eq(TSchoolPrivilege::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
+        List<TSchoolPrivilege> tSchoolPrivileges = tSchoolPrivilegeService.list(tSchoolPrivilegeQueryWrapper);
+        if (Objects.nonNull(tSchoolPrivileges) && tSchoolPrivileges.size() > 0) {//编辑
+            Set<Long> changePrivilegeSetIds = tSchoolPrivileges.stream().filter(s -> !Arrays.asList(tSchoolPrivilegeParam.getPrivilegeIds()).contains(s.getPrivilegeId()))
+                    .collect(Collectors.toList())
+                    .stream().map(s -> s.getPrivilegeId())
+                    .collect(Collectors.toSet());
+            //数据发生改变
+            if (changePrivilegeSetIds.size() > 0) {
+                List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.listByIds(changePrivilegeSetIds);
+                sysPrivilegeList = sysPrivilegeList.stream().filter(s -> !Objects.equals(s.getType(), PrivilegeEnum.MENU)).collect(Collectors.toList());
+                changePrivilegeSetIds = sysPrivilegeList.stream().map(s -> s.getId()).collect(Collectors.toSet());
+
+                if (changePrivilegeSetIds.size() > 0) {
+                    //查询该菜单下所有角色,删除该角色所发生改变的菜单数据
+                    QueryWrapper<SysRole> sysRoleQueryWrapper = new QueryWrapper<>();
+                    sysRoleQueryWrapper.lambda().eq(SysRole::getSchoolId, tSchoolPrivilegeParam.getSchoolId());
+                    List<SysRole> sysRoleList = sysRoleService.list(sysRoleQueryWrapper);
+
+                    QueryWrapper<SysRolePrivilege> sysRolePrivilegeQueryWrapper = new QueryWrapper<>();
+                    sysRolePrivilegeQueryWrapper.lambda()
+                            .in(SysRolePrivilege::getRoleId, sysRoleList.stream().map(s -> s.getId()).collect(Collectors.toList()))
+                            .in(SysRolePrivilege::getPrivilegeId, changePrivilegeSetIds);
+                    List<SysRolePrivilege> sysRolePrivilegeList = sysRolePrivilegeService.list(sysRolePrivilegeQueryWrapper);
+                    //仅删除绑定了该权限的角色用户缓存
+                    roleSetIds = sysRolePrivilegeList.stream().map(s -> s.getRoleId()).collect(Collectors.toSet());
+                    sysRolePrivilegeService.remove(sysRolePrivilegeQueryWrapper);
+                }
+            }
+            tSchoolPrivilegeService.remove(tSchoolPrivilegeQueryWrapper);
+        }
+        List<TSchoolPrivilege> tSchoolPrivilegeList = new ArrayList<>();
+        for (int i = 0; i < tSchoolPrivilegeParam.getPrivilegeIds().length; i++) {
+            tSchoolPrivilegeList.add(new TSchoolPrivilege(tSchoolPrivilegeParam.getSchoolId(), tSchoolPrivilegeParam.getPrivilegeIds()[i]));
+        }
+        tSchoolPrivilegeService.saveBatch(tSchoolPrivilegeList);
+
+        //清缓存
+        if (Objects.nonNull(roleSetIds)) {
+            for (Long l : roleSetIds) {
+                commonCacheService.updateRoleCache(l);
+                commonCacheService.updateRolePrivilegeCache(l);
+                //绑定该角色的用户都需要清除鉴权缓存
+                List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(l);
+                for (SysUserRole s : sysUserRoleList) {
+                    commonService.removeUserInfo(s.getUserId(), true);
+                }
+            }
+        }
+        return ResultUtil.ok(true);
+    }
+
+    @ApiOperation(value = "学校已绑定自定义菜单权限列表")
+    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
+    @RequestMapping(value = "/custom/get_school_custom_privileges", method = RequestMethod.POST)
+    public Result getRolePrivileges(@RequestParam(value = "schoolId", required = true) Long schoolId) {
+        List<TSchoolPrivilege> tSchoolPrivilegeList = tSchoolPrivilegeService.findBySchoolId(schoolId);
+        return ResultUtil.ok(tSchoolPrivilegeList.stream().map(s -> String.valueOf(s.getPrivilegeId())).collect(Collectors.toList()));
+    }
+}

+ 0 - 95
distributed-print/src/main/java/com/qmth/distributed/print/api/MenuUpdateController.java

@@ -1,95 +0,0 @@
-package com.qmth.distributed.print.api;
-
-
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.qmth.boot.api.annotation.Aac;
-import com.qmth.boot.api.annotation.BOOL;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.bean.dto.OrgDto;
-import com.qmth.teachcloud.common.bean.dto.SysRolePrivilegeDto;
-import com.qmth.teachcloud.common.entity.SysPrivilege;
-import com.qmth.teachcloud.common.entity.SysRolePrivilege;
-import com.qmth.teachcloud.common.service.SysPrivilegeService;
-import com.qmth.teachcloud.common.service.SysRolePrivilegeService;
-import com.qmth.teachcloud.common.util.Result;
-import com.qmth.teachcloud.common.util.ResultUtil;
-import io.swagger.annotations.*;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-/**
- * @Description: 菜单权限修改
- * @Param:
- * @return:
- * @Author: wangliang
- * @Date: 2021/10/29
- */
-@Api(tags = "菜单权限修改Controller")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.menu}")
-@Aac(auth = BOOL.FALSE, strict = BOOL.FALSE)
-@Validated
-public class MenuUpdateController {
-
-    @Resource
-    SysPrivilegeService sysPrivilegeService;
-
-    @Resource
-    SysRolePrivilegeService sysRolePrivilegeService;
-
-//    @ApiOperation(value = "同步所有角色菜单权限")
-//    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
-//    @RequestMapping(value = "/rolePrivilegeSync", method = RequestMethod.POST)
-//    @Transactional
-//    public Result rolePrivilegeSync() {
-//        List<SysRolePrivilegeDto> sysRolePrivilegeDtoList = sysPrivilegeService.getRolePrivilegeList();
-//        if (Objects.nonNull(sysRolePrivilegeDtoList) && sysRolePrivilegeDtoList.size() > 0) {
-//            Map<Long, List<SysRolePrivilegeDto>> map = new HashMap<>();
-//            for (SysRolePrivilegeDto s : sysRolePrivilegeDtoList) {
-//                if (!map.containsKey(s.getRoleId())) {
-//                    List<SysRolePrivilegeDto> tempList = new ArrayList<>();
-//                    tempList.add(s);
-//                    map.put(s.getRoleId(), tempList);
-//                } else {
-//                    List<SysRolePrivilegeDto> mapList = map.get(s.getRoleId());
-//                    mapList.add(s);
-//                    map.put(s.getRoleId(), mapList);
-//                }
-//            }
-//            List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.findByDefault();
-//            Map<String, SysPrivilege> sysPrivilegeMap = sysPrivilegeList.stream().collect(Collectors.toMap(SysPrivilege::getName, Function.identity(), (dto1, dto2) -> dto1));
-//            map.forEach((k, v) -> {
-//                List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
-//                for (int i = 0; i < v.size(); i++) {
-//                    SysRolePrivilegeDto s = v.get(i);
-//                    SysRolePrivilege sysRolePrivilege = sysRolePrivilegeService.getById(s.getRolePrivilegeId());
-//                    SysPrivilege sysPrivilege = sysPrivilegeMap.get(s.getPrivilegeName());
-//                    if (Objects.nonNull(sysPrivilege)) {
-//                        sysRolePrivilege.setPrivilegeId(sysPrivilege.getId());
-//                        sysRolePrivilegeList.add(sysRolePrivilege);
-//                    }
-//                }
-//                sysRolePrivilegeService.saveOrUpdateBatch(sysRolePrivilegeList);
-//            });
-//        }
-//        return ResultUtil.ok(true);
-//    }
-//
-//    @ApiOperation(value = "同步所有角色菜单权限数量")
-//    @ApiResponses({@ApiResponse(code = 200, message = "常规信息", response = ResultUtil.class)})
-//    @RequestMapping(value = "/rolePrivilegeCountSync", method = RequestMethod.POST)
-//    @Transactional
-//    public Result rolePrivilegeCountSync() {
-//        Integer count = sysPrivilegeService.getRolePrivilegeCount();
-//        return ResultUtil.ok(Objects.nonNull(count) ? count : 0);
-//    }
-}

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -82,6 +82,8 @@ public class SystemConstant {
     public static final String REGULAR_EXPRESSION_OF_PHONE = "((\\d{3,4})|(\\(\\d{3,4}\\)-))?\\d{7,8}";
     public static final String SYS_USER = "sysUser";
 //    public static final Long DEFAULT_PRIVILEGE_SCHOOL = 137L;
+    public static final String MENU_MANAGE = "MenuManage";
+    public static final String CUSTOM_MENU = "CustomMenu";
 
     /**
      * oss url过期时间

+ 13 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/entity/TSchoolPrivilege.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TSchoolPrivilege.java

@@ -1,10 +1,11 @@
-package com.qmth.distributed.print.business.entity;
+package com.qmth.teachcloud.common.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -15,7 +16,7 @@ import java.io.Serializable;
  * @author wangliang
  * @since 2021-10-28
  */
-@ApiModel(value="TSchoolPrivilege对象", description="学校菜单权限表")
+@ApiModel(value = "TSchoolPrivilege对象", description = "学校菜单权限表")
 public class TSchoolPrivilege implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -26,12 +27,22 @@ public class TSchoolPrivilege implements Serializable {
 
     @ApiModelProperty(value = "学校id")
     @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "学校id不能为空")
     private Long schoolId;
 
     @ApiModelProperty(value = "菜单权限id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long privilegeId;
 
+    public TSchoolPrivilege() {
+
+    }
+
+    public TSchoolPrivilege(Long schoolId, Long privilegeId) {
+        this.schoolId = schoolId;
+        this.privilegeId = privilegeId;
+    }
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 24 - 16
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysPrivilegeMapper.java

@@ -1,8 +1,8 @@
 package com.qmth.teachcloud.common.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.qmth.teachcloud.common.bean.dto.SysRolePrivilegeDto;
 import com.qmth.teachcloud.common.entity.SysPrivilege;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -18,24 +18,32 @@ public interface SysPrivilegeMapper extends BaseMapper<SysPrivilege> {
 
     List<SysPrivilege> getClientUrlByUserId(Long userId);
 
-    /**
-     * 获取所有角色权限
-     *
-     * @return
-     */
-    List<SysRolePrivilegeDto> getRolePrivilegeList();
-
-    /**
-     * 获取所有角色权限数量
-     *
-     * @return
-     */
-    Integer getRolePrivilegeCount();
+//    /**
+//     * 获取所有角色权限
+//     *
+//     * @return
+//     */
+//    List<SysRolePrivilegeDto> getRolePrivilegeList();
+//
+//    /**
+//     * 获取所有角色权限数量
+//     *
+//     * @return
+//     */
+//    Integer getRolePrivilegeCount();
+//
+//    /**
+//     * 查找默认菜单权限
+//     *
+//     * @return
+//     */
+//    List<SysPrivilege> findByDefault();
 
     /**
-     * 查找默认菜单权限
+     * 递归树查询(同级及以上)
      *
+     * @param privilegeId
      * @return
      */
-    List<SysPrivilege> findByDefault();
+    List<SysPrivilege> findByConnectByParentId(@Param("privilegeId") Long privilegeId);
 }

+ 2 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/mapper/TSchoolPrivilegeMapper.java → teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/TSchoolPrivilegeMapper.java

@@ -1,7 +1,7 @@
-package com.qmth.distributed.print.business.mapper;
+package com.qmth.teachcloud.common.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.qmth.distributed.print.business.entity.TSchoolPrivilege;
+import com.qmth.teachcloud.common.entity.TSchoolPrivilege;
 
 /**
  * <p>

+ 27 - 12
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java

@@ -2,10 +2,9 @@ package com.qmth.teachcloud.common.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
-import com.qmth.teachcloud.common.bean.dto.SysRolePrivilegeDto;
-import com.qmth.teachcloud.common.bean.result.MenuResult;
 import com.qmth.teachcloud.common.entity.SysPrivilege;
 
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -46,24 +45,40 @@ public interface SysPrivilegeService extends IService<SysPrivilege> {
 
     List<SysPrivilege> getClientUrlByUserId(Long userId);
 
-    /**
-     * 获取所有角色权限
-     *
-     * @return
-     */
-    List<SysRolePrivilegeDto> getRolePrivilegeList();
+//    /**
+//     * 获取所有角色权限
+//     *
+//     * @return
+//     */
+//    List<SysRolePrivilegeDto> getRolePrivilegeList();
+//
+//    /**
+//     * 获取所有角色权限数量
+//     *
+//     * @return
+//     */
+//    Integer getRolePrivilegeCount();
+//
+//    /**
+//     * 查找默认菜单权限
+//     *
+//     * @return
+//     */
+//    List<SysPrivilege> findByDefault();
 
     /**
-     * 获取所有角色权限数量
+     * 递归树查询(同级及以上)
      *
+     * @param privilegeId
      * @return
      */
-    Integer getRolePrivilegeCount();
+    List<SysPrivilege> findByConnectByParentId(Long privilegeId);
 
     /**
-     * 查找默认菜单权限
+     * 获取菜单树公用
      *
+     * @param sysPrivilegeList
      * @return
      */
-    List<SysPrivilege> findByDefault();
+    Collection<?> getMenuTreeCommon(Collection<?> sysPrivilegeList);
 }

+ 25 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TSchoolPrivilegeService.java

@@ -0,0 +1,25 @@
+package com.qmth.teachcloud.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.entity.TSchoolPrivilege;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 学校菜单权限表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-10-28
+ */
+public interface TSchoolPrivilegeService extends IService<TSchoolPrivilege> {
+
+    /**
+     * 根据学校id查找自定义菜单
+     *
+     * @param schoolId
+     * @return
+     */
+    List<TSchoolPrivilege> findBySchoolId(Long schoolId);
+}

+ 113 - 77
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java

@@ -7,16 +7,17 @@ import com.google.gson.Gson;
 import com.qmth.teachcloud.common.bean.dto.MenuDto;
 import com.qmth.teachcloud.common.bean.dto.MenuPrivilegeDto;
 import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
-import com.qmth.teachcloud.common.bean.dto.SysRolePrivilegeDto;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysPrivilege;
 import com.qmth.teachcloud.common.entity.SysRolePrivilege;
+import com.qmth.teachcloud.common.entity.TSchoolPrivilege;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.enums.PrivilegeEnum;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 import com.qmth.teachcloud.common.mapper.SysPrivilegeMapper;
 import com.qmth.teachcloud.common.service.SysPrivilegeService;
 import com.qmth.teachcloud.common.service.SysRolePrivilegeService;
+import com.qmth.teachcloud.common.service.TSchoolPrivilegeService;
 import com.qmth.teachcloud.common.util.JacksonUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -46,6 +47,9 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
     @Resource
     SysPrivilegeMapper sysPrivilegeMapper;
 
+    @Resource
+    TSchoolPrivilegeService tSchoolPrivilegeService;
+
     @Override
     @Deprecated
     public List<PrivilegeDto> listPrivilegeTree() {
@@ -87,7 +91,12 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
      */
     @Override
     public List<PrivilegeDto> listPrivilegeTreeNew() {
-//        Long schoolId = SystemConstant.getHeadOrUserSchoolId();
+        Long schoolId = SystemConstant.getHeadOrUserSchoolId();
+        List<TSchoolPrivilege> tSchoolPrivilegeList = tSchoolPrivilegeService.findBySchoolId(schoolId);
+        Set<Long> customPrivilegeIds = null;
+        if (Objects.nonNull(tSchoolPrivilegeList) && tSchoolPrivilegeList.size() > 0) {
+            customPrivilegeIds = tSchoolPrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
+        }
         QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
         sysPrivilegeQueryWrapper.lambda()
                 .ne(SysPrivilege::getType, PrivilegeEnum.URL)
@@ -100,67 +109,13 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
 //            sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getSchoolId, schoolId);
 //        }
         List<SysPrivilege> sysPrivilegeList = this.list(sysPrivilegeQueryWrapper);
-
-        LinkedMultiValueMap<Long, MenuDto> linkedMultiValueMap = new LinkedMultiValueMap<>();
-        Map<Long, PrivilegeDto> map = new LinkedHashMap<>();
-        Gson gson = new Gson();
-        List<MenuDto> menuDtoList = gson.fromJson(JacksonUtil.parseJson(sysPrivilegeList), new TypeToken<List<MenuDto>>() {
-        }.getType());
-        for (MenuDto m : menuDtoList) {
-            if (Objects.isNull(m.getParentId()) || m.getType() == PrivilegeEnum.MENU) {
-                PrivilegeDto privilegeDto = new PrivilegeDto();
-                privilegeDto.setId(m.getId());
-                privilegeDto.setName(m.getName());
-                privilegeDto.setUrl(m.getUrl());
-                privilegeDto.setType(m.getType());
-                privilegeDto.setParentId(m.getParentId());
-                privilegeDto.setSequence(m.getSequence());
-                map.put(m.getId(), privilegeDto);
-            } else {
-                if (!linkedMultiValueMap.containsKey(m.getParentId())) {
-                    linkedMultiValueMap.add(m.getParentId(), m);
-                } else {
-                    List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getParentId());
-                    menuDtos.add(m);
-                    linkedMultiValueMap.put(m.getParentId(), menuDtos);
-                }
-            }
-        }
-
-        Set<Long> deleteKeys = new HashSet<>();
-        map.forEach((k, v) -> {
-            List<MenuDto> menuDtos = linkedMultiValueMap.get(k);
-            List<MenuDto> buttons = null, links = null, lists = null, conditions = null;
-            if (Objects.nonNull(menuDtos)) {
-                for (MenuDto menuDto : menuDtos) {
-                    if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.BUTTON) {
-                        buttons = Objects.isNull(buttons) ? new ArrayList<>() : buttons;
-                        buttons.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        v.setButtons(buttons);
-                    } else if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.LINK) {
-                        links = Objects.isNull(links) ? new ArrayList<>() : links;
-                        links.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        v.setLinks(links);
-                    } else if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.LIST) {
-                        lists = Objects.isNull(lists) ? new ArrayList<>() : lists;
-                        lists.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        v.setLists(lists);
-                    } else if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.CONDITION) {
-                        conditions = Objects.isNull(conditions) ? new ArrayList<>() : conditions;
-                        conditions.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
-                        v.setConditions(conditions);
-                    }
-                }
-            }
-            if (v.getParentId() > 0 && v.getType() == PrivilegeEnum.MENU) {
-                map.get(v.getParentId()).getChildren().add(v);
-                deleteKeys.add(k);
-            }
-        });
-        for (Long key : deleteKeys) {
-            map.remove(key);
+        if (Objects.nonNull(customPrivilegeIds) && customPrivilegeIds.size() > 0) {
+            sysPrivilegeQueryWrapper = new QueryWrapper<>();
+            sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, customPrivilegeIds);
+            List<SysPrivilege> sysPrivileges = this.list(sysPrivilegeQueryWrapper);
+            sysPrivilegeList.addAll(sysPrivileges);
         }
-        return new ArrayList<>(map.values());
+        return (List<PrivilegeDto>) this.getMenuTreeCommon(sysPrivilegeList);
     }
 
     @Override
@@ -270,33 +225,114 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
     }
 
     /**
-     * 获取所有角色权限
+     * 递归树查询(同级及以上)
      *
+     * @param privilegeId
      * @return
      */
     @Override
-    public List<SysRolePrivilegeDto> getRolePrivilegeList() {
-        return sysPrivilegeMapper.getRolePrivilegeList();
+    public List<SysPrivilege> findByConnectByParentId(Long privilegeId) {
+        return sysPrivilegeMapper.findByConnectByParentId(privilegeId);
     }
 
+//    /**
+//     * 获取所有角色权限
+//     *
+//     * @return
+//     */
+//    @Override
+//    public List<SysRolePrivilegeDto> getRolePrivilegeList() {
+//        return sysPrivilegeMapper.getRolePrivilegeList();
+//    }
+//
+//
+//    /**
+//     * 获取所有角色权限数量
+//     *
+//     * @return
+//     */
+//    @Override
+//    public Integer getRolePrivilegeCount() {
+//        return sysPrivilegeMapper.getRolePrivilegeCount();
+//    }
+//
+//    /**
+//     * 查找默认菜单权限
+//     *
+//     * @return
+//     */
+//    @Override
+//    public List<SysPrivilege> findByDefault() {
+//        return sysPrivilegeMapper.findByDefault();
+//    }
 
     /**
-     * 获取所有角色权限数量
+     * 获取菜单树公用
      *
+     * @param sysPrivilegeList
      * @return
      */
     @Override
-    public Integer getRolePrivilegeCount() {
-        return sysPrivilegeMapper.getRolePrivilegeCount();
-    }
+    public Collection<?> getMenuTreeCommon(Collection<?> sysPrivilegeList) {
+        LinkedMultiValueMap<Long, MenuDto> linkedMultiValueMap = new LinkedMultiValueMap<>();
+        Map<Long, PrivilegeDto> map = new LinkedHashMap<>();
+        Gson gson = new Gson();
+        List<MenuDto> menuDtoList = gson.fromJson(JacksonUtil.parseJson(sysPrivilegeList), new TypeToken<List<MenuDto>>() {
+        }.getType());
+        for (MenuDto m : menuDtoList) {
+            if (Objects.isNull(m.getParentId()) || m.getType() == PrivilegeEnum.MENU) {
+                PrivilegeDto privilegeDto = new PrivilegeDto();
+                privilegeDto.setId(m.getId());
+                privilegeDto.setName(m.getName());
+                privilegeDto.setUrl(m.getUrl());
+                privilegeDto.setType(m.getType());
+                privilegeDto.setParentId(m.getParentId());
+                privilegeDto.setSequence(m.getSequence());
+                map.put(m.getId(), privilegeDto);
+            } else {
+                if (!linkedMultiValueMap.containsKey(m.getParentId())) {
+                    linkedMultiValueMap.add(m.getParentId(), m);
+                } else {
+                    List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getParentId());
+                    menuDtos.add(m);
+                    linkedMultiValueMap.put(m.getParentId(), menuDtos);
+                }
+            }
+        }
 
-    /**
-     * 查找默认菜单权限
-     *
-     * @return
-     */
-    @Override
-    public List<SysPrivilege> findByDefault() {
-        return sysPrivilegeMapper.findByDefault();
+        Set<Long> deleteKeys = new HashSet<>();
+        map.forEach((k, v) -> {
+            List<MenuDto> menuDtos = linkedMultiValueMap.get(k);
+            List<MenuDto> buttons = null, links = null, lists = null, conditions = null;
+            if (Objects.nonNull(menuDtos)) {
+                for (MenuDto menuDto : menuDtos) {
+                    if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.BUTTON) {
+                        buttons = Objects.isNull(buttons) ? new ArrayList<>() : buttons;
+                        buttons.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        v.setButtons(buttons);
+                    } else if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.LINK) {
+                        links = Objects.isNull(links) ? new ArrayList<>() : links;
+                        links.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        v.setLinks(links);
+                    } else if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.LIST) {
+                        lists = Objects.isNull(lists) ? new ArrayList<>() : lists;
+                        lists.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        v.setLists(lists);
+                    } else if (v.getId().longValue() == menuDto.getParentId().longValue() && menuDto.getType() == PrivilegeEnum.CONDITION) {
+                        conditions = Objects.isNull(conditions) ? new ArrayList<>() : conditions;
+                        conditions.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        v.setConditions(conditions);
+                    }
+                }
+            }
+            if (v.getParentId() > 0 && v.getType() == PrivilegeEnum.MENU) {
+                map.get(v.getParentId()).getChildren().add(v);
+                deleteKeys.add(k);
+            }
+        });
+        for (Long key : deleteKeys) {
+            map.remove(key);
+        }
+        return new ArrayList<>(map.values());
     }
 }

+ 35 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TSchoolPrivilegeServiceImpl.java

@@ -0,0 +1,35 @@
+package com.qmth.teachcloud.common.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.entity.TSchoolPrivilege;
+import com.qmth.teachcloud.common.mapper.TSchoolPrivilegeMapper;
+import com.qmth.teachcloud.common.service.TSchoolPrivilegeService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 学校菜单权限表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-10-28
+ */
+@Service
+public class TSchoolPrivilegeServiceImpl extends ServiceImpl<TSchoolPrivilegeMapper, TSchoolPrivilege> implements TSchoolPrivilegeService {
+
+    /**
+     * 根据学校id查找自定义菜单
+     *
+     * @param schoolId
+     * @return
+     */
+    @Override
+    public List<TSchoolPrivilege> findBySchoolId(Long schoolId) {
+        QueryWrapper<TSchoolPrivilege> tSchoolPrivilegeQueryWrapper = new QueryWrapper<>();
+        tSchoolPrivilegeQueryWrapper.lambda().eq(TSchoolPrivilege::getSchoolId, schoolId);
+        return this.list(tSchoolPrivilegeQueryWrapper);
+    }
+}

+ 48 - 44
teachcloud-common/src/main/resources/mapper/SysPrivilegeMapper.xml

@@ -35,51 +35,55 @@
             sur.user_id = #{userId}
     </select>
 
-    <select id="getRolePrivilegeList" resultType="com.qmth.teachcloud.common.bean.dto.SysRolePrivilegeDto">
-        select
-        bs.name as schoolName,
-        bs.code as schoolCode,
-        sr.id as roleId,
-        sr.name as roleName,
-        sp.id as privilegeId,
-        sp.name as privilegeName,
-        sp.url as privilegeUrl,
-        sp.`type` as privilegeType,
-        srp.id as rolePrivilegeId
-        from
-        sys_role_privilege srp
-        join sys_privilege sp on
-        sp.id = srp.privilege_id
-        join sys_role sr on
-        sr.id = srp.role_id
-        join basic_school bs on
-        bs.id = sr.school_id
-        where
-        srp.enable = true
-        and sp.enable = true
-        and sr.enable = true
-        and srp.role_id <![CDATA[ <> ]]> 1
-        and srp.privilege_id <![CDATA[ > ]]> 100000
+    <select id="findByConnectByParentId" resultType="com.qmth.teachcloud.common.entity.SysPrivilege">
+        SELECT su.* FROM (SELECT @a AS _id, (SELECT @a := sp.parent_id FROM sys_privilege sp WHERE sp.id = _id) AS parent_id FROM (SELECT @a := #{privilegeId}) vars, sys_privilege h) temp JOIN sys_privilege su ON temp._id = su.id
     </select>
 
-    <select id="getRolePrivilegeCount" resultType="java.lang.Integer">
-        select count(1) from
-        sys_role_privilege srp
-        join sys_privilege sp on
-        sp.id = srp.privilege_id
-        join sys_role sr on
-        sr.id = srp.role_id
-        join basic_school bs on
-        bs.id = sr.school_id
-        where
-        srp.enable = true
-        and sp.enable = true
-        and sr.enable = true
-        and srp.role_id <![CDATA[ <> ]]> 1
-        and srp.privilege_id <![CDATA[ > ]]> 100000
-    </select>
+<!--    <select id="getRolePrivilegeList" resultType="com.qmth.teachcloud.common.bean.dto.SysRolePrivilegeDto">-->
+<!--        select-->
+<!--        bs.name as schoolName,-->
+<!--        bs.code as schoolCode,-->
+<!--        sr.id as roleId,-->
+<!--        sr.name as roleName,-->
+<!--        sp.id as privilegeId,-->
+<!--        sp.name as privilegeName,-->
+<!--        sp.url as privilegeUrl,-->
+<!--        sp.`type` as privilegeType,-->
+<!--        srp.id as rolePrivilegeId-->
+<!--        from-->
+<!--        sys_role_privilege srp-->
+<!--        join sys_privilege sp on-->
+<!--        sp.id = srp.privilege_id-->
+<!--        join sys_role sr on-->
+<!--        sr.id = srp.role_id-->
+<!--        join basic_school bs on-->
+<!--        bs.id = sr.school_id-->
+<!--        where-->
+<!--        srp.enable = true-->
+<!--        and sp.enable = true-->
+<!--        and sr.enable = true-->
+<!--        and srp.role_id <![CDATA[ <> ]]> 1-->
+<!--        and srp.privilege_id <![CDATA[ > ]]> 100000-->
+<!--    </select>-->
 
-    <select id="findByDefault" resultType="com.qmth.teachcloud.common.entity.SysPrivilege">
-        select * from sys_privilege sp where sp.id <![CDATA[ < ]]> 100000
-    </select>
+<!--    <select id="getRolePrivilegeCount" resultType="java.lang.Integer">-->
+<!--        select count(1) from-->
+<!--        sys_role_privilege srp-->
+<!--        join sys_privilege sp on-->
+<!--        sp.id = srp.privilege_id-->
+<!--        join sys_role sr on-->
+<!--        sr.id = srp.role_id-->
+<!--        join basic_school bs on-->
+<!--        bs.id = sr.school_id-->
+<!--        where-->
+<!--        srp.enable = true-->
+<!--        and sp.enable = true-->
+<!--        and sr.enable = true-->
+<!--        and srp.role_id <![CDATA[ <> ]]> 1-->
+<!--        and srp.privilege_id <![CDATA[ > ]]> 100000-->
+<!--    </select>-->
+
+<!--    <select id="findByDefault" resultType="com.qmth.teachcloud.common.entity.SysPrivilege">-->
+<!--        select * from sys_privilege sp where sp.id <![CDATA[ < ]]> 100000-->
+<!--    </select>-->
 </mapper>

+ 1 - 1
distributed-print-business/src/main/resources/mapper/TSchoolPrivilegeMapper.xml → teachcloud-common/src/main/resources/mapper/TSchoolPrivilegeMapper.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.qmth.distributed.print.business.mapper.TSchoolPrivilegeMapper">
+<mapper namespace="com.qmth.teachcloud.common.mapper.TSchoolPrivilegeMapper">
 
 </mapper>