From 481fc0bd3c9bb278e70092ae0d66ff3273675095 Mon Sep 17 00:00:00 2001
From: fengyan <2316696377@qq.com>
Date: Thu, 21 Nov 2019 18:19:09 +0800
Subject: [PATCH 01/52] =?UTF-8?q?=E6=B7=BB=E5=8A=A0Flyway=EF=BC=8C?=
=?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=AE=A1=E7=90=86=E6=95=B0=E6=8D=AE=E5=BA=93?=
=?UTF-8?q?=E8=84=9A=E6=9C=AC=EF=BC=9Aresources:/db/migration/mysql;=20?=
=?UTF-8?q?=E5=8D=87=E7=BA=A7springboot=E5=88=B02.2.1=EF=BC=8C=E8=A7=A3?=
=?UTF-8?q?=E5=86=B3quartz=E5=9C=A8flyway=E5=88=9D=E5=A7=8B=E5=8C=96?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B9=8B=E5=89=8D=E5=B0=B1=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84=E9=97=AE=E9=A2=98?=
=?UTF-8?q?=EF=BC=9B=20=E6=89=93WAR=E5=8C=85=E7=9B=B8=E5=85=B3=EF=BC=9A?=
=?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=90=8E=E6=B2=A1=E6=9C=89=E6=88=90=E5=8A=9F?=
=?UTF-8?q?=E7=9A=84=E4=BF=A1=E6=81=AF=EF=BC=8Cwar=E5=8C=85=E4=B8=AD?=
=?UTF-8?q?=E5=8C=85=E5=90=ABtomcat-jar=E5=8C=85=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
ruoyi-admin/pom.xml | 7 +-
.../main/java/com/ruoyi/RuoYiApplication.java | 44 +-
.../com/ruoyi/RuoYiServletInitializer.java | 18 -
.../src/main/resources/application-druid.yml | 34 +-
.../src/main/resources/application.yml | 2 +-
.../migration/mysql/V001__init_sys_tables.sql | 695 ++++++++++++++++++
.../mysql/V002__init_quartz_tables.sql | 170 +++++
ruoyi-framework/pom.xml | 7 +
.../service/impl/SysJobServiceImpl.java | 3 +-
10 files changed, 941 insertions(+), 41 deletions(-)
delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
create mode 100644 ruoyi-admin/src/main/resources/db/migration/mysql/V001__init_sys_tables.sql
create mode 100644 ruoyi-admin/src/main/resources/db/migration/mysql/V002__init_quartz_tables.sql
diff --git a/pom.xml b/pom.xml
index 401b07def..bc8ac248d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
org.springframework.boot
spring-boot-dependencies
- 2.1.1.RELEASE
+ 2.2.1.RELEASE
pom
import
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 0e5ebb834..19b0f1da7 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -72,7 +72,12 @@
com.ruoyi
ruoyi-generator
-
+
+
+
+ org.flywaydb
+ flyway-core
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index a0e726bd4..03b2765e4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -1,8 +1,12 @@
package com.ruoyi;
+import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.Bean;
/**
* 启动程序
@@ -10,21 +14,33 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
* @author ruoyi
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
-public class RuoYiApplication
-{
- public static void main(String[] args)
- {
+public class RuoYiApplication extends SpringBootServletInitializer {
+ public static void main(String[] args) {
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
- System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +
- " .-------. ____ __ \n" +
- " | _ _ \\ \\ \\ / / \n" +
- " | ( ' ) | \\ _. / ' \n" +
- " |(_ o _) / _( )_ .' \n" +
- " | (_,_).' __ ___(_ o _)' \n" +
- " | |\\ \\ | || |(_,_)' \n" +
- " | | \\ `' /| `-' / \n" +
- " | | \\ / \\ / \n" +
- " ''-' `'-' `-..-' ");
+ }
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
+ return builder.sources(RuoYiApplication.class);
+ }
+
+ @Bean
+ public CommandLineRunner startupCommandLineRunner(){
+ return new CommandLineRunner() {
+ @Override
+ public void run(String... args) throws Exception {
+ System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +
+ " .-------. ____ __ \n" +
+ " | _ _ \\ \\ \\ / / \n" +
+ " | ( ' ) | \\ _. / ' \n" +
+ " |(_ o _) / _( )_ .' \n" +
+ " | (_,_).' __ ___(_ o _)' \n" +
+ " | |\\ \\ | || |(_,_)' \n" +
+ " | | \\ `' /| `-' / \n" +
+ " | | \\ / \\ / \n" +
+ " ''-' `'-' `-..-' ");
+ }
+ };
}
}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
deleted file mode 100644
index 9d82a2378..000000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.ruoyi;
-
-import org.springframework.boot.builder.SpringApplicationBuilder;
-import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-
-/**
- * web容器中进行部署
- *
- * @author ruoyi
- */
-public class RuoYiServletInitializer extends SpringBootServletInitializer
-{
- @Override
- protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
- {
- return application.sources(RuoYiApplication.class);
- }
-}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index d69c66d27..1df30d82c 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -1,3 +1,10 @@
+#flyway会自动建立该数据库
+db:
+ # mysql, oracle, sqlserver
+ type: mysql
+ name: ry
+ username: root
+ password: root
# 数据源配置
spring:
datasource:
@@ -6,9 +13,9 @@ spring:
druid:
# 主库数据源
master:
- url: jdbc:mysql://localhost:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
- username: root
- password: password
+ url: jdbc:mysql://localhost:3306/${db.name}?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ username: ${db.username}
+ password: ${db.password}
# 从库数据源
slave:
# 从数据源开关/默认关闭
@@ -54,4 +61,23 @@ spring:
merge-sql: true
wall:
config:
- multi-statement-allow: true
\ No newline at end of file
+ multi-statement-allow: true
+
+ flyway:
+ enabled: true
+ url: jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+ user: ${db.username}
+ password: ${db.password}
+ #需要目标数据库已经存在,不自动升级
+ baseline-on-migrate: false
+ encoding: utf-8
+ clean-on-validation-error: false
+ clean-disabled: true
+ #数据库自动迁移的位置
+ locations: classpath:db/migration/${db.type}
+ # 需要管理的数据库
+ schemas: ${db.name}
+ quartz:
+ job-store-type: jdbc
+ jdbc:
+ initialize-schema: never
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 26361c6f8..e9460a605 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -31,8 +31,8 @@ server:
# 日志配置
logging:
level:
+ root: warn
com.ruoyi: debug
- org.springframework: warn
# 用户配置
user:
diff --git a/ruoyi-admin/src/main/resources/db/migration/mysql/V001__init_sys_tables.sql b/ruoyi-admin/src/main/resources/db/migration/mysql/V001__init_sys_tables.sql
new file mode 100644
index 000000000..293c38404
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/db/migration/mysql/V001__init_sys_tables.sql
@@ -0,0 +1,695 @@
+-- ----------------------------
+-- 1、部门表
+-- ----------------------------
+drop table if exists sys_dept;
+create table sys_dept (
+ dept_id bigint(20) not null auto_increment comment '部门id',
+ parent_id bigint(20) default 0 comment '父部门id',
+ ancestors varchar(50) default '' comment '祖级列表',
+ dept_name varchar(30) default '' comment '部门名称',
+ order_num int(4) default 0 comment '显示顺序',
+ leader varchar(20) default null comment '负责人',
+ phone varchar(11) default null comment '联系电话',
+ email varchar(50) default null comment '邮箱',
+ status char(1) default '0' comment '部门状态(0正常 1停用)',
+ del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ primary key (dept_id)
+) engine=innodb auto_increment=200 comment = '部门表';
+
+-- ----------------------------
+-- 初始化-部门表数据
+-- ----------------------------
+insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
+
+
+-- ----------------------------
+-- 2、用户信息表
+-- ----------------------------
+drop table if exists sys_user;
+create table sys_user (
+ user_id bigint(20) not null auto_increment comment '用户ID',
+ dept_id bigint(20) default null comment '部门ID',
+ login_name varchar(30) not null comment '登录账号',
+ user_name varchar(30) not null comment '用户昵称',
+ user_type varchar(2) default '00' comment '用户类型(00系统用户)',
+ email varchar(50) default '' comment '用户邮箱',
+ phonenumber varchar(11) default '' comment '手机号码',
+ sex char(1) default '0' comment '用户性别(0男 1女 2未知)',
+ avatar varchar(100) default '' comment '头像路径',
+ password varchar(50) default '' comment '密码',
+ salt varchar(20) default '' comment '盐加密',
+ status char(1) default '0' comment '帐号状态(0正常 1停用)',
+ del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
+ login_ip varchar(50) default '' comment '最后登陆IP',
+ login_date datetime comment '最后登陆时间',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (user_id)
+) engine=innodb auto_increment=100 comment = '用户信息表';
+
+-- ----------------------------
+-- 初始化-用户信息表数据
+-- ----------------------------
+insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
+insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '测试员');
+
+
+-- ----------------------------
+-- 3、岗位信息表
+-- ----------------------------
+drop table if exists sys_post;
+create table sys_post
+(
+ post_id bigint(20) not null auto_increment comment '岗位ID',
+ post_code varchar(64) not null comment '岗位编码',
+ post_name varchar(50) not null comment '岗位名称',
+ post_sort int(4) not null comment '显示顺序',
+ status char(1) not null comment '状态(0正常 1停用)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (post_id)
+) engine=innodb comment = '岗位信息表';
+
+-- ----------------------------
+-- 初始化-岗位信息表数据
+-- ----------------------------
+insert into sys_post values(1, 'ceo', '董事长', 1, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_post values(2, 'se', '项目经理', 2, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_post values(3, 'hr', '人力资源', 3, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_post values(4, 'user', '普通员工', 4, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+
+
+-- ----------------------------
+-- 4、角色信息表
+-- ----------------------------
+drop table if exists sys_role;
+create table sys_role (
+ role_id bigint(20) not null auto_increment comment '角色ID',
+ role_name varchar(30) not null comment '角色名称',
+ role_key varchar(100) not null comment '角色权限字符串',
+ role_sort int(4) not null comment '显示顺序',
+ data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
+ status char(1) not null comment '角色状态(0正常 1停用)',
+ del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (role_id)
+) engine=innodb auto_increment=100 comment = '角色信息表';
+
+-- ----------------------------
+-- 初始化-角色信息表数据
+-- ----------------------------
+insert into sys_role values('1', '管理员', 'admin', 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
+insert into sys_role values('2', '普通角色', 'common', 2, 2, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '普通角色');
+
+
+-- ----------------------------
+-- 5、菜单权限表
+-- ----------------------------
+drop table if exists sys_menu;
+create table sys_menu (
+ menu_id bigint(20) not null auto_increment comment '菜单ID',
+ menu_name varchar(50) not null comment '菜单名称',
+ parent_id bigint(20) default 0 comment '父菜单ID',
+ order_num int(4) default 0 comment '显示顺序',
+ url varchar(200) default '#' comment '请求地址',
+ target varchar(20) default '' comment '打开方式(menuItem页签 menuBlank新窗口)',
+ menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)',
+ visible char(1) default 0 comment '菜单状态(0显示 1隐藏)',
+ perms varchar(100) default null comment '权限标识',
+ icon varchar(100) default '#' comment '菜单图标',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default '' comment '备注',
+ primary key (menu_id)
+) engine=innodb auto_increment=2000 comment = '菜单权限表';
+
+-- ----------------------------
+-- 初始化-菜单信息表数据
+-- ----------------------------
+-- 一级菜单
+insert into sys_menu values('1', '系统管理', '0', '1', '#', '', 'M', '0', '', 'fa fa-gear', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统管理目录');
+insert into sys_menu values('2', '系统监控', '0', '2', '#', '', 'M', '0', '', 'fa fa-video-camera', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统监控目录');
+insert into sys_menu values('3', '系统工具', '0', '3', '#', '', 'M', '0', '', 'fa fa-bars', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统工具目录');
+-- 二级菜单
+insert into sys_menu values('100', '用户管理', '1', '1', '/system/user', '', 'C', '0', 'system:user:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '用户管理菜单');
+insert into sys_menu values('101', '角色管理', '1', '2', '/system/role', '', 'C', '0', 'system:role:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '角色管理菜单');
+insert into sys_menu values('102', '菜单管理', '1', '3', '/system/menu', '', 'C', '0', 'system:menu:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单管理菜单');
+insert into sys_menu values('103', '部门管理', '1', '4', '/system/dept', '', 'C', '0', 'system:dept:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '部门管理菜单');
+insert into sys_menu values('104', '岗位管理', '1', '5', '/system/post', '', 'C', '0', 'system:post:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '岗位管理菜单');
+insert into sys_menu values('105', '字典管理', '1', '6', '/system/dict', '', 'C', '0', 'system:dict:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '字典管理菜单');
+insert into sys_menu values('106', '参数设置', '1', '7', '/system/config', '', 'C', '0', 'system:config:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '参数设置菜单');
+insert into sys_menu values('107', '通知公告', '1', '8', '/system/notice', '', 'C', '0', 'system:notice:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知公告菜单');
+insert into sys_menu values('108', '日志管理', '1', '9', '#', '', 'M', '0', '', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '日志管理菜单');
+insert into sys_menu values('109', '在线用户', '2', '1', '/monitor/online', '', 'C', '0', 'monitor:online:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '在线用户菜单');
+insert into sys_menu values('110', '定时任务', '2', '2', '/monitor/job', '', 'C', '0', 'monitor:job:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '定时任务菜单');
+insert into sys_menu values('111', '数据监控', '2', '3', '/monitor/data', '', 'C', '0', 'monitor:data:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '数据监控菜单');
+insert into sys_menu values('112', '服务监控', '2', '3', '/monitor/server', '', 'C', '0', 'monitor:server:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务监控菜单');
+insert into sys_menu values('113', '表单构建', '3', '1', '/tool/build', '', 'C', '0', 'tool:build:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '表单构建菜单');
+insert into sys_menu values('114', '代码生成', '3', '2', '/tool/gen', '', 'C', '0', 'tool:gen:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '代码生成菜单');
+insert into sys_menu values('115', '系统接口', '3', '3', '/tool/swagger', '', 'C', '0', 'tool:swagger:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统接口菜单');
+-- 三级菜单
+insert into sys_menu values('500', '操作日志', '108', '1', '/monitor/operlog', '', 'C', '0', 'monitor:operlog:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作日志菜单');
+insert into sys_menu values('501', '登录日志', '108', '2', '/monitor/logininfor', '', 'C', '0', 'monitor:logininfor:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录日志菜单');
+-- 用户管理按钮
+insert into sys_menu values('1000', '用户查询', '100', '1', '#', '', 'F', '0', 'system:user:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1001', '用户新增', '100', '2', '#', '', 'F', '0', 'system:user:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1002', '用户修改', '100', '3', '#', '', 'F', '0', 'system:user:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1003', '用户删除', '100', '4', '#', '', 'F', '0', 'system:user:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1004', '用户导出', '100', '5', '#', '', 'F', '0', 'system:user:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1005', '用户导入', '100', '6', '#', '', 'F', '0', 'system:user:import', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1006', '重置密码', '100', '7', '#', '', 'F', '0', 'system:user:resetPwd', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 角色管理按钮
+insert into sys_menu values('1007', '角色查询', '101', '1', '#', '', 'F', '0', 'system:role:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1008', '角色新增', '101', '2', '#', '', 'F', '0', 'system:role:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1009', '角色修改', '101', '3', '#', '', 'F', '0', 'system:role:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1010', '角色删除', '101', '4', '#', '', 'F', '0', 'system:role:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1011', '角色导出', '101', '5', '#', '', 'F', '0', 'system:role:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 菜单管理按钮
+insert into sys_menu values('1012', '菜单查询', '102', '1', '#', '', 'F', '0', 'system:menu:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1013', '菜单新增', '102', '2', '#', '', 'F', '0', 'system:menu:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1014', '菜单修改', '102', '3', '#', '', 'F', '0', 'system:menu:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1015', '菜单删除', '102', '4', '#', '', 'F', '0', 'system:menu:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 部门管理按钮
+insert into sys_menu values('1016', '部门查询', '103', '1', '#', '', 'F', '0', 'system:dept:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1017', '部门新增', '103', '2', '#', '', 'F', '0', 'system:dept:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1018', '部门修改', '103', '3', '#', '', 'F', '0', 'system:dept:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1019', '部门删除', '103', '4', '#', '', 'F', '0', 'system:dept:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 岗位管理按钮
+insert into sys_menu values('1020', '岗位查询', '104', '1', '#', '', 'F', '0', 'system:post:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1021', '岗位新增', '104', '2', '#', '', 'F', '0', 'system:post:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1022', '岗位修改', '104', '3', '#', '', 'F', '0', 'system:post:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1023', '岗位删除', '104', '4', '#', '', 'F', '0', 'system:post:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1024', '岗位导出', '104', '5', '#', '', 'F', '0', 'system:post:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 字典管理按钮
+insert into sys_menu values('1025', '字典查询', '105', '1', '#', '', 'F', '0', 'system:dict:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1026', '字典新增', '105', '2', '#', '', 'F', '0', 'system:dict:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1027', '字典修改', '105', '3', '#', '', 'F', '0', 'system:dict:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', 'F', '0', 'system:dict:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', 'F', '0', 'system:dict:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 参数设置按钮
+insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', 'F', '0', 'system:config:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', 'F', '0', 'system:config:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', 'F', '0', 'system:config:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', 'F', '0', 'system:config:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', 'F', '0', 'system:config:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 通知公告按钮
+insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', 'F', '0', 'system:notice:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', 'F', '0', 'system:notice:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', 'F', '0', 'system:notice:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', 'F', '0', 'system:notice:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 操作日志按钮
+insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', 'F', '0', 'monitor:operlog:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', 'F', '0', 'monitor:operlog:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1041', '详细信息', '500', '3', '#', '', 'F', '0', 'monitor:operlog:detail', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1042', '日志导出', '500', '4', '#', '', 'F', '0', 'monitor:operlog:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 登录日志按钮
+insert into sys_menu values('1043', '登录查询', '501', '1', '#', '', 'F', '0', 'monitor:logininfor:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1044', '登录删除', '501', '2', '#', '', 'F', '0', 'monitor:logininfor:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1045', '日志导出', '501', '3', '#', '', 'F', '0', 'monitor:logininfor:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1046', '账户解锁', '501', '4', '#', '', 'F', '0', 'monitor:logininfor:unlock', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 在线用户按钮
+insert into sys_menu values('1047', '在线查询', '109', '1', '#', '', 'F', '0', 'monitor:online:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1048', '批量强退', '109', '2', '#', '', 'F', '0', 'monitor:online:batchForceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1049', '单条强退', '109', '3', '#', '', 'F', '0', 'monitor:online:forceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 定时任务按钮
+insert into sys_menu values('1050', '任务查询', '110', '1', '#', '', 'F', '0', 'monitor:job:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1051', '任务新增', '110', '2', '#', '', 'F', '0', 'monitor:job:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1052', '任务修改', '110', '3', '#', '', 'F', '0', 'monitor:job:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1053', '任务删除', '110', '4', '#', '', 'F', '0', 'monitor:job:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1054', '状态修改', '110', '5', '#', '', 'F', '0', 'monitor:job:changeStatus', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1055', '任务详细', '110', '6', '#', '', 'F', '0', 'monitor:job:detail', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1056', '任务导出', '110', '7', '#', '', 'F', '0', 'monitor:job:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+-- 代码生成按钮
+insert into sys_menu values('1057', '生成查询', '114', '1', '#', '', 'F', '0', 'tool:gen:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1058', '生成修改', '114', '2', '#', '', 'F', '0', 'tool:gen:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1059', '生成删除', '114', '3', '#', '', 'F', '0', 'tool:gen:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1060', '预览代码', '114', '4', '#', '', 'F', '0', 'tool:gen:preview', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_menu values('1061', '生成代码', '114', '5', '#', '', 'F', '0', 'tool:gen:code', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+
+
+-- ----------------------------
+-- 6、用户和角色关联表 用户N-1角色
+-- ----------------------------
+drop table if exists sys_user_role;
+create table sys_user_role (
+ user_id bigint(20) not null comment '用户ID',
+ role_id bigint(20) not null comment '角色ID',
+ primary key(user_id, role_id)
+) engine=innodb comment = '用户和角色关联表';
+
+-- ----------------------------
+-- 初始化-用户和角色关联表数据
+-- ----------------------------
+insert into sys_user_role values ('1', '1');
+insert into sys_user_role values ('2', '2');
+
+
+-- ----------------------------
+-- 7、角色和菜单关联表 角色1-N菜单
+-- ----------------------------
+drop table if exists sys_role_menu;
+create table sys_role_menu (
+ role_id bigint(20) not null comment '角色ID',
+ menu_id bigint(20) not null comment '菜单ID',
+ primary key(role_id, menu_id)
+) engine=innodb comment = '角色和菜单关联表';
+
+-- ----------------------------
+-- 初始化-角色和菜单关联表数据
+-- ----------------------------
+insert into sys_role_menu values ('2', '1');
+insert into sys_role_menu values ('2', '2');
+insert into sys_role_menu values ('2', '3');
+insert into sys_role_menu values ('2', '100');
+insert into sys_role_menu values ('2', '101');
+insert into sys_role_menu values ('2', '102');
+insert into sys_role_menu values ('2', '103');
+insert into sys_role_menu values ('2', '104');
+insert into sys_role_menu values ('2', '105');
+insert into sys_role_menu values ('2', '106');
+insert into sys_role_menu values ('2', '107');
+insert into sys_role_menu values ('2', '108');
+insert into sys_role_menu values ('2', '109');
+insert into sys_role_menu values ('2', '110');
+insert into sys_role_menu values ('2', '111');
+insert into sys_role_menu values ('2', '112');
+insert into sys_role_menu values ('2', '113');
+insert into sys_role_menu values ('2', '114');
+insert into sys_role_menu values ('2', '115');
+insert into sys_role_menu values ('2', '500');
+insert into sys_role_menu values ('2', '501');
+insert into sys_role_menu values ('2', '1000');
+insert into sys_role_menu values ('2', '1001');
+insert into sys_role_menu values ('2', '1002');
+insert into sys_role_menu values ('2', '1003');
+insert into sys_role_menu values ('2', '1004');
+insert into sys_role_menu values ('2', '1005');
+insert into sys_role_menu values ('2', '1006');
+insert into sys_role_menu values ('2', '1007');
+insert into sys_role_menu values ('2', '1008');
+insert into sys_role_menu values ('2', '1009');
+insert into sys_role_menu values ('2', '1010');
+insert into sys_role_menu values ('2', '1011');
+insert into sys_role_menu values ('2', '1012');
+insert into sys_role_menu values ('2', '1013');
+insert into sys_role_menu values ('2', '1014');
+insert into sys_role_menu values ('2', '1015');
+insert into sys_role_menu values ('2', '1016');
+insert into sys_role_menu values ('2', '1017');
+insert into sys_role_menu values ('2', '1018');
+insert into sys_role_menu values ('2', '1019');
+insert into sys_role_menu values ('2', '1020');
+insert into sys_role_menu values ('2', '1021');
+insert into sys_role_menu values ('2', '1022');
+insert into sys_role_menu values ('2', '1023');
+insert into sys_role_menu values ('2', '1024');
+insert into sys_role_menu values ('2', '1025');
+insert into sys_role_menu values ('2', '1026');
+insert into sys_role_menu values ('2', '1027');
+insert into sys_role_menu values ('2', '1028');
+insert into sys_role_menu values ('2', '1029');
+insert into sys_role_menu values ('2', '1030');
+insert into sys_role_menu values ('2', '1031');
+insert into sys_role_menu values ('2', '1032');
+insert into sys_role_menu values ('2', '1033');
+insert into sys_role_menu values ('2', '1034');
+insert into sys_role_menu values ('2', '1035');
+insert into sys_role_menu values ('2', '1036');
+insert into sys_role_menu values ('2', '1037');
+insert into sys_role_menu values ('2', '1038');
+insert into sys_role_menu values ('2', '1039');
+insert into sys_role_menu values ('2', '1040');
+insert into sys_role_menu values ('2', '1041');
+insert into sys_role_menu values ('2', '1042');
+insert into sys_role_menu values ('2', '1043');
+insert into sys_role_menu values ('2', '1044');
+insert into sys_role_menu values ('2', '1045');
+insert into sys_role_menu values ('2', '1046');
+insert into sys_role_menu values ('2', '1047');
+insert into sys_role_menu values ('2', '1048');
+insert into sys_role_menu values ('2', '1049');
+insert into sys_role_menu values ('2', '1050');
+insert into sys_role_menu values ('2', '1051');
+insert into sys_role_menu values ('2', '1052');
+insert into sys_role_menu values ('2', '1053');
+insert into sys_role_menu values ('2', '1054');
+insert into sys_role_menu values ('2', '1055');
+insert into sys_role_menu values ('2', '1056');
+insert into sys_role_menu values ('2', '1057');
+insert into sys_role_menu values ('2', '1058');
+insert into sys_role_menu values ('2', '1059');
+insert into sys_role_menu values ('2', '1060');
+insert into sys_role_menu values ('2', '1061');
+
+-- ----------------------------
+-- 8、角色和部门关联表 角色1-N部门
+-- ----------------------------
+drop table if exists sys_role_dept;
+create table sys_role_dept (
+ role_id bigint(20) not null comment '角色ID',
+ dept_id bigint(20) not null comment '部门ID',
+ primary key(role_id, dept_id)
+) engine=innodb comment = '角色和部门关联表';
+
+-- ----------------------------
+-- 初始化-角色和部门关联表数据
+-- ----------------------------
+insert into sys_role_dept values ('2', '100');
+insert into sys_role_dept values ('2', '101');
+insert into sys_role_dept values ('2', '105');
+
+-- ----------------------------
+-- 9、用户与岗位关联表 用户1-N岗位
+-- ----------------------------
+drop table if exists sys_user_post;
+create table sys_user_post
+(
+ user_id bigint(20) not null comment '用户ID',
+ post_id bigint(20) not null comment '岗位ID',
+ primary key (user_id, post_id)
+) engine=innodb comment = '用户与岗位关联表';
+
+-- ----------------------------
+-- 初始化-用户与岗位关联表数据
+-- ----------------------------
+insert into sys_user_post values ('1', '1');
+insert into sys_user_post values ('2', '2');
+
+
+-- ----------------------------
+-- 10、操作日志记录
+-- ----------------------------
+drop table if exists sys_oper_log;
+create table sys_oper_log (
+ oper_id bigint(20) not null auto_increment comment '日志主键',
+ title varchar(50) default '' comment '模块标题',
+ business_type int(2) default 0 comment '业务类型(0其它 1新增 2修改 3删除)',
+ method varchar(100) default '' comment '方法名称',
+ request_method varchar(10) default '' comment '请求方式',
+ operator_type int(1) default 0 comment '操作类别(0其它 1后台用户 2手机端用户)',
+ oper_name varchar(50) default '' comment '操作人员',
+ dept_name varchar(50) default '' comment '部门名称',
+ oper_url varchar(255) default '' comment '请求URL',
+ oper_ip varchar(50) default '' comment '主机地址',
+ oper_location varchar(255) default '' comment '操作地点',
+ oper_param varchar(2000) default '' comment '请求参数',
+ json_result varchar(2000) default '' comment '返回参数',
+ status int(1) default 0 comment '操作状态(0正常 1异常)',
+ error_msg varchar(2000) default '' comment '错误消息',
+ oper_time datetime comment '操作时间',
+ primary key (oper_id)
+) engine=innodb auto_increment=100 comment = '操作日志记录';
+
+
+-- ----------------------------
+-- 11、字典类型表
+-- ----------------------------
+drop table if exists sys_dict_type;
+create table sys_dict_type
+(
+ dict_id bigint(20) not null auto_increment comment '字典主键',
+ dict_name varchar(100) default '' comment '字典名称',
+ dict_type varchar(100) default '' comment '字典类型',
+ status char(1) default '0' comment '状态(0正常 1停用)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (dict_id),
+ unique (dict_type)
+) engine=innodb auto_increment=100 comment = '字典类型表';
+
+insert into sys_dict_type values(1, '用户性别', 'sys_user_sex', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '用户性别列表');
+insert into sys_dict_type values(2, '菜单状态', 'sys_show_hide', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单状态列表');
+insert into sys_dict_type values(3, '系统开关', 'sys_normal_disable', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统开关列表');
+insert into sys_dict_type values(4, '任务状态', 'sys_job_status', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '任务状态列表');
+insert into sys_dict_type values(5, '任务分组', 'sys_job_group', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '任务分组列表');
+insert into sys_dict_type values(6, '系统是否', 'sys_yes_no', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统是否列表');
+insert into sys_dict_type values(7, '通知类型', 'sys_notice_type', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知类型列表');
+insert into sys_dict_type values(8, '通知状态', 'sys_notice_status', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知状态列表');
+insert into sys_dict_type values(9, '操作类型', 'sys_oper_type', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作类型列表');
+insert into sys_dict_type values(10, '系统状态', 'sys_common_status', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录状态列表');
+
+
+-- ----------------------------
+-- 12、字典数据表
+-- ----------------------------
+drop table if exists sys_dict_data;
+create table sys_dict_data
+(
+ dict_code bigint(20) not null auto_increment comment '字典编码',
+ dict_sort int(4) default 0 comment '字典排序',
+ dict_label varchar(100) default '' comment '字典标签',
+ dict_value varchar(100) default '' comment '字典键值',
+ dict_type varchar(100) default '' comment '字典类型',
+ css_class varchar(100) default null comment '样式属性(其他样式扩展)',
+ list_class varchar(100) default null comment '表格回显样式',
+ is_default char(1) default 'N' comment '是否默认(Y是 N否)',
+ status char(1) default '0' comment '状态(0正常 1停用)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (dict_code)
+) engine=innodb auto_increment=100 comment = '字典数据表';
+
+insert into sys_dict_data values(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '性别男');
+insert into sys_dict_data values(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '性别女');
+insert into sys_dict_data values(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '性别未知');
+insert into sys_dict_data values(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '显示菜单');
+insert into sys_dict_data values(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '隐藏菜单');
+insert into sys_dict_data values(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
+insert into sys_dict_data values(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
+insert into sys_dict_data values(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
+insert into sys_dict_data values(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
+insert into sys_dict_data values(10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '默认分组');
+insert into sys_dict_data values(11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统分组');
+insert into sys_dict_data values(12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统默认是');
+insert into sys_dict_data values(13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统默认否');
+insert into sys_dict_data values(14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知');
+insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '公告');
+insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
+insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '关闭状态');
+insert into sys_dict_data values(18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '新增操作');
+insert into sys_dict_data values(19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '修改操作');
+insert into sys_dict_data values(20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '删除操作');
+insert into sys_dict_data values(21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '授权操作');
+insert into sys_dict_data values(22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导出操作');
+insert into sys_dict_data values(23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导入操作');
+insert into sys_dict_data values(24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '强退操作');
+insert into sys_dict_data values(25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '生成操作');
+insert into sys_dict_data values(26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '清空操作');
+insert into sys_dict_data values(27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
+insert into sys_dict_data values(28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
+
+
+-- ----------------------------
+-- 13、参数配置表
+-- ----------------------------
+drop table if exists sys_config;
+create table sys_config (
+ config_id int(5) not null auto_increment comment '参数主键',
+ config_name varchar(100) default '' comment '参数名称',
+ config_key varchar(100) default '' comment '参数键名',
+ config_value varchar(500) default '' comment '参数键值',
+ config_type char(1) default 'N' comment '系统内置(Y是 N否)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (config_id)
+) engine=innodb auto_increment=100 comment = '参数配置表';
+
+insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
+insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456' );
+insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '深色主题theme-dark,浅色主题theme-light' );
+
+
+-- ----------------------------
+-- 14、系统访问记录
+-- ----------------------------
+drop table if exists sys_logininfor;
+create table sys_logininfor (
+ info_id bigint(20) not null auto_increment comment '访问ID',
+ login_name varchar(50) default '' comment '登录账号',
+ ipaddr varchar(50) default '' comment '登录IP地址',
+ login_location varchar(255) default '' comment '登录地点',
+ browser varchar(50) default '' comment '浏览器类型',
+ os varchar(50) default '' comment '操作系统',
+ status char(1) default '0' comment '登录状态(0成功 1失败)',
+ msg varchar(255) default '' comment '提示消息',
+ login_time datetime comment '访问时间',
+ primary key (info_id)
+) engine=innodb auto_increment=100 comment = '系统访问记录';
+
+
+-- ----------------------------
+-- 15、在线用户记录
+-- ----------------------------
+drop table if exists sys_user_online;
+create table sys_user_online (
+ sessionId varchar(50) default '' comment '用户会话id',
+ login_name varchar(50) default '' comment '登录账号',
+ dept_name varchar(50) default '' comment '部门名称',
+ ipaddr varchar(50) default '' comment '登录IP地址',
+ login_location varchar(255) default '' comment '登录地点',
+ browser varchar(50) default '' comment '浏览器类型',
+ os varchar(50) default '' comment '操作系统',
+ status varchar(10) default '' comment '在线状态on_line在线off_line离线',
+ start_timestamp datetime comment 'session创建时间',
+ last_access_time datetime comment 'session最后访问时间',
+ expire_time int(5) default 0 comment '超时时间,单位为分钟',
+ primary key (sessionId)
+) engine=innodb comment = '在线用户记录';
+
+
+-- ----------------------------
+-- 16、定时任务调度表
+-- ----------------------------
+drop table if exists sys_job;
+create table sys_job (
+ job_id bigint(20) not null auto_increment comment '任务ID',
+ job_name varchar(64) default '' comment '任务名称',
+ job_group varchar(64) default 'DEFAULT' comment '任务组名',
+ invoke_target varchar(500) not null comment '调用目标字符串',
+ cron_expression varchar(255) default '' comment 'cron执行表达式',
+ misfire_policy varchar(20) default '3' comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
+ concurrent char(1) default '1' comment '是否并发执行(0允许 1禁止)',
+ status char(1) default '0' comment '状态(0正常 1暂停)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default '' comment '备注信息',
+ primary key (job_id, job_name, job_group)
+) engine=innodb auto_increment=100 comment = '定时任务调度表';
+
+insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
+
+
+-- ----------------------------
+-- 17、定时任务调度日志表
+-- ----------------------------
+drop table if exists sys_job_log;
+create table sys_job_log (
+ job_log_id bigint(20) not null auto_increment comment '任务日志ID',
+ job_name varchar(64) not null comment '任务名称',
+ job_group varchar(64) not null comment '任务组名',
+ invoke_target varchar(500) not null comment '调用目标字符串',
+ job_message varchar(500) comment '日志信息',
+ status char(1) default '0' comment '执行状态(0正常 1失败)',
+ exception_info varchar(2000) default '' comment '异常信息',
+ create_time datetime comment '创建时间',
+ primary key (job_log_id)
+) engine=innodb comment = '定时任务调度日志表';
+
+
+-- ----------------------------
+-- 18、通知公告表
+-- ----------------------------
+drop table if exists sys_notice;
+create table sys_notice (
+ notice_id int(4) not null auto_increment comment '公告ID',
+ notice_title varchar(50) not null comment '公告标题',
+ notice_type char(1) not null comment '公告类型(1通知 2公告)',
+ notice_content varchar(2000) default null comment '公告内容',
+ status char(1) default '0' comment '公告状态(0正常 1关闭)',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(255) default null comment '备注',
+ primary key (notice_id)
+) engine=innodb auto_increment=10 comment = '通知公告表';
+
+-- ----------------------------
+-- 初始化-公告信息表数据
+-- ----------------------------
+insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
+insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
+
+
+-- ----------------------------
+-- 19、代码生成业务表
+-- ----------------------------
+drop table if exists gen_table;
+create table gen_table (
+ table_id bigint(20) not null auto_increment comment '编号',
+ table_name varchar(200) default '' comment '表名称',
+ table_comment varchar(500) default '' comment '表描述',
+ class_name varchar(100) default '' comment '实体类名称',
+ tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作)',
+ package_name varchar(100) comment '生成包路径',
+ module_name varchar(30) comment '生成模块名',
+ business_name varchar(30) comment '生成业务名',
+ function_name varchar(50) comment '生成功能名',
+ function_author varchar(50) comment '生成功能作者',
+ options varchar(1000) comment '其它生成选项',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ remark varchar(500) default null comment '备注',
+ primary key (table_id)
+) engine=innodb auto_increment=1 comment = '代码生成业务表';
+
+
+-- ----------------------------
+-- 20、代码生成业务表字段
+-- ----------------------------
+drop table if exists gen_table_column;
+create table gen_table_column (
+ column_id bigint(20) not null auto_increment comment '编号',
+ table_id varchar(64) comment '归属表编号',
+ column_name varchar(200) comment '列名称',
+ column_comment varchar(500) comment '列描述',
+ column_type varchar(100) comment '列类型',
+ java_type varchar(500) comment 'JAVA类型',
+ java_field varchar(200) comment 'JAVA字段名',
+ is_pk char(1) comment '是否主键(1是)',
+ is_increment char(1) comment '是否自增(1是)',
+ is_required char(1) comment '是否必填(1是)',
+ is_insert char(1) comment '是否为插入字段(1是)',
+ is_edit char(1) comment '是否编辑字段(1是)',
+ is_list char(1) comment '是否列表字段(1是)',
+ is_query char(1) comment '是否查询字段(1是)',
+ query_type varchar(200) default 'EQ' comment '查询方式(等于、不等于、大于、小于、范围)',
+ html_type varchar(200) comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
+ dict_type varchar(200) default '' comment '字典类型',
+ sort int comment '排序',
+ create_by varchar(64) default '' comment '创建者',
+ create_time datetime comment '创建时间',
+ update_by varchar(64) default '' comment '更新者',
+ update_time datetime comment '更新时间',
+ primary key (column_id)
+) engine=innodb auto_increment=1 comment = '代码生成业务表字段';
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/db/migration/mysql/V002__init_quartz_tables.sql b/ruoyi-admin/src/main/resources/db/migration/mysql/V002__init_quartz_tables.sql
new file mode 100644
index 000000000..55665e2b9
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/db/migration/mysql/V002__init_quartz_tables.sql
@@ -0,0 +1,170 @@
+-- ----------------------------
+-- 1、存储每一个已配置的 jobDetail 的详细信息
+-- ----------------------------
+drop table if exists QRTZ_JOB_DETAILS;
+create table QRTZ_JOB_DETAILS (
+ sched_name varchar(120) not null,
+ job_name varchar(200) not null,
+ job_group varchar(200) not null,
+ description varchar(250) null,
+ job_class_name varchar(250) not null,
+ is_durable varchar(1) not null,
+ is_nonconcurrent varchar(1) not null,
+ is_update_data varchar(1) not null,
+ requests_recovery varchar(1) not null,
+ job_data blob null,
+ primary key (sched_name,job_name,job_group)
+) engine=innodb;
+
+-- ----------------------------
+-- 2、 存储已配置的 Trigger 的信息
+-- ----------------------------
+drop table if exists QRTZ_TRIGGERS;
+create table QRTZ_TRIGGERS (
+ sched_name varchar(120) not null,
+ trigger_name varchar(200) not null,
+ trigger_group varchar(200) not null,
+ job_name varchar(200) not null,
+ job_group varchar(200) not null,
+ description varchar(250) null,
+ next_fire_time bigint(13) null,
+ prev_fire_time bigint(13) null,
+ priority integer null,
+ trigger_state varchar(16) not null,
+ trigger_type varchar(8) not null,
+ start_time bigint(13) not null,
+ end_time bigint(13) null,
+ calendar_name varchar(200) null,
+ misfire_instr smallint(2) null,
+ job_data blob null,
+ primary key (sched_name,trigger_name,trigger_group),
+ foreign key (sched_name,job_name,job_group) references QRTZ_JOB_DETAILS(sched_name,job_name,job_group)
+) engine=innodb;
+
+-- ----------------------------
+-- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数
+-- ----------------------------
+drop table if exists QRTZ_SIMPLE_TRIGGERS;
+create table QRTZ_SIMPLE_TRIGGERS (
+ sched_name varchar(120) not null,
+ trigger_name varchar(200) not null,
+ trigger_group varchar(200) not null,
+ repeat_count bigint(7) not null,
+ repeat_interval bigint(12) not null,
+ times_triggered bigint(10) not null,
+ primary key (sched_name,trigger_name,trigger_group),
+ foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
+) engine=innodb;
+
+-- ----------------------------
+-- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息
+-- ----------------------------
+drop table if exists QRTZ_CRON_TRIGGERS;
+create table QRTZ_CRON_TRIGGERS (
+ sched_name varchar(120) not null,
+ trigger_name varchar(200) not null,
+ trigger_group varchar(200) not null,
+ cron_expression varchar(200) not null,
+ time_zone_id varchar(80),
+ primary key (sched_name,trigger_name,trigger_group),
+ foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
+) engine=innodb;
+
+-- ----------------------------
+-- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
+-- ----------------------------
+drop table if exists QRTZ_BLOB_TRIGGERS;
+create table QRTZ_BLOB_TRIGGERS (
+ sched_name varchar(120) not null,
+ trigger_name varchar(200) not null,
+ trigger_group varchar(200) not null,
+ blob_data blob null,
+ primary key (sched_name,trigger_name,trigger_group),
+ foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
+) engine=innodb;
+
+-- ----------------------------
+-- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围
+-- ----------------------------
+drop table if exists QRTZ_CALENDARS;
+create table QRTZ_CALENDARS (
+ sched_name varchar(120) not null,
+ calendar_name varchar(200) not null,
+ calendar blob not null,
+ primary key (sched_name,calendar_name)
+) engine=innodb;
+
+-- ----------------------------
+-- 7、 存储已暂停的 Trigger 组的信息
+-- ----------------------------
+drop table if exists QRTZ_PAUSED_TRIGGER_GRPS;
+create table QRTZ_PAUSED_TRIGGER_GRPS (
+ sched_name varchar(120) not null,
+ trigger_group varchar(200) not null,
+ primary key (sched_name,trigger_group)
+) engine=innodb;
+
+-- ----------------------------
+-- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
+-- ----------------------------
+drop table if exists QRTZ_FIRED_TRIGGERS;
+create table QRTZ_FIRED_TRIGGERS (
+ sched_name varchar(120) not null,
+ entry_id varchar(95) not null,
+ trigger_name varchar(200) not null,
+ trigger_group varchar(200) not null,
+ instance_name varchar(200) not null,
+ fired_time bigint(13) not null,
+ sched_time bigint(13) not null,
+ priority integer not null,
+ state varchar(16) not null,
+ job_name varchar(200) null,
+ job_group varchar(200) null,
+ is_nonconcurrent varchar(1) null,
+ requests_recovery varchar(1) null,
+ primary key (sched_name,entry_id)
+) engine=innodb;
+
+-- ----------------------------
+-- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例
+-- ----------------------------
+drop table if exists QRTZ_SCHEDULER_STATE;
+create table QRTZ_SCHEDULER_STATE (
+ sched_name varchar(120) not null,
+ instance_name varchar(200) not null,
+ last_checkin_time bigint(13) not null,
+ checkin_interval bigint(13) not null,
+ primary key (sched_name,instance_name)
+) engine=innodb;
+
+-- ----------------------------
+-- 10、 存储程序的悲观锁的信息(假如使用了悲观锁)
+-- ----------------------------
+drop table if exists QRTZ_LOCKS;
+create table QRTZ_LOCKS (
+ sched_name varchar(120) not null,
+ lock_name varchar(40) not null,
+ primary key (sched_name,lock_name)
+) engine=innodb;
+
+drop table if exists QRTZ_SIMPROP_TRIGGERS;
+create table QRTZ_SIMPROP_TRIGGERS (
+ sched_name varchar(120) not null,
+ trigger_name varchar(200) not null,
+ trigger_group varchar(200) not null,
+ str_prop_1 varchar(512) null,
+ str_prop_2 varchar(512) null,
+ str_prop_3 varchar(512) null,
+ int_prop_1 int null,
+ int_prop_2 int null,
+ long_prop_1 bigint null,
+ long_prop_2 bigint null,
+ dec_prop_1 numeric(13,4) null,
+ dec_prop_2 numeric(13,4) null,
+ bool_prop_1 varchar(1) null,
+ bool_prop_2 varchar(1) null,
+ primary key (sched_name,trigger_name,trigger_group),
+ foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
+) engine=innodb;
+
+commit;
\ No newline at end of file
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 1156bc378..540ecb592 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -23,6 +23,13 @@
spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-tomcat
+ provided
+
+
org.springframework.boot
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
index 29a9eb540..95e3623a0 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java
@@ -37,8 +37,7 @@ public class SysJobServiceImpl implements ISysJobService
* 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据)
*/
@PostConstruct
- public void init() throws SchedulerException, TaskException
- {
+ public void init() throws SchedulerException, TaskException {
List jobList = jobMapper.selectJobAll();
for (SysJob job : jobList)
{
From 56c150e981136ec6ddd8fc656713d80c644824cf Mon Sep 17 00:00:00 2001
From: fengyan <2316696377@qq.com>
Date: Thu, 21 Nov 2019 18:20:37 +0800
Subject: [PATCH 02/52] =?UTF-8?q?=E6=B7=BB=E5=8A=A0flyway=E5=90=8E?=
=?UTF-8?q?=EF=BC=8C=E6=97=A0=E9=9C=80=E6=89=8B=E5=8A=A8=E5=88=9B=E5=BB=BA?=
=?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=EF=BC=9B=E7=A7=BB=E9=99=A4=E7=9B=B8?=
=?UTF-8?q?=E5=85=B3=E8=84=9A=E6=9C=AC=EF=BC=8C=E4=BB=A5=E5=85=8D=E8=AF=AF?=
=?UTF-8?q?=E5=AF=BC=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sql/quartz.sql | 170 -----------
sql/ry_20191008.sql | 695 --------------------------------------------
2 files changed, 865 deletions(-)
delete mode 100644 sql/quartz.sql
delete mode 100644 sql/ry_20191008.sql
diff --git a/sql/quartz.sql b/sql/quartz.sql
deleted file mode 100644
index 52b6a0926..000000000
--- a/sql/quartz.sql
+++ /dev/null
@@ -1,170 +0,0 @@
--- ----------------------------
--- 1、存储每一个已配置的 jobDetail 的详细信息
--- ----------------------------
-drop table if exists QRTZ_JOB_DETAILS;
-create table QRTZ_JOB_DETAILS (
- sched_name varchar(120) not null,
- job_name varchar(200) not null,
- job_group varchar(200) not null,
- description varchar(250) null,
- job_class_name varchar(250) not null,
- is_durable varchar(1) not null,
- is_nonconcurrent varchar(1) not null,
- is_update_data varchar(1) not null,
- requests_recovery varchar(1) not null,
- job_data blob null,
- primary key (sched_name,job_name,job_group)
-) engine=innodb;
-
--- ----------------------------
--- 2、 存储已配置的 Trigger 的信息
--- ----------------------------
-drop table if exists QRTZ_TRIGGERS;
-create table QRTZ_TRIGGERS (
- sched_name varchar(120) not null,
- trigger_name varchar(200) not null,
- trigger_group varchar(200) not null,
- job_name varchar(200) not null,
- job_group varchar(200) not null,
- description varchar(250) null,
- next_fire_time bigint(13) null,
- prev_fire_time bigint(13) null,
- priority integer null,
- trigger_state varchar(16) not null,
- trigger_type varchar(8) not null,
- start_time bigint(13) not null,
- end_time bigint(13) null,
- calendar_name varchar(200) null,
- misfire_instr smallint(2) null,
- job_data blob null,
- primary key (sched_name,trigger_name,trigger_group),
- foreign key (sched_name,job_name,job_group) references QRTZ_JOB_DETAILS(sched_name,job_name,job_group)
-) engine=innodb;
-
--- ----------------------------
--- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数
--- ----------------------------
-drop table if exists QRTZ_SIMPLE_TRIGGERS;
-create table QRTZ_SIMPLE_TRIGGERS (
- sched_name varchar(120) not null,
- trigger_name varchar(200) not null,
- trigger_group varchar(200) not null,
- repeat_count bigint(7) not null,
- repeat_interval bigint(12) not null,
- times_triggered bigint(10) not null,
- primary key (sched_name,trigger_name,trigger_group),
- foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
-) engine=innodb;
-
--- ----------------------------
--- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息
--- ----------------------------
-drop table if exists QRTZ_CRON_TRIGGERS;
-create table QRTZ_CRON_TRIGGERS (
- sched_name varchar(120) not null,
- trigger_name varchar(200) not null,
- trigger_group varchar(200) not null,
- cron_expression varchar(200) not null,
- time_zone_id varchar(80),
- primary key (sched_name,trigger_name,trigger_group),
- foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
-) engine=innodb;
-
--- ----------------------------
--- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
--- ----------------------------
-drop table if exists QRTZ_BLOB_TRIGGERS;
-create table QRTZ_BLOB_TRIGGERS (
- sched_name varchar(120) not null,
- trigger_name varchar(200) not null,
- trigger_group varchar(200) not null,
- blob_data blob null,
- primary key (sched_name,trigger_name,trigger_group),
- foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
-) engine=innodb;
-
--- ----------------------------
--- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围
--- ----------------------------
-drop table if exists QRTZ_CALENDARS;
-create table QRTZ_CALENDARS (
- sched_name varchar(120) not null,
- calendar_name varchar(200) not null,
- calendar blob not null,
- primary key (sched_name,calendar_name)
-) engine=innodb;
-
--- ----------------------------
--- 7、 存储已暂停的 Trigger 组的信息
--- ----------------------------
-drop table if exists QRTZ_PAUSED_TRIGGER_GRPS;
-create table QRTZ_PAUSED_TRIGGER_GRPS (
- sched_name varchar(120) not null,
- trigger_group varchar(200) not null,
- primary key (sched_name,trigger_group)
-) engine=innodb;
-
--- ----------------------------
--- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
--- ----------------------------
-drop table if exists QRTZ_FIRED_TRIGGERS;
-create table QRTZ_FIRED_TRIGGERS (
- sched_name varchar(120) not null,
- entry_id varchar(95) not null,
- trigger_name varchar(200) not null,
- trigger_group varchar(200) not null,
- instance_name varchar(200) not null,
- fired_time bigint(13) not null,
- sched_time bigint(13) not null,
- priority integer not null,
- state varchar(16) not null,
- job_name varchar(200) null,
- job_group varchar(200) null,
- is_nonconcurrent varchar(1) null,
- requests_recovery varchar(1) null,
- primary key (sched_name,entry_id)
-) engine=innodb;
-
--- ----------------------------
--- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例
--- ----------------------------
-drop table if exists QRTZ_SCHEDULER_STATE;
-create table QRTZ_SCHEDULER_STATE (
- sched_name varchar(120) not null,
- instance_name varchar(200) not null,
- last_checkin_time bigint(13) not null,
- checkin_interval bigint(13) not null,
- primary key (sched_name,instance_name)
-) engine=innodb;
-
--- ----------------------------
--- 10、 存储程序的悲观锁的信息(假如使用了悲观锁)
--- ----------------------------
-drop table if exists QRTZ_LOCKS;
-create table QRTZ_LOCKS (
- sched_name varchar(120) not null,
- lock_name varchar(40) not null,
- primary key (sched_name,lock_name)
-) engine=innodb;
-
-drop table if exists QRTZ_SIMPROP_TRIGGERS;
-create table QRTZ_SIMPROP_TRIGGERS (
- sched_name varchar(120) not null,
- trigger_name varchar(200) not null,
- trigger_group varchar(200) not null,
- str_prop_1 varchar(512) null,
- str_prop_2 varchar(512) null,
- str_prop_3 varchar(512) null,
- int_prop_1 int null,
- int_prop_2 int null,
- long_prop_1 bigint null,
- long_prop_2 bigint null,
- dec_prop_1 numeric(13,4) null,
- dec_prop_2 numeric(13,4) null,
- bool_prop_1 varchar(1) null,
- bool_prop_2 varchar(1) null,
- primary key (sched_name,trigger_name,trigger_group),
- foreign key (sched_name,trigger_name,trigger_group) references QRTZ_TRIGGERS(sched_name,trigger_name,trigger_group)
-) engine=innodb;
-
-commit;
\ No newline at end of file
diff --git a/sql/ry_20191008.sql b/sql/ry_20191008.sql
deleted file mode 100644
index 293c38404..000000000
--- a/sql/ry_20191008.sql
+++ /dev/null
@@ -1,695 +0,0 @@
--- ----------------------------
--- 1、部门表
--- ----------------------------
-drop table if exists sys_dept;
-create table sys_dept (
- dept_id bigint(20) not null auto_increment comment '部门id',
- parent_id bigint(20) default 0 comment '父部门id',
- ancestors varchar(50) default '' comment '祖级列表',
- dept_name varchar(30) default '' comment '部门名称',
- order_num int(4) default 0 comment '显示顺序',
- leader varchar(20) default null comment '负责人',
- phone varchar(11) default null comment '联系电话',
- email varchar(50) default null comment '邮箱',
- status char(1) default '0' comment '部门状态(0正常 1停用)',
- del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- primary key (dept_id)
-) engine=innodb auto_increment=200 comment = '部门表';
-
--- ----------------------------
--- 初始化-部门表数据
--- ----------------------------
-insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00');
-
-
--- ----------------------------
--- 2、用户信息表
--- ----------------------------
-drop table if exists sys_user;
-create table sys_user (
- user_id bigint(20) not null auto_increment comment '用户ID',
- dept_id bigint(20) default null comment '部门ID',
- login_name varchar(30) not null comment '登录账号',
- user_name varchar(30) not null comment '用户昵称',
- user_type varchar(2) default '00' comment '用户类型(00系统用户)',
- email varchar(50) default '' comment '用户邮箱',
- phonenumber varchar(11) default '' comment '手机号码',
- sex char(1) default '0' comment '用户性别(0男 1女 2未知)',
- avatar varchar(100) default '' comment '头像路径',
- password varchar(50) default '' comment '密码',
- salt varchar(20) default '' comment '盐加密',
- status char(1) default '0' comment '帐号状态(0正常 1停用)',
- del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
- login_ip varchar(50) default '' comment '最后登陆IP',
- login_date datetime comment '最后登陆时间',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (user_id)
-) engine=innodb auto_increment=100 comment = '用户信息表';
-
--- ----------------------------
--- 初始化-用户信息表数据
--- ----------------------------
-insert into sys_user values(1, 103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
-insert into sys_user values(2, 105, 'ry', '若依', '00', 'ry@qq.com', '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', '0', '0', '127.0.0.1', '2018-03-16 11-33-00', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '测试员');
-
-
--- ----------------------------
--- 3、岗位信息表
--- ----------------------------
-drop table if exists sys_post;
-create table sys_post
-(
- post_id bigint(20) not null auto_increment comment '岗位ID',
- post_code varchar(64) not null comment '岗位编码',
- post_name varchar(50) not null comment '岗位名称',
- post_sort int(4) not null comment '显示顺序',
- status char(1) not null comment '状态(0正常 1停用)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (post_id)
-) engine=innodb comment = '岗位信息表';
-
--- ----------------------------
--- 初始化-岗位信息表数据
--- ----------------------------
-insert into sys_post values(1, 'ceo', '董事长', 1, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_post values(2, 'se', '项目经理', 2, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_post values(3, 'hr', '人力资源', 3, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_post values(4, 'user', '普通员工', 4, '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-
-
--- ----------------------------
--- 4、角色信息表
--- ----------------------------
-drop table if exists sys_role;
-create table sys_role (
- role_id bigint(20) not null auto_increment comment '角色ID',
- role_name varchar(30) not null comment '角色名称',
- role_key varchar(100) not null comment '角色权限字符串',
- role_sort int(4) not null comment '显示顺序',
- data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
- status char(1) not null comment '角色状态(0正常 1停用)',
- del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (role_id)
-) engine=innodb auto_increment=100 comment = '角色信息表';
-
--- ----------------------------
--- 初始化-角色信息表数据
--- ----------------------------
-insert into sys_role values('1', '管理员', 'admin', 1, 1, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
-insert into sys_role values('2', '普通角色', 'common', 2, 2, '0', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '普通角色');
-
-
--- ----------------------------
--- 5、菜单权限表
--- ----------------------------
-drop table if exists sys_menu;
-create table sys_menu (
- menu_id bigint(20) not null auto_increment comment '菜单ID',
- menu_name varchar(50) not null comment '菜单名称',
- parent_id bigint(20) default 0 comment '父菜单ID',
- order_num int(4) default 0 comment '显示顺序',
- url varchar(200) default '#' comment '请求地址',
- target varchar(20) default '' comment '打开方式(menuItem页签 menuBlank新窗口)',
- menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)',
- visible char(1) default 0 comment '菜单状态(0显示 1隐藏)',
- perms varchar(100) default null comment '权限标识',
- icon varchar(100) default '#' comment '菜单图标',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default '' comment '备注',
- primary key (menu_id)
-) engine=innodb auto_increment=2000 comment = '菜单权限表';
-
--- ----------------------------
--- 初始化-菜单信息表数据
--- ----------------------------
--- 一级菜单
-insert into sys_menu values('1', '系统管理', '0', '1', '#', '', 'M', '0', '', 'fa fa-gear', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统管理目录');
-insert into sys_menu values('2', '系统监控', '0', '2', '#', '', 'M', '0', '', 'fa fa-video-camera', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统监控目录');
-insert into sys_menu values('3', '系统工具', '0', '3', '#', '', 'M', '0', '', 'fa fa-bars', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统工具目录');
--- 二级菜单
-insert into sys_menu values('100', '用户管理', '1', '1', '/system/user', '', 'C', '0', 'system:user:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '用户管理菜单');
-insert into sys_menu values('101', '角色管理', '1', '2', '/system/role', '', 'C', '0', 'system:role:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '角色管理菜单');
-insert into sys_menu values('102', '菜单管理', '1', '3', '/system/menu', '', 'C', '0', 'system:menu:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单管理菜单');
-insert into sys_menu values('103', '部门管理', '1', '4', '/system/dept', '', 'C', '0', 'system:dept:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '部门管理菜单');
-insert into sys_menu values('104', '岗位管理', '1', '5', '/system/post', '', 'C', '0', 'system:post:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '岗位管理菜单');
-insert into sys_menu values('105', '字典管理', '1', '6', '/system/dict', '', 'C', '0', 'system:dict:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '字典管理菜单');
-insert into sys_menu values('106', '参数设置', '1', '7', '/system/config', '', 'C', '0', 'system:config:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '参数设置菜单');
-insert into sys_menu values('107', '通知公告', '1', '8', '/system/notice', '', 'C', '0', 'system:notice:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知公告菜单');
-insert into sys_menu values('108', '日志管理', '1', '9', '#', '', 'M', '0', '', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '日志管理菜单');
-insert into sys_menu values('109', '在线用户', '2', '1', '/monitor/online', '', 'C', '0', 'monitor:online:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '在线用户菜单');
-insert into sys_menu values('110', '定时任务', '2', '2', '/monitor/job', '', 'C', '0', 'monitor:job:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '定时任务菜单');
-insert into sys_menu values('111', '数据监控', '2', '3', '/monitor/data', '', 'C', '0', 'monitor:data:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '数据监控菜单');
-insert into sys_menu values('112', '服务监控', '2', '3', '/monitor/server', '', 'C', '0', 'monitor:server:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '服务监控菜单');
-insert into sys_menu values('113', '表单构建', '3', '1', '/tool/build', '', 'C', '0', 'tool:build:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '表单构建菜单');
-insert into sys_menu values('114', '代码生成', '3', '2', '/tool/gen', '', 'C', '0', 'tool:gen:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '代码生成菜单');
-insert into sys_menu values('115', '系统接口', '3', '3', '/tool/swagger', '', 'C', '0', 'tool:swagger:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统接口菜单');
--- 三级菜单
-insert into sys_menu values('500', '操作日志', '108', '1', '/monitor/operlog', '', 'C', '0', 'monitor:operlog:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作日志菜单');
-insert into sys_menu values('501', '登录日志', '108', '2', '/monitor/logininfor', '', 'C', '0', 'monitor:logininfor:view', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录日志菜单');
--- 用户管理按钮
-insert into sys_menu values('1000', '用户查询', '100', '1', '#', '', 'F', '0', 'system:user:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1001', '用户新增', '100', '2', '#', '', 'F', '0', 'system:user:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1002', '用户修改', '100', '3', '#', '', 'F', '0', 'system:user:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1003', '用户删除', '100', '4', '#', '', 'F', '0', 'system:user:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1004', '用户导出', '100', '5', '#', '', 'F', '0', 'system:user:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1005', '用户导入', '100', '6', '#', '', 'F', '0', 'system:user:import', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1006', '重置密码', '100', '7', '#', '', 'F', '0', 'system:user:resetPwd', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 角色管理按钮
-insert into sys_menu values('1007', '角色查询', '101', '1', '#', '', 'F', '0', 'system:role:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1008', '角色新增', '101', '2', '#', '', 'F', '0', 'system:role:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1009', '角色修改', '101', '3', '#', '', 'F', '0', 'system:role:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1010', '角色删除', '101', '4', '#', '', 'F', '0', 'system:role:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1011', '角色导出', '101', '5', '#', '', 'F', '0', 'system:role:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 菜单管理按钮
-insert into sys_menu values('1012', '菜单查询', '102', '1', '#', '', 'F', '0', 'system:menu:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1013', '菜单新增', '102', '2', '#', '', 'F', '0', 'system:menu:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1014', '菜单修改', '102', '3', '#', '', 'F', '0', 'system:menu:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1015', '菜单删除', '102', '4', '#', '', 'F', '0', 'system:menu:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 部门管理按钮
-insert into sys_menu values('1016', '部门查询', '103', '1', '#', '', 'F', '0', 'system:dept:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1017', '部门新增', '103', '2', '#', '', 'F', '0', 'system:dept:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1018', '部门修改', '103', '3', '#', '', 'F', '0', 'system:dept:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1019', '部门删除', '103', '4', '#', '', 'F', '0', 'system:dept:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 岗位管理按钮
-insert into sys_menu values('1020', '岗位查询', '104', '1', '#', '', 'F', '0', 'system:post:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1021', '岗位新增', '104', '2', '#', '', 'F', '0', 'system:post:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1022', '岗位修改', '104', '3', '#', '', 'F', '0', 'system:post:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1023', '岗位删除', '104', '4', '#', '', 'F', '0', 'system:post:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1024', '岗位导出', '104', '5', '#', '', 'F', '0', 'system:post:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 字典管理按钮
-insert into sys_menu values('1025', '字典查询', '105', '1', '#', '', 'F', '0', 'system:dict:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1026', '字典新增', '105', '2', '#', '', 'F', '0', 'system:dict:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1027', '字典修改', '105', '3', '#', '', 'F', '0', 'system:dict:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1028', '字典删除', '105', '4', '#', '', 'F', '0', 'system:dict:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1029', '字典导出', '105', '5', '#', '', 'F', '0', 'system:dict:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 参数设置按钮
-insert into sys_menu values('1030', '参数查询', '106', '1', '#', '', 'F', '0', 'system:config:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1031', '参数新增', '106', '2', '#', '', 'F', '0', 'system:config:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1032', '参数修改', '106', '3', '#', '', 'F', '0', 'system:config:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1033', '参数删除', '106', '4', '#', '', 'F', '0', 'system:config:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1034', '参数导出', '106', '5', '#', '', 'F', '0', 'system:config:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 通知公告按钮
-insert into sys_menu values('1035', '公告查询', '107', '1', '#', '', 'F', '0', 'system:notice:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1036', '公告新增', '107', '2', '#', '', 'F', '0', 'system:notice:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1037', '公告修改', '107', '3', '#', '', 'F', '0', 'system:notice:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1038', '公告删除', '107', '4', '#', '', 'F', '0', 'system:notice:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 操作日志按钮
-insert into sys_menu values('1039', '操作查询', '500', '1', '#', '', 'F', '0', 'monitor:operlog:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1040', '操作删除', '500', '2', '#', '', 'F', '0', 'monitor:operlog:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1041', '详细信息', '500', '3', '#', '', 'F', '0', 'monitor:operlog:detail', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1042', '日志导出', '500', '4', '#', '', 'F', '0', 'monitor:operlog:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 登录日志按钮
-insert into sys_menu values('1043', '登录查询', '501', '1', '#', '', 'F', '0', 'monitor:logininfor:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1044', '登录删除', '501', '2', '#', '', 'F', '0', 'monitor:logininfor:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1045', '日志导出', '501', '3', '#', '', 'F', '0', 'monitor:logininfor:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1046', '账户解锁', '501', '4', '#', '', 'F', '0', 'monitor:logininfor:unlock', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 在线用户按钮
-insert into sys_menu values('1047', '在线查询', '109', '1', '#', '', 'F', '0', 'monitor:online:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1048', '批量强退', '109', '2', '#', '', 'F', '0', 'monitor:online:batchForceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1049', '单条强退', '109', '3', '#', '', 'F', '0', 'monitor:online:forceLogout', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 定时任务按钮
-insert into sys_menu values('1050', '任务查询', '110', '1', '#', '', 'F', '0', 'monitor:job:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1051', '任务新增', '110', '2', '#', '', 'F', '0', 'monitor:job:add', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1052', '任务修改', '110', '3', '#', '', 'F', '0', 'monitor:job:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1053', '任务删除', '110', '4', '#', '', 'F', '0', 'monitor:job:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1054', '状态修改', '110', '5', '#', '', 'F', '0', 'monitor:job:changeStatus', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1055', '任务详细', '110', '6', '#', '', 'F', '0', 'monitor:job:detail', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1056', '任务导出', '110', '7', '#', '', 'F', '0', 'monitor:job:export', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
--- 代码生成按钮
-insert into sys_menu values('1057', '生成查询', '114', '1', '#', '', 'F', '0', 'tool:gen:list', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1058', '生成修改', '114', '2', '#', '', 'F', '0', 'tool:gen:edit', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1059', '生成删除', '114', '3', '#', '', 'F', '0', 'tool:gen:remove', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1060', '预览代码', '114', '4', '#', '', 'F', '0', 'tool:gen:preview', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_menu values('1061', '生成代码', '114', '5', '#', '', 'F', '0', 'tool:gen:code', '#', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-
-
--- ----------------------------
--- 6、用户和角色关联表 用户N-1角色
--- ----------------------------
-drop table if exists sys_user_role;
-create table sys_user_role (
- user_id bigint(20) not null comment '用户ID',
- role_id bigint(20) not null comment '角色ID',
- primary key(user_id, role_id)
-) engine=innodb comment = '用户和角色关联表';
-
--- ----------------------------
--- 初始化-用户和角色关联表数据
--- ----------------------------
-insert into sys_user_role values ('1', '1');
-insert into sys_user_role values ('2', '2');
-
-
--- ----------------------------
--- 7、角色和菜单关联表 角色1-N菜单
--- ----------------------------
-drop table if exists sys_role_menu;
-create table sys_role_menu (
- role_id bigint(20) not null comment '角色ID',
- menu_id bigint(20) not null comment '菜单ID',
- primary key(role_id, menu_id)
-) engine=innodb comment = '角色和菜单关联表';
-
--- ----------------------------
--- 初始化-角色和菜单关联表数据
--- ----------------------------
-insert into sys_role_menu values ('2', '1');
-insert into sys_role_menu values ('2', '2');
-insert into sys_role_menu values ('2', '3');
-insert into sys_role_menu values ('2', '100');
-insert into sys_role_menu values ('2', '101');
-insert into sys_role_menu values ('2', '102');
-insert into sys_role_menu values ('2', '103');
-insert into sys_role_menu values ('2', '104');
-insert into sys_role_menu values ('2', '105');
-insert into sys_role_menu values ('2', '106');
-insert into sys_role_menu values ('2', '107');
-insert into sys_role_menu values ('2', '108');
-insert into sys_role_menu values ('2', '109');
-insert into sys_role_menu values ('2', '110');
-insert into sys_role_menu values ('2', '111');
-insert into sys_role_menu values ('2', '112');
-insert into sys_role_menu values ('2', '113');
-insert into sys_role_menu values ('2', '114');
-insert into sys_role_menu values ('2', '115');
-insert into sys_role_menu values ('2', '500');
-insert into sys_role_menu values ('2', '501');
-insert into sys_role_menu values ('2', '1000');
-insert into sys_role_menu values ('2', '1001');
-insert into sys_role_menu values ('2', '1002');
-insert into sys_role_menu values ('2', '1003');
-insert into sys_role_menu values ('2', '1004');
-insert into sys_role_menu values ('2', '1005');
-insert into sys_role_menu values ('2', '1006');
-insert into sys_role_menu values ('2', '1007');
-insert into sys_role_menu values ('2', '1008');
-insert into sys_role_menu values ('2', '1009');
-insert into sys_role_menu values ('2', '1010');
-insert into sys_role_menu values ('2', '1011');
-insert into sys_role_menu values ('2', '1012');
-insert into sys_role_menu values ('2', '1013');
-insert into sys_role_menu values ('2', '1014');
-insert into sys_role_menu values ('2', '1015');
-insert into sys_role_menu values ('2', '1016');
-insert into sys_role_menu values ('2', '1017');
-insert into sys_role_menu values ('2', '1018');
-insert into sys_role_menu values ('2', '1019');
-insert into sys_role_menu values ('2', '1020');
-insert into sys_role_menu values ('2', '1021');
-insert into sys_role_menu values ('2', '1022');
-insert into sys_role_menu values ('2', '1023');
-insert into sys_role_menu values ('2', '1024');
-insert into sys_role_menu values ('2', '1025');
-insert into sys_role_menu values ('2', '1026');
-insert into sys_role_menu values ('2', '1027');
-insert into sys_role_menu values ('2', '1028');
-insert into sys_role_menu values ('2', '1029');
-insert into sys_role_menu values ('2', '1030');
-insert into sys_role_menu values ('2', '1031');
-insert into sys_role_menu values ('2', '1032');
-insert into sys_role_menu values ('2', '1033');
-insert into sys_role_menu values ('2', '1034');
-insert into sys_role_menu values ('2', '1035');
-insert into sys_role_menu values ('2', '1036');
-insert into sys_role_menu values ('2', '1037');
-insert into sys_role_menu values ('2', '1038');
-insert into sys_role_menu values ('2', '1039');
-insert into sys_role_menu values ('2', '1040');
-insert into sys_role_menu values ('2', '1041');
-insert into sys_role_menu values ('2', '1042');
-insert into sys_role_menu values ('2', '1043');
-insert into sys_role_menu values ('2', '1044');
-insert into sys_role_menu values ('2', '1045');
-insert into sys_role_menu values ('2', '1046');
-insert into sys_role_menu values ('2', '1047');
-insert into sys_role_menu values ('2', '1048');
-insert into sys_role_menu values ('2', '1049');
-insert into sys_role_menu values ('2', '1050');
-insert into sys_role_menu values ('2', '1051');
-insert into sys_role_menu values ('2', '1052');
-insert into sys_role_menu values ('2', '1053');
-insert into sys_role_menu values ('2', '1054');
-insert into sys_role_menu values ('2', '1055');
-insert into sys_role_menu values ('2', '1056');
-insert into sys_role_menu values ('2', '1057');
-insert into sys_role_menu values ('2', '1058');
-insert into sys_role_menu values ('2', '1059');
-insert into sys_role_menu values ('2', '1060');
-insert into sys_role_menu values ('2', '1061');
-
--- ----------------------------
--- 8、角色和部门关联表 角色1-N部门
--- ----------------------------
-drop table if exists sys_role_dept;
-create table sys_role_dept (
- role_id bigint(20) not null comment '角色ID',
- dept_id bigint(20) not null comment '部门ID',
- primary key(role_id, dept_id)
-) engine=innodb comment = '角色和部门关联表';
-
--- ----------------------------
--- 初始化-角色和部门关联表数据
--- ----------------------------
-insert into sys_role_dept values ('2', '100');
-insert into sys_role_dept values ('2', '101');
-insert into sys_role_dept values ('2', '105');
-
--- ----------------------------
--- 9、用户与岗位关联表 用户1-N岗位
--- ----------------------------
-drop table if exists sys_user_post;
-create table sys_user_post
-(
- user_id bigint(20) not null comment '用户ID',
- post_id bigint(20) not null comment '岗位ID',
- primary key (user_id, post_id)
-) engine=innodb comment = '用户与岗位关联表';
-
--- ----------------------------
--- 初始化-用户与岗位关联表数据
--- ----------------------------
-insert into sys_user_post values ('1', '1');
-insert into sys_user_post values ('2', '2');
-
-
--- ----------------------------
--- 10、操作日志记录
--- ----------------------------
-drop table if exists sys_oper_log;
-create table sys_oper_log (
- oper_id bigint(20) not null auto_increment comment '日志主键',
- title varchar(50) default '' comment '模块标题',
- business_type int(2) default 0 comment '业务类型(0其它 1新增 2修改 3删除)',
- method varchar(100) default '' comment '方法名称',
- request_method varchar(10) default '' comment '请求方式',
- operator_type int(1) default 0 comment '操作类别(0其它 1后台用户 2手机端用户)',
- oper_name varchar(50) default '' comment '操作人员',
- dept_name varchar(50) default '' comment '部门名称',
- oper_url varchar(255) default '' comment '请求URL',
- oper_ip varchar(50) default '' comment '主机地址',
- oper_location varchar(255) default '' comment '操作地点',
- oper_param varchar(2000) default '' comment '请求参数',
- json_result varchar(2000) default '' comment '返回参数',
- status int(1) default 0 comment '操作状态(0正常 1异常)',
- error_msg varchar(2000) default '' comment '错误消息',
- oper_time datetime comment '操作时间',
- primary key (oper_id)
-) engine=innodb auto_increment=100 comment = '操作日志记录';
-
-
--- ----------------------------
--- 11、字典类型表
--- ----------------------------
-drop table if exists sys_dict_type;
-create table sys_dict_type
-(
- dict_id bigint(20) not null auto_increment comment '字典主键',
- dict_name varchar(100) default '' comment '字典名称',
- dict_type varchar(100) default '' comment '字典类型',
- status char(1) default '0' comment '状态(0正常 1停用)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (dict_id),
- unique (dict_type)
-) engine=innodb auto_increment=100 comment = '字典类型表';
-
-insert into sys_dict_type values(1, '用户性别', 'sys_user_sex', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '用户性别列表');
-insert into sys_dict_type values(2, '菜单状态', 'sys_show_hide', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '菜单状态列表');
-insert into sys_dict_type values(3, '系统开关', 'sys_normal_disable', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统开关列表');
-insert into sys_dict_type values(4, '任务状态', 'sys_job_status', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '任务状态列表');
-insert into sys_dict_type values(5, '任务分组', 'sys_job_group', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '任务分组列表');
-insert into sys_dict_type values(6, '系统是否', 'sys_yes_no', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统是否列表');
-insert into sys_dict_type values(7, '通知类型', 'sys_notice_type', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知类型列表');
-insert into sys_dict_type values(8, '通知状态', 'sys_notice_status', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知状态列表');
-insert into sys_dict_type values(9, '操作类型', 'sys_oper_type', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '操作类型列表');
-insert into sys_dict_type values(10, '系统状态', 'sys_common_status', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '登录状态列表');
-
-
--- ----------------------------
--- 12、字典数据表
--- ----------------------------
-drop table if exists sys_dict_data;
-create table sys_dict_data
-(
- dict_code bigint(20) not null auto_increment comment '字典编码',
- dict_sort int(4) default 0 comment '字典排序',
- dict_label varchar(100) default '' comment '字典标签',
- dict_value varchar(100) default '' comment '字典键值',
- dict_type varchar(100) default '' comment '字典类型',
- css_class varchar(100) default null comment '样式属性(其他样式扩展)',
- list_class varchar(100) default null comment '表格回显样式',
- is_default char(1) default 'N' comment '是否默认(Y是 N否)',
- status char(1) default '0' comment '状态(0正常 1停用)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (dict_code)
-) engine=innodb auto_increment=100 comment = '字典数据表';
-
-insert into sys_dict_data values(1, 1, '男', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '性别男');
-insert into sys_dict_data values(2, 2, '女', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '性别女');
-insert into sys_dict_data values(3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '性别未知');
-insert into sys_dict_data values(4, 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '显示菜单');
-insert into sys_dict_data values(5, 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '隐藏菜单');
-insert into sys_dict_data values(6, 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
-insert into sys_dict_data values(7, 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
-insert into sys_dict_data values(8, 1, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
-insert into sys_dict_data values(9, 2, '暂停', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
-insert into sys_dict_data values(10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '默认分组');
-insert into sys_dict_data values(11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统分组');
-insert into sys_dict_data values(12, 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统默认是');
-insert into sys_dict_data values(13, 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '系统默认否');
-insert into sys_dict_data values(14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '通知');
-insert into sys_dict_data values(15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '公告');
-insert into sys_dict_data values(16, 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
-insert into sys_dict_data values(17, 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '关闭状态');
-insert into sys_dict_data values(18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '新增操作');
-insert into sys_dict_data values(19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '修改操作');
-insert into sys_dict_data values(20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '删除操作');
-insert into sys_dict_data values(21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '授权操作');
-insert into sys_dict_data values(22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导出操作');
-insert into sys_dict_data values(23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '导入操作');
-insert into sys_dict_data values(24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '强退操作');
-insert into sys_dict_data values(25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '生成操作');
-insert into sys_dict_data values(26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '清空操作');
-insert into sys_dict_data values(27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '正常状态');
-insert into sys_dict_data values(28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '停用状态');
-
-
--- ----------------------------
--- 13、参数配置表
--- ----------------------------
-drop table if exists sys_config;
-create table sys_config (
- config_id int(5) not null auto_increment comment '参数主键',
- config_name varchar(100) default '' comment '参数名称',
- config_key varchar(100) default '' comment '参数键名',
- config_value varchar(500) default '' comment '参数键值',
- config_type char(1) default 'N' comment '系统内置(Y是 N否)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (config_id)
-) engine=innodb auto_increment=100 comment = '参数配置表';
-
-insert into sys_config values(1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
-insert into sys_config values(2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '初始化密码 123456' );
-insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '深色主题theme-dark,浅色主题theme-light' );
-
-
--- ----------------------------
--- 14、系统访问记录
--- ----------------------------
-drop table if exists sys_logininfor;
-create table sys_logininfor (
- info_id bigint(20) not null auto_increment comment '访问ID',
- login_name varchar(50) default '' comment '登录账号',
- ipaddr varchar(50) default '' comment '登录IP地址',
- login_location varchar(255) default '' comment '登录地点',
- browser varchar(50) default '' comment '浏览器类型',
- os varchar(50) default '' comment '操作系统',
- status char(1) default '0' comment '登录状态(0成功 1失败)',
- msg varchar(255) default '' comment '提示消息',
- login_time datetime comment '访问时间',
- primary key (info_id)
-) engine=innodb auto_increment=100 comment = '系统访问记录';
-
-
--- ----------------------------
--- 15、在线用户记录
--- ----------------------------
-drop table if exists sys_user_online;
-create table sys_user_online (
- sessionId varchar(50) default '' comment '用户会话id',
- login_name varchar(50) default '' comment '登录账号',
- dept_name varchar(50) default '' comment '部门名称',
- ipaddr varchar(50) default '' comment '登录IP地址',
- login_location varchar(255) default '' comment '登录地点',
- browser varchar(50) default '' comment '浏览器类型',
- os varchar(50) default '' comment '操作系统',
- status varchar(10) default '' comment '在线状态on_line在线off_line离线',
- start_timestamp datetime comment 'session创建时间',
- last_access_time datetime comment 'session最后访问时间',
- expire_time int(5) default 0 comment '超时时间,单位为分钟',
- primary key (sessionId)
-) engine=innodb comment = '在线用户记录';
-
-
--- ----------------------------
--- 16、定时任务调度表
--- ----------------------------
-drop table if exists sys_job;
-create table sys_job (
- job_id bigint(20) not null auto_increment comment '任务ID',
- job_name varchar(64) default '' comment '任务名称',
- job_group varchar(64) default 'DEFAULT' comment '任务组名',
- invoke_target varchar(500) not null comment '调用目标字符串',
- cron_expression varchar(255) default '' comment 'cron执行表达式',
- misfire_policy varchar(20) default '3' comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
- concurrent char(1) default '1' comment '是否并发执行(0允许 1禁止)',
- status char(1) default '0' comment '状态(0正常 1暂停)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default '' comment '备注信息',
- primary key (job_id, job_name, job_group)
-) engine=innodb auto_increment=100 comment = '定时任务调度表';
-
-insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '');
-
-
--- ----------------------------
--- 17、定时任务调度日志表
--- ----------------------------
-drop table if exists sys_job_log;
-create table sys_job_log (
- job_log_id bigint(20) not null auto_increment comment '任务日志ID',
- job_name varchar(64) not null comment '任务名称',
- job_group varchar(64) not null comment '任务组名',
- invoke_target varchar(500) not null comment '调用目标字符串',
- job_message varchar(500) comment '日志信息',
- status char(1) default '0' comment '执行状态(0正常 1失败)',
- exception_info varchar(2000) default '' comment '异常信息',
- create_time datetime comment '创建时间',
- primary key (job_log_id)
-) engine=innodb comment = '定时任务调度日志表';
-
-
--- ----------------------------
--- 18、通知公告表
--- ----------------------------
-drop table if exists sys_notice;
-create table sys_notice (
- notice_id int(4) not null auto_increment comment '公告ID',
- notice_title varchar(50) not null comment '公告标题',
- notice_type char(1) not null comment '公告类型(1通知 2公告)',
- notice_content varchar(2000) default null comment '公告内容',
- status char(1) default '0' comment '公告状态(0正常 1关闭)',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(255) default null comment '备注',
- primary key (notice_id)
-) engine=innodb auto_increment=10 comment = '通知公告表';
-
--- ----------------------------
--- 初始化-公告信息表数据
--- ----------------------------
-insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
-insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容', '0', 'admin', '2018-03-16 11-33-00', 'ry', '2018-03-16 11-33-00', '管理员');
-
-
--- ----------------------------
--- 19、代码生成业务表
--- ----------------------------
-drop table if exists gen_table;
-create table gen_table (
- table_id bigint(20) not null auto_increment comment '编号',
- table_name varchar(200) default '' comment '表名称',
- table_comment varchar(500) default '' comment '表描述',
- class_name varchar(100) default '' comment '实体类名称',
- tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作)',
- package_name varchar(100) comment '生成包路径',
- module_name varchar(30) comment '生成模块名',
- business_name varchar(30) comment '生成业务名',
- function_name varchar(50) comment '生成功能名',
- function_author varchar(50) comment '生成功能作者',
- options varchar(1000) comment '其它生成选项',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- remark varchar(500) default null comment '备注',
- primary key (table_id)
-) engine=innodb auto_increment=1 comment = '代码生成业务表';
-
-
--- ----------------------------
--- 20、代码生成业务表字段
--- ----------------------------
-drop table if exists gen_table_column;
-create table gen_table_column (
- column_id bigint(20) not null auto_increment comment '编号',
- table_id varchar(64) comment '归属表编号',
- column_name varchar(200) comment '列名称',
- column_comment varchar(500) comment '列描述',
- column_type varchar(100) comment '列类型',
- java_type varchar(500) comment 'JAVA类型',
- java_field varchar(200) comment 'JAVA字段名',
- is_pk char(1) comment '是否主键(1是)',
- is_increment char(1) comment '是否自增(1是)',
- is_required char(1) comment '是否必填(1是)',
- is_insert char(1) comment '是否为插入字段(1是)',
- is_edit char(1) comment '是否编辑字段(1是)',
- is_list char(1) comment '是否列表字段(1是)',
- is_query char(1) comment '是否查询字段(1是)',
- query_type varchar(200) default 'EQ' comment '查询方式(等于、不等于、大于、小于、范围)',
- html_type varchar(200) comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
- dict_type varchar(200) default '' comment '字典类型',
- sort int comment '排序',
- create_by varchar(64) default '' comment '创建者',
- create_time datetime comment '创建时间',
- update_by varchar(64) default '' comment '更新者',
- update_time datetime comment '更新时间',
- primary key (column_id)
-) engine=innodb auto_increment=1 comment = '代码生成业务表字段';
\ No newline at end of file
From 9ba75d02e0bb26ad45ba0989734a3d264635624c Mon Sep 17 00:00:00 2001
From: administrator <2316696377@qq.com>
Date: Fri, 22 Nov 2019 13:12:06 +0800
Subject: [PATCH 03/52] format code
---
.../ruoyi/common/annotation/DataScope.java | 55 +-
.../ruoyi/common/annotation/DataSource.java | 52 +-
.../com/ruoyi/common/annotation/Excel.java | 217 +-
.../com/ruoyi/common/annotation/Excels.java | 5 +-
.../java/com/ruoyi/common/annotation/Log.java | 80 +-
.../ruoyi/common/annotation/RepeatSubmit.java | 6 +-
.../java/com/ruoyi/common/config/Global.java | 228 +-
.../com/ruoyi/common/config/ServerConfig.java | 63 +-
.../DynamicDataSourceContextHolder.java | 86 +-
.../config/thread/ThreadPoolConfig.java | 120 +-
.../com/ruoyi/common/constant/Constants.java | 137 +-
.../ruoyi/common/constant/GenConstants.java | 241 ++-
.../common/constant/PermissionConstants.java | 65 +-
.../common/constant/ScheduleConstants.java | 106 +-
.../ruoyi/common/constant/ShiroConstants.java | 147 +-
.../ruoyi/common/constant/UserConstants.java | 237 ++-
.../core/controller/BaseController.java | 327 ++-
.../ruoyi/common/core/domain/AjaxResult.java | 360 ++--
.../ruoyi/common/core/domain/BaseEntity.java | 227 +-
.../ruoyi/common/core/domain/TreeEntity.java | 123 +-
.../com/ruoyi/common/core/domain/Ztree.java | 207 +-
.../ruoyi/common/core/page/PageDomain.java | 135 +-
.../ruoyi/common/core/page/TableDataInfo.java | 165 +-
.../ruoyi/common/core/page/TableSupport.java | 57 +-
.../ruoyi/common/core/text/CharsetKit.java | 177 +-
.../com/ruoyi/common/core/text/Convert.java | 1849 ++++++++---------
.../ruoyi/common/core/text/StrFormatter.java | 168 +-
.../ruoyi/common/enums/BusinessStatus.java | 37 +-
.../com/ruoyi/common/enums/BusinessType.java | 117 +-
.../ruoyi/common/enums/DataSourceType.java | 37 +-
.../com/ruoyi/common/enums/OnlineStatus.java | 47 +-
.../com/ruoyi/common/enums/OperatorType.java | 47 +-
.../com/ruoyi/common/enums/UserStatus.java | 56 +-
.../common/exception/BusinessException.java | 14 +-
.../common/exception/DemoModeException.java | 28 +-
.../common/exception/base/BaseException.java | 181 +-
.../common/exception/file/FileException.java | 8 +-
.../FileNameLengthLimitExceededException.java | 30 +-
.../file/FileSizeLimitExceededException.java | 10 +-
.../file/InvalidExtensionException.java | 132 +-
.../common/exception/job/TaskException.java | 61 +-
.../exception/user/CaptchaException.java | 30 +-
.../exception/user/RoleBlockedException.java | 30 +-
.../exception/user/UserBlockedException.java | 30 +-
.../exception/user/UserDeleteException.java | 30 +-
.../common/exception/user/UserException.java | 34 +-
.../user/UserNotExistsException.java | 30 +-
.../user/UserPasswordNotMatchException.java | 30 +-
.../UserPasswordRetryLimitCountException.java | 30 +-
...UserPasswordRetryLimitExceedException.java | 30 +-
.../main/java/com/ruoyi/common/json/JSON.java | 309 ++-
.../com/ruoyi/common/json/JSONObject.java | 1367 ++++++------
.../com/ruoyi/common/utils/AddressUtils.java | 100 +-
.../java/com/ruoyi/common/utils/Arith.java | 227 +-
.../com/ruoyi/common/utils/DateUtils.java | 290 ++-
.../com/ruoyi/common/utils/ExceptionUtil.java | 76 +-
.../java/com/ruoyi/common/utils/IpUtils.java | 344 ++-
.../com/ruoyi/common/utils/MapDataUtil.java | 91 +-
.../com/ruoyi/common/utils/MessageUtils.java | 50 +-
.../com/ruoyi/common/utils/ServletUtils.java | 253 ++-
.../com/ruoyi/common/utils/StringUtils.java | 742 +++----
.../java/com/ruoyi/common/utils/Threads.java | 62 +-
.../java/com/ruoyi/common/utils/YamlUtil.java | 155 +-
.../ruoyi/common/utils/bean/BeanUtils.java | 214 +-
.../common/utils/file/FileUploadUtils.java | 451 ++--
.../ruoyi/common/utils/file/FileUtils.java | 256 +--
.../common/utils/file/MimeTypeUtils.java | 23 +-
.../ruoyi/common/utils/html/EscapeUtil.java | 81 +-
.../ruoyi/common/utils/http/HttpUtils.java | 441 ++--
.../com/ruoyi/common/utils/poi/ExcelUtil.java | 457 ++--
.../common/utils/reflect/ReflectUtils.java | 221 +-
.../ruoyi/common/utils/security/Md5Utils.java | 120 +-
.../utils/security/PermissionUtils.java | 219 +-
.../common/utils/spring/SpringUtils.java | 216 +-
.../com/ruoyi/common/utils/sql/SqlUtil.java | 14 +-
.../java/com/ruoyi/common/xss/XssFilter.java | 180 +-
.../xss/XssHttpServletRequestWrapper.java | 72 +-
77 files changed, 6377 insertions(+), 7373 deletions(-)
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
index fe5a01f55..b0d4b7ffc 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java
@@ -1,28 +1,27 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 数据权限过滤注解
- *
- * @author ruoyi
- */
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface DataScope
-{
- /**
- * 部门表的别名
- */
- public String deptAlias() default "";
-
- /**
- * 用户表的别名
- */
- public String userAlias() default "";
-}
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 数据权限过滤注解
+ *
+ * @author ruoyi
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface DataScope {
+ /**
+ * 部门表的别名
+ */
+ public String deptAlias() default "";
+
+ /**
+ * 用户表的别名
+ */
+ public String userAlias() default "";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
index a272a5b7b..53b8c2fae 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java
@@ -1,26 +1,26 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Inherited;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import com.ruoyi.common.enums.DataSourceType;
-
-/**
- * 自定义多数据源切换注解
- *
- * @author ruoyi
- */
-@Target({ ElementType.METHOD, ElementType.TYPE })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-@Inherited
-public @interface DataSource
-{
- /**
- * 切换数据源名称
- */
- public DataSourceType value() default DataSourceType.MASTER;
-}
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.ruoyi.common.enums.DataSourceType;
+
+/**
+ * 自定义多数据源切换注解
+ *
+ * @author ruoyi
+ */
+@Target({ElementType.METHOD, ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Inherited
+public @interface DataSource {
+ /**
+ * 切换数据源名称
+ */
+ public DataSourceType value() default DataSourceType.MASTER;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
index 2112128a8..f73eabebe 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java
@@ -1,113 +1,106 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * 自定义导出Excel数据注解
- *
- * @author ruoyi
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.FIELD)
-public @interface Excel
-{
- /**
- * 导出到Excel中的名字.
- */
- public String name() default "";
-
- /**
- * 日期格式, 如: yyyy-MM-dd
- */
- public String dateFormat() default "";
-
- /**
- * 读取内容转表达式 (如: 0=男,1=女,2=未知)
- */
- public String readConverterExp() default "";
-
- /**
- * 导出类型(0数字 1字符串)
- */
- public ColumnType cellType() default ColumnType.STRING;
-
- /**
- * 导出时在excel中每个列的高度 单位为字符
- */
- public double height() default 14;
-
- /**
- * 导出时在excel中每个列的宽 单位为字符
- */
- public double width() default 16;
-
- /**
- * 文字后缀,如% 90 变成90%
- */
- public String suffix() default "";
-
- /**
- * 当值为空时,字段的默认值
- */
- public String defaultValue() default "";
-
- /**
- * 提示信息
- */
- public String prompt() default "";
-
- /**
- * 设置只能选择不能输入的列内容.
- */
- public String[] combo() default {};
-
- /**
- * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
- */
- public boolean isExport() default true;
-
- /**
- * 另一个类中的属性名称,支持多级获取,以小数点隔开
- */
- public String targetAttr() default "";
-
- /**
- * 字段类型(0:导出导入;1:仅导出;2:仅导入)
- */
- Type type() default Type.ALL;
-
- public enum Type
- {
- ALL(0), EXPORT(1), IMPORT(2);
- private final int value;
-
- Type(int value)
- {
- this.value = value;
- }
-
- public int value()
- {
- return this.value;
- }
- }
-
- public enum ColumnType
- {
- NUMERIC(0), STRING(1);
- private final int value;
-
- ColumnType(int value)
- {
- this.value = value;
- }
-
- public int value()
- {
- return this.value;
- }
- }
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 自定义导出Excel数据注解
+ *
+ * @author ruoyi
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.FIELD)
+public @interface Excel {
+ /**
+ * 导出到Excel中的名字.
+ */
+ public String name() default "";
+
+ /**
+ * 日期格式, 如: yyyy-MM-dd
+ */
+ public String dateFormat() default "";
+
+ /**
+ * 读取内容转表达式 (如: 0=男,1=女,2=未知)
+ */
+ public String readConverterExp() default "";
+
+ /**
+ * 导出类型(0数字 1字符串)
+ */
+ public ColumnType cellType() default ColumnType.STRING;
+
+ /**
+ * 导出时在excel中每个列的高度 单位为字符
+ */
+ public double height() default 14;
+
+ /**
+ * 导出时在excel中每个列的宽 单位为字符
+ */
+ public double width() default 16;
+
+ /**
+ * 文字后缀,如% 90 变成90%
+ */
+ public String suffix() default "";
+
+ /**
+ * 当值为空时,字段的默认值
+ */
+ public String defaultValue() default "";
+
+ /**
+ * 提示信息
+ */
+ public String prompt() default "";
+
+ /**
+ * 设置只能选择不能输入的列内容.
+ */
+ public String[] combo() default {};
+
+ /**
+ * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
+ */
+ public boolean isExport() default true;
+
+ /**
+ * 另一个类中的属性名称,支持多级获取,以小数点隔开
+ */
+ public String targetAttr() default "";
+
+ /**
+ * 字段类型(0:导出导入;1:仅导出;2:仅导入)
+ */
+ Type type() default Type.ALL;
+
+ public enum Type {
+ ALL(0), EXPORT(1), IMPORT(2);
+ private final int value;
+
+ Type(int value) {
+ this.value = value;
+ }
+
+ public int value() {
+ return this.value;
+ }
+ }
+
+ public enum ColumnType {
+ NUMERIC(0), STRING(1);
+ private final int value;
+
+ ColumnType(int value) {
+ this.value = value;
+ }
+
+ public int value() {
+ return this.value;
+ }
+ }
}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java
index 8c6870c20..8fb4172de 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java
@@ -7,12 +7,11 @@ import java.lang.annotation.Target;
/**
* Excel注解集
- *
+ *
* @author ruoyi
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
-public @interface Excels
-{
+public @interface Excels {
Excel[] value();
}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
index 8982f07be..a8683c8a2 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java
@@ -1,40 +1,40 @@
-package com.ruoyi.common.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import com.ruoyi.common.enums.BusinessType;
-import com.ruoyi.common.enums.OperatorType;
-
-/**
- * 自定义操作日志记录注解
- *
- * @author ruoyi
- */
-@Target({ ElementType.PARAMETER, ElementType.METHOD })
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface Log
-{
- /**
- * 模块
- */
- public String title() default "";
-
- /**
- * 功能
- */
- public BusinessType businessType() default BusinessType.OTHER;
-
- /**
- * 操作人类别
- */
- public OperatorType operatorType() default OperatorType.MANAGE;
-
- /**
- * 是否保存请求的参数
- */
- public boolean isSaveRequestData() default true;
-}
+package com.ruoyi.common.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.enums.OperatorType;
+
+/**
+ * 自定义操作日志记录注解
+ *
+ * @author ruoyi
+ */
+@Target({ElementType.PARAMETER, ElementType.METHOD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Log {
+ /**
+ * 模块
+ */
+ public String title() default "";
+
+ /**
+ * 功能
+ */
+ public BusinessType businessType() default BusinessType.OTHER;
+
+ /**
+ * 操作人类别
+ */
+ public OperatorType operatorType() default OperatorType.MANAGE;
+
+ /**
+ * 是否保存请求的参数
+ */
+ public boolean isSaveRequestData() default true;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
index 72ac2ecca..40cb6feb0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java
@@ -9,15 +9,13 @@ import java.lang.annotation.Target;
/**
* 自定义注解防止表单重复提交
- *
- * @author ruoyi
*
+ * @author ruoyi
*/
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
-public @interface RepeatSubmit
-{
+public @interface RepeatSubmit {
}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java
index 34a47fa0c..d0aa03a8e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/Global.java
@@ -1,116 +1,112 @@
-package com.ruoyi.common.config;
-
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.stereotype.Component;
-
-/**
- * 全局配置类
- *
- * @author ruoyi
- */
-@Component
-@ConfigurationProperties(prefix = "ruoyi")
-public class Global
-{
- /** 项目名称 */
- private static String name;
-
- /** 版本 */
- private static String version;
-
- /** 版权年份 */
- private static String copyrightYear;
-
- /** 实例演示开关 */
- private static boolean demoEnabled;
-
- /** 上传路径 */
- private static String profile;
-
- /** 获取地址开关 */
- private static boolean addressEnabled;
-
- public static String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- Global.name = name;
- }
-
- public static String getVersion()
- {
- return version;
- }
-
- public void setVersion(String version)
- {
- Global.version = version;
- }
-
- public static String getCopyrightYear()
- {
- return copyrightYear;
- }
-
- public void setCopyrightYear(String copyrightYear)
- {
- Global.copyrightYear = copyrightYear;
- }
-
- public static boolean isDemoEnabled()
- {
- return demoEnabled;
- }
-
- public void setDemoEnabled(boolean demoEnabled)
- {
- Global.demoEnabled = demoEnabled;
- }
-
- public static String getProfile()
- {
- return profile;
- }
-
- public void setProfile(String profile)
- {
- Global.profile = profile;
- }
-
- public static boolean isAddressEnabled()
- {
- return addressEnabled;
- }
-
- public void setAddressEnabled(boolean addressEnabled)
- {
- Global.addressEnabled = addressEnabled;
- }
-
- /**
- * 获取头像上传路径
- */
- public static String getAvatarPath()
- {
- return getProfile() + "/avatar";
- }
-
- /**
- * 获取下载路径
- */
- public static String getDownloadPath()
- {
- return getProfile() + "/download/";
- }
-
- /**
- * 获取上传路径
- */
- public static String getUploadPath()
- {
- return getProfile() + "/upload";
- }
-}
+package com.ruoyi.common.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 全局配置类
+ *
+ * @author ruoyi
+ */
+@Component
+@ConfigurationProperties(prefix = "ruoyi")
+public class Global {
+ /**
+ * 项目名称
+ */
+ private static String name;
+
+ /**
+ * 版本
+ */
+ private static String version;
+
+ /**
+ * 版权年份
+ */
+ private static String copyrightYear;
+
+ /**
+ * 实例演示开关
+ */
+ private static boolean demoEnabled;
+
+ /**
+ * 上传路径
+ */
+ private static String profile;
+
+ /**
+ * 获取地址开关
+ */
+ private static boolean addressEnabled;
+
+ public static String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ Global.name = name;
+ }
+
+ public static String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ Global.version = version;
+ }
+
+ public static String getCopyrightYear() {
+ return copyrightYear;
+ }
+
+ public void setCopyrightYear(String copyrightYear) {
+ Global.copyrightYear = copyrightYear;
+ }
+
+ public static boolean isDemoEnabled() {
+ return demoEnabled;
+ }
+
+ public void setDemoEnabled(boolean demoEnabled) {
+ Global.demoEnabled = demoEnabled;
+ }
+
+ public static String getProfile() {
+ return profile;
+ }
+
+ public void setProfile(String profile) {
+ Global.profile = profile;
+ }
+
+ public static boolean isAddressEnabled() {
+ return addressEnabled;
+ }
+
+ public void setAddressEnabled(boolean addressEnabled) {
+ Global.addressEnabled = addressEnabled;
+ }
+
+ /**
+ * 获取头像上传路径
+ */
+ public static String getAvatarPath() {
+ return getProfile() + "/avatar";
+ }
+
+ /**
+ * 获取下载路径
+ */
+ public static String getDownloadPath() {
+ return getProfile() + "/download/";
+ }
+
+ /**
+ * 获取上传路径
+ */
+ public static String getUploadPath() {
+ return getProfile() + "/upload";
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java
index ddb873097..0c5c27231 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java
@@ -1,33 +1,30 @@
-package com.ruoyi.common.config;
-
-import javax.servlet.http.HttpServletRequest;
-import org.springframework.stereotype.Component;
-import com.ruoyi.common.utils.ServletUtils;
-
-/**
- * 服务相关配置
- *
- * @author ruoyi
- *
- */
-@Component
-public class ServerConfig
-{
- /**
- * 获取完整的请求路径,包括:域名,端口,上下文访问路径
- *
- * @return 服务地址
- */
- public String getUrl()
- {
- HttpServletRequest request = ServletUtils.getRequest();
- return getDomain(request);
- }
-
- public static String getDomain(HttpServletRequest request)
- {
- StringBuffer url = request.getRequestURL();
- String contextPath = request.getServletContext().getContextPath();
- return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
- }
-}
+package com.ruoyi.common.config;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.stereotype.Component;
+import com.ruoyi.common.utils.ServletUtils;
+
+/**
+ * 服务相关配置
+ *
+ * @author ruoyi
+ */
+@Component
+public class ServerConfig {
+ /**
+ * 获取完整的请求路径,包括:域名,端口,上下文访问路径
+ *
+ * @return 服务地址
+ */
+ public String getUrl() {
+ HttpServletRequest request = ServletUtils.getRequest();
+ return getDomain(request);
+ }
+
+ public static String getDomain(HttpServletRequest request) {
+ StringBuffer url = request.getRequestURL();
+ String contextPath = request.getServletContext().getContextPath();
+ return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString();
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/datasource/DynamicDataSourceContextHolder.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/datasource/DynamicDataSourceContextHolder.java
index 6bc9e6178..f87112226 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/datasource/DynamicDataSourceContextHolder.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/datasource/DynamicDataSourceContextHolder.java
@@ -1,45 +1,41 @@
-package com.ruoyi.common.config.datasource;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * 数据源切换处理
- *
- * @author ruoyi
- */
-public class DynamicDataSourceContextHolder
-{
- public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
-
- /**
- * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,
- * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
- */
- private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>();
-
- /**
- * 设置数据源的变量
- */
- public static void setDataSourceType(String dsType)
- {
- log.info("切换到{}数据源", dsType);
- CONTEXT_HOLDER.set(dsType);
- }
-
- /**
- * 获得数据源的变量
- */
- public static String getDataSourceType()
- {
- return CONTEXT_HOLDER.get();
- }
-
- /**
- * 清空数据源变量
- */
- public static void clearDataSourceType()
- {
- CONTEXT_HOLDER.remove();
- }
-}
+package com.ruoyi.common.config.datasource;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * 数据源切换处理
+ *
+ * @author ruoyi
+ */
+public class DynamicDataSourceContextHolder {
+ public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
+
+ /**
+ * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,
+ * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
+ */
+ private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>();
+
+ /**
+ * 设置数据源的变量
+ */
+ public static void setDataSourceType(String dsType) {
+ log.info("切换到{}数据源", dsType);
+ CONTEXT_HOLDER.set(dsType);
+ }
+
+ /**
+ * 获得数据源的变量
+ */
+ public static String getDataSourceType() {
+ return CONTEXT_HOLDER.get();
+ }
+
+ /**
+ * 清空数据源变量
+ */
+ public static void clearDataSourceType() {
+ CONTEXT_HOLDER.remove();
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/thread/ThreadPoolConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/thread/ThreadPoolConfig.java
index 1ff207552..71089d44b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/config/thread/ThreadPoolConfig.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/thread/ThreadPoolConfig.java
@@ -1,62 +1,58 @@
-package com.ruoyi.common.config.thread;
-
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadPoolExecutor;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import com.ruoyi.common.utils.Threads;
-
-/**
- * 线程池配置
- *
- * @author ruoyi
- **/
-@Configuration
-public class ThreadPoolConfig
-{
- // 核心线程池大小
- private int corePoolSize = 50;
-
- // 最大可创建的线程数
- private int maxPoolSize = 200;
-
- // 队列最大长度
- private int queueCapacity = 1000;
-
- // 线程池维护线程所允许的空闲时间
- private int keepAliveSeconds = 300;
-
- @Bean(name = "threadPoolTaskExecutor")
- public ThreadPoolTaskExecutor threadPoolTaskExecutor()
- {
- ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
- executor.setMaxPoolSize(maxPoolSize);
- executor.setCorePoolSize(corePoolSize);
- executor.setQueueCapacity(queueCapacity);
- executor.setKeepAliveSeconds(keepAliveSeconds);
- // 线程池对拒绝任务(无线程可用)的处理策略
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
- return executor;
- }
-
- /**
- * 执行周期性或定时任务
- */
- @Bean(name = "scheduledExecutorService")
- protected ScheduledExecutorService scheduledExecutorService()
- {
- return new ScheduledThreadPoolExecutor(corePoolSize,
- new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
- {
- @Override
- protected void afterExecute(Runnable r, Throwable t)
- {
- super.afterExecute(r, t);
- Threads.printException(r, t);
- }
- };
- }
-}
+package com.ruoyi.common.config.thread;
+
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+import com.ruoyi.common.utils.Threads;
+
+/**
+ * 线程池配置
+ *
+ * @author ruoyi
+ **/
+@Configuration
+public class ThreadPoolConfig {
+ // 核心线程池大小
+ private int corePoolSize = 50;
+
+ // 最大可创建的线程数
+ private int maxPoolSize = 200;
+
+ // 队列最大长度
+ private int queueCapacity = 1000;
+
+ // 线程池维护线程所允许的空闲时间
+ private int keepAliveSeconds = 300;
+
+ @Bean(name = "threadPoolTaskExecutor")
+ public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
+ ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+ executor.setMaxPoolSize(maxPoolSize);
+ executor.setCorePoolSize(corePoolSize);
+ executor.setQueueCapacity(queueCapacity);
+ executor.setKeepAliveSeconds(keepAliveSeconds);
+ // 线程池对拒绝任务(无线程可用)的处理策略
+ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ return executor;
+ }
+
+ /**
+ * 执行周期性或定时任务
+ */
+ @Bean(name = "scheduledExecutorService")
+ protected ScheduledExecutorService scheduledExecutorService() {
+ return new ScheduledThreadPoolExecutor(corePoolSize,
+ new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) {
+ @Override
+ protected void afterExecute(Runnable r, Throwable t) {
+ super.afterExecute(r, t);
+ Threads.printException(r, t);
+ }
+ };
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
index 9cee41d0a..8a8066c1b 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
@@ -1,69 +1,68 @@
-package com.ruoyi.common.constant;
-
-/**
- * 通用常量信息
- *
- * @author ruoyi
- */
-public class Constants
-{
- /**
- * UTF-8 字符集
- */
- public static final String UTF8 = "UTF-8";
-
- /**
- * 通用成功标识
- */
- public static final String SUCCESS = "0";
-
- /**
- * 通用失败标识
- */
- public static final String FAIL = "1";
-
- /**
- * 登录成功
- */
- public static final String LOGIN_SUCCESS = "Success";
-
- /**
- * 注销
- */
- public static final String LOGOUT = "Logout";
-
- /**
- * 登录失败
- */
- public static final String LOGIN_FAIL = "Error";
-
- /**
- * 自动去除表前缀
- */
- public static final String AUTO_REOMVE_PRE = "true";
-
- /**
- * 当前记录起始索引
- */
- public static final String PAGE_NUM = "pageNum";
-
- /**
- * 每页显示记录数
- */
- public static final String PAGE_SIZE = "pageSize";
-
- /**
- * 排序列
- */
- public static final String ORDER_BY_COLUMN = "orderByColumn";
-
- /**
- * 排序的方向 "desc" 或者 "asc".
- */
- public static final String IS_ASC = "isAsc";
-
- /**
- * 资源映射路径 前缀
- */
- public static final String RESOURCE_PREFIX = "/profile";
-}
+package com.ruoyi.common.constant;
+
+/**
+ * 通用常量信息
+ *
+ * @author ruoyi
+ */
+public class Constants {
+ /**
+ * UTF-8 字符集
+ */
+ public static final String UTF8 = "UTF-8";
+
+ /**
+ * 通用成功标识
+ */
+ public static final String SUCCESS = "0";
+
+ /**
+ * 通用失败标识
+ */
+ public static final String FAIL = "1";
+
+ /**
+ * 登录成功
+ */
+ public static final String LOGIN_SUCCESS = "Success";
+
+ /**
+ * 注销
+ */
+ public static final String LOGOUT = "Logout";
+
+ /**
+ * 登录失败
+ */
+ public static final String LOGIN_FAIL = "Error";
+
+ /**
+ * 自动去除表前缀
+ */
+ public static final String AUTO_REOMVE_PRE = "true";
+
+ /**
+ * 当前记录起始索引
+ */
+ public static final String PAGE_NUM = "pageNum";
+
+ /**
+ * 每页显示记录数
+ */
+ public static final String PAGE_SIZE = "pageSize";
+
+ /**
+ * 排序列
+ */
+ public static final String ORDER_BY_COLUMN = "orderByColumn";
+
+ /**
+ * 排序的方向 "desc" 或者 "asc".
+ */
+ public static final String IS_ASC = "isAsc";
+
+ /**
+ * 资源映射路径 前缀
+ */
+ public static final String RESOURCE_PREFIX = "/profile";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
index 068969be7..baba26c09 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java
@@ -1,94 +1,147 @@
-package com.ruoyi.common.constant;
-
-/**
- * 代码生成通用常量
- *
- * @author ruoyi
- */
-public class GenConstants
-{
- /** 单表(增删改查) */
- public static final String TPL_CRUD = "crud";
-
- /** 树表(增删改查) */
- public static final String TPL_TREE = "tree";
-
- /** 树编码字段 */
- public static final String TREE_CODE = "treeCode";
-
- /** 树父编码字段 */
- public static final String TREE_PARENT_CODE = "treeParentCode";
-
- /** 树名称字段 */
- public static final String TREE_NAME = "treeName";
-
- /** 数据库字符串类型 */
- public static final String[] COLUMNTYPE_STR = { "char", "varchar", "narchar", "varchar2", "tinytext", "text",
- "mediumtext", "longtext" };
-
- /** 数据库时间类型 */
- public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" };
-
- /** 数据库数字类型 */
- public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer",
- "bigint", "float", "float", "double", "decimal" };
-
- /** 页面不需要编辑字段 */
- public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" };
-
- /** 页面不需要显示的列表字段 */
- public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by",
- "update_time" };
-
- /** 页面不需要查询字段 */
- public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by",
- "update_time", "remark" };
-
- /** Entity基类字段 */
- public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" };
-
- /** Tree基类字段 */
- public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors" };
-
- /** 文本框 */
- public static final String HTML_INPUT = "input";
-
- /** 文本域 */
- public static final String HTML_TEXTAREA = "textarea";
-
- /** 下拉框 */
- public static final String HTML_SELECT = "select";
-
- /** 单选框 */
- public static final String HTML_RADIO = "radio";
-
- /** 复选框 */
- public static final String HTML_CHECKBOX = "checkbox";
-
- /** 日期控件 */
- public static final String HTML_DATETIME = "datetime";
-
- /** 字符串类型 */
- public static final String TYPE_STRING = "String";
-
- /** 整型 */
- public static final String TYPE_INTEGER = "Integer";
-
- /** 长整型 */
- public static final String TYPE_LONG = "Long";
-
- /** 浮点型 */
- public static final String TYPE_DOUBLE = "Double";
-
- /** 高精度计算类型 */
- public static final String TYPE_BIGDECIMAL = "BigDecimal";
-
- /** 时间类型 */
- public static final String TYPE_DATE = "Date";
-
- /** 模糊查询 */
- public static final String QUERY_LIKE = "LIKE";
-
- /** 需要 */
- public static final String REQUIRE = "1";
-}
+package com.ruoyi.common.constant;
+
+/**
+ * 代码生成通用常量
+ *
+ * @author ruoyi
+ */
+public class GenConstants {
+ /**
+ * 单表(增删改查)
+ */
+ public static final String TPL_CRUD = "crud";
+
+ /**
+ * 树表(增删改查)
+ */
+ public static final String TPL_TREE = "tree";
+
+ /**
+ * 树编码字段
+ */
+ public static final String TREE_CODE = "treeCode";
+
+ /**
+ * 树父编码字段
+ */
+ public static final String TREE_PARENT_CODE = "treeParentCode";
+
+ /**
+ * 树名称字段
+ */
+ public static final String TREE_NAME = "treeName";
+
+ /**
+ * 数据库字符串类型
+ */
+ public static final String[] COLUMNTYPE_STR = {"char", "varchar", "narchar", "varchar2", "tinytext", "text",
+ "mediumtext", "longtext"};
+
+ /**
+ * 数据库时间类型
+ */
+ public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"};
+
+ /**
+ * 数据库数字类型
+ */
+ public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer",
+ "bigint", "float", "float", "double", "decimal"};
+
+ /**
+ * 页面不需要编辑字段
+ */
+ public static final String[] COLUMNNAME_NOT_EDIT = {"id", "create_by", "create_time", "del_flag"};
+
+ /**
+ * 页面不需要显示的列表字段
+ */
+ public static final String[] COLUMNNAME_NOT_LIST = {"id", "create_by", "create_time", "del_flag", "update_by",
+ "update_time"};
+
+ /**
+ * 页面不需要查询字段
+ */
+ public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by",
+ "update_time", "remark"};
+
+ /**
+ * Entity基类字段
+ */
+ public static final String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime", "remark"};
+
+ /**
+ * Tree基类字段
+ */
+ public static final String[] TREE_ENTITY = {"parentName", "parentId", "orderNum", "ancestors"};
+
+ /**
+ * 文本框
+ */
+ public static final String HTML_INPUT = "input";
+
+ /**
+ * 文本域
+ */
+ public static final String HTML_TEXTAREA = "textarea";
+
+ /**
+ * 下拉框
+ */
+ public static final String HTML_SELECT = "select";
+
+ /**
+ * 单选框
+ */
+ public static final String HTML_RADIO = "radio";
+
+ /**
+ * 复选框
+ */
+ public static final String HTML_CHECKBOX = "checkbox";
+
+ /**
+ * 日期控件
+ */
+ public static final String HTML_DATETIME = "datetime";
+
+ /**
+ * 字符串类型
+ */
+ public static final String TYPE_STRING = "String";
+
+ /**
+ * 整型
+ */
+ public static final String TYPE_INTEGER = "Integer";
+
+ /**
+ * 长整型
+ */
+ public static final String TYPE_LONG = "Long";
+
+ /**
+ * 浮点型
+ */
+ public static final String TYPE_DOUBLE = "Double";
+
+ /**
+ * 高精度计算类型
+ */
+ public static final String TYPE_BIGDECIMAL = "BigDecimal";
+
+ /**
+ * 时间类型
+ */
+ public static final String TYPE_DATE = "Date";
+
+ /**
+ * 模糊查询
+ */
+ public static final String QUERY_LIKE = "LIKE";
+
+ /**
+ * 需要
+ */
+ public static final String REQUIRE = "1";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
index 7caf18542..69b29afc5 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/PermissionConstants.java
@@ -1,27 +1,38 @@
-package com.ruoyi.common.constant;
-
-/**
- * 权限通用常量
- *
- * @author ruoyi
- */
-public class PermissionConstants
-{
- /** 新增权限 */
- public static final String ADD_PERMISSION = "add";
-
- /** 修改权限 */
- public static final String EDIT_PERMISSION = "edit";
-
- /** 删除权限 */
- public static final String REMOVE_PERMISSION = "remove";
-
- /** 导出权限 */
- public static final String EXPORT_PERMISSION = "export";
-
- /** 显示权限 */
- public static final String VIEW_PERMISSION = "view";
-
- /** 查询权限 */
- public static final String LIST_PERMISSION = "list";
-}
+package com.ruoyi.common.constant;
+
+/**
+ * 权限通用常量
+ *
+ * @author ruoyi
+ */
+public class PermissionConstants {
+ /**
+ * 新增权限
+ */
+ public static final String ADD_PERMISSION = "add";
+
+ /**
+ * 修改权限
+ */
+ public static final String EDIT_PERMISSION = "edit";
+
+ /**
+ * 删除权限
+ */
+ public static final String REMOVE_PERMISSION = "remove";
+
+ /**
+ * 导出权限
+ */
+ public static final String EXPORT_PERMISSION = "export";
+
+ /**
+ * 显示权限
+ */
+ public static final String VIEW_PERMISSION = "view";
+
+ /**
+ * 查询权限
+ */
+ public static final String LIST_PERMISSION = "list";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
index b82036666..c5f9fa0be 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java
@@ -1,50 +1,56 @@
-package com.ruoyi.common.constant;
-
-/**
- * 任务调度通用常量
- *
- * @author ruoyi
- */
-public interface ScheduleConstants
-{
- public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
-
- /** 执行目标key */
- public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
-
- /** 默认 */
- public static final String MISFIRE_DEFAULT = "0";
-
- /** 立即触发执行 */
- public static final String MISFIRE_IGNORE_MISFIRES = "1";
-
- /** 触发一次执行 */
- public static final String MISFIRE_FIRE_AND_PROCEED = "2";
-
- /** 不触发立即执行 */
- public static final String MISFIRE_DO_NOTHING = "3";
-
- public enum Status
- {
- /**
- * 正常
- */
- NORMAL("0"),
- /**
- * 暂停
- */
- PAUSE("1");
-
- private String value;
-
- private Status(String value)
- {
- this.value = value;
- }
-
- public String getValue()
- {
- return value;
- }
- }
-}
+package com.ruoyi.common.constant;
+
+/**
+ * 任务调度通用常量
+ *
+ * @author ruoyi
+ */
+public interface ScheduleConstants {
+ public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME";
+
+ /**
+ * 执行目标key
+ */
+ public static final String TASK_PROPERTIES = "TASK_PROPERTIES";
+
+ /**
+ * 默认
+ */
+ public static final String MISFIRE_DEFAULT = "0";
+
+ /**
+ * 立即触发执行
+ */
+ public static final String MISFIRE_IGNORE_MISFIRES = "1";
+
+ /**
+ * 触发一次执行
+ */
+ public static final String MISFIRE_FIRE_AND_PROCEED = "2";
+
+ /**
+ * 不触发立即执行
+ */
+ public static final String MISFIRE_DO_NOTHING = "3";
+
+ public enum Status {
+ /**
+ * 正常
+ */
+ NORMAL("0"),
+ /**
+ * 暂停
+ */
+ PAUSE("1");
+
+ private String value;
+
+ private Status(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java
index c5027c240..a5a0c0c79 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ShiroConstants.java
@@ -1,74 +1,73 @@
-package com.ruoyi.common.constant;
-
-/**
- * Shiro通用常量
- *
- * @author ruoyi
- */
-public interface ShiroConstants
-{
- /**
- * 当前登录的用户
- */
- public static final String CURRENT_USER = "currentUser";
-
- /**
- * 用户名
- */
- public static final String CURRENT_USERNAME = "username";
-
- /**
- * 消息key
- */
- public static String MESSAGE = "message";
-
- /**
- * 错误key
- */
- public static String ERROR = "errorMsg";
-
- /**
- * 编码格式
- */
- public static String ENCODING = "UTF-8";
-
- /**
- * 当前在线会话
- */
- public String ONLINE_SESSION = "online_session";
-
- /**
- * 验证码key
- */
- public static final String CURRENT_CAPTCHA = "captcha";
-
- /**
- * 验证码开关
- */
- public static final String CURRENT_ENABLED = "captchaEnabled";
-
- /**
- * 验证码类型
- */
- public static final String CURRENT_TYPE = "captchaType";
-
- /**
- * 验证码
- */
- public static final String CURRENT_VALIDATECODE = "validateCode";
-
- /**
- * 验证码错误
- */
- public static final String CAPTCHA_ERROR = "captchaError";
-
- /**
- * 登录记录缓存
- */
- public static final String LOGINRECORDCACHE = "loginRecordCache";
-
- /**
- * 系统活跃用户缓存
- */
- public static final String SYS_USERCACHE = "sys-userCache";
-}
+package com.ruoyi.common.constant;
+
+/**
+ * Shiro通用常量
+ *
+ * @author ruoyi
+ */
+public interface ShiroConstants {
+ /**
+ * 当前登录的用户
+ */
+ public static final String CURRENT_USER = "currentUser";
+
+ /**
+ * 用户名
+ */
+ public static final String CURRENT_USERNAME = "username";
+
+ /**
+ * 消息key
+ */
+ public static String MESSAGE = "message";
+
+ /**
+ * 错误key
+ */
+ public static String ERROR = "errorMsg";
+
+ /**
+ * 编码格式
+ */
+ public static String ENCODING = "UTF-8";
+
+ /**
+ * 当前在线会话
+ */
+ public String ONLINE_SESSION = "online_session";
+
+ /**
+ * 验证码key
+ */
+ public static final String CURRENT_CAPTCHA = "captcha";
+
+ /**
+ * 验证码开关
+ */
+ public static final String CURRENT_ENABLED = "captchaEnabled";
+
+ /**
+ * 验证码类型
+ */
+ public static final String CURRENT_TYPE = "captchaType";
+
+ /**
+ * 验证码
+ */
+ public static final String CURRENT_VALIDATECODE = "validateCode";
+
+ /**
+ * 验证码错误
+ */
+ public static final String CAPTCHA_ERROR = "captchaError";
+
+ /**
+ * 登录记录缓存
+ */
+ public static final String LOGINRECORDCACHE = "loginRecordCache";
+
+ /**
+ * 系统活跃用户缓存
+ */
+ public static final String SYS_USERCACHE = "sys-userCache";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
index a51ba3bfd..27ce76cde 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java
@@ -1,101 +1,136 @@
-package com.ruoyi.common.constant;
-
-/**
- * 用户常量信息
- *
- * @author ruoyi
- */
-public class UserConstants
-{
- /**
- * 平台内系统用户的唯一标志
- */
- public static final String SYS_USER = "SYS_USER";
-
- /** 正常状态 */
- public static final String NORMAL = "0";
-
- /** 异常状态 */
- public static final String EXCEPTION = "1";
-
- /** 用户封禁状态 */
- public static final String USER_BLOCKED = "1";
-
- /** 角色封禁状态 */
- public static final String ROLE_BLOCKED = "1";
-
- /** 部门正常状态 */
- public static final String DEPT_NORMAL = "0";
-
- /** 字典正常状态 */
- public static final String DICT_NORMAL = "0";
-
- /** 是否为系统默认(是) */
- public static final String YES = "Y";
-
- /**
- * 用户名长度限制
- */
- public static final int USERNAME_MIN_LENGTH = 2;
- public static final int USERNAME_MAX_LENGTH = 20;
-
- /** 登录名称是否唯一的返回结果码 */
- public final static String USER_NAME_UNIQUE = "0";
- public final static String USER_NAME_NOT_UNIQUE = "1";
-
- /** 手机号码是否唯一的返回结果 */
- public final static String USER_PHONE_UNIQUE = "0";
- public final static String USER_PHONE_NOT_UNIQUE = "1";
-
- /** e-mail 是否唯一的返回结果 */
- public final static String USER_EMAIL_UNIQUE = "0";
- public final static String USER_EMAIL_NOT_UNIQUE = "1";
-
- /** 部门名称是否唯一的返回结果码 */
- public final static String DEPT_NAME_UNIQUE = "0";
- public final static String DEPT_NAME_NOT_UNIQUE = "1";
-
- /** 角色名称是否唯一的返回结果码 */
- public final static String ROLE_NAME_UNIQUE = "0";
- public final static String ROLE_NAME_NOT_UNIQUE = "1";
-
- /** 岗位名称是否唯一的返回结果码 */
- public final static String POST_NAME_UNIQUE = "0";
- public final static String POST_NAME_NOT_UNIQUE = "1";
-
- /** 角色权限是否唯一的返回结果码 */
- public final static String ROLE_KEY_UNIQUE = "0";
- public final static String ROLE_KEY_NOT_UNIQUE = "1";
-
- /** 岗位编码是否唯一的返回结果码 */
- public final static String POST_CODE_UNIQUE = "0";
- public final static String POST_CODE_NOT_UNIQUE = "1";
-
- /** 菜单名称是否唯一的返回结果码 */
- public final static String MENU_NAME_UNIQUE = "0";
- public final static String MENU_NAME_NOT_UNIQUE = "1";
-
- /** 字典类型是否唯一的返回结果码 */
- public final static String DICT_TYPE_UNIQUE = "0";
- public final static String DICT_TYPE_NOT_UNIQUE = "1";
-
- /** 参数键名是否唯一的返回结果码 */
- public final static String CONFIG_KEY_UNIQUE = "0";
- public final static String CONFIG_KEY_NOT_UNIQUE = "1";
-
- /**
- * 密码长度限制
- */
- public static final int PASSWORD_MIN_LENGTH = 5;
- public static final int PASSWORD_MAX_LENGTH = 20;
-
- /**
- * 手机号码格式限制
- */
- public static final String MOBILE_PHONE_NUMBER_PATTERN = "^0{0,1}(13[0-9]|15[0-9]|14[0-9]|18[0-9])[0-9]{8}$";
-
- /**
- * 邮箱格式限制
- */
- public static final String EMAIL_PATTERN = "^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?";
-}
+package com.ruoyi.common.constant;
+
+/**
+ * 用户常量信息
+ *
+ * @author ruoyi
+ */
+public class UserConstants {
+ /**
+ * 平台内系统用户的唯一标志
+ */
+ public static final String SYS_USER = "SYS_USER";
+
+ /**
+ * 正常状态
+ */
+ public static final String NORMAL = "0";
+
+ /**
+ * 异常状态
+ */
+ public static final String EXCEPTION = "1";
+
+ /**
+ * 用户封禁状态
+ */
+ public static final String USER_BLOCKED = "1";
+
+ /**
+ * 角色封禁状态
+ */
+ public static final String ROLE_BLOCKED = "1";
+
+ /**
+ * 部门正常状态
+ */
+ public static final String DEPT_NORMAL = "0";
+
+ /**
+ * 字典正常状态
+ */
+ public static final String DICT_NORMAL = "0";
+
+ /**
+ * 是否为系统默认(是)
+ */
+ public static final String YES = "Y";
+
+ /**
+ * 用户名长度限制
+ */
+ public static final int USERNAME_MIN_LENGTH = 2;
+ public static final int USERNAME_MAX_LENGTH = 20;
+
+ /**
+ * 登录名称是否唯一的返回结果码
+ */
+ public final static String USER_NAME_UNIQUE = "0";
+ public final static String USER_NAME_NOT_UNIQUE = "1";
+
+ /**
+ * 手机号码是否唯一的返回结果
+ */
+ public final static String USER_PHONE_UNIQUE = "0";
+ public final static String USER_PHONE_NOT_UNIQUE = "1";
+
+ /**
+ * e-mail 是否唯一的返回结果
+ */
+ public final static String USER_EMAIL_UNIQUE = "0";
+ public final static String USER_EMAIL_NOT_UNIQUE = "1";
+
+ /**
+ * 部门名称是否唯一的返回结果码
+ */
+ public final static String DEPT_NAME_UNIQUE = "0";
+ public final static String DEPT_NAME_NOT_UNIQUE = "1";
+
+ /**
+ * 角色名称是否唯一的返回结果码
+ */
+ public final static String ROLE_NAME_UNIQUE = "0";
+ public final static String ROLE_NAME_NOT_UNIQUE = "1";
+
+ /**
+ * 岗位名称是否唯一的返回结果码
+ */
+ public final static String POST_NAME_UNIQUE = "0";
+ public final static String POST_NAME_NOT_UNIQUE = "1";
+
+ /**
+ * 角色权限是否唯一的返回结果码
+ */
+ public final static String ROLE_KEY_UNIQUE = "0";
+ public final static String ROLE_KEY_NOT_UNIQUE = "1";
+
+ /**
+ * 岗位编码是否唯一的返回结果码
+ */
+ public final static String POST_CODE_UNIQUE = "0";
+ public final static String POST_CODE_NOT_UNIQUE = "1";
+
+ /**
+ * 菜单名称是否唯一的返回结果码
+ */
+ public final static String MENU_NAME_UNIQUE = "0";
+ public final static String MENU_NAME_NOT_UNIQUE = "1";
+
+ /**
+ * 字典类型是否唯一的返回结果码
+ */
+ public final static String DICT_TYPE_UNIQUE = "0";
+ public final static String DICT_TYPE_NOT_UNIQUE = "1";
+
+ /**
+ * 参数键名是否唯一的返回结果码
+ */
+ public final static String CONFIG_KEY_UNIQUE = "0";
+ public final static String CONFIG_KEY_NOT_UNIQUE = "1";
+
+ /**
+ * 密码长度限制
+ */
+ public static final int PASSWORD_MIN_LENGTH = 5;
+ public static final int PASSWORD_MAX_LENGTH = 20;
+
+ /**
+ * 手机号码格式限制
+ */
+ public static final String MOBILE_PHONE_NUMBER_PATTERN = "^0{0,1}(13[0-9]|15[0-9]|14[0-9]|18[0-9])[0-9]{8}$";
+
+ /**
+ * 邮箱格式限制
+ */
+ public static final String EMAIL_PATTERN = "^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?";
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
index 149ac01d1..a25558746 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java
@@ -1,172 +1,155 @@
-package com.ruoyi.common.core.controller;
-
-import java.beans.PropertyEditorSupport;
-import java.util.Date;
-import java.util.List;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.web.bind.WebDataBinder;
-import org.springframework.web.bind.annotation.InitBinder;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.core.domain.AjaxResult.Type;
-import com.ruoyi.common.core.page.PageDomain;
-import com.ruoyi.common.core.page.TableDataInfo;
-import com.ruoyi.common.core.page.TableSupport;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.ServletUtils;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.sql.SqlUtil;
-
-/**
- * web层通用数据处理
- *
- * @author ruoyi
- */
-public class BaseController
-{
- protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
-
- /**
- * 将前台传递过来的日期格式的字符串,自动转化为Date类型
- */
- @InitBinder
- public void initBinder(WebDataBinder binder)
- {
- // Date 类型转换
- binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
- {
- @Override
- public void setAsText(String text)
- {
- setValue(DateUtils.parseDate(text));
- }
- });
- }
-
- /**
- * 设置请求分页数据
- */
- protected void startPage()
- {
- PageDomain pageDomain = TableSupport.buildPageRequest();
- Integer pageNum = pageDomain.getPageNum();
- Integer pageSize = pageDomain.getPageSize();
- if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
- {
- String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
- PageHelper.startPage(pageNum, pageSize, orderBy);
- }
- }
-
- /**
- * 获取request
- */
- public HttpServletRequest getRequest()
- {
- return ServletUtils.getRequest();
- }
-
- /**
- * 获取response
- */
- public HttpServletResponse getResponse()
- {
- return ServletUtils.getResponse();
- }
-
- /**
- * 获取session
- */
- public HttpSession getSession()
- {
- return getRequest().getSession();
- }
-
- /**
- * 响应请求分页数据
- */
- @SuppressWarnings({ "rawtypes", "unchecked" })
- protected TableDataInfo getDataTable(List> list)
- {
- TableDataInfo rspData = new TableDataInfo();
- rspData.setCode(0);
- rspData.setRows(list);
- rspData.setTotal(new PageInfo(list).getTotal());
- return rspData;
- }
-
- /**
- * 响应返回结果
- *
- * @param rows 影响行数
- * @return 操作结果
- */
- protected AjaxResult toAjax(int rows)
- {
- return rows > 0 ? success() : error();
- }
-
- /**
- * 响应返回结果
- *
- * @param result 结果
- * @return 操作结果
- */
- protected AjaxResult toAjax(boolean result)
- {
- return result ? success() : error();
- }
-
- /**
- * 返回成功
- */
- public AjaxResult success()
- {
- return AjaxResult.success();
- }
-
- /**
- * 返回失败消息
- */
- public AjaxResult error()
- {
- return AjaxResult.error();
- }
-
- /**
- * 返回成功消息
- */
- public AjaxResult success(String message)
- {
- return AjaxResult.success(message);
- }
-
- /**
- * 返回失败消息
- */
- public AjaxResult error(String message)
- {
- return AjaxResult.error(message);
- }
-
- /**
- * 返回错误码消息
- */
- public AjaxResult error(Type type, String message)
- {
- return new AjaxResult(type, message);
- }
-
- /**
- * 页面跳转
- */
- public String redirect(String url)
- {
- return StringUtils.format("redirect:{}", url);
- }
-}
+package com.ruoyi.common.core.controller;
+
+import java.beans.PropertyEditorSupport;
+import java.util.Date;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.WebDataBinder;
+import org.springframework.web.bind.annotation.InitBinder;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.AjaxResult.Type;
+import com.ruoyi.common.core.page.PageDomain;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.core.page.TableSupport;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ServletUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.sql.SqlUtil;
+
+/**
+ * web层通用数据处理
+ *
+ * @author ruoyi
+ */
+public class BaseController {
+ protected final Logger logger = LoggerFactory.getLogger(BaseController.class);
+
+ /**
+ * 将前台传递过来的日期格式的字符串,自动转化为Date类型
+ */
+ @InitBinder
+ public void initBinder(WebDataBinder binder) {
+ // Date 类型转换
+ binder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
+ @Override
+ public void setAsText(String text) {
+ setValue(DateUtils.parseDate(text));
+ }
+ });
+ }
+
+ /**
+ * 设置请求分页数据
+ */
+ protected void startPage() {
+ PageDomain pageDomain = TableSupport.buildPageRequest();
+ Integer pageNum = pageDomain.getPageNum();
+ Integer pageSize = pageDomain.getPageSize();
+ if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
+ String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
+ PageHelper.startPage(pageNum, pageSize, orderBy);
+ }
+ }
+
+ /**
+ * 获取request
+ */
+ public HttpServletRequest getRequest() {
+ return ServletUtils.getRequest();
+ }
+
+ /**
+ * 获取response
+ */
+ public HttpServletResponse getResponse() {
+ return ServletUtils.getResponse();
+ }
+
+ /**
+ * 获取session
+ */
+ public HttpSession getSession() {
+ return getRequest().getSession();
+ }
+
+ /**
+ * 响应请求分页数据
+ */
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ protected TableDataInfo getDataTable(List> list) {
+ TableDataInfo rspData = new TableDataInfo();
+ rspData.setCode(0);
+ rspData.setRows(list);
+ rspData.setTotal(new PageInfo(list).getTotal());
+ return rspData;
+ }
+
+ /**
+ * 响应返回结果
+ *
+ * @param rows 影响行数
+ * @return 操作结果
+ */
+ protected AjaxResult toAjax(int rows) {
+ return rows > 0 ? success() : error();
+ }
+
+ /**
+ * 响应返回结果
+ *
+ * @param result 结果
+ * @return 操作结果
+ */
+ protected AjaxResult toAjax(boolean result) {
+ return result ? success() : error();
+ }
+
+ /**
+ * 返回成功
+ */
+ public AjaxResult success() {
+ return AjaxResult.success();
+ }
+
+ /**
+ * 返回失败消息
+ */
+ public AjaxResult error() {
+ return AjaxResult.error();
+ }
+
+ /**
+ * 返回成功消息
+ */
+ public AjaxResult success(String message) {
+ return AjaxResult.success(message);
+ }
+
+ /**
+ * 返回失败消息
+ */
+ public AjaxResult error(String message) {
+ return AjaxResult.error(message);
+ }
+
+ /**
+ * 返回错误码消息
+ */
+ public AjaxResult error(Type type, String message) {
+ return new AjaxResult(type, message);
+ }
+
+ /**
+ * 页面跳转
+ */
+ public String redirect(String url) {
+ return StringUtils.format("redirect:{}", url);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
index ef89f5c84..3102b9186 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java
@@ -1,182 +1,178 @@
-package com.ruoyi.common.core.domain;
-
-import java.util.HashMap;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 操作消息提醒
- *
- * @author ruoyi
- */
-public class AjaxResult extends HashMap
-{
- private static final long serialVersionUID = 1L;
-
- /** 状态码 */
- public static final String CODE_TAG = "code";
-
- /** 返回内容 */
- public static final String MSG_TAG = "msg";
-
- /** 数据对象 */
- public static final String DATA_TAG = "data";
-
- /**
- * 状态类型
- */
- public enum Type
- {
- /** 成功 */
- SUCCESS(0),
- /** 警告 */
- WARN(301),
- /** 错误 */
- ERROR(500);
- private final int value;
-
- Type(int value)
- {
- this.value = value;
- }
-
- public int value()
- {
- return this.value;
- }
- }
-
- /**
- * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
- */
- public AjaxResult()
- {
- }
-
- /**
- * 初始化一个新创建的 AjaxResult 对象
- *
- * @param type 状态类型
- * @param msg 返回内容
- */
- public AjaxResult(Type type, String msg)
- {
- super.put(CODE_TAG, type.value);
- super.put(MSG_TAG, msg);
- }
-
- /**
- * 初始化一个新创建的 AjaxResult 对象
- *
- * @param type 状态类型
- * @param msg 返回内容
- * @param data 数据对象
- */
- public AjaxResult(Type type, String msg, Object data)
- {
- super.put(CODE_TAG, type.value);
- super.put(MSG_TAG, msg);
- if (StringUtils.isNotNull(data))
- {
- super.put(DATA_TAG, data);
- }
- }
-
- /**
- * 返回成功消息
- *
- * @return 成功消息
- */
- public static AjaxResult success()
- {
- return AjaxResult.success("操作成功");
- }
-
- /**
- * 返回成功数据
- *
- * @return 成功消息
- */
- public static AjaxResult success(Object data)
- {
- return AjaxResult.success("操作成功", data);
- }
-
- /**
- * 返回成功消息
- *
- * @param msg 返回内容
- * @return 成功消息
- */
- public static AjaxResult success(String msg)
- {
- return AjaxResult.success(msg, null);
- }
-
- /**
- * 返回成功消息
- *
- * @param msg 返回内容
- * @param data 数据对象
- * @return 成功消息
- */
- public static AjaxResult success(String msg, Object data)
- {
- return new AjaxResult(Type.SUCCESS, msg, data);
- }
-
- /**
- * 返回警告消息
- *
- * @param msg 返回内容
- * @return 警告消息
- */
- public static AjaxResult warn(String msg)
- {
- return AjaxResult.warn(msg, null);
- }
-
- /**
- * 返回警告消息
- *
- * @param msg 返回内容
- * @param data 数据对象
- * @return 警告消息
- */
- public static AjaxResult warn(String msg, Object data)
- {
- return new AjaxResult(Type.WARN, msg, data);
- }
-
- /**
- * 返回错误消息
- *
- * @return
- */
- public static AjaxResult error()
- {
- return AjaxResult.error("操作失败");
- }
-
- /**
- * 返回错误消息
- *
- * @param msg 返回内容
- * @return 警告消息
- */
- public static AjaxResult error(String msg)
- {
- return AjaxResult.error(msg, null);
- }
-
- /**
- * 返回错误消息
- *
- * @param msg 返回内容
- * @param data 数据对象
- * @return 警告消息
- */
- public static AjaxResult error(String msg, Object data)
- {
- return new AjaxResult(Type.ERROR, msg, data);
- }
-}
+package com.ruoyi.common.core.domain;
+
+import java.util.HashMap;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 操作消息提醒
+ *
+ * @author ruoyi
+ */
+public class AjaxResult extends HashMap {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 状态码
+ */
+ public static final String CODE_TAG = "code";
+
+ /**
+ * 返回内容
+ */
+ public static final String MSG_TAG = "msg";
+
+ /**
+ * 数据对象
+ */
+ public static final String DATA_TAG = "data";
+
+ /**
+ * 状态类型
+ */
+ public enum Type {
+ /**
+ * 成功
+ */
+ SUCCESS(0),
+ /**
+ * 警告
+ */
+ WARN(301),
+ /**
+ * 错误
+ */
+ ERROR(500);
+ private final int value;
+
+ Type(int value) {
+ this.value = value;
+ }
+
+ public int value() {
+ return this.value;
+ }
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+ */
+ public AjaxResult() {
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param type 状态类型
+ * @param msg 返回内容
+ */
+ public AjaxResult(Type type, String msg) {
+ super.put(CODE_TAG, type.value);
+ super.put(MSG_TAG, msg);
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param type 状态类型
+ * @param msg 返回内容
+ * @param data 数据对象
+ */
+ public AjaxResult(Type type, String msg, Object data) {
+ super.put(CODE_TAG, type.value);
+ super.put(MSG_TAG, msg);
+ if (StringUtils.isNotNull(data)) {
+ super.put(DATA_TAG, data);
+ }
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success() {
+ return AjaxResult.success("操作成功");
+ }
+
+ /**
+ * 返回成功数据
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success(Object data) {
+ return AjaxResult.success("操作成功", data);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg) {
+ return AjaxResult.success(msg, null);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg, Object data) {
+ return new AjaxResult(Type.SUCCESS, msg, data);
+ }
+
+ /**
+ * 返回警告消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult warn(String msg) {
+ return AjaxResult.warn(msg, null);
+ }
+
+ /**
+ * 返回警告消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static AjaxResult warn(String msg, Object data) {
+ return new AjaxResult(Type.WARN, msg, data);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @return
+ */
+ public static AjaxResult error() {
+ return AjaxResult.error("操作失败");
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg) {
+ return AjaxResult.error(msg, null);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg, Object data) {
+ return new AjaxResult(Type.ERROR, msg, data);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
index 0fc68beb5..093fee410 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java
@@ -1,114 +1,113 @@
-package com.ruoyi.common.core.domain;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonFormat;
-
-/**
- * Entity基类
- *
- * @author ruoyi
- */
-public class BaseEntity implements Serializable
-{
- private static final long serialVersionUID = 1L;
-
- /** 搜索值 */
- private String searchValue;
-
- /** 创建者 */
- private String createBy;
-
- /** 创建时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date createTime;
-
- /** 更新者 */
- private String updateBy;
-
- /** 更新时间 */
- @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
- private Date updateTime;
-
- /** 备注 */
- private String remark;
-
- /** 请求参数 */
- private Map params;
-
- public String getSearchValue()
- {
- return searchValue;
- }
-
- public void setSearchValue(String searchValue)
- {
- this.searchValue = searchValue;
- }
-
- public String getCreateBy()
- {
- return createBy;
- }
-
- public void setCreateBy(String createBy)
- {
- this.createBy = createBy;
- }
-
- public Date getCreateTime()
- {
- return createTime;
- }
-
- public void setCreateTime(Date createTime)
- {
- this.createTime = createTime;
- }
-
- public String getUpdateBy()
- {
- return updateBy;
- }
-
- public void setUpdateBy(String updateBy)
- {
- this.updateBy = updateBy;
- }
-
- public Date getUpdateTime()
- {
- return updateTime;
- }
-
- public void setUpdateTime(Date updateTime)
- {
- this.updateTime = updateTime;
- }
-
- public String getRemark()
- {
- return remark;
- }
-
- public void setRemark(String remark)
- {
- this.remark = remark;
- }
-
- public Map getParams()
- {
- if (params == null)
- {
- params = new HashMap<>();
- }
- return params;
- }
-
- public void setParams(Map params)
- {
- this.params = params;
- }
-}
+package com.ruoyi.common.core.domain;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * Entity基类
+ *
+ * @author ruoyi
+ */
+public class BaseEntity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 搜索值
+ */
+ private String searchValue;
+
+ /**
+ * 创建者
+ */
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ /**
+ * 更新者
+ */
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+ /**
+ * 请求参数
+ */
+ private Map params;
+
+ public String getSearchValue() {
+ return searchValue;
+ }
+
+ public void setSearchValue(String searchValue) {
+ this.searchValue = searchValue;
+ }
+
+ public String getCreateBy() {
+ return createBy;
+ }
+
+ public void setCreateBy(String createBy) {
+ this.createBy = createBy;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateBy() {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getRemark() {
+ return remark;
+ }
+
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public Map getParams() {
+ if (params == null) {
+ params = new HashMap<>();
+ }
+ return params;
+ }
+
+ public void setParams(Map params) {
+ this.params = params;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
index 7a0efe62a..66011a52e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java
@@ -1,63 +1,62 @@
-package com.ruoyi.common.core.domain;
-
-/**
- * Tree基类
- *
- * @author ruoyi
- */
-public class TreeEntity extends BaseEntity
-{
- private static final long serialVersionUID = 1L;
-
- /** 父菜单名称 */
- private String parentName;
-
- /** 父菜单ID */
- private Long parentId;
-
- /** 显示顺序 */
- private Integer orderNum;
-
- /** 祖级列表 */
- private String ancestors;
-
- public String getParentName()
- {
- return parentName;
- }
-
- public void setParentName(String parentName)
- {
- this.parentName = parentName;
- }
-
- public Long getParentId()
- {
- return parentId;
- }
-
- public void setParentId(Long parentId)
- {
- this.parentId = parentId;
- }
-
- public Integer getOrderNum()
- {
- return orderNum;
- }
-
- public void setOrderNum(Integer orderNum)
- {
- this.orderNum = orderNum;
- }
-
- public String getAncestors()
- {
- return ancestors;
- }
-
- public void setAncestors(String ancestors)
- {
- this.ancestors = ancestors;
- }
+package com.ruoyi.common.core.domain;
+
+/**
+ * Tree基类
+ *
+ * @author ruoyi
+ */
+public class TreeEntity extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 父菜单名称
+ */
+ private String parentName;
+
+ /**
+ * 父菜单ID
+ */
+ private Long parentId;
+
+ /**
+ * 显示顺序
+ */
+ private Integer orderNum;
+
+ /**
+ * 祖级列表
+ */
+ private String ancestors;
+
+ public String getParentName() {
+ return parentName;
+ }
+
+ public void setParentName(String parentName) {
+ this.parentName = parentName;
+ }
+
+ public Long getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId) {
+ this.parentId = parentId;
+ }
+
+ public Integer getOrderNum() {
+ return orderNum;
+ }
+
+ public void setOrderNum(Integer orderNum) {
+ this.orderNum = orderNum;
+ }
+
+ public String getAncestors() {
+ return ancestors;
+ }
+
+ public void setAncestors(String ancestors) {
+ this.ancestors = ancestors;
+ }
}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Ztree.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Ztree.java
index e7fe780e4..6385eadb2 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Ztree.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/Ztree.java
@@ -1,104 +1,103 @@
-package com.ruoyi.common.core.domain;
-
-import java.io.Serializable;
-
-/**
- * Ztree树结构实体类
- *
- * @author ruoyi
- */
-public class Ztree implements Serializable
-{
- private static final long serialVersionUID = 1L;
-
- /** 节点ID */
- private Long id;
-
- /** 节点父ID */
- private Long pId;
-
- /** 节点名称 */
- private String name;
-
- /** 节点标题 */
- private String title;
-
- /** 是否勾选 */
- private boolean checked = false;
-
- /** 是否展开 */
- private boolean open = false;
-
- /** 是否能勾选 */
- private boolean nocheck = false;
-
- public Long getId()
- {
- return id;
- }
-
- public void setId(Long id)
- {
- this.id = id;
- }
-
- public Long getpId()
- {
- return pId;
- }
-
- public void setpId(Long pId)
- {
- this.pId = pId;
- }
-
- public String getName()
- {
- return name;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- public String getTitle()
- {
- return title;
- }
-
- public void setTitle(String title)
- {
- this.title = title;
- }
-
- public boolean isChecked()
- {
- return checked;
- }
-
- public void setChecked(boolean checked)
- {
- this.checked = checked;
- }
-
- public boolean isOpen()
- {
- return open;
- }
-
- public void setOpen(boolean open)
- {
- this.open = open;
- }
-
- public boolean isNocheck()
- {
- return nocheck;
- }
-
- public void setNocheck(boolean nocheck)
- {
- this.nocheck = nocheck;
- }
-}
+package com.ruoyi.common.core.domain;
+
+import java.io.Serializable;
+
+/**
+ * Ztree树结构实体类
+ *
+ * @author ruoyi
+ */
+public class Ztree implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 节点ID
+ */
+ private Long id;
+
+ /**
+ * 节点父ID
+ */
+ private Long pId;
+
+ /**
+ * 节点名称
+ */
+ private String name;
+
+ /**
+ * 节点标题
+ */
+ private String title;
+
+ /**
+ * 是否勾选
+ */
+ private boolean checked = false;
+
+ /**
+ * 是否展开
+ */
+ private boolean open = false;
+
+ /**
+ * 是否能勾选
+ */
+ private boolean nocheck = false;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Long getpId() {
+ return pId;
+ }
+
+ public void setpId(Long pId) {
+ this.pId = pId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public boolean isChecked() {
+ return checked;
+ }
+
+ public void setChecked(boolean checked) {
+ this.checked = checked;
+ }
+
+ public boolean isOpen() {
+ return open;
+ }
+
+ public void setOpen(boolean open) {
+ this.open = open;
+ }
+
+ public boolean isNocheck() {
+ return nocheck;
+ }
+
+ public void setNocheck(boolean nocheck) {
+ this.nocheck = nocheck;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
index 7fccaf46e..a7b8d4052 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java
@@ -1,69 +1,66 @@
-package com.ruoyi.common.core.page;
-
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 分页数据
- *
- * @author ruoyi
- */
-public class PageDomain
-{
- /** 当前记录起始索引 */
- private Integer pageNum;
- /** 每页显示记录数 */
- private Integer pageSize;
- /** 排序列 */
- private String orderByColumn;
- /** 排序的方向 "desc" 或者 "asc". */
- private String isAsc;
-
- public String getOrderBy()
- {
- if (StringUtils.isEmpty(orderByColumn))
- {
- return "";
- }
- return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
- }
-
- public Integer getPageNum()
- {
- return pageNum;
- }
-
- public void setPageNum(Integer pageNum)
- {
- this.pageNum = pageNum;
- }
-
- public Integer getPageSize()
- {
- return pageSize;
- }
-
- public void setPageSize(Integer pageSize)
- {
- this.pageSize = pageSize;
- }
-
- public String getOrderByColumn()
- {
- return orderByColumn;
- }
-
- public void setOrderByColumn(String orderByColumn)
- {
- this.orderByColumn = orderByColumn;
- }
-
- public String getIsAsc()
- {
- return isAsc;
- }
-
- public void setIsAsc(String isAsc)
- {
- this.isAsc = isAsc;
- }
-}
+package com.ruoyi.common.core.page;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 分页数据
+ *
+ * @author ruoyi
+ */
+public class PageDomain {
+ /**
+ * 当前记录起始索引
+ */
+ private Integer pageNum;
+ /**
+ * 每页显示记录数
+ */
+ private Integer pageSize;
+ /**
+ * 排序列
+ */
+ private String orderByColumn;
+ /**
+ * 排序的方向 "desc" 或者 "asc".
+ */
+ private String isAsc;
+
+ public String getOrderBy() {
+ if (StringUtils.isEmpty(orderByColumn)) {
+ return "";
+ }
+ return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
+ }
+
+ public Integer getPageNum() {
+ return pageNum;
+ }
+
+ public void setPageNum(Integer pageNum) {
+ this.pageNum = pageNum;
+ }
+
+ public Integer getPageSize() {
+ return pageSize;
+ }
+
+ public void setPageSize(Integer pageSize) {
+ this.pageSize = pageSize;
+ }
+
+ public String getOrderByColumn() {
+ return orderByColumn;
+ }
+
+ public void setOrderByColumn(String orderByColumn) {
+ this.orderByColumn = orderByColumn;
+ }
+
+ public String getIsAsc() {
+ return isAsc;
+ }
+
+ public void setIsAsc(String isAsc) {
+ this.isAsc = isAsc;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
index 82dca3716..ac74e061e 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java
@@ -1,85 +1,82 @@
-package com.ruoyi.common.core.page;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * 表格分页数据对象
- *
- * @author ruoyi
- */
-public class TableDataInfo implements Serializable
-{
- private static final long serialVersionUID = 1L;
-
- /** 总记录数 */
- private long total;
-
- /** 列表数据 */
- private List> rows;
-
- /** 消息状态码 */
- private int code;
-
- /** 消息内容 */
- private int msg;
-
- /**
- * 表格数据对象
- */
- public TableDataInfo()
- {
- }
-
- /**
- * 分页
- *
- * @param list 列表数据
- * @param total 总记录数
- */
- public TableDataInfo(List> list, int total)
- {
- this.rows = list;
- this.total = total;
- }
-
- public long getTotal()
- {
- return total;
- }
-
- public void setTotal(long total)
- {
- this.total = total;
- }
-
- public List> getRows()
- {
- return rows;
- }
-
- public void setRows(List> rows)
- {
- this.rows = rows;
- }
-
- public int getCode()
- {
- return code;
- }
-
- public void setCode(int code)
- {
- this.code = code;
- }
-
- public int getMsg()
- {
- return msg;
- }
-
- public void setMsg(int msg)
- {
- this.msg = msg;
- }
+package com.ruoyi.common.core.page;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 表格分页数据对象
+ *
+ * @author ruoyi
+ */
+public class TableDataInfo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 总记录数
+ */
+ private long total;
+
+ /**
+ * 列表数据
+ */
+ private List> rows;
+
+ /**
+ * 消息状态码
+ */
+ private int code;
+
+ /**
+ * 消息内容
+ */
+ private int msg;
+
+ /**
+ * 表格数据对象
+ */
+ public TableDataInfo() {
+ }
+
+ /**
+ * 分页
+ *
+ * @param list 列表数据
+ * @param total 总记录数
+ */
+ public TableDataInfo(List> list, int total) {
+ this.rows = list;
+ this.total = total;
+ }
+
+ public long getTotal() {
+ return total;
+ }
+
+ public void setTotal(long total) {
+ this.total = total;
+ }
+
+ public List> getRows() {
+ return rows;
+ }
+
+ public void setRows(List> rows) {
+ this.rows = rows;
+ }
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public int getMsg() {
+ return msg;
+ }
+
+ public void setMsg(int msg) {
+ this.msg = msg;
+ }
}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
index 0efd82b32..320cbda70 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java
@@ -1,30 +1,27 @@
-package com.ruoyi.common.core.page;
-
-import com.ruoyi.common.constant.Constants;
-import com.ruoyi.common.utils.ServletUtils;
-
-/**
- * 表格数据处理
- *
- * @author ruoyi
- */
-public class TableSupport
-{
- /**
- * 封装分页对象
- */
- public static PageDomain getPageDomain()
- {
- PageDomain pageDomain = new PageDomain();
- pageDomain.setPageNum(ServletUtils.getParameterToInt(Constants.PAGE_NUM));
- pageDomain.setPageSize(ServletUtils.getParameterToInt(Constants.PAGE_SIZE));
- pageDomain.setOrderByColumn(ServletUtils.getParameter(Constants.ORDER_BY_COLUMN));
- pageDomain.setIsAsc(ServletUtils.getParameter(Constants.IS_ASC));
- return pageDomain;
- }
-
- public static PageDomain buildPageRequest()
- {
- return getPageDomain();
- }
-}
+package com.ruoyi.common.core.page;
+
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.utils.ServletUtils;
+
+/**
+ * 表格数据处理
+ *
+ * @author ruoyi
+ */
+public class TableSupport {
+ /**
+ * 封装分页对象
+ */
+ public static PageDomain getPageDomain() {
+ PageDomain pageDomain = new PageDomain();
+ pageDomain.setPageNum(ServletUtils.getParameterToInt(Constants.PAGE_NUM));
+ pageDomain.setPageSize(ServletUtils.getParameterToInt(Constants.PAGE_SIZE));
+ pageDomain.setOrderByColumn(ServletUtils.getParameter(Constants.ORDER_BY_COLUMN));
+ pageDomain.setIsAsc(ServletUtils.getParameter(Constants.IS_ASC));
+ return pageDomain;
+ }
+
+ public static PageDomain buildPageRequest() {
+ return getPageDomain();
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java
index 8297661af..556ca3e10 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java
@@ -1,86 +1,91 @@
-package com.ruoyi.common.core.text;
-
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 字符集工具类
- *
- * @author ruoyi
- */
-public class CharsetKit
-{
- /** ISO-8859-1 */
- public static final String ISO_8859_1 = "ISO-8859-1";
- /** UTF-8 */
- public static final String UTF_8 = "UTF-8";
- /** GBK */
- public static final String GBK = "GBK";
-
- /** ISO-8859-1 */
- public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
- /** UTF-8 */
- public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
- /** GBK */
- public static final Charset CHARSET_GBK = Charset.forName(GBK);
-
- /**
- * 转换为Charset对象
- *
- * @param charset 字符集,为空则返回默认字符集
- * @return Charset
- */
- public static Charset charset(String charset)
- {
- return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
- }
-
- /**
- * 转换字符串的字符集编码
- *
- * @param source 字符串
- * @param srcCharset 源字符集,默认ISO-8859-1
- * @param destCharset 目标字符集,默认UTF-8
- * @return 转换后的字符集
- */
- public static String convert(String source, String srcCharset, String destCharset)
- {
- return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
- }
-
- /**
- * 转换字符串的字符集编码
- *
- * @param source 字符串
- * @param srcCharset 源字符集,默认ISO-8859-1
- * @param destCharset 目标字符集,默认UTF-8
- * @return 转换后的字符集
- */
- public static String convert(String source, Charset srcCharset, Charset destCharset)
- {
- if (null == srcCharset)
- {
- srcCharset = StandardCharsets.ISO_8859_1;
- }
-
- if (null == destCharset)
- {
- srcCharset = StandardCharsets.UTF_8;
- }
-
- if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
- {
- return source;
- }
- return new String(source.getBytes(srcCharset), destCharset);
- }
-
- /**
- * @return 系统字符集编码
- */
- public static String systemCharset()
- {
- return Charset.defaultCharset().name();
- }
-}
+package com.ruoyi.common.core.text;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 字符集工具类
+ *
+ * @author ruoyi
+ */
+public class CharsetKit {
+ /**
+ * ISO-8859-1
+ */
+ public static final String ISO_8859_1 = "ISO-8859-1";
+ /**
+ * UTF-8
+ */
+ public static final String UTF_8 = "UTF-8";
+ /**
+ * GBK
+ */
+ public static final String GBK = "GBK";
+
+ /**
+ * ISO-8859-1
+ */
+ public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
+ /**
+ * UTF-8
+ */
+ public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
+ /**
+ * GBK
+ */
+ public static final Charset CHARSET_GBK = Charset.forName(GBK);
+
+ /**
+ * 转换为Charset对象
+ *
+ * @param charset 字符集,为空则返回默认字符集
+ * @return Charset
+ */
+ public static Charset charset(String charset) {
+ return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
+ }
+
+ /**
+ * 转换字符串的字符集编码
+ *
+ * @param source 字符串
+ * @param srcCharset 源字符集,默认ISO-8859-1
+ * @param destCharset 目标字符集,默认UTF-8
+ * @return 转换后的字符集
+ */
+ public static String convert(String source, String srcCharset, String destCharset) {
+ return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
+ }
+
+ /**
+ * 转换字符串的字符集编码
+ *
+ * @param source 字符串
+ * @param srcCharset 源字符集,默认ISO-8859-1
+ * @param destCharset 目标字符集,默认UTF-8
+ * @return 转换后的字符集
+ */
+ public static String convert(String source, Charset srcCharset, Charset destCharset) {
+ if (null == srcCharset) {
+ srcCharset = StandardCharsets.ISO_8859_1;
+ }
+
+ if (null == destCharset) {
+ srcCharset = StandardCharsets.UTF_8;
+ }
+
+ if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) {
+ return source;
+ }
+ return new String(source.getBytes(srcCharset), destCharset);
+ }
+
+ /**
+ * @return 系统字符集编码
+ */
+ public static String systemCharset() {
+ return Charset.defaultCharset().name();
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
index 9dd076d04..f9dce907c 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java
@@ -1,999 +1,850 @@
-package com.ruoyi.common.core.text;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.nio.ByteBuffer;
-import java.nio.charset.Charset;
-import java.text.NumberFormat;
-import java.util.Set;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 类型转换器
- *
- * @author ruoyi
- */
-public class Convert
-{
- /**
- * 转换为字符串
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static String toStr(Object value, String defaultValue)
- {
- if (null == value)
- {
- return defaultValue;
- }
- if (value instanceof String)
- {
- return (String) value;
- }
- return value.toString();
- }
-
- /**
- * 转换为字符串
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static String toStr(Object value)
- {
- return toStr(value, null);
- }
-
- /**
- * 转换为字符
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Character toChar(Object value, Character defaultValue)
- {
- if (null == value)
- {
- return defaultValue;
- }
- if (value instanceof Character)
- {
- return (Character) value;
- }
-
- final String valueStr = toStr(value, null);
- return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
- }
-
- /**
- * 转换为字符
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Character toChar(Object value)
- {
- return toChar(value, null);
- }
-
- /**
- * 转换为byte
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Byte toByte(Object value, Byte defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Byte)
- {
- return (Byte) value;
- }
- if (value instanceof Number)
- {
- return ((Number) value).byteValue();
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return Byte.parseByte(valueStr);
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为byte
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Byte toByte(Object value)
- {
- return toByte(value, null);
- }
-
- /**
- * 转换为Short
- * 如果给定的值为null,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Short toShort(Object value, Short defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Short)
- {
- return (Short) value;
- }
- if (value instanceof Number)
- {
- return ((Number) value).shortValue();
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return Short.parseShort(valueStr.trim());
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为Short
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Short toShort(Object value)
- {
- return toShort(value, null);
- }
-
- /**
- * 转换为Number
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Number toNumber(Object value, Number defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Number)
- {
- return (Number) value;
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return NumberFormat.getInstance().parse(valueStr);
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为Number
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Number toNumber(Object value)
- {
- return toNumber(value, null);
- }
-
- /**
- * 转换为int
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Integer toInt(Object value, Integer defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Integer)
- {
- return (Integer) value;
- }
- if (value instanceof Number)
- {
- return ((Number) value).intValue();
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return Integer.parseInt(valueStr.trim());
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为int
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Integer toInt(Object value)
- {
- return toInt(value, null);
- }
-
- /**
- * 转换为Integer数组
- *
- * @param str 被转换的值
- * @return 结果
- */
- public static Integer[] toIntArray(String str)
- {
- return toIntArray(",", str);
- }
-
- /**
- * 转换为Long数组
- *
- * @param str 被转换的值
- * @return 结果
- */
- public static Long[] toLongArray(String str)
- {
- return toLongArray(",", str);
- }
-
- /**
- * 转换为Integer数组
- *
- * @param split 分隔符
- * @param split 被转换的值
- * @return 结果
- */
- public static Integer[] toIntArray(String split, String str)
- {
- if (StringUtils.isEmpty(str))
- {
- return new Integer[] {};
- }
- String[] arr = str.split(split);
- final Integer[] ints = new Integer[arr.length];
- for (int i = 0; i < arr.length; i++)
- {
- final Integer v = toInt(arr[i], 0);
- ints[i] = v;
- }
- return ints;
- }
-
- /**
- * 转换为Long数组
- *
- * @param split 分隔符
- * @param str 被转换的值
- * @return 结果
- */
- public static Long[] toLongArray(String split, String str)
- {
- if (StringUtils.isEmpty(str))
- {
- return new Long[] {};
- }
- String[] arr = str.split(split);
- final Long[] longs = new Long[arr.length];
- for (int i = 0; i < arr.length; i++)
- {
- final Long v = toLong(arr[i], null);
- longs[i] = v;
- }
- return longs;
- }
-
- /**
- * 转换为String数组
- *
- * @param str 被转换的值
- * @return 结果
- */
- public static String[] toStrArray(String str)
- {
- return toStrArray(",", str);
- }
-
- /**
- * 转换为String数组
- *
- * @param split 分隔符
- * @param split 被转换的值
- * @return 结果
- */
- public static String[] toStrArray(String split, String str)
- {
- return str.split(split);
- }
-
- /**
- * 转换为long
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Long toLong(Object value, Long defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Long)
- {
- return (Long) value;
- }
- if (value instanceof Number)
- {
- return ((Number) value).longValue();
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- // 支持科学计数法
- return new BigDecimal(valueStr.trim()).longValue();
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为long
- * 如果给定的值为null,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Long toLong(Object value)
- {
- return toLong(value, null);
- }
-
- /**
- * 转换为double
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Double toDouble(Object value, Double defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Double)
- {
- return (Double) value;
- }
- if (value instanceof Number)
- {
- return ((Number) value).doubleValue();
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- // 支持科学计数法
- return new BigDecimal(valueStr.trim()).doubleValue();
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为double
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Double toDouble(Object value)
- {
- return toDouble(value, null);
- }
-
- /**
- * 转换为Float
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Float toFloat(Object value, Float defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Float)
- {
- return (Float) value;
- }
- if (value instanceof Number)
- {
- return ((Number) value).floatValue();
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return Float.parseFloat(valueStr.trim());
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为Float
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Float toFloat(Object value)
- {
- return toFloat(value, null);
- }
-
- /**
- * 转换为boolean
- * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static Boolean toBool(Object value, Boolean defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof Boolean)
- {
- return (Boolean) value;
- }
- String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- valueStr = valueStr.trim().toLowerCase();
- switch (valueStr)
- {
- case "true":
- return true;
- case "false":
- return false;
- case "yes":
- return true;
- case "ok":
- return true;
- case "no":
- return false;
- case "1":
- return true;
- case "0":
- return false;
- default:
- return defaultValue;
- }
- }
-
- /**
- * 转换为boolean
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static Boolean toBool(Object value)
- {
- return toBool(value, null);
- }
-
- /**
- * 转换为Enum对象
- * 如果给定的值为空,或者转换失败,返回默认值
- *
- * @param clazz Enum的Class
- * @param value 值
- * @param defaultValue 默认值
- * @return Enum
- */
- public static > E toEnum(Class clazz, Object value, E defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (clazz.isAssignableFrom(value.getClass()))
- {
- @SuppressWarnings("unchecked")
- E myE = (E) value;
- return myE;
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return Enum.valueOf(clazz, valueStr);
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为Enum对象
- * 如果给定的值为空,或者转换失败,返回默认值null
- *
- * @param clazz Enum的Class
- * @param value 值
- * @return Enum
- */
- public static > E toEnum(Class clazz, Object value)
- {
- return toEnum(clazz, value, null);
- }
-
- /**
- * 转换为BigInteger
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static BigInteger toBigInteger(Object value, BigInteger defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof BigInteger)
- {
- return (BigInteger) value;
- }
- if (value instanceof Long)
- {
- return BigInteger.valueOf((Long) value);
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return new BigInteger(valueStr);
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为BigInteger
- * 如果给定的值为空,或者转换失败,返回默认值null
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static BigInteger toBigInteger(Object value)
- {
- return toBigInteger(value, null);
- }
-
- /**
- * 转换为BigDecimal
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @param defaultValue 转换错误时的默认值
- * @return 结果
- */
- public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue)
- {
- if (value == null)
- {
- return defaultValue;
- }
- if (value instanceof BigDecimal)
- {
- return (BigDecimal) value;
- }
- if (value instanceof Long)
- {
- return new BigDecimal((Long) value);
- }
- if (value instanceof Double)
- {
- return new BigDecimal((Double) value);
- }
- if (value instanceof Integer)
- {
- return new BigDecimal((Integer) value);
- }
- final String valueStr = toStr(value, null);
- if (StringUtils.isEmpty(valueStr))
- {
- return defaultValue;
- }
- try
- {
- return new BigDecimal(valueStr);
- }
- catch (Exception e)
- {
- return defaultValue;
- }
- }
-
- /**
- * 转换为BigDecimal
- * 如果给定的值为空,或者转换失败,返回默认值
- * 转换失败不会报错
- *
- * @param value 被转换的值
- * @return 结果
- */
- public static BigDecimal toBigDecimal(Object value)
- {
- return toBigDecimal(value, null);
- }
-
- /**
- * 将对象转为字符串
- * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
- *
- * @param obj 对象
- * @return 字符串
- */
- public static String utf8Str(Object obj)
- {
- return str(obj, CharsetKit.CHARSET_UTF_8);
- }
-
- /**
- * 将对象转为字符串
- * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
- *
- * @param obj 对象
- * @param charsetName 字符集
- * @return 字符串
- */
- public static String str(Object obj, String charsetName)
- {
- return str(obj, Charset.forName(charsetName));
- }
-
- /**
- * 将对象转为字符串
- * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
- *
- * @param obj 对象
- * @param charset 字符集
- * @return 字符串
- */
- public static String str(Object obj, Charset charset)
- {
- if (null == obj)
- {
- return null;
- }
-
- if (obj instanceof String)
- {
- return (String) obj;
- }
- else if (obj instanceof byte[] || obj instanceof Byte[])
- {
- return str((Byte[]) obj, charset);
- }
- else if (obj instanceof ByteBuffer)
- {
- return str((ByteBuffer) obj, charset);
- }
- return obj.toString();
- }
-
- /**
- * 将byte数组转为字符串
- *
- * @param bytes byte数组
- * @param charset 字符集
- * @return 字符串
- */
- public static String str(byte[] bytes, String charset)
- {
- return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
- }
-
- /**
- * 解码字节码
- *
- * @param data 字符串
- * @param charset 字符集,如果此字段为空,则解码的结果取决于平台
- * @return 解码后的字符串
- */
- public static String str(byte[] data, Charset charset)
- {
- if (data == null)
- {
- return null;
- }
-
- if (null == charset)
- {
- return new String(data);
- }
- return new String(data, charset);
- }
-
- /**
- * 将编码的byteBuffer数据转换为字符串
- *
- * @param data 数据
- * @param charset 字符集,如果为空使用当前系统字符集
- * @return 字符串
- */
- public static String str(ByteBuffer data, String charset)
- {
- if (data == null)
- {
- return null;
- }
-
- return str(data, Charset.forName(charset));
- }
-
- /**
- * 将编码的byteBuffer数据转换为字符串
- *
- * @param data 数据
- * @param charset 字符集,如果为空使用当前系统字符集
- * @return 字符串
- */
- public static String str(ByteBuffer data, Charset charset)
- {
- if (null == charset)
- {
- charset = Charset.defaultCharset();
- }
- return charset.decode(data).toString();
- }
-
- // ----------------------------------------------------------------------- 全角半角转换
- /**
- * 半角转全角
- *
- * @param input String.
- * @return 全角字符串.
- */
- public static String toSBC(String input)
- {
- return toSBC(input, null);
- }
-
- /**
- * 半角转全角
- *
- * @param input String
- * @param notConvertSet 不替换的字符集合
- * @return 全角字符串.
- */
- public static String toSBC(String input, Set notConvertSet)
- {
- char c[] = input.toCharArray();
- for (int i = 0; i < c.length; i++)
- {
- if (null != notConvertSet && notConvertSet.contains(c[i]))
- {
- // 跳过不替换的字符
- continue;
- }
-
- if (c[i] == ' ')
- {
- c[i] = '\u3000';
- }
- else if (c[i] < '\177')
- {
- c[i] = (char) (c[i] + 65248);
-
- }
- }
- return new String(c);
- }
-
- /**
- * 全角转半角
- *
- * @param input String.
- * @return 半角字符串
- */
- public static String toDBC(String input)
- {
- return toDBC(input, null);
- }
-
- /**
- * 替换全角为半角
- *
- * @param text 文本
- * @param notConvertSet 不替换的字符集合
- * @return 替换后的字符
- */
- public static String toDBC(String text, Set notConvertSet)
- {
- char c[] = text.toCharArray();
- for (int i = 0; i < c.length; i++)
- {
- if (null != notConvertSet && notConvertSet.contains(c[i]))
- {
- // 跳过不替换的字符
- continue;
- }
-
- if (c[i] == '\u3000')
- {
- c[i] = ' ';
- }
- else if (c[i] > '\uFF00' && c[i] < '\uFF5F')
- {
- c[i] = (char) (c[i] - 65248);
- }
- }
- String returnString = new String(c);
-
- return returnString;
- }
-
- /**
- * 数字金额大写转换 先写个完整的然后将如零拾替换成零
- *
- * @param n 数字
- * @return 中文大写数字
- */
- public static String digitUppercase(double n)
- {
- String[] fraction = { "角", "分" };
- String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
- String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } };
-
- String head = n < 0 ? "负" : "";
- n = Math.abs(n);
-
- String s = "";
- for (int i = 0; i < fraction.length; i++)
- {
- s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
- }
- if (s.length() < 1)
- {
- s = "整";
- }
- int integerPart = (int) Math.floor(n);
-
- for (int i = 0; i < unit[0].length && integerPart > 0; i++)
- {
- String p = "";
- for (int j = 0; j < unit[1].length && n > 0; j++)
- {
- p = digit[integerPart % 10] + unit[1][j] + p;
- integerPart = integerPart / 10;
- }
- s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
- }
- return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
- }
-}
+package com.ruoyi.common.core.text;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.text.NumberFormat;
+import java.util.Set;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 类型转换器
+ *
+ * @author ruoyi
+ */
+public class Convert {
+ /**
+ * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static String toStr(Object value, String defaultValue) {
+ if (null == value) {
+ return defaultValue;
+ }
+ if (value instanceof String) {
+ return (String) value;
+ }
+ return value.toString();
+ }
+
+ /**
+ * 转换为字符串
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static String toStr(Object value) {
+ return toStr(value, null);
+ }
+
+ /**
+ * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Character toChar(Object value, Character defaultValue) {
+ if (null == value) {
+ return defaultValue;
+ }
+ if (value instanceof Character) {
+ return (Character) value;
+ }
+
+ final String valueStr = toStr(value, null);
+ return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
+ }
+
+ /**
+ * 转换为字符
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Character toChar(Object value) {
+ return toChar(value, null);
+ }
+
+ /**
+ * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Byte toByte(Object value, Byte defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Byte) {
+ return (Byte) value;
+ }
+ if (value instanceof Number) {
+ return ((Number) value).byteValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return Byte.parseByte(valueStr);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为byte
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Byte toByte(Object value) {
+ return toByte(value, null);
+ }
+
+ /**
+ * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Short toShort(Object value, Short defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Short) {
+ return (Short) value;
+ }
+ if (value instanceof Number) {
+ return ((Number) value).shortValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return Short.parseShort(valueStr.trim());
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Short
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Short toShort(Object value) {
+ return toShort(value, null);
+ }
+
+ /**
+ * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Number toNumber(Object value, Number defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Number) {
+ return (Number) value;
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return NumberFormat.getInstance().parse(valueStr);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Number
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Number toNumber(Object value) {
+ return toNumber(value, null);
+ }
+
+ /**
+ * 转换为int
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Integer toInt(Object value, Integer defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Integer) {
+ return (Integer) value;
+ }
+ if (value instanceof Number) {
+ return ((Number) value).intValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return Integer.parseInt(valueStr.trim());
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为int
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Integer toInt(Object value) {
+ return toInt(value, null);
+ }
+
+ /**
+ * 转换为Integer数组
+ *
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static Integer[] toIntArray(String str) {
+ return toIntArray(",", str);
+ }
+
+ /**
+ * 转换为Long数组
+ *
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static Long[] toLongArray(String str) {
+ return toLongArray(",", str);
+ }
+
+ /**
+ * 转换为Integer数组
+ *
+ * @param split 分隔符
+ * @param split 被转换的值
+ * @return 结果
+ */
+ public static Integer[] toIntArray(String split, String str) {
+ if (StringUtils.isEmpty(str)) {
+ return new Integer[]{};
+ }
+ String[] arr = str.split(split);
+ final Integer[] ints = new Integer[arr.length];
+ for (int i = 0; i < arr.length; i++) {
+ final Integer v = toInt(arr[i], 0);
+ ints[i] = v;
+ }
+ return ints;
+ }
+
+ /**
+ * 转换为Long数组
+ *
+ * @param split 分隔符
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static Long[] toLongArray(String split, String str) {
+ if (StringUtils.isEmpty(str)) {
+ return new Long[]{};
+ }
+ String[] arr = str.split(split);
+ final Long[] longs = new Long[arr.length];
+ for (int i = 0; i < arr.length; i++) {
+ final Long v = toLong(arr[i], null);
+ longs[i] = v;
+ }
+ return longs;
+ }
+
+ /**
+ * 转换为String数组
+ *
+ * @param str 被转换的值
+ * @return 结果
+ */
+ public static String[] toStrArray(String str) {
+ return toStrArray(",", str);
+ }
+
+ /**
+ * 转换为String数组
+ *
+ * @param split 分隔符
+ * @param split 被转换的值
+ * @return 结果
+ */
+ public static String[] toStrArray(String split, String str) {
+ return str.split(split);
+ }
+
+ /**
+ * 转换为long
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Long toLong(Object value, Long defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Long) {
+ return (Long) value;
+ }
+ if (value instanceof Number) {
+ return ((Number) value).longValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ // 支持科学计数法
+ return new BigDecimal(valueStr.trim()).longValue();
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为long
+ * 如果给定的值为null,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Long toLong(Object value) {
+ return toLong(value, null);
+ }
+
+ /**
+ * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Double toDouble(Object value, Double defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Double) {
+ return (Double) value;
+ }
+ if (value instanceof Number) {
+ return ((Number) value).doubleValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ // 支持科学计数法
+ return new BigDecimal(valueStr.trim()).doubleValue();
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为double
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Double toDouble(Object value) {
+ return toDouble(value, null);
+ }
+
+ /**
+ * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Float toFloat(Object value, Float defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Float) {
+ return (Float) value;
+ }
+ if (value instanceof Number) {
+ return ((Number) value).floatValue();
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return Float.parseFloat(valueStr.trim());
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Float
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Float toFloat(Object value) {
+ return toFloat(value, null);
+ }
+
+ /**
+ * 转换为boolean
+ * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static Boolean toBool(Object value, Boolean defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof Boolean) {
+ return (Boolean) value;
+ }
+ String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ valueStr = valueStr.trim().toLowerCase();
+ switch (valueStr) {
+ case "true":
+ return true;
+ case "false":
+ return false;
+ case "yes":
+ return true;
+ case "ok":
+ return true;
+ case "no":
+ return false;
+ case "1":
+ return true;
+ case "0":
+ return false;
+ default:
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为boolean
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static Boolean toBool(Object value) {
+ return toBool(value, null);
+ }
+
+ /**
+ * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值
+ *
+ * @param clazz Enum的Class
+ * @param value 值
+ * @param defaultValue 默认值
+ * @return Enum
+ */
+ public static > E toEnum(Class clazz, Object value, E defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (clazz.isAssignableFrom(value.getClass())) {
+ @SuppressWarnings("unchecked")
+ E myE = (E) value;
+ return myE;
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return Enum.valueOf(clazz, valueStr);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为Enum对象
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ *
+ * @param clazz Enum的Class
+ * @param value 值
+ * @return Enum
+ */
+ public static > E toEnum(Class clazz, Object value) {
+ return toEnum(clazz, value, null);
+ }
+
+ /**
+ * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static BigInteger toBigInteger(Object value, BigInteger defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof BigInteger) {
+ return (BigInteger) value;
+ }
+ if (value instanceof Long) {
+ return BigInteger.valueOf((Long) value);
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return new BigInteger(valueStr);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为BigInteger
+ * 如果给定的值为空,或者转换失败,返回默认值null
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static BigInteger toBigInteger(Object value) {
+ return toBigInteger(value, null);
+ }
+
+ /**
+ * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @param defaultValue 转换错误时的默认值
+ * @return 结果
+ */
+ public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) {
+ if (value == null) {
+ return defaultValue;
+ }
+ if (value instanceof BigDecimal) {
+ return (BigDecimal) value;
+ }
+ if (value instanceof Long) {
+ return new BigDecimal((Long) value);
+ }
+ if (value instanceof Double) {
+ return new BigDecimal((Double) value);
+ }
+ if (value instanceof Integer) {
+ return new BigDecimal((Integer) value);
+ }
+ final String valueStr = toStr(value, null);
+ if (StringUtils.isEmpty(valueStr)) {
+ return defaultValue;
+ }
+ try {
+ return new BigDecimal(valueStr);
+ } catch (Exception e) {
+ return defaultValue;
+ }
+ }
+
+ /**
+ * 转换为BigDecimal
+ * 如果给定的值为空,或者转换失败,返回默认值
+ * 转换失败不会报错
+ *
+ * @param value 被转换的值
+ * @return 结果
+ */
+ public static BigDecimal toBigDecimal(Object value) {
+ return toBigDecimal(value, null);
+ }
+
+ /**
+ * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
+ *
+ * @param obj 对象
+ * @return 字符串
+ */
+ public static String utf8Str(Object obj) {
+ return str(obj, CharsetKit.CHARSET_UTF_8);
+ }
+
+ /**
+ * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
+ *
+ * @param obj 对象
+ * @param charsetName 字符集
+ * @return 字符串
+ */
+ public static String str(Object obj, String charsetName) {
+ return str(obj, Charset.forName(charsetName));
+ }
+
+ /**
+ * 将对象转为字符串
+ * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
+ *
+ * @param obj 对象
+ * @param charset 字符集
+ * @return 字符串
+ */
+ public static String str(Object obj, Charset charset) {
+ if (null == obj) {
+ return null;
+ }
+
+ if (obj instanceof String) {
+ return (String) obj;
+ } else if (obj instanceof byte[] || obj instanceof Byte[]) {
+ return str((Byte[]) obj, charset);
+ } else if (obj instanceof ByteBuffer) {
+ return str((ByteBuffer) obj, charset);
+ }
+ return obj.toString();
+ }
+
+ /**
+ * 将byte数组转为字符串
+ *
+ * @param bytes byte数组
+ * @param charset 字符集
+ * @return 字符串
+ */
+ public static String str(byte[] bytes, String charset) {
+ return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
+ }
+
+ /**
+ * 解码字节码
+ *
+ * @param data 字符串
+ * @param charset 字符集,如果此字段为空,则解码的结果取决于平台
+ * @return 解码后的字符串
+ */
+ public static String str(byte[] data, Charset charset) {
+ if (data == null) {
+ return null;
+ }
+
+ if (null == charset) {
+ return new String(data);
+ }
+ return new String(data, charset);
+ }
+
+ /**
+ * 将编码的byteBuffer数据转换为字符串
+ *
+ * @param data 数据
+ * @param charset 字符集,如果为空使用当前系统字符集
+ * @return 字符串
+ */
+ public static String str(ByteBuffer data, String charset) {
+ if (data == null) {
+ return null;
+ }
+
+ return str(data, Charset.forName(charset));
+ }
+
+ /**
+ * 将编码的byteBuffer数据转换为字符串
+ *
+ * @param data 数据
+ * @param charset 字符集,如果为空使用当前系统字符集
+ * @return 字符串
+ */
+ public static String str(ByteBuffer data, Charset charset) {
+ if (null == charset) {
+ charset = Charset.defaultCharset();
+ }
+ return charset.decode(data).toString();
+ }
+
+ // ----------------------------------------------------------------------- 全角半角转换
+
+ /**
+ * 半角转全角
+ *
+ * @param input String.
+ * @return 全角字符串.
+ */
+ public static String toSBC(String input) {
+ return toSBC(input, null);
+ }
+
+ /**
+ * 半角转全角
+ *
+ * @param input String
+ * @param notConvertSet 不替换的字符集合
+ * @return 全角字符串.
+ */
+ public static String toSBC(String input, Set notConvertSet) {
+ char c[] = input.toCharArray();
+ for (int i = 0; i < c.length; i++) {
+ if (null != notConvertSet && notConvertSet.contains(c[i])) {
+ // 跳过不替换的字符
+ continue;
+ }
+
+ if (c[i] == ' ') {
+ c[i] = '\u3000';
+ } else if (c[i] < '\177') {
+ c[i] = (char) (c[i] + 65248);
+
+ }
+ }
+ return new String(c);
+ }
+
+ /**
+ * 全角转半角
+ *
+ * @param input String.
+ * @return 半角字符串
+ */
+ public static String toDBC(String input) {
+ return toDBC(input, null);
+ }
+
+ /**
+ * 替换全角为半角
+ *
+ * @param text 文本
+ * @param notConvertSet 不替换的字符集合
+ * @return 替换后的字符
+ */
+ public static String toDBC(String text, Set notConvertSet) {
+ char c[] = text.toCharArray();
+ for (int i = 0; i < c.length; i++) {
+ if (null != notConvertSet && notConvertSet.contains(c[i])) {
+ // 跳过不替换的字符
+ continue;
+ }
+
+ if (c[i] == '\u3000') {
+ c[i] = ' ';
+ } else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
+ c[i] = (char) (c[i] - 65248);
+ }
+ }
+ String returnString = new String(c);
+
+ return returnString;
+ }
+
+ /**
+ * 数字金额大写转换 先写个完整的然后将如零拾替换成零
+ *
+ * @param n 数字
+ * @return 中文大写数字
+ */
+ public static String digitUppercase(double n) {
+ String[] fraction = {"角", "分"};
+ String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
+ String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}};
+
+ String head = n < 0 ? "负" : "";
+ n = Math.abs(n);
+
+ String s = "";
+ for (int i = 0; i < fraction.length; i++) {
+ s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
+ }
+ if (s.length() < 1) {
+ s = "整";
+ }
+ int integerPart = (int) Math.floor(n);
+
+ for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
+ String p = "";
+ for (int j = 0; j < unit[1].length && n > 0; j++) {
+ p = digit[integerPart % 10] + unit[1][j] + p;
+ integerPart = integerPart / 10;
+ }
+ s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
+ }
+ return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java
index dbf3e2375..eec64f994 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java
@@ -1,92 +1,76 @@
-package com.ruoyi.common.core.text;
-
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 字符串格式化
- *
- * @author ruoyi
- */
-public class StrFormatter
-{
- public static final String EMPTY_JSON = "{}";
- public static final char C_BACKSLASH = '\\';
- public static final char C_DELIM_START = '{';
- public static final char C_DELIM_END = '}';
-
- /**
- * 格式化字符串
- * 此方法只是简单将占位符 {} 按照顺序替换为参数
- * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
- * 例:
- * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
- * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
- * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
- *
- * @param strPattern 字符串模板
- * @param argArray 参数列表
- * @return 结果
- */
- public static String format(final String strPattern, final Object... argArray)
- {
- if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray))
- {
- return strPattern;
- }
- final int strPatternLength = strPattern.length();
-
- // 初始化定义好的长度以获得更好的性能
- StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
-
- int handledPosition = 0;
- int delimIndex;// 占位符所在位置
- for (int argIndex = 0; argIndex < argArray.length; argIndex++)
- {
- delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
- if (delimIndex == -1)
- {
- if (handledPosition == 0)
- {
- return strPattern;
- }
- else
- { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果
- sbuf.append(strPattern, handledPosition, strPatternLength);
- return sbuf.toString();
- }
- }
- else
- {
- if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH)
- {
- if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH)
- {
- // 转义符之前还有一个转义符,占位符依旧有效
- sbuf.append(strPattern, handledPosition, delimIndex - 1);
- sbuf.append(Convert.utf8Str(argArray[argIndex]));
- handledPosition = delimIndex + 2;
- }
- else
- {
- // 占位符被转义
- argIndex--;
- sbuf.append(strPattern, handledPosition, delimIndex - 1);
- sbuf.append(C_DELIM_START);
- handledPosition = delimIndex + 1;
- }
- }
- else
- {
- // 正常占位符
- sbuf.append(strPattern, handledPosition, delimIndex);
- sbuf.append(Convert.utf8Str(argArray[argIndex]));
- handledPosition = delimIndex + 2;
- }
- }
- }
- // 加入最后一个占位符后所有的字符
- sbuf.append(strPattern, handledPosition, strPattern.length());
-
- return sbuf.toString();
- }
-}
+package com.ruoyi.common.core.text;
+
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 字符串格式化
+ *
+ * @author ruoyi
+ */
+public class StrFormatter {
+ public static final String EMPTY_JSON = "{}";
+ public static final char C_BACKSLASH = '\\';
+ public static final char C_DELIM_START = '{';
+ public static final char C_DELIM_END = '}';
+
+ /**
+ * 格式化字符串
+ * 此方法只是简单将占位符 {} 按照顺序替换为参数
+ * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可
+ * 例:
+ * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b
+ * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ *
+ * @param strPattern 字符串模板
+ * @param argArray 参数列表
+ * @return 结果
+ */
+ public static String format(final String strPattern, final Object... argArray) {
+ if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) {
+ return strPattern;
+ }
+ final int strPatternLength = strPattern.length();
+
+ // 初始化定义好的长度以获得更好的性能
+ StringBuilder sbuf = new StringBuilder(strPatternLength + 50);
+
+ int handledPosition = 0;
+ int delimIndex;// 占位符所在位置
+ for (int argIndex = 0; argIndex < argArray.length; argIndex++) {
+ delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition);
+ if (delimIndex == -1) {
+ if (handledPosition == 0) {
+ return strPattern;
+ } else { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果
+ sbuf.append(strPattern, handledPosition, strPatternLength);
+ return sbuf.toString();
+ }
+ } else {
+ if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) {
+ if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) {
+ // 转义符之前还有一个转义符,占位符依旧有效
+ sbuf.append(strPattern, handledPosition, delimIndex - 1);
+ sbuf.append(Convert.utf8Str(argArray[argIndex]));
+ handledPosition = delimIndex + 2;
+ } else {
+ // 占位符被转义
+ argIndex--;
+ sbuf.append(strPattern, handledPosition, delimIndex - 1);
+ sbuf.append(C_DELIM_START);
+ handledPosition = delimIndex + 1;
+ }
+ } else {
+ // 正常占位符
+ sbuf.append(strPattern, handledPosition, delimIndex);
+ sbuf.append(Convert.utf8Str(argArray[argIndex]));
+ handledPosition = delimIndex + 2;
+ }
+ }
+ }
+ // 加入最后一个占位符后所有的字符
+ sbuf.append(strPattern, handledPosition, strPattern.length());
+
+ return sbuf.toString();
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
index 43612e5d7..ce32cb41c 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java
@@ -1,19 +1,18 @@
-package com.ruoyi.common.enums;
-
-/**
- * 操作状态
- *
- * @author ruoyi
- */
-public enum BusinessStatus
-{
- /**
- * 成功
- */
- SUCCESS,
-
- /**
- * 失败
- */
- FAIL,
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 操作状态
+ *
+ * @author ruoyi
+ */
+public enum BusinessStatus {
+ /**
+ * 成功
+ */
+ SUCCESS,
+
+ /**
+ * 失败
+ */
+ FAIL,
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
index d22bccbd3..b344ad6ea 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java
@@ -1,59 +1,58 @@
-package com.ruoyi.common.enums;
-
-/**
- * 业务操作类型
- *
- * @author ruoyi
- */
-public enum BusinessType
-{
- /**
- * 其它
- */
- OTHER,
-
- /**
- * 新增
- */
- INSERT,
-
- /**
- * 修改
- */
- UPDATE,
-
- /**
- * 删除
- */
- DELETE,
-
- /**
- * 授权
- */
- GRANT,
-
- /**
- * 导出
- */
- EXPORT,
-
- /**
- * 导入
- */
- IMPORT,
-
- /**
- * 强退
- */
- FORCE,
-
- /**
- * 生成代码
- */
- GENCODE,
-
- /**
- * 清空
- */
- CLEAN,
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 业务操作类型
+ *
+ * @author ruoyi
+ */
+public enum BusinessType {
+ /**
+ * 其它
+ */
+ OTHER,
+
+ /**
+ * 新增
+ */
+ INSERT,
+
+ /**
+ * 修改
+ */
+ UPDATE,
+
+ /**
+ * 删除
+ */
+ DELETE,
+
+ /**
+ * 授权
+ */
+ GRANT,
+
+ /**
+ * 导出
+ */
+ EXPORT,
+
+ /**
+ * 导入
+ */
+ IMPORT,
+
+ /**
+ * 强退
+ */
+ FORCE,
+
+ /**
+ * 生成代码
+ */
+ GENCODE,
+
+ /**
+ * 清空
+ */
+ CLEAN,
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
index 4b5341d19..e9ed99af3 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java
@@ -1,19 +1,18 @@
-package com.ruoyi.common.enums;
-
-/**
- * 数据源
- *
- * @author ruoyi
- */
-public enum DataSourceType
-{
- /**
- * 主库
- */
- MASTER,
-
- /**
- * 从库
- */
- SLAVE
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 数据源
+ *
+ * @author ruoyi
+ */
+public enum DataSourceType {
+ /**
+ * 主库
+ */
+ MASTER,
+
+ /**
+ * 从库
+ */
+ SLAVE
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
index b0bdd1003..a79eb9e03 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OnlineStatus.java
@@ -1,24 +1,23 @@
-package com.ruoyi.common.enums;
-
-/**
- * 用户会话
- *
- * @author ruoyi
- */
-public enum OnlineStatus
-{
- /** 用户状态 */
- on_line("在线"), off_line("离线");
-
- private final String info;
-
- private OnlineStatus(String info)
- {
- this.info = info;
- }
-
- public String getInfo()
- {
- return info;
- }
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 用户会话
+ *
+ * @author ruoyi
+ */
+public enum OnlineStatus {
+ /**
+ * 用户状态
+ */
+ on_line("在线"), off_line("离线");
+
+ private final String info;
+
+ private OnlineStatus(String info) {
+ this.info = info;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
index 06532af8f..3c4127d98 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java
@@ -1,24 +1,23 @@
-package com.ruoyi.common.enums;
-
-/**
- * 操作人类别
- *
- * @author ruoyi
- */
-public enum OperatorType
-{
- /**
- * 其它
- */
- OTHER,
-
- /**
- * 后台用户
- */
- MANAGE,
-
- /**
- * 手机端用户
- */
- MOBILE
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 操作人类别
+ *
+ * @author ruoyi
+ */
+public enum OperatorType {
+ /**
+ * 其它
+ */
+ OTHER,
+
+ /**
+ * 后台用户
+ */
+ MANAGE,
+
+ /**
+ * 手机端用户
+ */
+ MOBILE
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
index a4613ff9c..673ddebd2 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java
@@ -1,30 +1,26 @@
-package com.ruoyi.common.enums;
-
-/**
- * 用户状态
- *
- * @author ruoyi
- */
-public enum UserStatus
-{
- OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
-
- private final String code;
- private final String info;
-
- UserStatus(String code, String info)
- {
- this.code = code;
- this.info = info;
- }
-
- public String getCode()
- {
- return code;
- }
-
- public String getInfo()
- {
- return info;
- }
-}
+package com.ruoyi.common.enums;
+
+/**
+ * 用户状态
+ *
+ * @author ruoyi
+ */
+public enum UserStatus {
+ OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
+
+ private final String code;
+ private final String info;
+
+ UserStatus(String code, String info) {
+ this.code = code;
+ this.info = info;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public String getInfo() {
+ return info;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/BusinessException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/BusinessException.java
index d490675e7..8eecc0707 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/BusinessException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/BusinessException.java
@@ -2,29 +2,25 @@ package com.ruoyi.common.exception;
/**
* 业务异常
- *
+ *
* @author ruoyi
*/
-public class BusinessException extends RuntimeException
-{
+public class BusinessException extends RuntimeException {
private static final long serialVersionUID = 1L;
protected final String message;
- public BusinessException(String message)
- {
+ public BusinessException(String message) {
this.message = message;
}
- public BusinessException(String message, Throwable e)
- {
+ public BusinessException(String message, Throwable e) {
super(message, e);
this.message = message;
}
@Override
- public String getMessage()
- {
+ public String getMessage() {
return message;
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java
index 57bffc47b..9178131d7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java
@@ -1,15 +1,13 @@
-package com.ruoyi.common.exception;
-
-/**
- * 演示模式异常
- *
- * @author ruoyi
- */
-public class DemoModeException extends RuntimeException
-{
- private static final long serialVersionUID = 1L;
-
- public DemoModeException()
- {
- }
-}
+package com.ruoyi.common.exception;
+
+/**
+ * 演示模式异常
+ *
+ * @author ruoyi
+ */
+public class DemoModeException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ public DemoModeException() {
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java
index 3dd2c1ee7..c4ff125d0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java
@@ -1,97 +1,84 @@
-package com.ruoyi.common.exception.base;
-
-import com.ruoyi.common.utils.MessageUtils;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 基础异常
- *
- * @author ruoyi
- */
-public class BaseException extends RuntimeException
-{
- private static final long serialVersionUID = 1L;
-
- /**
- * 所属模块
- */
- private String module;
-
- /**
- * 错误码
- */
- private String code;
-
- /**
- * 错误码对应的参数
- */
- private Object[] args;
-
- /**
- * 错误消息
- */
- private String defaultMessage;
-
- public BaseException(String module, String code, Object[] args, String defaultMessage)
- {
- this.module = module;
- this.code = code;
- this.args = args;
- this.defaultMessage = defaultMessage;
- }
-
- public BaseException(String module, String code, Object[] args)
- {
- this(module, code, args, null);
- }
-
- public BaseException(String module, String defaultMessage)
- {
- this(module, null, null, defaultMessage);
- }
-
- public BaseException(String code, Object[] args)
- {
- this(null, code, args, null);
- }
-
- public BaseException(String defaultMessage)
- {
- this(null, null, null, defaultMessage);
- }
-
- @Override
- public String getMessage()
- {
- String message = null;
- if (!StringUtils.isEmpty(code))
- {
- message = MessageUtils.message(code, args);
- }
- if (message == null)
- {
- message = defaultMessage;
- }
- return message;
- }
-
- public String getModule()
- {
- return module;
- }
-
- public String getCode()
- {
- return code;
- }
-
- public Object[] getArgs()
- {
- return args;
- }
-
- public String getDefaultMessage()
- {
- return defaultMessage;
- }
-}
+package com.ruoyi.common.exception.base;
+
+import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * 基础异常
+ *
+ * @author ruoyi
+ */
+public class BaseException extends RuntimeException {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 所属模块
+ */
+ private String module;
+
+ /**
+ * 错误码
+ */
+ private String code;
+
+ /**
+ * 错误码对应的参数
+ */
+ private Object[] args;
+
+ /**
+ * 错误消息
+ */
+ private String defaultMessage;
+
+ public BaseException(String module, String code, Object[] args, String defaultMessage) {
+ this.module = module;
+ this.code = code;
+ this.args = args;
+ this.defaultMessage = defaultMessage;
+ }
+
+ public BaseException(String module, String code, Object[] args) {
+ this(module, code, args, null);
+ }
+
+ public BaseException(String module, String defaultMessage) {
+ this(module, null, null, defaultMessage);
+ }
+
+ public BaseException(String code, Object[] args) {
+ this(null, code, args, null);
+ }
+
+ public BaseException(String defaultMessage) {
+ this(null, null, null, defaultMessage);
+ }
+
+ @Override
+ public String getMessage() {
+ String message = null;
+ if (!StringUtils.isEmpty(code)) {
+ message = MessageUtils.message(code, args);
+ }
+ if (message == null) {
+ message = defaultMessage;
+ }
+ return message;
+ }
+
+ public String getModule() {
+ return module;
+ }
+
+ public String getCode() {
+ return code;
+ }
+
+ public Object[] getArgs() {
+ return args;
+ }
+
+ public String getDefaultMessage() {
+ return defaultMessage;
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java
index 871f09b52..794f4e1a7 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java
@@ -4,15 +4,13 @@ import com.ruoyi.common.exception.base.BaseException;
/**
* 文件信息异常类
- *
+ *
* @author ruoyi
*/
-public class FileException extends BaseException
-{
+public class FileException extends BaseException {
private static final long serialVersionUID = 1L;
- public FileException(String code, Object[] args)
- {
+ public FileException(String code, Object[] args) {
super("file", code, args, null);
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
index 44941b8bc..64a5020d0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.file;
-
-/**
- * 文件名称超长限制异常类
- *
- * @author ruoyi
- */
-public class FileNameLengthLimitExceededException extends FileException
-{
- private static final long serialVersionUID = 1L;
-
- public FileNameLengthLimitExceededException(int defaultFileNameLength)
- {
- super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
- }
-}
+package com.ruoyi.common.exception.file;
+
+/**
+ * 文件名称超长限制异常类
+ *
+ * @author ruoyi
+ */
+public class FileNameLengthLimitExceededException extends FileException {
+ private static final long serialVersionUID = 1L;
+
+ public FileNameLengthLimitExceededException(int defaultFileNameLength) {
+ super("upload.filename.exceed.length", new Object[]{defaultFileNameLength});
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java
index ec6ab054d..93e9e1c60 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java
@@ -2,15 +2,13 @@ package com.ruoyi.common.exception.file;
/**
* 文件名大小限制异常类
- *
+ *
* @author ruoyi
*/
-public class FileSizeLimitExceededException extends FileException
-{
+public class FileSizeLimitExceededException extends FileException {
private static final long serialVersionUID = 1L;
- public FileSizeLimitExceededException(long defaultMaxSize)
- {
- super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
+ public FileSizeLimitExceededException(long defaultMaxSize) {
+ super("upload.exceed.maxSize", new Object[]{defaultMaxSize});
}
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
index 81cd78b81..ce5c7fdaf 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java
@@ -1,71 +1,61 @@
-package com.ruoyi.common.exception.file;
-
-import java.util.Arrays;
-import org.apache.commons.fileupload.FileUploadException;
-
-/**
- * 文件上传 误异常类
- *
- * @author ruoyi
- */
-public class InvalidExtensionException extends FileUploadException
-{
- private static final long serialVersionUID = 1L;
-
- private String[] allowedExtension;
- private String extension;
- private String filename;
-
- public InvalidExtensionException(String[] allowedExtension, String extension, String filename)
- {
- super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]");
- this.allowedExtension = allowedExtension;
- this.extension = extension;
- this.filename = filename;
- }
-
- public String[] getAllowedExtension()
- {
- return allowedExtension;
- }
-
- public String getExtension()
- {
- return extension;
- }
-
- public String getFilename()
- {
- return filename;
- }
-
- public static class InvalidImageExtensionException extends InvalidExtensionException
- {
- private static final long serialVersionUID = 1L;
-
- public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename)
- {
- super(allowedExtension, extension, filename);
- }
- }
-
- public static class InvalidFlashExtensionException extends InvalidExtensionException
- {
- private static final long serialVersionUID = 1L;
-
- public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename)
- {
- super(allowedExtension, extension, filename);
- }
- }
-
- public static class InvalidMediaExtensionException extends InvalidExtensionException
- {
- private static final long serialVersionUID = 1L;
-
- public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename)
- {
- super(allowedExtension, extension, filename);
- }
- }
-}
+package com.ruoyi.common.exception.file;
+
+import java.util.Arrays;
+
+import org.apache.commons.fileupload.FileUploadException;
+
+/**
+ * 文件上传 误异常类
+ *
+ * @author ruoyi
+ */
+public class InvalidExtensionException extends FileUploadException {
+ private static final long serialVersionUID = 1L;
+
+ private String[] allowedExtension;
+ private String extension;
+ private String filename;
+
+ public InvalidExtensionException(String[] allowedExtension, String extension, String filename) {
+ super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]");
+ this.allowedExtension = allowedExtension;
+ this.extension = extension;
+ this.filename = filename;
+ }
+
+ public String[] getAllowedExtension() {
+ return allowedExtension;
+ }
+
+ public String getExtension() {
+ return extension;
+ }
+
+ public String getFilename() {
+ return filename;
+ }
+
+ public static class InvalidImageExtensionException extends InvalidExtensionException {
+ private static final long serialVersionUID = 1L;
+
+ public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) {
+ super(allowedExtension, extension, filename);
+ }
+ }
+
+ public static class InvalidFlashExtensionException extends InvalidExtensionException {
+ private static final long serialVersionUID = 1L;
+
+ public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) {
+ super(allowedExtension, extension, filename);
+ }
+ }
+
+ public static class InvalidMediaExtensionException extends InvalidExtensionException {
+ private static final long serialVersionUID = 1L;
+
+ public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) {
+ super(allowedExtension, extension, filename);
+ }
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
index 14b2361d0..c9ac31f19 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java
@@ -1,34 +1,29 @@
-package com.ruoyi.common.exception.job;
-
-/**
- * 计划策略异常
- *
- * @author ruoyi
- */
-public class TaskException extends Exception
-{
- private static final long serialVersionUID = 1L;
-
- private Code code;
-
- public TaskException(String msg, Code code)
- {
- this(msg, code, null);
- }
-
- public TaskException(String msg, Code code, Exception nestedEx)
- {
- super(msg, nestedEx);
- this.code = code;
- }
-
- public Code getCode()
- {
- return code;
- }
-
- public enum Code
- {
- TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
- }
+package com.ruoyi.common.exception.job;
+
+/**
+ * 计划策略异常
+ *
+ * @author ruoyi
+ */
+public class TaskException extends Exception {
+ private static final long serialVersionUID = 1L;
+
+ private Code code;
+
+ public TaskException(String msg, Code code) {
+ this(msg, code, null);
+ }
+
+ public TaskException(String msg, Code code, Exception nestedEx) {
+ super(msg, nestedEx);
+ this.code = code;
+ }
+
+ public Code getCode() {
+ return code;
+ }
+
+ public enum Code {
+ TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE
+ }
}
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java
index e3334ae37..90404854c 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 验证码错误异常类
- *
- * @author ruoyi
- */
-public class CaptchaException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public CaptchaException()
- {
- super("user.jcaptcha.error", null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 验证码错误异常类
+ *
+ * @author ruoyi
+ */
+public class CaptchaException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public CaptchaException() {
+ super("user.jcaptcha.error", null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java
index e11624426..e537912e0 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/RoleBlockedException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 角色锁定异常类
- *
- * @author ruoyi
- */
-public class RoleBlockedException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public RoleBlockedException()
- {
- super("role.blocked", null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 角色锁定异常类
+ *
+ * @author ruoyi
+ */
+public class RoleBlockedException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public RoleBlockedException() {
+ super("role.blocked", null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java
index 8feb8493e..edfaf2b65 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserBlockedException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 用户锁定异常类
- *
- * @author ruoyi
- */
-public class UserBlockedException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public UserBlockedException()
- {
- super("user.blocked", null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 用户锁定异常类
+ *
+ * @author ruoyi
+ */
+public class UserBlockedException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public UserBlockedException() {
+ super("user.blocked", null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java
index cf0724228..7758190e4 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserDeleteException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 用户账号已被删除
- *
- * @author ruoyi
- */
-public class UserDeleteException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public UserDeleteException()
- {
- super("user.password.delete", null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 用户账号已被删除
+ *
+ * @author ruoyi
+ */
+public class UserDeleteException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public UserDeleteException() {
+ super("user.password.delete", null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java
index 79160d861..94dbcdd52 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java
@@ -1,18 +1,16 @@
-package com.ruoyi.common.exception.user;
-
-import com.ruoyi.common.exception.base.BaseException;
-
-/**
- * 用户信息异常类
- *
- * @author ruoyi
- */
-public class UserException extends BaseException
-{
- private static final long serialVersionUID = 1L;
-
- public UserException(String code, Object[] args)
- {
- super("user", code, args, null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+import com.ruoyi.common.exception.base.BaseException;
+
+/**
+ * 用户信息异常类
+ *
+ * @author ruoyi
+ */
+public class UserException extends BaseException {
+ private static final long serialVersionUID = 1L;
+
+ public UserException(String code, Object[] args) {
+ super("user", code, args, null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java
index ed4bea3ac..9f19b9039 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 用户不存在异常类
- *
- * @author ruoyi
- */
-public class UserNotExistsException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public UserNotExistsException()
- {
- super("user.not.exists", null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 用户不存在异常类
+ *
+ * @author ruoyi
+ */
+public class UserNotExistsException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public UserNotExistsException() {
+ super("user.not.exists", null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java
index 71449e293..0fab11678 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 用户密码不正确或不符合规范异常类
- *
- * @author ruoyi
- */
-public class UserPasswordNotMatchException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public UserPasswordNotMatchException()
- {
- super("user.password.not.match", null);
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 用户密码不正确或不符合规范异常类
+ *
+ * @author ruoyi
+ */
+public class UserPasswordNotMatchException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public UserPasswordNotMatchException() {
+ super("user.password.not.match", null);
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java
index 4222135f5..be3243c79 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 用户错误记数异常类
- *
- * @author ruoyi
- */
-public class UserPasswordRetryLimitCountException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public UserPasswordRetryLimitCountException(int retryLimitCount)
- {
- super("user.password.retry.limit.count", new Object[] { retryLimitCount });
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 用户错误记数异常类
+ *
+ * @author ruoyi
+ */
+public class UserPasswordRetryLimitCountException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public UserPasswordRetryLimitCountException(int retryLimitCount) {
+ super("user.password.retry.limit.count", new Object[]{retryLimitCount});
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java
index b48c40657..d8412ec9f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java
@@ -1,16 +1,14 @@
-package com.ruoyi.common.exception.user;
-
-/**
- * 用户错误最大次数异常类
- *
- * @author ruoyi
- */
-public class UserPasswordRetryLimitExceedException extends UserException
-{
- private static final long serialVersionUID = 1L;
-
- public UserPasswordRetryLimitExceedException(int retryLimitCount)
- {
- super("user.password.retry.limit.exceed", new Object[] { retryLimitCount });
- }
-}
+package com.ruoyi.common.exception.user;
+
+/**
+ * 用户错误最大次数异常类
+ *
+ * @author ruoyi
+ */
+public class UserPasswordRetryLimitExceedException extends UserException {
+ private static final long serialVersionUID = 1L;
+
+ public UserPasswordRetryLimitExceedException(int retryLimitCount) {
+ super("user.password.retry.limit.exceed", new Object[]{retryLimitCount});
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
index 119147b6a..db4a73da9 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSON.java
@@ -1,187 +1,122 @@
-package com.ruoyi.common.json;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import com.fasterxml.jackson.core.JsonGenerationException;
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.ObjectWriter;
-
-/**
- * JSON解析处理
- *
- * @author ruoyi
- */
-public class JSON
-{
- public static final String DEFAULT_FAIL = "\"Parse failed\"";
- private static final ObjectMapper objectMapper = new ObjectMapper();
- private static final ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter();
-
- public static void marshal(File file, Object value) throws Exception
- {
- try
- {
- objectWriter.writeValue(file, value);
- }
- catch (JsonGenerationException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static void marshal(OutputStream os, Object value) throws Exception
- {
- try
- {
- objectWriter.writeValue(os, value);
- }
- catch (JsonGenerationException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static String marshal(Object value) throws Exception
- {
- try
- {
- return objectWriter.writeValueAsString(value);
- }
- catch (JsonGenerationException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static byte[] marshalBytes(Object value) throws Exception
- {
- try
- {
- return objectWriter.writeValueAsBytes(value);
- }
- catch (JsonGenerationException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static T unmarshal(File file, Class valueType) throws Exception
- {
- try
- {
- return objectMapper.readValue(file, valueType);
- }
- catch (JsonParseException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static T unmarshal(InputStream is, Class valueType) throws Exception
- {
- try
- {
- return objectMapper.readValue(is, valueType);
- }
- catch (JsonParseException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static T unmarshal(String str, Class valueType) throws Exception
- {
- try
- {
- return objectMapper.readValue(str, valueType);
- }
- catch (JsonParseException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-
- public static T unmarshal(byte[] bytes, Class valueType) throws Exception
- {
- try
- {
- if (bytes == null)
- {
- bytes = new byte[0];
- }
- return objectMapper.readValue(bytes, 0, bytes.length, valueType);
- }
- catch (JsonParseException e)
- {
- throw new Exception(e);
- }
- catch (JsonMappingException e)
- {
- throw new Exception(e);
- }
- catch (IOException e)
- {
- throw new Exception(e);
- }
- }
-}
+package com.ruoyi.common.json;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import com.fasterxml.jackson.core.JsonGenerationException;
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.ObjectWriter;
+
+/**
+ * JSON解析处理
+ *
+ * @author ruoyi
+ */
+public class JSON {
+ public static final String DEFAULT_FAIL = "\"Parse failed\"";
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+ private static final ObjectWriter objectWriter = objectMapper.writerWithDefaultPrettyPrinter();
+
+ public static void marshal(File file, Object value) throws Exception {
+ try {
+ objectWriter.writeValue(file, value);
+ } catch (JsonGenerationException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static void marshal(OutputStream os, Object value) throws Exception {
+ try {
+ objectWriter.writeValue(os, value);
+ } catch (JsonGenerationException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static String marshal(Object value) throws Exception {
+ try {
+ return objectWriter.writeValueAsString(value);
+ } catch (JsonGenerationException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static byte[] marshalBytes(Object value) throws Exception {
+ try {
+ return objectWriter.writeValueAsBytes(value);
+ } catch (JsonGenerationException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static T unmarshal(File file, Class valueType) throws Exception {
+ try {
+ return objectMapper.readValue(file, valueType);
+ } catch (JsonParseException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static T unmarshal(InputStream is, Class valueType) throws Exception {
+ try {
+ return objectMapper.readValue(is, valueType);
+ } catch (JsonParseException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static T unmarshal(String str, Class valueType) throws Exception {
+ try {
+ return objectMapper.readValue(str, valueType);
+ } catch (JsonParseException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+
+ public static T unmarshal(byte[] bytes, Class valueType) throws Exception {
+ try {
+ if (bytes == null) {
+ bytes = new byte[0];
+ }
+ return objectMapper.readValue(bytes, 0, bytes.length, valueType);
+ } catch (JsonParseException e) {
+ throw new Exception(e);
+ } catch (JsonMappingException e) {
+ throw new Exception(e);
+ } catch (IOException e) {
+ throw new Exception(e);
+ }
+ }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
index 24ef6ccb7..ba09102cf 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/json/JSONObject.java
@@ -1,749 +1,618 @@
-package com.ruoyi.common.json;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.StringTokenizer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ruoyi.common.utils.StringUtils;
-
-/**
- * 通用消息对象,基于Map实现的可嵌套数据结构。 支持JSON数据结构。
- *
- * @author ruoyi
- */
-public class JSONObject extends LinkedHashMap
-{
- private static final long serialVersionUID = 1L;
- private static final Pattern arrayNamePattern = Pattern.compile("(\\w+)((\\[\\d+\\])+)");
- private static final ObjectMapper objectMapper = new ObjectMapper();
-
- /**
- * 数组结构。
- */
- public static class JSONArray extends ArrayList