فهرست منبع

新增 租户、租户套餐、租户与套餐绑定
新增 在线用户会话查询
新增 用户角色菜单与租户菜单集合重合查询
删除 冗余代码

18339543638 2 سال پیش
والد
کامیت
028ec1f0ef

+ 1 - 5
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/controller/CurrentUserController.java

@@ -7,10 +7,8 @@ import cn.tr.core.utils.TreeUtil;
 import cn.tr.module.sys.oauth2.psw.operator.AbstractOAuth2PswUserOperator;
 import cn.tr.module.sys.oauth2.psw.operator.OAuth2PswUserOperatorManager;
 import cn.tr.module.sys.oauth2.service.CurrentUserService;
-import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.user.vo.RouteItemVO;
 import cn.tr.plugin.security.context.LoginUserContextHolder;
-import cn.tr.plugin.security.utils.SaTokenUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -20,7 +18,6 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 /**
  * @ClassName : CurrentUserController
@@ -34,7 +31,6 @@ import java.util.Set;
 @AllArgsConstructor
 public class CurrentUserController {
     private final OAuth2PswUserOperatorManager pswUserOperatorManager;
-    private final ISysRoleService roleService;
     private final CurrentUserService currentUserService;
     @ApiOperation("当前用户的登陆信息")
     @GetMapping("/loginInfo")
@@ -56,7 +52,7 @@ public class CurrentUserController {
     @GetMapping("/listMenus")
     @ApiOperation("获得登录用户的菜单列表")
     public CommonResult<List<RouteItemVO>> getMenus() {
-        return CommonResult.success(currentUserService.currentUserMenus());
+        return CommonResult.success(TreeUtil.buildTree(currentUserService.currentUserMenus()));
     }
 
 }

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/service/CurrentUserService.java

@@ -53,7 +53,7 @@ public class CurrentUserService {
      */
     public List<RouteItemVO> currentUserMenus(){
         Set<SysMenuDTO> tenantMenus = tenantService.currentTenantMenus();
-        Set<SysMenuDTO> roleMenus = roleService.findUserMenus(LoginUserContextHolder.getUser().getUserId());
+        Set<SysMenuDTO> roleMenus = roleService.findUserMenus(String.valueOf(SaTokenUtils.getStpUtil().getLoginId()));
         Collection<SysMenuDTO> allMenus = CollectionUtil.union(tenantMenus, roleMenus);
         if(CollectionUtil.isEmpty(allMenus)){
             return new ArrayList<>();

+ 2 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/ISysTenantPackageMenuService.java

@@ -28,7 +28,7 @@ public interface ISysTenantPackageMenuService {
      */
     Set<String> findPackageIdByMenuId(Collection<String> menuIds,boolean containsSys);
 
-    @CacheEvict(value = "tenant:package:menu",key = "#packageId")
+    @CacheEvict(value = "menu:package:",key = "#packageId")
     default void delCacheMenuIdByPackageId(String packageId){
 
     }
@@ -37,6 +37,6 @@ public interface ISysTenantPackageMenuService {
      * @param packageId
      * @return
      */
-    @Cacheable(value = "tenant:package:menu",key = "#packageId")
+    @Cacheable(value = "menu:package:",key = "#packageId")
     Set<String> findMenuIdByPackageId(String packageId);
 }

+ 27 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantPackageMenuServiceImpl.java

@@ -5,10 +5,13 @@ import cn.tr.module.sys.mapper.tenant.SysTenantPackageMenuMapper;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantPackageMenuDTO;
 import cn.tr.module.sys.tenant.po.SysTenantPackageMenuPO;
-import cn.tr.module.sys.tenant.po.SysTenantPackagePO;
 import cn.tr.module.sys.tenant.repository.SysTenantPackageMenuRepository;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageService;
+import cn.tr.module.sys.user.dto.SysMenuDTO;
+import cn.tr.module.sys.user.dto.SysRoleDTO;
+import cn.tr.module.sys.user.service.ISysMenuService;
+import cn.tr.module.sys.user.service.ISysRoleService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,10 +36,19 @@ public class SysTenantPackageMenuServiceImpl  extends ServiceImpl<SysTenantPacka
     @Autowired
     @Lazy
     private ISysTenantPackageMenuService self;
+    @Autowired
+    @Lazy
+    private ISysRoleService roleService;
+
+    @Autowired
+    @Lazy
+    private ISysMenuService menuService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void assignPackageMenu(List<SysTenantPackageMenuDTO> source) {
         List<SysTenantPackageMenuPO> packageMenus = SysTenantPackageMenuMapper.INSTANCE.toPOList(source);
+        Collection<SysRoleDTO> sysRoles = roleService.findAllSysRoles();
         Map<String, List<SysTenantPackageMenuPO>> groupByPackageIdMap = packageMenus
                 .stream()
                 .collect(Collectors.groupingBy(SysTenantPackageMenuPO::getPackageId));
@@ -46,6 +58,8 @@ public class SysTenantPackageMenuServiceImpl  extends ServiceImpl<SysTenantPacka
             );
             self.delCacheMenuIdByPackageId(packageId);
         });
+        //todo
+        sysRoles.forEach(role->menuService.delRoleMenusCache(role.getId()));
         this.saveBatch(packageMenus);
     }
 
@@ -69,10 +83,20 @@ public class SysTenantPackageMenuServiceImpl  extends ServiceImpl<SysTenantPacka
 
     @Override
     public Set<String> findMenuIdByPackageId(String packageId) {
+        Set<String> menuIds = this.list(new LambdaQueryWrapper<SysTenantPackageMenuPO>().eq(SysTenantPackageMenuPO::getPackageId, packageId))
+                .stream()
+                .map(SysTenantPackageMenuPO::getMenuId)
+                .collect(Collectors.toSet());
         SysTenantPackageDTO packageDTO = tenantPackageService.selectSysTenantPackageById(packageId);
-        if(StrUtil.equals(packageDTO.getType(),"sys")){
+        if(packageDTO!=null&&StrUtil.equals(packageDTO.getType(),"sys")){
             //所有目录id
-
+            menuIds.addAll(
+                    menuService.findAllMenu()
+                    .stream()
+                    .filter(Objects::nonNull)
+                    .map(SysMenuDTO::getId)
+                    .collect(Collectors.toSet())
+            );
         }
         return this.list(new LambdaQueryWrapper<SysTenantPackageMenuPO>().eq(SysTenantPackageMenuPO::getPackageId, packageId))
                 .stream()

+ 6 - 4
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantPackageServiceImpl.java

@@ -81,10 +81,12 @@ public class SysTenantPackageServiceImpl implements ISysTenantPackageService {
                 .in(SysTenantPO::getPackageId, ids));
         if(CollectionUtil.isNotEmpty(tenants)){
             Set<String> packageIds = tenants.stream().map(SysTenantPO::getPackageId).collect(Collectors.toSet());
-            List<SysTenantPackagePO> packages = tenantPackageRepository.selectBatchIds(packageIds);
-            if(CollectionUtil.isNotEmpty(packages)){
-                Set<String> packageNames = packages.stream().map(SysTenantPackagePO::getPackageName).collect(Collectors.toSet());
-                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("租户套餐 %s 正在被使用,无法删除", JsonUtils.toJsonString(packageNames)));
+            if(CollectionUtil.isNotEmpty(packageIds)){
+                List<SysTenantPackagePO> packages = tenantPackageRepository.selectBatchIds(packageIds);
+                if(CollectionUtil.isNotEmpty(packages)){
+                    Set<String> packageNames = packages.stream().map(SysTenantPackagePO::getPackageName).collect(Collectors.toSet());
+                    throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("租户套餐 %s 正在被使用,无法删除", JsonUtils.toJsonString(packageNames)));
+                }
             }
         }
         return tenantPackageRepository.deleteBatchIds(ids);

+ 3 - 4
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/impl/SysTenantServiceImpl.java

@@ -9,15 +9,12 @@ import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantQueryDTO;
 import cn.tr.module.sys.tenant.service.ISysTenantPackageMenuService;
-import cn.tr.module.sys.tenant.service.ISysTenantPackageService;
 import cn.tr.module.sys.user.dto.*;
 import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.enums.UserStatusEnum;
 import cn.tr.module.sys.tenant.po.SysTenantPO;
 import cn.tr.module.sys.tenant.repository.SysTenantRepository;
-import cn.tr.module.sys.user.po.SysMenuPO;
 import cn.tr.module.sys.user.repository.SysMenuRepository;
-import cn.tr.module.sys.user.service.ISysMenuService;
 import cn.tr.module.sys.user.service.ISysOrgService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
@@ -26,7 +23,6 @@ import cn.tr.plugin.biz.tenant.context.TenantContextHolder;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -115,6 +111,9 @@ public class SysTenantServiceImpl implements ISysTenantService {
     public Set<SysMenuDTO> getTenantMenus(String tenantId) {
         SysTenantPO tenant = tenantRepository.selectById(tenantId);
         Set<String> menuIds = tenantPackageMenuService.findMenuIdByPackageId(tenant.getPackageId());
+        if(CollectionUtil.isEmpty(menuIds)){
+            return new HashSet<>();
+        }
         return new HashSet<>(SysMenuMapper.INSTANCE.toSysMenuDTOList( menuRepository.selectBatchIds(menuIds)));
     }
 

+ 3 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysMenuService.java

@@ -86,16 +86,17 @@ public interface ISysMenuService extends ITreeService {
      */
     public List<SysMenuDTO> findAllMenu();
 
+
     /**
      * 找到角色id下的所有菜单信息
      * @param roleId
      * @return
      */
-    @Cacheable(value = "sys:rolemenu",key = "#roleId")
+    @Cacheable(value = "menu:role:",key = "#roleId")
     List<SysMenuDTO> findAllMenuByRoleId(String roleId);
 
 
-    @CacheEvict(value = "sys:rolemenu",key = "#roleId")
+    @CacheEvict(value = "menu:role:",key = "#roleId")
     default void delRoleMenusCache(String roleId){
 
     };

+ 18 - 6
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java

@@ -71,17 +71,21 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean updateSysMenuById(SysMenuDTO source) {
-        Set<String> roleIds = roleMenuService.findRoleByMenuId(Collections.singleton(source.getId()),true);
-        roleIds.parallelStream().forEach(self::delRoleMenusCache);
-        Set<String> packageIds = tenantPackageMenuService.findPackageIdByMenuId(Collections.singleton(source.getId()),true);
-        packageIds.parallelStream().forEach(tenantPackageMenuService::delCacheMenuIdByPackageId);
-        return menuRepository.updateById(SysMenuMapper.INSTANCE.toSysMenuPO(source))!=0;
+        boolean result = menuRepository.updateById(SysMenuMapper.INSTANCE.toSysMenuPO(source))!=0;
+        if (result) {
+            refreshCache(Collections.singleton(source.getId()));
+        }
+        return result;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean insertSysMenu(SysMenuDTO source) {
-        return menuRepository.insert(SysMenuMapper.INSTANCE.toSysMenuPO(source))!=0;
+        boolean result = menuRepository.insert(SysMenuMapper.INSTANCE.toSysMenuPO(source))!=0;
+        if (result) {
+            refreshCache(Collections.singleton(source.getId()));
+        }
+        return result;
     }
 
     @Override
@@ -100,6 +104,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
         if(CollectionUtil.isNotEmpty(packageIds)){
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选菜单已与租户套餐相关联,请取消关联后再删除菜单");
         }
+        refreshCache(ids);
         return menuRepository.deleteBatchIds(ids);
     }
 
@@ -117,4 +122,11 @@ public class SysMenuServiceImpl implements ISysMenuService {
         }
         return SysMenuMapper.INSTANCE.toSysMenuDTOList(menuRepository.findAllMenuByRoleId(roleId));
     }
+
+    private void refreshCache(Collection<String> source){
+        Set<String> roleIds = roleMenuService.findRoleByMenuId(source,true);
+        roleIds.parallelStream().forEach(self::delRoleMenusCache);
+        Set<String> packageIds = tenantPackageMenuService.findPackageIdByMenuId(source,true);
+        packageIds.parallelStream().forEach(tenantPackageMenuService::delCacheMenuIdByPackageId);
+    }
 }

+ 3 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java

@@ -63,14 +63,14 @@ public class SysRoleServiceImpl implements ISysRoleService {
     public Set<SysMenuDTO>  findUserMenus(String userId){
         List<SysRoleDTO> roles = self.findAllRolesByUserId(userId);
         //判断是否存在管理员账户
+        if (CollectionUtil.isEmpty(roles)) {
+            return new HashSet<>();
+        }
         for (SysRoleDTO role : roles) {
             if(StrUtil.equals(role.getType(),"sys")){
                 return tenantService.currentTenantMenus();
             }
         }
-        if (CollectionUtil.isEmpty(roles)) {
-            return new HashSet<>();
-        }
         return roles.stream()
                 .filter(Objects::nonNull)
                 .filter(role->Boolean.FALSE.equals(role.getDisable()))