xiaof 3 ani în urmă
părinte
comite
4e3948f038
38 a modificat fișierele cu 1340 adăugiri și 415 ștergeri
  1. 4 3
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java
  2. 115 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysRoleController.java
  3. 168 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/SysUserController.java
  4. 19 0
      distributed-print/src/main/java/com/qmth/distributed/print/api/TBDepartmentController.java
  5. 5 5
      distributed-print/src/main/java/com/qmth/distributed/print/interceptor/AuthInterceptor.java
  6. 113 114
      teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/SysRoleController.java
  7. 171 171
      teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/SysUserController.java
  8. 66 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/MenuDto.java
  9. 73 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/MenuPrivilegeDto.java
  10. 4 4
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/LoginResult.java
  11. 65 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/MenuResult.java
  12. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java
  13. 0 12
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysPrivilege.java
  14. 4 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysRole.java
  15. 1 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysRolePrivilege.java
  16. 8 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysUserRole.java
  17. 75 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TBDepartment.java
  18. 2 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TBSession.java
  19. 42 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/DepartmentTypeEnum.java
  20. 3 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FieldUniqueEnum.java
  21. 3 2
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserRoleMapper.java
  22. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/TBDepartmentMapper.java
  23. 24 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/CacheService.java
  24. 8 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java
  25. 11 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysRoleService.java
  26. 2 1
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserRoleService.java
  27. 16 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TBDepartmentService.java
  28. 9 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java
  29. 40 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/CacheServiceImpl.java
  30. 19 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java
  31. 85 10
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRoleServiceImpl.java
  32. 70 13
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserRoleServiceImpl.java
  33. 31 53
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java
  34. 20 0
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TBDepartmentServiceImpl.java
  35. 34 13
      teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java
  36. 7 5
      teachcloud-common/src/main/resources/mapper/SysUserRoleMapper.xml
  37. 5 0
      teachcloud-common/src/main/resources/mapper/TBDepartmentMapper.xml
  38. 1 2
      teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysController.java

+ 4 - 3
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -124,7 +124,9 @@ public class SysController {
                 AuthBean authBean = teachcloudCommonService.getUserAuth(o.getId());
                 if (Objects.nonNull(authBean) && Objects.nonNull(authBean.getRoleList()) && authBean.getRoleList().size() > 0) {
                     Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
-                    if (!roleType.contains(RoleTypeEnum.ADMIN) && !roleType.contains(RoleTypeEnum.CUSTOMER)) {
+                    if (!roleType.contains(RoleTypeEnum.ADMIN)
+//                            && !roleType.contains(RoleTypeEnum.CUSTOMER)
+                    ) {
                         throw ExceptionResultEnum.ERROR.exception("学校代码为admin只允许超级管理员登录");
                     }
                 }
@@ -307,8 +309,7 @@ public class SysController {
     @ApiOperation(value = "查询用户权限")
     @RequestMapping(value = "/get_menu", method = RequestMethod.POST)
     public Result getMenu() {
-        List<MenuDto> list = sysUserRoleService.listByUserId();
-        return ResultUtil.ok(list);
+        return ResultUtil.ok(sysUserRoleService.listByUserId());
     }
 
     @ApiOperation(value = "获取服务器时间")

+ 115 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysRoleController.java

@@ -0,0 +1,115 @@
+package com.qmth.distributed.print.api;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.entity.SysRole;
+import com.qmth.teachcloud.common.service.SysRoleService;
+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 org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+
+/**
+ * <p>
+ * 角色表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2021-03-23
+ */
+@Api(tags = "角色Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/role")
+public class SysRoleController {
+
+    @Autowired
+    private SysRoleService sysRoleService;
+
+    /**
+     * 查询
+     *
+     * @param name
+     * @param enable
+     * @param pageNumber
+     * @param pageSize
+     * @return
+     */
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result list(@RequestParam(value = "name", required = false) String name,
+                       @RequestParam(value = "enable", required = false) Boolean enable,
+                       @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+                       @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+        return ResultUtil.ok(sysRoleService.list(name, enable, pageNumber, pageSize));
+    }
+
+    /**
+     * 新增用户时查询角色方法
+     *
+     * @return
+     */
+    @ApiOperation(value = "新增用户时查询角色方法")
+    @RequestMapping(value = "/list_to_user", method = RequestMethod.POST)
+    public Result listToUser() {
+        return ResultUtil.ok(sysRoleService.listToUser());
+    }
+
+    /**
+     * 新增/修改
+     *
+     * @param role
+     * @return
+     */
+    @ApiOperation(value = "新增/修改")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public Result save(@Valid @RequestBody SysRole role, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(sysRoleService.saveRoleNew(role));
+    }
+
+    /**
+     * 启用/禁用
+     *
+     * @param role
+     * @return
+     */
+    @ApiOperation(value = "启用/禁用")
+    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+    public Result enable(@RequestBody SysRole role) throws NoSuchAlgorithmException {
+        return ResultUtil.ok(sysRoleService.enable(role));
+    }
+
+    /**
+     * 删除
+     *
+     * @param id
+     * @return
+     */
+    @ApiOperation(value = "删除")
+    @RequestMapping(value = "/remove", method = RequestMethod.POST)
+    public Result remove(Long id) {
+        return ResultUtil.ok(sysRoleService.remove(id));
+    }
+
+    /**
+     * 用户已绑定角色列表
+     *
+     * @param userId
+     * @return
+     */
+    @ApiOperation(value = "用户已绑定角色列表")
+    @RequestMapping(value = "/get_user_roles", method = RequestMethod.POST)
+    public Result getUserRoles(@RequestParam(value = "userId", required = true) Long userId) {
+        return ResultUtil.ok(sysRoleService.getUserRoles(userId));
+    }
+}
+

+ 168 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/SysUserController.java

@@ -0,0 +1,168 @@
+package com.qmth.distributed.print.api;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
+import com.qmth.teachcloud.common.bean.dto.UserDto;
+import com.qmth.teachcloud.common.bean.params.UserSaveParams;
+import com.qmth.teachcloud.common.entity.SysUser;
+import com.qmth.teachcloud.common.service.SysUserService;
+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.ApiParam;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.security.NoSuchAlgorithmException;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户表 前端控制器
+ * </p>
+ *
+ * @author xf
+ * @since 2021-03-23
+ */
+@Api(tags = "用户Controller")
+@RestController
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/user")
+public class SysUserController {
+    private final static Logger log = LoggerFactory.getLogger(SysUserController.class);
+
+    @Autowired
+    private SysUserService sysUserService;
+
+    /**
+     * 查询
+     *
+     * @param loginName
+     * @param roleId
+     * @param enable
+     * @return
+     */
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list", method = RequestMethod.POST)
+    public Result list(@RequestParam(value = "loginName", required = false) String loginName,
+                       @RequestParam(value = "roleId", required = false) String roleId,
+                       @RequestParam(value = "enable", required = false) Boolean enable,
+                       @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+                       @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+        return ResultUtil.ok(sysUserService.list(loginName, roleId, enable, pageNumber, pageSize));
+    }
+
+    /**
+     * 查询
+     *
+     * @param realName
+     * @param enable
+     * @return
+     */
+    @ApiOperation(value = "查询")
+    @RequestMapping(value = "/list_customer", method = RequestMethod.POST)
+    public Result listCustomer(@RequestParam(value = "realName", required = false) String realName,
+                               @RequestParam(value = "enable", required = false) Boolean enable,
+                               @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+                               @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+        return ResultUtil.ok(sysUserService.listCustomer(realName, enable, pageNumber, pageSize));
+    }
+
+    /**
+     * 根据科目查询命题老师
+     *
+     * @param courseCode
+     * @param param
+     * @return
+     */
+    @ApiOperation(value = "根据科目查询命题老师")
+    @RequestMapping(value = "/user_list", method = RequestMethod.POST)
+    public Result userQuery(@RequestParam(value = "courseCode", required = false) String courseCode,
+                            @RequestParam(value = "param", required = false) String param) {
+        List<BlurryUserDto> list = sysUserService.listUser(courseCode, param);
+        return ResultUtil.ok(list);
+    }
+
+    /**
+     * 新增/修改
+     *
+     * @param userSaveParams
+     * @return
+     */
+    @ApiOperation(value = "新增/修改")
+    @RequestMapping(value = "/save", method = RequestMethod.POST)
+    public Result save(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(sysUserService.saveUser(userSaveParams));
+    }
+
+    /**
+     * 新增客服
+     *
+     * @param userSaveParams
+     * @return
+     */
+    @ApiOperation(value = "新增客服")
+    @RequestMapping(value = "/save_customer", method = RequestMethod.POST)
+    public Result saveCustomer(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(sysUserService.saveCustomer(userSaveParams));
+    }
+
+    /**
+     * 启用/禁用
+     *
+     * @param user
+     * @return
+     */
+    @ApiOperation(value = "启用/禁用")
+    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+    public Result enable(@RequestBody SysUser user) throws NoSuchAlgorithmException {
+        return ResultUtil.ok(sysUserService.enable(user));
+    }
+
+    /**
+     * 重置密码
+     *
+     * @param user
+     * @return
+     */
+    @ApiOperation(value = "重置密码")
+    @RequestMapping(value = "/reset_password", method = RequestMethod.POST)
+    public Result resetPassword(@RequestBody SysUser user) throws NoSuchAlgorithmException {
+        return ResultUtil.ok(sysUserService.resetPassword(user.getId()));
+    }
+
+    /**
+     * 修改密码
+     *
+     * @return
+     */
+    @ApiOperation(value = "修改密码")
+    @RequestMapping(value = "/update_password", method = RequestMethod.POST)
+    public Result updatePassword(@RequestBody SysUser user) throws NoSuchAlgorithmException {
+        return ResultUtil.ok(sysUserService.updatePassword(user));
+    }
+
+    /**
+     * 绑定角色
+     *
+     * @param sysUser
+     * @return
+     */
+    @ApiOperation(value = "绑定角色")
+    @RequestMapping(value = "/bind_roles", method = RequestMethod.POST)
+    public Result bindRoles(@RequestBody SysUser sysUser) {
+        return ResultUtil.ok(sysUserService.bindRoles(sysUser));
+    }
+}
+

+ 19 - 0
distributed-print/src/main/java/com/qmth/distributed/print/api/TBDepartmentController.java

@@ -0,0 +1,19 @@
+package com.qmth.distributed.print.api;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 部门设置表 前端控制器
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-07-29
+ */
+@RestController
+@RequestMapping("/t-bdepartment")
+public class TBDepartmentController {
+
+}

+ 5 - 5
distributed-print/src/main/java/com/qmth/distributed/print/interceptor/AuthInterceptor.java

@@ -22,11 +22,11 @@ public class AuthInterceptor extends ExtendInterceptor {
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         log.info("preHandle is come in");
-//        if (request.getServletPath().contains(endpoint)) {
-        return true;
-//        } else {
-//            return AuthUtil.adminAuthInterceptor(request, response);
-//        }
+        if (request.getServletPath().contains(endpoint)) {
+            return true;
+        } else {
+            return AuthUtil.adminAuthInterceptor(request, response);
+        }
     }
 
     @Override

+ 113 - 114
teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/SysRoleController.java

@@ -1,114 +1,113 @@
-package com.qmth.teachcloud.common.api.api;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.entity.SysRole;
-import com.qmth.teachcloud.common.service.SysRoleService;
-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 org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * <p>
- * 角色表 前端控制器
- * </p>
- *
- * @author xf
- * @since 2021-03-23
- */
-@Api(tags = "角色Controller")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/role")
-public class SysRoleController {
-
-    @Autowired
-    private SysRoleService sysRoleService;
-
-    /**
-     * 查询
-     *
-     * @param name
-     * @param enable
-     * @param pageNumber
-     * @param pageSize
-     * @return
-     */
-    @ApiOperation(value = "查询")
-    @RequestMapping(value = "/list", method = RequestMethod.POST)
-    public Result list(@RequestParam(value = "name", required = false) String name,
-                       @RequestParam(value = "enable", required = false) Boolean enable,
-                       @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                       @RequestParam(value = "pageSize", required = true) Integer pageSize) {
-        IPage<SysRole> userDtos = sysRoleService.list(name, enable, pageNumber, pageSize);
-        return ResultUtil.ok(userDtos);
-    }
-
-    /**
-     * 新增用户时查询角色方法
-     * @return
-     */
-    @ApiOperation(value = "新增用户时查询角色方法")
-    @RequestMapping(value = "/list_to_user", method = RequestMethod.POST)
-    public Result listToUser() {
-        List<SysRole> userDtos = sysRoleService.listToUser();
-        return ResultUtil.ok(userDtos);
-    }
-
-    /**
-     * 新增/修改
-     *
-     * @param role
-     * @return
-     */
-    @ApiOperation(value = "新增/修改")
-    @RequestMapping(value = "/save", method = RequestMethod.POST)
-    public Result save(@RequestBody SysRole role) {
-        boolean isSuccess = sysRoleService.saveRole(role);
-        return ResultUtil.ok(isSuccess);
-    }
-
-    /**
-     * 启用/禁用
-     *
-     * @param role
-     * @return
-     */
-    @ApiOperation(value = "启用/禁用")
-    @RequestMapping(value = "/enable", method = RequestMethod.POST)
-    public Result enable(@RequestBody SysRole role) {
-        boolean isSuccess = sysRoleService.enable(role);
-        return ResultUtil.ok(isSuccess);
-    }
-
-    /**
-     * 删除
-     *
-     * @param id
-     * @return
-     */
-    @ApiOperation(value = "删除")
-    @RequestMapping(value = "/remove", method = RequestMethod.POST)
-    public Result remove(Long id) {
-        boolean isSuccess = sysRoleService.remove(id);
-        return ResultUtil.ok(isSuccess);
-    }
-
-    /**
-     * 用户已绑定角色列表
-     *
-     * @param userId
-     * @return
-     */
-    @ApiOperation(value = "用户已绑定角色列表")
-    @RequestMapping(value = "/get_user_roles", method = RequestMethod.POST)
-    public Result getUserRoles(@RequestParam(value = "userId", required = true) Long userId) {
-        List<Long> list = sysRoleService.getUserRoles(userId);
-        return ResultUtil.ok(list);
-    }
-}
-
+//package com.qmth.distributed.print.api;
+//
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.qmth.boot.api.constant.ApiConstant;
+//import com.qmth.teachcloud.common.entity.SysRole;
+//import com.qmth.teachcloud.common.service.SysRoleService;
+//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 org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.validation.BindingResult;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.validation.Valid;
+//import java.util.List;
+//
+///**
+// * <p>
+// * 角色表 前端控制器
+// * </p>
+// *
+// * @author xf
+// * @since 2021-03-23
+// */
+//@Api(tags = "角色Controller")
+//@RestController
+//@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/role")
+//public class SysRoleController {
+//
+//    @Autowired
+//    private SysRoleService sysRoleService;
+//
+//    /**
+//     * 查询
+//     *
+//     * @param name
+//     * @param enable
+//     * @param pageNumber
+//     * @param pageSize
+//     * @return
+//     */
+//    @ApiOperation(value = "查询")
+//    @RequestMapping(value = "/list", method = RequestMethod.POST)
+//    public Result list(@RequestParam(value = "name", required = false) String name,
+//                       @RequestParam(value = "enable", required = false) Boolean enable,
+//                       @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+//                       @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+//        return ResultUtil.ok(sysRoleService.list(name, enable, pageNumber, pageSize));
+//    }
+//
+//    /**
+//     * 新增用户时查询角色方法
+//     *
+//     * @return
+//     */
+//    @ApiOperation(value = "新增用户时查询角色方法")
+//    @RequestMapping(value = "/list_to_user", method = RequestMethod.POST)
+//    public Result listToUser() {
+//        return ResultUtil.ok(sysRoleService.listToUser());
+//    }
+//
+//    /**
+//     * 新增/修改
+//     *
+//     * @param role
+//     * @return
+//     */
+//    @ApiOperation(value = "新增/修改")
+//    @RequestMapping(value = "/save", method = RequestMethod.POST)
+//    public Result save(@Valid @RequestBody SysRole role, BindingResult bindingResult) {
+//        if (bindingResult.hasErrors()) {
+//            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+//        }
+//        return ResultUtil.ok(sysRoleService.saveRoleNew(role));
+//    }
+//
+//    /**
+//     * 启用/禁用
+//     *
+//     * @param role
+//     * @return
+//     */
+//    @ApiOperation(value = "启用/禁用")
+//    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+//    public Result enable(@RequestBody SysRole role) {
+//        return ResultUtil.ok(sysRoleService.enable(role));
+//    }
+//
+//    /**
+//     * 删除
+//     *
+//     * @param id
+//     * @return
+//     */
+//    @ApiOperation(value = "删除")
+//    @RequestMapping(value = "/remove", method = RequestMethod.POST)
+//    public Result remove(Long id) {
+//        return ResultUtil.ok(sysRoleService.remove(id));
+//    }
+//
+//    /**
+//     * 用户已绑定角色列表
+//     *
+//     * @param userId
+//     * @return
+//     */
+//    @ApiOperation(value = "用户已绑定角色列表")
+//    @RequestMapping(value = "/get_user_roles", method = RequestMethod.POST)
+//    public Result getUserRoles(@RequestParam(value = "userId", required = true) Long userId) {
+//        return ResultUtil.ok(sysRoleService.getUserRoles(userId));
+//    }
+//}

+ 171 - 171
teachcloud-common-api/src/main/java/com/qmth/teachcloud/common/api/api/SysUserController.java

@@ -1,171 +1,171 @@
-package com.qmth.teachcloud.common.api.api;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.qmth.boot.api.constant.ApiConstant;
-import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
-import com.qmth.teachcloud.common.bean.dto.UserDto;
-import com.qmth.teachcloud.common.bean.params.UserSaveParams;
-import com.qmth.teachcloud.common.entity.SysUser;
-import com.qmth.teachcloud.common.service.SysUserService;
-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.ApiParam;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.validation.BindingResult;
-import org.springframework.web.bind.annotation.*;
-
-import javax.validation.Valid;
-import java.security.NoSuchAlgorithmException;
-import java.util.List;
-
-/**
- * <p>
- * 用户表 前端控制器
- * </p>
- *
- * @author xf
- * @since 2021-03-23
- */
-@Api(tags = "用户Controller")
-@RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/user")
-public class SysUserController {
-    private final static Logger log = LoggerFactory.getLogger(SysUserController.class);
-
-    @Autowired
-    private SysUserService sysUserService;
-
-    /**
-     * 查询
-     *
-     * @param loginName
-     * @param roleId
-     * @param enable
-     * @return
-     */
-    @ApiOperation(value = "查询")
-    @RequestMapping(value = "/list", method = RequestMethod.POST)
-    public Result list(@RequestParam(value = "loginName", required = false) String loginName,
-                       @RequestParam(value = "roleId", required = false) String roleId,
-                       @RequestParam(value = "enable", required = false) Boolean enable,
-                       @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                       @RequestParam(value = "pageSize", required = true) Integer pageSize) {
-        IPage<UserDto> userDtos = sysUserService.list(loginName, roleId, enable, pageNumber, pageSize);
-        return ResultUtil.ok(userDtos);
-    }
-
-    /**
-     * 查询
-     *
-     * @param realName
-     * @param enable
-     * @return
-     */
-    @ApiOperation(value = "查询")
-    @RequestMapping(value = "/list_customer", method = RequestMethod.POST)
-    public Result listCustomer(@RequestParam(value = "realName", required = false) String realName,
-                               @RequestParam(value = "enable", required = false) Boolean enable,
-                               @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
-                               @RequestParam(value = "pageSize", required = true) Integer pageSize) {
-        IPage<UserDto> userDtos = sysUserService.listCustomer(realName, enable, pageNumber, pageSize);
-        return ResultUtil.ok(userDtos);
-    }
-
-    /**
-     * 根据科目查询命题老师
-     *
-     * @param courseCode
-     * @param param
-     * @return
-     */
-    @ApiOperation(value = "根据科目查询命题老师")
-    @RequestMapping(value = "/user_list", method = RequestMethod.POST)
-    public Result userQuery(@RequestParam(value = "courseCode", required = false) String courseCode,
-                            @RequestParam(value = "param", required = false) String param) {
-        List<BlurryUserDto> list = sysUserService.listUser(courseCode, param);
-        return ResultUtil.ok(list);
-    }
-
-    /**
-     * 新增/修改
-     *
-     * @param userSaveParams
-     * @return
-     */
-    @ApiOperation(value = "新增/修改")
-    @RequestMapping(value = "/save", method = RequestMethod.POST)
-    public Result save(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) {
-        if (bindingResult.hasErrors()) {
-            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
-        }
-        return ResultUtil.ok(sysUserService.saveUser(userSaveParams));
-    }
-
-    /**
-     * 新增客服
-     *
-     * @param userSaveParams
-     * @return
-     */
-    @ApiOperation(value = "新增客服")
-    @RequestMapping(value = "/save_customer", method = RequestMethod.POST)
-    public Result saveCustomer(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) {
-        if (bindingResult.hasErrors()) {
-            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
-        }
-        return ResultUtil.ok(sysUserService.saveCustomer(userSaveParams));
-    }
-
-    /**
-     * 启用/禁用
-     *
-     * @param user
-     * @return
-     */
-    @ApiOperation(value = "启用/禁用")
-    @RequestMapping(value = "/enable", method = RequestMethod.POST)
-    public Result enable(@RequestBody SysUser user) throws NoSuchAlgorithmException {
-        return ResultUtil.ok(sysUserService.enable(user));
-    }
-
-    /**
-     * 重置密码
-     *
-     * @param user
-     * @return
-     */
-    @ApiOperation(value = "重置密码")
-    @RequestMapping(value = "/reset_password", method = RequestMethod.POST)
-    public Result resetPassword(@RequestBody SysUser user) throws NoSuchAlgorithmException {
-        return ResultUtil.ok(sysUserService.resetPassword(user.getId()));
-    }
-
-    /**
-     * 修改密码
-     *
-     * @return
-     */
-    @ApiOperation(value = "修改密码")
-    @RequestMapping(value = "/update_password", method = RequestMethod.POST)
-    public Result updatePassword(@RequestBody SysUser user) throws NoSuchAlgorithmException {
-        return ResultUtil.ok(sysUserService.updatePassword(user));
-    }
-
-    /**
-     * 绑定角色
-     *
-     * @param sysUser
-     * @return
-     */
-    @ApiOperation(value = "绑定角色")
-    @RequestMapping(value = "/bind_roles", method = RequestMethod.POST)
-    public Result bindRoles(@RequestBody SysUser sysUser) {
-        boolean isSuccess = sysUserService.bindRoles(sysUser);
-        return ResultUtil.ok(isSuccess);
-    }
-}
-
+//package com.qmth.teachcloud.common.api.api;
+//
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.qmth.boot.api.constant.ApiConstant;
+//import com.qmth.teachcloud.common.bean.dto.BlurryUserDto;
+//import com.qmth.teachcloud.common.bean.dto.UserDto;
+//import com.qmth.teachcloud.common.bean.params.UserSaveParams;
+//import com.qmth.teachcloud.common.entity.SysUser;
+//import com.qmth.teachcloud.common.service.SysUserService;
+//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.ApiParam;
+//import org.slf4j.Logger;
+//import org.slf4j.LoggerFactory;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.validation.BindingResult;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.validation.Valid;
+//import java.security.NoSuchAlgorithmException;
+//import java.util.List;
+//
+///**
+// * <p>
+// * 用户表 前端控制器
+// * </p>
+// *
+// * @author xf
+// * @since 2021-03-23
+// */
+//@Api(tags = "用户Controller")
+//@RestController
+//@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + "/${prefix.url.sys}/user")
+//public class SysUserController {
+//    private final static Logger log = LoggerFactory.getLogger(SysUserController.class);
+//
+//    @Autowired
+//    private SysUserService sysUserService;
+//
+//    /**
+//     * 查询
+//     *
+//     * @param loginName
+//     * @param roleId
+//     * @param enable
+//     * @return
+//     */
+//    @ApiOperation(value = "查询")
+//    @RequestMapping(value = "/list", method = RequestMethod.POST)
+//    public Result list(@RequestParam(value = "loginName", required = false) String loginName,
+//                       @RequestParam(value = "roleId", required = false) String roleId,
+//                       @RequestParam(value = "enable", required = false) Boolean enable,
+//                       @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+//                       @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+//        IPage<UserDto> userDtos = sysUserService.list(loginName, roleId, enable, pageNumber, pageSize);
+//        return ResultUtil.ok(userDtos);
+//    }
+//
+//    /**
+//     * 查询
+//     *
+//     * @param realName
+//     * @param enable
+//     * @return
+//     */
+//    @ApiOperation(value = "查询")
+//    @RequestMapping(value = "/list_customer", method = RequestMethod.POST)
+//    public Result listCustomer(@RequestParam(value = "realName", required = false) String realName,
+//                               @RequestParam(value = "enable", required = false) Boolean enable,
+//                               @RequestParam(value = "pageNumber", required = true) Integer pageNumber,
+//                               @RequestParam(value = "pageSize", required = true) Integer pageSize) {
+//        IPage<UserDto> userDtos = sysUserService.listCustomer(realName, enable, pageNumber, pageSize);
+//        return ResultUtil.ok(userDtos);
+//    }
+//
+//    /**
+//     * 根据科目查询命题老师
+//     *
+//     * @param courseCode
+//     * @param param
+//     * @return
+//     */
+//    @ApiOperation(value = "根据科目查询命题老师")
+//    @RequestMapping(value = "/user_list", method = RequestMethod.POST)
+//    public Result userQuery(@RequestParam(value = "courseCode", required = false) String courseCode,
+//                            @RequestParam(value = "param", required = false) String param) {
+//        List<BlurryUserDto> list = sysUserService.listUser(courseCode, param);
+//        return ResultUtil.ok(list);
+//    }
+//
+//    /**
+//     * 新增/修改
+//     *
+//     * @param userSaveParams
+//     * @return
+//     */
+//    @ApiOperation(value = "新增/修改")
+//    @RequestMapping(value = "/save", method = RequestMethod.POST)
+//    public Result save(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) {
+//        if (bindingResult.hasErrors()) {
+//            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+//        }
+//        return ResultUtil.ok(sysUserService.saveUser(userSaveParams));
+//    }
+//
+//    /**
+//     * 新增客服
+//     *
+//     * @param userSaveParams
+//     * @return
+//     */
+//    @ApiOperation(value = "新增客服")
+//    @RequestMapping(value = "/save_customer", method = RequestMethod.POST)
+//    public Result saveCustomer(@ApiParam(value = "用户信息", required = true) @Valid @RequestBody UserSaveParams userSaveParams, BindingResult bindingResult) {
+//        if (bindingResult.hasErrors()) {
+//            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+//        }
+//        return ResultUtil.ok(sysUserService.saveCustomer(userSaveParams));
+//    }
+//
+//    /**
+//     * 启用/禁用
+//     *
+//     * @param user
+//     * @return
+//     */
+//    @ApiOperation(value = "启用/禁用")
+//    @RequestMapping(value = "/enable", method = RequestMethod.POST)
+//    public Result enable(@RequestBody SysUser user) throws NoSuchAlgorithmException {
+//        return ResultUtil.ok(sysUserService.enable(user));
+//    }
+//
+//    /**
+//     * 重置密码
+//     *
+//     * @param user
+//     * @return
+//     */
+//    @ApiOperation(value = "重置密码")
+//    @RequestMapping(value = "/reset_password", method = RequestMethod.POST)
+//    public Result resetPassword(@RequestBody SysUser user) throws NoSuchAlgorithmException {
+//        return ResultUtil.ok(sysUserService.resetPassword(user.getId()));
+//    }
+//
+//    /**
+//     * 修改密码
+//     *
+//     * @return
+//     */
+//    @ApiOperation(value = "修改密码")
+//    @RequestMapping(value = "/update_password", method = RequestMethod.POST)
+//    public Result updatePassword(@RequestBody SysUser user) throws NoSuchAlgorithmException {
+//        return ResultUtil.ok(sysUserService.updatePassword(user));
+//    }
+//
+//    /**
+//     * 绑定角色
+//     *
+//     * @param sysUser
+//     * @return
+//     */
+//    @ApiOperation(value = "绑定角色")
+//    @RequestMapping(value = "/bind_roles", method = RequestMethod.POST)
+//    public Result bindRoles(@RequestBody SysUser sysUser) {
+//        boolean isSuccess = sysUserService.bindRoles(sysUser);
+//        return ResultUtil.ok(isSuccess);
+//    }
+//}
+//

+ 66 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/MenuDto.java

@@ -1,19 +1,81 @@
 package com.qmth.teachcloud.common.bean.dto;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.enums.PrivilegeEnum;
+
+import java.io.Serializable;
+import java.util.Objects;
+
 /**
  * @Date: 2021/4/13.
  */
-public class MenuDto {
+public class MenuDto implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
 
-    private String id;
     private String name;
+
     private String url;
 
-    public String getId() {
+    private PrivilegeEnum type;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long parentId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    private Integer sequence;
+
+    private Boolean enable;
+
+    public Integer getSequence() {
+        return sequence;
+    }
+
+    public void setSequence(Integer sequence) {
+        this.sequence = sequence;
+    }
+
+    public Boolean getEnable() {
+        return enable;
+    }
+
+    public void setEnable(Boolean enable) {
+        this.enable = enable;
+    }
+
+    public PrivilegeEnum getType() {
+        return type;
+    }
+
+    public void setType(PrivilegeEnum type) {
+        this.type = type;
+    }
+
+    public Long getParentId() {
+        return Objects.isNull(parentId) ? -1L : parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getId() {
         return id;
     }
 
-    public void setId(String id) {
+    public void setId(Long id) {
         this.id = id;
     }
 

+ 73 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/dto/MenuPrivilegeDto.java

@@ -0,0 +1,73 @@
+package com.qmth.teachcloud.common.bean.dto;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @Description: 菜单权限dto
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/7/28
+ */
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class MenuPrivilegeDto extends MenuDto implements Serializable {
+
+    @ApiModelProperty(value = "url权限集合")
+    List<MenuDto> urls;
+
+    @ApiModelProperty(value = "按钮权限集合")
+    List<MenuDto> buttons;
+
+    @ApiModelProperty(value = "链接权限集合")
+    List<MenuDto> links;
+
+    @ApiModelProperty(value = "数据列表权限集合")
+    List<MenuDto> lists;
+
+    @ApiModelProperty(value = "查询列表权限集合")
+    List<MenuDto> conditions;
+
+    public List<MenuDto> getUrls() {
+        return urls;
+    }
+
+    public void setUrls(List<MenuDto> urls) {
+        this.urls = urls;
+    }
+
+    public List<MenuDto> getButtons() {
+        return buttons;
+    }
+
+    public void setButtons(List<MenuDto> buttons) {
+        this.buttons = buttons;
+    }
+
+    public List<MenuDto> getLinks() {
+        return links;
+    }
+
+    public void setLinks(List<MenuDto> links) {
+        this.links = links;
+    }
+
+    public List<MenuDto> getLists() {
+        return lists;
+    }
+
+    public void setLists(List<MenuDto> lists) {
+        this.lists = lists;
+    }
+
+    public List<MenuDto> getConditions() {
+        return conditions;
+    }
+
+    public void setConditions(List<MenuDto> conditions) {
+        this.conditions = conditions;
+    }
+}

+ 4 - 4
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/LoginResult.java

@@ -46,7 +46,7 @@ public class LoginResult implements Serializable {
     OrgNativeBean orgInfo;
 
     @ApiModelProperty(name = "角色集合")
-    private Set<RoleTypeEnum> roleList;
+    private Set<String> roleList;
 
     @ApiModelProperty(name = "服务器时间戳")
     private long time;
@@ -58,7 +58,7 @@ public class LoginResult implements Serializable {
 
     }
 
-    public LoginResult(SysUser sysUser, String sessionId, String accessToken, Set<RoleTypeEnum> roleList, AppSourceEnum appSource) {
+    public LoginResult(SysUser sysUser, String sessionId, String accessToken, Set<String> roleList, AppSourceEnum appSource) {
         this.id = sysUser.getId();
         ServletUtil.setRequestId(Arrays.asList(id));
         this.loginName = sysUser.getLoginName();
@@ -87,11 +87,11 @@ public class LoginResult implements Serializable {
         this.appSource = appSource;
     }
 
-    public Set<RoleTypeEnum> getRoleList() {
+    public Set<String> getRoleList() {
         return roleList;
     }
 
-    public void setRoleList(Set<RoleTypeEnum> roleList) {
+    public void setRoleList(Set<String> roleList) {
         this.roleList = roleList;
     }
 

+ 65 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/MenuResult.java

@@ -0,0 +1,65 @@
+package com.qmth.teachcloud.common.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.bean.dto.MenuDto;
+import com.qmth.teachcloud.common.bean.dto.MenuPrivilegeDto;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @Description: 菜单返回结果
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/7/28
+ */
+public class MenuResult implements Serializable {
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "用户id")
+    Long userId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "角色名称")
+    Set<String> roleNames;
+
+    @ApiModelProperty(value = "权限集合")
+    List<MenuPrivilegeDto> privileges;
+
+    public MenuResult() {
+
+    }
+
+    public MenuResult(Long userId, Set<String> roleNames) {
+        this.userId = userId;
+        this.roleNames = roleNames;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Set<String> getRoleNames() {
+        return roleNames;
+    }
+
+    public void setRoleNames(Set<String> roleNames) {
+        this.roleNames = roleNames;
+    }
+
+    public List<MenuPrivilegeDto> getPrivileges() {
+        return privileges;
+    }
+
+    public void setPrivileges(List<MenuPrivilegeDto> privileges) {
+        this.privileges = privileges;
+    }
+}

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

@@ -89,6 +89,7 @@ public class SystemConstant {
     public static final String ROLE_PRIVILEGE_CACHE = "role:privilege:cache";
     public static final String USER_ROLE_PRIVILEGE_CACHE = "user:role:privilege:cache";
     public static final String PDF_CACHE = "pdf:cache";
+    public static final String ROLE_CACHE = "role:cache";
 
     /**
      * 报表缓存

+ 0 - 12
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysPrivilege.java

@@ -35,10 +35,6 @@ public class SysPrivilege extends BaseEntity implements Serializable {
     @TableField("org_id")
     private Long orgId;
 
-    /*@ApiModelProperty(value = "是否公用,0:否,1:是")
-    @TableField("common")
-    private Boolean common;*/
-
     @ApiModelProperty(value = "名称")
     @TableField(value = "name")
     private String name;
@@ -88,14 +84,6 @@ public class SysPrivilege extends BaseEntity implements Serializable {
         this.orgId = orgId;
     }
 
-    /*public Boolean getCommon() {
-        return common;
-    }
-
-    public void setCommon(Boolean common) {
-        this.common = common;
-    }*/
-
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 4 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysRole.java

@@ -8,6 +8,8 @@ import com.qmth.teachcloud.common.base.BaseEntity;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
 import java.io.Serializable;
 
 /**
@@ -36,6 +38,7 @@ public class SysRole extends BaseEntity implements Serializable {
     /**
      * 角色名称
      */
+    @NotBlank(message = "角色名称不能为空")
     private String name;
 
     /**
@@ -50,6 +53,7 @@ public class SysRole extends BaseEntity implements Serializable {
 
     @JsonSerialize(using = ToStringSerializer.class)
     @TableField(exist = false)
+    @NotEmpty(message = "权限集合不能为空")
     private Long[] privilegeIds;
 
     public static long getSerialVersionUID() {

+ 1 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysRolePrivilege.java

@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.util.Set;
 
 /**
  * <p>

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/SysUserRole.java

@@ -9,6 +9,8 @@ import com.qmth.teachcloud.common.contant.SystemConstant;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.io.Serializable;
+import java.util.List;
+import java.util.Set;
 
 /**
  * <p>
@@ -55,6 +57,12 @@ public class SysUserRole implements Serializable {
 
     }
 
+    public SysUserRole(Long userId, Long roleId) {
+        this.id = SystemConstant.getDbUuid();
+        this.userId = userId;
+        this.roleId = roleId;
+    }
+
     public SysUserRole(Long userId, Long roleId, Long privilegeId) {
         this.id = SystemConstant.getDbUuid();
         this.userId = userId;

+ 75 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TBDepartment.java

@@ -0,0 +1,75 @@
+package com.qmth.teachcloud.common.entity;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.teachcloud.common.base.BaseEntity;
+import com.qmth.teachcloud.common.enums.DepartmentTypeEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 部门设置表
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-07-29
+ */
+@ApiModel(value = "TBDepartment对象", description = "部门设置表")
+public class TBDepartment extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "学校id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long schoolId;
+
+    @ApiModelProperty(value = "机构id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long orgId;
+
+    @ApiModelProperty(value = "用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+
+    @ApiModelProperty(value = "类型,MANAGER:主管,MEMBER:成员")
+    private DepartmentTypeEnum type;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Long getSchoolId() {
+        return schoolId;
+    }
+
+    public void setSchoolId(Long schoolId) {
+        this.schoolId = schoolId;
+    }
+
+    public Long getOrgId() {
+        return orgId;
+    }
+
+    public void setOrgId(Long orgId) {
+        this.orgId = orgId;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public DepartmentTypeEnum getType() {
+        return type;
+    }
+
+    public void setType(DepartmentTypeEnum type) {
+        this.type = type;
+    }
+}

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/entity/TBSession.java

@@ -95,7 +95,8 @@ public class TBSession implements Serializable {
 
     }
 
-    public TBSession(String id, String identity, String type, String source, String platform, String deviceId, String address, String accessToken, Long expireTime, AppSourceEnum appSource) {
+    public TBSession(Long schoolId, String id, String identity, String type, String source, String platform, String deviceId, String address, String accessToken, Long expireTime, AppSourceEnum appSource) {
+        this.schoolId = schoolId;
         this.id = id;
         this.identity = identity;
         this.type = type;

+ 42 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/DepartmentTypeEnum.java

@@ -0,0 +1,42 @@
+package com.qmth.teachcloud.common.enums;
+
+import java.util.Objects;
+
+/**
+ * @Description: 部门类型设置 enum
+ * @Param:
+ * @return:
+ * @Author: wangliang
+ * @Date: 2021/7/29
+ */
+public enum DepartmentTypeEnum {
+
+    MANAGER("主管"),
+
+    MEMBER("成员");
+
+    private String title;
+
+    private DepartmentTypeEnum(String title) {
+        this.title = title;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    /**
+     * 状态转换 toName
+     *
+     * @param title
+     * @return
+     */
+    public static String convertToName(String title) {
+        for (DepartmentTypeEnum e : DepartmentTypeEnum.values()) {
+            if (Objects.equals(title, e.getTitle())) {
+                return e.name();
+            }
+        }
+        return null;
+    }
+}

+ 3 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/enums/FieldUniqueEnum.java

@@ -11,7 +11,9 @@ import java.util.Objects;
  */
 public enum FieldUniqueEnum {
 
-    user_schoolId_orgId_loginName_idx("登录名");
+    user_schoolId_orgId_loginName_idx("登录名"),
+
+    schoolId_name_idx("角色名");
 
     private String title;
 

+ 3 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserRoleMapper.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.qmth.teachcloud.common.bean.dto.MenuDto;
 import com.qmth.teachcloud.common.entity.SysRole;
 import com.qmth.teachcloud.common.entity.SysUserRole;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -19,7 +20,7 @@ public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
 
     List<SysRole> listRoleByUserId(Long userId);
 
-    List<MenuDto> listByUserId(Long userId);
+    List<MenuDto> listByUserId(@Param("userId") Long userId, @Param("schoolId") Long schoolId);
 
-    List<MenuDto> listAll();
+    List<MenuDto> listAll(@Param("schoolId") Long schoolId);
 }

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/TBDepartmentMapper.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.common.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qmth.teachcloud.common.entity.TBDepartment;
+
+/**
+ * <p>
+ * 部门设置表 Mapper 接口
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-07-29
+ */
+public interface TBDepartmentMapper extends BaseMapper<TBDepartment> {
+
+}

+ 24 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/CacheService.java

@@ -5,6 +5,7 @@ import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 
 import java.util.List;
+import java.util.Set;
 
 /**
  * @Description: 缓存操作service
@@ -15,6 +16,29 @@ import java.util.List;
  */
 public interface CacheService {
 
+    /**
+     * 添加角色缓存
+     *
+     * @param roleId
+     * @return
+     */
+    public SysRole roleCache(Long roleId);
+
+    /**
+     * 修改角色缓存
+     *
+     * @param roleId
+     * @return
+     */
+    public SysRole updateRoleCache(Long roleId);
+
+    /**
+     * 删除角色缓存
+     *
+     * @param roleId
+     */
+    public void removeRoleCache(Long roleId);
+
     /**
      * 添加用户缓存
      *

+ 8 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysPrivilegeService.java

@@ -25,4 +25,12 @@ public interface SysPrivilegeService extends IService<SysPrivilege> {
     List<String> getRolePrivileges(Long roleId);
 
     List<PrivilegeDto> listPrivilegeTreeAuth();
+
+    /**
+     * 是否包含某个权限
+     *
+     * @param urls
+     * @return
+     */
+    boolean existsPrivilege(String... urls);
 }

+ 11 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysRoleService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.entity.SysRole;
 
+import java.security.NoSuchAlgorithmException;
 import java.util.List;
 
 /**
@@ -18,9 +19,18 @@ public interface SysRoleService extends IService<SysRole> {
 
     IPage<SysRole> list(String name, Boolean enable, Integer pageNumber, Integer pageSize);
 
+    @Deprecated
     boolean saveRole(SysRole role);
 
-    boolean enable(SysRole role);
+    /**
+     * 新增角色
+     *
+     * @param role
+     * @return
+     */
+    boolean saveRoleNew(SysRole role);
+
+    boolean enable(SysRole role) throws NoSuchAlgorithmException;
 
     boolean remove(Long id);
 

+ 2 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserRoleService.java

@@ -2,6 +2,7 @@ package com.qmth.teachcloud.common.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.teachcloud.common.bean.dto.MenuDto;
+import com.qmth.teachcloud.common.bean.result.MenuResult;
 import com.qmth.teachcloud.common.entity.SysRole;
 import com.qmth.teachcloud.common.entity.SysUserRole;
 
@@ -23,7 +24,7 @@ public interface SysUserRoleService extends IService<SysUserRole> {
 
     void removeByUserId(Long id);
 
-    List<MenuDto> listByUserId();
+    MenuResult listByUserId();
 
     void rebindPrivileges(Long id);
 }

+ 16 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TBDepartmentService.java

@@ -0,0 +1,16 @@
+package com.qmth.teachcloud.common.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.teachcloud.common.entity.TBDepartment;
+
+/**
+ * <p>
+ * 部门设置表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-07-29
+ */
+public interface TBDepartmentService extends IService<TBDepartment> {
+
+}

+ 9 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/TeachcloudCommonService.java

@@ -35,8 +35,17 @@ public interface TeachcloudCommonService {
      * @param sysUser
      * @param roleId
      */
+    @Deprecated
     public void addUserRolePrivilege(SysUser sysUser, Long roleId);
 
+    /**
+     * 新增用户权限
+     *
+     * @param sysUser
+     * @param roleIds
+     */
+    public void addUserRolePrivilege(SysUser sysUser, Long[] roleIds);
+
     /**
      * 获取用户角色
      *

+ 40 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/CacheServiceImpl.java

@@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @Description: 缓存操作serviceImpl 实现类
@@ -39,6 +40,45 @@ public class CacheServiceImpl implements CacheService {
     @Resource
     SysOrgService sysOrgService;
 
+    @Resource
+    SysRoleService sysRoleService;
+
+    /**
+     * 添加角色缓存
+     *
+     * @param roleId
+     * @return
+     */
+    @Override
+    @Cacheable(value = SystemConstant.ROLE_CACHE, key = "#p0")
+    public SysRole roleCache(Long roleId) {
+        return sysRoleService.getById(roleId);
+    }
+
+    /**
+     * 修改角色缓存
+     *
+     * @param roleId
+     * @return
+     */
+    @Override
+    @CachePut(value = SystemConstant.ROLE_CACHE, key = "#p0")
+    public SysRole updateRoleCache(Long roleId) {
+        return sysRoleService.getById(roleId);
+    }
+
+    /**
+     * 删除角色缓存
+     *
+     * @param roleId
+     * @return
+     */
+    @Override
+    @CacheEvict(value = SystemConstant.ROLE_CACHE, key = "#p0")
+    public void removeRoleCache(Long roleId) {
+
+    }
+
     /**
      * 添加用户缓存
      *

+ 19 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysPrivilegeServiceImpl.java

@@ -6,11 +6,14 @@ import com.qmth.teachcloud.common.bean.dto.PrivilegeDto;
 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.SysUser;
 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.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -146,4 +149,20 @@ public class SysPrivilegeServiceImpl extends ServiceImpl<SysPrivilegeMapper, Sys
 
         return new ArrayList<>(map.values());
     }
+
+    /**
+     * 是否包含某个权限
+     *
+     * @param urls
+     * @return
+     */
+    @Override
+    public boolean existsPrivilege(String... urls) {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
+        sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getUrl, urls)
+                .eq(SysPrivilege::getType, PrivilegeEnum.URL)
+                .eq(SysPrivilege::getSchoolId, sysUser.getSchoolId());
+        return this.count(sysPrivilegeQueryWrapper) > 0 ? true : false;
+    }
 }

+ 85 - 10
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysRoleServiceImpl.java

@@ -5,21 +5,27 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.SysRole;
+import com.qmth.teachcloud.common.entity.SysRolePrivilege;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUserRole;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
+import com.qmth.teachcloud.common.enums.FieldUniqueEnum;
 import com.qmth.teachcloud.common.mapper.SysRoleMapper;
-import com.qmth.teachcloud.common.service.CacheService;
-import com.qmth.teachcloud.common.service.SysRolePrivilegeService;
-import com.qmth.teachcloud.common.service.SysRoleService;
-import com.qmth.teachcloud.common.service.SysUserRoleService;
+import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import sun.misc.Request;
 
+import javax.annotation.Resource;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -44,15 +50,21 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     @Autowired
     private CacheService cacheService;
 
+    @Resource
+    SysRoleService sysRoleService;
+
+    @Resource
+    TeachcloudCommonService commonService;
+
     @Override
     public IPage<SysRole> list(String name, Boolean enable, Integer pageNumber, Integer pageSize) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
-        Page<SysRole> page = new Page<>(pageNumber, pageSize);
-        return this.baseMapper.listPage(page, schoolId, SystemConstant.translateSpecificSign(name), enable);
+        return this.baseMapper.listPage(new Page<>(pageNumber, pageSize), schoolId, SystemConstant.translateSpecificSign(name), enable);
     }
 
     @Transactional
     @Override
+    @Deprecated
     public boolean saveRole(SysRole role) {
         Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString());
         role.setSchoolId(schoolId);
@@ -104,11 +116,72 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         return isSuccess;
     }
 
+    /**
+     * 新增角色
+     *
+     * @param role
+     * @return
+     */
+    @Transactional
     @Override
-    public boolean enable(SysRole role) {
+    public boolean saveRoleNew(SysRole role) {
+        try {
+            SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+            Long schoolId = Objects.nonNull(ServletUtil.getRequestHeaderSchoolIdByNotVaild()) ? Long.valueOf(ServletUtil.getRequestHeaderSchoolIdByNotVaild().toString()) : null;
+            if (Objects.isNull(schoolId) && Objects.isNull(role.getSchoolId())) {
+                role.setSchoolId(sysUser.getSchoolId());
+            } else if (Objects.nonNull(schoolId)) {
+                role.setSchoolId(schoolId);
+            }
+            if (Objects.nonNull(role.getId())) {//编辑
+                List<SysRolePrivilege> sysRolePrivilegeList = cacheService.rolePrivilegeCache(role.getId());
+                int count = (int) sysRolePrivilegeList.stream().filter(s -> Arrays.asList(role.getPrivilegeIds()).contains(s.getPrivilegeId())).count();
+                role.setUpdateId(sysUser.getId());
+                sysRoleService.updateById(role);
+                cacheService.updateRoleCache(role.getId());
+                if (count != sysRolePrivilegeList.size() || count != role.getPrivilegeIds().length) {
+                    sysRolePrivilegeService.removeByRoleId(role.getId());
+                    sysRolePrivilegeService.saveBatch(role);//角色权限
+                    cacheService.updateRolePrivilegeCache(role.getId());
+                    //绑定该角色的用户都需要清除鉴权缓存
+                    List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(role.getId());
+                    for (SysUserRole s : sysUserRoleList) {
+                        commonService.removeUserInfo(s.getUserId());
+                    }
+                }
+            } else {
+                role.setCreateId(sysUser.getId());
+                sysRoleService.save(role);
+                sysRolePrivilegeService.saveBatch(role);//角色权限
+            }
+        } catch (Exception e) {
+            if (e instanceof DuplicateKeyException) {
+                String errorColumn = e.getCause().toString();
+                String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", "");
+                throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入");
+            } else if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public boolean enable(SysRole role) throws NoSuchAlgorithmException {
         UpdateWrapper<SysRole> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(SysRole::getEnable, role.getEnable()).eq(SysRole::getId, role.getId());
-        return this.update(updateWrapper);
+        this.update(updateWrapper);
+        cacheService.updateRoleCache(role.getId());
+        //如果状态为禁用,需要踢下线重新登录
+        if (!role.getEnable()) {
+            List<SysUserRole> sysUserRoleList = sysUserRoleService.listByRoleId(role.getId());
+            for (SysUserRole s : sysUserRoleList) {
+                commonService.removeUserInfo(s.getUserId());
+            }
+        }
+        return true;
     }
 
     @Transactional
@@ -119,10 +192,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         if (userRoleList != null && userRoleList.size() > 0) {
             throw ExceptionResultEnum.ERROR.exception("用户绑定,不能删除");
         }
-
         //删除权限
         sysRolePrivilegeService.removeByRoleId(id);
-        return this.removeById(id);
+        this.removeById(id);
+        cacheService.removeRoleCache(id);
+        cacheService.removeRolePrivilegeCache(id);
+        return true;
     }
 
     @Override

+ 70 - 13
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserRoleServiceImpl.java

@@ -3,22 +3,30 @@ package com.qmth.teachcloud.common.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.gson.Gson;
+import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.dto.MenuDto;
+import com.qmth.teachcloud.common.bean.dto.MenuPrivilegeDto;
+import com.qmth.teachcloud.common.bean.result.MenuResult;
 import com.qmth.teachcloud.common.entity.SysRole;
 import com.qmth.teachcloud.common.entity.SysRolePrivilege;
 import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.SysUserRole;
+import com.qmth.teachcloud.common.enums.PrivilegeEnum;
 import com.qmth.teachcloud.common.enums.RoleTypeEnum;
 import com.qmth.teachcloud.common.mapper.SysUserRoleMapper;
+import com.qmth.teachcloud.common.service.CacheService;
 import com.qmth.teachcloud.common.service.SysRolePrivilegeService;
-import com.qmth.teachcloud.common.service.SysRoleService;
 import com.qmth.teachcloud.common.service.SysUserRoleService;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
 
+import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -33,11 +41,8 @@ import java.util.stream.Collectors;
 @Service
 public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
 
-    @Autowired
-    private SysRoleService sysRoleService;
-
-    @Autowired
-    private SysRolePrivilegeService sysRolePrivilegeService;
+    @Resource
+    CacheService cacheService;
 
     @Override
     public List<SysUserRole> listByRoleId(Long id) {
@@ -59,15 +64,67 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
     }
 
     @Override
-    public List<MenuDto> listByUserId() {
+    public MenuResult listByUserId() {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        List<SysRole> sysRole = sysRoleService.listRolesByUserId(sysUser.getId());
-        for (SysRole role : sysRole) {
-            if (RoleTypeEnum.ADMIN.name().equals(role.getType().name())) {
-                return this.baseMapper.listAll();
+        AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
+        List<MenuDto> menuDtoList = null;
+        for (SysRole role : authBean.getRoleList()) {
+            if (Objects.nonNull(role.getType()) && RoleTypeEnum.ADMIN.name().equals(role.getType().name())) {
+                menuDtoList = this.baseMapper.listAll(Objects.isNull(sysUser.getSchoolId()) ? (Long) ServletUtil.getRequestSchoolByNotVaild() : sysUser.getSchoolId());
+                break;
+            }
+        }
+        if (Objects.isNull(menuDtoList)) {
+            menuDtoList = this.baseMapper.listByUserId(sysUser.getId(), Objects.isNull(sysUser.getSchoolId()) ? (Long) ServletUtil.getRequestSchoolByNotVaild() : sysUser.getSchoolId());
+        }
+        LinkedMultiValueMap<Long, MenuDto> linkedMultiValueMap = new LinkedMultiValueMap<>();
+        List<MenuPrivilegeDto> menuPrivilegeDtoList = new ArrayList<>();
+        Gson gson = new Gson();
+        for (MenuDto m : menuDtoList) {
+            if (Objects.isNull(m.getParentId()) || m.getType() == PrivilegeEnum.MENU) {
+                menuPrivilegeDtoList.add(gson.fromJson(gson.toJson(m), MenuPrivilegeDto.class));
+            } 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);
+                }
+            }
+        }
+        for (MenuPrivilegeDto m : menuPrivilegeDtoList) {
+            List<MenuDto> menuDtos = linkedMultiValueMap.get(m.getId());
+            List<MenuDto> urls = null, buttons = null, links = null, lists = null, conditions = null;
+            if (Objects.nonNull(menuDtos)) {
+                for (MenuDto menuDto : menuDtos) {
+                    if (menuDto.getType() == PrivilegeEnum.BUTTON) {
+                        buttons = Objects.isNull(buttons) ? new ArrayList<>() : buttons;
+                        buttons.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        m.setButtons(buttons);
+                    } else if (menuDto.getType() == PrivilegeEnum.LINK) {
+                        links = Objects.isNull(links) ? new ArrayList<>() : links;
+                        links.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        m.setLinks(links);
+                    } else if (menuDto.getType() == PrivilegeEnum.URL) {
+                        urls = Objects.isNull(urls) ? new ArrayList<>() : urls;
+                        urls.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        m.setUrls(urls);
+                    } else if (menuDto.getType() == PrivilegeEnum.LIST) {
+                        lists = Objects.isNull(lists) ? new ArrayList<>() : lists;
+                        lists.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        m.setLists(lists);
+                    } else if (menuDto.getType() == PrivilegeEnum.CONDITION) {
+                        conditions = Objects.isNull(conditions) ? new ArrayList<>() : conditions;
+                        conditions.add(gson.fromJson(gson.toJson(menuDto), MenuPrivilegeDto.class));
+                        m.setConditions(conditions);
+                    }
+                }
             }
         }
-        return this.baseMapper.listByUserId(sysUser.getId());
+        MenuResult menuResult = new MenuResult(sysUser.getId(), authBean.getRoleList().stream().map(s -> s.getName()).collect(Collectors.toSet()));
+        menuResult.setPrivileges(menuPrivilegeDtoList);
+        return menuResult;
     }
 
     @Override
@@ -83,7 +140,7 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
         for (Long userId : userIds) {
             List<SysRole> sysRoles = this.listRoleByUserId(userId);
             for (SysRole role : sysRoles) {
-                List<SysRolePrivilege> rolePrivileges = sysRolePrivilegeService.listByRoleId(role.getId());
+                List<SysRolePrivilege> rolePrivileges = cacheService.rolePrivilegeCache(role.getId());
                 for (SysRolePrivilege rolePrivilege : rolePrivileges) {
                     SysUserRole userRole = new SysUserRole();
                     userRole.setUserId(userId);

+ 31 - 53
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -101,7 +101,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public boolean enable(SysUser user) throws NoSuchAlgorithmException {
         UpdateWrapper<SysUser> updateWrapper = new UpdateWrapper<>();
         updateWrapper.lambda().set(SysUser::getEnable, user.getEnable()).eq(SysUser::getId, user.getId());
-
+        cacheService.updateUserCache(user.getId());
         boolean success = this.update(updateWrapper);
         //如果状态为禁用,需要踢下线重新登录
         if (!user.getEnable()) {
@@ -169,18 +169,18 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             }
         }
 
-        // 角色里是否有考务老师角色
-        List<SysRole> sysRoles = sysRoleService.list(roleIds, RoleTypeEnum.QUESTION_TEACHER.name());
-        if (sysRoles != null && sysRoles.size() > 0) {
-            Long[] courseIds = sysUser.getCourseIds();
-            if (courseIds.length == 0) {
-                throw ExceptionResultEnum.ERROR.exception("请选择课程");
-            }
-
-            basicUserCourseService.removeByUserId(sysUser.getId());
-            basicUserCourseService.saveBatch(sysUser);
-
-        }
+//        // 角色里是否有考务老师角色
+//        List<SysRole> sysRoles = sysRoleService.list(roleIds, RoleTypeEnum.QUESTION_TEACHER.name());
+//        if (sysRoles != null && sysRoles.size() > 0) {
+//            Long[] courseIds = sysUser.getCourseIds();
+//            if (courseIds.length == 0) {
+//                throw ExceptionResultEnum.ERROR.exception("请选择课程");
+//            }
+//
+//            basicUserCourseService.removeByUserId(sysUser.getId());
+//            basicUserCourseService.saveBatch(sysUser);
+//
+//        }
         return sysUserRoleService.saveBatch(list);
     }
 
@@ -274,24 +274,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             userSaveParams.setSchoolId(schoolId);
             SysUser sysUser = gson.fromJson(gson.toJson(userSaveParams), SysUser.class);
             if (Objects.isNull(sysUser.getId())) {//新增用户
-                // 登录名是否唯一
-                QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
-                if (Objects.isNull(schoolId)) {
-                    queryWrapper.lambda().isNull(SysUser::getSchoolId);
-                } else {
-                    queryWrapper.lambda().eq(SysUser::getSchoolId, schoolId);
-                }
-                queryWrapper.lambda().eq(SysUser::getLoginName, sysUser.getLoginName());
-                SysUser user = sysUserService.getOne(queryWrapper);
-                if (user != null) {
-                    throw ExceptionResultEnum.ERROR.exception("用户名已存在");
-                }
-
                 sysUser.setInsertInfo(requestUser.getId());
                 sysUserService.save(sysUser);
-                for (Long roleId : userSaveParams.getRoleIds()) {
-                    commonService.addUserRolePrivilege(sysUser, roleId);
-                }
+                commonService.addUserRolePrivilege(sysUser, userSaveParams.getRoleIds());
             } else {//修改用户
                 List<SysUserRole> sysUserRoleList = cacheService.userRolePrivilegeCache(sysUser.getId());
                 List<Long> userRolesList = Arrays.asList(userSaveParams.getRoleIds());
@@ -300,44 +285,38 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 SysUser dbUser = sysUserService.getById(sysUser.getId());
                 sysUser.setUpdateInfo(requestUser.getId());
                 sysUserService.updateById(sysUser);
-                List<SysRole> list = sysUserRoleService.listRoleByUserId(sysUser.getId());
-                boolean containsQuestionTeacher = list.stream().filter(m -> RoleTypeEnum.SCHOOL_ADMIN.equals(m.getType())).count() > 0;
-                if (containsQuestionTeacher || count == 0 || dbUserRolesList.size() != userRolesList.size()) {
+                //如果修改了角色,需要重新登录
+                if (count == 0 || dbUserRolesList.size() != userRolesList.size()) {
                     QueryWrapper<SysUserRole> sysUserRoleQueryWrapper = new QueryWrapper<>();
                     sysUserRoleQueryWrapper.lambda().eq(SysUserRole::getUserId, sysUser.getId());
                     sysUserRoleService.remove(sysUserRoleQueryWrapper);
 
                     cacheService.removeUserRolePrivilegeCache(sysUser.getId());
-                    for (Long roleId : userSaveParams.getRoleIds()) {
-                        commonService.addUserRolePrivilege(sysUser, roleId);
-                    }
-                }
-                //如果修改了角色,需要重新登录
-                if (count == 0 || dbUserRolesList.size() != userRolesList.size()) {
+                    commonService.addUserRolePrivilege(sysUser, userSaveParams.getRoleIds());
                     commonService.removeUserInfo(sysUser.getId());
                 }
                 //如果修改了机构或手机号,需更新用户缓存
                 if (Objects.nonNull(dbUser.getOrgId())) {
-                    if (containsQuestionTeacher || dbUser.getOrgId().longValue() != sysUser.getOrgId().longValue()
+                    if (dbUser.getOrgId().longValue() != sysUser.getOrgId().longValue()
                             || !Objects.equals(dbUser.getMobileNumber(), sysUser.getMobileNumber())) {
                         cacheService.updateUserCache(sysUser.getId());
                         cacheService.updateUserAuthCache(sysUser.getId());
                     }
                 }
             }
-            //用户科目全量删除全量增加
-            QueryWrapper<BasicUserCourse> basicUserCourseQueryWrapper = new QueryWrapper<>();
-            basicUserCourseQueryWrapper.lambda().eq(BasicUserCourse::getUserId, sysUser.getId());
-            basicUserCourseService.remove(basicUserCourseQueryWrapper);
-
-            List<SysRole> sysRoles = sysRoleService.list(sysUser.getRoleIds(), RoleTypeEnum.QUESTION_TEACHER.name());
-            if (sysRoles != null && sysRoles.size() > 0) {
-                Long[] courseIds = sysUser.getCourseIds();
-                if (courseIds.length == 0) {
-                    throw ExceptionResultEnum.ERROR.exception("请选择课程");
-                }
-                basicUserCourseService.saveBatch(sysUser);
-            }
+//            //用户科目全量删除全量增加
+//            QueryWrapper<BasicUserCourse> basicUserCourseQueryWrapper = new QueryWrapper<>();
+//            basicUserCourseQueryWrapper.lambda().eq(BasicUserCourse::getUserId, sysUser.getId());
+//            basicUserCourseService.remove(basicUserCourseQueryWrapper);
+//
+//            List<SysRole> sysRoles = sysRoleService.list(sysUser.getRoleIds(), RoleTypeEnum.QUESTION_TEACHER.name());
+//            if (sysRoles != null && sysRoles.size() > 0) {
+//                Long[] courseIds = sysUser.getCourseIds();
+//                if (courseIds.length == 0) {
+//                    throw ExceptionResultEnum.ERROR.exception("请选择课程");
+//                }
+//                basicUserCourseService.saveBatch(sysUser);
+//            }
         } catch (Exception e) {
             log.error("请求出错", e);
             isSuccess = false;
@@ -357,7 +336,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
 
     /**
      * 临时保存用户不鉴权
-     *
      * @param userSaveParams 用户参数
      * @return 结果
      */

+ 20 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TBDepartmentServiceImpl.java

@@ -0,0 +1,20 @@
+package com.qmth.teachcloud.common.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.teachcloud.common.entity.TBDepartment;
+import com.qmth.teachcloud.common.mapper.TBDepartmentMapper;
+import com.qmth.teachcloud.common.service.TBDepartmentService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 部门设置表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2021-07-29
+ */
+@Service
+public class TBDepartmentServiceImpl extends ServiceImpl<TBDepartmentMapper, TBDepartment> implements TBDepartmentService {
+
+}

+ 34 - 13
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -93,6 +93,7 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
      * @param sysUser
      * @param roleId
      */
+    @Deprecated
     @Override
     public void addUserRolePrivilege(SysUser sysUser, Long roleId) {
         List<SysRolePrivilege> sysRolePrivilegeList = cacheService.rolePrivilegeCache(roleId);
@@ -103,6 +104,22 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         sysUserRoleService.saveBatch(sysUserRoleList);
     }
 
+    /**
+     * 新增用户权限
+     *
+     * @param sysUser
+     * @param roleIds
+     */
+    @Override
+    public void addUserRolePrivilege(SysUser sysUser, Long[] roleIds) {
+        List<SysUserRole> sysUserRoleList = new ArrayList<>();
+        for (int i = 0; i < roleIds.length; i++) {
+            sysUserRoleList.add(new SysUserRole(sysUser.getId(), roleIds[i]));
+        }
+        sysUserRoleService.saveBatch(sysUserRoleList);
+    }
+
+
     /**
      * 获取用户角色权限
      *
@@ -148,12 +165,12 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
             //查询用户角色和权限
             List<SysUserRole> sysUserRoleList = cacheService.userRolePrivilegeCache(user.getId());
             if (Objects.nonNull(sysUserRoleList) && sysUserRoleList.size() > 0) {
-                Set<Long> roleIds = new HashSet<>();
-                Set<Long> privilegeIds = new HashSet<>();
-                sysUserRoleList.forEach(s -> {
-                    roleIds.add(s.getRoleId());
-                    privilegeIds.add(s.getPrivilegeId());
-                });
+                Set<Long> roleIds = sysUserRoleList.stream().map(s -> s.getRoleId()).collect(Collectors.toSet());
+                List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
+                for (Long l : roleIds) {
+                    sysRolePrivilegeList.addAll(cacheService.rolePrivilegeCache(l));
+                }
+                Set<Long> privilegeIds = sysRolePrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
                 QueryWrapper<SysRole> sysRoleQueryWrapper = new QueryWrapper<>();
                 sysRoleQueryWrapper.lambda().in(SysRole::getId, roleIds)
                         .eq(SysRole::getEnable, true);
@@ -161,7 +178,9 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                 int count = Objects.nonNull(sysRoleList) && sysRoleList.size() > 0 ? (int) sysRoleList.stream().filter(s -> s.getType() == RoleTypeEnum.ADMIN).count() : 0;
                 QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
                 if (count > 0) {//超级系统管理员
-                    sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getType, PrivilegeEnum.URL)
+                    Long schoolId = (Long) ServletUtil.getRequestSchoolByNotVaild();
+                    sysPrivilegeQueryWrapper.lambda().eq(SysPrivilege::getSchoolId, schoolId)
+                            .eq(SysPrivilege::getType, PrivilegeEnum.URL)
                             .eq(SysPrivilege::getProperty, PrivilegePropertyEnum.AUTH);
                     List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
                     authBean = new AuthBean(sysRoleList, sysPrivilegeList.stream().map(s -> s.getUrl()).collect(Collectors.toSet()));
@@ -169,6 +188,8 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
                     BasicSchool tbSchool = Objects.nonNull(user.getSchoolId()) ? cacheService.schoolCache(user.getSchoolId()) : null;
                     SysOrg org = Objects.nonNull(user.getOrgId()) ? cacheService.orgCache(user.getOrgId()) : null;
                     sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, privilegeIds)
+                            .eq(SysPrivilege::getSchoolId, user.getSchoolId())
+                            .eq(SysPrivilege::getType, PrivilegeEnum.URL)
                             .eq(SysPrivilege::getProperty, PrivilegePropertyEnum.AUTH);
                     List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
                     authBean = new AuthBean(sysRoleList, sysPrivilegeList.stream().map(s -> s.getUrl()).collect(Collectors.toSet()), tbSchool, org);
@@ -636,19 +657,19 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         String token = SystemConstant.getUuid();
         cacheService.userCache(sysUser.getId());
         //添加用户会话缓存
-        Set<RoleTypeEnum> roleType = authBean.getRoleList().stream().map(s -> s.getType()).collect(Collectors.toSet());
-        String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleType.toString().hashCode()), platform.name());
+        Set<String> roleName = authBean.getRoleList().stream().map(s -> s.getName()).collect(Collectors.toSet());
+        String sessionId = SessionUtil.digest(sysUser.getId(), Math.abs(roleName.toString().hashCode()), platform.name());
         //TODO 测试用
-//        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
+        String test = SignatureEntityTest.build(SignatureType.TOKEN, sessionId, token);
         ExpireTimeBean expireTime = AuthUtil.getExpireTime(platform);
-        TBSession tbSession = new TBSession(sessionId, String.valueOf(sysUser.getId()), roleType.toString(),
+        TBSession tbSession = new TBSession(sysUser.getSchoolId(), sessionId, String.valueOf(sysUser.getId()), roleName.toString(),
                 platform.name(), platform.name(), deviceId, ServletUtil.getRequest().getLocalAddr(), token,
                 expireTime.getDate().getTime(), appSource);
         tbSessionService.saveOrUpdate(tbSession);
         redisUtil.setUserSession(sessionId, tbSession, expireTime.getExpireSeconds());
 
-//        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleType, appSource);
-        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleType, appSource);
+        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, roleName, appSource);
+//        LoginResult loginResult = new LoginResult(sysUser, sessionId, token, roleName, appSource);
         loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
         loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
         loginResult.setTime(System.currentTimeMillis());

+ 7 - 5
teachcloud-common/src/main/resources/mapper/SysUserRoleMapper.xml

@@ -26,18 +26,20 @@
                 WHERE
                     a.id = b.role_id AND b.user_id = #{userId})
     </select>
+
     <select id="listByUserId" resultType="com.qmth.teachcloud.common.bean.dto.MenuDto">
         SELECT
-            b.id,b.name, b.url
+            b.id,b.name,b.url,b.type,b.parent_id as parentId,b.school_id as schoolId,b.`sequence`,b.enable
         FROM
             sys_user_role a
-                JOIN
-            sys_privilege b ON a.privilege_id = b.id
+            join sys_role_privilege srp on srp.role_id = a.role_id
+            JOIN sys_privilege b ON srp.privilege_id = b.id
         WHERE
-            a.user_id = #{userId} AND b.type = 'MENU'
+            a.user_id = #{userId} and b.school_id = #{schoolId}
     </select>
+
     <select id="listAll" resultType="com.qmth.teachcloud.common.bean.dto.MenuDto">
-        select id, name, url from sys_privilege where type = 'MENU'
+        select b.id,b.name,b.url,b.type,b.parent_id as parentId,b.school_id as schoolId,b.`sequence`,b.enable from sys_privilege b where b.school_id = #{schoolId}
     </select>
 
 </mapper>

+ 5 - 0
teachcloud-common/src/main/resources/mapper/TBDepartmentMapper.xml

@@ -0,0 +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.teachcloud.common.mapper.TBDepartmentMapper">
+
+</mapper>

+ 1 - 2
teachcloud-report/src/main/java/com/qmth/teachcloud/report/api/SysController.java

@@ -306,8 +306,7 @@ public class SysController {
     @ApiOperation(value = "查询用户权限")
     @RequestMapping(value = "/get_menu", method = RequestMethod.POST)
     public Result getMenu() {
-        List<MenuDto> list = sysUserRoleService.listByUserId();
-        return ResultUtil.ok(list);
+        return ResultUtil.ok(sysUserRoleService.listByUserId());
     }
 
     @ApiOperation(value = "获取服务器时间")