commit init
This commit is contained in:
commit
7aaa6700b3
25
.gitignore
vendored
Normal file
25
.gitignore
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
# Compiled class file
|
||||
*.class
|
||||
|
||||
# Log file
|
||||
*.log
|
||||
|
||||
# BlueJ files
|
||||
*.ctxt
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
target
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.ear
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
*.iml
|
||||
.idea
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
227
pom.xml
Normal file
227
pom.xml
Normal file
@ -0,0 +1,227 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.cnbm</groupId>
|
||||
<artifactId>ym-pass</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<modules>
|
||||
<module>ym-common</module>
|
||||
<module>ym-admin</module>
|
||||
<module>ym-generator</module>
|
||||
<module>ym-gateway</module>
|
||||
<module>ym-barcode</module>
|
||||
<module>ym-basic</module>
|
||||
</modules>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<name>ym-pass</name>
|
||||
<description>轻工业自动化研究所springboot框架</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.7.0</version>
|
||||
</parent>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
<junit.version>4.13.2</junit.version>
|
||||
<jedis.version>4.2.2</jedis.version>
|
||||
<!-- <druid.version>1.2.9</druid.version>-->
|
||||
<mybatisplus.version>3.5.1</mybatisplus.version>
|
||||
<sqlserver.version>4.0</sqlserver.version>
|
||||
<oracle.version>11.2.0.3</oracle.version>
|
||||
<commons.lang.version>3.12.0</commons.lang.version>
|
||||
<commons.fileupload.version>1.4</commons.fileupload.version>
|
||||
<commons.io.version>2.11.0</commons.io.version>
|
||||
<commons.codec.version>1.15</commons.codec.version>
|
||||
<guava.version>31.0-jre</guava.version>
|
||||
<joda.time.version>2.10.14</joda.time.version>
|
||||
<hutool.version>5.7.22</hutool.version>
|
||||
<gson.version>2.9.0</gson.version>
|
||||
<jsoup.version>1.14.3</jsoup.version>
|
||||
<knife4j.version>2.0.2</knife4j.version>
|
||||
<lombok.version>1.18.24</lombok.version>
|
||||
<docker.plugin.version>1.1.1</docker.plugin.version>
|
||||
<easypoi.version>4.4.0</easypoi.version>
|
||||
</properties>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-validation</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context-support</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-configuration-processor</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>redis.clients</groupId>
|
||||
<artifactId>jedis</artifactId>
|
||||
<version>${jedis.version}</version>
|
||||
</dependency>
|
||||
<!-- mysql驱动 -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<!-- oracle驱动 -->
|
||||
<dependency>
|
||||
<groupId>com.oracle</groupId>
|
||||
<artifactId>ojdbc6</artifactId>
|
||||
<version>${oracle.version}</version>
|
||||
</dependency>
|
||||
<!-- sqlserver驱动 -->
|
||||
<dependency>
|
||||
<groupId>com.microsoft.sqlserver</groupId>
|
||||
<artifactId>sqljdbc4</artifactId>
|
||||
<version>${sqlserver.version}</version>
|
||||
</dependency>
|
||||
<!-- postgresql驱动 -->
|
||||
<dependency>
|
||||
<groupId>org.postgresql</groupId>
|
||||
<artifactId>postgresql</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jdbc</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.afterturn</groupId>
|
||||
<artifactId>easypoi-base</artifactId>
|
||||
<version>${easypoi.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.afterturn</groupId>
|
||||
<artifactId>easypoi-web</artifactId>
|
||||
<version>${easypoi.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>${mybatisplus.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-generator</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>${commons.lang.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-fileupload</groupId>
|
||||
<artifactId>commons-fileupload</artifactId>
|
||||
<version>${commons.fileupload.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons.io.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-codec</groupId>
|
||||
<artifactId>commons-codec</artifactId>
|
||||
<version>${commons.codec.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>${guava.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>joda-time</groupId>
|
||||
<artifactId>joda-time</artifactId>
|
||||
<version>${joda.time.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>${gson.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>${hutool.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jsoup</groupId>
|
||||
<artifactId>jsoup</artifactId>
|
||||
<version>${jsoup.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.xiaoymin</groupId>
|
||||
<artifactId>knife4j-spring-boot-starter</artifactId>
|
||||
<version>${knife4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${lombok.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- 阿里云maven仓库 -->
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>public</id>
|
||||
<name>aliyun nexus</name>
|
||||
<url>https://maven.aliyun.com/repository/public/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
</repository>
|
||||
</repositories>
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>public</id>
|
||||
<name>aliyun nexus</name>
|
||||
<url>https://maven.aliyun.com/repository/public/</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
</project>
|
44
ym-admin/pom.xml
Normal file
44
ym-admin/pom.xml
Normal file
@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<parent>
|
||||
<artifactId>ym-pass</artifactId>
|
||||
<groupId>com.cnbm</groupId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>ym-admin</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<properties>
|
||||
<quartz.version>2.3.2</quartz.version>
|
||||
<shiro.version>1.9.0</shiro.version>
|
||||
<captcha.version>1.6.2</captcha.version>
|
||||
<easypoi.version>4.1.0</easypoi.version>
|
||||
<qiniu.version>7.2.27</qiniu.version>
|
||||
<aliyun.oss.version>2.8.3</aliyun.oss.version>
|
||||
<aliyun.core.version>3.2.2</aliyun.core.version>
|
||||
<qcloud.cos.version>5.4.4</qcloud.cos.version>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-security</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt</artifactId>
|
||||
<version>0.9.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.cnbm</groupId>
|
||||
<artifactId>ym-common</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -0,0 +1,28 @@
|
||||
package com.cnbm.admin.Expression;
|
||||
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysMenuEntity;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/13 8:29 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Component("ex")
|
||||
public class SGExpressionRoot {
|
||||
|
||||
public boolean hasAuthority(String authority){
|
||||
//获取当前用户的权限
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
List<String> permissions = loginUser.getPermissions();
|
||||
//判断用户权限集合中是否存在authority
|
||||
return permissions.contains(authority);
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.cnbm.admin.annotation;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:40 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Target(ElementType.METHOD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface LogOperation {
|
||||
|
||||
String value() default "";
|
||||
}
|
@ -0,0 +1,105 @@
|
||||
package com.cnbm.admin.aspect;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysLogOperationEntity;
|
||||
import com.cnbm.admin.enums.OperationStatusEnum;
|
||||
import com.cnbm.admin.service.SysLogOperationService;
|
||||
import com.cnbm.common.utils.HttpContextUtils;
|
||||
import com.cnbm.common.utils.IpUtils;
|
||||
import com.cnbm.common.utils.JsonUtils;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:41 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Aspect
|
||||
@Component
|
||||
public class LogOperationAspect {
|
||||
|
||||
@Autowired
|
||||
private SysLogOperationService sysLogOperationService;
|
||||
|
||||
@Pointcut("@annotation(com.cnbm.admin.annotation.LogOperation)")
|
||||
public void logPointCut() {
|
||||
|
||||
}
|
||||
|
||||
@Around("logPointCut()")
|
||||
public Object around(ProceedingJoinPoint point) throws Throwable {
|
||||
long beginTime = System.currentTimeMillis();
|
||||
try {
|
||||
//执行方法
|
||||
Object result = point.proceed();
|
||||
|
||||
//执行时长(毫秒)
|
||||
long time = System.currentTimeMillis() - beginTime;
|
||||
//保存日志
|
||||
saveLog(point, time, OperationStatusEnum.SUCCESS.value());
|
||||
|
||||
return result;
|
||||
}catch(Exception e) {
|
||||
//执行时长(毫秒)
|
||||
long time = System.currentTimeMillis() - beginTime;
|
||||
//保存日志
|
||||
saveLog(point, time, OperationStatusEnum.FAIL.value());
|
||||
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
private void saveLog(ProceedingJoinPoint joinPoint, long time, Integer status) throws Exception {
|
||||
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = joinPoint.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes());
|
||||
LogOperation annotation = method.getAnnotation(LogOperation.class);
|
||||
|
||||
SysLogOperationEntity log = new SysLogOperationEntity();
|
||||
if(annotation != null){
|
||||
//注解上的描述
|
||||
log.setOperation(annotation.value());
|
||||
}
|
||||
|
||||
//登录用户信息
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
if(loginUser != null){
|
||||
log.setCreatorName(loginUser.getUsername());
|
||||
}
|
||||
|
||||
log.setStatus(status);
|
||||
log.setRequestTime((int)time);
|
||||
|
||||
//请求相关信息
|
||||
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
log.setIp(IpUtils.getIpAddr(request));
|
||||
log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT));
|
||||
log.setRequestUri(request.getRequestURI());
|
||||
log.setRequestMethod(request.getMethod());
|
||||
|
||||
//请求参数
|
||||
Object[] args = joinPoint.getArgs();
|
||||
try{
|
||||
String params = JsonUtils.toJsonString(args[0]);
|
||||
log.setRequestParams(params);
|
||||
}catch (Exception e){
|
||||
|
||||
}
|
||||
|
||||
//保存到DB
|
||||
sysLogOperationService.save(log);
|
||||
}
|
||||
}
|
30
ym-admin/src/main/java/com/cnbm/admin/config/CorsConfig.java
Normal file
30
ym-admin/src/main/java/com/cnbm/admin/config/CorsConfig.java
Normal file
@ -0,0 +1,30 @@
|
||||
package com.cnbm.admin.config;
|
||||
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.CorsRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 10:47 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Configuration
|
||||
public class CorsConfig implements WebMvcConfigurer {
|
||||
|
||||
@Override
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
// 设置允许跨域的路径
|
||||
registry.addMapping("/**")
|
||||
// 设置允许跨域请求的域名
|
||||
.allowedOriginPatterns("*")
|
||||
// 是否允许cookie
|
||||
.allowCredentials(true)
|
||||
// 设置允许的请求方式
|
||||
.allowedMethods("GET", "POST", "DELETE", "PUT")
|
||||
// 设置允许的header属性
|
||||
.allowedHeaders("*")
|
||||
// 跨域允许时间
|
||||
.maxAge(3600);
|
||||
}
|
||||
}
|
@ -0,0 +1,74 @@
|
||||
package com.cnbm.admin.config;
|
||||
|
||||
import com.cnbm.admin.filter.JwtAuthenticationTokenFilter;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.security.web.AuthenticationEntryPoint;
|
||||
import org.springframework.security.web.access.AccessDeniedHandler;
|
||||
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 1:51 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Configuration
|
||||
@EnableGlobalMethodSecurity(prePostEnabled = true)
|
||||
public class SecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
|
||||
//创建BCryptPasswordEncoder注入容器
|
||||
@Bean
|
||||
public PasswordEncoder passwordEncoder(){
|
||||
return new BCryptPasswordEncoder();
|
||||
}
|
||||
@Autowired
|
||||
private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
|
||||
|
||||
|
||||
@Autowired
|
||||
private AuthenticationEntryPoint authenticationEntryPoint;
|
||||
|
||||
@Autowired
|
||||
private AccessDeniedHandler accessDeniedHandler;
|
||||
|
||||
@Override
|
||||
protected void configure(HttpSecurity http) throws Exception {
|
||||
http
|
||||
//关闭csrf
|
||||
.csrf().disable()
|
||||
//不通过Session获取SecurityContext
|
||||
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
|
||||
.and()
|
||||
.authorizeRequests()
|
||||
// 对于登录接口 允许匿名访问
|
||||
.antMatchers("/login").anonymous()
|
||||
// .antMatchers("/testCors").hasAuthority("system:dept:list222")
|
||||
// 除上面外的所有请求全部需要鉴权认证
|
||||
.anyRequest().authenticated();
|
||||
|
||||
//添加过滤器
|
||||
http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
|
||||
|
||||
//配置异常处理器
|
||||
http.exceptionHandling()
|
||||
//配置认证失败处理器
|
||||
.authenticationEntryPoint(authenticationEntryPoint)
|
||||
.accessDeniedHandler(accessDeniedHandler);
|
||||
|
||||
//允许跨域
|
||||
http.cors();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Override
|
||||
public AuthenticationManager authenticationManagerBean() throws Exception {
|
||||
return super.authenticationManagerBean();
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.params.LoginParam;
|
||||
import com.cnbm.admin.service.LoginService;
|
||||
import com.cnbm.admin.utils.ResponseResult;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/7 3:55 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags="登录管理")
|
||||
@Log4j2
|
||||
public class LoginController {
|
||||
|
||||
@Autowired
|
||||
private LoginService loginService;
|
||||
|
||||
@RequestMapping("/hello")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:page')")
|
||||
public String hello(){
|
||||
log.info("hello");
|
||||
return "hello";
|
||||
}
|
||||
|
||||
@PostMapping("/login")
|
||||
@ApiOperation(value = "登录")
|
||||
public ResponseResult login(HttpServletRequest request, @RequestBody LoginParam loginParam) {
|
||||
return loginService.login(request,loginParam);
|
||||
}
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysDeptDTO;
|
||||
import com.cnbm.admin.service.SysDeptService;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:40 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sys/dept")
|
||||
@Api(tags="部门管理")
|
||||
public class SysDeptController {
|
||||
@Autowired
|
||||
private SysDeptService sysDeptService;
|
||||
|
||||
@GetMapping("list")
|
||||
@ApiOperation("列表")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dept:list')")
|
||||
public Result<List<SysDeptDTO>> list(){
|
||||
List<SysDeptDTO> list = sysDeptService.list(new HashMap<>(1));
|
||||
|
||||
return new Result<List<SysDeptDTO>>().ok(list);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dept:info')")
|
||||
public Result<SysDeptDTO> get(@PathVariable("id") Long id){
|
||||
SysDeptDTO data = sysDeptService.get(id);
|
||||
|
||||
return new Result<SysDeptDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dept:save')")
|
||||
public Result save(@RequestBody SysDeptDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
|
||||
|
||||
sysDeptService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dept:update')")
|
||||
public Result update(@RequestBody SysDeptDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
|
||||
|
||||
sysDeptService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping("{id}")
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dept:delete')")
|
||||
public Result delete(@PathVariable("id") Long id){
|
||||
//效验数据
|
||||
AssertUtils.isNull(id, "id");
|
||||
|
||||
sysDeptService.delete(id);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysDictDataDTO;
|
||||
import com.cnbm.admin.service.SysDictDataService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:55 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("sys/dict/data")
|
||||
@Api(tags="字典数据")
|
||||
public class SysDictDataController {
|
||||
@Autowired
|
||||
private SysDictDataService sysDictDataService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("字典数据")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = "dictLabel", value = "字典标签", paramType = "query", dataType="String"),
|
||||
@ApiImplicitParam(name = "dictValue", value = "字典值", paramType = "query", dataType="String")
|
||||
})
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dept:page')")
|
||||
public Result<PageData<SysDictDataDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
//字典类型
|
||||
PageData<SysDictDataDTO> page = sysDictDataService.page(params);
|
||||
|
||||
return new Result<PageData<SysDictDataDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:info')")
|
||||
public Result<SysDictDataDTO> get(@PathVariable("id") Long id){
|
||||
SysDictDataDTO data = sysDictDataService.get(id);
|
||||
|
||||
return new Result<SysDictDataDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:save')")
|
||||
public Result save(@RequestBody SysDictDataDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
|
||||
|
||||
sysDictDataService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:update')")
|
||||
public Result update(@RequestBody SysDictDataDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
|
||||
|
||||
sysDictDataService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:delete')")
|
||||
public Result delete(@RequestBody Long[] ids){
|
||||
//效验数据
|
||||
AssertUtils.isArrayEmpty(ids, "id");
|
||||
|
||||
sysDictDataService.delete(ids);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysDictTypeDTO;
|
||||
import com.cnbm.admin.entity.DictType;
|
||||
import com.cnbm.admin.service.SysDictTypeService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:55 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("sys/dict/type")
|
||||
@Api(tags="字典类型")
|
||||
public class SysDictTypeController {
|
||||
@Autowired
|
||||
private SysDictTypeService sysDictTypeService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("字典类型")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = "dictType", value = "字典类型", paramType = "query", dataType="String"),
|
||||
@ApiImplicitParam(name = "dictName", value = "字典名称", paramType = "query", dataType="String")
|
||||
})
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:page')")
|
||||
public Result<PageData<SysDictTypeDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
//字典类型
|
||||
PageData<SysDictTypeDTO> page = sysDictTypeService.page(params);
|
||||
|
||||
return new Result<PageData<SysDictTypeDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:info')")
|
||||
public Result<SysDictTypeDTO> get(@PathVariable("id") Long id){
|
||||
SysDictTypeDTO data = sysDictTypeService.get(id);
|
||||
|
||||
return new Result<SysDictTypeDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:save')")
|
||||
public Result save(@RequestBody SysDictTypeDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
|
||||
|
||||
sysDictTypeService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:update')")
|
||||
public Result update(@RequestBody SysDictTypeDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
|
||||
|
||||
sysDictTypeService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:dict:delete')")
|
||||
public Result delete(@RequestBody Long[] ids){
|
||||
//效验数据
|
||||
AssertUtils.isArrayEmpty(ids, "id");
|
||||
|
||||
sysDictTypeService.delete(ids);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@GetMapping("all")
|
||||
@ApiOperation("所有字典数据")
|
||||
public Result<List<DictType>> all(){
|
||||
List<DictType> list = sysDictTypeService.getAllList();
|
||||
|
||||
return new Result<List<DictType>>().ok(list);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysLogErrorDTO;
|
||||
import com.cnbm.admin.execl.SysLogErrorExcel;
|
||||
import com.cnbm.admin.service.SysLogErrorService;
|
||||
import com.cnbm.common.utils.ExcelUtils;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
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.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:06 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("sys/log/error")
|
||||
@Api(tags="异常日志")
|
||||
public class SysLogErrorController {
|
||||
@Autowired
|
||||
private SysLogErrorService sysLogErrorService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("分页")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String")
|
||||
})
|
||||
public Result<PageData<SysLogErrorDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
PageData<SysLogErrorDTO> page = sysLogErrorService.page(params);
|
||||
|
||||
return new Result<PageData<SysLogErrorDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("export")
|
||||
@ApiOperation("导出")
|
||||
@LogOperation("导出")
|
||||
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
|
||||
List<SysLogErrorDTO> list = sysLogErrorService.list(params);
|
||||
|
||||
ExcelUtils.exportExcelToTarget(response, null, list, SysLogErrorExcel.class);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysLogOperationDTO;
|
||||
import com.cnbm.admin.execl.SysLogOperationExcel;
|
||||
import com.cnbm.admin.service.SysLogOperationService;
|
||||
import com.cnbm.common.utils.ExcelUtils;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
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.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:51 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("sys/log/operation")
|
||||
@Api(tags="操作日志")
|
||||
public class SysLogOperationController {
|
||||
@Autowired
|
||||
private SysLogOperationService sysLogOperationService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("分页")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = "status", value = "状态 0:失败 1:成功", paramType = "query", dataType="int")
|
||||
})
|
||||
public Result<PageData<SysLogOperationDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
PageData<SysLogOperationDTO> page = sysLogOperationService.page(params);
|
||||
|
||||
return new Result<PageData<SysLogOperationDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("export")
|
||||
@ApiOperation("导出")
|
||||
@LogOperation("导出")
|
||||
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
|
||||
List<SysLogOperationDTO> list = sysLogOperationService.list(params);
|
||||
|
||||
ExcelUtils.exportExcelToTarget(response, null, list, SysLogOperationExcel.class);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,136 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysMenuDTO;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.enums.MenuTypeEnum;
|
||||
import com.cnbm.admin.service.SysMenuService;
|
||||
import com.cnbm.common.exception.ErrorCode;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:32 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sys/menu")
|
||||
@Api(tags="菜单管理")
|
||||
public class SysMenuController {
|
||||
@Autowired
|
||||
private SysMenuService sysMenuService;
|
||||
|
||||
|
||||
@GetMapping("nav")
|
||||
@ApiOperation("导航")
|
||||
public Result<List<SysMenuDTO>> nav(){
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
List<SysMenuDTO> list = sysMenuService.getUserMenuList(user, MenuTypeEnum.MENU.value());
|
||||
|
||||
return new Result<List<SysMenuDTO>>().ok(list);
|
||||
}
|
||||
|
||||
@GetMapping("permissions")
|
||||
@ApiOperation("权限标识")
|
||||
public Result<Set<String>> permissions(){
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
Set<String> set = sysMenuService.getUserPermissions(user);
|
||||
return new Result<Set<String>>().ok(set);
|
||||
}
|
||||
|
||||
@GetMapping("list")
|
||||
@ApiOperation("列表")
|
||||
@ApiImplicitParam(name = "type", value = "菜单类型 0:菜单 1:按钮 null:全部", paramType = "query", dataType="int")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:menu:list')")
|
||||
public Result<List<SysMenuDTO>> list(Integer type){
|
||||
List<SysMenuDTO> list = sysMenuService.getAllMenuList(type);
|
||||
|
||||
return new Result<List<SysMenuDTO>>().ok(list);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:menu:info')")
|
||||
public Result<SysMenuDTO> get(@PathVariable("id") Long id){
|
||||
SysMenuDTO data = sysMenuService.get(id);
|
||||
|
||||
return new Result<SysMenuDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:menu:save')")
|
||||
public Result save(@RequestBody SysMenuDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
|
||||
|
||||
sysMenuService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:menu:update')")
|
||||
public Result update(@RequestBody SysMenuDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, DefaultGroup.class);
|
||||
|
||||
sysMenuService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping("{id}")
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:menu:delete')")
|
||||
public Result delete(@PathVariable("id") Long id){
|
||||
//效验数据
|
||||
AssertUtils.isNull(id, "id");
|
||||
|
||||
//判断是否有子菜单或按钮
|
||||
List<SysMenuDTO> list = sysMenuService.getListPid(id);
|
||||
if(list.size() > 0){
|
||||
return new Result().error(ErrorCode.SUB_MENU_EXIST);
|
||||
}
|
||||
|
||||
sysMenuService.delete(id);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@GetMapping("select")
|
||||
@ApiOperation("角色菜单权限")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:menu:select')")
|
||||
public Result<List<SysMenuDTO>> select(){
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
List<SysMenuDTO> list = sysMenuService.getUserMenuList(user, null);
|
||||
|
||||
return new Result<List<SysMenuDTO>>().ok(list);
|
||||
}
|
||||
}
|
@ -0,0 +1,116 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysParamsDTO;
|
||||
import com.cnbm.admin.execl.SysParamsExcel;
|
||||
import com.cnbm.admin.service.SysParamsService;
|
||||
import com.cnbm.common.utils.ExcelUtils;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:20 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("sys/params")
|
||||
@Api(tags="参数管理")
|
||||
public class SysParamsController {
|
||||
@Autowired
|
||||
private SysParamsService sysParamsService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("分页")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = "paramCode", value = "参数编码", paramType = "query", dataType="String")
|
||||
})
|
||||
@PreAuthorize("@ex.hasAuthority('sys:params:page')")
|
||||
public Result<PageData<SysParamsDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
PageData<SysParamsDTO> page = sysParamsService.page(params);
|
||||
|
||||
return new Result<PageData<SysParamsDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:params:info')")
|
||||
public Result<SysParamsDTO> get(@PathVariable("id") Long id){
|
||||
SysParamsDTO data = sysParamsService.get(id);
|
||||
|
||||
return new Result<SysParamsDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:params:save')")
|
||||
public Result save(@RequestBody SysParamsDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
|
||||
|
||||
sysParamsService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:params:update')")
|
||||
public Result update(@RequestBody SysParamsDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
|
||||
|
||||
sysParamsService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:params:delete')")
|
||||
public Result delete(@RequestBody Long[] ids){
|
||||
//效验数据
|
||||
AssertUtils.isArrayEmpty(ids, "id");
|
||||
|
||||
sysParamsService.delete(ids);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@GetMapping("export")
|
||||
@ApiOperation("导出")
|
||||
@LogOperation("导出")
|
||||
@ApiImplicitParam(name = "paramCode", value = "参数编码", paramType = "query", dataType="String")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:params:export')")
|
||||
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
|
||||
List<SysParamsDTO> list = sysParamsService.list(params);
|
||||
|
||||
ExcelUtils.exportExcelToTarget(response, null, list, SysParamsExcel.class);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.SysRoleDTO;
|
||||
import com.cnbm.admin.service.SysRoleDataScopeService;
|
||||
import com.cnbm.admin.service.SysRoleMenuService;
|
||||
import com.cnbm.admin.service.SysRoleService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:04 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sys/role")
|
||||
@Api(tags="角色管理")
|
||||
public class SysRoleController {
|
||||
@Autowired
|
||||
private SysRoleService sysRoleService;
|
||||
@Autowired
|
||||
private SysRoleMenuService sysRoleMenuService;
|
||||
@Autowired
|
||||
private SysRoleDataScopeService sysRoleDataScopeService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("分页")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = "name", value = "角色名", paramType = "query", dataType="String")
|
||||
})
|
||||
@PreAuthorize("@ex.hasAuthority('sys:role:page')")
|
||||
public Result<PageData<SysRoleDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
PageData<SysRoleDTO> page = sysRoleService.page(params);
|
||||
|
||||
return new Result<PageData<SysRoleDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("list")
|
||||
@ApiOperation("列表")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:role:list')")
|
||||
public Result<List<SysRoleDTO>> list(){
|
||||
List<SysRoleDTO> data = sysRoleService.list(new HashMap<>(1));
|
||||
|
||||
return new Result<List<SysRoleDTO>>().ok(data);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:role:info')")
|
||||
public Result<SysRoleDTO> get(@PathVariable("id") Long id){
|
||||
SysRoleDTO data = sysRoleService.get(id);
|
||||
|
||||
//查询角色对应的菜单
|
||||
List<Long> menuIdList = sysRoleMenuService.getMenuIdList(id);
|
||||
data.setMenuIdList(menuIdList);
|
||||
|
||||
//查询角色对应的数据权限
|
||||
List<Long> deptIdList = sysRoleDataScopeService.getDeptIdList(id);
|
||||
data.setDeptIdList(deptIdList);
|
||||
|
||||
return new Result<SysRoleDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:role:save')")
|
||||
public Result save(@RequestBody SysRoleDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
|
||||
|
||||
sysRoleService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:role:update')")
|
||||
public Result update(@RequestBody SysRoleDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
|
||||
|
||||
sysRoleService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:role:delete')")
|
||||
public Result delete(@RequestBody Long[] ids){
|
||||
//效验数据
|
||||
AssertUtils.isArrayEmpty(ids, "id");
|
||||
|
||||
sysRoleService.delete(ids);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
}
|
@ -0,0 +1,163 @@
|
||||
package com.cnbm.admin.controller;
|
||||
|
||||
import com.cnbm.admin.annotation.LogOperation;
|
||||
import com.cnbm.admin.dto.PasswordDTO;
|
||||
import com.cnbm.admin.dto.SysUserDTO;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.execl.SysUserExcel;
|
||||
import com.cnbm.admin.service.SysRoleUserService;
|
||||
import com.cnbm.admin.service.SysUserService;
|
||||
import com.cnbm.common.utils.ExcelUtils;
|
||||
import com.cnbm.admin.utils.PasswordUtils;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.exception.ErrorCode;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import com.cnbm.common.validator.AssertUtils;
|
||||
import com.cnbm.common.validator.ValidatorUtils;
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiImplicitParam;
|
||||
import io.swagger.annotations.ApiImplicitParams;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:23 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/sys/user")
|
||||
@Api(tags="用户管理")
|
||||
public class SysUserController {
|
||||
@Autowired
|
||||
private SysUserService sysUserService;
|
||||
@Autowired
|
||||
private SysRoleUserService sysRoleUserService;
|
||||
|
||||
@GetMapping("page")
|
||||
@ApiOperation("分页")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = Constant.PAGE, value = "当前页码,从1开始", paramType = "query", required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.LIMIT, value = "每页显示记录数", paramType = "query",required = true, dataType="int") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER_FIELD, value = "排序字段", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = Constant.ORDER, value = "排序方式,可选值(asc、desc)", paramType = "query", dataType="String") ,
|
||||
@ApiImplicitParam(name = "username", value = "用户名", paramType = "query", dataType="String"),
|
||||
@ApiImplicitParam(name = "gender", value = "性别", paramType = "query", dataType="String"),
|
||||
@ApiImplicitParam(name = "deptId", value = "部门ID", paramType = "query", dataType="String")
|
||||
})
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:page')")
|
||||
public Result<PageData<SysUserDTO>> page(@ApiIgnore @RequestParam Map<String, Object> params){
|
||||
PageData<SysUserDTO> page = sysUserService.page(params);
|
||||
|
||||
return new Result<PageData<SysUserDTO>>().ok(page);
|
||||
}
|
||||
|
||||
@GetMapping("{id}")
|
||||
@ApiOperation("信息")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:info')")
|
||||
public Result<SysUserDTO> get(@PathVariable("id") Long id){
|
||||
SysUserDTO data = sysUserService.get(id);
|
||||
|
||||
//用户角色列表
|
||||
List<Long> roleIdList = sysRoleUserService.getRoleIdList(id);
|
||||
data.setRoleIdList(roleIdList);
|
||||
|
||||
return new Result<SysUserDTO>().ok(data);
|
||||
}
|
||||
|
||||
@GetMapping("info")
|
||||
@ApiOperation("登录用户信息")
|
||||
public Result<SysUserDTO> info(){
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserDTO data = ConvertUtils.sourceToTarget(loginUser.getSysUserEntity(), SysUserDTO.class);
|
||||
return new Result<SysUserDTO>().ok(data);
|
||||
}
|
||||
|
||||
@PutMapping("password")
|
||||
@ApiOperation("修改密码")
|
||||
@LogOperation("修改密码")
|
||||
public Result password(@RequestBody PasswordDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto);
|
||||
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
|
||||
//原密码不正确
|
||||
if(!PasswordUtils.matches(dto.getPassword(), user.getPassword())){
|
||||
return new Result().error(ErrorCode.PASSWORD_ERROR);
|
||||
}
|
||||
|
||||
sysUserService.updatePassword(user.getId(), dto.getNewPassword());
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
@ApiOperation("保存")
|
||||
@LogOperation("保存")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:save')")
|
||||
public Result save(@RequestBody SysUserDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class);
|
||||
|
||||
sysUserService.save(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@PutMapping
|
||||
@ApiOperation("修改")
|
||||
@LogOperation("修改")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:update')")
|
||||
public Result update(@RequestBody SysUserDTO dto){
|
||||
//效验数据
|
||||
ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class);
|
||||
|
||||
sysUserService.update(dto);
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@DeleteMapping
|
||||
@ApiOperation("删除")
|
||||
@LogOperation("删除")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:delete')")
|
||||
public Result delete(@RequestBody Long[] ids){
|
||||
//效验数据
|
||||
AssertUtils.isArrayEmpty(ids, "id");
|
||||
|
||||
sysUserService.deleteBatchIds(Arrays.asList(ids));
|
||||
|
||||
return new Result();
|
||||
}
|
||||
|
||||
@GetMapping("export")
|
||||
@ApiOperation("导出")
|
||||
@LogOperation("导出")
|
||||
@ApiImplicitParam(name = "username", value = "用户名", paramType = "query", dataType="String")
|
||||
@PreAuthorize("@ex.hasAuthority('sys:user:export')")
|
||||
public void export(@ApiIgnore @RequestParam Map<String, Object> params, HttpServletResponse response) throws Exception {
|
||||
List<SysUserDTO> list = sysUserService.list(params);
|
||||
|
||||
ExcelUtils.exportExcelToTarget(response, null, list, SysUserExcel.class);
|
||||
}
|
||||
}
|
14
ym-admin/src/main/java/com/cnbm/admin/dao/LoginDao.java
Normal file
14
ym-admin/src/main/java/com/cnbm/admin/dao/LoginDao.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 9:20 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface LoginDao extends BaseMapper<SysUserEntity> {
|
||||
}
|
33
ym-admin/src/main/java/com/cnbm/admin/dao/SysDeptDao.java
Normal file
33
ym-admin/src/main/java/com/cnbm/admin/dao/SysDeptDao.java
Normal file
@ -0,0 +1,33 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysDeptEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:40 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysDeptDao extends BaseDao<SysDeptEntity> {
|
||||
|
||||
List<SysDeptEntity> getList(Map<String, Object> params);
|
||||
|
||||
SysDeptEntity getById(Long id);
|
||||
|
||||
/**
|
||||
* 获取所有部门的id、pid列表
|
||||
*/
|
||||
List<SysDeptEntity> getIdAndPidList();
|
||||
|
||||
/**
|
||||
* 根据部门ID,获取所有子部门ID列表
|
||||
* @param id 部门ID
|
||||
*/
|
||||
List<Long> getSubDeptIdList(String id);
|
||||
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.DictData;
|
||||
import com.cnbm.admin.entity.SysDictDataEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:56 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysDictDataDao extends BaseDao<SysDictDataEntity> {
|
||||
|
||||
/**
|
||||
* 字典数据列表
|
||||
*/
|
||||
List<DictData> getDictDataList();
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.DictType;
|
||||
import com.cnbm.admin.entity.SysDictTypeEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:56 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysDictTypeDao extends BaseDao<SysDictTypeEntity> {
|
||||
|
||||
/**
|
||||
* 字典类型列表
|
||||
*/
|
||||
List<DictType> getDictTypeList();
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysLogErrorEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:07 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysLogErrorDao extends BaseDao<SysLogErrorEntity> {
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysLogOperationEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:54 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysLogOperationDao extends BaseDao<SysLogOperationEntity> {
|
||||
|
||||
}
|
52
ym-admin/src/main/java/com/cnbm/admin/dao/SysMenuDao.java
Normal file
52
ym-admin/src/main/java/com/cnbm/admin/dao/SysMenuDao.java
Normal file
@ -0,0 +1,52 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysMenuEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:33 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysMenuDao extends BaseDao<SysMenuEntity> {
|
||||
|
||||
SysMenuEntity getById(@Param("id") Long id);
|
||||
|
||||
/**
|
||||
* 查询所有菜单列表
|
||||
*
|
||||
* @param type 菜单类型
|
||||
*/
|
||||
List<SysMenuEntity> getMenuList(@Param("type") Integer type);
|
||||
|
||||
/**
|
||||
* 查询用户菜单列表
|
||||
*
|
||||
* @param userId 用户ID
|
||||
* @param type 菜单类型
|
||||
*/
|
||||
List<SysMenuEntity> getUserMenuList(@Param("userId") Long userId, @Param("type") Integer type);
|
||||
|
||||
/**
|
||||
* 查询用户权限列表
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
List<String> getUserPermissionsList(Long userId);
|
||||
|
||||
/**
|
||||
* 查询所有权限列表
|
||||
*/
|
||||
List<String> getPermissionsList();
|
||||
|
||||
/**
|
||||
* 根据父菜单,查询子菜单
|
||||
* @param pid 父菜单ID
|
||||
*/
|
||||
List<SysMenuEntity> getListPid(Long pid);
|
||||
|
||||
}
|
37
ym-admin/src/main/java/com/cnbm/admin/dao/SysParamsDao.java
Normal file
37
ym-admin/src/main/java/com/cnbm/admin/dao/SysParamsDao.java
Normal file
@ -0,0 +1,37 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysParamsEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:21 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysParamsDao extends BaseDao<SysParamsEntity> {
|
||||
/**
|
||||
* 根据参数编码,查询value
|
||||
* @param paramCode 参数编码
|
||||
* @return 参数值
|
||||
*/
|
||||
String getValueByCode(String paramCode);
|
||||
|
||||
/**
|
||||
* 获取参数编码列表
|
||||
* @param ids ids
|
||||
* @return 返回参数编码列表
|
||||
*/
|
||||
List<String> getParamCodeList(Long[] ids);
|
||||
|
||||
/**
|
||||
* 根据参数编码,更新value
|
||||
* @param paramCode 参数编码
|
||||
* @param paramValue 参数值
|
||||
*/
|
||||
int updateValueByCode(@Param("paramCode") String paramCode, @Param("paramValue") String paramValue);
|
||||
}
|
16
ym-admin/src/main/java/com/cnbm/admin/dao/SysRoleDao.java
Normal file
16
ym-admin/src/main/java/com/cnbm/admin/dao/SysRoleDao.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:05 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleDao extends BaseDao<SysRoleEntity> {
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleDataScopeEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:15 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleDataScopeDao extends BaseDao<SysRoleDataScopeEntity> {
|
||||
|
||||
/**
|
||||
* 根据角色ID,获取部门ID列表
|
||||
*/
|
||||
List<Long> getDeptIdList(Long roleId);
|
||||
|
||||
/**
|
||||
* 获取用户的部门数据权限列表
|
||||
*/
|
||||
List<Long> getDataScopeList(Long userId);
|
||||
|
||||
/**
|
||||
* 根据角色id,删除角色数据权限关系
|
||||
* @param roleIds 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(Long[] roleIds);
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleMenuEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:15 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleMenuDao extends BaseDao<SysRoleMenuEntity> {
|
||||
|
||||
/**
|
||||
* 根据角色ID,获取菜单ID列表
|
||||
*/
|
||||
List<Long> getMenuIdList(Long roleId);
|
||||
|
||||
/**
|
||||
* 根据角色id,删除角色菜单关系
|
||||
* @param roleIds 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(Long[] roleIds);
|
||||
|
||||
/**
|
||||
* 根据菜单id,删除角色菜单关系
|
||||
* @param menuId 菜单id
|
||||
*/
|
||||
void deleteByMenuId(Long menuId);
|
||||
}
|
||||
|
@ -0,0 +1,36 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleUserEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:35 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysRoleUserDao extends BaseDao<SysRoleUserEntity> {
|
||||
|
||||
/**
|
||||
* 根据角色ids,删除角色用户关系
|
||||
* @param roleIds 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(Long[] roleIds);
|
||||
|
||||
/**
|
||||
* 根据用户id,删除角色用户关系
|
||||
* @param userIds 用户ids
|
||||
*/
|
||||
void deleteByUserIds(Long[] userIds);
|
||||
|
||||
/**
|
||||
* 角色ID列表
|
||||
* @param userId 用户ID
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
List<Long> getRoleIdList(Long userId);
|
||||
}
|
36
ym-admin/src/main/java/com/cnbm/admin/dao/SysUserDao.java
Normal file
36
ym-admin/src/main/java/com/cnbm/admin/dao/SysUserDao.java
Normal file
@ -0,0 +1,36 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.common.dao.BaseDao;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:27 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface SysUserDao extends BaseDao<SysUserEntity> {
|
||||
|
||||
List<SysUserEntity> getList(Map<String, Object> params);
|
||||
|
||||
SysUserEntity getById(Long id);
|
||||
|
||||
SysUserEntity getByUsername(String username);
|
||||
|
||||
int updatePassword(@Param("id") Long id, @Param("newPassword") String newPassword);
|
||||
|
||||
/**
|
||||
* 根据部门ID,查询用户数
|
||||
*/
|
||||
int getCountByDeptId(Long deptId);
|
||||
|
||||
/**
|
||||
* 根据部门ID,查询用户ID列表
|
||||
*/
|
||||
List<Long> getUserIdListByDeptId(List<Long> deptIdList);
|
||||
}
|
14
ym-admin/src/main/java/com/cnbm/admin/dao/UserDao.java
Normal file
14
ym-admin/src/main/java/com/cnbm/admin/dao/UserDao.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.cnbm.admin.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/9 8:57 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Mapper
|
||||
public interface UserDao extends BaseMapper<SysUserEntity> {
|
||||
}
|
28
ym-admin/src/main/java/com/cnbm/admin/dto/PasswordDTO.java
Normal file
28
ym-admin/src/main/java/com/cnbm/admin/dto/PasswordDTO.java
Normal file
@ -0,0 +1,28 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:59 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "修改密码")
|
||||
public class PasswordDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "原密码")
|
||||
@NotBlank(message="{sysuser.password.require}")
|
||||
private String password;
|
||||
|
||||
@ApiModelProperty(value = "新密码")
|
||||
@NotBlank(message="{sysuser.password.require}")
|
||||
private String newPassword;
|
||||
|
||||
}
|
102
ym-admin/src/main/java/com/cnbm/admin/dto/SysDeptDTO.java
Normal file
102
ym-admin/src/main/java/com/cnbm/admin/dto/SysDeptDTO.java
Normal file
@ -0,0 +1,102 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.utils.TreeNode;
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:39 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@ApiModel(value = "部门管理")
|
||||
public class SysDeptDTO extends TreeNode implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "上级ID")
|
||||
@NotNull(message="{sysdept.pid.require}", groups = DefaultGroup.class)
|
||||
private Long pid;
|
||||
|
||||
@ApiModelProperty(value = "部门名称")
|
||||
@NotBlank(message="{sysdept.name.require}", groups = DefaultGroup.class)
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
@Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class)
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "上级部门名称")
|
||||
private String parentName;
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getPid() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPid(Long pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public Integer getSort() {
|
||||
return sort;
|
||||
}
|
||||
|
||||
public void setSort(Integer sort) {
|
||||
this.sort = sort;
|
||||
}
|
||||
|
||||
public Date getCreateDate() {
|
||||
return createDate;
|
||||
}
|
||||
|
||||
public void setCreateDate(Date createDate) {
|
||||
this.createDate = createDate;
|
||||
}
|
||||
|
||||
public String getParentName() {
|
||||
return parentName;
|
||||
}
|
||||
|
||||
public void setParentName(String parentName) {
|
||||
this.parentName = parentName;
|
||||
}
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:57 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "字典数据")
|
||||
public class SysDictDataDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "字典类型ID")
|
||||
@NotNull(message="{sysdict.type.require}", groups = DefaultGroup.class)
|
||||
private Long dictTypeId;
|
||||
|
||||
@ApiModelProperty(value = "字典标签")
|
||||
@NotBlank(message="{sysdict.label.require}", groups = DefaultGroup.class)
|
||||
private String dictLabel;
|
||||
|
||||
@ApiModelProperty(value = "字典值")
|
||||
private String dictValue;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
@Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class)
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date updateDate;
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:57 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "字典类型")
|
||||
public class SysDictTypeDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "字典类型")
|
||||
@NotBlank(message="{sysdict.type.require}", groups = DefaultGroup.class)
|
||||
private String dictType;
|
||||
|
||||
@ApiModelProperty(value = "字典名称")
|
||||
@NotBlank(message="{sysdict.name.require}", groups = DefaultGroup.class)
|
||||
private String dictName;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
@Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class)
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date updateDate;
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:07 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "异常日志")
|
||||
public class SysLogErrorDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
private Long id;
|
||||
@ApiModelProperty(value = "请求URI")
|
||||
private String requestUri;
|
||||
@ApiModelProperty(value = "请求方式")
|
||||
private String requestMethod;
|
||||
@ApiModelProperty(value = "请求参数")
|
||||
private String requestParams;
|
||||
@ApiModelProperty(value = "用户代理")
|
||||
private String userAgent;
|
||||
@ApiModelProperty(value = "操作IP")
|
||||
private String ip;
|
||||
@ApiModelProperty(value = "异常信息")
|
||||
private String errorInfo;
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createDate;
|
||||
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:53 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "操作日志")
|
||||
public class SysLogOperationDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "用户操作")
|
||||
private String operation;
|
||||
|
||||
@ApiModelProperty(value = "请求URI")
|
||||
private String requestUri;
|
||||
|
||||
@ApiModelProperty(value = "请求方式")
|
||||
private String requestMethod;
|
||||
|
||||
@ApiModelProperty(value = "请求参数")
|
||||
private String requestParams;
|
||||
|
||||
@ApiModelProperty(value = "请求时长(毫秒)")
|
||||
private Integer requestTime;
|
||||
|
||||
@ApiModelProperty(value = "用户代理")
|
||||
private String userAgent;
|
||||
|
||||
@ApiModelProperty(value = "操作IP")
|
||||
private String ip;
|
||||
|
||||
@ApiModelProperty(value = "状态 0:失败 1:成功")
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "用户名")
|
||||
private String creatorName;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
private Date createDate;
|
||||
|
||||
}
|
148
ym-admin/src/main/java/com/cnbm/admin/dto/SysMenuDTO.java
Normal file
148
ym-admin/src/main/java/com/cnbm/admin/dto/SysMenuDTO.java
Normal file
@ -0,0 +1,148 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.utils.TreeNode;
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import org.hibernate.validator.constraints.Range;
|
||||
|
||||
import javax.validation.constraints.Min;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:33 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@ApiModel(value = "菜单管理")
|
||||
public class SysMenuDTO extends TreeNode<SysMenuDTO> implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "上级ID")
|
||||
@NotNull(message="{sysmenu.pid.require}", groups = DefaultGroup.class)
|
||||
private Long pid;
|
||||
|
||||
@ApiModelProperty(value = "菜单名称")
|
||||
@NotBlank(message="{sysmenu.name.require}", groups = DefaultGroup.class)
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "菜单URL")
|
||||
private String url;
|
||||
|
||||
@ApiModelProperty(value = "类型 0:菜单 1:按钮")
|
||||
@Range(min=0, max=1, message = "{sysmenu.type.range}", groups = DefaultGroup.class)
|
||||
private Integer type;
|
||||
|
||||
@ApiModelProperty(value = "菜单图标")
|
||||
private String icon;
|
||||
|
||||
@ApiModelProperty(value = "授权(多个用逗号分隔,如:sys:user:list,sys:user:save)")
|
||||
private String permissions;
|
||||
|
||||
@ApiModelProperty(value = "排序")
|
||||
@Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class)
|
||||
private Integer sort;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "上级菜单名称")
|
||||
private String parentName;
|
||||
|
||||
@Override
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getPid() {
|
||||
return pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPid(Long pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return url;
|
||||
}
|
||||
|
||||
public void setUrl(String url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public Integer getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(Integer type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public String getIcon() {
|
||||
return icon;
|
||||
}
|
||||
|
||||
public void setIcon(String icon) {
|
||||
this.icon = icon;
|
||||
}
|
||||
|
||||
public String getPermissions() {
|
||||
return permissions;
|
||||
}
|
||||
|
||||
public void setPermissions(String permissions) {
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
public Integer getSort() {
|
||||
return sort;
|
||||
}
|
||||
|
||||
public void setSort(Integer sort) {
|
||||
this.sort = sort;
|
||||
}
|
||||
|
||||
public Date getCreateDate() {
|
||||
return createDate;
|
||||
}
|
||||
|
||||
public void setCreateDate(Date createDate) {
|
||||
this.createDate = createDate;
|
||||
}
|
||||
|
||||
public String getParentName() {
|
||||
return parentName;
|
||||
}
|
||||
|
||||
public void setParentName(String parentName) {
|
||||
this.parentName = parentName;
|
||||
}
|
||||
}
|
51
ym-admin/src/main/java/com/cnbm/admin/dto/SysParamsDTO.java
Normal file
51
ym-admin/src/main/java/com/cnbm/admin/dto/SysParamsDTO.java
Normal file
@ -0,0 +1,51 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:21 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "参数管理")
|
||||
public class SysParamsDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "参数编码")
|
||||
@NotBlank(message="{sysparams.paramcode.require}", groups = DefaultGroup.class)
|
||||
private String paramCode;
|
||||
|
||||
@ApiModelProperty(value = "参数值")
|
||||
@NotBlank(message="{sysparams.paramvalue.require}", groups = DefaultGroup.class)
|
||||
private String paramValue;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "更新时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date updateDate;
|
||||
|
||||
}
|
50
ym-admin/src/main/java/com/cnbm/admin/dto/SysRoleDTO.java
Normal file
50
ym-admin/src/main/java/com/cnbm/admin/dto/SysRoleDTO.java
Normal file
@ -0,0 +1,50 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:06 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "角色管理")
|
||||
public class SysRoleDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "角色名称")
|
||||
@NotBlank(message="{sysrole.name.require}", groups = DefaultGroup.class)
|
||||
private String name;
|
||||
|
||||
@ApiModelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "菜单ID列表")
|
||||
private List<Long> menuIdList;
|
||||
|
||||
@ApiModelProperty(value = "部门ID列表")
|
||||
private List<Long> deptIdList;
|
||||
|
||||
}
|
84
ym-admin/src/main/java/com/cnbm/admin/dto/SysUserDTO.java
Normal file
84
ym-admin/src/main/java/com/cnbm/admin/dto/SysUserDTO.java
Normal file
@ -0,0 +1,84 @@
|
||||
package com.cnbm.admin.dto;
|
||||
|
||||
import com.cnbm.common.validator.group.AddGroup;
|
||||
import com.cnbm.common.validator.group.DefaultGroup;
|
||||
import com.cnbm.common.validator.group.UpdateGroup;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
import org.hibernate.validator.constraints.Range;
|
||||
|
||||
import javax.validation.constraints.Email;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Null;
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:26 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "用户管理")
|
||||
public class SysUserDTO implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "id")
|
||||
@Null(message="{id.null}", groups = AddGroup.class)
|
||||
@NotNull(message="{id.require}", groups = UpdateGroup.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotBlank(message="{sysuser.username.require}", groups = DefaultGroup.class)
|
||||
private String username;
|
||||
|
||||
@ApiModelProperty(value = "密码")
|
||||
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
||||
@NotBlank(message="{sysuser.password.require}", groups = AddGroup.class)
|
||||
private String password;
|
||||
|
||||
@ApiModelProperty(value = "姓名", required = true)
|
||||
@NotBlank(message="{sysuser.realname.require}", groups = DefaultGroup.class)
|
||||
private String realName;
|
||||
|
||||
@ApiModelProperty(value = "头像")
|
||||
private String headUrl;
|
||||
|
||||
@ApiModelProperty(value = "性别 0:男 1:女 2:保密", required = true)
|
||||
@Range(min=0, max=2, message = "{sysuser.gender.range}", groups = DefaultGroup.class)
|
||||
private Integer gender;
|
||||
|
||||
@ApiModelProperty(value = "邮箱")
|
||||
@Email(message="{sysuser.email.error}", groups = DefaultGroup.class)
|
||||
private String email;
|
||||
|
||||
@ApiModelProperty(value = "手机号")
|
||||
private String mobile;
|
||||
|
||||
@ApiModelProperty(value = "部门ID", required = true)
|
||||
@NotNull(message="{sysuser.deptId.require}", groups = DefaultGroup.class)
|
||||
private Long deptId;
|
||||
|
||||
@ApiModelProperty(value = "状态 0:停用 1:正常", required = true)
|
||||
@Range(min=0, max=1, message = "{sysuser.status.range}", groups = DefaultGroup.class)
|
||||
private Integer status;
|
||||
|
||||
@ApiModelProperty(value = "创建时间")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Date createDate;
|
||||
|
||||
@ApiModelProperty(value = "超级管理员 0:否 1:是")
|
||||
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
|
||||
private Integer superAdmin;
|
||||
|
||||
@ApiModelProperty(value = "角色ID列表")
|
||||
private List<Long> roleIdList;
|
||||
|
||||
@ApiModelProperty(value = "部门名称")
|
||||
private String deptName;
|
||||
|
||||
}
|
17
ym-admin/src/main/java/com/cnbm/admin/entity/DictData.java
Normal file
17
ym-admin/src/main/java/com/cnbm/admin/entity/DictData.java
Normal file
@ -0,0 +1,17 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 11:01 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class DictData {
|
||||
@JsonIgnore
|
||||
private Long dictTypeId;
|
||||
private String dictLabel;
|
||||
private String dictValue;
|
||||
}
|
20
ym-admin/src/main/java/com/cnbm/admin/entity/DictType.java
Normal file
20
ym-admin/src/main/java/com/cnbm/admin/entity/DictType.java
Normal file
@ -0,0 +1,20 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 11:00 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class DictType {
|
||||
@JsonIgnore
|
||||
private Long id;
|
||||
private String dictType;
|
||||
private List<DictData> dataList = new ArrayList<>();
|
||||
}
|
83
ym-admin/src/main/java/com/cnbm/admin/entity/LoginUser.java
Normal file
83
ym-admin/src/main/java/com/cnbm/admin/entity/LoginUser.java
Normal file
@ -0,0 +1,83 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 1:56 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class LoginUser implements UserDetails {
|
||||
|
||||
private SysUserEntity sysUserEntity;
|
||||
|
||||
private List<String> permissions;
|
||||
|
||||
public LoginUser(SysUserEntity sysUserEntity, List<String> permissions) {
|
||||
this.sysUserEntity = sysUserEntity;
|
||||
this.permissions = permissions;
|
||||
}
|
||||
|
||||
@JsonIgnore
|
||||
private List<SimpleGrantedAuthority> authorities;
|
||||
@Override
|
||||
public Collection<? extends GrantedAuthority> getAuthorities() {
|
||||
if(authorities!=null){
|
||||
return authorities;
|
||||
}
|
||||
//把permissions中String类型的权限信息封装成SimpleGrantedAuthority对象
|
||||
// authorities = new ArrayList<>();
|
||||
// for (String permission : permissions) {
|
||||
// SimpleGrantedAuthority authority = new SimpleGrantedAuthority(permission);
|
||||
// authorities.add(authority);
|
||||
// }
|
||||
authorities = permissions.stream()
|
||||
.map(SimpleGrantedAuthority::new)
|
||||
.collect(Collectors.toList());
|
||||
return authorities;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return sysUserEntity.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return sysUserEntity.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonLocked() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCredentialsNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,55 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:39 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_dept")
|
||||
public class SysDeptEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 上级ID
|
||||
*/
|
||||
private Long pid;
|
||||
/**
|
||||
* 所有上级ID,用逗号分开
|
||||
*/
|
||||
private String pids;
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
private Integer sort;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
/**
|
||||
* 上级部门名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String parentName;
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:57 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_dict_data")
|
||||
public class SysDictDataEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 字典类型ID
|
||||
*/
|
||||
private Long dictTypeId;
|
||||
/**
|
||||
* 字典标签
|
||||
*/
|
||||
private String dictLabel;
|
||||
/**
|
||||
* 字典值
|
||||
*/
|
||||
private String dictValue;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
private Integer sort;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:58 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_dict_type")
|
||||
public class SysDictTypeEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 字典类型
|
||||
*/
|
||||
private String dictType;
|
||||
/**
|
||||
* 字典名称
|
||||
*/
|
||||
private String dictName;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
private Integer sort;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:08 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_log_error")
|
||||
public class SysLogErrorEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 请求URI
|
||||
*/
|
||||
private String requestUri;
|
||||
/**
|
||||
* 请求方式
|
||||
*/
|
||||
private String requestMethod;
|
||||
/**
|
||||
* 请求参数
|
||||
*/
|
||||
private String requestParams;
|
||||
/**
|
||||
* 用户代理
|
||||
*/
|
||||
private String userAgent;
|
||||
/**
|
||||
* 操作IP
|
||||
*/
|
||||
private String ip;
|
||||
/**
|
||||
* 异常信息
|
||||
*/
|
||||
private String errorInfo;
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:49 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_log_operation")
|
||||
public class SysLogOperationEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 用户操作
|
||||
*/
|
||||
private String operation;
|
||||
/**
|
||||
* 请求URI
|
||||
*/
|
||||
private String requestUri;
|
||||
/**
|
||||
* 请求方式
|
||||
*/
|
||||
private String requestMethod;
|
||||
/**
|
||||
* 请求参数
|
||||
*/
|
||||
private String requestParams;
|
||||
/**
|
||||
* 请求时长(毫秒)
|
||||
*/
|
||||
private Integer requestTime;
|
||||
/**
|
||||
* 用户代理
|
||||
*/
|
||||
private String userAgent;
|
||||
/**
|
||||
* 操作IP
|
||||
*/
|
||||
private String ip;
|
||||
/**
|
||||
* 状态 0:失败 1:成功
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String creatorName;
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:28 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_menu")
|
||||
public class SysMenuEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 父菜单ID,一级菜单为0
|
||||
*/
|
||||
private Long pid;
|
||||
/**
|
||||
* 菜单名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 菜单URL
|
||||
*/
|
||||
private String url;
|
||||
/**
|
||||
* 授权(多个用逗号分隔,如:sys:user:list,sys:user:save)
|
||||
*/
|
||||
private String permissions;
|
||||
/**
|
||||
* 类型 0:菜单 1:按钮
|
||||
*/
|
||||
private Integer type;
|
||||
/**
|
||||
* 菜单图标
|
||||
*/
|
||||
private String icon;
|
||||
/**
|
||||
* 排序
|
||||
*/
|
||||
private Integer sort;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
/**
|
||||
* 上级菜单名称
|
||||
*/
|
||||
@TableField(exist = false)
|
||||
private String parentName;
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:22 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_params")
|
||||
public class SysParamsEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 参数编码
|
||||
*/
|
||||
private String paramCode;
|
||||
/**
|
||||
* 参数值
|
||||
*/
|
||||
private String paramValue;
|
||||
/**
|
||||
* 类型 0:系统参数 1:非系统参数
|
||||
*/
|
||||
private Integer paramType;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:14 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_role_data_scope")
|
||||
public class SysRoleDataScopeEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private Long roleId;
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:06 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_role")
|
||||
public class SysRoleEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 角色名称
|
||||
*/
|
||||
private String name;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT)
|
||||
private Long deptId;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:16 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_role_menu")
|
||||
public class SysRoleMenuEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private Long roleId;
|
||||
/**
|
||||
* 菜单ID
|
||||
*/
|
||||
private Long menuId;
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:34 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_role_user")
|
||||
public class SysRoleUserEntity extends BaseEntity {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
private Long roleId;
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,80 @@
|
||||
package com.cnbm.admin.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.cnbm.common.entity.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 9:19 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper=false)
|
||||
@TableName("sys_user")
|
||||
public class SysUserEntity extends BaseEntity implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String username;
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String password;
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String realName;
|
||||
/**
|
||||
* 头像
|
||||
*/
|
||||
private String headUrl;
|
||||
/**
|
||||
* 性别 0:男 1:女 2:保密
|
||||
*/
|
||||
private Integer gender;
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
private String mobile;
|
||||
/**
|
||||
* 部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
/**
|
||||
* 超级管理员 0:否 1:是
|
||||
*/
|
||||
private Integer superAdmin;
|
||||
/**
|
||||
* 状态 0:停用 1:正常
|
||||
*/
|
||||
private Integer status;
|
||||
/**
|
||||
* 更新者
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Long updater;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||
private Date updateDate;
|
||||
/**
|
||||
* 部门名称
|
||||
*/
|
||||
@TableField(exist=false)
|
||||
private String deptName;
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.cnbm.admin.enums;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 3:01 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public enum MenuTypeEnum {
|
||||
/**
|
||||
* 菜单
|
||||
*/
|
||||
MENU(0),
|
||||
/**
|
||||
* 按钮
|
||||
*/
|
||||
BUTTON(1);
|
||||
|
||||
private int value;
|
||||
|
||||
MenuTypeEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.cnbm.admin.enums;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 10:10 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public enum OperationStatusEnum {
|
||||
/**
|
||||
* 失败
|
||||
*/
|
||||
FAIL(0),
|
||||
/**
|
||||
* 成功
|
||||
*/
|
||||
SUCCESS(1);
|
||||
|
||||
private int value;
|
||||
|
||||
OperationStatusEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.cnbm.admin.enums;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:02 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public enum SuperAdminEnum {
|
||||
YES(1),
|
||||
NO(0);
|
||||
|
||||
private int value;
|
||||
|
||||
SuperAdminEnum(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public int value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
package com.cnbm.admin.exception;
|
||||
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import com.cnbm.admin.entity.SysLogErrorEntity;
|
||||
import com.cnbm.admin.service.SysLogErrorService;
|
||||
import com.cnbm.common.exception.ErrorCode;
|
||||
import com.cnbm.common.exception.ExceptionUtils;
|
||||
import com.cnbm.common.exception.RenException;
|
||||
import com.cnbm.common.utils.HttpContextUtils;
|
||||
import com.cnbm.common.utils.IpUtils;
|
||||
import com.cnbm.common.utils.JsonUtils;
|
||||
import com.cnbm.common.utils.Result;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:05 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
//@RestControllerAdvice
|
||||
//public class RenExceptionHandler {
|
||||
// private static final Logger logger = LoggerFactory.getLogger(RenExceptionHandler.class);
|
||||
//
|
||||
// @Autowired
|
||||
// private SysLogErrorService sysLogErrorService;
|
||||
//
|
||||
// /**
|
||||
// * 处理自定义异常
|
||||
// */
|
||||
// @ExceptionHandler(RenException.class)
|
||||
// public Result handleRenException(RenException ex){
|
||||
// Result result = new Result();
|
||||
// result.error(ex.getCode(), ex.getMsg());
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// @ExceptionHandler(DuplicateKeyException.class)
|
||||
// public Result handleDuplicateKeyException(DuplicateKeyException ex){
|
||||
// Result result = new Result();
|
||||
// result.error(ErrorCode.DB_RECORD_EXISTS);
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// @ExceptionHandler(Exception.class)
|
||||
// public Result handleException(Exception ex){
|
||||
// logger.error(ex.getMessage(), ex);
|
||||
//
|
||||
// saveLog(ex);
|
||||
//
|
||||
// return new Result().error();
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 保存异常日志
|
||||
// */
|
||||
// private void saveLog(Exception ex){
|
||||
// SysLogErrorEntity log = new SysLogErrorEntity();
|
||||
//
|
||||
// //请求相关信息
|
||||
// HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
// log.setIp(IpUtils.getIpAddr(request));
|
||||
// log.setUserAgent(request.getHeader(HttpHeaders.USER_AGENT));
|
||||
// log.setRequestUri(request.getRequestURI());
|
||||
// log.setRequestMethod(request.getMethod());
|
||||
// Map<String, String> params = HttpContextUtils.getParameterMap(request);
|
||||
// if(MapUtil.isNotEmpty(params)){
|
||||
// log.setRequestParams(JsonUtils.toJsonString(params));
|
||||
// }
|
||||
//
|
||||
// //异常信息
|
||||
// log.setErrorInfo(ExceptionUtils.getErrorStackTrace(ex));
|
||||
//
|
||||
// //保存
|
||||
// sysLogErrorService.save(log);
|
||||
// }
|
||||
//}
|
@ -0,0 +1,28 @@
|
||||
package com.cnbm.admin.execl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:14 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class SysLogErrorExcel {
|
||||
@Excel(name = "请求URI")
|
||||
private String requestUri;
|
||||
@Excel(name = "请求方式")
|
||||
private String requestMethod;
|
||||
@Excel(name = "请求参数")
|
||||
private String requestParams;
|
||||
@Excel(name = "User-Agent")
|
||||
private String userAgent;
|
||||
@Excel(name = "操作IP")
|
||||
private String ip;
|
||||
@Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createDate;
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.cnbm.admin.execl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 10:06 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class SysLogOperationExcel {
|
||||
@Excel(name = "用户操作")
|
||||
private String operation;
|
||||
@Excel(name = "请求URI")
|
||||
private String requestUri;
|
||||
@Excel(name = "请求方式")
|
||||
private String requestMethod;
|
||||
@Excel(name = "请求参数")
|
||||
private String requestParams;
|
||||
@Excel(name = "请求时长(毫秒)")
|
||||
private Integer requestTime;
|
||||
@Excel(name = "User-Agent")
|
||||
private String userAgent;
|
||||
@Excel(name = "操作IP")
|
||||
private String ip;
|
||||
@Excel(name = "状态", replace = {"失败_0", "成功_1"})
|
||||
private Integer status;
|
||||
@Excel(name = "用户名")
|
||||
private String creatorName;
|
||||
@Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createDate;
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package com.cnbm.admin.execl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:26 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class SysParamsExcel {
|
||||
@Excel(name = "参数编码")
|
||||
private String paramCode;
|
||||
@Excel(name = "参数值")
|
||||
private String paramValue;
|
||||
@Excel(name = "备注")
|
||||
private String remark;
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.cnbm.admin.execl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:25 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
public class SysUserExcel {
|
||||
@Excel(name = "用户名")
|
||||
private String username;
|
||||
@Excel(name = "姓名")
|
||||
private String realName;
|
||||
@Excel(name = "性别", replace = {"男_0", "女_1", "保密_2"})
|
||||
private Integer gender;
|
||||
@Excel(name = "邮箱")
|
||||
private String email;
|
||||
@Excel(name = "手机号")
|
||||
private String mobile;
|
||||
@Excel(name = "部门名称")
|
||||
private String deptName;
|
||||
@Excel(name = "状态", replace = {"停用_0", "正常_1"})
|
||||
private Integer status;
|
||||
@Excel(name = "备注")
|
||||
private String remark;
|
||||
@Excel(name = "创建时间", format = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date createDate;
|
||||
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package com.cnbm.admin.filter;
|
||||
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.utils.JwtUtil;
|
||||
import io.jsonwebtoken.Claims;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.filter.OncePerRequestFilter;
|
||||
|
||||
import javax.servlet.FilterChain;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 1:51 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Component
|
||||
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
@Override
|
||||
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
||||
//获取token
|
||||
// String token = request.getHeader("Authorization");
|
||||
String token = request.getHeader("token");
|
||||
if (!StringUtils.hasText(token)) {
|
||||
//放行
|
||||
filterChain.doFilter(request, response);
|
||||
return;
|
||||
}
|
||||
//解析token
|
||||
String userid;
|
||||
try {
|
||||
Claims claims = JwtUtil.parseJWT(token);
|
||||
userid = claims.getSubject();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new RuntimeException("token非法");
|
||||
}
|
||||
//从redis中获取用户信息
|
||||
String redisKey = "login:" + userid;
|
||||
LoginUser loginUser = (LoginUser) redisTemplate.opsForValue().get(redisKey);
|
||||
if(Objects.isNull(loginUser)){
|
||||
throw new RuntimeException("用户未登录");
|
||||
}
|
||||
//存入SecurityContextHolder
|
||||
//TODO 获取权限信息封装到Authentication中
|
||||
UsernamePasswordAuthenticationToken authenticationToken =
|
||||
new UsernamePasswordAuthenticationToken(loginUser,null,loginUser.getAuthorities());
|
||||
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
|
||||
//放行
|
||||
filterChain.doFilter(request, response);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.cnbm.admin.handler;
|
||||
|
||||
import com.cnbm.admin.utils.ResponseResult;
|
||||
import com.cnbm.admin.utils.WebUtils;
|
||||
import com.cnbm.common.utils.JsonUtils;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.web.access.AccessDeniedHandler;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/9 11:55 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Component
|
||||
public class AccessDeniedHandlerImpl implements AccessDeniedHandler {
|
||||
@Override
|
||||
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException) throws IOException, ServletException {
|
||||
ResponseResult result = new ResponseResult(HttpStatus.FORBIDDEN.value(),"您的权限不足");
|
||||
String json = JsonUtils.toJsonString(result);
|
||||
//处理异常
|
||||
WebUtils.renderString(response,json);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.cnbm.admin.handler;
|
||||
|
||||
import com.cnbm.admin.utils.ResponseResult;
|
||||
import com.cnbm.admin.utils.WebUtils;
|
||||
import com.cnbm.common.utils.JsonUtils;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.security.core.AuthenticationException;
|
||||
import org.springframework.security.web.AuthenticationEntryPoint;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/9 1:27 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Component
|
||||
public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint {
|
||||
@Override
|
||||
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
|
||||
ResponseResult result = new ResponseResult(HttpStatus.UNAUTHORIZED.value(),"用户认证失败请查询登录");
|
||||
String json = JsonUtils.toJsonString(result);
|
||||
//处理异常
|
||||
WebUtils.renderString(response,json);
|
||||
}
|
||||
}
|
36
ym-admin/src/main/java/com/cnbm/admin/params/LoginParam.java
Normal file
36
ym-admin/src/main/java/com/cnbm/admin/params/LoginParam.java
Normal file
@ -0,0 +1,36 @@
|
||||
package com.cnbm.admin.params;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 9:29 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Data
|
||||
@ApiModel(value = "登录表单")
|
||||
public class LoginParam implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ApiModelProperty(value = "用户名", required = true)
|
||||
@NotBlank(message="用户名不能为空")
|
||||
private String username;
|
||||
|
||||
@ApiModelProperty(value = "密码" , required = true)
|
||||
@NotBlank(message="密码不能为空")
|
||||
private String password;
|
||||
|
||||
@ApiModelProperty(value = "验证码" , required = true)
|
||||
@NotBlank(message="验证码不能为空")
|
||||
private String captcha;
|
||||
|
||||
@ApiModelProperty(value = "唯一标识" , required = true)
|
||||
@NotBlank(message="uuid不能为空")
|
||||
private String uuid;
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.cnbm.admin.redis;
|
||||
|
||||
import com.cnbm.common.redis.RedisKeys;
|
||||
import com.cnbm.common.redis.RedisUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:48 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Component
|
||||
public class SysParamsRedis {
|
||||
@Autowired
|
||||
private RedisUtils redisUtils;
|
||||
|
||||
public void delete(Object[] paramCodes) {
|
||||
String key = RedisKeys.getSysParamsKey();
|
||||
redisUtils.hDel(key, paramCodes);
|
||||
}
|
||||
|
||||
public void set(String paramCode, String paramValue){
|
||||
if(paramValue == null){
|
||||
return ;
|
||||
}
|
||||
String key = RedisKeys.getSysParamsKey();
|
||||
redisUtils.hSet(key, paramCode, paramValue);
|
||||
}
|
||||
|
||||
public String get(String paramCode){
|
||||
String key = RedisKeys.getSysParamsKey();
|
||||
return (String)redisUtils.hGet(key, paramCode);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 8:55 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface CaptchaService {
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.params.LoginParam;
|
||||
import com.cnbm.admin.utils.ResponseResult;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 9:17 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface LoginService {
|
||||
|
||||
ResponseResult login(HttpServletRequest request, LoginParam loginParam);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysDeptDTO;
|
||||
import com.cnbm.admin.entity.SysDeptEntity;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:38 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysDeptService extends BaseService<SysDeptEntity> {
|
||||
|
||||
List<SysDeptDTO> list(Map<String, Object> params);
|
||||
|
||||
SysDeptDTO get(Long id);
|
||||
|
||||
void save(SysDeptDTO dto);
|
||||
|
||||
void update(SysDeptDTO dto);
|
||||
|
||||
void delete(Long id);
|
||||
|
||||
/**
|
||||
* 根据部门ID,获取本部门及子部门ID列表
|
||||
* @param id 部门ID
|
||||
*/
|
||||
List<Long> getSubDeptIdList(Long id);
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysDictDataDTO;
|
||||
import com.cnbm.admin.entity.SysDictDataEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:58 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysDictDataService extends BaseService<SysDictDataEntity> {
|
||||
|
||||
PageData<SysDictDataDTO> page(Map<String, Object> params);
|
||||
|
||||
SysDictDataDTO get(Long id);
|
||||
|
||||
void save(SysDictDataDTO dto);
|
||||
|
||||
void update(SysDictDataDTO dto);
|
||||
|
||||
void delete(Long[] ids);
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysDictTypeDTO;
|
||||
import com.cnbm.admin.entity.DictType;
|
||||
import com.cnbm.admin.entity.SysDictTypeEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:58 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysDictTypeService extends BaseService<SysDictTypeEntity> {
|
||||
|
||||
PageData<SysDictTypeDTO> page(Map<String, Object> params);
|
||||
|
||||
SysDictTypeDTO get(Long id);
|
||||
|
||||
void save(SysDictTypeDTO dto);
|
||||
|
||||
void update(SysDictTypeDTO dto);
|
||||
|
||||
void delete(Long[] ids);
|
||||
|
||||
/**
|
||||
* 获取所有字典
|
||||
*/
|
||||
List<DictType> getAllList();
|
||||
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysLogErrorDTO;
|
||||
import com.cnbm.admin.entity.SysLogErrorEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:08 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysLogErrorService extends BaseService<SysLogErrorEntity> {
|
||||
|
||||
PageData<SysLogErrorDTO> page(Map<String, Object> params);
|
||||
|
||||
List<SysLogErrorDTO> list(Map<String, Object> params);
|
||||
|
||||
void save(SysLogErrorEntity entity);
|
||||
|
||||
}
|
@ -0,0 +1,23 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysLogOperationDTO;
|
||||
import com.cnbm.admin.entity.SysLogOperationEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:52 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysLogOperationService extends BaseService<SysLogOperationEntity> {
|
||||
|
||||
PageData<SysLogOperationDTO> page(Map<String, Object> params);
|
||||
|
||||
List<SysLogOperationDTO> list(Map<String, Object> params);
|
||||
|
||||
void save(SysLogOperationEntity entity);
|
||||
}
|
@ -0,0 +1,48 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysMenuDTO;
|
||||
import com.cnbm.admin.entity.SysMenuEntity;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:34 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysMenuService extends BaseService<SysMenuEntity> {
|
||||
|
||||
SysMenuDTO get(Long id);
|
||||
|
||||
void save(SysMenuDTO dto);
|
||||
|
||||
void update(SysMenuDTO dto);
|
||||
|
||||
void delete(Long id);
|
||||
|
||||
/**
|
||||
* 菜单列表
|
||||
*
|
||||
* @param type 菜单类型
|
||||
*/
|
||||
List<SysMenuDTO> getAllMenuList(Integer type);
|
||||
|
||||
/**
|
||||
* 用户菜单列表
|
||||
*
|
||||
* @param user 用户
|
||||
* @param type 菜单类型
|
||||
*/
|
||||
List<SysMenuDTO> getUserMenuList(SysUserEntity user, Integer type);
|
||||
|
||||
/**
|
||||
* 根据父菜单,查询子菜单
|
||||
* @param pid 父菜单ID
|
||||
*/
|
||||
List<SysMenuDTO> getListPid(Long pid);
|
||||
|
||||
Set<String> getUserPermissions(SysUserEntity user);
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysParamsDTO;
|
||||
import com.cnbm.admin.entity.SysParamsEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:23 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysParamsService extends BaseService<SysParamsEntity> {
|
||||
|
||||
PageData<SysParamsDTO> page(Map<String, Object> params);
|
||||
|
||||
List<SysParamsDTO> list(Map<String, Object> params);
|
||||
|
||||
SysParamsDTO get(Long id);
|
||||
|
||||
void save(SysParamsDTO dto);
|
||||
|
||||
void update(SysParamsDTO dto);
|
||||
|
||||
void delete(Long[] ids);
|
||||
|
||||
/**
|
||||
* 根据参数编码,获取参数的value值
|
||||
*
|
||||
* @param paramCode 参数编码
|
||||
*/
|
||||
String getValue(String paramCode);
|
||||
|
||||
/**
|
||||
* 根据参数编码,获取value的Object对象
|
||||
* @param paramCode 参数编码
|
||||
* @param clazz Object对象
|
||||
*/
|
||||
<T> T getValueObject(String paramCode, Class<T> clazz);
|
||||
|
||||
/**
|
||||
* 根据参数编码,更新value
|
||||
* @param paramCode 参数编码
|
||||
* @param paramValue 参数值
|
||||
*/
|
||||
int updateValueByCode(String paramCode, String paramValue);
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleDataScopeEntity;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:13 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysRoleDataScopeService extends BaseService<SysRoleDataScopeEntity> {
|
||||
|
||||
/**
|
||||
* 根据角色ID,获取部门ID列表
|
||||
*/
|
||||
List<Long> getDeptIdList(Long roleId);
|
||||
|
||||
/**
|
||||
* 保存或修改
|
||||
* @param roleId 角色ID
|
||||
* @param deptIdList 部门ID列表
|
||||
*/
|
||||
void saveOrUpdate(Long roleId, List<Long> deptIdList);
|
||||
|
||||
/**
|
||||
* 根据角色id,删除角色数据权限关系
|
||||
* @param roleId 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(Long[] roleId);
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleMenuEntity;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 3:02 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysRoleMenuService extends BaseService<SysRoleMenuEntity> {
|
||||
|
||||
/**
|
||||
* 根据角色ID,获取菜单ID列表
|
||||
*/
|
||||
List<Long> getMenuIdList(Long roleId);
|
||||
|
||||
/**
|
||||
* 保存或修改
|
||||
* @param roleId 角色ID
|
||||
* @param menuIdList 菜单ID列表
|
||||
*/
|
||||
void saveOrUpdate(Long roleId, List<Long> menuIdList);
|
||||
|
||||
/**
|
||||
* 根据角色id,删除角色菜单关系
|
||||
* @param roleIds 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(Long[] roleIds);
|
||||
|
||||
/**
|
||||
* 根据菜单id,删除角色菜单关系
|
||||
* @param menuId 菜单id
|
||||
*/
|
||||
void deleteByMenuId(Long menuId);
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysRoleDTO;
|
||||
import com.cnbm.admin.entity.SysRoleEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:07 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysRoleService extends BaseService<SysRoleEntity> {
|
||||
|
||||
PageData<SysRoleDTO> page(Map<String, Object> params);
|
||||
|
||||
List<SysRoleDTO> list(Map<String, Object> params);
|
||||
|
||||
SysRoleDTO get(Long id);
|
||||
|
||||
void save(SysRoleDTO dto);
|
||||
|
||||
void update(SysRoleDTO dto);
|
||||
|
||||
void delete(Long[] ids);
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.entity.SysRoleUserEntity;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:33 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysRoleUserService extends BaseService<SysRoleUserEntity> {
|
||||
|
||||
/**
|
||||
* 保存或修改
|
||||
* @param userId 用户ID
|
||||
* @param roleIdList 角色ID列表
|
||||
*/
|
||||
void saveOrUpdate(Long userId, List<Long> roleIdList);
|
||||
|
||||
/**
|
||||
* 根据角色ids,删除角色用户关系
|
||||
* @param roleIds 角色ids
|
||||
*/
|
||||
void deleteByRoleIds(Long[] roleIds);
|
||||
|
||||
/**
|
||||
* 根据用户id,删除角色用户关系
|
||||
* @param userIds 用户ids
|
||||
*/
|
||||
void deleteByUserIds(Long[] userIds);
|
||||
|
||||
/**
|
||||
* 角色ID列表
|
||||
* @param userId 用户ID
|
||||
*/
|
||||
List<Long> getRoleIdList(Long userId);
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package com.cnbm.admin.service;
|
||||
|
||||
import com.cnbm.admin.dto.SysUserDTO;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.BaseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:24 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public interface SysUserService extends BaseService<SysUserEntity> {
|
||||
|
||||
PageData<SysUserDTO> page(Map<String, Object> params);
|
||||
|
||||
List<SysUserDTO> list(Map<String, Object> params);
|
||||
|
||||
SysUserDTO get(Long id);
|
||||
|
||||
SysUserDTO getByUsername(String username);
|
||||
|
||||
void save(SysUserDTO dto);
|
||||
|
||||
void update(SysUserDTO dto);
|
||||
|
||||
void delete(Long[] ids);
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
* @param id 用户ID
|
||||
* @param newPassword 新密码
|
||||
*/
|
||||
void updatePassword(Long id, String newPassword);
|
||||
|
||||
/**
|
||||
* 根据部门ID,查询用户数
|
||||
*/
|
||||
int getCountByDeptId(Long deptId);
|
||||
|
||||
/**
|
||||
* 根据部门ID,查询用户Id列表
|
||||
*/
|
||||
List<Long> getUserIdListByDeptId(List<Long> deptIdList);
|
||||
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.params.LoginParam;
|
||||
import com.cnbm.admin.utils.JwtUtil;
|
||||
import com.cnbm.admin.service.LoginService;
|
||||
import com.cnbm.admin.utils.ResponseResult;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 9:17 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class LoginServiceImpl implements LoginService {
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate redisTemplate;
|
||||
|
||||
@Autowired
|
||||
private AuthenticationManager authenticationManager;
|
||||
|
||||
@Override
|
||||
public ResponseResult login(HttpServletRequest request, LoginParam loginParam) {
|
||||
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginParam.getUsername(),loginParam.getPassword());
|
||||
Authentication authenticate = authenticationManager.authenticate(authenticationToken);
|
||||
if (Objects.isNull(authenticate)) {
|
||||
throw new RuntimeException("登录失败");
|
||||
}
|
||||
//如果认证通过了,使用userid生成一个jwt jwt存入ResponseResult返回
|
||||
LoginUser loginUser = (LoginUser) authenticate.getPrincipal();
|
||||
String userid = loginUser.getSysUserEntity().getId().toString();
|
||||
String jwt = JwtUtil.createJWT(userid);
|
||||
Map<String,String> map = new HashMap<>();
|
||||
map.put("token",jwt);
|
||||
//把完整的用户信息存入redis userid作为key
|
||||
redisTemplate.opsForValue().set("login:"+userid,loginUser);
|
||||
return new ResponseResult(200,"登录成功",map);
|
||||
}
|
||||
}
|
@ -0,0 +1,165 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.cnbm.admin.dao.SysDeptDao;
|
||||
import com.cnbm.admin.dao.SysUserDao;
|
||||
import com.cnbm.admin.dto.SysDeptDTO;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysDeptEntity;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.enums.SuperAdminEnum;
|
||||
import com.cnbm.admin.service.SysDeptService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.exception.ErrorCode;
|
||||
import com.cnbm.common.exception.RenException;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import com.cnbm.common.utils.TreeUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:38 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysDeptServiceImpl extends BaseServiceImpl<SysDeptDao, SysDeptEntity> implements SysDeptService {
|
||||
@Autowired
|
||||
private SysUserDao sysUserDao;
|
||||
|
||||
@Override
|
||||
public List<SysDeptDTO> list(Map<String, Object> params) {
|
||||
//普通管理员,只能查询所属部门及子部门的数据
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) {
|
||||
params.put("deptIdList", getSubDeptIdList(user.getDeptId()));
|
||||
}
|
||||
|
||||
//查询部门列表
|
||||
List<SysDeptEntity> entityList = baseDao.getList(params);
|
||||
|
||||
List<SysDeptDTO> dtoList = ConvertUtils.sourceToTarget(entityList, SysDeptDTO.class);
|
||||
|
||||
return TreeUtils.build(dtoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysDeptDTO get(Long id) {
|
||||
//超级管理员,部门ID为null
|
||||
if(id == null){
|
||||
return null;
|
||||
}
|
||||
|
||||
SysDeptEntity entity = baseDao.getById(id);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entity, SysDeptDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysDeptDTO dto) {
|
||||
SysDeptEntity entity = ConvertUtils.sourceToTarget(dto, SysDeptEntity.class);
|
||||
|
||||
entity.setPids(getPidList(entity.getPid()));
|
||||
insert(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysDeptDTO dto) {
|
||||
SysDeptEntity entity = ConvertUtils.sourceToTarget(dto, SysDeptEntity.class);
|
||||
|
||||
//上级部门不能为自身
|
||||
if(entity.getId().equals(entity.getPid())){
|
||||
throw new RenException(ErrorCode.SUPERIOR_DEPT_ERROR);
|
||||
}
|
||||
|
||||
//上级部门不能为下级部门
|
||||
List<Long> subDeptList = getSubDeptIdList(entity.getId());
|
||||
if(subDeptList.contains(entity.getPid())){
|
||||
throw new RenException(ErrorCode.SUPERIOR_DEPT_ERROR);
|
||||
}
|
||||
|
||||
entity.setPids(getPidList(entity.getPid()));
|
||||
updateById(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long id) {
|
||||
//判断是否有子部门
|
||||
List<Long> subList = getSubDeptIdList(id);
|
||||
if(subList.size() > 1){
|
||||
throw new RenException(ErrorCode.DEPT_SUB_DELETE_ERROR);
|
||||
}
|
||||
|
||||
//判断部门下面是否有用户
|
||||
int count = sysUserDao.getCountByDeptId(id);
|
||||
if(count > 0){
|
||||
throw new RenException(ErrorCode.DEPT_USER_DELETE_ERROR);
|
||||
}
|
||||
|
||||
//删除
|
||||
baseDao.deleteById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getSubDeptIdList(Long id) {
|
||||
List<Long> deptIdList = baseDao.getSubDeptIdList("%" + id + "%");
|
||||
deptIdList.add(id);
|
||||
|
||||
return deptIdList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有上级部门ID
|
||||
* @param pid 上级ID
|
||||
*/
|
||||
private String getPidList(Long pid){
|
||||
//顶级部门,无上级部门
|
||||
if(Constant.DEPT_ROOT.equals(pid)){
|
||||
return Constant.DEPT_ROOT + "";
|
||||
}
|
||||
|
||||
//所有部门的id、pid列表
|
||||
List<SysDeptEntity> deptList = baseDao.getIdAndPidList();
|
||||
|
||||
//list转map
|
||||
Map<Long, SysDeptEntity> map = new HashMap<>(deptList.size());
|
||||
for(SysDeptEntity entity : deptList){
|
||||
map.put(entity.getId(), entity);
|
||||
}
|
||||
|
||||
//递归查询所有上级部门ID列表
|
||||
List<Long> pidList = new ArrayList<>();
|
||||
getPidTree(pid, map, pidList);
|
||||
|
||||
return StringUtils.join(pidList, ",");
|
||||
}
|
||||
|
||||
private void getPidTree(Long pid, Map<Long, SysDeptEntity> map, List<Long> pidList) {
|
||||
//顶级部门,无上级部门
|
||||
if(Constant.DEPT_ROOT.equals(pid)){
|
||||
return ;
|
||||
}
|
||||
|
||||
//上级部门存在
|
||||
SysDeptEntity parent = map.get(pid);
|
||||
if(parent != null){
|
||||
getPidTree(parent.getPid(), map, pidList);
|
||||
}
|
||||
|
||||
pidList.add(pid);
|
||||
}
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysDictDataDao;
|
||||
import com.cnbm.admin.dto.SysDictDataDTO;
|
||||
import com.cnbm.admin.entity.SysDictDataEntity;
|
||||
import com.cnbm.admin.service.SysDictDataService;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:59 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysDictDataServiceImpl extends BaseServiceImpl<SysDictDataDao, SysDictDataEntity> implements SysDictDataService {
|
||||
|
||||
@Override
|
||||
public PageData<SysDictDataDTO> page(Map<String, Object> params) {
|
||||
IPage<SysDictDataEntity> page = baseDao.selectPage(
|
||||
getPage(params, "sort", true),
|
||||
getWrapper(params)
|
||||
);
|
||||
|
||||
return getPageData(page, SysDictDataDTO.class);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysDictDataEntity> getWrapper(Map<String, Object> params){
|
||||
String dictTypeId = (String) params.get("dictTypeId");
|
||||
String dictLabel = (String) params.get("dictLabel");
|
||||
String dictValue = (String) params.get("dictValue");
|
||||
|
||||
QueryWrapper<SysDictDataEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("dict_type_id", dictTypeId);
|
||||
wrapper.like(StringUtils.isNotBlank(dictLabel), "dict_label", dictLabel);
|
||||
wrapper.like(StringUtils.isNotBlank(dictValue), "dict_value", dictValue);
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysDictDataDTO get(Long id) {
|
||||
SysDictDataEntity entity = baseDao.selectById(id);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entity, SysDictDataDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysDictDataDTO dto) {
|
||||
SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class);
|
||||
|
||||
insert(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysDictDataDTO dto) {
|
||||
SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class);
|
||||
|
||||
updateById(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long[] ids) {
|
||||
//删除
|
||||
deleteBatchIds(Arrays.asList(ids));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysDictDataDao;
|
||||
import com.cnbm.admin.dao.SysDictTypeDao;
|
||||
import com.cnbm.admin.dto.SysDictTypeDTO;
|
||||
import com.cnbm.admin.entity.DictData;
|
||||
import com.cnbm.admin.entity.DictType;
|
||||
import com.cnbm.admin.entity.SysDictTypeEntity;
|
||||
import com.cnbm.admin.service.SysDictTypeService;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:59 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysDictTypeServiceImpl extends BaseServiceImpl<SysDictTypeDao, SysDictTypeEntity> implements SysDictTypeService {
|
||||
@Autowired
|
||||
private SysDictDataDao sysDictDataDao;
|
||||
@Override
|
||||
public PageData<SysDictTypeDTO> page(Map<String, Object> params) {
|
||||
IPage<SysDictTypeEntity> page = baseDao.selectPage(
|
||||
getPage(params, "sort", true),
|
||||
getWrapper(params)
|
||||
);
|
||||
|
||||
return getPageData(page, SysDictTypeDTO.class);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysDictTypeEntity> getWrapper(Map<String, Object> params){
|
||||
String dictType = (String) params.get("dictType");
|
||||
String dictName = (String) params.get("dictName");
|
||||
|
||||
QueryWrapper<SysDictTypeEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.like(StringUtils.isNotBlank(dictType), "dict_type", dictType);
|
||||
wrapper.like(StringUtils.isNotBlank(dictName), "dict_name", dictName);
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysDictTypeDTO get(Long id) {
|
||||
SysDictTypeEntity entity = baseDao.selectById(id);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entity, SysDictTypeDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysDictTypeDTO dto) {
|
||||
SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class);
|
||||
|
||||
insert(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysDictTypeDTO dto) {
|
||||
SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class);
|
||||
|
||||
updateById(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long[] ids) {
|
||||
//删除
|
||||
deleteBatchIds(Arrays.asList(ids));
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DictType> getAllList() {
|
||||
List<DictType> typeList = baseDao.getDictTypeList();
|
||||
List<DictData> dataList = sysDictDataDao.getDictDataList();
|
||||
for(DictType type : typeList){
|
||||
for(DictData data : dataList){
|
||||
if(type.getId().equals(data.getDictTypeId())){
|
||||
type.getDataList().add(data);
|
||||
}
|
||||
}
|
||||
}
|
||||
return typeList;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysLogErrorDao;
|
||||
import com.cnbm.admin.dto.SysLogErrorDTO;
|
||||
import com.cnbm.admin.entity.SysLogErrorEntity;
|
||||
import com.cnbm.admin.service.SysLogErrorService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:09 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysLogErrorServiceImpl extends BaseServiceImpl<SysLogErrorDao, SysLogErrorEntity> implements SysLogErrorService {
|
||||
|
||||
@Override
|
||||
public PageData<SysLogErrorDTO> page(Map<String, Object> params) {
|
||||
IPage<SysLogErrorEntity> page = baseDao.selectPage(
|
||||
getPage(params, Constant.CREATE_DATE, false),
|
||||
getWrapper(params)
|
||||
);
|
||||
|
||||
return getPageData(page, SysLogErrorDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysLogErrorDTO> list(Map<String, Object> params) {
|
||||
List<SysLogErrorEntity> entityList = baseDao.selectList(getWrapper(params));
|
||||
|
||||
return ConvertUtils.sourceToTarget(entityList, SysLogErrorDTO.class);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysLogErrorEntity> getWrapper(Map<String, Object> params){
|
||||
QueryWrapper<SysLogErrorEntity> wrapper = new QueryWrapper<>();
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysLogErrorEntity entity) {
|
||||
insert(entity);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysLogOperationDao;
|
||||
import com.cnbm.admin.dto.SysLogOperationDTO;
|
||||
import com.cnbm.admin.entity.SysLogOperationEntity;
|
||||
import com.cnbm.admin.service.SysLogOperationService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 9:52 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysLogOperationServiceImpl extends BaseServiceImpl<SysLogOperationDao, SysLogOperationEntity> implements SysLogOperationService {
|
||||
|
||||
@Override
|
||||
public PageData<SysLogOperationDTO> page(Map<String, Object> params) {
|
||||
IPage<SysLogOperationEntity> page = baseDao.selectPage(
|
||||
getPage(params, Constant.CREATE_DATE, false),
|
||||
getWrapper(params)
|
||||
);
|
||||
|
||||
return getPageData(page, SysLogOperationDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysLogOperationDTO> list(Map<String, Object> params) {
|
||||
List<SysLogOperationEntity> entityList = baseDao.selectList(getWrapper(params));
|
||||
|
||||
return ConvertUtils.sourceToTarget(entityList, SysLogOperationDTO.class);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysLogOperationEntity> getWrapper(Map<String, Object> params){
|
||||
String status = (String) params.get("status");
|
||||
|
||||
QueryWrapper<SysLogOperationEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq(StringUtils.isNotBlank(status), "status", status);
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysLogOperationEntity entity) {
|
||||
insert(entity);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,136 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.cnbm.admin.dao.SysMenuDao;
|
||||
import com.cnbm.admin.dto.SysMenuDTO;
|
||||
import com.cnbm.admin.entity.SysMenuEntity;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.enums.SuperAdminEnum;
|
||||
import com.cnbm.admin.service.SysMenuService;
|
||||
import com.cnbm.admin.service.SysRoleMenuService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.exception.ErrorCode;
|
||||
import com.cnbm.common.exception.RenException;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import com.cnbm.common.utils.TreeUtils;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 2:35 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
@Log4j2
|
||||
public class SysMenuServiceImpl extends BaseServiceImpl<SysMenuDao, SysMenuEntity> implements SysMenuService {
|
||||
@Autowired
|
||||
private SysRoleMenuService sysRoleMenuService;
|
||||
|
||||
@Autowired
|
||||
private SysMenuDao sysMenuDao;
|
||||
|
||||
@Override
|
||||
public SysMenuDTO get(Long id) {
|
||||
SysMenuEntity entity = baseDao.getById(id);
|
||||
|
||||
SysMenuDTO dto = ConvertUtils.sourceToTarget(entity, SysMenuDTO.class);
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysMenuDTO dto) {
|
||||
SysMenuEntity entity = ConvertUtils.sourceToTarget(dto, SysMenuEntity.class);
|
||||
|
||||
//保存菜单
|
||||
insert(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysMenuDTO dto) {
|
||||
SysMenuEntity entity = ConvertUtils.sourceToTarget(dto, SysMenuEntity.class);
|
||||
|
||||
//上级菜单不能为自身
|
||||
if(entity.getId().equals(entity.getPid())){
|
||||
throw new RenException(ErrorCode.SUPERIOR_MENU_ERROR);
|
||||
}
|
||||
|
||||
//更新菜单
|
||||
updateById(entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long id) {
|
||||
//删除菜单
|
||||
deleteById(id);
|
||||
|
||||
//删除角色菜单关系
|
||||
sysRoleMenuService.deleteByMenuId(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenuDTO> getAllMenuList(Integer type) {
|
||||
List<SysMenuEntity> menuList = baseDao.getMenuList(type);
|
||||
|
||||
List<SysMenuDTO> dtoList = ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class);
|
||||
|
||||
return TreeUtils.build(dtoList, Constant.MENU_ROOT);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenuDTO> getUserMenuList(SysUserEntity user, Integer type) {
|
||||
List<SysMenuEntity> menuList = new ArrayList<>();
|
||||
|
||||
|
||||
|
||||
//系统管理员,拥有最高权限
|
||||
if(!Objects.isNull(user.getSuperAdmin()) && user.getSuperAdmin() == SuperAdminEnum.YES.value()){
|
||||
menuList = baseDao.getMenuList(type);
|
||||
}else {
|
||||
menuList = baseDao.getUserMenuList(user.getId(), type);
|
||||
}
|
||||
|
||||
List<SysMenuDTO> dtoList = ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class);
|
||||
|
||||
return TreeUtils.build(dtoList);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenuDTO> getListPid(Long pid) {
|
||||
List<SysMenuEntity> menuList = baseDao.getListPid(pid);
|
||||
|
||||
return ConvertUtils.sourceToTarget(menuList, SysMenuDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getUserPermissions(SysUserEntity user) {
|
||||
//系统管理员,拥有最高权限
|
||||
List<String> permissionsList;
|
||||
if(user.getSuperAdmin() == SuperAdminEnum.YES.value()) {
|
||||
permissionsList = sysMenuDao.getPermissionsList();
|
||||
}else{
|
||||
permissionsList = sysMenuDao.getUserPermissionsList(user.getId());
|
||||
}
|
||||
|
||||
//用户权限列表
|
||||
Set<String> permsSet = new HashSet<>();
|
||||
for(String permissions : permissionsList){
|
||||
if(StringUtils.isBlank(permissions)){
|
||||
continue;
|
||||
}
|
||||
permsSet.addAll(Arrays.asList(permissions.trim().split(",")));
|
||||
}
|
||||
|
||||
return permsSet;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,133 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysParamsDao;
|
||||
import com.cnbm.admin.dto.SysParamsDTO;
|
||||
import com.cnbm.admin.entity.SysParamsEntity;
|
||||
import com.cnbm.admin.redis.SysParamsRedis;
|
||||
import com.cnbm.admin.service.SysParamsService;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.exception.ErrorCode;
|
||||
import com.cnbm.common.exception.RenException;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import com.cnbm.common.utils.JsonUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:24 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysParamsServiceImpl extends BaseServiceImpl<SysParamsDao, SysParamsEntity> implements SysParamsService {
|
||||
@Autowired
|
||||
private SysParamsRedis sysParamsRedis;
|
||||
|
||||
@Override
|
||||
public PageData<SysParamsDTO> page(Map<String, Object> params) {
|
||||
IPage<SysParamsEntity> page = baseDao.selectPage(
|
||||
getPage(params, Constant.CREATE_DATE, false),
|
||||
getWrapper(params)
|
||||
);
|
||||
|
||||
return getPageData(page, SysParamsDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysParamsDTO> list(Map<String, Object> params) {
|
||||
List<SysParamsEntity> entityList = baseDao.selectList(getWrapper(params));
|
||||
|
||||
return ConvertUtils.sourceToTarget(entityList, SysParamsDTO.class);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysParamsEntity> getWrapper(Map<String, Object> params){
|
||||
String paramCode = (String) params.get("paramCode");
|
||||
|
||||
QueryWrapper<SysParamsEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("param_type", 1);
|
||||
wrapper.like(StringUtils.isNotBlank(paramCode), "param_code", paramCode);
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysParamsDTO get(Long id) {
|
||||
SysParamsEntity entity = baseDao.selectById(id);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entity, SysParamsDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysParamsDTO dto) {
|
||||
SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class);
|
||||
insert(entity);
|
||||
|
||||
sysParamsRedis.set(entity.getParamCode(), entity.getParamValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysParamsDTO dto) {
|
||||
SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class);
|
||||
updateById(entity);
|
||||
|
||||
sysParamsRedis.set(entity.getParamCode(), entity.getParamValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long[] ids) {
|
||||
//删除Redis数据
|
||||
List<String> paramCodeList = baseDao.getParamCodeList(ids);
|
||||
String[] paramCodes = paramCodeList.toArray(new String[paramCodeList.size()]);
|
||||
sysParamsRedis.delete(paramCodes);
|
||||
|
||||
//删除
|
||||
deleteBatchIds(Arrays.asList(ids));
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getValue(String paramCode) {
|
||||
String paramValue = sysParamsRedis.get(paramCode);
|
||||
if(paramValue == null){
|
||||
paramValue = baseDao.getValueByCode(paramCode);
|
||||
|
||||
sysParamsRedis.set(paramCode, paramValue);
|
||||
}
|
||||
return paramValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T getValueObject(String paramCode, Class<T> clazz) {
|
||||
String paramValue = getValue(paramCode);
|
||||
if(StringUtils.isNotBlank(paramValue)){
|
||||
return JsonUtils.parseObject(paramValue, clazz);
|
||||
}
|
||||
|
||||
try {
|
||||
return clazz.newInstance();
|
||||
} catch (Exception e) {
|
||||
throw new RenException(ErrorCode.PARAMS_GET_ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int updateValueByCode(String paramCode, String paramValue) {
|
||||
int count = baseDao.updateValueByCode(paramCode, paramValue);
|
||||
sysParamsRedis.set(paramCode, paramValue);
|
||||
return count;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.cnbm.admin.dao.SysRoleDataScopeDao;
|
||||
import com.cnbm.admin.entity.SysRoleDataScopeEntity;
|
||||
import com.cnbm.admin.service.SysRoleDataScopeService;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:13 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysRoleDataScopeServiceImpl extends BaseServiceImpl<SysRoleDataScopeDao, SysRoleDataScopeEntity>
|
||||
implements SysRoleDataScopeService {
|
||||
|
||||
@Override
|
||||
public List<Long> getDeptIdList(Long roleId) {
|
||||
return baseDao.getDeptIdList(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveOrUpdate(Long roleId, List<Long> deptIdList) {
|
||||
//先删除角色数据权限关系
|
||||
deleteByRoleIds(new Long[]{roleId});
|
||||
|
||||
//角色没有一个数据权限的情况
|
||||
if(CollUtil.isEmpty(deptIdList)){
|
||||
return ;
|
||||
}
|
||||
|
||||
//保存角色数据权限关系
|
||||
for(Long deptId : deptIdList){
|
||||
SysRoleDataScopeEntity sysRoleDataScopeEntity = new SysRoleDataScopeEntity();
|
||||
sysRoleDataScopeEntity.setDeptId(deptId);
|
||||
sysRoleDataScopeEntity.setRoleId(roleId);
|
||||
|
||||
//保存
|
||||
insert(sysRoleDataScopeEntity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByRoleIds(Long[] roleIds) {
|
||||
baseDao.deleteByRoleIds(roleIds);
|
||||
}
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.cnbm.admin.dao.SysRoleMenuDao;
|
||||
import com.cnbm.admin.entity.SysRoleMenuEntity;
|
||||
import com.cnbm.admin.service.SysRoleMenuService;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 3:04 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysRoleMenuServiceImpl extends BaseServiceImpl<SysRoleMenuDao, SysRoleMenuEntity> implements SysRoleMenuService {
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void saveOrUpdate(Long roleId, List<Long> menuIdList) {
|
||||
//先删除角色菜单关系
|
||||
deleteByRoleIds(new Long[]{roleId});
|
||||
|
||||
//角色没有一个菜单权限的情况
|
||||
if(CollUtil.isEmpty(menuIdList)){
|
||||
return ;
|
||||
}
|
||||
|
||||
//保存角色菜单关系
|
||||
for(Long menuId : menuIdList){
|
||||
SysRoleMenuEntity sysRoleMenuEntity = new SysRoleMenuEntity();
|
||||
sysRoleMenuEntity.setMenuId(menuId);
|
||||
sysRoleMenuEntity.setRoleId(roleId);
|
||||
|
||||
//保存
|
||||
insert(sysRoleMenuEntity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getMenuIdList(Long roleId){
|
||||
return baseDao.getMenuIdList(roleId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByRoleIds(Long[] roleIds) {
|
||||
baseDao.deleteByRoleIds(roleIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void deleteByMenuId(Long menuId) {
|
||||
baseDao.deleteByMenuId(menuId);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysRoleDao;
|
||||
import com.cnbm.admin.dto.SysRoleDTO;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysRoleEntity;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.enums.SuperAdminEnum;
|
||||
import com.cnbm.admin.service.*;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/12 10:08 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysRoleServiceImpl extends BaseServiceImpl<SysRoleDao, SysRoleEntity> implements SysRoleService {
|
||||
@Autowired
|
||||
private SysRoleMenuService sysRoleMenuService;
|
||||
@Autowired
|
||||
private SysRoleDataScopeService sysRoleDataScopeService;
|
||||
@Autowired
|
||||
private SysRoleUserService sysRoleUserService;
|
||||
@Autowired
|
||||
private SysDeptService sysDeptService;
|
||||
|
||||
@Override
|
||||
public PageData<SysRoleDTO> page(Map<String, Object> params) {
|
||||
IPage<SysRoleEntity> page = baseDao.selectPage(
|
||||
getPage(params, Constant.CREATE_DATE, false),
|
||||
getWrapper(params)
|
||||
);
|
||||
|
||||
return getPageData(page, SysRoleDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysRoleDTO> list(Map<String, Object> params) {
|
||||
List<SysRoleEntity> entityList = baseDao.selectList(getWrapper(params));
|
||||
|
||||
return ConvertUtils.sourceToTarget(entityList, SysRoleDTO.class);
|
||||
}
|
||||
|
||||
private QueryWrapper<SysRoleEntity> getWrapper(Map<String, Object> params){
|
||||
String name = (String)params.get("name");
|
||||
|
||||
QueryWrapper<SysRoleEntity> wrapper = new QueryWrapper<>();
|
||||
wrapper.like(StringUtils.isNotBlank(name), "name", name);
|
||||
|
||||
//普通管理员,只能查询所属部门及子部门的数据
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
if(!Objects.isNull(user.getSuperAdmin()) && user.getSuperAdmin() == SuperAdminEnum.NO.value()) {
|
||||
List<Long> deptIdList = sysDeptService.getSubDeptIdList(user.getDeptId());
|
||||
wrapper.in(deptIdList != null, "dept_id", deptIdList);
|
||||
}
|
||||
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysRoleDTO get(Long id) {
|
||||
SysRoleEntity entity = baseDao.selectById(id);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entity, SysRoleDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysRoleDTO dto) {
|
||||
SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class);
|
||||
|
||||
//保存角色
|
||||
insert(entity);
|
||||
|
||||
//保存角色菜单关系
|
||||
sysRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList());
|
||||
|
||||
//保存角色数据权限关系
|
||||
sysRoleDataScopeService.saveOrUpdate(entity.getId(), dto.getDeptIdList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysRoleDTO dto) {
|
||||
SysRoleEntity entity = ConvertUtils.sourceToTarget(dto, SysRoleEntity.class);
|
||||
|
||||
//更新角色
|
||||
updateById(entity);
|
||||
|
||||
//更新角色菜单关系
|
||||
sysRoleMenuService.saveOrUpdate(entity.getId(), dto.getMenuIdList());
|
||||
|
||||
//更新角色数据权限关系
|
||||
sysRoleDataScopeService.saveOrUpdate(entity.getId(), dto.getDeptIdList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(Long[] ids) {
|
||||
//删除角色
|
||||
baseDao.deleteBatchIds(Arrays.asList(ids));
|
||||
|
||||
//删除角色用户关系
|
||||
sysRoleUserService.deleteByRoleIds(ids);
|
||||
|
||||
//删除角色菜单关系
|
||||
sysRoleMenuService.deleteByRoleIds(ids);
|
||||
|
||||
//删除角色数据权限关系
|
||||
sysRoleDataScopeService.deleteByRoleIds(ids);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.cnbm.admin.dao.SysRoleUserDao;
|
||||
import com.cnbm.admin.entity.SysRoleUserEntity;
|
||||
import com.cnbm.admin.service.SysRoleUserService;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:34 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysRoleUserServiceImpl extends BaseServiceImpl<SysRoleUserDao, SysRoleUserEntity> implements SysRoleUserService {
|
||||
|
||||
@Override
|
||||
public void saveOrUpdate(Long userId, List<Long> roleIdList) {
|
||||
//先删除角色用户关系
|
||||
deleteByUserIds(new Long[]{userId});
|
||||
|
||||
//用户没有一个角色权限的情况
|
||||
if(CollUtil.isEmpty(roleIdList)){
|
||||
return ;
|
||||
}
|
||||
|
||||
//保存角色用户关系
|
||||
for(Long roleId : roleIdList){
|
||||
SysRoleUserEntity sysRoleUserEntity = new SysRoleUserEntity();
|
||||
sysRoleUserEntity.setUserId(userId);
|
||||
sysRoleUserEntity.setRoleId(roleId);
|
||||
|
||||
//保存
|
||||
insert(sysRoleUserEntity);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByRoleIds(Long[] roleIds) {
|
||||
baseDao.deleteByRoleIds(roleIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByUserIds(Long[] userIds) {
|
||||
baseDao.deleteByUserIds(userIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getRoleIdList(Long userId) {
|
||||
|
||||
return baseDao.getRoleIdList(userId);
|
||||
}
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.cnbm.admin.dao.SysUserDao;
|
||||
import com.cnbm.admin.dto.SysUserDTO;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.enums.SuperAdminEnum;
|
||||
import com.cnbm.admin.service.SysDeptService;
|
||||
import com.cnbm.admin.service.SysRoleUserService;
|
||||
import com.cnbm.admin.service.SysUserService;
|
||||
import com.cnbm.admin.utils.PasswordUtils;
|
||||
import com.cnbm.common.constant.Constant;
|
||||
import com.cnbm.common.page.PageData;
|
||||
import com.cnbm.common.service.impl.BaseServiceImpl;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:24 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
public class SysUserServiceImpl extends BaseServiceImpl<SysUserDao, SysUserEntity> implements SysUserService {
|
||||
@Autowired
|
||||
private SysRoleUserService sysRoleUserService;
|
||||
@Autowired
|
||||
private SysDeptService sysDeptService;
|
||||
|
||||
@Override
|
||||
public PageData<SysUserDTO> page(Map<String, Object> params) {
|
||||
//转换成like
|
||||
paramsToLike(params, "username");
|
||||
|
||||
//分页
|
||||
IPage<SysUserEntity> page = getPage(params, Constant.CREATE_DATE, false);
|
||||
|
||||
//普通管理员,只能查询所属部门及子部门的数据
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) {
|
||||
params.put("deptIdList", sysDeptService.getSubDeptIdList(user.getDeptId()));
|
||||
}
|
||||
|
||||
//查询
|
||||
List<SysUserEntity> list = baseDao.getList(params);
|
||||
|
||||
return getPageData(list, page.getTotal(), SysUserDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SysUserDTO> list(Map<String, Object> params) {
|
||||
//普通管理员,只能查询所属部门及子部门的数据
|
||||
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
|
||||
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
|
||||
SysUserEntity user = loginUser.getSysUserEntity();
|
||||
if(user.getSuperAdmin() == SuperAdminEnum.NO.value()) {
|
||||
params.put("deptIdList", sysDeptService.getSubDeptIdList(user.getDeptId()));
|
||||
}
|
||||
|
||||
List<SysUserEntity> entityList = baseDao.getList(params);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entityList, SysUserDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUserDTO get(Long id) {
|
||||
SysUserEntity entity = baseDao.getById(id);
|
||||
|
||||
return ConvertUtils.sourceToTarget(entity, SysUserDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SysUserDTO getByUsername(String username) {
|
||||
SysUserEntity entity = baseDao.getByUsername(username);
|
||||
return ConvertUtils.sourceToTarget(entity, SysUserDTO.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void save(SysUserDTO dto) {
|
||||
SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class);
|
||||
|
||||
//密码加密
|
||||
String password = PasswordUtils.encode(entity.getPassword());
|
||||
entity.setPassword(password);
|
||||
|
||||
//保存用户
|
||||
entity.setSuperAdmin(SuperAdminEnum.NO.value());
|
||||
insert(entity);
|
||||
|
||||
//保存角色用户关系
|
||||
sysRoleUserService.saveOrUpdate(entity.getId(), dto.getRoleIdList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void update(SysUserDTO dto) {
|
||||
SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class);
|
||||
|
||||
//密码加密
|
||||
if(StringUtils.isBlank(dto.getPassword())){
|
||||
entity.setPassword(null);
|
||||
}else{
|
||||
String password = PasswordUtils.encode(entity.getPassword());
|
||||
entity.setPassword(password);
|
||||
}
|
||||
|
||||
//更新用户
|
||||
updateById(entity);
|
||||
|
||||
//更新角色用户关系
|
||||
sysRoleUserService.saveOrUpdate(entity.getId(), dto.getRoleIdList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void delete(Long[] ids) {
|
||||
//删除用户
|
||||
baseDao.deleteBatchIds(Arrays.asList(ids));
|
||||
|
||||
//删除角色用户关系
|
||||
sysRoleUserService.deleteByUserIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void updatePassword(Long id, String newPassword) {
|
||||
newPassword = PasswordUtils.encode(newPassword);
|
||||
|
||||
baseDao.updatePassword(id, newPassword);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getCountByDeptId(Long deptId) {
|
||||
return baseDao.getCountByDeptId(deptId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> getUserIdListByDeptId(List<Long> deptIdList) {
|
||||
return baseDao.getUserIdListByDeptId(deptIdList);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.cnbm.admin.service.impl;
|
||||
|
||||
import com.cnbm.admin.dao.UserDao;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.cnbm.admin.dto.SysMenuDTO;
|
||||
import com.cnbm.admin.dto.SysUserDTO;
|
||||
import com.cnbm.admin.entity.LoginUser;
|
||||
import com.cnbm.admin.entity.SysMenuEntity;
|
||||
import com.cnbm.admin.entity.SysUserEntity;
|
||||
import com.cnbm.admin.service.SysMenuService;
|
||||
import com.cnbm.common.utils.ConvertUtils;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
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.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 8:57 AM
|
||||
* @Version 1.0
|
||||
*/
|
||||
@Service
|
||||
@Log4j2
|
||||
public class UserDetailsServiceImpl implements UserDetailsService {
|
||||
|
||||
@Autowired
|
||||
private UserDao userDao;
|
||||
|
||||
@Autowired
|
||||
private SysMenuService sysMenuService;
|
||||
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||
|
||||
LambdaQueryWrapper<SysUserEntity> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
lambdaQueryWrapper.eq(SysUserEntity::getUsername,username);
|
||||
SysUserEntity sysUserEntity = userDao.selectOne(lambdaQueryWrapper);
|
||||
if (Objects.isNull(sysUserEntity)) {
|
||||
throw new UsernameNotFoundException("用户名不存在");
|
||||
}
|
||||
log.info("sysUserEntity的值是"+sysUserEntity.toString());
|
||||
log.info("sysUserEntity.getSuperAdmin()=="+sysUserEntity.getSuperAdmin());
|
||||
Set<String> userPermissions = sysMenuService.getUserPermissions(sysUserEntity);
|
||||
|
||||
List<String> list = userPermissions.stream().collect(Collectors.toList());
|
||||
log.info("list==="+list.toString());
|
||||
return new LoginUser(sysUserEntity,list);
|
||||
}
|
||||
}
|
115
ym-admin/src/main/java/com/cnbm/admin/utils/JwtUtil.java
Normal file
115
ym-admin/src/main/java/com/cnbm/admin/utils/JwtUtil.java
Normal file
@ -0,0 +1,115 @@
|
||||
package com.cnbm.admin.utils;
|
||||
|
||||
import io.jsonwebtoken.Claims;
|
||||
import io.jsonwebtoken.JwtBuilder;
|
||||
import io.jsonwebtoken.Jwts;
|
||||
import io.jsonwebtoken.SignatureAlgorithm;
|
||||
|
||||
import javax.crypto.SecretKey;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.util.Base64;
|
||||
import java.util.Date;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/8 1:43 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class JwtUtil {
|
||||
|
||||
//有效期为
|
||||
public static final Long JWT_TTL = 60 * 60 *1000L;// 60 * 60 *1000 一个小时
|
||||
//设置秘钥明文
|
||||
public static final String JWT_KEY = "why";
|
||||
|
||||
public static String getUUID(){
|
||||
String token = UUID.randomUUID().toString().replaceAll("-", "");
|
||||
return token;
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成jtw
|
||||
* @param subject token中要存放的数据(json格式)
|
||||
* @return
|
||||
*/
|
||||
public static String createJWT(String subject) {
|
||||
JwtBuilder builder = getJwtBuilder(subject, null, getUUID());// 设置过期时间
|
||||
return builder.compact();
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成jtw
|
||||
* @param subject token中要存放的数据(json格式)
|
||||
* @param ttlMillis token超时时间
|
||||
* @return
|
||||
*/
|
||||
public static String createJWT(String subject, Long ttlMillis) {
|
||||
JwtBuilder builder = getJwtBuilder(subject, ttlMillis, getUUID());// 设置过期时间
|
||||
return builder.compact();
|
||||
}
|
||||
|
||||
private static JwtBuilder getJwtBuilder(String subject, Long ttlMillis, String uuid) {
|
||||
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
|
||||
SecretKey secretKey = generalKey();
|
||||
long nowMillis = System.currentTimeMillis();
|
||||
Date now = new Date(nowMillis);
|
||||
if(ttlMillis==null){
|
||||
ttlMillis=JwtUtil.JWT_TTL;
|
||||
}
|
||||
long expMillis = nowMillis + ttlMillis;
|
||||
Date expDate = new Date(expMillis);
|
||||
return Jwts.builder()
|
||||
.setId(uuid) //唯一的ID
|
||||
.setSubject(subject) // 主题 可以是JSON数据
|
||||
.setIssuer("why") // 签发者
|
||||
.setIssuedAt(now) // 签发时间
|
||||
.signWith(signatureAlgorithm, secretKey) //使用HS256对称加密算法签名, 第二个参数为秘钥
|
||||
.setExpiration(expDate);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建token
|
||||
* @param id
|
||||
* @param subject
|
||||
* @param ttlMillis
|
||||
* @return
|
||||
*/
|
||||
public static String createJWT(String id, String subject, Long ttlMillis) {
|
||||
JwtBuilder builder = getJwtBuilder(subject, ttlMillis, id);// 设置过期时间
|
||||
return builder.compact();
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
// String jwt = createJWT("123");
|
||||
Claims claims = parseJWT("eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI5OWNhNGJhMjg5ZjU0OTVjODE5YTM0N2ExZmNlZjc0YSIsInN1YiI6IjEyMyIsImlzcyI6IndoeSIsImlhdCI6MTY1NDc1OTg5NiwiZXhwIjoxNjU0NzYzNDk2fQ.CTgS6yQjfXSGPJUTu-_rqjkh_KB_F9SzPThFfnvB5yg");
|
||||
String subject = claims.getSubject();
|
||||
System.out.println(subject);
|
||||
// System.out.println(claims);
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成加密后的秘钥 secretKey
|
||||
* @return
|
||||
*/
|
||||
public static SecretKey generalKey() {
|
||||
byte[] encodedKey = Base64.getDecoder().decode(JwtUtil.JWT_KEY);
|
||||
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
|
||||
return key;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析
|
||||
*
|
||||
* @param jwt
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static Claims parseJWT(String jwt) throws Exception {
|
||||
SecretKey secretKey = generalKey();
|
||||
return Jwts.parser()
|
||||
.setSigningKey(secretKey)
|
||||
.parseClaimsJws(jwt)
|
||||
.getBody();
|
||||
}
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package com.cnbm.admin.utils;
|
||||
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
|
||||
/**
|
||||
* @Author weihongyang
|
||||
* @Date 2022/6/10 1:57 PM
|
||||
* @Version 1.0
|
||||
*/
|
||||
public class PasswordUtils {
|
||||
private static PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
|
||||
|
||||
/**
|
||||
* 加密
|
||||
* @param str 字符串
|
||||
* @return 返回加密字符串
|
||||
*/
|
||||
public static String encode(String str){
|
||||
return passwordEncoder.encode(str);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 比较密码是否相等
|
||||
* @param str 明文密码
|
||||
* @param password 加密后密码
|
||||
* @return true:成功 false:失败
|
||||
*/
|
||||
public static boolean matches(String str, String password){
|
||||
return passwordEncoder.matches(str, password);
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
String str = "admin";
|
||||
String password = encode(str);
|
||||
|
||||
System.out.println(password);
|
||||
System.out.println(matches(str, password));
|
||||
}
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user