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

fix(个人中心模块):

18339543638 пре 2 година
родитељ
комит
5669ed3925
36 измењених фајлова са 330 додато и 47 уклоњено
  1. 12 0
      tr-framework/src/main/java/cn/tr/core/utils/PswUtils.java
  2. 2 1
      tr-modules-api/pom.xml
  3. 14 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/controller/CurrentUserController.java
  4. 12 4
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/controller/OAuth2ServerController.java
  5. 72 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/dto/AccountUserInfoDTO.java
  6. 13 6
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/dto/OAuth2UpdatePswDTO.java
  7. 7 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/operator/OAuth2UserOperator.java
  8. 54 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/psw/operator/LoginOAuth2PswUserOperator.java
  9. 1 1
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/service/CurrentUserService.java
  10. 1 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/storage/controller/StorageFileController.java
  11. 2 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/tenant/service/ISysTenantPackageMenuService.java
  12. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysMenuController.java
  13. 3 3
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysOrgController.java
  14. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPortalController.java
  15. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysPositionController.java
  16. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysRoleController.java
  17. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysUserController.java
  18. 1 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysMenuDTO.java
  19. 24 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysOrgSmallDTO.java
  20. 24 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysPositionSmallDTO.java
  21. 24 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/dto/SysRoleSmallDTO.java
  22. 3 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/mapper/SysOrgMapper.java
  23. 3 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/mapper/SysPositionMapper.java
  24. 3 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/mapper/SysRoleMapper.java
  25. 0 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/po/SysRolePO.java
  26. 7 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysPositionService.java
  27. 7 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/ISysRoleService.java
  28. 2 2
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysMenuServiceImpl.java
  29. 1 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPortalMenuServiceImpl.java
  30. 9 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysPositionServiceImpl.java
  31. 9 0
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysRoleServiceImpl.java
  32. 5 5
      tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/service/impl/SysUserServiceImpl.java
  33. 1 1
      tr-plugins/tr-spring-boot-starter-plugin-biz-tenant/src/main/java/cn/tr/plugin/biz/tenant/config/aop/TenantCacheManagerAspect.java
  34. 1 0
      tr-plugins/tr-spring-boot-starter-plugin-cache/src/main/java/cn/tr/plugin/cache/CustomizeRedisCacheManagerAutoConfiguration.java
  35. 1 0
      tr-test/src/main/java/cn/tr/test/WebApplication.java
  36. 2 0
      tr-test/src/test/java/cn/tr/module/excel/CompositeExcelTemplateFacadeTest.java

+ 12 - 0
tr-framework/src/main/java/cn/tr/core/utils/PswUtils.java

@@ -1,5 +1,6 @@
 package cn.tr.core.utils;
 package cn.tr.core.utils;
 
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.digest.BCrypt;
 import cn.hutool.crypto.digest.BCrypt;
 import lombok.experimental.UtilityClass;
 import lombok.experimental.UtilityClass;
 
 
@@ -31,4 +32,15 @@ public class PswUtils {
     public static boolean matchesPassword(String rawPassword, String encodedPassword) {
     public static boolean matchesPassword(String rawPassword, String encodedPassword) {
         return BCrypt.checkpw(rawPassword, encodedPassword);
         return BCrypt.checkpw(rawPassword, encodedPassword);
     }
     }
+
+    /**
+     * 校验密码
+     *
+     * @param password 密码
+     */
+    public static void validatePsw(String password) {
+        if(StrUtil.length(password)<6){
+            throw new UnsupportedOperationException("密码长度不得少于6位");
+        }
+    }
 }
 }

+ 2 - 1
tr-modules-api/pom.xml

@@ -5,10 +5,11 @@
     <parent>
     <parent>
         <artifactId>tr-footstone</artifactId>
         <artifactId>tr-footstone</artifactId>
         <groupId>cn.tr</groupId>
         <groupId>cn.tr</groupId>
-        <version>0.0.9</version>
+        <version>${revision}</version>
     </parent>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <modelVersion>4.0.0</modelVersion>
 
 
+    <version>${revision}</version>
     <artifactId>tr-modules-api</artifactId>
     <artifactId>tr-modules-api</artifactId>
     <packaging>pom</packaging>
     <packaging>pom</packaging>
     <modules>
     <modules>

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

@@ -36,7 +36,7 @@ public class CurrentUserController {
     private final CurrentUserService currentUserService;
     private final CurrentUserService currentUserService;
     @ApiOperation("当前用户的登陆信息")
     @ApiOperation("当前用户的登陆信息")
     @GetMapping("/loginInfo")
     @GetMapping("/loginInfo")
-    public CommonResult accountInfo(){
+    public CommonResult loginInfo(){
         SaTokenUtils.getStpUtil().checkLogin();
         SaTokenUtils.getStpUtil().checkLogin();
         String stpType = LoginUserContextHolder.getStpType();
         String stpType = LoginUserContextHolder.getStpType();
         AbstractOAuth2PswUserOperator operator = pswUserOperatorManager.matchLoginType(stpType);
         AbstractOAuth2PswUserOperator operator = pswUserOperatorManager.matchLoginType(stpType);
@@ -66,4 +66,17 @@ public class CurrentUserController {
         SaTokenUtils.getStpUtil().checkLogin();
         SaTokenUtils.getStpUtil().checkLogin();
         return CommonResult.success(currentUserService.currentUserPortals());
         return CommonResult.success(currentUserService.currentUserPortals());
     }
     }
+
+    @ApiOperation("当前用户的个人账户中心信息")
+    @GetMapping("/accountInfo")
+    public CommonResult accountInfo(){
+        SaTokenUtils.getStpUtil().checkLogin();
+        String stpType = LoginUserContextHolder.getStpType();
+        AbstractOAuth2PswUserOperator operator = pswUserOperatorManager.matchLoginType(stpType);
+        if(operator==null){
+            throw new ServiceException(TRExcCode.USER_ERROR_A0200,String.format("账号体系[{%s}]不存在",stpType));
+        }
+        return CommonResult.success(operator.getAccountInfo());
+    }
+
 }
 }

+ 12 - 4
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/controller/OAuth2ServerController.java

@@ -14,6 +14,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.pojo.CommonResult;
 import cn.tr.core.pojo.CommonResult;
+import cn.tr.core.utils.PswUtils;
 import cn.tr.module.sys.oauth2.dto.OAuth2UpdatePswDTO;
 import cn.tr.module.sys.oauth2.dto.OAuth2UpdatePswDTO;
 import cn.tr.module.sys.oauth2.psw.operator.AbstractOAuth2PswUserOperator;
 import cn.tr.module.sys.oauth2.psw.operator.AbstractOAuth2PswUserOperator;
 import cn.tr.module.sys.oauth2.dto.OAuth2PswReqDTO;
 import cn.tr.module.sys.oauth2.dto.OAuth2PswReqDTO;
@@ -83,8 +84,7 @@ public class OAuth2ServerController {
     @ApiOperation("更新当前用户密码")
     @ApiOperation("更新当前用户密码")
     @PostMapping("/updatePsw")
     @PostMapping("/updatePsw")
     @SaIgnore
     @SaIgnore
-    public CommonResult<Boolean> updatePsw(@RequestBody @Validated OAuth2UpdatePswDTO psw){
-        SaClientModel cm = SaOAuth2Handle.currClientModel();
+    public CommonResult<Boolean> updatePsw(@RequestBody @Validated OAuth2UpdatePswDTO source){
         String stpType = LoginUserContextHolder.getStpType();
         String stpType = LoginUserContextHolder.getStpType();
         if (StrUtil.isEmpty(stpType)) {
         if (StrUtil.isEmpty(stpType)) {
             throw new ServiceException(TRExcCode.USER_ERROR_A0200,"账号体系不能为空");
             throw new ServiceException(TRExcCode.USER_ERROR_A0200,"账号体系不能为空");
@@ -93,9 +93,17 @@ public class OAuth2ServerController {
         if(operator==null){
         if(operator==null){
             throw new ServiceException(TRExcCode.USER_ERROR_A0200,String.format("账号体系[{%s}]不存在",stpType));
             throw new ServiceException(TRExcCode.USER_ERROR_A0200,String.format("账号体系[{%s}]不存在",stpType));
         }
         }
-        SaOAuth2Config cfg = SaOAuth2Manager.getConfig();
+        String confirmPsw = source.getConfirmPsw();
+        String newPsw = source.getNewPsw();
+        PswUtils.validatePsw(newPsw);
+        if(!StrUtil.equals(confirmPsw,newPsw)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"新密码与确认密码不相同,修改密码失败");
+        }
+        if(StrUtil.equals(source.getOldPsw(),newPsw)){
+            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"旧密码与新密码不能一样");
+        }
         return CommonResult.success(operator
         return CommonResult.success(operator
-                .updatePsw(psw.getOldPsw(),psw.getNewPsw()));
+                .updatePsw(source.getOldPsw(),source.getNewPsw()));
     }
     }
 
 
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")

+ 72 - 0
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/dto/AccountUserInfoDTO.java

@@ -0,0 +1,72 @@
+package cn.tr.module.sys.oauth2.dto;
+
+import cn.tr.module.sys.user.dto.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.*;
+
+/**
+ * @ClassName : AccountUserInfoDTO
+ * @Description : 账户中心信息
+ * @Author : LF
+ * @Date: 2023年05月25日
+ */
+@Data
+public class AccountUserInfoDTO {
+
+    private BasicInfo basicInfo;
+
+    /**
+     * 基本信息
+     */
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class BasicInfo{
+        @ApiModelProperty("头像")
+        private String avatar;
+
+        @ApiModelProperty("用户名")
+        private String username;
+
+        @ApiModelProperty("昵称")
+        private String nickname;
+
+        @ApiModelProperty("性别")
+        private String gender;
+
+        @ApiModelProperty("电话")
+        private String phone;
+
+        @ApiModelProperty("邮箱")
+        private String email;
+
+        @ApiModelProperty("角色")
+        private List<SysRoleSmallDTO> roles;
+
+        @ApiModelProperty("组织")
+        private SysOrgSmallDTO org;
+
+        @ApiModelProperty("岗位")
+        private List<SysPositionSmallDTO> positions;
+
+        @ApiModelProperty("创建时间")
+        private Date createTime;
+
+        @ApiModelProperty("最后登录IP")
+        private String lastLoginIp;
+
+        @ApiModelProperty("最后登录地点")
+        private String lastLoginAddress;
+
+        @ApiModelProperty("最后登录时间")
+        private Date lastLoginDate;
+    }
+
+
+}

+ 13 - 6
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/dto/OAuth2UpdatePswDTO.java

@@ -5,6 +5,7 @@ import lombok.Data;
 import org.hibernate.validator.constraints.Length;
 import org.hibernate.validator.constraints.Length;
 
 
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
 
 
 /**
 /**
  * @ClassName : OAuth2UpdatePswDTO
  * @ClassName : OAuth2UpdatePswDTO
@@ -13,15 +14,21 @@ import javax.validation.constraints.NotEmpty;
  * @Date: 2023年04月01日
  * @Date: 2023年04月01日
  */
  */
 @Data
 @Data
-public class OAuth2UpdatePswDTO extends OAuth2DTO{
+public class OAuth2UpdatePswDTO implements Serializable {
 
 
-    @ApiModelProperty(value = "旧密码",required = true)
-    @NotEmpty(message = "新密码不能为空")
-    @Length(min = 4, max = 16, message = "新密码长度为 4-16 位")
-    private String newPsw;
 
 
     @ApiModelProperty(value = "旧密码",required = true)
     @ApiModelProperty(value = "旧密码",required = true)
     @NotEmpty(message = "旧密码不能为空")
     @NotEmpty(message = "旧密码不能为空")
-    @Length(min = 4, max = 16, message = "旧密码长度为 4-16 位")
+    @Length(min = 6, max = 16, message = "旧密码长度为 4-16 位")
     private String oldPsw;
     private String oldPsw;
+
+    @ApiModelProperty(value = "旧密码",required = true)
+    @NotEmpty(message = "新密码不能为空")
+    @Length(min = 6, max = 16, message = "新密码长度为 6-16 位")
+    private String newPsw;
+
+    @ApiModelProperty(value = "确认密码",required = true)
+    @NotEmpty(message = "确认密码不能为空")
+    @Length(min = 6, max = 16, message = "新密码长度为 6-16 位")
+    private String confirmPsw;
 }
 }

+ 7 - 1
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/operator/OAuth2UserOperator.java

@@ -17,8 +17,8 @@ package cn.tr.module.sys.oauth2.operator;
 
 
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.session.SaSession;
 import cn.dev33.satoken.session.TokenSign;
 import cn.dev33.satoken.session.TokenSign;
-import cn.hutool.http.HttpUtil;
 import cn.tr.module.sys.oauth2.LoginTypeMatcher;
 import cn.tr.module.sys.oauth2.LoginTypeMatcher;
+import cn.tr.module.sys.oauth2.dto.AccountUserInfoDTO;
 import cn.tr.module.sys.oauth2.dto.OAuth2PswReqDTO;
 import cn.tr.module.sys.oauth2.dto.OAuth2PswReqDTO;
 import cn.tr.module.sys.oauth2.enums.OAuth2ModelEnum;
 import cn.tr.module.sys.oauth2.enums.OAuth2ModelEnum;
 import cn.tr.module.sys.user.dto.OnlineUserSessionDTO;
 import cn.tr.module.sys.user.dto.OnlineUserSessionDTO;
@@ -65,6 +65,12 @@ public interface OAuth2UserOperator extends LoginTypeMatcher {
 	 */
 	 */
 	Object getUserLoginInfo();
 	Object getUserLoginInfo();
 
 
+	/**
+	 * 当前用户的账户信息
+	 * @return
+	 */
+	AccountUserInfoDTO getAccountInfo();
+
 	default void setSessionUser(String tokenValue, UserLoginInfoBO loginInfo){
 	default void setSessionUser(String tokenValue, UserLoginInfoBO loginInfo){
 		SaTokenUtils.set(SecurityConstant.LOGIN_USER,loginInfo);
 		SaTokenUtils.set(SecurityConstant.LOGIN_USER,loginInfo);
 		OnlineUserSessionDTO userSession = SaTokenUtils.getValue(SecurityConstant.SESSION_USER, OnlineUserSessionDTO.class);
 		OnlineUserSessionDTO userSession = SaTokenUtils.getValue(SecurityConstant.SESSION_USER, OnlineUserSessionDTO.class);

+ 54 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/oauth2/psw/operator/LoginOAuth2PswUserOperator.java

@@ -9,27 +9,38 @@ import cn.hutool.http.useragent.UserAgentUtil;
 import cn.tr.core.annotation.TenantIgnore;
 import cn.tr.core.annotation.TenantIgnore;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.ServiceException;
 import cn.tr.core.exception.TRExcCode;
 import cn.tr.core.exception.TRExcCode;
-import cn.tr.core.strategy.LoginUserStrategy;
 import cn.tr.core.utils.IpUtil;
 import cn.tr.core.utils.IpUtil;
 import cn.tr.core.utils.PswUtils;
 import cn.tr.core.utils.PswUtils;
 import cn.tr.core.utils.ServletUtils;
 import cn.tr.core.utils.ServletUtils;
 import cn.tr.module.sys.config.SysConfigManager;
 import cn.tr.module.sys.config.SysConfigManager;
 import cn.tr.module.sys.config.SysConfigProperties;
 import cn.tr.module.sys.config.SysConfigProperties;
 import cn.tr.module.sys.oauth2.config.CaptchaOperator;
 import cn.tr.module.sys.oauth2.config.CaptchaOperator;
+import cn.tr.module.sys.oauth2.dto.AccountUserInfoDTO;
 import cn.tr.module.sys.oauth2.mapper.OAuth2Mapper;
 import cn.tr.module.sys.oauth2.mapper.OAuth2Mapper;
 import cn.tr.module.sys.oauth2.dto.OAuth2PswReqDTO;
 import cn.tr.module.sys.oauth2.dto.OAuth2PswReqDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
 import cn.tr.module.sys.tenant.dto.SysTenantCommonDTO;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
 import cn.tr.module.sys.tenant.service.ISysTenantService;
+import cn.tr.module.sys.user.dto.SysOrgDTO;
+import cn.tr.module.sys.user.dto.SysPositionDTO;
+import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysUserDTO;
 import cn.tr.module.sys.user.dto.SysUserDTO;
 import cn.tr.module.sys.user.enums.UserStatusEnum;
 import cn.tr.module.sys.user.enums.UserStatusEnum;
+import cn.tr.module.sys.user.mapper.SysOrgMapper;
+import cn.tr.module.sys.user.mapper.SysPositionMapper;
+import cn.tr.module.sys.user.mapper.SysRoleMapper;
+import cn.tr.module.sys.user.service.ISysOrgService;
+import cn.tr.module.sys.user.service.ISysPositionService;
+import cn.tr.module.sys.user.service.ISysRoleService;
 import cn.tr.module.sys.user.service.ISysUserService;
 import cn.tr.module.sys.user.service.ISysUserService;
 import cn.tr.plugin.security.bo.UserLoginInfoBO;
 import cn.tr.plugin.security.bo.UserLoginInfoBO;
+import cn.tr.plugin.security.context.LoginUserContextHolder;
 import cn.tr.plugin.security.utils.SaTokenUtils;
 import cn.tr.plugin.security.utils.SaTokenUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 import java.util.Optional;
 import java.util.Optional;
 
 
 /**
 /**
@@ -54,6 +65,16 @@ public class LoginOAuth2PswUserOperator extends AbstractOAuth2PswUserOperator{
 
 
     @Autowired
     @Autowired
     private CaptchaOperator captchaOperator;
     private CaptchaOperator captchaOperator;
+
+    @Autowired
+    private ISysOrgService orgService;
+
+    @Autowired
+    private ISysRoleService roleService;
+
+    @Autowired
+    private ISysPositionService positionService;
+
     @Override
     @Override
     @TenantIgnore
     @TenantIgnore
     public String auth(OAuth2PswReqDTO source) {
     public String auth(OAuth2PswReqDTO source) {
@@ -133,8 +154,7 @@ public class LoginOAuth2PswUserOperator extends AbstractOAuth2PswUserOperator{
 
 
     @Override
     @Override
     public boolean updatePsw(String oldPsw, String newPsw) {
     public boolean updatePsw(String oldPsw, String newPsw) {
-        String username = LoginUserStrategy.tr.getCurrentUsername();
-        return  sysUserService.updatePsw(username,oldPsw,newPsw);
+        return  sysUserService.updatePsw(LoginUserContextHolder.getUser().getUserId(),oldPsw,newPsw);
     }
     }
 
 
     @Override
     @Override
@@ -144,6 +164,37 @@ public class LoginOAuth2PswUserOperator extends AbstractOAuth2PswUserOperator{
         return OAuth2Mapper.INSTANCE.toPswLoginInfo(sysUserService.selectSysUserById(loginId));
         return OAuth2Mapper.INSTANCE.toPswLoginInfo(sysUserService.selectSysUserById(loginId));
     }
     }
 
 
+    @Override
+    public AccountUserInfoDTO getAccountInfo() {
+        AccountUserInfoDTO result = new AccountUserInfoDTO();
+        String loginId =String.valueOf( SaTokenUtils.getStpUtil().getLoginId());
+        SysUserDTO user = sysUserService.selectSysUserById(loginId);
+
+        AccountUserInfoDTO.BasicInfo basicInfo = AccountUserInfoDTO.BasicInfo.builder()
+                .avatar(user.getAvatar())
+                .username(user.getUsername())
+                .nickname(user.getNickname())
+                .gender(user.getGender())
+                .phone(user.getPhone())
+                .email(user.getEmail())
+                .createTime(user.getCreateTime())
+                .lastLoginIp(user.getLastLoginIp())
+                .lastLoginAddress(user.getLastLoginAddress())
+                .lastLoginDate(user.getLastLoginDate())
+                .build();
+        //填充角色信息
+        List<SysRoleDTO> roles = roleService.selectSysRoleByIds(user.getRoleIds());
+        basicInfo.setRoles(SysRoleMapper.INSTANCE.convertSmallList(roles));
+        //填充岗位信息
+        List<SysPositionDTO> positions = positionService.selectSysPositionByIds(user.getPostIds());
+        basicInfo.setPositions(SysPositionMapper.INSTANCE.convertSmallList(positions));
+        //填充机构信息
+        SysOrgDTO sysOrgDTO = orgService.selectSysOrgById(user.getOrgId());
+        basicInfo.setOrg(SysOrgMapper.INSTANCE.convertSmall(sysOrgDTO));
+        result.setBasicInfo(basicInfo);
+        return result;
+    }
+
     @Override
     @Override
     public String matchLoginType() {
     public String matchLoginType() {
         return StpUtil.TYPE;
         return StpUtil.TYPE;

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

@@ -79,7 +79,7 @@ public class CurrentUserService {
                 .values()
                 .values()
                 .stream()
                 .stream()
                 .filter(menu -> !StrUtil.equals(MenuEnum.button.name(), menu.getMenuType()))
                 .filter(menu -> !StrUtil.equals(MenuEnum.button.name(), menu.getMenuType()))
-                .filter(menu-> Boolean.TRUE.equals(menu.getVisible()))
+//                .filter(menu-> Boolean.TRUE.equals(menu.getVisible()))
                 .map(menuService::convertToRoute)
                 .map(menuService::convertToRoute)
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
     }
     }

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

@@ -37,8 +37,7 @@ public class StorageFileController {
 
 
     @ApiOperationSupport(author = "lf",order = 2)
     @ApiOperationSupport(author = "lf",order = 2)
     @PostMapping("/removeByIds")
     @PostMapping("/removeByIds")
-    @ApiOperation( value = "删除文件",notes = "权限:storage:file:remove")
-    @SaCheckPermission("storage:file:remove")
+    @ApiOperation( value = "删除文件",notes = "权限:无")
     public CommonResult<Boolean> deleteFile(@RequestBody Collection<String> ids) throws Exception {
     public CommonResult<Boolean> deleteFile(@RequestBody Collection<String> ids) throws Exception {
         fileService.remove(ids);
         fileService.remove(ids);
         return CommonResult.success(true);
         return CommonResult.success(true);

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

@@ -1,6 +1,5 @@
 package cn.tr.module.sys.tenant.service;
 package cn.tr.module.sys.tenant.service;
 
 
-import cn.tr.module.sys.tenant.dto.SysTenantPackageMenuDTO;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import cn.tr.module.sys.user.dto.SysMenuDTO;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
@@ -37,7 +36,7 @@ public interface ISysTenantPackageMenuService {
      * {@link cn.tr.module.sys.user.service.ISysMenuService#updateSysMenuById(SysMenuDTO)}
      * {@link cn.tr.module.sys.user.service.ISysMenuService#updateSysMenuById(SysMenuDTO)}
      * @param packageId
      * @param packageId
      */
      */
-    @CacheEvict(value = "menu:package",key = "#packageId")
+    @CacheEvict(value = "global:menu:package",key = "#packageId")
     default void delCacheMenuIdByPackageId(String packageId){
     default void delCacheMenuIdByPackageId(String packageId){
 
 
     }
     }
@@ -46,6 +45,6 @@ public interface ISysTenantPackageMenuService {
      * @param packageId
      * @param packageId
      * @return
      * @return
      */
      */
-    @Cacheable(value = "menu:package",key = "#packageId")
+    @Cacheable(value = "global:menu:package",key = "#packageId")
     Set<SysMenuDTO> findMenuIdByPackageId(String packageId);
     Set<SysMenuDTO> findMenuIdByPackageId(String packageId);
 }
 }

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

@@ -74,8 +74,8 @@ public class SysMenuController extends BaseController {
     
     
     @PostMapping("/deleteByIds")
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "删除菜单",notes = "权限: sys:menu:del")
-    @SaCheckPermission("sys:menu:del")
+    @ApiOperation(value = "删除菜单",notes = "权限: sys:menu:remove")
+    @SaCheckPermission("sys:menu:remove")
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(menuService.deleteSysMenuByIds(ids));
         return CommonResult.success(menuService.deleteSysMenuByIds(ids));
     }
     }

+ 3 - 3
tr-modules/tr-module-system/src/main/java/cn/tr/module/sys/user/controller/SysOrgController.java

@@ -42,7 +42,7 @@ public class SysOrgController extends BaseController {
 
 
     @PostMapping("/query/page")
     @PostMapping("/query/page")
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "根据条件查询组织",notes = "权限: sys:org:query")
+    @ApiOperation(value = "根据条件查询组织",notes = "权限: ")
     public TableDataInfo<SysOrgDTO> selectList(@RequestBody SysOrgQueryDTO query){
     public TableDataInfo<SysOrgDTO> selectList(@RequestBody SysOrgQueryDTO query){
         startPage();
         startPage();
         return getDataTable(orgService.selectSysOrgList(query));
         return getDataTable(orgService.selectSysOrgList(query));
@@ -76,8 +76,8 @@ public class SysOrgController extends BaseController {
 
 
     @PostMapping("/deleteByIds")
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "删除组织",notes = "权限: sys:org:del")
-    @SaCheckPermission("sys:org:del")
+    @ApiOperation(value = "删除组织",notes = "权限: sys:org:remove")
+    @SaCheckPermission("sys:org:remove")
     @OperateLog
     @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(orgService.deleteSysOrgByIds(ids));
         return CommonResult.success(orgService.deleteSysOrgByIds(ids));

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

@@ -85,8 +85,8 @@ public class SysPortalController extends BaseController {
 
 
     @PostMapping("/removeByIds")
     @PostMapping("/removeByIds")
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "删除门户",notes = "权限: sys:portal:del")
-    @SaCheckPermission("sys:portal:del")
+    @ApiOperation(value = "删除门户",notes = "权限: sys:portal:remove")
+    @SaCheckPermission("sys:portal:remove")
     @OperateLog
     @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(portalService.deleteSysPortalByIds(ids));
         return CommonResult.success(portalService.deleteSysPortalByIds(ids));

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

@@ -68,8 +68,8 @@ public class SysPositionController extends BaseController {
 
 
     @PostMapping("/deleteByIds")
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf",order = 5)
     @ApiOperationSupport(author = "lf",order = 5)
-    @ApiOperation(value = "删除岗位",notes = "权限: sys:pos:del")
-    @SaCheckPermission("sys:pos:del")
+    @ApiOperation(value = "删除岗位",notes = "权限: sys:pos:remove")
+    @SaCheckPermission("sys:pos:remove")
     @OperateLog
     @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(PositionService.deleteSysPositionByIds(ids));
         return CommonResult.success(PositionService.deleteSysPositionByIds(ids));

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

@@ -90,8 +90,8 @@ public class SysRoleController extends BaseController {
 
 
     @PostMapping("/deleteByIds")
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "删除角色",notes = "权限: sys:role:del")
-    @SaCheckPermission("sys:role:del")
+    @ApiOperation(value = "删除角色",notes = "权限: sys:role:remove")
+    @SaCheckPermission("sys:role:remove")
     @OperateLog
     @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(roleService.deleteSysRoleByIds(ids));
         return CommonResult.success(roleService.deleteSysRoleByIds(ids));

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

@@ -88,8 +88,8 @@ public class SysUserController extends BaseController {
 
 
     @PostMapping("/deleteByIds")
     @PostMapping("/deleteByIds")
     @ApiOperationSupport(author = "lf")
     @ApiOperationSupport(author = "lf")
-    @ApiOperation(value = "删除用户",notes = "权限: sys:user:del")
-    @SaCheckPermission("sys:user:del")
+    @ApiOperation(value = "删除用户",notes = "权限: sys:user:remove")
+    @SaCheckPermission("sys:user:remove")
     @OperateLog
     @OperateLog
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
     public CommonResult<Integer> deleteByIds(@RequestBody Collection<String> ids){
         return CommonResult.success(userService.deleteSysUserByIds(ids));
         return CommonResult.success(userService.deleteSysUserByIds(ids));

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

@@ -99,13 +99,12 @@ public class SysMenuDTO extends TreeNode<String> {
     public boolean equals(Object o) {
     public boolean equals(Object o) {
         if (this == o) return true;
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
         if (o == null || getClass() != o.getClass()) return false;
-        if (!super.equals(o)) return false;
         SysMenuDTO that = (SysMenuDTO) o;
         SysMenuDTO that = (SysMenuDTO) o;
         return Objects.equals(getId(), that.getId());
         return Objects.equals(getId(), that.getId());
     }
     }
 
 
     @Override
     @Override
     public int hashCode() {
     public int hashCode() {
-        return Objects.hash(super.hashCode(), getId());
+        return Objects.hash(getId());
     }
     }
 }
 }

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

@@ -0,0 +1,24 @@
+package cn.tr.module.sys.user.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName : SysOrgSmallDTO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年05月25日
+ */
+@Data
+public class SysOrgSmallDTO implements Serializable {
+    private static final long serialVersionUID = 9134124394103187741L;
+    /**
+     * 部门id
+     */
+    private String id;
+    /**
+     * 部门名称
+     */
+    private String name;
+}

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

@@ -0,0 +1,24 @@
+package cn.tr.module.sys.user.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName : SysRoleSmallDTO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年05月25日
+ */
+@Data
+public class SysPositionSmallDTO implements Serializable {
+    private static final long serialVersionUID = 5967436706256535472L;
+    /**
+     * 角色id
+     */
+    private String id;
+    /**
+     * 角色名称
+     */
+    private String name;
+}

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

@@ -0,0 +1,24 @@
+package cn.tr.module.sys.user.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName : SysRoleSmallDTO
+ * @Description :
+ * @Author : LF
+ * @Date: 2023年05月25日
+ */
+@Data
+public class SysRoleSmallDTO implements Serializable {
+    private static final long serialVersionUID = 5967436706256535472L;
+    /**
+     * 岗位id
+     */
+    private String id;
+    /**
+     * 岗位名称
+     */
+    private String name;
+}

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

@@ -1,6 +1,7 @@
 package cn.tr.module.sys.user.mapper;
 package cn.tr.module.sys.user.mapper;
 
 
 import cn.tr.module.sys.user.dto.SysOrgDTO;
 import cn.tr.module.sys.user.dto.SysOrgDTO;
+import cn.tr.module.sys.user.dto.SysOrgSmallDTO;
 import cn.tr.module.sys.user.dto.SysOrgTreeDTO;
 import cn.tr.module.sys.user.dto.SysOrgTreeDTO;
 import cn.tr.module.sys.user.po.SysOrgPO;
 import cn.tr.module.sys.user.po.SysOrgPO;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapper;
@@ -22,6 +23,8 @@ public interface SysOrgMapper {
 
 
     SysOrgDTO toSysOrgDTO(SysOrgPO source);
     SysOrgDTO toSysOrgDTO(SysOrgPO source);
 
 
+    SysOrgSmallDTO convertSmall(SysOrgDTO source);
+
     SysOrgPO toSysOrgPO(SysOrgDTO source);
     SysOrgPO toSysOrgPO(SysOrgDTO source);
     
     
     List<SysOrgTreeDTO> toSysOrgTree(List<SysOrgDTO> source);
     List<SysOrgTreeDTO> toSysOrgTree(List<SysOrgDTO> source);

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

@@ -1,6 +1,7 @@
 package cn.tr.module.sys.user.mapper;
 package cn.tr.module.sys.user.mapper;
 
 
 import cn.tr.module.sys.user.dto.SysPositionDTO;
 import cn.tr.module.sys.user.dto.SysPositionDTO;
+import cn.tr.module.sys.user.dto.SysPositionSmallDTO;
 import cn.tr.module.sys.user.po.SysPositionPO;
 import cn.tr.module.sys.user.po.SysPositionPO;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 import org.mapstruct.factory.Mappers;
@@ -22,4 +23,6 @@ public interface SysPositionMapper {
     SysPositionDTO toSysPositionDTO(SysPositionPO source);
     SysPositionDTO toSysPositionDTO(SysPositionPO source);
 
 
     SysPositionPO toSysPositionPO(SysPositionDTO source);
     SysPositionPO toSysPositionPO(SysPositionDTO source);
+
+    List<SysPositionSmallDTO>  convertSmallList(List<SysPositionDTO> positions);
 }
 }

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

@@ -1,6 +1,7 @@
 package cn.tr.module.sys.user.mapper;
 package cn.tr.module.sys.user.mapper;
 
 
 import cn.tr.module.sys.user.dto.SysRoleDTO;
 import cn.tr.module.sys.user.dto.SysRoleDTO;
+import cn.tr.module.sys.user.dto.SysRoleSmallDTO;
 import cn.tr.module.sys.user.po.SysRolePO;
 import cn.tr.module.sys.user.po.SysRolePO;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 import org.mapstruct.factory.Mappers;
@@ -19,6 +20,8 @@ public interface SysRoleMapper {
 
 
     List<SysRoleDTO> toSysRoleDTOList(List<SysRolePO> source);
     List<SysRoleDTO> toSysRoleDTOList(List<SysRolePO> source);
 
 
+    List<SysRoleSmallDTO> convertSmallList(List<SysRoleDTO> source);
+
     SysRoleDTO toSysRoleDTO(SysRolePO source);
     SysRoleDTO toSysRoleDTO(SysRolePO source);
 
 
     SysRolePO toSysRolePO(SysRoleDTO source);
     SysRolePO toSysRolePO(SysRoleDTO source);

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

@@ -4,7 +4,6 @@ import cn.tr.core.annotation.Comment;
 import cn.tr.core.enums.CreateEnum;
 import cn.tr.core.enums.CreateEnum;
 import cn.tr.plugin.mybatis.config.handler.StringListTypeHandler;
 import cn.tr.plugin.mybatis.config.handler.StringListTypeHandler;
 import cn.tr.plugin.mybatis.pojo.TenantPO;
 import cn.tr.plugin.mybatis.pojo.TenantPO;
-import cn.tr.plugin.numbering.strategy.core.annotation.Numbering;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
@@ -26,7 +25,6 @@ public class SysRolePO extends TenantPO {
     private String id;
     private String id;
 
 
     @Comment("角色编码")
     @Comment("角色编码")
-    @Numbering(code = "13")
     private String code;
     private String code;
 
 
     @Comment("角色名称")
     @Comment("角色名称")

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

@@ -29,6 +29,13 @@ public interface ISysPositionService{
      */
      */
     SysPositionDTO selectSysPositionById(String id);
     SysPositionDTO selectSysPositionById(String id);
 
 
+    /**
+     * 根据id查询操作岗位
+     * @param ids 岗位id集合
+     * @return 岗位
+     */
+    List<SysPositionDTO> selectSysPositionByIds(Collection<String> ids);
+
     /**
     /**
      * 更新岗位
      * 更新岗位
      * @param source 更新岗位
      * @param source 更新岗位

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

@@ -42,6 +42,13 @@ public interface ISysRoleService {
      */
      */
     SysRoleDTO selectSysRoleById(String id);
     SysRoleDTO selectSysRoleById(String id);
 
 
+
+    /**
+     * 根据id查询操作角色
+     * @param ids 角色id集合
+     * @return 角色
+     */
+    List<SysRoleDTO> selectSysRoleByIds(Collection<String> ids);
     /**
     /**
      * 更新角色
      * 更新角色
      * @param source 更新角色
      * @param source 更新角色

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

@@ -127,11 +127,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuRepository,SysMenuPO>
         //删除相应缓存
         //删除相应缓存
         Set<String> roleIds = roleMenuService.findRoleByMenuId(allDelMenuIds,false);
         Set<String> roleIds = roleMenuService.findRoleByMenuId(allDelMenuIds,false);
         if(CollectionUtil.isNotEmpty(roleIds)){
         if(CollectionUtil.isNotEmpty(roleIds)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选菜单已与角色相关联,请取消关联后再删除菜单");
+            roleIds.forEach(roleMenuService::delRoleMenusCache);
         }
         }
         Set<String> packageIds = tenantPackageMenuService.findPackageIdByMenuId(allDelMenuIds,false);
         Set<String> packageIds = tenantPackageMenuService.findPackageIdByMenuId(allDelMenuIds,false);
         if(CollectionUtil.isNotEmpty(packageIds)){
         if(CollectionUtil.isNotEmpty(packageIds)){
-            throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"所选菜单已与租户套餐相关联,请取消关联后再删除菜单");
+            packageIds.forEach(tenantPackageMenuService::delCacheMenuIdByPackageId);
         }
         }
         refreshCache(allDelMenuIds);
         refreshCache(allDelMenuIds);
         return menuRepository.deleteBatchIds(allDelMenuIds);
         return menuRepository.deleteBatchIds(allDelMenuIds);

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

@@ -59,6 +59,7 @@ public class SysPortalMenuServiceImpl extends ServiceImpl<SysPortalMenuRepositor
         if(CollectionUtil.isNotEmpty(menuIds)){
         if(CollectionUtil.isNotEmpty(menuIds)){
             List<SysPortalMenuPO> packageMenus = menuIds
             List<SysPortalMenuPO> packageMenus = menuIds
                     .stream()
                     .stream()
+                    .distinct()
                     .map(menuId -> {
                     .map(menuId -> {
                         SysPortalMenuPO result = new SysPortalMenuPO();
                         SysPortalMenuPO result = new SysPortalMenuPO();
                         result.setMenuId(menuId);
                         result.setMenuId(menuId);

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

@@ -1,5 +1,6 @@
 package cn.tr.module.sys.user.service.impl;
 package cn.tr.module.sys.user.service.impl;
 
 
+import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.tr.module.sys.user.mapper.SysPositionMapper;
 import cn.tr.module.sys.user.mapper.SysPositionMapper;
@@ -42,6 +43,14 @@ public class SysPositionServiceImpl implements ISysPositionService {
         return SysPositionMapper.INSTANCE.toSysPositionDTO(positionRepository.selectById(id));
         return SysPositionMapper.INSTANCE.toSysPositionDTO(positionRepository.selectById(id));
     }
     }
 
 
+    @Override
+    public List<SysPositionDTO> selectSysPositionByIds(Collection<String> ids) {
+        if(CollectionUtil.isEmpty(ids)){
+            return Collections.emptyList();
+        }
+        return SysPositionMapper.INSTANCE.toSysPositionDTOList(positionRepository.selectBatchIds(ids));
+    }
+
     @Override
     @Override
     public boolean updateSysPositionById(SysPositionDTO source) {
     public boolean updateSysPositionById(SysPositionDTO source) {
         return positionRepository.updateById(SysPositionMapper.INSTANCE.toSysPositionPO(source))!=0;
         return positionRepository.updateById(SysPositionMapper.INSTANCE.toSysPositionPO(source))!=0;

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

@@ -64,6 +64,15 @@ public class SysRoleServiceImpl implements ISysRoleService {
         return SysRoleMapper.INSTANCE.toSysRoleDTO(roleRepository.selectById(id));
         return SysRoleMapper.INSTANCE.toSysRoleDTO(roleRepository.selectById(id));
     }
     }
 
 
+    @Override
+    public List<SysRoleDTO> selectSysRoleByIds(Collection<String> ids) {
+        if(CollectionUtil.isEmpty(ids)){
+            return Collections.emptyList();
+        }
+        return SysRoleMapper.INSTANCE.toSysRoleDTOList( roleRepository.selectBatchIds(ids));
+
+    }
+
     @Override
     @Override
     public boolean updateSysRoleById(SysRoleDTO source) {
     public boolean updateSysRoleById(SysRoleDTO source) {
         SysRolePO po = SysRoleMapper.INSTANCE.toSysRolePO(source);
         SysRolePO po = SysRoleMapper.INSTANCE.toSysRolePO(source);

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

@@ -18,6 +18,8 @@ import cn.tr.module.sys.user.service.ISysUserRoleService;
 import cn.tr.module.sys.user.service.ISysUserService;
 import cn.tr.module.sys.user.service.ISysUserService;
 import cn.tr.module.sys.user.po.SysUserPO;
 import cn.tr.module.sys.user.po.SysUserPO;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.context.annotation.Lazy;
@@ -91,14 +93,12 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserRepository,SysUserPO>
 
 
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public boolean updatePsw(String username, String oldPsw, String newPsw) {
-        SysUserPO user = baseMapper.selectOne(new LambdaQueryWrapper<SysUserPO>()
-                .eq(SysUserPO::getUsername, username)
-                .last("limit 1"));
+    public boolean updatePsw(String userId, String oldPsw, String newPsw) {
+        SysUserPO user = baseMapper.selectById(userId);
         if(user==null){
         if(user==null){
             return true;
             return true;
         }
         }
-        if (PswUtils.matchesPassword(oldPsw, user.getPassword())) {
+        if (!PswUtils.matchesPassword(oldPsw, user.getPassword())) {
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"旧密码错误");
             throw new ServiceException(TRExcCode.SYSTEM_ERROR_B0001,"旧密码错误");
         }
         }
         SysUserPO updateUser = new SysUserPO();
         SysUserPO updateUser = new SysUserPO();

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

@@ -19,7 +19,7 @@ import java.util.stream.Stream;
 public class TenantCacheManagerAspect {
 public class TenantCacheManagerAspect {
 
 
     @Around("getCachePointcut()")
     @Around("getCachePointcut()")
-    public Object aroundgetCache(ProceedingJoinPoint joinPoint) throws Throwable {
+    public Object aroundGetCache(ProceedingJoinPoint joinPoint) throws Throwable {
         Object name = joinPoint.getArgs()[0];
         Object name = joinPoint.getArgs()[0];
         if(!StrUtil.startWith(String.valueOf(name),"global",false)){
         if(!StrUtil.startWith(String.valueOf(name),"global",false)){
             String cacheName = TenantContextHolder.getTenantId() + StrUtil.COLON + name;
             String cacheName = TenantContextHolder.getTenantId() + StrUtil.COLON + name;

+ 1 - 0
tr-plugins/tr-spring-boot-starter-plugin-cache/src/main/java/cn/tr/plugin/cache/CustomizeRedisCacheManagerAutoConfiguration.java

@@ -23,6 +23,7 @@ import org.springframework.data.redis.serializer.RedisSerializationContext;
  * @Date: 2023年04月19日
  * @Date: 2023年04月19日
  */
  */
 @Configuration
 @Configuration
+@EnableCaching
 @EnableConfigurationProperties(CacheProperties.class)
 @EnableConfigurationProperties(CacheProperties.class)
 @ConditionalOnProperty(prefix = "spring.cache",name = "type",havingValue = "redis")
 @ConditionalOnProperty(prefix = "spring.cache",name = "type",havingValue = "redis")
 public class CustomizeRedisCacheManagerAutoConfiguration {
 public class CustomizeRedisCacheManagerAutoConfiguration {

+ 1 - 0
tr-test/src/main/java/cn/tr/test/WebApplication.java

@@ -4,6 +4,7 @@ import cn.dev33.satoken.strategy.SaStrategy;
 import org.mybatis.spring.annotation.MapperScan;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableAsync;
 
 

+ 2 - 0
tr-test/src/test/java/cn/tr/module/excel/CompositeExcelTemplateFacadeTest.java

@@ -12,6 +12,7 @@ import cn.tr.plugin.biz.tenant.context.TenantContextHolder;
 import cn.tr.plugin.eventbus.config.EventBus;
 import cn.tr.plugin.eventbus.config.EventBus;
 import cn.tr.plugin.security.bo.UserLoginInfoBO;
 import cn.tr.plugin.security.bo.UserLoginInfoBO;
 import cn.tr.plugin.security.context.LoginUserContextHolder;
 import cn.tr.plugin.security.context.LoginUserContextHolder;
+import cn.tr.plugin.security.utils.SaTokenUtils;
 import cn.tr.test.WebApplication;
 import cn.tr.test.WebApplication;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.format.DateTimeFormat;
 import com.alibaba.excel.annotation.format.DateTimeFormat;
@@ -77,6 +78,7 @@ public class CompositeExcelTemplateFacadeTest {
         byte[] bytes = excelService.exportExcel(User.class, Stream.of(User.of("测试", new Date(), 18, "1"), User.of("测试2", new Date(), 18, "2")).collect(Collectors.toList()));
         byte[] bytes = excelService.exportExcel(User.class, Stream.of(User.of("测试", new Date(), 18, "1"), User.of("测试2", new Date(), 18, "2")).collect(Collectors.toList()));
         outputStream.write(bytes);
         outputStream.write(bytes);
         outputStream.flush();
         outputStream.flush();
+        SaTokenUtils.logout();
         while (true){
         while (true){
 
 
         }
         }