Преглед изворни кода

优化 删除冗余字段
修复 缓存+租户,通过 global 前缀设置非租户缓存
优化 调整缓存结构
新增 门户
更新 统一主键为id

18339543638 пре 2 година
родитељ
комит
fee13ea8eb
35 измењених фајлова са 621 додато и 164 уклоњено
  1. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/dto/SysDictItemSmallDTO.java
  2. 2 5
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/service/ISysDictItemService.java
  3. 27 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/user/SysPortalMapper.java
  4. 27 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/user/SysPortalMenuMapper.java
  5. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/service/CurrentUserService.java
  6. 9 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/ISysTenantPackageMenuService.java
  7. 0 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/ISysTenantService.java
  8. 89 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPortalController.java
  9. 1 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java
  10. 26 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPortalMenuDTO.java
  11. 30 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPortalQueryDTO.java
  12. 25 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysPortalMenuPO.java
  13. 2 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysPortalPO.java
  14. 19 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysPortalMenuRepository.java
  15. 18 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysPortalRepository.java
  16. 0 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysRoleRepository.java
  17. 18 5
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysMenuService.java
  18. 21 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalMenuService.java
  19. 50 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalService.java
  20. 26 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleMenuService.java
  21. 1 30
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleService.java
  22. 32 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysUserRoleService.java
  23. 25 6
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java
  24. 38 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java
  25. 58 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalServiceImpl.java
  26. 35 11
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleMenuServiceImpl.java
  27. 10 49
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java
  28. 16 18
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserRoleServiceImpl.java
  29. 4 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserServiceImpl.java
  30. 2 2
      tr-modules/tr-module-system/src/main/resources/mapper/user/SysRoleMapper.xml
  31. 0 1
      tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/TrTenantAutoConfiguration.java
  32. 0 16
      tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/config/aop/CacheIgnoreTenant.java
  33. 1 6
      tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/config/aop/TenantCacheAspect.java
  34. 5 0
      tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/constant/TenantConstant.java
  35. 1 0
      tr-test/src/main/resources/application.yml

+ 1 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/dto/SysDictItemSmallDTO.java

@@ -14,7 +14,7 @@ import java.io.Serializable;
 public class SysDictItemSmallDTO implements Serializable {
     private static final long serialVersionUID = -2738872740080930736L;
 
-    private String dictItemId;
+    private String id;
 
     private String value;
 

+ 2 - 5
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/dict/service/ISysDictItemService.java

@@ -3,7 +3,6 @@ package cn.tr.module.sys.dict.service;
 import cn.tr.module.sys.dict.dto.SysDictItemDTO;
 import cn.tr.module.sys.dict.dto.SysDictItemQueryDTO;
 import cn.tr.module.sys.dict.dto.SysDictItemSmallDTO;
-import cn.tr.plugin.biz.tenant.config.aop.CacheIgnoreTenant;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 
@@ -58,13 +57,11 @@ public interface ISysDictItemService {
      * @param dictCode 字典码
      * @return 字典项列表
      */
-    @Cacheable(value = "sys:dict",key = "#dictCode")
-    @CacheIgnoreTenant
+    @Cacheable(value = "global:sys:dict",key = "#dictCode")
     List<SysDictItemSmallDTO> selectDictItemsByDictCode(String dictCode);
 
 
-    @CacheEvict(value = "sys:dict",key = "#dictCode")
-    @CacheIgnoreTenant
+    @CacheEvict(value = "global:sys:dict",key = "#dictCode")
     default void delCache(String dictCode){
 
     };

+ 27 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/user/SysPortalMapper.java

@@ -0,0 +1,27 @@
+package cn.tr.module.sys.mapper.user;
+
+import cn.tr.module.sys.user.dto.SysPortalDTO;
+import cn.tr.module.sys.user.po.SysPortalPO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName : SysPortalMapper
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+@Mapper
+public interface SysPortalMapper {
+    SysPortalMapper INSTANCE = Mappers.getMapper(SysPortalMapper.class);
+
+    List<SysPortalDTO> toSysPortalDTOList(List<SysPortalPO> source);
+
+    List<SysPortalPO> toSysPortalPOList(List<SysPortalDTO> source);
+
+    SysPortalDTO toSysPortalDTO(SysPortalPO source);
+
+    SysPortalPO toSysPortalPO(SysPortalDTO source);
+}

+ 27 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/mapper/user/SysPortalMenuMapper.java

@@ -0,0 +1,27 @@
+package cn.tr.module.sys.mapper.user;
+
+import cn.tr.module.sys.user.dto.SysPortalMenuDTO;
+import cn.tr.module.sys.user.po.SysPortalMenuPO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName : SysPortalMenuMapper
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+@Mapper
+public interface SysPortalMenuMapper {
+    SysPortalMenuMapper INSTANCE = Mappers.getMapper(SysPortalMenuMapper.class);
+
+    List<SysPortalMenuDTO> toSysPortalMenuDTOList(List<SysPortalMenuPO> source);
+
+    List<SysPortalMenuPO> toSysPortalMenuPOList(List<SysPortalMenuDTO> source);
+
+    SysPortalMenuDTO toSysPortalMenuDTO(SysPortalMenuPO source);
+
+    SysPortalMenuPO toSysPortalMenuPO(SysPortalMenuDTO source);
+}

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

@@ -40,7 +40,7 @@ public class CurrentUserService {
         Set<String> tenantPermissions = tenantService.findTenantPermission();
         ;
         //用户角色所拥有的权限
-        Set<String> rolePermissions = roleService.findUserPermission(String.valueOf(SaTokenUtils.getStpUtil().getLoginId()));
+        Set<String> rolePermissions = menuService.findUserPermission(String.valueOf(SaTokenUtils.getStpUtil().getLoginId()));
 
         return CollectionUtil.intersection(tenantPermissions,rolePermissions);
     };
@@ -51,7 +51,7 @@ public class CurrentUserService {
      */
     public List<RouteItemVO> currentUserMenus(){
         Set<SysMenuDTO> tenantMenus = tenantService.currentTenantMenus();
-        Set<SysMenuDTO> roleMenus = roleService.findUserMenus(String.valueOf(SaTokenUtils.getStpUtil().getLoginId()));
+        Set<SysMenuDTO> roleMenus = menuService.findUserMenus(String.valueOf(SaTokenUtils.getStpUtil().getLoginId()));
         Collection<SysMenuDTO> allMenus = CollectionUtil.union(tenantMenus, roleMenus);
         if(CollectionUtil.isEmpty(allMenus)){
             return new ArrayList<>();

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

@@ -29,7 +29,14 @@ public interface ISysTenantPackageMenuService {
      */
     Set<String> findPackageIdByMenuId(Collection<String> menuIds,boolean containsSys);
 
-    @CacheEvict(value = "menu:package:",key = "#packageId")
+    /**
+     * 删除套餐缓存
+     * {@link ISysTenantPackageMenuService#assignPackageMenu(List)}
+     * {@link cn.tr.module.sys.user.service.ISysMenuService#deleteSysMenuByIds(Collection)}
+     * {@link cn.tr.module.sys.user.service.ISysMenuService#updateSysMenuById(SysMenuDTO)}
+     * @param packageId
+     */
+    @CacheEvict(value = "menu:package",key = "#packageId")
     default void delCacheMenuIdByPackageId(String packageId){
 
     }
@@ -38,6 +45,6 @@ public interface ISysTenantPackageMenuService {
      * @param packageId
      * @return
      */
-    @Cacheable(value = "menu:package:",key = "#packageId")
+    @Cacheable(value = "menu:package",key = "#packageId")
     Set<SysMenuDTO> findMenuIdByPackageId(String packageId);
 }

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

@@ -5,7 +5,6 @@ import cn.tr.module.sys.tenant.dto.SysTenantAddDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantQueryDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
-import cn.tr.plugin.biz.tenant.config.aop.CacheIgnoreTenant;
 import cn.tr.plugin.biz.tenant.context.TenantContextHolder;
 
 import java.util.Collection;
@@ -41,7 +40,6 @@ public interface ISysTenantService {
      * @param source 更新租户
      * @return true:更新成功
      */
-    @CacheIgnoreTenant
     boolean updateSysTenantById(SysTenantCommonDTO source);
 
     /**

+ 89 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPortalController.java

@@ -0,0 +1,89 @@
+package cn.tr.module.sys.user.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.tr.core.pojo.CommonResult;
+import cn.tr.core.pojo.TableDataInfo;
+import cn.tr.core.validation.Insert;
+import cn.tr.core.validation.Update;
+import cn.tr.module.sys.user.dto.SysPortalDTO;
+import cn.tr.module.sys.user.dto.SysPortalMenuDTO;
+import cn.tr.module.sys.user.dto.SysPortalQueryDTO;
+import cn.tr.module.sys.user.service.ISysPortalMenuService;
+import cn.tr.module.sys.user.service.ISysPortalService;
+import cn.tr.plugin.mybatis.base.BaseController;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * @ClassName : SysPortalController
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月24日
+ */
+@RestController
+@RequestMapping("/sys/portal")
+@Api(tags = "门户")
+@AllArgsConstructor
+public class SysPortalController extends BaseController {
+    private final ISysPortalService portalService;
+    private final ISysPortalMenuService portalMenuService;
+    @PostMapping("/assign")
+    @ApiOperationSupport(author = "lf")
+    @ApiOperation(value = "为门户分配菜单",notes = "权限: sys:portal:assign")
+    @SaCheckPermission("sys:portal:assign")
+    public CommonResult<Boolean> selectList(@RequestBody List<SysPortalMenuDTO> source){
+        portalMenuService.assignPortalMenu(source);
+        return CommonResult.success(true);
+    }
+
+    @PostMapping("/query/page")
+    @ApiOperationSupport(author = "lf")
+    @ApiOperation(value = "根据条件查询门户",notes = "权限: sys:portal:query")
+    @SaCheckPermission("sys:portal:query")
+    public TableDataInfo<SysPortalDTO> selectList(@RequestBody SysPortalQueryDTO query){
+        startPage();
+        return getDataTable(portalService.selectSysPortalList(query));
+    }
+
+    @GetMapping("/detail/{id}")
+    @ApiOperationSupport(author = "lf")
+    @ApiOperation(value = "根据id查询门户",notes = "权限: sys:portal:query")
+    @SaCheckPermission("sys:portal:query")
+    public CommonResult<SysPortalDTO> findById(@PathVariable("id") String id){
+        return CommonResult.success(portalService.selectSysPortalById(id));
+    }
+
+    @PostMapping("/edit")
+    @ApiOperationSupport(author = "lf")
+    @SaCheckPermission("sys:portal:edit")
+    @ApiOperation(value = "根据id更新门户",notes = "权限: sys:portal:edit")
+    public CommonResult<Boolean> edit(@RequestBody@Validated(Update.class) SysPortalDTO source){
+        return CommonResult.success(portalService.updateSysPortalById(source));
+    }
+
+    @PostMapping("/add")
+    @ApiOperationSupport(author = "lf")
+    @SaCheckPermission("sys:portal:add")
+    @ApiOperation(value = "新增门户",notes = "权限: sys:portal:add")
+    public CommonResult<Boolean> add(@RequestBody@Validated(Insert.class) SysPortalDTO source){
+        return CommonResult.success(portalService.insertSysPortal(source));
+    }
+
+    @PostMapping("/deleteByIds")
+    @ApiOperationSupport(author = "lf")
+    @ApiOperation(value = "删除门户",notes = "权限: sys:portal:del")
+    @SaCheckPermission("sys:portal:del")
+    public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
+        return CommonResult.success(portalService.deleteSysPortalByIds(ids));
+    }
+    
+
+    //todo 导出
+
+}

+ 1 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java

@@ -40,12 +40,11 @@ import java.util.stream.Collectors;
 public class SysRoleController extends BaseController {
     private final ISysRoleService roleService;
     private final ISysRoleMenuService roleMenuService;
-    private final ISysMenuService menuService;
 
     @GetMapping("/menu/tree/{roleId}")
     @ApiOperation(value = "查询角色下的权限信息",notes = "权限: 无")
     public CommonResult<List<SysMenuDTO>> listMenu(@PathVariable("roleId") String roleId) {
-        return CommonResult.success(menuService.findAllMenuByRoleId(roleId));
+        return CommonResult.success(roleMenuService.findAllMenuByRoleId(roleId));
     }
 
     @PostMapping("/query/page")

+ 26 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPortalMenuDTO.java

@@ -0,0 +1,26 @@
+package cn.tr.module.sys.user.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName : SysPortalMenuPO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年04月04日
+ */
+@Data
+public class SysPortalMenuDTO implements Serializable {
+
+    private static final long serialVersionUID = -433611550415351453L;
+
+    private String id;
+
+    @ApiModelProperty("门户id")
+    private String portalId;
+
+    @ApiModelProperty("菜单id")
+    private String menuId;
+}

+ 30 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPortalQueryDTO.java

@@ -0,0 +1,30 @@
+package cn.tr.module.sys.user.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @ClassName : SysRoleQueryDTO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年04月01日
+ */
+@Data
+@ApiModel("门户查询参数")
+public class SysPortalQueryDTO implements Serializable {
+    private static final long serialVersionUID = -262693810220247854L;
+    @ApiModelProperty(value = "门户编码")
+    private String portalCode;
+
+    @ApiModelProperty(value = "门户名称")
+    private String portalName;
+
+    @ApiModelProperty(value = "是否启用 0、启用 1、关闭")
+    private Boolean disable;
+
+
+}

+ 25 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysPortalMenuPO.java

@@ -0,0 +1,25 @@
+package cn.tr.module.sys.user.po;
+
+import cn.tr.core.annotation.Comment;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * @ClassName : SysPortalMenuPO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年04月04日
+ */
+@Data
+@TableName("sys_portal_menu")
+public class SysPortalMenuPO {
+    @TableId
+    private String id;
+
+    @Comment("门户id")
+    private String portalId;
+
+    @Comment("菜单id")
+    private String menuId;
+}

+ 2 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysPortalPO.java

@@ -30,6 +30,8 @@ public class SysPortalPO extends TenantPO {
     @Comment("门户名称")
     private String name;
 
+    @Comment("门户首页菜单id")
+    private String indexMenuId;
     /**
      * {@link cn.tr.module.sys.user.enums.RoleEnum}
      */

+ 19 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysPortalMenuRepository.java

@@ -0,0 +1,19 @@
+package cn.tr.module.sys.user.repository;
+
+import cn.tr.module.sys.user.po.SysPortalMenuPO;
+import cn.tr.module.sys.user.po.SysRoleMenuPO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @ClassName : SysRoleMenuRepository
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+@Mapper
+@Repository
+public interface SysPortalMenuRepository extends BaseMapper<SysPortalMenuPO> {
+
+}

+ 18 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysPortalRepository.java

@@ -0,0 +1,18 @@
+package cn.tr.module.sys.user.repository;
+
+import cn.tr.module.sys.user.po.SysPortalPO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @ClassName : SysProtalRepository
+ * @Description : 门户
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+@Mapper
+@Repository
+public interface SysPortalRepository extends BaseMapper<SysPortalPO> {
+
+}

+ 0 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/repository/SysRoleRepository.java

@@ -1,6 +1,5 @@
 package cn.tr.module.sys.user.repository;
 
-import cn.tr.module.sys.user.po.SysMenuPO;
 import cn.tr.module.sys.user.po.SysRolePO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;

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

@@ -16,6 +16,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @ClassName : ISysMenuService
@@ -87,15 +88,27 @@ public interface ISysMenuService extends ITreeService {
      */
     public List<SysMenuDTO> findAllMenu();
 
-
     /**
-     * 找到角色id下的所有菜单信息
-     * @param roleId
+     * 查询用户的菜单
+     * @param userId 用户id
      * @return
      */
-    @Cacheable(value = "menu:role:",key = "#roleId")
-    List<SysMenuDTO> findAllMenuByRoleId(String roleId);
+    Set<SysMenuDTO>  findUserMenus(String userId);
 
+    /**
+     * 查询用户的权限
+     * @param userId 用户id
+     * @return
+     */
+    default Set<String>  findUserPermission(String userId){
+        return findUserMenus(userId)
+                .stream()
+                .filter(Objects::nonNull)
+                .filter(menu->Boolean.FALSE.equals(menu.getDisable()))
+                .map(SysMenuDTO::getPermission)
+                .filter(StrUtil::isNotEmpty)
+                .collect(Collectors.toSet());
+    };
 
     @CacheEvict(value = "menu:role:",key = "#roleId")
     default void delRoleMenusCache(String roleId){

+ 21 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalMenuService.java

@@ -0,0 +1,21 @@
+package cn.tr.module.sys.user.service;
+
+import cn.tr.module.sys.user.dto.SysPortalMenuDTO;
+import java.util.List;
+
+/**
+ * @ClassName : ISysPortalMenuService
+ * @Description : 门户菜单关联关系
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+
+public interface ISysPortalMenuService {
+
+    /**
+     * 为门户分配菜单
+     * @param source 门户菜单关联信息
+     * @return
+     */
+    void assignPortalMenu(List<SysPortalMenuDTO> source);
+}

+ 50 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPortalService.java

@@ -0,0 +1,50 @@
+package cn.tr.module.sys.user.service;
+
+import cn.tr.module.sys.user.dto.SysPortalDTO;
+import cn.tr.module.sys.user.dto.SysPortalQueryDTO;
+import java.util.Collection;
+import java.util.List;
+/**
+ * @ClassName : ISysPortalService
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+
+public interface ISysPortalService {
+
+    /**
+     * 根据条件查询
+     * @param query 查询参数
+     * @return
+     */
+    List<SysPortalDTO> selectSysPortalList(SysPortalQueryDTO query);
+
+    /**
+     * 根据id查询操作门户
+     * @param id 门户id
+     * @return 门户
+     */
+    SysPortalDTO selectSysPortalById(String id);
+
+    /**
+     * 更新门户
+     * @param source 更新门户
+     * @return true:更新成功
+     */
+    boolean updateSysPortalById(SysPortalDTO source);
+
+    /**
+     * 新增门户
+     * @param source 新增门户
+     * @return true:新增成功
+     */
+    boolean insertSysPortal(SysPortalDTO source);
+
+    /**
+     * 根据id删除门户
+     * @param ids 门户id
+     * @return 删除数量
+     */
+    int deleteSysPortalByIds(Collection<String> ids);
+}

+ 26 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleMenuService.java

@@ -1,6 +1,9 @@
 package cn.tr.module.sys.user.service;
 
+import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysRoleMenuDTO;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 
 import java.util.*;
 
@@ -20,6 +23,29 @@ public interface ISysRoleMenuService {
      */
     void assignRoleMenu(List<SysRoleMenuDTO> source);
 
+    /**
+     * 找到角色id下的所有菜单信息
+     * 使用{@link Cacheable} 对role相应数据进行缓存
+     * @param roleId
+     * @return
+     */
+    @Cacheable(value = "menu:role",key = "#roleId")
+    List<SysMenuDTO> findAllMenuByRoleId(String roleId);
+
+
+    /**
+     * 删除缓存
+     * 当调用
+     {@link ISysRoleMenuService#assignRoleMenu(List)} /
+     {@link ISysMenuService#updateSysMenuById(SysMenuDTO)} /
+     {@link ISysMenuService#deleteSysMenuByIds(Collection)}
+     等方法时刷新相应的角色缓存
+     * @param roleId
+     */
+    @CacheEvict(value = "menu:role",key = "#roleId")
+    default void delRoleMenusCache(String roleId){
+
+    };
 
     /**
      * 通过菜单id找到所有持有该菜单的角色

+ 1 - 30
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleService.java

@@ -32,29 +32,8 @@ public interface ISysRoleService {
      */
     List<SysRoleDTO> selectSysRoleList(SysRoleQueryDTO query);
 
-    /**
-     * 查询用户的菜单
-     * @param userId 用户id
-     * @return
-     */
-    Set<SysMenuDTO>  findUserMenus(String userId);
-
     @TenantIgnore
-    public Collection<SysRoleDTO> findAllSysRoles();
-
-    /**
-     * 查询用户的权限
-     * @param userId 用户id
-     * @return
-     */
-    default Set<String>  findUserPermission(String userId){
-        return findUserMenus(userId)
-                .stream()
-                .filter(Objects::nonNull)
-                .map(SysMenuDTO::getPermission)
-                .filter(StrUtil::isNotEmpty)
-                .collect(Collectors.toSet());
-    };
+    Collection<SysRoleDTO> findAllSysRoles();
 
     /**
      * 根据id查询操作角色
@@ -83,12 +62,4 @@ public interface ISysRoleService {
      * @return 删除数量
      */
     int deleteSysRoleByIds(Collection<String> ids);
-
-    @Cacheable(value = "sys:user:role",key = "#userId")
-    List<SysRoleDTO> findAllRolesByUserId(String userId);
-
-    @CacheEvict(value = "sys:user:role",key = "#userId")
-    default void delUserRoleCache(String userId){
-
-    };
 }

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

@@ -1,9 +1,14 @@
 package cn.tr.module.sys.user.service;
 
+import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysUserRoleDTO;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * @ClassName : ISysRoleMenuService
@@ -23,15 +28,39 @@ public interface ISysUserRoleService {
 
     /**
      * 通过角色id找到所有持有该角色的用户
-     * @param roleId
+     * @param roleIds
      * @return
      */
-    Set<String> findUserByRoleId(String roleId);
+    Set<String> findUserByRoleId(Collection<String> roleIds);
 
     /**
      * 通过用户id找到该用户所持有的所有角色id
      * @param userId
      * @return
      */
-    Set<String> findRolesByUserId(String userId);
+    default Set<String> findRoleIdsByUserId(String userId){
+        return findAllRolesByUserId(userId)
+                .stream().map(SysRoleDTO::getId).collect(Collectors.toSet());
+    };
+
+
+    /**
+     * 找到所给用户下的所有角色
+     * @param userId
+     * @return
+     */
+    @Cacheable(value = "sys:user:role",key = "#userId")
+    List<SysRoleDTO> findAllRolesByUserId(String userId);
+
+    /**
+     * 删除用户角色缓存
+     * {@link ISysUserRoleService#assignUserRole(List)} /
+     * {@link ISysRoleService#updateSysRoleById(SysRoleDTO)} /
+     * {@link ISysRoleService#deleteSysRoleByIds(Collection)}
+     * @param userId
+     */
+    @CacheEvict(value = "sys:user:role",key = "#userId")
+    default void delUserRoleCache(String userId){
+
+    };
 }

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

@@ -11,11 +11,13 @@ import cn.tr.module.sys.tenant.service.ISysTenantService;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysMenuQueryDTO;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
+import cn.tr.module.sys.user.enums.RoleEnum;
 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.ISysRoleMenuService;
 import cn.tr.module.sys.user.service.ISysRoleService;
+import cn.tr.module.sys.user.service.ISysUserRoleService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
@@ -23,6 +25,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @ClassName : SysMenuServiceImpl
@@ -38,6 +41,10 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Lazy
     private ISysRoleMenuService roleMenuService;
 
+    @Autowired
+    @Lazy
+    private ISysUserRoleService userRoleService;
+
     @Autowired
     @Lazy
     private ISysTenantPackageMenuService tenantPackageMenuService;
@@ -119,13 +126,25 @@ public class SysMenuServiceImpl implements ISysMenuService {
     }
 
     @Override
-    public List<SysMenuDTO> findAllMenuByRoleId(String roleId) {
-        SysRoleDTO roleDTO = roleService.selectSysRoleById(roleId);
-        if(StrUtil.equals(roleDTO.getType(),"sys")){
-            //当前租户的所有菜单
-            return new ArrayList<>(tenantService.currentTenantMenus());
+    public Set<SysMenuDTO> findUserMenus(String userId) {
+        List<SysRoleDTO> roles = userRoleService.findAllRolesByUserId(userId);
+        //判断是否存在管理员账户
+        if (CollectionUtil.isEmpty(roles)) {
+            return new HashSet<>();
+        }
+        for (SysRoleDTO role : roles) {
+            if(StrUtil.equals(role.getType(), RoleEnum.sys.name())){
+                return tenantService.currentTenantMenus();
+            }
         }
-        return SysMenuMapper.INSTANCE.toSysMenuDTOList(menuRepository.findAllMenuByRoleId(roleId));
+        return roles.stream()
+                .filter(Objects::nonNull)
+                .filter(role->Boolean.FALSE.equals(role.getDisable()))
+                .map(SysRoleDTO::getId)
+                .map(roleMenuService::findAllMenuByRoleId)
+                .flatMap(Collection::stream)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
     }
 
     @Override

+ 38 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java

@@ -0,0 +1,38 @@
+package cn.tr.module.sys.user.service.impl;
+
+import cn.tr.module.sys.mapper.user.SysPortalMenuMapper;
+import cn.tr.module.sys.user.dto.SysPortalMenuDTO;
+import cn.tr.module.sys.user.po.SysPortalMenuPO;
+import cn.tr.module.sys.user.repository.SysPortalMenuRepository;
+import cn.tr.module.sys.user.service.ISysPortalMenuService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName : SysPortalMenuServiceImpl
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年04月09日
+ */
+@Service
+@AllArgsConstructor
+public class SysPortalMenuServiceImpl extends ServiceImpl<SysPortalMenuRepository, SysPortalMenuPO> implements ISysPortalMenuService {
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void assignPortalMenu(List<SysPortalMenuDTO> source) {
+        List<SysPortalMenuPO> portalMenus = SysPortalMenuMapper.INSTANCE.toSysPortalMenuPOList(source);
+        Map<String, List<SysPortalMenuPO>> collect = portalMenus.stream()
+                .collect(Collectors.groupingBy(SysPortalMenuPO::getPortalId));
+        collect.forEach((portalId,relations)->{
+            baseMapper.delete(new LambdaQueryWrapper<SysPortalMenuPO>().eq(SysPortalMenuPO::getPortalId,portalId));
+        });
+        saveBatch(portalMenus);
+    }
+}

+ 58 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalServiceImpl.java

@@ -0,0 +1,58 @@
+package cn.tr.module.sys.user.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.tr.module.sys.mapper.user.SysPortalMapper;
+import cn.tr.module.sys.user.dto.SysPortalDTO;
+import cn.tr.module.sys.user.dto.SysPortalQueryDTO;
+import cn.tr.module.sys.user.po.SysPortalPO;
+import cn.tr.module.sys.user.repository.SysPortalRepository;
+import cn.tr.module.sys.user.service.ISysPortalService;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @ClassName : SysPortalServiceImpl
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年03月31日
+ */
+@Service
+public class SysPortalServiceImpl implements ISysPortalService {
+    @Autowired
+    private SysPortalRepository portalRepository;
+    @Override
+    public List<SysPortalDTO> selectSysPortalList(SysPortalQueryDTO query) {
+        return SysPortalMapper.INSTANCE.toSysPortalDTOList(portalRepository.selectList(new LambdaQueryWrapper<SysPortalPO>()
+                .like(StrUtil.isNotEmpty(query.getPortalCode()),SysPortalPO::getCode,query.getPortalCode())
+                .like(StrUtil.isNotEmpty(query.getPortalName()),SysPortalPO::getName,query.getPortalName())
+                .eq(ObjectUtil.isNotNull(query.getDisable()),SysPortalPO::getDisable,query.getDisable())
+        ));
+    }
+
+
+    @Override
+    public SysPortalDTO selectSysPortalById(String id) {
+        return SysPortalMapper.INSTANCE.toSysPortalDTO(portalRepository.selectById(id));
+    }
+
+    @Override
+    public boolean updateSysPortalById(SysPortalDTO source) {
+        return portalRepository.updateById( SysPortalMapper.INSTANCE.toSysPortalPO(source))!=0;
+    }
+
+    @Override
+    @Transactional
+    public boolean insertSysPortal(SysPortalDTO source) {
+        return portalRepository.insert(SysPortalMapper.INSTANCE.toSysPortalPO(source))!=0;
+    }
+
+    @Override
+    public int deleteSysPortalByIds(Collection<String> ids) {
+        return portalRepository.deleteBatchIds(ids);
+    }
+}

+ 35 - 11
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleMenuServiceImpl.java

@@ -1,16 +1,22 @@
 package cn.tr.module.sys.user.service.impl;
 
+import cn.hutool.core.util.StrUtil;
+import cn.tr.module.sys.mapper.user.SysMenuMapper;
 import cn.tr.module.sys.mapper.user.SysRoleMenuMapper;
+import cn.tr.module.sys.tenant.service.ISysTenantService;
+import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysRoleMenuDTO;
+import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.po.SysRoleMenuPO;
+import cn.tr.module.sys.user.repository.SysMenuRepository;
 import cn.tr.module.sys.user.repository.SysRoleMenuRepository;
-import cn.tr.module.sys.user.service.ISysMenuService;
 import cn.tr.module.sys.user.service.ISysRoleMenuService;
 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 lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -24,24 +30,42 @@ import java.util.stream.Collectors;
  * @Date: 2023年04月04日
  */
 @Service
-@AllArgsConstructor
 public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuRepository,SysRoleMenuPO> implements ISysRoleMenuService {
-    private final ISysMenuService menuService;
-    private final ISysRoleService roleService;
+    @Autowired
+    private SysMenuRepository menuRepository;
+
+    @Autowired
+    @Lazy
+    private ISysRoleService roleService;
+
+    @Autowired
+    @Lazy
+    private ISysTenantService tenantService;
+
+    @Autowired
+    @Lazy
+    private ISysRoleMenuService self;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void assignRoleMenu(List<SysRoleMenuDTO> source) {
         List<SysRoleMenuPO> roleMenus = SysRoleMenuMapper.INSTANCE.toSysRoleMenuPOList(source);
-        Map<String, List<SysRoleMenuPO>> collect = roleMenus.stream()
+        Map<String, List<SysRoleMenuPO>> roleIdMap = roleMenus.stream()
                 .collect(Collectors.groupingBy(SysRoleMenuPO::getRoleId));
-        collect.forEach((k,relations)->{
-            baseMapper.delete(new LambdaQueryWrapper<SysRoleMenuPO>().eq(SysRoleMenuPO::getRoleId,k));
-            //清除角色缓存
-            menuService.delRoleMenusCache(k);
-        });
+        baseMapper.delete(new LambdaQueryWrapper<SysRoleMenuPO>().in(SysRoleMenuPO::getRoleId,roleIdMap.keySet()));
+        roleIdMap.keySet().forEach(self::delRoleMenusCache);
         saveBatch(roleMenus);
     }
 
+    @Override
+    public List<SysMenuDTO> findAllMenuByRoleId(String roleId) {
+        SysRoleDTO roleDTO = roleService.selectSysRoleById(roleId);
+        if(StrUtil.equals(roleDTO.getType(), RoleEnum.sys.name())){
+            //当前租户的所有菜单
+            return new ArrayList<>(tenantService.currentTenantMenus());
+        }
+        return SysMenuMapper.INSTANCE.toSysMenuDTOList(menuRepository.findAllMenuByRoleId(roleId));
+    }
+
     @Override
     public Set<String> findRoleByMenuId(Collection<String > menuIds,boolean containsSys) {
         List<SysRoleMenuPO> roleMenus = this.list(new LambdaQueryWrapper<SysRoleMenuPO>().in(SysRoleMenuPO::getMenuId, menuIds));

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

@@ -14,6 +14,7 @@ import cn.tr.module.sys.user.enums.RoleEnum;
 import cn.tr.module.sys.user.po.SysRolePO;
 import cn.tr.module.sys.user.repository.SysRoleRepository;
 import cn.tr.module.sys.user.service.ISysMenuService;
+import cn.tr.module.sys.user.service.ISysRoleMenuService;
 import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.user.service.ISysUserRoleService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -36,51 +37,19 @@ public class SysRoleServiceImpl implements ISysRoleService {
     @Autowired
     private SysRoleRepository roleRepository;
 
-    @Autowired
-    @Lazy
-    private ISysMenuService menuService;
     @Autowired
     @Lazy
     private ISysUserRoleService userRoleService;
 
-    @Autowired
-    @Lazy
-    private ISysTenantService tenantService;
-
-    @Autowired
-    @Lazy
-    private ISysRoleService self;
     @Override
     public List<SysRoleDTO> selectSysRoleList(SysRoleQueryDTO query) {
         return SysRoleMapper.INSTANCE.toSysRoleDTOList(roleRepository.selectList(new LambdaQueryWrapper<SysRolePO>()
                 .like(StrUtil.isNotEmpty(query.getRoleCode()),SysRolePO::getCode,query.getRoleCode())
                 .like(StrUtil.isNotEmpty(query.getRoleName()),SysRolePO::getName,query.getRoleName())
-                .like(ObjectUtil.isNotNull(query.getDisable()),SysRolePO::getDisable,query.getDisable())
+                .eq(ObjectUtil.isNotNull(query.getDisable()),SysRolePO::getDisable,query.getDisable())
         ));
     }
 
-    @Override
-    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(),RoleEnum.sys.name())){
-                return tenantService.currentTenantMenus();
-            }
-        }
-        return roles.stream()
-                .filter(Objects::nonNull)
-                .filter(role->Boolean.FALSE.equals(role.getDisable()))
-                .map(SysRoleDTO::getId)
-                .map(menuService::findAllMenuByRoleId)
-                .flatMap(Collection::stream)
-                .filter(Objects::nonNull)
-                .collect(Collectors.toSet());
-    }
-
     @Override
     public Collection<SysRoleDTO> findAllSysRoles() {
         return SysRoleMapper.INSTANCE.toSysRoleDTOList( roleRepository.selectList(new LambdaQueryWrapper<SysRolePO>()
@@ -98,8 +67,8 @@ public class SysRoleServiceImpl implements ISysRoleService {
     public boolean updateSysRoleById(SysRoleDTO source) {
         SysRolePO po = SysRoleMapper.INSTANCE.toSysRolePO(source);
         validateRoleSource(po);
-        Set<String> userIds = userRoleService.findUserByRoleId(source.getId());
-        userIds.parallelStream().forEach(self::delUserRoleCache);
+        Set<String> userIds = userRoleService.findUserByRoleId(Collections.singleton(source.getId()));
+        userIds.parallelStream().forEach(userRoleService::delUserRoleCache);
         return roleRepository.updateById(po)!=0;
     }
 
@@ -114,26 +83,18 @@ public class SysRoleServiceImpl implements ISysRoleService {
     @Override
     public int deleteSysRoleByIds(Collection<String> ids) {
         List<SysRolePO> roles = roleRepository.selectBatchIds(ids);
-        Optional<SysRolePO> adminRole = roles.stream()
-                .filter(po->StrUtil.equals(po.getType(), RoleEnum.sys.name()))
-                .findFirst();
-        if(adminRole.isPresent()){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法对系统角色进行操作");
-        }
         for (SysRolePO role : roles) {
-            Set<String> userIds = userRoleService.findUserByRoleId(role.getId());
-            if(CollectionUtil.isNotEmpty(userIds)){
-                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,String.format("角色编码{%s}已被使用,无法删除",role.getCode()));
+            if (StrUtil.equals(role.getType(), RoleEnum.sys.name())) {
+                throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"无法对系统角色进行操作");
             }
         }
+        Set<String> userIds = userRoleService.findUserByRoleId(ids);
+        if(CollectionUtil.isNotEmpty(userIds)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选角色已与用户关联,无法删除");
+        }
         return roleRepository.deleteBatchIds(ids);
     }
 
-    @Override
-    public List<SysRoleDTO> findAllRolesByUserId(String userId) {
-        return SysRoleMapper.INSTANCE.toSysRoleDTOList(roleRepository.findAllRoleByUserId(userId));
-    }
-
     private void validateRoleSource(SysRolePO source){
         SysRolePO role = roleRepository.selectOne(new LambdaQueryWrapper<SysRolePO>()
                 .eq(SysRolePO::getCode, source.getCode())

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

@@ -1,11 +1,12 @@
 package cn.tr.module.sys.user.service.impl;
 
-import cn.hutool.core.collection.CollectionUtil;
+import cn.tr.module.sys.mapper.user.SysRoleMapper;
 import cn.tr.module.sys.mapper.user.SysUserRoleMapper;
+import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysUserRoleDTO;
 import cn.tr.module.sys.user.po.SysUserRolePO;
+import cn.tr.module.sys.user.repository.SysRoleRepository;
 import cn.tr.module.sys.user.repository.SysUserRoleRepository;
-import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.user.service.ISysUserRoleService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -13,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -28,33 +30,29 @@ import java.util.stream.Collectors;
 public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleRepository, SysUserRolePO> implements ISysUserRoleService {
     @Autowired
     @Lazy
-    private ISysRoleService roleService;
+    private ISysUserRoleService self;
+
+    @Autowired
+    private SysRoleRepository roleRepository;
 
     @Override
     public void assignUserRole(List<SysUserRoleDTO> source) {
         List<SysUserRolePO> userRoles = SysUserRoleMapper.INSTANCE.toSysUserRolePOList(source);
-        Map<String, List<SysUserRolePO>> collect = userRoles.stream()
+        Map<String, List<SysUserRolePO>> userIdMap = userRoles.stream()
                 .collect(Collectors.groupingBy(SysUserRolePO::getUserId));
-        collect.forEach((userId,relations)->{
-            baseMapper.delete(new LambdaQueryWrapper<SysUserRolePO>().eq(SysUserRolePO::getUserId,userId));
-            //清除角色缓存
-            roleService.delUserRoleCache(userId);
-            if (CollectionUtil.isEmpty(relations)) {
-                return;
-            }
-            saveBatch(relations);
-        });
+        baseMapper.delete(new LambdaQueryWrapper<SysUserRolePO>().in(SysUserRolePO::getUserId,userIdMap.keySet()));
+        userIdMap.keySet().forEach(self::delUserRoleCache);
+        saveBatch(userRoles);
     }
 
     @Override
-    public Set<String> findUserByRoleId(String roleId) {
-        List<SysUserRolePO> userRoles = this.list(new LambdaQueryWrapper<SysUserRolePO>().eq(SysUserRolePO::getRoleId, roleId));
+    public Set<String> findUserByRoleId(Collection<String> roleIds) {
+        List<SysUserRolePO> userRoles = this.list(new LambdaQueryWrapper<SysUserRolePO>().in(SysUserRolePO::getRoleId, roleIds));
         return userRoles.stream().map(SysUserRolePO::getUserId).collect(Collectors.toSet());
     }
 
     @Override
-    public Set<String> findRolesByUserId(String userId) {
-        List<SysUserRolePO> userRoles = this.list(new LambdaQueryWrapper<SysUserRolePO>().eq(SysUserRolePO::getUserId, userId));
-        return userRoles.stream().map(SysUserRolePO::getRoleId).collect(Collectors.toSet());
+    public List<SysRoleDTO> findAllRolesByUserId(String userId) {
+        return SysRoleMapper.INSTANCE.toSysRoleDTOList(roleRepository.findAllRoleByUserId(userId));
     }
 }

+ 4 - 2
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserServiceImpl.java

@@ -43,7 +43,9 @@ public class SysUserServiceImpl implements ISysUserService {
     private ISysUserRoleService userRoleService;
     @Override
     public List<SysUserDTO> selectSysUserList(SysUserQueryDTO query) {
-        return null;
+        return SysUserMapper.INSTANCE.toUserDTOList(userRepository.selectList(
+                new LambdaQueryWrapper<SysUserPO>()
+        ));
     }
 
     @Override
@@ -52,7 +54,7 @@ public class SysUserServiceImpl implements ISysUserService {
         if(result==null){
             return result;
         }
-        result.setRoleIds(userRoleService.findRolesByUserId(id));
+        result.setRoleIds(userRoleService.findRoleIdsByUserId(id));
         return result;
     }
 

+ 2 - 2
tr-modules/tr-module-system/src/main/resources/mapper/user/SysRoleMapper.xml

@@ -7,8 +7,8 @@
 
     <select id="findAllRoleByUserId" resultType="cn.tr.module.sys.user.po.SysRolePO">
          select r.*
-            from (select * from sys_user where user_id=#{userId}) as u
-            join sys_user_role  as ur on ur.user_id=u.user_id
+            from (select * from sys_user where id=#{id}) as u
+            join sys_user_role  as ur on ur.user_id=u.id
             join sys_role as r on r.id = ur.role_id
     </select>
 

+ 0 - 1
tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/TrTenantAutoConfiguration.java

@@ -15,7 +15,6 @@ import org.springframework.beans.factory.config.BeanPostProcessor;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
-import org.springframework.cache.CacheManager;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Primary;

+ 0 - 16
tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/config/aop/CacheIgnoreTenant.java

@@ -1,16 +0,0 @@
-package cn.tr.plugin.biz.tenant.config.aop;
-
-import java.lang.annotation.*;
-
-/**
- * @Interface : CacheIgnoreTenant
- * @Description :
- * @Author : LF
- * @Date: 2023年04月07日
- */
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-@Inherited
-@Documented
-public @interface CacheIgnoreTenant {
-}

+ 1 - 6
tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/config/aop/TenantCacheAspect.java

@@ -22,15 +22,10 @@ public class TenantCacheAspect {
     @Around("getCachePointcut()")
     public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
         Object name = joinPoint.getArgs()[0];
-        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
-        CacheIgnoreTenant cacheIgnoreTenant = methodSignature.getMethod().getAnnotation(CacheIgnoreTenant.class);
-        TenantIgnore tenantIgnore = methodSignature.getMethod().getAnnotation(TenantIgnore.class);
-        if(cacheIgnoreTenant !=null&&tenantIgnore!=null){
+        if(!StrUtil.startWith(String.valueOf(name),"global",false)){
             String cacheName = TenantContextHolder.getTenantId() + StrUtil.COLON + name;
             return joinPoint.proceed(Stream.of(cacheName).toArray());
         }
-
-
         return joinPoint.proceed();
     }
 

+ 5 - 0
tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/constant/TenantConstant.java

@@ -19,6 +19,11 @@ public class TenantConstant {
      */
     public static final String TENANT_ID="tenant_id";
 
+    /**
+     * 是否为租户缓存
+     */
+    public static final String TENANT_CACHE="tenant_cache";
+
     /**
      * 是否忽略租户
      */

+ 1 - 0
tr-test/src/main/resources/application.yml

@@ -82,6 +82,7 @@ tr:
       - sys_tenant_package_menu
       - sys_role_menu
       - sys_user_role
+      - sys_portal_menu
 
 sa-token:
   is-read-header: true