diff --git a/pom.xml b/pom.xml
index 43443e10..74ccf9d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
RuoYi-Vue-Plus后台管理系统
- 1.0.0
+ 1.0.1
UTF-8
UTF-8
1.8
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 6be5918a..5b55927b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -17,6 +17,6 @@ public class RuoYiApplication
{
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
- System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙");
+ System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙");
}
}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
index 0332a14a..1d7eb020 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
@@ -48,6 +48,7 @@ public class SysOperlogController extends BaseController
return util.exportExcel(list, "操作日志");
}
+ @Log(title = "操作日志", businessType = BusinessType.DELETE)
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@DeleteMapping("/{operIds}")
public AjaxResult remove(@PathVariable Long[] operIds)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
index 96570815..8a1b74be 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
@@ -21,32 +21,54 @@ import java.util.List;
/**
* Swagger2的接口配置
- *
- * @author ruoyi
+ *
+ * @author Lion Li
*/
@Configuration
@EnableSwagger2WebMvc
@EnableKnife4j
-public class SwaggerConfig
-{
- /** 系统基础配置 */
+public class SwaggerConfig {
+ /**
+ * 系统基础配置
+ */
@Autowired
private RuoYiConfig ruoyiConfig;
- /** 是否开启swagger */
+ /**
+ * 是否开启swagger
+ */
@Value("${swagger.enabled}")
private boolean enabled;
- /** 设置请求的统一前缀 */
+ /**
+ * 设置请求的统一前缀
+ */
@Value("${swagger.pathMapping}")
private String pathMapping;
+ /**
+ * 标题
+ */
+ @Value("${swagger.title}")
+ private String title;
+
+ /**
+ * 描述
+ */
+ @Value("${swagger.description}")
+ private String description;
+
+ /**
+ * 版本
+ */
+ @Value("${swagger.version}")
+ private String version;
+
/**
* 创建API
*/
@Bean
- public Docket createRestApi()
- {
+ public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
// 是否启用Swagger
.enable(enabled)
@@ -70,8 +92,7 @@ public class SwaggerConfig
/**
* 安全模式,这里指定token通过Authorization头请求头传递
*/
- private List securitySchemes()
- {
+ private List securitySchemes() {
List apiKeyList = new ArrayList();
apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
return apiKeyList;
@@ -80,8 +101,7 @@ public class SwaggerConfig
/**
* 安全上下文
*/
- private List securityContexts()
- {
+ private List securityContexts() {
List securityContexts = new ArrayList<>();
securityContexts.add(
SecurityContext.builder()
@@ -94,8 +114,7 @@ public class SwaggerConfig
/**
* 默认的安全上引用
*/
- private List defaultAuth()
- {
+ private List defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
@@ -107,18 +126,17 @@ public class SwaggerConfig
/**
* 添加摘要信息
*/
- private ApiInfo apiInfo()
- {
+ private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
- .title("标题:若依管理系统_接口文档")
+ .title(title)
// 描述
- .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
+ .description(description)
// 作者信息
.contact(new Contact(ruoyiConfig.getName(), null, null))
// 版本
- .version("版本号:" + ruoyiConfig.getVersion())
+ .version(version)
.build();
}
}
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 44bc4377..85007285 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -119,6 +119,7 @@ token:
# MyBatis配置
# https://baomidou.com/config/
mybatis-plus:
+ mapperPackage: com.ruoyi.**.mapper
# 对应的 XML 文件位置
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 实体扫描,多个package用逗号或者分号分隔
@@ -217,6 +218,12 @@ swagger:
enabled: true
# 请求前缀
pathMapping: /dev-api
+ # 标题
+ title: '标题:RuoYi-Vue-Plus后台管理系统_接口文档'
+ # 描述
+ description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...'
+ # 版本
+ version: '版本号: ${ruoyi-vue-plus.version}'
# 防止XSS攻击
xss:
@@ -227,7 +234,26 @@ xss:
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
+threadPoolConfig:
+ # 是否开启线程池
+ enabled: false
+ # 核心线程池大小
+ corePoolSize: 8
+ # 最大可创建的线程数
+ maxPoolSize: 16
+ # 队列最大长度
+ queueCapacity: 128
+ # 线程池维护线程所允许的空闲时间
+ keepAliveSeconds: 300
+ # 线程池对拒绝任务(无线程可用)的处理策略
+ # CallerRunsPolicy 等待
+ # DiscardOldestPolicy 放弃最旧的
+ # DiscardPolicy 丢弃
+ # AbortPolicy 中止
+ rejectedExecutionHandler: CallerRunsPolicy
+
feign:
+ package: com.ruoyi.**.feign
# 开启压缩
compression:
request:
diff --git a/ruoyi-admin/src/main/resources/banner.txt b/ruoyi-admin/src/main/resources/banner.txt
index fee1ce3b..f592dbe1 100644
--- a/ruoyi-admin/src/main/resources/banner.txt
+++ b/ruoyi-admin/src/main/resources/banner.txt
@@ -1,2 +1,8 @@
-Application Version: ${ruoyi.version}
-Spring Boot Version: ${spring-boot.version}
\ No newline at end of file
+Application Version: ${ruoyi-vue-plus.version}
+Spring Boot Version: ${spring-boot.version}
+__________ _____.___.__ ____ ____ __________.__
+\______ \__ __ ____\__ | |__| \ \ / /_ __ ____ \______ \ | __ __ ______
+ | _/ | \/ _ \/ | | | ______ \ Y / | \_/ __ \ ______ | ___/ | | | \/ ___/
+ | | \ | ( <_> )____ | | /_____/ \ /| | /\ ___/ /_____/ | | | |_| | /\___ \
+ |____|_ /____/ \____// ______|__| \___/ |____/ \___ > |____| |____/____//____ >
+ \/ \/ \/ \/
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 8f63a799..f1c8e835 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
@@ -68,4 +68,14 @@ public class InvalidExtensionException extends FileUploadException
super(allowedExtension, extension, filename);
}
}
+
+ public static class InvalidVideoExtensionException extends InvalidExtensionException
+ {
+ private static final long serialVersionUID = 1L;
+
+ public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename)
+ {
+ super(allowedExtension, extension, filename);
+ }
+ }
}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
index 672c023c..cb4a225f 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java
@@ -133,15 +133,13 @@ public class FileUploadUtils
{
File desc = new File(uploadDir + File.separator + fileName);
- if (!desc.getParentFile().exists())
+ if (!desc.exists())
{
- desc.getParentFile().mkdirs();
+ if (!desc.getParentFile().exists())
+ {
+ desc.getParentFile().mkdirs();
+ }
}
- // 解决undertow文件上传bug,因底层实现不同,无需创建新文件
-// if (!desc.exists())
-// {
-// desc.createNewFile();
-// }
return desc;
}
@@ -189,6 +187,11 @@ public class FileUploadUtils
throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
fileName);
}
+ else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
+ {
+ throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
+ fileName);
+ }
else
{
throw new InvalidExtensionException(allowedExtension, extension, fileName);
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
index 69846412..f968f1a1 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java
@@ -24,6 +24,8 @@ public class MimeTypeUtils
public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg",
"asf", "rm", "rmvb" };
+ public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" };
+
public static final String[] DEFAULT_ALLOWED_EXTENSION = {
// 图片
"bmp", "gif", "jpg", "jpeg", "png",
@@ -31,6 +33,8 @@ public class MimeTypeUtils
"doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
// 压缩文件
"rar", "zip", "gz", "bz2",
+ // 视频格式
+ "mp4", "avi", "rmvb",
// pdf
"pdf" };
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
index 1d4dc1f7..183c3640 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java
@@ -1,30 +1,26 @@
package com.ruoyi.framework.config;
-import java.util.TimeZone;
-import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import java.util.TimeZone;
+
/**
* 程序注解配置
*
- * @author ruoyi
+ * @author Lion Li
*/
@Configuration
// 表示通过aop框架暴露该代理对象,AopContext能够访问
@EnableAspectJAutoProxy(exposeProxy = true)
-// 指定要扫描的Mapper类的包的路径
-@MapperScan("com.ruoyi.**.mapper")
-public class ApplicationConfig
-{
+public class ApplicationConfig {
/**
* 时区配置
*/
@Bean
- public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization()
- {
+ public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}
}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
index df095169..478a450f 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeUnit;
*
* @author Lion Li
*/
-@EnableFeignClients("com.ruoyi.**.feign")
+@EnableFeignClients("${feign.package}")
@Configuration
@ConditionalOnClass(Feign.class)
@AutoConfigureBefore(FeignAutoConfiguration.class)
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
index 93a202ca..bce2150b 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.ruoyi.framework.mybatisplus.CreateAndUpdateMetaObjectHandler;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -17,6 +18,8 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
*/
@EnableTransactionManagement(proxyTargetClass = true)
@Configuration
+// 指定要扫描的Mapper类的包的路径
+@MapperScan("${mybatis-plus.mapperPackage}")
public class MybatisPlusConfig {
@Bean
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java
index 0d67c224..30d5ef91 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java
@@ -1,44 +1,65 @@
package com.ruoyi.framework.config;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadPoolExecutor;
+import com.ruoyi.common.utils.Threads;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import com.ruoyi.common.utils.Threads;
+
+import java.util.concurrent.RejectedExecutionHandler;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.ThreadPoolExecutor;
/**
* 线程池配置
*
- * @author ruoyi
+ * @author Lion Li
**/
@Configuration
-public class ThreadPoolConfig
-{
+public class ThreadPoolConfig {
+
// 核心线程池大小
- private int corePoolSize = 50;
+ @Value("${threadPoolConfig.corePoolSize}")
+ private int corePoolSize;
// 最大可创建的线程数
- private int maxPoolSize = 200;
+ @Value("${threadPoolConfig.maxPoolSize}")
+ private int maxPoolSize;
// 队列最大长度
- private int queueCapacity = 1000;
+ @Value("${threadPoolConfig.queueCapacity}")
+ private int queueCapacity;
// 线程池维护线程所允许的空闲时间
- private int keepAliveSeconds = 300;
+ @Value("${threadPoolConfig.keepAliveSeconds}")
+ private int keepAliveSeconds;
+
+ // 线程池对拒绝任务(无线程可用)的处理策略
+ @Value("${threadPoolConfig.rejectedExecutionHandler}")
+ private String rejectedExecutionHandler;
@Bean(name = "threadPoolTaskExecutor")
- public ThreadPoolTaskExecutor threadPoolTaskExecutor()
- {
+ @ConditionalOnProperty(prefix = "threadPoolTaskExecutor", name = "enabled", havingValue = "true")
+ public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(maxPoolSize);
executor.setCorePoolSize(corePoolSize);
executor.setQueueCapacity(queueCapacity);
executor.setKeepAliveSeconds(keepAliveSeconds);
- // 线程池对拒绝任务(无线程可用)的处理策略
- executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+ RejectedExecutionHandler handler;
+ if (rejectedExecutionHandler.equals("CallerRunsPolicy")) {
+ handler = new ThreadPoolExecutor.CallerRunsPolicy();
+ } else if (rejectedExecutionHandler.equals("DiscardOldestPolicy")) {
+ handler = new ThreadPoolExecutor.DiscardOldestPolicy();
+ } else if (rejectedExecutionHandler.equals("DiscardPolicy")) {
+ handler = new ThreadPoolExecutor.DiscardPolicy();
+ } else {
+ handler = new ThreadPoolExecutor.AbortPolicy();
+ }
+ executor.setRejectedExecutionHandler(handler);
return executor;
}
@@ -46,14 +67,11 @@ public class ThreadPoolConfig
* 执行周期性或定时任务
*/
@Bean(name = "scheduledExecutorService")
- protected ScheduledExecutorService scheduledExecutorService()
- {
+ protected ScheduledExecutorService scheduledExecutorService() {
return new ScheduledThreadPoolExecutor(corePoolSize,
- new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
- {
+ new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build()) {
@Override
- protected void afterExecute(Runnable r, Throwable t)
- {
+ protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
Threads.printException(r, t);
}
diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
index d6f2a437..72fea3be 100644
--- a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
+++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java
@@ -101,7 +101,7 @@ public class GenController extends BaseController
/**
* 导入表结构(保存)
*/
- @PreAuthorize("@ss.hasPermi('tool:gen:list')")
+ @PreAuthorize("@ss.hasPermi('tool:gen:import')")
@Log(title = "代码生成", businessType = BusinessType.IMPORT)
@PostMapping("/importTable")
public AjaxResult importTableSave(String tables)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
index f25a90dd..65f86013 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
@@ -241,7 +241,7 @@ public class SysDeptServiceImpl extends ServiceImpl impl
List children = list(new LambdaQueryWrapper()
.apply("find_in_set({0},ancestors)",deptId));
for (SysDept child : children) {
- child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors));
+ child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
}
if (children.size() > 0) {
updateBatchById(children);
diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json
index a3765b63..58ee98df 100644
--- a/ruoyi-ui/package.json
+++ b/ruoyi-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "ruoyi-vue-plus",
- "version": "1.0.0",
+ "version": "1.0.1",
"description": "RuoYi-Vue-Plus后台管理系统",
"author": "LionLi",
"license": "MIT",
diff --git a/ruoyi-ui/src/assets/styles/element-ui.scss b/ruoyi-ui/src/assets/styles/element-ui.scss
index 955d3cab..363092a6 100644
--- a/ruoyi-ui/src/assets/styles/element-ui.scss
+++ b/ruoyi-ui/src/assets/styles/element-ui.scss
@@ -82,3 +82,11 @@
.el-range-separator {
box-sizing: content-box;
}
+
+.el-menu--collapse
+ > div
+ > .el-submenu
+ > .el-submenu__title
+ .el-submenu__icon-arrow {
+ display: none;
+}
\ No newline at end of file