Parcourir la source

增加SAAS用户权限

he2802 il y a 4 ans
Parent
commit
9339881fdd
23 fichiers modifiés avec 754 ajouts et 689 suppressions
  1. 10 11
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SuperSysLoginController.java
  2. 2 2
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/TopSysUser.java
  3. 4 5
      zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/TopLoginUser.java
  4. 17 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  5. 4 4
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomTenantLineHandler.java
  6. 9 13
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/filter/JwtAuthenticationTokenFilter.java
  7. 27 9
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/PermissionService.java
  8. 4 5
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopSysLoginService.java
  9. 12 13
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopTokenService.java
  10. 67 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopUserDetailsServiceImpl.java
  11. 4 36
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserDetailsServiceImpl.java
  12. 0 39
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/mapper/SuperSysUserMapper.java
  13. 0 146
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISuperSysUserService.java
  14. 0 275
      zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SuperSysUserServiceImpl.java
  15. 80 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysUserAddBo.java
  16. 88 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysUserEditBo.java
  17. 79 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysUserQueryBo.java
  18. 23 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/mapper/TopSysUserMapper.java
  19. 62 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/ITopSysUserService.java
  20. 111 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/impl/TopSysUserServiceImpl.java
  21. 83 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/vo/TopSysUserVo.java
  22. 0 129
      zhongzheng-system/src/main/resources/mapper/modules/system/SuperSysUserMapper.xml
  23. 68 0
      zhongzheng-system/src/main/resources/mapper/modules/top/TopSysUserMapper.xml

+ 10 - 11
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SuperSysLoginController.java

@@ -1,15 +1,14 @@
 package com.zhongzheng.controller.system;
 
-import com.github.xiaoymin.knife4j.annotations.ApiSupport;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
-import com.zhongzheng.common.core.domain.entity.SuperSysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
 import com.zhongzheng.common.core.domain.entity.SysMenu;
 import com.zhongzheng.common.core.domain.model.LoginBody;
-import com.zhongzheng.common.core.domain.model.SuperLoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.utils.ServletUtils;
-import com.zhongzheng.framework.web.service.SuperSysLoginService;
-import com.zhongzheng.framework.web.service.SuperTokenService;
+import com.zhongzheng.framework.web.service.TopSysLoginService;
+import com.zhongzheng.framework.web.service.TopTokenService;
 import com.zhongzheng.framework.web.service.SysPermissionService;
 import com.zhongzheng.modules.system.service.ISysMenuService;
 import io.swagger.annotations.Api;
@@ -29,7 +28,7 @@ import java.util.*;
 public class SuperSysLoginController
 {
     @Autowired
-    private SuperSysLoginService loginService;
+    private TopSysLoginService loginService;
 
     @Autowired
     private ISysMenuService menuService;
@@ -38,7 +37,7 @@ public class SuperSysLoginController
     private SysPermissionService permissionService;
 
     @Autowired
-    private SuperTokenService tokenService;
+    private TopTokenService tokenService;
 
     /**
      * 登录方法
@@ -68,8 +67,8 @@ public class SuperSysLoginController
     @GetMapping("getInfo")
     public AjaxResult getInfo()
     {
-        SuperLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        SuperSysUser user = loginUser.getUser();
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        TopSysUser user = loginUser.getUser();
         // 角色集合
         Set<String> roles = new HashSet<String>();
         roles.add("admin");
@@ -92,9 +91,9 @@ public class SuperSysLoginController
     @GetMapping("getRouters")
     public AjaxResult getRouters()
     {
-        SuperLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        TopLoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         // 用户信息
-        SuperSysUser user = loginUser.getUser();
+        TopSysUser user = loginUser.getUser();
         List<SysMenu> menus = menuService.selectMenuTreeByUserId(user.getUserId());
         return AjaxResult.success(menuService.buildMenus(menus));
     }

+ 2 - 2
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/SuperSysUser.java → zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/entity/TopSysUser.java

@@ -30,7 +30,7 @@ import java.util.Map;
 @Data
 @NoArgsConstructor
 @Accessors(chain = true)
-public class SuperSysUser implements Serializable
+public class TopSysUser implements Serializable
 {
     private static final long serialVersionUID = 1L;
 
@@ -150,7 +150,7 @@ public class SuperSysUser implements Serializable
     @TableField(exist = false)
     private Long[] postIds;
 
-    public SuperSysUser(Long userId)
+    public TopSysUser(Long userId)
     {
         this.userId = userId;
     }

+ 4 - 5
zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/SuperLoginUser.java → zhongzheng-common/src/main/java/com/zhongzheng/common/core/domain/model/TopLoginUser.java

@@ -1,8 +1,7 @@
 package com.zhongzheng.common.core.domain.model;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.zhongzheng.common.core.domain.entity.SuperSysUser;
-import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
@@ -21,7 +20,7 @@ import java.util.Set;
 @Data
 @NoArgsConstructor
 @Accessors(chain = true)
-public class SuperLoginUser implements UserDetails
+public class TopLoginUser implements UserDetails
 {
     private static final long serialVersionUID = 1L;
 
@@ -68,9 +67,9 @@ public class SuperLoginUser implements UserDetails
     /**
      * 用户信息
      */
-    private SuperSysUser user;
+    private TopSysUser user;
 
-    public SuperLoginUser(SuperSysUser user, Set<String> permissions)
+    public TopLoginUser(TopSysUser user, Set<String> permissions)
     {
         this.user = user;
         this.permissions = permissions;

+ 17 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -3,8 +3,11 @@ package com.zhongzheng.framework.config;
 import com.zhongzheng.framework.security.filter.JwtAuthenticationTokenFilter;
 import com.zhongzheng.framework.security.handle.AuthenticationEntryPointImpl;
 import com.zhongzheng.framework.security.handle.LogoutSuccessHandlerImpl;
+import com.zhongzheng.framework.web.service.TopUserDetailsServiceImpl;
+import com.zhongzheng.framework.web.service.UserDetailsServiceImpl;
 import de.codecentric.boot.admin.server.config.AdminServerProperties;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.http.HttpMethod;
 import org.springframework.security.authentication.AuthenticationManager;
@@ -31,7 +34,13 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
      * 自定义用户认证逻辑
      */
     @Autowired
-    private UserDetailsService userDetailsService;
+    private UserDetailsServiceImpl userDetailsService;
+
+    @Autowired
+    private TopUserDetailsServiceImpl topUserDetailsService;
+
+    @Value("${mybatis-plus.tenant.enabled-tenant:true}")
+    private boolean enabledTenant;
 
     /**
      * 认证失败处理类
@@ -155,6 +164,12 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
     @Override
     protected void configure(AuthenticationManagerBuilder auth) throws Exception
     {
-        auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
+        if(enabledTenant){
+            //开启多租户
+            auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder());
+        }else{
+            auth.userDetailsService(topUserDetailsService).passwordEncoder(bCryptPasswordEncoder());
+        }
+
     }
 }

+ 4 - 4
zhongzheng-framework/src/main/java/com/zhongzheng/framework/mybatisplus/CustomTenantLineHandler.java

@@ -37,10 +37,10 @@ public class CustomTenantLineHandler implements TenantLineHandler {
      */
     private final static List<String> IGNORE_TABLE_NAMES = new ArrayList<String>(){{
         add("sys_tenant");
-        add("super_sys_user");
-        add("super_sys_dept");
-        add("super_sys_role");
-        add("super_sys_user_role");
+        add("top_sys_user");
+        add("top_sys_dept");
+        add("top_sys_role");
+        add("top_sys_user_role");
         add("tables");
         add("columns");
         add("sys_logininfor");

+ 9 - 13
zhongzheng-framework/src/main/java/com/zhongzheng/framework/security/filter/JwtAuthenticationTokenFilter.java

@@ -1,12 +1,8 @@
 package com.zhongzheng.framework.security.filter;
 
 import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpStatus;
-import com.zhongzheng.common.core.domain.model.SuperLoginUser;
-import com.zhongzheng.common.exception.CustomException;
-import com.zhongzheng.common.utils.ServletUtils;
-import com.zhongzheng.framework.web.service.SuperTokenService;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.framework.web.service.TopTokenService;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.utils.SecurityUtils;
@@ -41,7 +37,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
     private WxTokenService wxTokenService;
 
     @Autowired
-    private SuperTokenService superTokenService;
+    private TopTokenService topTokenService;
 
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
@@ -58,14 +54,14 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
                 SecurityContextHolder.getContext().setAuthentication(authenticationToken);
             }
         }else{
-            String superToken = superTokenService.getToken(request);
-            if(StringUtils.isNoneEmpty(superToken)){
+            String topToken = topTokenService.getToken(request);
+            if(StringUtils.isNoneEmpty(topToken)){
                 //超级管理员
-                SuperLoginUser super_loginUser = superTokenService.getLoginUser(request);
-                if (Validator.isNotNull(super_loginUser) && Validator.isNull(SecurityUtils.getAuthentication()))
+                TopLoginUser top_loginUser = topTokenService.getLoginUser(request);
+                if (Validator.isNotNull(top_loginUser) && Validator.isNull(SecurityUtils.getAuthentication()))
                 {
-                    superTokenService.verifyToken(super_loginUser);
-                    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(super_loginUser, null, super_loginUser.getAuthorities());
+                    topTokenService.verifyToken(top_loginUser);
+                    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(top_loginUser, null, top_loginUser.getAuthorities());
                     authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
                     SecurityContextHolder.getContext().setAuthentication(authenticationToken);
                 }

+ 27 - 9
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/PermissionService.java

@@ -4,15 +4,17 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.zhongzheng.common.core.domain.entity.SysRole;
 import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.utils.ServletUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Set;
 
 /**
  * RuoYi首创 自定义权限实现,ss取自SpringSecurity首字母
- * 
+ *
  * @author zhongzheng
  */
 @Service("ss")
@@ -31,9 +33,15 @@ public class PermissionService
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private TopTokenService topTokenService;
+
+    @Value("${mybatis-plus.tenant.enabled-tenant:true}")
+    private boolean enabledTenant;
+
     /**
      * 验证用户是否具备某权限
-     * 
+     *
      * @param permission 权限字符串
      * @return 用户是否具备某权限
      */
@@ -43,12 +51,22 @@ public class PermissionService
         {
             return false;
         }
-        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
-        if (Validator.isNull(loginUser) || Validator.isEmpty(loginUser.getPermissions()))
-        {
-            return false;
+        if(enabledTenant){
+            LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+            if (Validator.isNull(loginUser) || Validator.isEmpty(loginUser.getPermissions()))
+            {
+                return false;
+            }
+            return hasPermissions(loginUser.getPermissions(), permission);
+        }else{
+            TopLoginUser topLoginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+            if (Validator.isNull(topLoginUser) || Validator.isEmpty(topLoginUser.getPermissions()))
+            {
+                return false;
+            }
+            return hasPermissions(topLoginUser.getPermissions(), permission);
         }
-        return hasPermissions(loginUser.getPermissions(), permission);
+
     }
 
     /**
@@ -92,7 +110,7 @@ public class PermissionService
 
     /**
      * 判断用户是否拥有某个角色
-     * 
+     *
      * @param role 角色字符串
      * @return 用户是否具备某角色
      */
@@ -158,7 +176,7 @@ public class PermissionService
 
     /**
      * 判断是否包含权限
-     * 
+     *
      * @param permissions 权限列表
      * @param permission 权限字符串
      * @return 用户是否具备某权限

+ 4 - 5
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SuperSysLoginService.java → zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopSysLoginService.java

@@ -1,8 +1,7 @@
 package com.zhongzheng.framework.web.service;
 
 import com.zhongzheng.common.constant.Constants;
-import com.zhongzheng.common.core.domain.model.LoginUser;
-import com.zhongzheng.common.core.domain.model.SuperLoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.exception.user.CaptchaException;
@@ -26,10 +25,10 @@ import javax.annotation.Resource;
  * @author zhongzheng
  */
 @Component
-public class SuperSysLoginService
+public class TopSysLoginService
 {
     @Autowired
-    private SuperTokenService tokenService;
+    private TopTokenService tokenService;
 
     @Resource
     private AuthenticationManager authenticationManager;
@@ -84,7 +83,7 @@ public class SuperSysLoginService
             }
         }
     //    AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
-        SuperLoginUser loginUser = (SuperLoginUser) authentication.getPrincipal();
+        TopLoginUser loginUser = (TopLoginUser) authentication.getPrincipal();
         // 生成token
         return tokenService.createToken(loginUser);
     }

+ 12 - 13
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/SuperTokenService.java → zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopTokenService.java

@@ -5,8 +5,7 @@ import cn.hutool.core.util.IdUtil;
 import cn.hutool.http.useragent.UserAgent;
 import cn.hutool.http.useragent.UserAgentUtil;
 import com.zhongzheng.common.constant.Constants;
-import com.zhongzheng.common.core.domain.model.LoginUser;
-import com.zhongzheng.common.core.domain.model.SuperLoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.exception.user.UserPasswordNotMatchException;
@@ -39,7 +38,7 @@ import java.util.concurrent.TimeUnit;
  * @author zhongzheng
  */
 @Component
-public class SuperTokenService
+public class TopTokenService
 {
     // 令牌自定义标识
     @Value("${token.header}")
@@ -70,7 +69,7 @@ public class SuperTokenService
      *
      * @return 用户信息
      */
-    public SuperLoginUser getLoginUser(HttpServletRequest request)
+    public TopLoginUser getLoginUser(HttpServletRequest request)
     {
 
         //测试用户
@@ -86,20 +85,20 @@ public class SuperTokenService
             // 解析对应的权限以及用户信息
             String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
             String userKey = getTokenKey(uuid);
-            SuperLoginUser user = redisCache.getCacheObject(userKey);
+            TopLoginUser user = redisCache.getCacheObject(userKey);
             return user;
         }
 
         return null;
     }
 
-    private SuperLoginUser getTestUser(){
+    private TopLoginUser getTestUser(){
         Authentication authentication = null;
         try
         {
             // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
             authentication = authenticationManager
-                    .authenticate(new UsernamePasswordAuthenticationToken("##super##admin", "admin123"));
+                    .authenticate(new UsernamePasswordAuthenticationToken("admin", "admin123"));
         }
         catch (Exception e)
         {
@@ -114,7 +113,7 @@ public class SuperTokenService
                 throw new CustomException(e.getMessage());
             }
         }
-        SuperLoginUser loginUser = (SuperLoginUser) authentication.getPrincipal();
+        TopLoginUser loginUser = (TopLoginUser) authentication.getPrincipal();
         loginUser.setExpireTime(System.currentTimeMillis()+200);
         return loginUser;
     }
@@ -122,7 +121,7 @@ public class SuperTokenService
     /**
      * 设置用户身份信息
      */
-    public void setLoginUser(SuperLoginUser loginUser)
+    public void setLoginUser(TopLoginUser loginUser)
     {
         if (Validator.isNotNull(loginUser) && Validator.isNotEmpty(loginUser.getToken()))
         {
@@ -148,7 +147,7 @@ public class SuperTokenService
      * @param loginUser 用户信息
      * @return 令牌
      */
-    public String createToken(SuperLoginUser loginUser)
+    public String createToken(TopLoginUser loginUser)
     {
         String token = IdUtil.fastUUID();
         loginUser.setToken(token);
@@ -166,7 +165,7 @@ public class SuperTokenService
      * @param loginUser
      * @return 令牌
      */
-    public void verifyToken(SuperLoginUser loginUser)
+    public void verifyToken(TopLoginUser loginUser)
     {
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
@@ -181,7 +180,7 @@ public class SuperTokenService
      *
      * @param loginUser 登录信息
      */
-    public void refreshToken(SuperLoginUser loginUser)
+    public void refreshToken(TopLoginUser loginUser)
     {
         loginUser.setLoginTime(System.currentTimeMillis());
         loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
@@ -195,7 +194,7 @@ public class SuperTokenService
      *
      * @param loginUser 登录信息
      */
-    public void setUserAgent(SuperLoginUser loginUser)
+    public void setUserAgent(TopLoginUser loginUser)
     {
         UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
         String ip = IpUtils.getIpAddr(ServletUtils.getRequest());

+ 67 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/TopUserDetailsServiceImpl.java

@@ -0,0 +1,67 @@
+package com.zhongzheng.framework.web.service;
+
+import cn.hutool.core.lang.Validator;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.enums.UserStatus;
+import com.zhongzheng.common.exception.BaseException;
+import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.top.service.ITopSysUserService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 用户验证处理
+ *
+ * @author zhongzheng
+ */
+@Service
+public class TopUserDetailsServiceImpl implements UserDetailsService
+{
+    private static final Logger log = LoggerFactory.getLogger(TopUserDetailsServiceImpl.class);
+
+
+    @Autowired
+    private ITopSysUserService topUserService;
+
+    @Override
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
+    {
+        //超级管理系统用户
+        TopSysUser super_user = topUserService.selectUserByUserName(username);
+        if (Validator.isNull(super_user))
+        {
+            log.info("登录用户:{} 不存在.", username);
+            throw new UsernameNotFoundException("登录用户:" + username + " 不存在");
+        }
+        else if (UserStatus.DELETED.getCode().equals(super_user.getDelFlag()))
+        {
+            log.info("登录用户:{} 已被删除.", username);
+            throw new BaseException("对不起,您的账号:" + username + " 已被删除");
+        }
+        else if (UserStatus.DISABLE.getCode().equals(super_user.getStatus()))
+        {
+            log.info("登录用户:{} 已被停用.", username);
+            throw new BaseException("对不起,您的账号:" + username + " 已停用");
+        }
+        return createTopLoginUser(super_user);
+    }
+
+    public UserDetails createTopLoginUser(TopSysUser user)
+    {
+        Set<String> perms = new HashSet<String>();
+        //拥有所有权限
+        perms.add("*:*:*");
+        return new TopLoginUser(user, perms);
+    }
+}

+ 4 - 36
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserDetailsServiceImpl.java

@@ -1,14 +1,14 @@
 package com.zhongzheng.framework.web.service;
 
 import cn.hutool.core.lang.Validator;
-import com.zhongzheng.common.core.domain.entity.SuperSysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
 import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.model.LoginUser;
-import com.zhongzheng.common.core.domain.model.SuperLoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
 import com.zhongzheng.common.enums.UserStatus;
 import com.zhongzheng.common.exception.BaseException;
-import com.zhongzheng.modules.system.service.ISuperSysUserService;
 import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.top.service.ITopSysUserService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,36 +36,10 @@ public class UserDetailsServiceImpl implements UserDetailsService
     @Autowired
     private SysPermissionService permissionService;
 
-    @Autowired
-    private ISuperSysUserService superUserService;
 
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException
     {
-        if (username.startsWith("##super##")) {
-            //超级管理系统用户
-            String super_username =username.replace("##super##","");
-            System.out.println("这是超级管理员用户名:"+super_username);
-            SuperSysUser super_user = superUserService.selectUserByUserName(super_username);
-            System.out.println(super_user+"密码AA");
-            System.out.println(super_user.getPassword()+"密码");
-            if (Validator.isNull(super_user))
-            {
-                log.info("登录用户:{} 不存在.", username);
-                throw new UsernameNotFoundException("登录用户:" + username + " 不存在");
-            }
-            else if (UserStatus.DELETED.getCode().equals(super_user.getDelFlag()))
-            {
-                log.info("登录用户:{} 已被删除.", username);
-                throw new BaseException("对不起,您的账号:" + username + " 已被删除");
-            }
-            else if (UserStatus.DISABLE.getCode().equals(super_user.getStatus()))
-            {
-                log.info("登录用户:{} 已被停用.", username);
-                throw new BaseException("对不起,您的账号:" + username + " 已停用");
-            }
-            return createSuperLoginUser(super_user);
-        }
         //普通系统用户
         SysUser user = userService.selectUserByUserName(username);
         if (Validator.isNull(user))
@@ -92,11 +66,5 @@ public class UserDetailsServiceImpl implements UserDetailsService
         return new LoginUser(user, permissionService.getMenuPermission(user));
     }
 
-    public UserDetails createSuperLoginUser(SuperSysUser user)
-    {
-        Set<String> perms = new HashSet<String>();
-        //拥有所有权限
-        perms.add("*:*:*");
-        return new SuperLoginUser(user, perms);
-    }
+
 }

+ 0 - 39
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/mapper/SuperSysUserMapper.java

@@ -1,39 +0,0 @@
-package com.zhongzheng.modules.system.mapper;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.zhongzheng.common.core.domain.entity.SuperSysUser;
-import com.zhongzheng.common.core.domain.entity.SysUser;
-
-import java.util.List;
-
-/**
- * 用户表 数据层
- *
- * @author zhongzheng
- */
-public interface SuperSysUserMapper extends BaseMapper<SuperSysUser> {
-    /**
-     * 根据条件分页查询用户列表
-     *
-     * @param sysUser 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SuperSysUser> selectUserList(SuperSysUser sysUser);
-
-    /**
-     * 通过用户名查询用户
-     *
-     * @param userName 用户名
-     * @return 用户对象信息
-     */
-    public SuperSysUser selectUserByUserName(String userName);
-
-    /**
-     * 通过用户ID查询用户
-     *
-     * @param userId 用户ID
-     * @return 用户对象信息
-     */
-    public SuperSysUser selectUserById(Long userId);
-
-}

+ 0 - 146
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/ISuperSysUserService.java

@@ -1,146 +0,0 @@
-package com.zhongzheng.modules.system.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.zhongzheng.common.core.domain.entity.SuperSysUser;
-import com.zhongzheng.common.core.domain.entity.SysUser;
-
-import java.util.List;
-
-/**
- * 用户 业务层
- *
- * @author zhongzheng
- */
-public interface ISuperSysUserService extends IService<SuperSysUser> {
-    /**
-     * 根据条件分页查询用户列表
-     *
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    public List<SuperSysUser> selectUserList(SuperSysUser user);
-
-    /**
-     * 通过用户名查询用户
-     *
-     * @param userName 用户名
-     * @return 用户对象信息
-     */
-    public SuperSysUser selectUserByUserName(String userName);
-
-    /**
-     * 通过用户ID查询用户
-     *
-     * @param userId 用户ID
-     * @return 用户对象信息
-     */
-    public SuperSysUser selectUserById(Long userId);
-
-    /**
-     * 根据用户ID查询用户所属角色组
-     *
-     * @param userName 用户名
-     * @return 结果
-     */
-    public String selectUserRoleGroup(String userName);
-
-    /**
-     * 根据用户ID查询用户所属岗位组
-     *
-     * @param userName 用户名
-     * @return 结果
-     */
-    public String selectUserPostGroup(String userName);
-
-    /**
-     * 校验用户名称是否唯一
-     *
-     * @param userName 用户名称
-     * @return 结果
-     */
-    public String checkUserNameUnique(String userName);
-
-    /**
-     * 校验手机号码是否唯一
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public String checkPhoneUnique(SuperSysUser user);
-
-    /**
-     * 校验email是否唯一
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public String checkEmailUnique(SuperSysUser user);
-
-    /**
-     * 校验用户是否允许操作
-     *
-     * @param user 用户信息
-     */
-    public void checkUserAllowed(SuperSysUser user);
-
-    /**
-     * 新增用户信息
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int insertUser(SuperSysUser user);
-
-    /**
-     * 修改用户信息
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUser(SuperSysUser user);
-
-    /**
-     * 修改用户状态
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUserStatus(SuperSysUser user);
-
-    /**
-     * 修改用户基本信息
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int updateUserProfile(SuperSysUser user);
-
-    /**
-     * 修改用户头像
-     *
-     * @param userName 用户名
-     * @param avatar   头像地址
-     * @return 结果
-     */
-    public boolean updateUserAvatar(String userName, String avatar);
-
-    /**
-     * 重置用户密码
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    public int resetPwd(SuperSysUser user);
-
-    /**
-     * 重置用户密码
-     *
-     * @param userName 用户名
-     * @param password 密码
-     * @return 结果
-     */
-    public int resetUserPwd(String userName, String password);
-
-
-
-}

+ 0 - 275
zhongzheng-system/src/main/java/com/zhongzheng/modules/system/service/impl/SuperSysUserServiceImpl.java

@@ -1,275 +0,0 @@
-package com.zhongzheng.modules.system.service.impl;
-
-import cn.hutool.core.lang.Validator;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.zhongzheng.common.annotation.DataScope;
-import com.zhongzheng.common.constant.UserConstants;
-import com.zhongzheng.common.core.domain.entity.SuperSysUser;
-import com.zhongzheng.common.core.domain.entity.SysRole;
-import com.zhongzheng.common.core.domain.entity.SysUser;
-import com.zhongzheng.common.exception.CustomException;
-import com.zhongzheng.common.utils.SecurityUtils;
-import com.zhongzheng.modules.system.domain.SysPost;
-import com.zhongzheng.modules.system.domain.SysUserPost;
-import com.zhongzheng.modules.system.domain.SysUserRole;
-import com.zhongzheng.modules.system.mapper.*;
-import com.zhongzheng.modules.system.service.ISuperSysUserService;
-import com.zhongzheng.modules.system.service.ISysConfigService;
-import com.zhongzheng.modules.system.service.ISysUserService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 用户 业务层处理
- *
- * @author zhongzheng
- */
-@Slf4j
-@Service
-public class SuperSysUserServiceImpl extends ServiceImpl<SuperSysUserMapper, SuperSysUser> implements ISuperSysUserService {
-
-    @Autowired
-    private SysRoleMapper roleMapper;
-
-    @Autowired
-    private SysPostMapper postMapper;
-
-
-
-    /**
-     * 根据条件分页查询用户列表
-     *
-     * @param user 用户信息
-     * @return 用户信息集合信息
-     */
-    @Override
-    @DataScope(deptAlias = "d", userAlias = "u")
-    public List<SuperSysUser> selectUserList(SuperSysUser user) {
-        return baseMapper.selectUserList(user);
-    }
-
-    /**
-     * 通过用户名查询用户
-     *
-     * @param userName 用户名
-     * @return 用户对象信息
-     */
-    @Override
-    public SuperSysUser selectUserByUserName(String userName) {
-        return baseMapper.selectUserByUserName(userName);
-    }
-
-    /**
-     * 通过用户ID查询用户
-     *
-     * @param userId 用户ID
-     * @return 用户对象信息
-     */
-    @Override
-    public SuperSysUser selectUserById(Long userId) {
-        return baseMapper.selectUserById(userId);
-    }
-
-    /**
-     * 查询用户所属角色组
-     *
-     * @param userName 用户名
-     * @return 结果
-     */
-    @Override
-    public String selectUserRoleGroup(String userName) {
-        List<SysRole> list = roleMapper.selectRolesByUserName(userName);
-        StringBuffer idsStr = new StringBuffer();
-        for (SysRole role : list) {
-            idsStr.append(role.getRoleName()).append(",");
-        }
-        if (Validator.isNotEmpty(idsStr.toString())) {
-            return idsStr.substring(0, idsStr.length() - 1);
-        }
-        return idsStr.toString();
-    }
-
-    /**
-     * 查询用户所属岗位组
-     *
-     * @param userName 用户名
-     * @return 结果
-     */
-    @Override
-    public String selectUserPostGroup(String userName) {
-        List<SysPost> list = postMapper.selectPostsByUserName(userName);
-        StringBuffer idsStr = new StringBuffer();
-        for (SysPost post : list) {
-            idsStr.append(post.getPostName()).append(",");
-        }
-        if (Validator.isNotEmpty(idsStr.toString())) {
-            return idsStr.substring(0, idsStr.length() - 1);
-        }
-        return idsStr.toString();
-    }
-
-    /**
-     * 校验用户名称是否唯一
-     *
-     * @param userName 用户名称
-     * @return 结果
-     */
-    @Override
-    public String checkUserNameUnique(String userName) {
-        int count = count(new LambdaQueryWrapper<SuperSysUser>().eq(SuperSysUser::getUserName, userName).last("limit 1"));
-        if (count > 0) {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验用户名称是否唯一
-     *
-     * @param user 用户信息
-     * @return
-     */
-    @Override
-    public String checkPhoneUnique(SuperSysUser user) {
-        Long userId = Validator.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SuperSysUser info = getOne(new LambdaQueryWrapper<SuperSysUser>()
-                .select(SuperSysUser::getUserId, SuperSysUser::getPhonenumber)
-                .eq(SuperSysUser::getPhonenumber, user.getPhonenumber()).last("limit 1"));
-        if (Validator.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验email是否唯一
-     *
-     * @param user 用户信息
-     * @return
-     */
-    @Override
-    public String checkEmailUnique(SuperSysUser user) {
-        Long userId = Validator.isNull(user.getUserId()) ? -1L : user.getUserId();
-        SuperSysUser info = getOne(new LambdaQueryWrapper<SuperSysUser>()
-                .select(SuperSysUser::getUserId, SuperSysUser::getEmail)
-                .eq(SuperSysUser::getEmail, user.getEmail()).last("limit 1"));
-        if (Validator.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验用户是否允许操作
-     *
-     * @param user 用户信息
-     */
-    @Override
-    public void checkUserAllowed(SuperSysUser user) {
-        if (Validator.isNotNull(user.getUserId()) && user.isAdmin()) {
-            throw new CustomException("不允许操作超级管理员用户");
-        }
-    }
-
-    /**
-     * 新增保存用户信息
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    @Transactional
-    public int insertUser(SuperSysUser user) {
-        // 新增用户信息
-        int rows = baseMapper.insert(user);
-
-        return rows;
-    }
-
-    /**
-     * 修改保存用户信息
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    @Transactional
-    public int updateUser(SuperSysUser user) {
-
-        return baseMapper.updateById(user);
-    }
-
-    /**
-     * 修改用户状态
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public int updateUserStatus(SuperSysUser user) {
-        return baseMapper.updateById(user);
-    }
-
-    /**
-     * 修改用户基本信息
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public int updateUserProfile(SuperSysUser user) {
-        return baseMapper.updateById(user);
-    }
-
-    /**
-     * 修改用户头像
-     *
-     * @param userName 用户名
-     * @param avatar   头像地址
-     * @return 结果
-     */
-    @Override
-    public boolean updateUserAvatar(String userName, String avatar) {
-        return baseMapper.update(null,
-                new LambdaUpdateWrapper<SuperSysUser>()
-                        .set(SuperSysUser::getAvatar,avatar)
-                        .eq(SuperSysUser::getUserName,userName)) > 0;
-    }
-
-    /**
-     * 重置用户密码
-     *
-     * @param user 用户信息
-     * @return 结果
-     */
-    @Override
-    public int resetPwd(SuperSysUser user) {
-        return baseMapper.updateById(user);
-    }
-
-    /**
-     * 重置用户密码
-     *
-     * @param userName 用户名
-     * @param password 密码
-     * @return 结果
-     */
-    @Override
-    public int resetUserPwd(String userName, String password) {
-        return baseMapper.update(null,
-                new LambdaUpdateWrapper<SuperSysUser>()
-                        .set(SuperSysUser::getPassword,password)
-                        .eq(SuperSysUser::getUserName,userName));
-    }
-
-
-
-}

+ 80 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysUserAddBo.java

@@ -0,0 +1,80 @@
+package com.zhongzheng.modules.top.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * SAAS用户信息添加对象 top_sys_user
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+@Data
+@ApiModel("SAAS用户信息添加对象")
+public class TopSysUserAddBo {
+
+    /** 部门ID */
+    @ApiModelProperty("部门ID")
+    private Long deptId;
+    /** 用户账号 */
+    @ApiModelProperty("用户账号")
+    private String userName;
+    /** 用户昵称 */
+    @ApiModelProperty("用户昵称")
+    private String nickName;
+    /** 用户类型(00系统用户) */
+    @ApiModelProperty("用户类型(00系统用户)")
+    private String userType;
+    /** 用户邮箱 */
+    @ApiModelProperty("用户邮箱")
+    private String email;
+    /** 手机号码 */
+    @ApiModelProperty("手机号码")
+    private String phonenumber;
+    /** 用户性别(0男 1女 2未知) */
+    @ApiModelProperty("用户性别(0男 1女 2未知)")
+    private String sex;
+    /** 头像地址 */
+    @ApiModelProperty("头像地址")
+    private String avatar;
+    /** 密码 */
+    @ApiModelProperty("密码")
+    private String password;
+    /** 帐号状态(0正常 1停用) */
+    @ApiModelProperty("帐号状态(0正常 1停用)")
+    private String status;
+    /** 删除标志(0代表存在 2代表删除) */
+    @ApiModelProperty("删除标志(0代表存在 2代表删除)")
+    private String delFlag;
+    /** 最后登录IP */
+    @ApiModelProperty("最后登录IP")
+    private String loginIp;
+    /** 最后登录时间 */
+    @ApiModelProperty("最后登录时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date loginDate;
+    /** 创建者 */
+    @ApiModelProperty("创建者")
+    private String createBy;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+    /** 更新者 */
+    @ApiModelProperty("更新者")
+    private String updateBy;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+    /** 备注 */
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 88 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysUserEditBo.java

@@ -0,0 +1,88 @@
+package com.zhongzheng.modules.top.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * SAAS用户信息编辑对象 top_sys_user
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+@Data
+@ApiModel("SAAS用户信息编辑对象")
+public class TopSysUserEditBo {
+
+
+    /** 用户ID */
+    @ApiModelProperty("用户ID")
+    private Long userId;
+
+    /** 部门ID */
+    @ApiModelProperty("部门ID")
+    private Long deptId;
+
+    /** 用户账号 */
+    @ApiModelProperty("用户账号")
+    private String userName;
+
+    /** 用户昵称 */
+    @ApiModelProperty("用户昵称")
+    private String nickName;
+
+    /** 用户类型(00系统用户) */
+    @ApiModelProperty("用户类型(00系统用户)")
+    private String userType;
+
+    /** 用户邮箱 */
+    @ApiModelProperty("用户邮箱")
+    private String email;
+
+    /** 手机号码 */
+    @ApiModelProperty("手机号码")
+    private String phonenumber;
+
+    /** 用户性别(0男 1女 2未知) */
+    @ApiModelProperty("用户性别(0男 1女 2未知)")
+    private String sex;
+
+    /** 头像地址 */
+    @ApiModelProperty("头像地址")
+    private String avatar;
+
+    /** 密码 */
+    @ApiModelProperty("密码")
+    private String password;
+
+    /** 帐号状态(0正常 1停用) */
+    @ApiModelProperty("帐号状态(0正常 1停用)")
+    private String status;
+
+    /** 最后登录IP */
+    @ApiModelProperty("最后登录IP")
+    private String loginIp;
+
+    /** 最后登录时间 */
+    @ApiModelProperty("最后登录时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date loginDate;
+
+    /** 更新者 */
+    @ApiModelProperty("更新者")
+    private String updateBy;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    /** 备注 */
+    @ApiModelProperty("备注")
+    private String remark;
+}

+ 79 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/bo/TopSysUserQueryBo.java

@@ -0,0 +1,79 @@
+package com.zhongzheng.modules.top.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * SAAS用户信息分页查询对象 top_sys_user
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("SAAS用户信息分页查询对象")
+public class TopSysUserQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 部门ID */
+	@ApiModelProperty("部门ID")
+	private Long deptId;
+	/** 用户账号 */
+	@ApiModelProperty("用户账号")
+	private String userName;
+	/** 用户昵称 */
+	@ApiModelProperty("用户昵称")
+	private String nickName;
+	/** 用户类型(00系统用户) */
+	@ApiModelProperty("用户类型(00系统用户)")
+	private String userType;
+	/** 用户邮箱 */
+	@ApiModelProperty("用户邮箱")
+	private String email;
+	/** 手机号码 */
+	@ApiModelProperty("手机号码")
+	private String phonenumber;
+	/** 用户性别(0男 1女 2未知) */
+	@ApiModelProperty("用户性别(0男 1女 2未知)")
+	private String sex;
+	/** 头像地址 */
+	@ApiModelProperty("头像地址")
+	private String avatar;
+	/** 密码 */
+	@ApiModelProperty("密码")
+	private String password;
+	/** 帐号状态(0正常 1停用) */
+	@ApiModelProperty("帐号状态(0正常 1停用)")
+	private String status;
+	/** 最后登录IP */
+	@ApiModelProperty("最后登录IP")
+	private String loginIp;
+	/** 最后登录时间 */
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty("最后登录时间")
+	private Date loginDate;
+
+}

+ 23 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/mapper/TopSysUserMapper.java

@@ -0,0 +1,23 @@
+package com.zhongzheng.modules.top.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+
+/**
+ * SAAS用户信息Mapper接口
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+public interface TopSysUserMapper extends BaseMapper<TopSysUser> {
+
+    /**
+     * 通过用户名查询用户
+     *
+     * @param userName 用户名
+     * @return 用户对象信息
+     */
+    public TopSysUser selectUserByUserName(String userName);
+
+}

+ 62 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/ITopSysUserService.java

@@ -0,0 +1,62 @@
+package com.zhongzheng.modules.top.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.modules.top.bo.TopSysUserAddBo;
+import com.zhongzheng.modules.top.bo.TopSysUserEditBo;
+import com.zhongzheng.modules.top.bo.TopSysUserQueryBo;
+import com.zhongzheng.modules.top.vo.TopSysUserVo;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * SAAS用户信息Service接口
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+public interface ITopSysUserService extends IService<TopSysUser> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopSysUserVo queryById(Long userId);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopSysUserVo> queryList(TopSysUserQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入SAAS用户信息
+	 * @param bo SAAS用户信息新增业务对象
+	 * @return
+	 */
+	Boolean insertByAddBo(TopSysUserAddBo bo);
+
+	/**
+	 * 通过用户名查询用户
+	 *
+	 * @param userName 用户名
+	 * @return 用户对象信息
+	 */
+	public TopSysUser selectUserByUserName(String userName);
+
+	/**
+	 * 根据编辑业务对象修改SAAS用户信息
+	 * @param bo SAAS用户信息编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopSysUserEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 111 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/service/impl/TopSysUserServiceImpl.java

@@ -0,0 +1,111 @@
+package com.zhongzheng.modules.top.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.top.bo.TopSysUserAddBo;
+import com.zhongzheng.modules.top.bo.TopSysUserEditBo;
+import com.zhongzheng.modules.top.bo.TopSysUserQueryBo;
+import com.zhongzheng.modules.top.mapper.TopSysUserMapper;
+import com.zhongzheng.modules.top.service.ITopSysUserService;
+import com.zhongzheng.modules.top.vo.TopSysUserVo;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * SAAS用户信息Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+@Service
+public class TopSysUserServiceImpl extends ServiceImpl<TopSysUserMapper, TopSysUser> implements ITopSysUserService {
+
+    @Override
+    public TopSysUserVo queryById(Long userId){
+        TopSysUser db = this.baseMapper.selectById(userId);
+        return BeanUtil.toBean(db, TopSysUserVo.class);
+    }
+
+    @Override
+    public List<TopSysUserVo> queryList(TopSysUserQueryBo bo) {
+        LambdaQueryWrapper<TopSysUser> lqw = Wrappers.lambdaQuery();
+        lqw.eq(bo.getDeptId() != null, TopSysUser::getDeptId, bo.getDeptId());
+        lqw.like(StrUtil.isNotBlank(bo.getUserName()), TopSysUser::getUserName, bo.getUserName());
+        lqw.like(StrUtil.isNotBlank(bo.getNickName()), TopSysUser::getNickName, bo.getNickName());
+        lqw.eq(StrUtil.isNotBlank(bo.getEmail()), TopSysUser::getEmail, bo.getEmail());
+        lqw.eq(StrUtil.isNotBlank(bo.getPhonenumber()), TopSysUser::getPhonenumber, bo.getPhonenumber());
+        lqw.eq(StrUtil.isNotBlank(bo.getSex()), TopSysUser::getSex, bo.getSex());
+        lqw.eq(StrUtil.isNotBlank(bo.getAvatar()), TopSysUser::getAvatar, bo.getAvatar());
+        lqw.eq(StrUtil.isNotBlank(bo.getPassword()), TopSysUser::getPassword, bo.getPassword());
+        lqw.eq(StrUtil.isNotBlank(bo.getStatus()), TopSysUser::getStatus, bo.getStatus());
+        lqw.eq(StrUtil.isNotBlank(bo.getLoginIp()), TopSysUser::getLoginIp, bo.getLoginIp());
+        lqw.eq(bo.getLoginDate() != null, TopSysUser::getLoginDate, bo.getLoginDate());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopSysUserVo> entity2Vo(Collection<TopSysUser> collection) {
+        List<TopSysUserVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopSysUserVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopSysUser> page = (Page<TopSysUser>)collection;
+            Page<TopSysUserVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Boolean insertByAddBo(TopSysUserAddBo bo) {
+        TopSysUser add = BeanUtil.toBean(bo, TopSysUser.class);
+        validEntityBeforeSave(add);
+        return this.save(add);
+    }
+
+    @Override
+    public TopSysUser selectUserByUserName(String userName) {
+        return baseMapper.selectUserByUserName(userName);
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopSysUserEditBo bo) {
+        TopSysUser update = BeanUtil.toBean(bo, TopSysUser.class);
+        validEntityBeforeSave(update);
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopSysUser entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 83 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/vo/TopSysUserVo.java

@@ -0,0 +1,83 @@
+package com.zhongzheng.modules.top.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * SAAS用户信息视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2021-08-04
+ */
+@Data
+@ApiModel("SAAS用户信息视图对象")
+public class TopSysUserVo {
+	private static final long serialVersionUID = 1L;
+
+	/** 用户ID */
+	@ApiModelProperty("用户ID")
+	private Long userId;
+
+	/** 部门ID */
+	@Excel(name = "部门ID")
+	@ApiModelProperty("部门ID")
+	private Long deptId;
+	/** 用户账号 */
+	@Excel(name = "用户账号")
+	@ApiModelProperty("用户账号")
+	private String userName;
+	/** 用户昵称 */
+	@Excel(name = "用户昵称")
+	@ApiModelProperty("用户昵称")
+	private String nickName;
+	/** 用户类型(00系统用户) */
+	@Excel(name = "用户类型" , readConverterExp = "0=0系统用户")
+	@ApiModelProperty("用户类型(00系统用户)")
+	private String userType;
+	/** 用户邮箱 */
+	@Excel(name = "用户邮箱")
+	@ApiModelProperty("用户邮箱")
+	private String email;
+	/** 手机号码 */
+	@Excel(name = "手机号码")
+	@ApiModelProperty("手机号码")
+	private String phonenumber;
+	/** 用户性别(0男 1女 2未知) */
+	@Excel(name = "用户性别" , readConverterExp = "0=男,1=女,2=未知")
+	@ApiModelProperty("用户性别(0男 1女 2未知)")
+	private String sex;
+	/** 头像地址 */
+	@Excel(name = "头像地址")
+	@ApiModelProperty("头像地址")
+	private String avatar;
+	/** 密码 */
+	@Excel(name = "密码")
+	@ApiModelProperty("密码")
+	private String password;
+	/** 帐号状态(0正常 1停用) */
+	@Excel(name = "帐号状态" , readConverterExp = "0=正常,1=停用")
+	@ApiModelProperty("帐号状态(0正常 1停用)")
+	private String status;
+	/** 最后登录IP */
+	@Excel(name = "最后登录IP")
+	@ApiModelProperty("最后登录IP")
+	private String loginIp;
+	/** 最后登录时间 */
+	@Excel(name = "最后登录时间" , width = 30, dateFormat = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	@ApiModelProperty("最后登录时间")
+	private Date loginDate;
+	/** 备注 */
+	@Excel(name = "备注")
+	@ApiModelProperty("备注")
+	private String remark;
+
+}

+ 0 - 129
zhongzheng-system/src/main/resources/mapper/modules/system/SuperSysUserMapper.xml

@@ -1,129 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper
-        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
-        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhongzheng.modules.system.mapper.SuperSysUserMapper">
-
-    <resultMap type="SuperSysUser" id="SuperSysUserResult">
-        <id property="userId" column="user_id"/>
-        <result property="deptId" column="dept_id"/>
-        <result property="userName" column="user_name"/>
-        <result property="nickName" column="nick_name"/>
-        <result property="email" column="email"/>
-        <result property="phonenumber" column="phonenumber"/>
-        <result property="sex" column="sex"/>
-        <result property="avatar" column="avatar"/>
-        <result property="password" column="password"/>
-        <result property="status" column="status"/>
-        <result property="delFlag" column="del_flag"/>
-        <result property="loginIp" column="login_ip"/>
-        <result property="loginDate" column="login_date"/>
-        <result property="createBy" column="create_by"/>
-        <result property="createTime" column="create_time"/>
-        <result property="updateBy" column="update_by"/>
-        <result property="updateTime" column="update_time"/>
-        <result property="remark" column="remark"/>
-        <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/>
-        <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
-    </resultMap>
-
-    <resultMap id="deptResult" type="SysDept">
-        <id property="deptId" column="dept_id"/>
-        <result property="parentId" column="parent_id"/>
-        <result property="deptName" column="dept_name"/>
-        <result property="orderNum" column="order_num"/>
-        <result property="leader" column="leader"/>
-        <result property="status" column="dept_status"/>
-    </resultMap>
-
-    <resultMap id="RoleResult" type="SysRole">
-        <id property="roleId" column="role_id"/>
-        <result property="roleName" column="role_name"/>
-        <result property="roleKey" column="role_key"/>
-        <result property="roleSort" column="role_sort"/>
-        <result property="dataScope" column="data_scope"/>
-        <result property="status" column="role_status"/>
-    </resultMap>
-
-    <sql id="selectUserVo">
-        select u.user_id,
-               u.dept_id,
-               u.user_name,
-               u.nick_name,
-               u.email,
-               u.avatar,
-               u.phonenumber,
-               u.password,
-               u.sex,
-               u.status,
-               u.del_flag,
-               u.login_ip,
-               u.login_date,
-               u.create_by,
-               u.create_time,
-               u.remark,
-               d.dept_id,
-               d.parent_id,
-               d.dept_name,
-               d.order_num,
-               d.leader,
-               d.status as dept_status,
-               r.role_id,
-               r.role_name,
-               r.role_key,
-               r.role_sort,
-               r.data_scope,
-               r.status as role_status
-        from super_sys_user u
-                 left join super_sys_dept d on u.dept_id = d.dept_id
-                 left join super_sys_user_role ur on u.user_id = ur.user_id
-                 left join super_sys_role r on r.role_id = ur.role_id
-    </sql>
-
-    <select id="selectUserList" parameterType="SuperSysUser" resultMap="SuperSysUserResult">
-        select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.password, u.sex,
-        u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader from
-        sys_user u
-        left join sys_dept d on u.dept_id = d.dept_id
-        where u.del_flag = '0'
-        <if test="userName != null and userName != ''">
-            AND u.user_name like concat('%', #{userName}, '%')
-        </if>
-        <if test="status != null and status != ''">
-            AND u.status = #{status}
-        </if>
-        <if test="phonenumber != null and phonenumber != ''">
-            AND u.phonenumber like concat('%', #{phonenumber}, '%')
-        </if>
-        <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-            AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
-        </if>
-        <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-            AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
-        </if>
-        <if test="deptId != null and deptId != 0">
-            AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE find_in_set(#{deptId},
-            ancestors) ))
-        </if>
-        <if test="statusArray != null and statusArray.size()!=0 ">
-            AND u.status in
-            <foreach collection="statusArray" item="item" index="index" open="(" close=")" separator=",">
-                #{item}
-            </foreach>
-        </if>
-        <!-- 数据范围过滤 -->
-        ${params.dataScope}
-    </select>
-
-    <select id="selectUserByUserName" parameterType="String" resultMap="SuperSysUserResult">
-        <include refid="selectUserVo"/>
-        where u.user_name = #{userName}
-    </select>
-
-    <select id="selectUserById" parameterType="Long" resultMap="SuperSysUserResult">
-        <include refid="selectUserVo"/>
-        where u.user_id = #{userId}
-    </select>
-
-
-</mapper>

+ 68 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopSysUserMapper.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.top.mapper.TopSysUserMapper">
+
+    <resultMap type="com.zhongzheng.common.core.domain.entity.TopSysUser" id="TopSysUserResult">
+        <result property="userId" column="user_id"/>
+        <result property="deptId" column="dept_id"/>
+        <result property="userName" column="user_name"/>
+        <result property="nickName" column="nick_name"/>
+        <result property="userType" column="user_type"/>
+        <result property="email" column="email"/>
+        <result property="phonenumber" column="phonenumber"/>
+        <result property="sex" column="sex"/>
+        <result property="avatar" column="avatar"/>
+        <result property="password" column="password"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="loginIp" column="login_ip"/>
+        <result property="loginDate" column="login_date"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="remark" column="remark"/>
+    </resultMap>
+
+    <sql id="selectTopUserVo">
+        select u.user_id,
+               u.dept_id,
+               u.user_name,
+               u.nick_name,
+               u.email,
+               u.avatar,
+               u.phonenumber,
+               u.password,
+               u.sex,
+               u.status,
+               u.del_flag,
+               u.login_ip,
+               u.login_date,
+               u.create_by,
+               u.create_time,
+               u.remark,
+               d.dept_id,
+               d.parent_id,
+               d.dept_name,
+               d.order_num,
+               d.leader,
+               d.status as dept_status,
+               r.role_id,
+               r.role_name,
+               r.role_key,
+               r.role_sort,
+               r.data_scope,
+               r.status as role_status
+        from top_sys_user u
+                 left join top_sys_dept d on u.dept_id = d.dept_id
+                 left join top_sys_user_role ur on u.user_id = ur.user_id
+                 left join top_sys_role r on r.role_id = ur.role_id
+    </sql>
+
+    <select id="selectUserByUserName" parameterType="String" resultMap="TopSysUserResult">
+        <include refid="selectTopUserVo"/>
+        where u.user_name = #{userName}
+    </select>
+</mapper>