wangliang 3 år sedan
förälder
incheckning
5e3d015a89

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

@@ -170,18 +170,10 @@ public class SysController {
     @ApiOperation(value = "登出")
     @RequestMapping(value = "/logout", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
-    public Result logout() {
+    public Result logout() throws NoSuchAlgorithmException {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        TBSession tbSession = (TBSession) ServletUtil.getRequestSession();
-        AuthBean authBean = cacheService.userAuthCache(sysUser.getId());
-        if (Objects.isNull(authBean)) {
-            throw ExceptionResultEnum.NOT_LOGIN.exception();
-        }
-        tbSessionService.removeById(tbSession.getId());
-        redisUtil.deleteUserSession(tbSession.getId());
-        cacheService.removeUserCache(sysUser.getId());
-        cacheService.removeUserAuthCache(sysUser.getId());
-        return ResultUtil.ok(new EditResult(sysUser.getId()));
+        teachcloudCommonService.removeUserInfo(sysUser.getId());
+        return ResultUtil.ok();
     }
 
     /**

+ 2 - 14
teachcloud-common/src/main/java/com/qmth/teachcloud/common/bean/result/MenuResult.java

@@ -23,10 +23,6 @@ public class MenuResult implements Serializable {
     @ApiModelProperty(value = "用户id")
     Long userId;
 
-    @JsonSerialize(using = ToStringSerializer.class)
-    @ApiModelProperty(value = "角色名称")
-    Set<String> roleNames;
-
     @ApiModelProperty(value = "权限集合")
     List<MenuPrivilegeDto> privileges;
 
@@ -34,9 +30,9 @@ public class MenuResult implements Serializable {
 
     }
 
-    public MenuResult(Long userId, Set<String> roleNames) {
+    public MenuResult(Long userId, List<MenuPrivilegeDto> privileges) {
         this.userId = userId;
-        this.roleNames = roleNames;
+        this.privileges = privileges;
     }
 
     public Long getUserId() {
@@ -47,14 +43,6 @@ public class MenuResult implements Serializable {
         this.userId = userId;
     }
 
-    public Set<String> getRoleNames() {
-        return roleNames;
-    }
-
-    public void setRoleNames(Set<String> roleNames) {
-        this.roleNames = roleNames;
-    }
-
     public List<MenuPrivilegeDto> getPrivileges() {
         return privileges;
     }

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

@@ -82,6 +82,7 @@ public class SystemConstant {
      */
     public static final String USER_OAUTH_CACHE = "user:oauth:cache";
     public static final String USER_ACCOUNT_CACHE = "user:account:cache";
+    public static final String USER_MENU_CACHE = "user:menu:cache";
     public static final String SCHOOL_CACHE = "school:cache";
     public static final String SCHOOL_CODE_CACHE = "school:code:cache";
     public static final String ORG_CACHE = "org:cache";

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

@@ -1,6 +1,7 @@
 package com.qmth.teachcloud.common.service;
 
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
+import com.qmth.teachcloud.common.bean.result.MenuResult;
 import com.qmth.teachcloud.common.entity.*;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 
@@ -39,6 +40,29 @@ public interface CacheService {
      */
     public void removeRoleCache(Long roleId);
 
+    /**
+     * 添加用户菜单缓存
+     *
+     * @param userId
+     * @return
+     */
+    public MenuResult userMenuCache(Long userId);
+
+    /**
+     * 修改用户菜单缓存
+     *
+     * @param userId
+     * @return
+     */
+    public MenuResult updateUserMenuCache(Long userId);
+
+    /**
+     * 删除用户菜单缓存
+     *
+     * @param userId
+     */
+    public void removeUserMenuCache(Long userId);
+
     /**
      * 添加用户缓存
      *

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

@@ -3,6 +3,7 @@ package com.qmth.teachcloud.common.service;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.dto.PrivilegeCacheDto;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
+import com.qmth.teachcloud.common.bean.result.MenuResult;
 import com.qmth.teachcloud.common.bean.result.RolePrivilegeResult;
 import com.qmth.teachcloud.common.entity.BasicAttachment;
 import com.qmth.teachcloud.common.entity.SysRolePrivilege;
@@ -29,6 +30,14 @@ import java.util.Set;
  */
 public interface TeachcloudCommonService {
 
+    /**
+     * 获取用户菜单
+     *
+     * @param userId
+     * @return
+     */
+    public MenuResult getUserMenu(Long userId);
+
     /**
      * 新增用户权限
      *

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

@@ -1,21 +1,32 @@
 package com.qmth.teachcloud.common.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.reflect.TypeToken;
+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.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
+import com.qmth.teachcloud.common.enums.PrivilegeEnum;
 import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;
 import com.qmth.teachcloud.common.service.*;
+import com.qmth.teachcloud.common.util.JacksonUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
 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;
 
 /**
  * @Description: 缓存操作serviceImpl 实现类
@@ -43,6 +54,9 @@ public class CacheServiceImpl implements CacheService {
     @Resource
     SysRoleService sysRoleService;
 
+    @Resource
+    SysPrivilegeService sysPrivilegeService;
+
     /**
      * 添加角色缓存
      *
@@ -79,6 +93,41 @@ public class CacheServiceImpl implements CacheService {
 
     }
 
+    /**
+     * 添加用户菜单缓存
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    @Cacheable(value = SystemConstant.USER_MENU_CACHE, key = "#p0")
+    public MenuResult userMenuCache(Long userId) {
+        return commonService.getUserMenu(userId);
+    }
+
+    /**
+     * 修改用户菜单缓存
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    @CachePut(value = SystemConstant.USER_MENU_CACHE, key = "#p0")
+    public MenuResult updateUserMenuCache(Long userId) {
+        return commonService.getUserMenu(userId);
+    }
+
+    /**
+     * 删除用户菜单缓存
+     *
+     * @param userId
+     */
+    @Override
+    @CacheEvict(value = SystemConstant.USER_MENU_CACHE, key = "#p0")
+    public void removeUserMenuCache(Long userId) {
+
+    }
+
     /**
      * 添加用户缓存
      *

+ 1 - 59
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserRoleServiceImpl.java

@@ -66,65 +66,7 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
     @Override
     public MenuResult listByUserId() {
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        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);
-                    }
-                }
-            }
-        }
-        MenuResult menuResult = new MenuResult(sysUser.getId(), authBean.getRoleList().stream().map(s -> s.getName()).collect(Collectors.toSet()));
-        menuResult.setPrivileges(menuPrivilegeDtoList);
-        return menuResult;
+        return cacheService.userMenuCache(sysUser.getId());
     }
 
     @Override

+ 75 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -5,14 +5,19 @@ import cn.hutool.core.util.ZipUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.google.common.reflect.TypeToken;
+import com.google.gson.Gson;
 import com.qmth.boot.core.enums.Platform;
 import com.qmth.boot.tools.signature.SignatureType;
 import com.qmth.teachcloud.common.SignatureEntityTest;
 import com.qmth.teachcloud.common.bean.auth.AuthBean;
 import com.qmth.teachcloud.common.bean.auth.ExpireTimeBean;
+import com.qmth.teachcloud.common.bean.dto.MenuDto;
+import com.qmth.teachcloud.common.bean.dto.MenuPrivilegeDto;
 import com.qmth.teachcloud.common.bean.dto.OrgDto;
 import com.qmth.teachcloud.common.bean.dto.PrivilegeCacheDto;
 import com.qmth.teachcloud.common.bean.result.LoginResult;
+import com.qmth.teachcloud.common.bean.result.MenuResult;
 import com.qmth.teachcloud.common.bean.result.PrivilegeResult;
 import com.qmth.teachcloud.common.bean.result.RolePrivilegeResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
@@ -84,6 +89,74 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
     @Resource
     BasicAttachmentService basicAttachmentService;
 
+    /**
+     * 获取用户菜单
+     *
+     * @param userId
+     * @return
+     */
+    @Override
+    public MenuResult getUserMenu(Long userId) {
+        SysUser sysUser = cacheService.userCache(userId);
+        List<SysUserRole> sysUserRoleList = cacheService.userRolePrivilegeCache(userId);
+        List<SysRolePrivilege> sysRolePrivilegeList = new ArrayList<>();
+        for (SysUserRole s : sysUserRoleList) {
+            sysRolePrivilegeList.addAll(cacheService.rolePrivilegeCache(s.getRoleId()));
+        }
+        Set<Long> privilegeIds = sysRolePrivilegeList.stream().map(s -> s.getPrivilegeId()).collect(Collectors.toSet());
+        QueryWrapper<SysPrivilege> sysPrivilegeQueryWrapper = new QueryWrapper<>();
+        sysPrivilegeQueryWrapper.lambda().in(SysPrivilege::getId, privilegeIds);
+        List<SysPrivilege> sysPrivilegeList = sysPrivilegeService.list(sysPrivilegeQueryWrapper);
+        Gson gson = new Gson();
+        List<MenuDto> menuDtoList = gson.fromJson(JacksonUtil.parseJson(sysPrivilegeList), new TypeToken<List<MenuDto>>() {
+        }.getType());
+        LinkedMultiValueMap<Long, MenuDto> linkedMultiValueMap = new LinkedMultiValueMap<>();
+        List<MenuPrivilegeDto> menuPrivilegeDtoList = new ArrayList<>();
+        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 new MenuResult(sysUser.getId(), menuPrivilegeDtoList);
+    }
+
     /**
      * 新增用户权限
      *
@@ -232,6 +305,8 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
         }
         cacheService.removeUserCache(userId);
         cacheService.removeUserAuthCache(userId);
+        cacheService.removeUserMenuCache(userId);
+        cacheService.removeUserRolePrivilegeCache(userId);
     }
 
     /**