785834757 1 år sedan
förälder
incheckning
3121e8ce10
39 ändrade filer med 560 tillägg och 62 borttagningar
  1. 9 1
      authentication/src/main/java/com/jzg/config/JzgAuthentication.java
  2. 17 4
      authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java
  3. 11 4
      authentication/src/main/java/com/jzg/config/JzgGrantedAuthority.java
  4. 1 0
      authentication/src/main/java/com/jzg/config/SecurityConfig.java
  5. 21 1
      authentication/src/main/java/com/jzg/controller/AuthController.java
  6. 2 1
      authentication/src/main/java/com/jzg/entity/RedisToken.java
  7. 23 0
      authentication/src/main/java/com/jzg/entity/SysRolePerms.java
  8. 4 1
      authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java
  9. 14 0
      authentication/src/main/java/com/jzg/mapper/SysRolePermsMapper.java
  10. 5 0
      authentication/src/main/java/com/jzg/mapper/SysUserRoleMapper.java
  11. 10 0
      authentication/src/main/java/com/jzg/service/SysUserRoleService.java
  12. 13 0
      authentication/src/main/java/com/jzg/service/impl/SysUserRoleServiceImpl.java
  13. 3 2
      authentication/src/main/resources/application.yml
  14. 17 0
      authentication/src/main/resources/mapper/SysUserRoleMapper.xml
  15. 8 0
      commons/src/main/java/com/jzg/aop/aspect/OperatorTrajectoryAspect.java
  16. 4 1
      commons/src/main/java/com/jzg/aop/aspect/PermissionAspect.java
  17. 1 1
      commons/src/main/java/com/jzg/config/MultiTenantHandler.java
  18. 41 1
      commons/src/main/java/com/jzg/core/base/BaseController.java
  19. 23 0
      commons/src/main/java/com/jzg/core/base/PageRequest.java
  20. 1 1
      commons/src/main/java/com/jzg/entity/po/OperatorTrajectory.java
  21. 4 10
      commons/src/main/java/com/jzg/entity/vo/RolePermissionVo.java
  22. 0 1
      commons/src/main/java/com/jzg/service/impl/OperatorTrajectoryServiceImpl.java
  23. 42 6
      platform/src/main/java/com/jzg/controller/UserRoleController.java
  24. 2 2
      platform/src/main/java/com/jzg/entity/po/SysMenu.java
  25. 5 1
      platform/src/main/java/com/jzg/entity/po/SysRole.java
  26. 20 0
      platform/src/main/java/com/jzg/entity/po/SysRolePerms.java
  27. 17 0
      platform/src/main/java/com/jzg/entity/po/SysSystem.java
  28. 52 0
      platform/src/main/java/com/jzg/entity/vo/SysRoleVo.java
  29. 2 3
      platform/src/main/java/com/jzg/event/PlatFormApplicationLister.java
  30. 2 3
      platform/src/main/java/com/jzg/mapper/SysRoleMapper.java
  31. 10 0
      platform/src/main/java/com/jzg/mapper/SysRolePermsMapper.java
  32. 10 0
      platform/src/main/java/com/jzg/mapper/SysSystemMapper.java
  33. 22 0
      platform/src/main/java/com/jzg/service/SysSystemService.java
  34. 24 2
      platform/src/main/java/com/jzg/service/UserRoleService.java
  35. 35 0
      platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java
  36. 67 3
      platform/src/main/java/com/jzg/service/impl/UserRoleServiceImpl.java
  37. 4 1
      platform/src/main/resources/application.yml
  38. 9 12
      platform/src/main/resources/mapper/SysRoleMapper.xml
  39. 5 0
      pom.xml

+ 9 - 1
authentication/src/main/java/com/jzg/config/JzgAuthentication.java

@@ -11,14 +11,22 @@ import java.util.Collections;
 public class JzgAuthentication implements Authentication {
 
     private final String username;
+
+    private String system;
     private final Collection<? extends GrantedAuthority> authorities;
     private boolean authenticated = false;
     private String salt;
 
-    public JzgAuthentication(String username, Collection<? extends GrantedAuthority> authorities) {
+    public JzgAuthentication(String username, String system, Collection<? extends GrantedAuthority> authorities) {
         this.username = username;
+        this.system = system;
         this.authorities = Collections.unmodifiableCollection(authorities); // Make authorities immutable
     }
+
+    public void setSystem(String system){
+        this.system = system;
+    }
+
     public void setSalt(String salt){
         this.salt = salt;
     }

+ 17 - 4
authentication/src/main/java/com/jzg/config/JzgAuthenticationProvider.java

@@ -2,6 +2,7 @@ package com.jzg.config;
 
 import com.jzg.constants.RedisKeyConstants;
 import com.jzg.entity.RedisToken;
+import com.jzg.entity.SysRolePerms;
 import com.jzg.entity.SysUserRole;
 import com.jzg.entity.SysUser;
 import com.jzg.exception.SystemException;
@@ -68,13 +69,25 @@ public class JzgAuthenticationProvider implements AuthenticationProvider {
             throw new SystemException("用户名或密码错误");
         }
         //获取角色组
-        List<SysUserRole> userRoles = sysUserRoleService.getUserRole(username);
+        List<SysRolePerms> userPerms = sysUserRoleService.getUserPerms(byId.getId(), system);
 
-        List<JzgGrantedAuthority> authorities = userRoles.stream()
-                .map(role -> new JzgGrantedAuthority(system,role.getRoleId()))
+        List<JzgGrantedAuthority> authorities = userPerms.stream()
+                .map(perms -> new JzgGrantedAuthority(system,perms.getPermsId(),perms.getPerms()))
                 .collect(Collectors.toList());
 
-        return new UsernamePasswordAuthenticationToken(username, rawPassword, authorities);
+        if (details instanceof java.util.Map) {
+            java.util.Map<String, Object> detailMap = (java.util.Map<String, Object>) details;
+            detailMap.put("systemcode", system);
+        } else {
+            java.util.Map<String, Object> detailMap = new java.util.HashMap<>();
+            detailMap.put("systemcode", system);
+            details = detailMap;
+        }
+
+        Object finalDetails = details;
+        return new UsernamePasswordAuthenticationToken(username, rawPassword, authorities) {{
+            setDetails(finalDetails);
+        }};
     }
 
 

+ 11 - 4
authentication/src/main/java/com/jzg/config/JzgGrantedAuthority.java

@@ -7,15 +7,22 @@ import org.springframework.security.core.GrantedAuthority;
 public class JzgGrantedAuthority implements GrantedAuthority {
     //所属系统
     private String system;
-    private String roleId;
 
-    public JzgGrantedAuthority(String system,String roleId){
+    //权限标识id
+    private String permsId;
+
+    //权限标识
+    private String perms;
+
+
+    public JzgGrantedAuthority(String system,String permsId,String perms){
         this.system = system;
-        this.roleId = roleId;
+        this.permsId = permsId;
+        this.perms = perms;
     }
 
     @Override
     public String getAuthority() {
-        return this.system + ":" + this.roleId;
+        return this.system + ":" + this.permsId;
     }
 }

+ 1 - 0
authentication/src/main/java/com/jzg/config/SecurityConfig.java

@@ -56,6 +56,7 @@ public class SecurityConfig {
         return new JzgAuthenticationSuccessHandler(tokenService);
     }
 
+
     @Bean
     public TokenAuthenticationFilter tokenAuthenticationFilter(AuthenticationManager authenticationManager){
         return new TokenAuthenticationFilter(authenticationManager,tokenService);

+ 21 - 1
authentication/src/main/java/com/jzg/controller/AuthController.java

@@ -1,7 +1,7 @@
 package com.jzg.controller;
 
-
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.jzg.config.JzgAuthentication;
 import com.jzg.config.JzgTokenService;
 import com.jzg.config.JzgUserDetailsService;
 import com.jzg.config.JzgUsernamePasswordAuthenticationToken;
@@ -18,6 +18,7 @@ import com.jzg.util.ImageUtil;
 import com.wf.captcha.SpecCaptcha;
 import com.wf.captcha.base.Captcha;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
 import io.swagger.v3.oas.annotations.responses.ApiResponse;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.ServletException;
@@ -38,6 +39,7 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.IOException;
+import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
@@ -133,6 +135,16 @@ public class AuthController extends BaseController {
         return HttpResult.ok("");
     }
 
+    @PostMapping("logout")
+    @Operation(summary = "退出登录")
+    public HttpResult logout(){
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+        String authorizationHeader = request.getHeader("Authorization");
+        boolean delete = redissonClient.getBucket(authorizationHeader).delete();
+        return delete ? HttpResult.ok("退出登录成功") : HttpResult.error("退出登录失败");
+    }
+
     @PostMapping("getUsers")
     @Operation(summary = "用户列表")
     public HttpResult getUsers(){
@@ -141,4 +153,12 @@ public class AuthController extends BaseController {
         page.setPages(1);
         return HttpResult.ok(sysUserService.page(page));
     }
+
+    @Operation(summary = "获取用户权限标识")
+    @GetMapping("/getUserPer")
+    public HttpResult getUserPer(){
+        List<String> userPerms = getUserPerms();
+        return HttpResult.ok(userPerms);
+    }
+
 }

+ 2 - 1
authentication/src/main/java/com/jzg/entity/RedisToken.java

@@ -9,5 +9,6 @@ import java.util.List;
 @Data
 public class RedisToken {
     private String username;
-    private List<JzgGrantedAuthority> roles;
+    private String system;
+    private List<JzgGrantedAuthority> auths;
 }

+ 23 - 0
authentication/src/main/java/com/jzg/entity/SysRolePerms.java

@@ -0,0 +1,23 @@
+package com.jzg.entity;
+
+import com.jzg.core.base.BaseModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "用户角色权限表")
+@Data
+public class SysRolePerms {
+
+    @Schema(description = "用户id")
+    private String id;
+
+    @Schema(description = "角色Id")
+    private String roleId;
+
+    @Schema(description = "权限标识id")
+    private String permsId;
+
+    @Schema(description = "权限标识")
+    private String perms;
+
+}

+ 4 - 1
authentication/src/main/java/com/jzg/handler/JzgAuthenticationSuccessHandler.java

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Component;
 
 import java.io.IOException;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -41,7 +42,9 @@ public class JzgAuthenticationSuccessHandler implements AuthenticationSuccessHan
                 .map(authority -> (JzgGrantedAuthority) authority) // 强制转换为 SimpleGrantedAuthority
                 .collect(Collectors.toList());
 
-        redisToken.setRoles(jzgGrantedAuthorities);
+        redisToken.setAuths(jzgGrantedAuthorities);
+        String system = ((HashMap<String, String>) authentication.getDetails()).get("systemcode");
+        redisToken.setSystem(system);
         String token = tokenService.generateToken(username);
         // 生成 JWT Token
         tokenService.saveToken(username,token,JSONObject.toJSONString(redisToken));

+ 14 - 0
authentication/src/main/java/com/jzg/mapper/SysRolePermsMapper.java

@@ -0,0 +1,14 @@
+package com.jzg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.entity.SysRolePerms;
+import com.jzg.entity.SysUser;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface SysRolePermsMapper extends BaseMapper<SysRolePerms> {
+
+    public List<SysRolePerms> getUserPerms(String userId, String systemId);
+}

+ 5 - 0
authentication/src/main/java/com/jzg/mapper/SysUserRoleMapper.java

@@ -1,9 +1,14 @@
 package com.jzg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.entity.SysRolePerms;
 import com.jzg.entity.SysUserRole;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface SysUserRoleMapper extends BaseMapper<SysUserRole> {
+
+
 }

+ 10 - 0
authentication/src/main/java/com/jzg/service/SysUserRoleService.java

@@ -1,6 +1,7 @@
 package com.jzg.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.entity.SysRolePerms;
 import com.jzg.entity.SysUserRole;
 
 import java.util.List;
@@ -9,4 +10,13 @@ import java.util.List;
 public interface SysUserRoleService extends IService<SysUserRole> {
 
     public List<SysUserRole> getUserRole(String userId);
+
+    /**
+     * 获取用户的角色权限
+     * @param userId
+     * @param systemId
+     * @return
+     */
+    public List<SysRolePerms> getUserPerms(String userId,String systemId);
+
 }

+ 13 - 0
authentication/src/main/java/com/jzg/service/impl/SysUserRoleServiceImpl.java

@@ -2,19 +2,32 @@ package com.jzg.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.entity.SysRolePerms;
 import com.jzg.entity.SysUserRole;
+import com.jzg.mapper.SysRolePermsMapper;
 import com.jzg.mapper.SysUserRoleMapper;
 import com.jzg.service.SysUserRoleService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
 
 @Service
 public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUserRole> implements SysUserRoleService {
+
+    @Autowired
+    SysRolePermsMapper sysRolePermsMapper;
+
     @Override
     public List<SysUserRole> getUserRole(String userId) {
         List<SysUserRole> sysRoles = baseMapper.selectList(new LambdaQueryWrapper<SysUserRole>()
                 .eq(SysUserRole::getUserId, userId));
         return sysRoles;
     }
+
+    @Override
+    public List<SysRolePerms> getUserPerms(String userId, String systemId) {
+        List<SysRolePerms> userPerms = sysRolePermsMapper.getUserPerms(userId, systemId);
+        return userPerms;
+    }
 }

+ 3 - 2
authentication/src/main/resources/application.yml

@@ -15,6 +15,7 @@ spring:
 
 mybatis-plus:
   mapper-locations: classpath*:/mapper/*Mapper.xml
-
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 config:
-  sso: 1
+  sso: 0

+ 17 - 0
authentication/src/main/resources/mapper/SysUserRoleMapper.xml

@@ -0,0 +1,17 @@
+<?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.jzg.mapper.SysRolePermsMapper">
+
+
+    <select id="getUserPerms" resultType="com.jzg.entity.SysRolePerms">
+        SELECT
+            srp.*
+        FROM
+            sys_user su
+                LEFT JOIN sys_user_role sur ON su.id = sur.user_id
+                left join sys_role_perms  srp on sur.role_id = srp.role_id
+        WHERE
+            su.id = #{userId}
+
+    </select>
+</mapper>

+ 8 - 0
commons/src/main/java/com/jzg/aop/aspect/OperatorTrajectoryAspect.java

@@ -4,6 +4,7 @@ package com.jzg.aop.aspect;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.aop.OperatorTrajectory;
+import com.jzg.core.base.BaseController;
 import com.jzg.core.base.HistoryDataService;
 import com.jzg.core.page.HttpResult;
 import com.jzg.exception.SystemException;
@@ -18,6 +19,8 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
 import java.lang.reflect.Method;
+import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 import java.util.Objects;
 
@@ -34,6 +37,9 @@ public class OperatorTrajectoryAspect {
     @Autowired
     private ApplicationContext applicationContext;
 
+    @Autowired
+    private BaseController baseController;
+
     private ThreadLocal<MethodContext> methodContext = new ThreadLocal<>();
 
     @AfterReturning(pointcut = "@annotation(com.jzg.aop.OperatorTrajectory)",returning = "result")
@@ -100,6 +106,8 @@ public class OperatorTrajectoryAspect {
         trajectory.setOperatorType(operatorTrajectory.type());
         trajectory.setSystemCode(operatorTrajectory.systemCode());
         trajectory.setServiceTag(operatorTrajectory.serviceTag());
+        trajectory.setCreateTime(LocalDateTime.now());
+        trajectory.setCreateBy(baseController.getUserName());
 
         if(!Objects.isNull(obj)) {
             trajectory.setAfterJson(JSON.toJSONString(obj));

+ 4 - 1
commons/src/main/java/com/jzg/aop/aspect/PermissionAspect.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.aop.PremissionCheck;
 import com.jzg.constants.RedisKeyConstants;
-import com.jzg.entity.vo.RoleMenuVo;
 import com.jzg.exception.SystemException;
 import jakarta.servlet.http.HttpServletRequest;
 import org.apache.tomcat.util.http.fileupload.RequestContext;
@@ -60,6 +59,10 @@ public class PermissionAspect {
         {
             throw new Exception("用户未登录");
         }
+        //判断是否是admin用户 如果是的话则不进行权限过滤
+        if(JSON.parseObject(userTokenDataStr).getString("username").equals("admin")){
+            return;
+        }
         JSONArray userSystemRole = JSON.parseObject(userTokenDataStr).getJSONArray("roles");
         List<String> userSystemRoleIds = userSystemRole.stream().map(role ->
             ((JSONObject) role).getString("roleId")).collect(Collectors.toList());

+ 1 - 1
commons/src/main/java/com/jzg/config/MultiTenantHandler.java

@@ -36,7 +36,7 @@ public class MultiTenantHandler implements TenantLineHandler {
     public Expression getTenantId() {
         // 实际应该从用户信息中获取,框架一般都有获取用户信息的接口
         String userName = controller.getUserName();
-        String tenant_id = "111";
+        String tenant_id = controller.getUserLoginSystem();
         // 判空校验
         if (StringUtil.isNotEmpty(tenant_id)) {
             return new StringValue(tenant_id);

+ 41 - 1
commons/src/main/java/com/jzg/core/base/BaseController.java

@@ -1,6 +1,7 @@
 package com.jzg.core.base;
 
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.exception.SystemException;
 import jakarta.servlet.http.HttpServletRequest;
@@ -10,6 +11,8 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 
 @Component
@@ -22,7 +25,7 @@ public class BaseController {
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         HttpServletRequest request = attributes.getRequest();
         String authorizationHeader = request.getHeader("Authorization");
-        if(Objects.isNull(redissonClient.getBucket(authorizationHeader))){
+        if(Objects.isNull(authorizationHeader) || Objects.isNull(redissonClient.getBucket(authorizationHeader).get())){
             throw new SystemException("用户登录信息过期");
         }
         String userJsonStr = redissonClient.getBucket(authorizationHeader).get().toString();
@@ -30,4 +33,41 @@ public class BaseController {
         return userInfo.getString("username");
     }
 
+    /**
+     * 获取用户登录的系统
+     * @return
+     */
+    public String getUserLoginSystem(){
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+        String authorizationHeader = request.getHeader("Authorization");
+        if(Objects.isNull(authorizationHeader) || Objects.isNull(redissonClient.getBucket(authorizationHeader).get())){
+            throw new SystemException("用户登录信息过期");
+        }
+        String userJsonStr = redissonClient.getBucket(authorizationHeader).get().toString();
+        JSONObject userInfo = JSONObject.parseObject(userJsonStr);
+        return userInfo.getString("system");
+    }
+
+    /**
+     * 获取用户权限标识
+     * @return
+     */
+    public List<String> getUserPerms(){
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+        String authorizationHeader = request.getHeader("Authorization");
+        if(Objects.isNull(authorizationHeader) || Objects.isNull(redissonClient.getBucket(authorizationHeader).get())){
+            throw new SystemException("用户登录信息过期");
+        }
+        List<String> userPerms = new ArrayList<>();
+        String userJsonStr = redissonClient.getBucket(authorizationHeader).get().toString();
+        JSONObject userInfo = JSONObject.parseObject(userJsonStr);
+        JSONArray auths = userInfo.getJSONArray("auths");
+        auths.forEach(auth->{
+            userPerms.add(((JSONObject)auth).getString("perms"));
+        });
+        return userPerms;
+    }
+
 }

+ 23 - 0
commons/src/main/java/com/jzg/core/base/PageRequest.java

@@ -0,0 +1,23 @@
+package com.jzg.core.base;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.Data;
+
+@Data
+public class PageRequest {
+
+    /**
+     * 当前页码
+     */
+    private int pageNum = 1;
+    /**
+     * 每页数量
+     */
+    private int pageSize = 10;
+
+
+    public Page getPage(){
+        return new Page(pageNum,pageSize);
+    }
+
+}

+ 1 - 1
commons/src/main/java/com/jzg/entity/po/OperatorTrajectory.java

@@ -12,7 +12,7 @@ import java.util.Date;
  * @author dongxin
  */
 @Data
-public class OperatorTrajectory {
+public class OperatorTrajectory{
     private String id;
 
     private String systemCode;

+ 4 - 10
commons/src/main/java/com/jzg/entity/vo/RoleMenuVo.java → commons/src/main/java/com/jzg/entity/vo/RolePermissionVo.java

@@ -8,7 +8,7 @@ import java.util.List;
  * 角色菜单Vo对象
  */
 @Data
-public class RoleMenuVo {
+public class RolePermissionVo {
     private String id;
 
     private String systemCode;
@@ -25,19 +25,13 @@ public class RoleMenuVo {
 
         private String remark;
 
-        private List<MenuVo> menuVos;
+        private List<RolePermsVo> permVos;
     }
 
     @Data
-    public static class MenuVo{
+    public static class RolePermsVo{
 
-        private String id;
-
-        private String name;
-
-        private String parentId;
-
-        private String url;
+        private String permsId;
 
         private String perms;
     }

+ 0 - 1
commons/src/main/java/com/jzg/service/impl/OperatorTrajectoryServiceImpl.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.core.base.HistoryDataService;
 import com.jzg.core.page.HttpResult;
 import com.jzg.entity.po.OperatorTrajectory;
-import com.jzg.entity.vo.RoleMenuVo;
 import com.jzg.mapper.OperatorTrajectoryMapper;
 import com.jzg.service.OperatorTrajectoryService;
 import org.springframework.stereotype.Service;

+ 42 - 6
platform/src/main/java/com/jzg/controller/UserRoleController.java

@@ -2,26 +2,33 @@ package com.jzg.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jzg.aop.PremissionCheck;
-import com.jzg.entity.vo.RoleMenuVo;
+import com.jzg.core.base.BaseController;
+import com.jzg.core.page.HttpResult;
+import com.jzg.entity.vo.RolePermissionVo;
+import com.jzg.entity.vo.SysRoleVo;
 import com.jzg.service.UserRoleService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.media.Schema;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
+
+@Tag(name="用户角色管理")
 @RestController
 @RequestMapping("/userRole")
-public class UserRoleController {
+public class UserRoleController extends BaseController {
 
     @Autowired
     UserRoleService userRoleService;
 
     @GetMapping("/getAllMenu")
     public String getAllMenu(){
-        List<RoleMenuVo> allRoleMenu = userRoleService.getAllRoleMenu();
+        List<RolePermissionVo> allRoleMenu = userRoleService.getAllRoleMenu();
         return JSONObject.toJSONString(allRoleMenu);
     }
 
@@ -31,4 +38,33 @@ public class UserRoleController {
         return "powerTest";
     }
 
+    /**
+     * 获取角色列表
+     * @param sysRoleVo
+     * @return
+     */
+    @Operation(summary = "角色列表")
+    @PostMapping("/roleList")
+    public HttpResult roleList(@RequestBody SysRoleVo sysRoleVo){
+        Page page = sysRoleVo.getPage();
+        Page page1 = userRoleService.page(page);
+        return HttpResult.ok(page1);
+    }
+
+    @GetMapping("/roleGet")
+    public HttpResult roleGet(@RequestBody String id){
+        return HttpResult.ok();
+    }
+
+    @Operation(summary = "角色添加")
+    @PostMapping("/roleAdd")
+    public HttpResult roleAdd(@RequestBody SysRoleVo sysRoleVo){
+        if(userRoleService.isExist(sysRoleVo.getName())){
+            return HttpResult.error("角色名称已存在,请修改后重新提交");
+        }
+        return userRoleService.roleAdd(sysRoleVo) ? HttpResult.ok("添加角色成功") : HttpResult.error("添加角色失败");
+    }
+
+
+
 }

+ 2 - 2
platform/src/main/java/com/jzg/entity/po/SysMenu.java

@@ -7,11 +7,11 @@ public class SysMenu {
 
     private String id;
 
+    private String systemId;
+
     private String name;
 
     private String parentId;
 
-    private String url;
-
     private String perms;
 }

+ 5 - 1
platform/src/main/java/com/jzg/entity/po/SysRole.java

@@ -1,14 +1,18 @@
 package com.jzg.entity.po;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import com.jzg.core.base.BaseModel;
 import lombok.Data;
 
 @Data
 public class SysRole extends BaseModel {
 
+    @TableId
     private String id;
 
-    private String system;
+    private String systemId;
 
     private String name;
 

+ 20 - 0
platform/src/main/java/com/jzg/entity/po/SysRolePerms.java

@@ -0,0 +1,20 @@
+package com.jzg.entity.po;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "角色权限标识表")
+@Data
+public class SysRolePerms {
+
+    private String id;
+
+    @Schema(description = "角色id")
+    private String roleId;
+
+    @Schema(description = "权限id")
+    private String permsId;
+
+    @Schema(description = "权限标识")
+    private String perms;
+}

+ 17 - 0
platform/src/main/java/com/jzg/entity/po/SysSystem.java

@@ -0,0 +1,17 @@
+package com.jzg.entity.po;
+
+import lombok.Data;
+
+@Data
+public class SysSystem {
+
+    private String id;
+
+    private String parentId;
+
+    private String sysCode;
+
+    private String sysName;
+
+    private String sysIcon;
+}

+ 52 - 0
platform/src/main/java/com/jzg/entity/vo/SysRoleVo.java

@@ -0,0 +1,52 @@
+package com.jzg.entity.vo;
+
+import com.jzg.core.base.BaseModel;
+import com.jzg.core.base.PageRequest;
+import com.jzg.entity.po.SysMenu;
+import com.jzg.entity.po.SysRole;
+import com.jzg.entity.po.SysRolePerms;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+import org.springframework.validation.annotation.Validated;
+
+import java.util.List;
+
+@Schema(description = "用户角色表VO")
+@Data
+public class SysRoleVo extends PageRequest {
+
+    @Schema(description = "角色id")
+    private String id;
+
+    @NotNull(message = "系统id不能为空")
+    @Schema(description = "系统id")
+    private String system;
+
+    @NotNull(message = "角色名称不能为空")
+    @Size(min=1,max=100,message = "角色名称长度不能大于100")
+    @Schema(description = "角色名称")
+    private String name;
+
+    @Size(max = 100,message="备注长度不能大于100")
+    @Schema(description = "备注")
+    private String remark;
+
+    @Schema(description = "权限id数组")
+    private List<String> permsId;
+
+    @Schema(description = "权限标识数组")
+    private List<String> perms;
+
+    public SysRole getSysRole(){
+        SysRole sysRole = new SysRole();
+        sysRole.setId(id);
+        sysRole.setSystemId(system);
+        sysRole.setName(name);
+        sysRole.setRemark(remark);
+        return sysRole;
+    }
+
+}

+ 2 - 3
platform/src/main/java/com/jzg/event/PlatFormApplicationLister.java

@@ -2,12 +2,11 @@ package com.jzg.event;
 
 import com.alibaba.fastjson.JSONObject;
 import com.jzg.constants.RedisKeyConstants;
-import com.jzg.entity.vo.RoleMenuVo;
+import com.jzg.entity.vo.RolePermissionVo;
 import com.jzg.service.UserRoleService;
 import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
-import org.springframework.context.ApplicationEvent;
 import org.springframework.context.ApplicationListener;
 import org.springframework.stereotype.Component;
 
@@ -28,7 +27,7 @@ public class PlatFormApplicationLister implements ApplicationListener<Applicatio
     @Override
     public void onApplicationEvent(ApplicationReadyEvent event) {
         //将所有用户角色权限放到redis里
-        List<RoleMenuVo> allRoleMenu = userRoleService.getAllRoleMenu();
+        List<RolePermissionVo> allRoleMenu = userRoleService.getAllRoleMenu();
         redissonClient.getBucket(RedisKeyConstants.ROLE_MENU_KEY).set(JSONObject.toJSONString(allRoleMenu));
     }
 }

+ 2 - 3
platform/src/main/java/com/jzg/mapper/SysRoleMapper.java

@@ -1,9 +1,8 @@
 package com.jzg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.jzg.annotation.IgnoreTenant;
 import com.jzg.entity.po.SysRole;
-import com.jzg.entity.vo.RoleMenuVo;
+import com.jzg.entity.vo.RolePermissionVo;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
@@ -11,6 +10,6 @@ import java.util.List;
 @Mapper
 public interface SysRoleMapper extends BaseMapper<SysRole> {
 
-    public List<RoleMenuVo> getAllRoleMenu();
+    public List<RolePermissionVo> getAllRoleMenu();
 
 }

+ 10 - 0
platform/src/main/java/com/jzg/mapper/SysRolePermsMapper.java

@@ -0,0 +1,10 @@
+package com.jzg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.entity.po.SysMenu;
+import com.jzg.entity.po.SysRolePerms;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysRolePermsMapper extends BaseMapper<SysRolePerms> {
+}

+ 10 - 0
platform/src/main/java/com/jzg/mapper/SysSystemMapper.java

@@ -0,0 +1,10 @@
+package com.jzg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.jzg.entity.po.SysRoleMenu;
+import com.jzg.entity.po.SysSystem;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SysSystemMapper extends BaseMapper<SysSystem> {
+}

+ 22 - 0
platform/src/main/java/com/jzg/service/SysSystemService.java

@@ -0,0 +1,22 @@
+package com.jzg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.jzg.entity.po.SysSystem;
+
+public interface SysSystemService extends IService<SysSystem> {
+
+    /**
+     * 根据SystemCode 查询 System对象
+     * @param systemCode
+     * @return
+     */
+    public SysSystem getBySystemCode(String systemCode);
+
+    /**
+     * 根据systemCode 判断是否存在数据
+     * @param systemCode
+     * @return
+     */
+    public boolean isExists(String systemCode);
+
+}

+ 24 - 2
platform/src/main/java/com/jzg/service/UserRoleService.java

@@ -2,7 +2,8 @@ package com.jzg.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jzg.entity.po.SysRole;
-import com.jzg.entity.vo.RoleMenuVo;
+import com.jzg.entity.vo.RolePermissionVo;
+import com.jzg.entity.vo.SysRoleVo;
 
 import java.util.List;
 
@@ -12,7 +13,28 @@ public interface UserRoleService extends IService<SysRole> {
      * 获取所有角色菜单
      * @return
      */
-    public List<RoleMenuVo> getAllRoleMenu();
+    public List<RolePermissionVo> getAllRoleMenu();
+
+    /**
+     * 获取角色信息
+     * @param roleId
+     * @return
+     */
+    public SysRoleVo roleGet(String roleId);
+
+    /**
+     * 根据角色名称判断 角色 是否存在
+     * @param roleName
+     * @return
+     */
+    public boolean isExist(String roleName);
+
+    /**
+     * 保存角色信息
+     * @param sysRoleVo
+     * @return
+     */
+    public boolean roleAdd(SysRoleVo sysRoleVo);
 
 
 }

+ 35 - 0
platform/src/main/java/com/jzg/service/impl/SysSystemServiceImpl.java

@@ -0,0 +1,35 @@
+package com.jzg.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.jzg.entity.po.SysSystem;
+import com.jzg.mapper.SysSystemMapper;
+import com.jzg.service.SysSystemService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class SysSystemServiceImpl extends ServiceImpl<SysSystemMapper, SysSystem> implements SysSystemService {
+
+    /**
+     * 根据SystemCode 查询 System对象
+     * @param systemCode
+     * @return
+     */
+    @Override
+    public SysSystem getBySystemCode(String systemCode) {
+        return this.getOne(new LambdaQueryWrapper<SysSystem>()
+                .eq(SysSystem::getSysCode, systemCode));
+    }
+
+    /**
+     * 根据systemCode 判断是否存在数据
+     * @param systemCode
+     * @return
+     */
+    @Override
+    public boolean isExists(String systemCode) {
+        long count = this.count(new LambdaQueryWrapper<SysSystem>()
+                .eq(SysSystem::getSysCode, systemCode));
+        return count > 0;
+    }
+}

+ 67 - 3
platform/src/main/java/com/jzg/service/impl/UserRoleServiceImpl.java

@@ -1,21 +1,85 @@
 package com.jzg.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jzg.annotation.IgnoreTenant;
 import com.jzg.entity.po.SysRole;
-import com.jzg.entity.vo.RoleMenuVo;
+import com.jzg.entity.po.SysRolePerms;
+import com.jzg.entity.po.SysSystem;
+import com.jzg.entity.vo.RolePermissionVo;
+import com.jzg.entity.vo.SysRoleVo;
+import com.jzg.exception.SystemException;
+import com.jzg.mapper.SysMenuMapper;
 import com.jzg.mapper.SysRoleMapper;
+import com.jzg.mapper.SysRolePermsMapper;
+import com.jzg.service.SysSystemService;
 import com.jzg.service.UserRoleService;
+import com.jzg.util.idgen.IdGenerate;
+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.List;
+import java.util.Objects;
 
 @Service
 public class UserRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements UserRoleService {
+
+    @Autowired
+    SysSystemService sysSystemService;
+
+    @Autowired
+    SysMenuMapper sysMenuMapper;
+
+    @Autowired
+    SysRolePermsMapper sysRolePermsMapper;
+
     @IgnoreTenant
     @Override
-    public List<RoleMenuVo> getAllRoleMenu() {
-        List<RoleMenuVo> allRoleMenu = baseMapper.getAllRoleMenu();
+    public List<RolePermissionVo> getAllRoleMenu() {
+        List<RolePermissionVo> allRoleMenu = baseMapper.getAllRoleMenu();
         return allRoleMenu;
     }
+
+    @Override
+    public SysRoleVo roleGet(String roleId) {
+        return null;
+    }
+
+    @Override
+    public boolean isExist(String roleName) {
+        return baseMapper.selectCount(new LambdaQueryWrapper<SysRole>()
+                .eq(SysRole::getName,roleName)) > 0;
+    }
+
+
+    @Transactional
+    @Override
+    public boolean roleAdd(SysRoleVo sysRoleVo) {
+        sysRoleVo.setId(IdGenerate.nextId());
+        SysRole sysRole = sysRoleVo.getSysRole();
+        SysSystem bySystemCode = sysSystemService.getBySystemCode(sysRole.getSystemId());
+        if(Objects.isNull(bySystemCode)){
+            throw new SystemException("系统不存在,请修改");
+        }
+        List<SysRolePerms> sysRolePermsList = new ArrayList<>();
+        sysRole.setSystemId(bySystemCode.getId());
+        for(int i=0;i<sysRoleVo.getPermsId().size();i++){
+            SysRolePerms perms = new SysRolePerms();
+            perms.setId(IdGenerate.nextId());
+            perms.setRoleId(sysRole.getId());
+            perms.setPermsId(sysRoleVo.getPermsId().get(i));
+            perms.setPerms(sysRoleVo.getPerms().get(i));
+            sysRolePermsList.add(perms);
+        }
+
+        if(sysRolePermsMapper.insert(sysRolePermsList).stream().count() > 0 && baseMapper.insert(sysRole) > 0){
+            return true;
+        }
+        return false;
+    }
+
+
+
 }

+ 4 - 1
platform/src/main/resources/application.yml

@@ -20,6 +20,8 @@ mybatis-plus:
       logic-delete-field: is_delete
       logic-delete-value: 1
       logic-not-delete-value: 0
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 
 config:
   sso: 1
@@ -27,8 +29,9 @@ config:
 #多租户配置
 tenant:
   enable: true
-  column: system
+  column: system_id
   filterTables:
   ignoreTables:
     - sys_system
+    - sys_role_perms
   ignoreLoginNames:

+ 9 - 12
platform/src/main/resources/mapper/SysRoleMapper.xml

@@ -1,20 +1,19 @@
 <?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.jzg.mapper.SysRoleMapper">
-    <resultMap id="RoleMenuMap" type="com.jzg.entity.vo.RoleMenuVo">
+    <resultMap id="RoleMenuMap" type="com.jzg.entity.vo.RolePermissionVo">
         <result column="id" property="id"/>
         <result column="systemCode" property="systemCode"/>
         <result column="systemName" property="systemName"/>
 
-        <collection property="roleVos" ofType="com.jzg.entity.vo.RoleMenuVo$RoleVo">
+        <collection property="roleVos" ofType="com.jzg.entity.vo.RolePermissionVo$RoleVo">
             <result column="roleId" property="id"/>
             <result column="roleName" property="name"/>
             <result column="remark" property="remark"/>
 
-            <collection property="menuVos" ofType="com.jzg.entity.vo.RoleMenuVo$MenuVo">
-                <result column="menuId" property="id"/>
+            <collection property="permVos" ofType="com.jzg.entity.vo.RolePermissionVo$RolePermsVo">
                 <result column="perms" property="perms"/>
-                <result column="menuName" property="name"/>
+                <result column="permsId" property="permsId"/>
             </collection>
         </collection>
 
@@ -22,19 +21,17 @@
 
     <select id="getAllRoleMenu" resultMap="RoleMenuMap">
         SELECT
-            ss.id,
+            ss.sys_id,
             ss.sys_code as systemCode,
             ss.sys_name as systemName,
             sr.id as roleId,
             sr.name as roleName,
             sr.remark,
-            sm.id as menuId,
-            sm.`name` as menuName,
-            sm.perms
+            srp.perms_id as permsId,
+            srp.perms
         FROM
             sys_system ss
-                LEFT JOIN sys_role sr ON sr.system = ss.id
-                LEFT JOIN sys_role_menu srm ON sr.id = srm.role_id
-                LEFT JOIN sys_menu sm ON srm.menu_id = sm.id
+                LEFT JOIN sys_role sr ON sr.system_id = ss.sys_id
+                LEFT JOIN sys_role_perms srp ON sr.id = srp.role_id
     </select>
 </mapper>

+ 5 - 0
pom.xml

@@ -52,6 +52,11 @@
       <artifactId>spring-boot-starter-aop</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-validation</artifactId>
+    </dependency>
+
     <!-- fastjson -->
     <dependency>
       <groupId>com.alibaba</groupId>