提交 9d1d89ed authored 作者: inroi's avatar inroi

微调

上级
HELP.md
target/
log/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
<?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>semiconductor.server.parent</groupId>
<artifactId>semiconductor-server</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>semiconductor-common</module>
<module>semiconductor-auth</module>
<module>semiconductor-system</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<swagger.version>2.9.2</swagger.version>
<swagger.bootstrap.version>1.9.6</swagger.bootstrap.version>
<druid.version>1.2.1</druid.version>
<mybatis.version>3.4.2</mybatis.version>
<fastjson.version>1.2.73</fastjson.version>
<json.lib.version>2.4</json.lib.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>semiconductor.server.common</groupId>
<artifactId>semiconductor-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>semiconductor.server.auth</groupId>
<artifactId>semiconductor-auth</artifactId>
<version>${project.version}</version>
</dependency>
<!-- Mysql -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- Mysql -->
<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>${swagger.bootstrap.version}</version>
</dependency>
<!-- Swagger -->
<!-- Common -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>${json.lib.version}</version>
<classifier>jdk15</classifier>
</dependency>
<!-- Common -->
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER Inori
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN mkdir -p /semiconductor-auth
WORKDIR /semiconductor-auth
EXPOSE 8080
ADD ./target/semiconductor-auth.jar /semiconductor-auth
CMD sleep 15;java -Djava.security.egd=file:/dev/./urandom -jar semiconductor-auth.jar
\ No newline at end of file
/*
SQLyog Enterprise v13.1.1 (64 bit)
MySQL - 5.7.6 : Database - db_semiconductor
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_semiconductor` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `db_semiconductor`;
/*Table structure for table `tb_user` */
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`avatar` VARCHAR(255) DEFAULT NULL COMMENT '头像',
`account` VARCHAR(128) DEFAULT NULL COMMENT '账号(支持中文、英文、数字)',
`password` VARCHAR(128) DEFAULT NULL COMMENT '密码(MD5加密)',
`salt` VARCHAR(64) DEFAULT NULL COMMENT 'MD5密码盐',
`dept_id` int(11) DEFAULT NULL COMMENT '部门ID',
`name` VARCHAR(64) DEFAULT NULL COMMENT '姓名',
`birthday` DATETIME DEFAULT NULL COMMENT '生日',
`sex` TINYINT(1) DEFAULT NULL COMMENT '性别',
`mobile` VARCHAR(64) DEFAULT NULL COMMENT '手机号',
`email` VARCHAR(64) DEFAULT NULL COMMENT '邮箱',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`status` TINYINT(2) DEFAULT 0 COMMENT '状态(0:正常,-1:禁用)',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='系统用户表';
/*Data for the table `tb_user` */
/*Table structure for table `tb_user_role` */
DROP TABLE IF EXISTS `tb_user_role`;
CREATE TABLE `tb_user_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`user_id` int(11) DEFAULT NULL COMMENT '用户ID',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户角色关系表';
/*Data for the table `tb_user_role` */
/*Table structure for table `tb_role` */
DROP TABLE IF EXISTS `tb_role`;
CREATE TABLE `tb_role` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`name` varchar(64) DEFAULT NULL COMMENT '角色名',
`sort_order` int(11) DEFAULT NULL COMMENT '排序',
`desc` varchar(255) DEFAULT NULL COMMENT '提示信息',
`status` tinyint(2) DEFAULT '0' COMMENT '状态(0:正常,-1:废弃)',
`built_in` tinyint(1) DEFAULT '0' COMMENT '是否内置(1:是,0:否,内置不能删除)',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统角色表';
/*Data for the table `tb_role` */
/*Table structure for table `tb_role_menu` */
DROP TABLE IF EXISTS `tb_role_menu`;
CREATE TABLE `tb_role_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`role_id` int(11) DEFAULT NULL COMMENT '角色ID',
`menu_id` int(11) DEFAULT NULL COMMENT '菜单ID',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='角色菜单关系表';
/*Data for the table `tb_role_menu` */
/*Table structure for table `tb_menu` */
DROP TABLE IF EXISTS `tb_menu`;
CREATE TABLE `tb_menu` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`pid` INT(11) DEFAULT NULL COMMENT '父ID',
`name` VARCHAR(128) DEFAULT NULL COMMENT '名称',
`path` VARCHAR(128) DEFAULT NULL COMMENT '名称',
`icon` VARCHAR(128) DEFAULT NULL COMMENT '图标',
`sort_order` INT(11) DEFAULT NULL COMMENT '排序',
`level` INT(11) DEFAULT NULL COMMENT '层级',
`type` VARCHAR(64) DEFAULT NULL COMMENT '类型(PLATFORM:平台,MENU:菜单,BUTTON:按钮)',
`desc` VARCHAR(128) DEFAULT NULL COMMENT '备注',
`status` TINYINT(2) DEFAULT 0 COMMENT '状态(0:正常,-1:禁用)',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` VARCHAR(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='菜单表(含平台、菜单、按钮)';
/*Data for the table `tb_menu` */
/*Table structure for table `tb_dept` */
DROP TABLE IF EXISTS `tb_dept`;
CREATE TABLE `tb_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`pid` int(11) DEFAULT NULL COMMENT '父节点ID',
`name` varchar(128) DEFAULT NULL COMMENT '机构名称',
`contacts` varchar(64) DEFAULT NULL COMMENT '联系人',
`mobile` varchar(64) DEFAULT NULL COMMENT '手机号',
`address` varchar(255) DEFAULT NULL COMMENT '机构地址',
`desc` varchar(255) DEFAULT NULL COMMENT '备注',
`sort_order` int(11) DEFAULT NULL COMMENT '排序,按照正序排列',
`status` tinyint(2) DEFAULT '0' COMMENT '状态(0:正常,-1:禁用)',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='部门表';
/*Data for the table `tb_dept` */
\ No newline at end of file
FROM mysql:latest
MAINTAINER Inori
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY ./Api.sql /docker-entrypoint-initdb.d
\ No newline at end of file
version: '2'
services:
semiconductor-mysql:
build:
context: ./db
environment:
MYSQL_ROOT_PASSWORD: gf^*i6%&9J83&(*kJ653F&L
restart: always
container_name: semiconductor-mysql
image: semiconductor-mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
ports:
- 3306:3306
semiconductor-auth:
build:
context: ./
restart: always
container_name: semiconductor-auth
image: semiconductor-auth
ports:
- 8080:8080
\ No newline at end of file
<?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>semiconductor-server</artifactId>
<groupId>semiconductor.server.parent</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>semiconductor.server.auth</groupId>
<artifactId>semiconductor-auth</artifactId>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- 通用模块 -->
<dependency>
<groupId>semiconductor.server.common</groupId>
<artifactId>semiconductor-common</artifactId>
</dependency>
<!-- SpringBoot -->
<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>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<!-- Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<!-- Mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!-- Tool -->
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-heading-anchor</artifactId>
<version>0.10.0</version>
</dependency>
<dependency>
<groupId>com.atlassian.commonmark</groupId>
<artifactId>commonmark-ext-gfm-tables</artifactId>
<version>0.10.0</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
</build>
</project>
\ No newline at end of file
package com.auth;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author Inori
*/
@MapperScan("com.auth.dao")
@SpringBootApplication(scanBasePackages = "com")
public class AuthApplication {
public static void main(String[] args) {
SpringApplication.run(AuthApplication.class, args);
}
}
package com.auth.common.constants;
/**
* jwt相关配置
*
* @author Inori
*/
public interface JwtConstants {
String AUTH_HEADER = "Authorization";
String BEARER = "Bearer ";
String SECRET = "TempSecret";
Long EXPIRATION = 604800L;
}
package com.auth.common.controller;
import com.auth.common.constants.JwtConstants;
import com.auth.model.User;
import com.auth.serivce.IUserService;
import com.auth.utils.JwtTokenUtil;
import com.core.common.HttpContext;
import com.core.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.Objects;
/**
* @author Inori
*/
public class BaseRestController {
@Autowired
private IUserService userService;
public static final String TEMP = "semiconductor";
public static final String ADMIN = "admin";
/**
* 获取token
*/
protected String getJwtToken() {
String requestHeader = Objects.requireNonNull(HttpContext.getRequest()).getHeader(JwtConstants.AUTH_HEADER);
String authToken;
if (requestHeader != null && requestHeader.startsWith(JwtConstants.BEARER)) {
authToken = requestHeader.substring(7);
} else {
authToken = requestHeader;
}
return authToken;
}
/**
* 获取当前用户的ID
*/
protected String getUserAccount() {
String token = getJwtToken();
if (StringUtil.isNotBlank(token)) {
String username = JwtTokenUtil.getUsernameFromToken(token);
String[] split = username.split(":");
if (split.length < 2) {
return "";
}
if (!split[0].equals(TEMP) && !split[1].equals(ADMIN)) {
return "";
}
return split[split.length - 1];
}
return "";
}
/**
* 获取当前用户
*/
protected User getUser() {
String userAccount = getUserAccount();
if (StringUtil.isBlank(userAccount)) {
return null;
}
return userService.getBaseMapper().selectById(userAccount);
}
}
package com.auth.config;
import com.auth.interceptor.LoginInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author Inori
*/
@Configuration
public class AuthMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// registry.addInterceptor(loginInterceptor).excludePathPatterns(
// "/api/auth/**", "/swagger-ui.html",
// "/swagger-resources/**", "/webjars/**", "/*/api-docs",
// "/api/kingdee/log/list", "/api/ims/log/list", "/api/updateThirdData"
// );
}
}
\ No newline at end of file
package com.auth.config;
import com.core.common.RedisObjectSerializer;
import com.core.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
/**
* @author Inori
*/
@Configuration
public class RedisConfig {
@Value("${spring.redis.maxIdle}")
private Integer maxIdle;
@Value("${spring.redis.maxWaitMillis}")
private Integer maxWaitMillis;
@Value("${spring.redis.maxTotal}")
private Integer maxTotal;
@Value("${spring.redis.testOnBorrow}")
private boolean testOnBorrow;
@Value("${spring.redis.hostname}")
private String hostname;
@Value("${spring.redis.port}")
private Integer port;
@Value("${spring.redis.password}")
private String password;
@Value("${spring.redis.timeout}")
private Integer timeout;
/**
* JedisPoolConfig 连接池
*/
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
// 最大空闲数
jedisPoolConfig.setMaxIdle(maxIdle);
// 连接池的最大数据库连接数
jedisPoolConfig.setMaxTotal(maxTotal);
// 最大建立连接等待时间
jedisPoolConfig.setMaxWaitMillis(maxWaitMillis);
// 是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
jedisPoolConfig.setTestOnBorrow(testOnBorrow);
return jedisPoolConfig;
}
/**
* 单机版配置
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig jedisPoolConfig) {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig);
//连接池
jedisConnectionFactory.setPoolConfig(jedisPoolConfig);
//超时时间
jedisConnectionFactory.setTimeout(timeout);
//IP地址
jedisConnectionFactory.setHostName(hostname);
//端口号
jedisConnectionFactory.setPort(port);
//如果Redis设置有密码
jedisConnectionFactory.setPassword(password);
//客户端超时时间单位是毫秒
jedisConnectionFactory.setTimeout(5000);
return jedisConnectionFactory;
}
/**
* 实例化 RedisTemplate 对象
*/
@Bean
public RedisTemplate<String, Object> functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
return redisTemplate;
}
/**
* 设置数据存入 redis 的序列化方式,并开启事务
*/
private void initDomainRedisTemplate(RedisTemplate<String, Object> redisTemplate, RedisConnectionFactory factory) {
//如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new RedisObjectSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new RedisObjectSerializer());
redisTemplate.setValueSerializer(new RedisObjectSerializer());
// 关闭事务,支持codis
redisTemplate.setEnableTransactionSupport(false);
redisTemplate.setConnectionFactory(factory);
}
@Bean(name = "redisUtil")
public RedisUtil redisUtil(RedisTemplate<String, Object> redisTemplate) {
RedisUtil redisUtil = new RedisUtil();
redisUtil.setRedisTemplate(redisTemplate);
return redisUtil;
}
}
package com.auth.controller;
import com.auth.common.controller.BaseRestController;
import com.core.response.RestResponse;
import com.auth.serivce.IDeptService;
import com.auth.transfer.dept.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "部门管理")
@RestController
@RequestMapping("/api")
public class DeptController extends BaseRestController {
@Autowired
private IDeptService deptService;
@ApiOperation("部门列表")
@GetMapping("/dept/list")
public RestResponse deptList(@ModelAttribute @Validated DeptListInVo inVo) {
DeptListOutVo outVo = deptService.deptList(this, inVo);
return RestResponse.success(outVo);
}
@ApiOperation("录入部门")
@PostMapping("/dept/create")
public RestResponse deptCreate(@RequestBody @Validated DeptCreateInVo inVo) {
inVo.setCreateBy(getUser().getName());
deptService.deptCreate(this, inVo);
return RestResponse.success();
}
@ApiOperation("修改部门")
@PutMapping("/dept/update")
public RestResponse deptUpdate(@RequestBody @Validated DeptUpdateInVo inVo) {
inVo.setUpdateBy(getUser().getName());
deptService.deptUpdate(this, inVo);
return RestResponse.success();
}
@ApiOperation("删除部门")
@DeleteMapping("/dept/delete")
public RestResponse deptDelete(@ModelAttribute @Validated DeptDeleteInVo inVo) {
deptService.deptDelete(this, inVo);
return RestResponse.success();
}
}
package com.auth.controller;
import com.core.response.RestResponse;
import com.auth.serivce.ILoginService;
import com.auth.transfer.login.AuthLoginInVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "系统登陆")
@RestController
@RequestMapping("/api")
public class LoginController {
@Autowired
private ILoginService loginService;
@ApiOperation("系统登陆")
@PostMapping("/auth/login")
public RestResponse authLogin(@RequestBody @Validated AuthLoginInVo inVo) {
return loginService.authLogin(inVo);
}
@ApiOperation("登陆验证码")
@GetMapping(value = "/auth/verify/code")
public RestResponse authVerifyCode() {
return loginService.authVerifyCode();
}
}
package com.auth.controller;
import com.auth.common.controller.BaseRestController;
import com.core.response.RestResponse;
import com.auth.serivce.IMenuService;
import com.auth.transfer.menu.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "菜单管理")
@RestController
@RequestMapping("/api")
public class MenuController extends BaseRestController {
@Autowired
private IMenuService menuService;
@ApiOperation("菜单列表")
@GetMapping("/menu/list")
public RestResponse menuList(@ModelAttribute @Validated MenuListInVo inVo) {
MenuListOutVo outVo = menuService.menuList(this, inVo);
return RestResponse.success(outVo);
}
@ApiOperation("录入菜单")
@PostMapping("/menu/create")
public RestResponse menuCreate(@RequestBody @Validated MenuCreateInVo inVo) {
inVo.setCreateBy(getUser().getName());
menuService.menuCreate(this, inVo);
return RestResponse.success();
}
@ApiOperation("修改菜单")
@PutMapping("/menu/update")
public RestResponse menuUpdate(@RequestBody @Validated MenuUpdateInVo inVo) {
inVo.setUpdateBy(getUser().getName());
menuService.menuUpdate(this, inVo);
return RestResponse.success();
}
@ApiOperation("删除菜单")
@DeleteMapping("/menu/delete")
public RestResponse menuDelete(@ModelAttribute @Validated MenuDeleteInVo inVo) {
menuService.menuDelete(this, inVo);
return RestResponse.success();
}
}
package com.auth.controller;
import com.auth.common.controller.BaseRestController;
import com.core.response.RestResponse;
import com.auth.serivce.IRoleService;
import com.auth.transfer.role.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 角色管理
*
* @author Inori
*/
@Api(tags = "角色管理")
@RestController
@RequestMapping("/api")
public class RoleController extends BaseRestController {
@Autowired
private IRoleService roleService;
@ApiOperation("角色列表")
@GetMapping("/role/list")
public RestResponse roleList(@ModelAttribute @Validated RoleListInVo inVo) {
RoleListOutVo outVo = roleService.roleList(this, inVo);
return RestResponse.success(outVo);
}
@ApiOperation("录入角色")
@PostMapping("/role/create")
public RestResponse roleCreate(@RequestBody @Validated RoleCreateInVo inVo) {
inVo.setCreateBy(getUser().getName());
return roleService.roleCreate(this, inVo);
}
@ApiOperation("修改角色")
@PutMapping("/role/update")
public RestResponse roleUpdate(@RequestBody @Validated RoleUpdateInVo inVo) {
inVo.setUpdateBy(getUser().getName());
return roleService.roleUpdate(this, inVo);
}
@ApiOperation("删除角色")
@DeleteMapping("/role/delete")
public RestResponse roleDelete(@ModelAttribute @Validated RoleDeleteInVo inVo) {
return roleService.roleDelete(this, inVo);
}
@ApiOperation("获取角色权限树")
@GetMapping("/role/permission/tree")
public RestResponse rolePermissionTree(@ModelAttribute @Validated RolePermissionTreeInVo inVo) {
RolePermissionTreeOutVo outVo = roleService.rolePermissionTree(this, inVo);
return RestResponse.success(outVo);
}
@ApiOperation("修改角色权限")
@PutMapping("/role/permission/update")
public RestResponse rolePermissionUpdate(@RequestBody @Validated RolePermissionUpdateInVo inVo) {
return roleService.rolePermissionUpdate(this, inVo);
}
}
\ No newline at end of file
package com.auth.controller;
import com.auth.common.controller.BaseRestController;
import com.auth.serivce.IUserService;
import com.auth.transfer.user.*;
import com.core.response.RestResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author Inori
*/
@Api(tags = "用户管理")
@RestController
@RequestMapping("/api")
public class UserController extends BaseRestController {
@Autowired
private IUserService userService;
@ApiOperation("用户列表")
@GetMapping("/user/list")
public RestResponse userList(@ModelAttribute @Validated UserListInVo inVo) {
UserListOutVo outVo = userService.userList(this, inVo);
return RestResponse.success(outVo);
}
@ApiOperation("用户录入")
@PostMapping("/user/create")
public RestResponse userCreate(@RequestBody @Validated UserCreateInVo inVo) {
inVo.setCreateBy(getUser().getName());
return userService.userCreate(this, inVo);
}
@ApiOperation("用户编辑")
@PutMapping("/user/update")
public RestResponse userUpdate(@RequestBody @Validated UserUpdateInVo inVo) {
inVo.setUpdateBy(getUser().getName());
return userService.userUpdate(this, inVo);
}
@ApiOperation("用户删除")
@DeleteMapping("/user/delete")
public RestResponse userDelete(@ModelAttribute @Validated UserDeleteInVo inVo) {
inVo.setMe(getUserAccount());
return userService.userDelete(this, inVo);
}
@ApiOperation("用户登录信息")
@GetMapping("/user/info")
public RestResponse userInfo() {
UserInfoOutVo outVo = userService.userInfo(this, Integer.parseInt(getUserAccount()));
return RestResponse.success(outVo);
}
@ApiOperation("用户登录权限")
@GetMapping("/user/permission")
public RestResponse userPermission() {
UserPermissionOutVo outVo = userService.userPermission(this, Integer.parseInt(getUserAccount()));
return RestResponse.success(outVo);
}
@ApiOperation("修改密码")
@PutMapping("/user/password/update")
public RestResponse userPasswordUpdate(@RequestBody @Validated UserPasswordUpdateInVo inVo) {
inVo.setUser(getUser());
return userService.userPasswordUpdate(this, inVo);
}
}
package com.auth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.auth.model.Dept;
import com.auth.transfer.dept.DeptListInVo;
import com.auth.transfer.dept.DeptListOutVoRecords;
import java.util.List;
/**
* @author Inori
*/
public interface DeptMapper extends BaseMapper<Dept> {
/**
* 部门列表
*
* @param inVo 条件
* @return 列表
*/
List<DeptListOutVoRecords> deptList(DeptListInVo inVo);
}
package com.auth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.auth.model.Menu;
import com.auth.transfer.menu.MenuListInVo;
import com.auth.transfer.menu.MenuListOutVoRecords;
import java.util.List;
/**
* @author Inori
*/
public interface MenuMapper extends BaseMapper<Menu> {
/**
* 菜单列表
*
* @param inVo 条件
* @return 列表
*/
List<MenuListOutVoRecords> menuList(MenuListInVo inVo);
}
package com.auth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.auth.model.Menu;
import com.auth.model.Role;
import com.auth.transfer.role.RoleListInVo;
import com.auth.transfer.role.RoleListOutVoRecords;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Inori
*/
public interface RoleMapper extends BaseMapper<Role> {
/**
* 角色列表
*
* @param page 分页
* @param inVo 条件
* @return 列表
*/
List<RoleListOutVoRecords> roleList(@Param("page") Page<RoleListOutVoRecords> page, @Param("inVo") RoleListInVo inVo);
/**
* 获取角色权限树
*
* @param roleId 角色ID
* @return 角色权限树
*/
List<Menu> getMenuListByRoleId(Integer roleId);
/**
* 用户登录权限
*
* @param userId 用户ID
* @return 用户登录权限
*/
List<Menu> getMenuListByUserId(Integer userId);
}
\ No newline at end of file
package com.auth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.auth.model.RoleMenu;
/**
* @author Inori
*/
public interface RoleMenuMapper extends BaseMapper<RoleMenu> {
}
package com.auth.dao;
import com.auth.model.User;
import com.auth.transfer.user.UserInfoOutVo;
import com.auth.transfer.user.UserListInVo;
import com.auth.transfer.user.UserListOutVoRecords;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
* @author Inori
*/
public interface UserMapper extends BaseMapper<User> {
/**
* 用户列表
*
* @param page 分页
* @param inVo 条件
* @return 列表
*/
List<UserListOutVoRecords> userList(@Param("page") Page<UserListOutVoRecords> page, @Param("inVo") UserListInVo inVo);
/**
* 用户信息
*
* @param userId 用户ID
* @return 用户信息
*/
UserInfoOutVo userInfo(Integer userId);
}
package com.auth.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.auth.model.UserRole;
/**
* 用户角色关系表 Mapper 接口
*
* @author Inori
*/
public interface UserRoleMapper extends BaseMapper<UserRole> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.auth.dao.DeptMapper">
<select id="deptList" parameterType="com.auth.transfer.dept.DeptListInVo" resultType="com.auth.transfer.dept.DeptListOutVoRecords">
SELECT
id, pid, `name`, contacts, mobile, address, `desc`, sort_order, status, create_time, create_by
FROM tb_dept
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.auth.dao.MenuMapper">
<select id="menuList" parameterType="com.auth.transfer.menu.MenuListInVo" resultType="com.auth.transfer.menu.MenuListOutVoRecords">
SELECT
id, `code`, pcode, `name`, path, icon, sort_order, `level`, `type`, `desc`, status, create_time
FROM tb_menu
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.auth.dao.RoleMapper">
<select id="roleList" parameterType="com.auth.transfer.role.RoleListInVo" resultType="com.auth.transfer.role.RoleListOutVoRecords">
SELECT
id, `name`, sort_order, `desc`, built_in, create_time, create_by,, update_time, update_by
FROM t_role WHERE status = 0
<if test="roleName != null and roleName != ''">
AND `name` LIKE concat("%", #{roleName}, "%")
</if>
ORDER BY sort_order
</select>
<select id="getMenuListByRoleId" parameterType="int" resultType="com.auth.model.Menu">
SELECT
m.id, `code`, pcode, `name`, `type`,
CASE
WHEN rm.id IS NULL THEN false
ELSE true
END permission
FROM tb_menu m
LEFT JOIN tb_role_menu rm ON rm.role_id = #{roleId} AND rm.menu_id = m.id
ORDER BY m.id ASC
</select>
<select id="getMenuListByUserId" parameterType="int" resultType="com.auth.model.Menu">
SELECT
m.id, `code`, pcode, `name`, path, icon, assembly, sort_order, `type`
FROM tb_menu AS m
INNER JOIN tb_role_menu AS rm ON m.id = rm.menu_id AND rm.role_id IN (SELECT role_id FROM tb_user_role WHERE user_id = #{userId})
ORDER BY m.id
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.auth.dao.RoleMenuMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.auth.dao.UserMapper">
<resultMap id="userMap" type="com.auth.transfer.user.UserListOutVoRecords">
<result property="id" column="id"/>
<result property="account" column="account"/>
<result property="deptId" column="dept_id"/>
<result property="deptName" column="dept_name"/>
<result property="name" column="name"/>
<result property="mobile" column="mobile"/>
<result property="email" column="email"/>
<result property="address" column="address"/>
<result property="status" column="status"/>
<result property="createTime" column="create_time"/>
<collection property="roles" javaType="List" select="userRoleList" column="id"/>
</resultMap>
<select id="userList" parameterType="com.auth.transfer.user.UserListInVo" resultMap="userMap">
SELECT
u.id, u.account, d.id AS dept_id, d.name AS dept_name, u.name,
u.mobile, u.email, u.address, u.status, u.create_time
FROM tb_user AS u
LEFT JOIN tb_dept AS d ON u.dept_id = d.id
WHERE u.status = 0
<if test="inVo.name != null and inVo.name != ''">
AND u.name LIKE CONCAT("%", #{inVo.name}, "%")
</if>
ORDER BY u.create_time DESC
</select>
<select id="userRoleList" resultType="com.auth.transfer.user.UserListOutVoRecordsRoles">
SELECT
r.id AS roleId, r.name AS roleName
FROM tb_user_role AS ur
LEFT JOIN tb_role AS r ON ur.role_id = r.id
WHERE ur.user_id = #{id}
</select>
<resultMap id="userInfoMap" type="com.auth.transfer.user.UserInfoOutVo">
<result property="id" column="id"/>
<result property="account" column="account"/>
<result property="name" column="name"/>
<result property="mobile" column="mobile"/>
<result property="email" column="email"/>
<result property="address" column="address"/>
<collection property="roles" javaType="List" select="userRoleList" column="id"/>
</resultMap>
<select id="userInfo" parameterType="java.lang.Integer" resultMap="userInfoMap">
SELECT u.id, u.account, u.name, u.mobile, u.email, u.address FROM tb_user AS u WHERE u.id = #{userId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.auth.dao.UserRoleMapper">
</mapper>
package com.auth.interceptor;
import com.alibaba.fastjson.JSON;
import com.auth.common.controller.BaseRestController;
import com.auth.model.User;
import com.core.response.RestResponse;
import com.core.utils.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* @author Inori
*/
@Slf4j
@Component
public class LoginInterceptor extends BaseRestController implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//设置编码格式
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
User user = getUser();
if (StringUtil.isNull(user)) {
RestResponse restResponse = RestResponse.fail("请先进行登录").setCode(RestResponse.CODE_TOKEN_NOTFOUND);
try (PrintWriter printWriter = response.getWriter()) {
printWriter.write(JSON.toJSONString(restResponse));
} catch (IOException e) {
log.info(e.getMessage(), e);
}
return false;
}
return true;
}
}
\ No newline at end of file
package com.auth.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.util.Date;
/**
* 部门表
*
* @author Inori
*/
@TableName("tb_dept")
public class Dept {
/**
* 机构ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 父节点ID
*/
private Integer pid;
/**
* 机构名称
*/
private String name;
/**
* 联系人
*/
private String contacts;
/**
* 手机号
*/
private String mobile;
/**
* 机构地址
*/
private String address;
/**
* 备注
*/
private String desc;
/**
* 排序,按照正序排列
*/
private Integer sortOrder;
/**
* 状态(0:正常,-1:禁用)
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 创建人
*/
private String createBy;
/**
* 更新时间
*/
private Date updateTime;
/**
* 更新人
*/
private String updateBy;
public Dept() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getPid() {
return pid;
}
public void setPid(Integer pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getContacts() {
return contacts;
}
public void setContacts(String contacts) {
this.contacts = contacts;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getSortOrder() {
return sortOrder;
}
public void setSortOrder(Integer sortOrder) {
this.sortOrder = sortOrder;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
}
package com.auth.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 菜单表(含平台、菜单、按钮)
*
* @author Inori
*/
@TableName("tb_menu")
public class Menu {
/**
* 自增ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 编码
*/
private String code;
/**
* 父编码
*/
private String pcode;
/**
* 路径
*/
private String path;
/**
* 名称
*/
private String name;
/**
* 图标
*/
private String icon;
/**
* 组件
*/
private String assembly;
/**
* 排序
*/
private Integer sortOrder;
/**
* 层级
*/
private Integer level;
/**
* 类型(PLATFORM:平台,MENU:菜单,BUTTON:按钮)
*/
private String type;
/**
* 备注
*/
private String desc;
/**
* 状态(0:正常,-1:禁用)
*/
private Integer status;
/**
* 创建时间
*/
private String createTime;
/**
* 创建人
*/
private String createBy;
/**
* 更新时间
*/
private String updateTime;
/**
* 更新人
*/
private String updateBy;
/**
* 权限
*/
@TableField(exist = false)
private Boolean permission;
public Menu() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getPcode() {
return pcode;
}
public void setPcode(String pcode) {
this.pcode = pcode;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getAssembly() {
return assembly;
}
public void setAssembly(String assembly) {
this.assembly = assembly;
}
public Integer getSortOrder() {
return sortOrder;
}
public void setSortOrder(Integer sortOrder) {
this.sortOrder = sortOrder;
}
public Integer getLevel() {
return level;
}
public void setLevel(Integer level) {
this.level = level;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
public Boolean getPermission() {
return permission;
}
public void setPermission(Boolean permission) {
this.permission = permission;
}
}
package com.auth.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 系统角色表
*
* @author Inori
*/
@TableName("tb_role")
public class Role {
/**
* 自增ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 角色名
*/
private String name;
/**
* 排序
*/
private Integer sortOrder;
/**
* 提示信息
*/
private String desc;
/**
* 状态(0:正常,-1:禁用)
*/
private Integer status;
/**
* 是否内置(1:是,0:否,内置不能删除)
*/
private Integer builtIn;
/**
* 创建时间
*/
private String createTime;
/**
* 创建人
*/
private String createBy;
/**
* 更新时间
*/
private String updateTime;
/**
* 更新人
*/
private String updateBy;
public Role() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSortOrder() {
return sortOrder;
}
public void setSortOrder(Integer sortOrder) {
this.sortOrder = sortOrder;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getBuiltIn() {
return builtIn;
}
public void setBuiltIn(Integer builtIn) {
this.builtIn = builtIn;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
}
package com.auth.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 角色菜单关系表
*
* @author Inori
*/
@TableName("tb_role_menu")
public class RoleMenu {
/**
* 自增ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 角色ID
*/
private Integer roleId;
/**
* 菜单ID
*/
private Integer menuId;
public RoleMenu() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
}
package com.auth.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 用户表
*
* @author Inori
*/
@TableName("tb_user")
public class User {
/**
* 用户ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 账号(支持中文、英文、数字)
*/
private String account;
/**
* 密码(MD5加密)
*/
private String password;
/**
* MD5密码盐
*/
private String salt;
/**
* 部门ID
*/
private Integer deptId;
/**
* 姓名
*/
private String name;
/**
* 生日
*/
private String birthday;
/**
* 性别
*/
private String sex;
/**
* 手机
*/
private String mobile;
/**
* 邮箱
*/
private String email;
/**
* 地址
*/
private String address;
/**
* 地址
*/
private Integer status;
/**
* 创建人
*/
private String createBy;
/**
* 创建时间
*/
private String createTime;
/**
* 更新时间
*/
private String updateTime;
/**
* 更新人
*/
private String updateBy;
public User() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSalt() {
return salt;
}
public void setSalt(String salt) {
this.salt = salt;
}
public Integer getDeptId() {
return deptId;
}
public void setDeptId(Integer deptId) {
this.deptId = deptId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public String getCreateBy() {
return createBy;
}
public void setCreateBy(String createBy) {
this.createBy = createBy;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public String getUpdateTime() {
return updateTime;
}
public void setUpdateTime(String updateTime) {
this.updateTime = updateTime;
}
public String getUpdateBy() {
return updateBy;
}
public void setUpdateBy(String updateBy) {
this.updateBy = updateBy;
}
}
package com.auth.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* 用户角色关系表
*
* @author Inori
*/
@TableName("tb_user_role")
public class UserRole {
/**
* 自增ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 用户ID
*/
private Integer userId;
/**
* 角色ID
*/
private Integer roleId;
public UserRole() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public Integer getRoleId() {
return roleId;
}
public void setRoleId(Integer roleId) {
this.roleId = roleId;
}
}
package com.auth.serivce;
import com.auth.common.controller.BaseRestController;
import com.auth.transfer.dept.*;
/**
* @author Inori
*/
public interface IDeptService {
/**
* 部门列表
*
* @param baseRestController 枷锁
* @param inVo 条件
* @return 列表
*/
DeptListOutVo deptList(BaseRestController baseRestController, DeptListInVo inVo);
/**
* 部门删除
*
* @param baseRestController 枷锁
* @param inVo 条件
*/
void deptCreate(BaseRestController baseRestController, DeptCreateInVo inVo);
/**
* 部门删除
*
* @param baseRestController 枷锁
* @param inVo 条件
*/
void deptUpdate(BaseRestController baseRestController, DeptUpdateInVo inVo);
/**
* 部门删除
*
* @param baseRestController 枷锁
* @param inVo 条件
*/
void deptDelete(BaseRestController baseRestController, DeptDeleteInVo inVo);
}
package com.auth.serivce;
import com.core.response.RestResponse;
import com.auth.transfer.login.AuthLoginInVo;
/**
* @author Inori
*/
public interface ILoginService {
/**
* 用户登陆
*
* @param inVo 条件
* @return 结果
*/
RestResponse authLogin(AuthLoginInVo inVo);
/**
* 获取验证码
*
* @return 结果
*/
RestResponse authVerifyCode();
}
package com.auth.serivce;
import com.auth.common.controller.BaseRestController;
import com.auth.transfer.menu.*;
/**
* @author Inori
*/
public interface IMenuService {
/**
* 菜单列表
*
* @param baseRestController 枷锁
* @param inVo 条件
* @return 列表
*/
MenuListOutVo menuList(BaseRestController baseRestController, MenuListInVo inVo);
/**
* 菜单删除
*
* @param baseRestController 枷锁
* @param inVo 条件
*/
void menuCreate(BaseRestController baseRestController, MenuCreateInVo inVo);
/**
* 菜单删除
*
* @param baseRestController 枷锁
* @param inVo 条件
*/
void menuUpdate(BaseRestController baseRestController, MenuUpdateInVo inVo);
/**
* 菜单删除
*
* @param baseRestController 枷锁
* @param inVo 条件
*/
void menuDelete(BaseRestController baseRestController, MenuDeleteInVo inVo);
}
package com.auth.serivce;
import com.auth.common.controller.BaseRestController;
import com.core.response.RestResponse;
import com.auth.transfer.role.*;
/**
* @author Inori
*/
public interface IRoleService {
/**
* 角色列表
*
* @param controller 枷锁
* @param inVo 条件
* @return 列表
*/
RoleListOutVo roleList(BaseRestController controller, RoleListInVo inVo);
/**
* 角色录入
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse roleCreate(BaseRestController controller, RoleCreateInVo inVo);
/**
* 角色编辑
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse roleUpdate(BaseRestController controller, RoleUpdateInVo inVo);
/**
* 角色删除
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse roleDelete(BaseRestController controller, RoleDeleteInVo inVo);
/**
* 获取角色权限树
*
* @param controller 枷锁
* @param inVo 条件
* @return 权限树
*/
RolePermissionTreeOutVo rolePermissionTree(BaseRestController controller, RolePermissionTreeInVo inVo);
/**
*修改角色权限
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse rolePermissionUpdate(BaseRestController controller, RolePermissionUpdateInVo inVo);
}
package com.auth.serivce;
import com.auth.common.controller.BaseRestController;
import com.auth.model.User;
import com.auth.transfer.user.*;
import com.baomidou.mybatisplus.extension.service.IService;
import com.core.response.RestResponse;
/**
* @author Inori
*/
public interface IUserService extends IService<User> {
/**
* 用户列表
*
* @param controller 枷锁
* @param inVo 条件
* @return 列表
*/
UserListOutVo userList(BaseRestController controller, UserListInVo inVo);
/**
* 用户录入
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse userCreate(BaseRestController controller, UserCreateInVo inVo);
/**
* 用户编辑
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse userUpdate(BaseRestController controller, UserUpdateInVo inVo);
/**
* 用户删除
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse userDelete(BaseRestController controller, UserDeleteInVo inVo);
/**
* 用户登陆信息
*
* @param controller 枷锁
* @param userId ID
* @return 登陆信息
*/
UserInfoOutVo userInfo(BaseRestController controller, Integer userId);
/**
* 用户登录权限
*
* @param controller 枷锁
* @param userId ID
* @return 登录权限
*/
UserPermissionOutVo userPermission(BaseRestController controller, Integer userId);
/**
* 修改密码
*
* @param controller 枷锁
* @param inVo 条件
* @return 结果
*/
RestResponse userPasswordUpdate(BaseRestController controller, UserPasswordUpdateInVo inVo);
}
package com.auth.serivce.impl;
import com.core.constants.Constants;
import com.auth.common.controller.BaseRestController;
import com.auth.dao.DeptMapper;
import com.auth.model.Dept;
import com.auth.serivce.IDeptService;
import com.auth.transfer.dept.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class DeptServiceImpl implements IDeptService {
@Autowired
private DeptMapper deptMapper;
@Override
public DeptListOutVo deptList(BaseRestController baseRestController, DeptListInVo inVo) {
List<DeptListOutVoRecords> recordsList = deptMapper.deptList(inVo);
DeptListOutVo outVo = new DeptListOutVo();
outVo.setTotal(recordsList.size());
outVo.setRecords(getMenuTree(Constants.ROOT_MENU_CODE, recordsList));
return outVo;
}
private List<DeptListOutVoRecords> getMenuTree(Integer pid, List<DeptListOutVoRecords> recordsList) {
List<DeptListOutVoRecords> rootList = recordsList.stream().filter(m -> m.getPid().equals(pid)).collect(Collectors.toList());
for (DeptListOutVoRecords records : rootList) {
records.setChildren(getMenuTree(records.getId(), recordsList));
}
return rootList;
}
@Override
public void deptCreate(BaseRestController baseRestController, DeptCreateInVo inVo) {
Dept dept = new Dept();
dept.setPid(inVo.getPid());
dept.setName(inVo.getName());
dept.setContacts(inVo.getContacts());
dept.setMobile(inVo.getMobile());
dept.setAddress(inVo.getAddress());
dept.setDesc(inVo.getDesc());
dept.setSortOrder(inVo.getSortOrder());
dept.setStatus(inVo.getStatus());
dept.setCreateBy(inVo.getCreateBy());
deptMapper.insert(dept);
}
@Override
public void deptUpdate(BaseRestController baseRestController, DeptUpdateInVo inVo) {
Dept dept = new Dept();
dept.setId(inVo.getId());
dept.setPid(inVo.getPid());
dept.setName(inVo.getName());
dept.setMobile(inVo.getMobile());
dept.setContacts(inVo.getContacts());
dept.setAddress(inVo.getAddress());
dept.setDesc(inVo.getDesc());
dept.setSortOrder(inVo.getSortOrder());
dept.setStatus(inVo.getStatus());
dept.setUpdateBy(inVo.getUpdateBy());
deptMapper.updateById(dept);
}
@Override
public void deptDelete(BaseRestController baseRestController, DeptDeleteInVo inVo) {
deptMapper.deleteById(inVo.getId());
}
}
package com.auth.serivce.impl;
import com.auth.common.controller.BaseRestController;
import com.auth.dao.UserMapper;
import com.auth.model.User;
import com.auth.serivce.ILoginService;
import com.auth.transfer.login.AuthLoginInVo;
import com.auth.transfer.login.AuthLoginOutVo;
import com.auth.utils.JwtTokenUtil;
import com.auth.utils.Md5Util;
import com.auth.utils.RandImageUtil;
import com.auth.utils.ValidateCodeUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.core.response.RestResponse;
import com.core.utils.RedisUtil;
import com.core.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
/**
* @author Inori
*/
@Service
public class LoginServiceImpl implements ILoginService {
@Autowired
private UserMapper userMapper;
@Autowired
private RedisUtil redisUtil;
@Override
public RestResponse authLogin(AuthLoginInVo inVo) {
String code = (String) redisUtil.get(Md5Util.encrypt(inVo.getCode().toLowerCase()));
if (StringUtil.isBlank(code) || !code.equalsIgnoreCase(inVo.getCode())) {
return RestResponse.fail("验证码错误");
}
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("account", inVo.getAccount());
queryWrapper.eq("password", Md5Util.encrypt(inVo.getPassword() + inVo.getAccount()));
User result = userMapper.selectOne(queryWrapper);
if (StringUtil.isNull(result)) {
return RestResponse.fail("账号或密码不正确");
}
if (result.getStatus() == -1) {
return RestResponse.fail("该账号已禁用,请联系管理员");
}
AuthLoginOutVo outVo = new AuthLoginOutVo();
outVo.setId(result.getId());
outVo.setToken(JwtTokenUtil.generateToken(BaseRestController.TEMP + ":" + BaseRestController.ADMIN + ":" + result.getId().toString()));
return RestResponse.success(outVo);
}
@Override
public RestResponse authVerifyCode() {
try {
String code = ValidateCodeUtil.createRandom(false, 4);
System.out.println("登陆验证码: " + code);
//转小写
String lowerCaseCode = code.toLowerCase();
String key = Md5Util.encrypt(lowerCaseCode);
redisUtil.set(key, code, 60);
return RestResponse.success(RandImageUtil.generate(code));
} catch (IOException e) {
e.printStackTrace();
return RestResponse.fail("验证码获取失败");
}
}
}
package com.auth.serivce.impl;
import com.core.constants.Constants;
import com.auth.common.controller.BaseRestController;
import com.auth.dao.MenuMapper;
import com.auth.model.Menu;
import com.auth.serivce.IMenuService;
import com.auth.transfer.menu.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class MenuServiceImpl implements IMenuService {
@Autowired
private MenuMapper menuMapper;
@Override
public MenuListOutVo menuList(BaseRestController baseRestController, MenuListInVo inVo) {
List<MenuListOutVoRecords> recordsList = menuMapper.menuList(inVo);
MenuListOutVo outVo = new MenuListOutVo();
outVo.setTotal(recordsList.size());
outVo.setRecords(getMenuTree(String.valueOf(Constants.ROOT_MENU_CODE), recordsList));
return outVo;
}
private List<MenuListOutVoRecords> getMenuTree(String pcode, List<MenuListOutVoRecords> recordsList) {
List<MenuListOutVoRecords> rootList = recordsList.stream().filter(m ->
m.getPcode().equals(pcode)).collect(Collectors.toList()
);
for (MenuListOutVoRecords records : rootList) {
records.setChildren(getMenuTree(records.getCode(), recordsList));
}
return rootList;
}
@Override
public void menuCreate(BaseRestController baseRestController, MenuCreateInVo inVo) {
Menu menu = new Menu();
menu.setCode(inVo.getCode());
menu.setPcode(inVo.getPcode());
menu.setName(inVo.getName());
menu.setPath(inVo.getPath());
menu.setIcon(inVo.getIcon());
menu.setAssembly(inVo.getAssembly());
menu.setSortOrder(inVo.getSortOrder());
menu.setLevel(inVo.getLevel());
menu.setType(inVo.getType());
menu.setDesc(inVo.getDesc());
menu.setStatus(inVo.getStatus());
menu.setCreateBy(inVo.getCreateBy());
menuMapper.insert(menu);
}
@Override
public void menuUpdate(BaseRestController baseRestController, MenuUpdateInVo inVo) {
Menu menu = new Menu();
menu.setId(inVo.getId());
menu.setName(inVo.getName());
menu.setCode(inVo.getCode());
menu.setPcode(inVo.getPcode());
menu.setIcon(inVo.getIcon());
menu.setAssembly(inVo.getAssembly());
menu.setPath(inVo.getPath());
menu.setLevel(inVo.getLevel());
menu.setSortOrder(inVo.getSortOrder());
menu.setType(inVo.getType());
menu.setDesc(inVo.getDesc());
menu.setStatus(inVo.getStatus());
menu.setCreateBy(inVo.getUpdateBy());
menuMapper.updateById(menu);
}
@Override
public void menuDelete(BaseRestController baseRestController, MenuDeleteInVo inVo) {
menuMapper.deleteById(inVo.getId());
}
}
package com.auth.serivce.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.constants.Constants;
import com.auth.common.controller.BaseRestController;
import com.core.response.RestResponse;
import com.auth.dao.RoleMapper;
import com.auth.dao.RoleMenuMapper;
import com.auth.model.Menu;
import com.auth.model.Role;
import com.auth.model.RoleMenu;
import com.auth.serivce.IRoleService;
import com.auth.transfer.role.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class RoleServiceImpl implements IRoleService {
@Autowired
private RoleMapper roleMapper;
@Autowired
private RoleMenuMapper roleMenuMapper;
@Override
public RoleListOutVo roleList(BaseRestController controller, RoleListInVo inVo) {
Page<RoleListOutVoRecords> page = new Page<>(inVo.getPageNo(), inVo.getPageSize());
List<RoleListOutVoRecords> recordsList = roleMapper.roleList(page, inVo);
RoleListOutVo outVo = new RoleListOutVo();
outVo.setTotal((int) page.getTotal());
outVo.setRecords(recordsList);
return outVo;
}
@Override
public RestResponse roleCreate(BaseRestController controller, RoleCreateInVo inVo) {
Role role = new Role();
role.setName(inVo.getName());
role.setSortOrder(inVo.getSortOrder());
role.setDesc(inVo.getDesc());
role.setCreateBy(inVo.getCreateBy());
return roleHandle(role);
}
@Override
public RestResponse roleUpdate(BaseRestController controller, RoleUpdateInVo inVo) {
Role role = new Role();
role.setId(inVo.getId());
role.setName(inVo.getName());
role.setSortOrder(inVo.getSortOrder());
role.setDesc(inVo.getDesc());
return roleHandle(role);
}
private RestResponse roleHandle(Role role) {
Integer roleId = role.getId();
if (roleId == null) {
//新增
Integer count = roleMapper.selectCount(new QueryWrapper<Role>()
.eq("name", role.getName())
.ne("status", -1));
if (count > 0) {
return RestResponse.fail("该角色名称已存在,请更换");
}
role.setStatus(0);
roleMapper.insert(role);
} else {
//修改
Integer count = roleMapper.selectCount(new QueryWrapper<Role>()
.eq("name", role.getName())
.ne("status", -1)
.ne("id", roleId));
if (count > 0) {
return RestResponse.fail("该角色名称已存在,请更换");
}
roleMapper.updateById(role);
}
return RestResponse.success();
}
@Override
public RestResponse roleDelete(BaseRestController controller, RoleDeleteInVo inVo) {
RestResponse checkUpdateStatus = checkUpdateStatus(inVo.getId());
if (!checkUpdateStatus.isSuccess()) {
return checkUpdateStatus;
}
roleMapper.deleteById(inVo.getId());
return RestResponse.success();
}
private RestResponse checkUpdateStatus(Integer roleId) {
Role role = roleMapper.selectById(roleId);
if (role == null || role.getStatus() == -1) {
return RestResponse.fail("角色不存在");
}
if (role.getBuiltIn() != null && role.getBuiltIn() == 1) {
return RestResponse.fail("内置角色,不能修改");
}
return RestResponse.success();
}
@Override
public RolePermissionTreeOutVo rolePermissionTree(BaseRestController controller, RolePermissionTreeInVo inVo) {
List<Menu> menuList = roleMapper.getMenuListByRoleId(inVo.getId());
List<RolePermissionTreeOutVoTreeRoot> allMenuList = menuList.stream().map(menu -> {
RolePermissionTreeOutVoTreeRoot treeRoot = new RolePermissionTreeOutVoTreeRoot();
treeRoot.setId(menu.getId());
treeRoot.setCode(menu.getCode());
treeRoot.setPcode(menu.getPcode());
treeRoot.setPath(menu.getPath());
treeRoot.setName(menu.getName());
treeRoot.setType(menu.getType());
treeRoot.setPermission(menu.getPermission());
return treeRoot;
}).collect(Collectors.toList());
RolePermissionTreeOutVo menuTreeOutVo = new RolePermissionTreeOutVo();
menuTreeOutVo.setTreeRoot(getMenuTree(String.valueOf(Constants.ROOT_MENU_CODE), allMenuList));
return menuTreeOutVo;
}
private List<RolePermissionTreeOutVoTreeRoot> getMenuTree(String pcode, List<RolePermissionTreeOutVoTreeRoot> permissionMenuList) {
List<RolePermissionTreeOutVoTreeRoot> rootList = permissionMenuList.stream().filter(m ->
m.getPcode().equals(pcode)).collect(Collectors.toList()
);
for (RolePermissionTreeOutVoTreeRoot treeRoot : rootList) {
treeRoot.setChildren(getMenuTree(treeRoot.getCode(), permissionMenuList));
}
return rootList;
}
@Override
public RestResponse rolePermissionUpdate(BaseRestController controller, RolePermissionUpdateInVo inVo) {
RestResponse checkUpdateStatus = checkUpdateStatus(inVo.getId());
if (!checkUpdateStatus.isSuccess()) {
return checkUpdateStatus;
}
roleMenuMapper.delete(new QueryWrapper<RoleMenu>().eq("role_id", inVo.getId()));
for (Integer menuId : inVo.getMenuIdList()) {
RoleMenu roleMenu = new RoleMenu();
roleMenu.setMenuId(menuId);
roleMenu.setRoleId(inVo.getId());
roleMenuMapper.insert(roleMenu);
}
return RestResponse.success();
}
}
package com.auth.serivce.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.core.constants.Constants;
import com.auth.common.controller.BaseRestController;
import com.core.response.RestResponse;
import com.auth.dao.RoleMapper;
import com.auth.dao.UserMapper;
import com.auth.dao.UserRoleMapper;
import com.auth.model.Menu;
import com.auth.model.User;
import com.auth.model.UserRole;
import com.auth.serivce.IUserService;
import com.auth.transfer.user.*;
import com.auth.utils.Md5Util;
import com.core.utils.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Inori
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Autowired
private UserMapper userMapper;
@Autowired
private UserRoleMapper userRoleMapper;
@Autowired
private RoleMapper roleMapper;
@Override
public UserListOutVo userList(BaseRestController controller, UserListInVo inVo) {
Page<UserListOutVoRecords> page = new Page<>(inVo.getPageNo(), inVo.getPageSize());
List<UserListOutVoRecords> recordsList = userMapper.userList(page, inVo);
UserListOutVo outVo = new UserListOutVo();
outVo.setTotal((int) page.getTotal());
outVo.setRecords(recordsList);
return outVo;
}
@Override
public RestResponse userCreate(BaseRestController controller, UserCreateInVo inVo) {
User user = new User();
user.setDeptId(inVo.getDeptId());
user.setAccount(inVo.getAccount());
user.setSalt(inVo.getAccount());
user.setPassword(inVo.getPassword());
user.setName(inVo.getName());
user.setMobile(inVo.getMobile());
user.setAddress(inVo.getAddress());
user.setStatus(inVo.getStatus());
user.setCreateBy(inVo.getCreateBy());
return userHandle(user, inVo.getRoleIdList());
}
@Override
public RestResponse userUpdate(BaseRestController controller, UserUpdateInVo inVo) {
User user = new User();
user.setId(inVo.getId());
user.setDeptId(inVo.getDeptId());
user.setAccount(inVo.getAccount());
if (StringUtil.isNotBlank(inVo.getPassword())) {
user.setPassword(Md5Util.encrypt(inVo.getPassword() + inVo.getAccount()));
}
user.setSalt(inVo.getAccount());
user.setName(inVo.getName());
user.setMobile(inVo.getMobile());
user.setAddress(inVo.getAddress());
user.setStatus(inVo.getStatus());
user.setUpdateBy(inVo.getUpdateBy());
return userHandle(user, inVo.getRoleIdList());
}
private RestResponse userHandle(User user, List<Integer> roleIds) {
Integer userId = user.getId();
if (userId == null) {
Integer count = userMapper.selectCount(new QueryWrapper<User>()
.eq("account", user.getAccount())
.ne("status", -1));
if (count > 0) {
return RestResponse.fail("该账号已存在,请更换");
}
user.setPassword(Md5Util.encrypt(user.getPassword() + user.getAccount()));
userMapper.insert(user);
} else {
Integer count = userMapper.selectCount(new QueryWrapper<User>()
.eq("account", user.getAccount())
.ne("status", -1)
.ne("id", userId));
if (count > 0) {
return RestResponse.fail("该账号已存在,请更换");
}
userMapper.updateById(user);
}
//删除原关联
userRoleMapper.delete(new QueryWrapper<UserRole>().eq("user_id", user.getId()));
for (Integer roleId : roleIds) {
UserRole userRole = new UserRole();
userRole.setRoleId(roleId);
userRole.setUserId(user.getId());
userRoleMapper.insert(userRole);
}
return RestResponse.success();
}
@Override
public RestResponse userDelete(BaseRestController controller, UserDeleteInVo inVo) {
User user = userMapper.selectById(inVo.getId());
if (user == null || user.getStatus() == -1) {
return RestResponse.fail("用户不存在");
}
if (Integer.parseInt(inVo.getMe()) == inVo.getId()) {
return RestResponse.fail("用户无法更改自己的状态");
}
User temp = new User();
temp.setId(inVo.getId());
userMapper.updateById(temp);
return RestResponse.success();
}
@Override
public UserInfoOutVo userInfo(BaseRestController controller, Integer userId) {
return userMapper.userInfo(userId);
}
@Override
public UserPermissionOutVo userPermission(BaseRestController controller, Integer userId) {
List<Menu> permissionList = roleMapper.getMenuListByUserId(userId);
List<UserPermissionOutVoRootTree> allMenuList = permissionList.stream().map(menu -> {
UserPermissionOutVoRootTree treeRoot = new UserPermissionOutVoRootTree();
treeRoot.setId(menu.getId());
treeRoot.setCode(menu.getCode());
treeRoot.setPcode(menu.getPcode());
treeRoot.setPath(menu.getPath());
treeRoot.setName(menu.getName());
treeRoot.setIcon(menu.getIcon());
treeRoot.setAssembly(menu.getAssembly());
treeRoot.setSortOrder(menu.getSortOrder());
treeRoot.setType(menu.getType());
return treeRoot;
}).collect(Collectors.toList());
UserPermissionOutVo outVo = new UserPermissionOutVo();
outVo.setRootTree(getMenuTree(String.valueOf(Constants.ROOT_MENU_CODE), allMenuList));
return outVo;
}
private List<UserPermissionOutVoRootTree> getMenuTree(String pcode, List<UserPermissionOutVoRootTree> permissionMenuList) {
List<UserPermissionOutVoRootTree> rootList = permissionMenuList.stream().filter(m ->
m.getPcode().equals(pcode)).collect(Collectors.toList()
);
for (UserPermissionOutVoRootTree treeRoot : rootList) {
treeRoot.setChildren(getMenuTree(treeRoot.getCode(), permissionMenuList));
}
return rootList;
}
@Override
public RestResponse userPasswordUpdate(BaseRestController controller, UserPasswordUpdateInVo inVo) {
User user = inVo.getUser();
String password = Md5Util.encrypt(inVo.getOldPassword() + user.getAccount());
if (!user.getPassword().equals(password)) {
return RestResponse.fail("原密码不正确,无法修改密码");
}
password = Md5Util.encrypt(inVo.getNewPassword() + user.getAccount());
user.setPassword(password);
userMapper.updateById(user);
return RestResponse.success();
}
}
package com.auth.transfer.dept;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 录入部门
*
* @author Inori
*/
@Data
public class DeptCreateInVo {
/**
* PID
*/
@NotNull(message = "参数pid缺失")
private Integer pid;
/**
* 名称
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 联系人
*/
private String contacts;
/**
* 手机号
*/
private String mobile;
/**
* 机构地址
*/
private String address;
/**
* 备注
*/
private String desc;
/**
* 排序
*/
@NotNull(message = "参数sortOrder缺失")
private Integer sortOrder;
/**
* 状态
*/
private Integer status;
/**
* 创建人
*/
private String createBy;
}
\ No newline at end of file
package com.auth.transfer.dept;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 删除部门
*
* @author Inori
*/
@Data
public class DeptDeleteInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
}
\ No newline at end of file
package com.auth.transfer.dept;
import com.core.utils.StringUtil;
/**
* 部门列表
*
* @author Inori
*/
public class DeptListInVo {
/**
* 页码
*/
private Integer pageNo;
/**
* 每页数量
*/
private Integer pageSize;
private static final Integer DEFAULT_PAGE_NO = 1;
private static final Integer DEFAULT_PAGE_SIZE = 20;
public DeptListInVo() {
}
public Integer getPageNo() {
if (StringUtil.isNull(pageNo) || pageNo == -1) {
return DEFAULT_PAGE_NO;
}
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
if (StringUtil.isNull(pageSize) || pageSize == -1) {
return DEFAULT_PAGE_SIZE;
}
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
\ No newline at end of file
package com.auth.transfer.dept;
import lombok.Data;
import java.util.List;
/**
* 部门列表
*
* @author Inori
*/
@Data
public class DeptListOutVo {
/**
* 总数
*/
private Integer total;
/**
* 记录
*/
private List<DeptListOutVoRecords> records;
}
\ No newline at end of file
package com.auth.transfer.dept;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* 部门记录
*
* @author Inori
*/
@Data
public class DeptListOutVoRecords {
/**
* 机构ID
*/
private Integer id;
/**
* 父节点ID
*/
private Integer pid;
/**
* 机构名称
*/
private String name;
/**
* 联系人
*/
private String contacts;
/**
* 手机号
*/
private String mobile;
/**
* 机构地址
*/
private String address;
/**
* 备注
*/
private String desc;
/**
* 排序,按照正序排列
*/
private Integer sortOrder;
/**
* 状态(0:正常,-1:禁用)
*/
private Integer status;
/**
* 创建时间
*/
private Date createTime;
/**
* 创建人
*/
private String createBy;
/**
* 子部门
*/
List<DeptListOutVoRecords> children;
}
\ No newline at end of file
package com.auth.transfer.dept;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 修改部门
*
* @author Inori
*/
@Data
public class DeptUpdateInVo {
/**
* PID
*/
@NotNull(message = "参数id缺失")
private Integer id;
/**
* PID
*/
@NotNull(message = "参数pid缺失")
private Integer pid;
/**
* 名称
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 联系人
*/
private String contacts;
/**
* 手机号
*/
private String mobile;
/**
* 机构地址
*/
private String address;
/**
* 备注
*/
private String desc;
/**
* 排序
*/
@NotNull(message = "参数sortOrder缺失")
private Integer sortOrder;
/**
* 状态
*/
private Integer status;
/**
* 更新人
*/
private String updateBy;
}
\ No newline at end of file
package com.auth.transfer.login;
import lombok.Data;
import javax.validation.constraints.NotBlank;
/**
* @author Inori
*/
@Data
public class AuthLoginInVo {
/**
* 账号
*/
@NotBlank(message = "参数account为空")
private String account;
/**
* 密码
*/
@NotBlank(message = "参数password为空")
private String password;
/**
* 验证码
*/
@NotBlank(message = "参数code为空")
private String code;
}
package com.auth.transfer.login;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author Inori
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class AuthLoginOutVo {
/**
* ID
*/
private Integer id;
/**
* token
*/
private String token;
/**
* 过期时间
*/
private Integer expireTime = 604799;
}
package com.auth.transfer.menu;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 录入菜单
*
* @author Inori
*/
@Data
public class MenuCreateInVo {
/**
* 编码
*/
@NotBlank(message = "参数code缺失")
private String code;
/**
* 父编码
*/
@NotBlank(message = "参数pcode缺失")
private String pcode;
/**
* 名称
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 路径
*/
@NotBlank(message = "参数path缺失")
private String path;
/**
* 图标
*/
private String icon;
/**
* 组件
*/
private String assembly;
/**
* 排序
*/
@NotNull(message = "参数sortOrder缺失")
private Integer sortOrder;
/**
* 层级
*/
private Integer level;
/**
* 类型(MENU:菜单,BUTTON:按钮)
*/
@NotBlank(message = "参数type缺失")
private String type;
/**
* 备注
*/
private String desc;
/**
* 状态
*/
private Integer status;
/**
* 创建人
*/
private String createBy;
}
\ No newline at end of file
package com.auth.transfer.menu;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 删除菜单
*
* @author Inori
*/
@Data
public class MenuDeleteInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
}
\ No newline at end of file
package com.auth.transfer.menu;
import com.core.utils.StringUtil;
/**
* 菜单列表
*
* @author Inori
*/
public class MenuListInVo {
/**
* 页码
*/
private Integer pageNo;
/**
* 每页数量
*/
private Integer pageSize;
private static final Integer DEFAULT_PAGE_NO = 1;
private static final Integer DEFAULT_PAGE_SIZE = 20;
public MenuListInVo() {
}
public Integer getPageNo() {
if (StringUtil.isNull(pageNo) || pageNo == -1) {
return DEFAULT_PAGE_NO;
}
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
if (StringUtil.isNull(pageSize) || pageSize == -1) {
return DEFAULT_PAGE_SIZE;
}
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
\ No newline at end of file
package com.auth.transfer.menu;
import lombok.Data;
import java.util.List;
/**
* 菜单列表
*
* @author Inori
*/
@Data
public class MenuListOutVo {
/**
* 总数
*/
private Integer total;
/**
* 记录
*/
private List<MenuListOutVoRecords> records;
}
\ No newline at end of file
package com.auth.transfer.menu;
import lombok.Data;
import java.util.List;
/**
* 菜单记录
*
* @author Inori
*/
@Data
public class MenuListOutVoRecords {
/**
* ID
*/
private Integer id;
/**
* 编码
*/
private String code;
/**
* 父编码
*/
private String pcode;
/**
* 名称
*/
private String name;
/**
* 路径
*/
private String path;
/**
* 图标
*/
private String icon;
/**
* 组件
*/
private String assembly;
/**
* 排序
*/
private Integer sortOrder;
/**
* 层级
*/
private Integer level;
/**
* 类型(MENU:菜单,BUTTON:按钮)
*/
private String type;
/**
* 备注
*/
private String desc;
/**
* 状态(0:正常,-1:禁用)
*/
private Integer status;
/**
* 创建时间
*/
private String createTime;
/**
* 子菜单
*/
List<MenuListOutVoRecords> children;
}
\ No newline at end of file
package com.auth.transfer.menu;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 修改菜单
*
* @author Inori
*/
@Data
public class MenuUpdateInVo {
/**
* PID
*/
@NotNull(message = "参数id缺失")
private Integer id;
/**
* 编码
*/
@NotBlank(message = "参数code缺失")
private String code;
/**
* 父编码
*/
@NotBlank(message = "参数pcode缺失")
private String pcode;
/**
* 名称
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 路径
*/
private String path;
/**
* 图标
*/
private String icon;
/**
* 组件
*/
private String assembly;
/**
* 排序
*/
@NotNull(message = "参数sortOrder缺失")
private Integer sortOrder;
/**
* 层级
*/
private Integer level;
/**
* 类型(MENU:菜单,BUTTON:按钮)
*/
@NotBlank(message = "参数type缺失")
private String type;
/**
* 备注
*/
private String desc;
/**
* 状态
*/
private Integer status;
/**
* 更新人
*/
private String updateBy;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 录入角色
*
* @author Inori
*/
@Data
public class RoleCreateInVo {
/**
* 角色名称
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 排序
*/
@NotNull(message = "参数sortOrder缺失")
private Integer sortOrder;
/**
* 角色描述
*/
private String desc;
/**
* 创建人
*/
private String createBy;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 删除角色
*
* @author Inori
*/
@Data
public class RoleDeleteInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
}
\ No newline at end of file
package com.auth.transfer.role;
import com.core.utils.StringUtil;
/**
* 角色列表
*
* @author Inori
*/
public class RoleListInVo {
/**
* 角色名称
*/
private String name;
/**
* 页码
*/
private Integer pageNo;
/**
* 每页数量
*/
private Integer pageSize;
private static final Integer DEFAULT_PAGE_NO = 1;
private static final Integer DEFAULT_PAGE_SIZE = 20;
public RoleListInVo() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPageNo() {
if (StringUtil.isNull(pageNo) || pageNo == -1) {
return DEFAULT_PAGE_NO;
}
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
if (StringUtil.isNull(pageSize) || pageSize == -1) {
return DEFAULT_PAGE_SIZE;
}
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import java.util.List;
/**
* 角色列表
*
* @author Inori
*/
@Data
public class RoleListOutVo {
/**
* 总数
*/
private Integer total;
/**
* 记录
*/
private List<RoleListOutVoRecords> records;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
/**
* 角色记录
*
* @author Inori
*/
@Data
public class RoleListOutVoRecords {
/**
* ID
*/
private Integer id;
/**
* 角色名称
*/
private String name;
/**
* 排序
*/
private Integer sortOrder;
/**
* 角色描述
*/
private String desc;
/**
* 是否内置(1:是,0:否,内置不能删除)
*/
private Integer builtIn;
/**
* 创建时间
*/
private String createTime;
/**
* 创建人
*/
private String createBy;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 获取角色权限树
*
* @author Inori
*/
@Data
public class RolePermissionTreeInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import java.util.List;
/**
* 获取角色权限树
*
* @author Inori
*/
@Data
public class RolePermissionTreeOutVo {
/**
* 资源树
*/
private List<RolePermissionTreeOutVoTreeRoot> treeRoot;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import java.util.List;
/**
* 获取角色权限树
*
* @author Inori
*/
@Data
public class RolePermissionTreeOutVoTreeRoot {
/**
* ID
*/
private Integer id;
/**
* 编码
*/
private String code;
/**
* 父编码
*/
private String pcode;
/**
* 路径
*/
private String path;
/**
* 名称
*/
private String name;
/**
* 类型(菜单:MENU,按钮:BUTTON)
*/
private String type;
/**
* 权限(true:有权限,false:无权限)
*/
private Boolean permission;
/**
* 子资源
*/
private List<RolePermissionTreeOutVoTreeRoot> children;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 修改角色权限
*
* @author Inori
*/
@Data
public class RolePermissionUpdateInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
/**
* 菜单列表
*/
@NotNull(message = "参数menuIdList缺失")
private List<Integer> menuIdList;
}
\ No newline at end of file
package com.auth.transfer.role;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
* 修改角色
*
* @author Inori
*/
@Data
public class RoleUpdateInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
/**
* 角色名称
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 排序
*/
private Integer sortOrder;
/**
* 角色描述
*/
private String desc;
/**
* 更新人
*/
private String updateBy;
}
\ No newline at end of file
package com.auth.transfer.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 用户录入
*
* @author Inori
*/
@Data
public class UserCreateInVo {
/**
* 账号
*/
@NotBlank(message = "参数account缺失")
private String account;
/**
* 密码
*/
@NotBlank(message = "参数password缺失")
private String password;
/**
* 部门ID
*/
private Integer deptId;
/**
* 姓名
*/
@NotBlank(message = "参数name缺失")
private String name;
/**
* 地址
*/
private String address;
/**
* 手机号
*/
private String mobile;
/**
* 状态
*/
private Integer status;
/**
* 角色列表
*/
@NotNull(message = "参数roleIdList缺失")
private List<Integer> roleIdList;
/**
* 创建人
*/
private String createBy;
}
\ No newline at end of file
package com.auth.transfer.user;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 删除用户
*
* @author Inori
*/
@Data
public class UserDeleteInVo {
/**
* ID
*/
@NotNull(message = "参数id缺失")
private Integer id;
/**
* 自己的用户ID
*/
private String me;
}
\ No newline at end of file
package com.auth.transfer.user;
import lombok.Data;
/**
* @author Inori
*/
@Data
public class UserInfoInVo {
/**
* 用户ID
*/
private String userId;
/**
* 昵称
*/
private String nickName;
}
package com.auth.transfer.user;
import lombok.Data;
import java.util.List;
/**
* @author Inori
*/
@Data
public class UserInfoOutVo {
/**
* ID
*/
private Integer id;
/**
* 账号
*/
private String account;
/**
* 用户名称
*/
private String name;
/**
* 手机号
*/
private String mobile;
/**
* 邮箱
*/
private String email;
/**
* 地址
*/
private String address;
/**
* 角色列表
*/
private List<UserInfoOutVoRoles> roles;
}
package com.auth.transfer.user;
import lombok.Data;
/**
* 用户登录信息角色记录
*
* @author Inori
*/
@Data
public class UserInfoOutVoRoles {
/**
* 角色ID
*/
private Integer roleId;
/**
* 角色名称
*/
private String roleName;
}
\ No newline at end of file
package com.auth.transfer.user;
import com.core.utils.StringUtil;
import lombok.Data;
/**
* 用户列表
*
* @author Inori
*/
@Data
public class UserListInVo {
/**
* 用户名称
*/
private String name;
/**
* 页码
*/
private Integer pageNo;
/**
* 每页数量
*/
private Integer pageSize;
private static final Integer DEFAULT_PAGE_NO = 1;
private static final Integer DEFAULT_PAGE_SIZE = 20;
public UserListInVo() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPageNo() {
if (StringUtil.isNull(pageNo) || pageNo == -1) {
return DEFAULT_PAGE_NO;
}
return pageNo;
}
public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
}
public Integer getPageSize() {
if (StringUtil.isNull(pageSize) || pageSize == -1) {
return DEFAULT_PAGE_SIZE;
}
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}
\ No newline at end of file
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
差异被折叠。
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论