diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index a3765b639..58ee98df9 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 955d3cab2..363092a63 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 diff --git a/ruoyi-ui/src/store/modules/tagsView.js b/ruoyi-ui/src/store/modules/tagsView.js index a6cfdd933..68bb81d42 100644 --- a/ruoyi-ui/src/store/modules/tagsView.js +++ b/ruoyi-ui/src/store/modules/tagsView.js @@ -63,7 +63,7 @@ const mutations = { } } }, - + DEL_RIGHT_VIEWS: (state, view) => { const index = state.visitedViews.findIndex(v => v.path === view.path) if (index === -1) { diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index 11cd50262..5eb7edd71 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -34,7 +34,7 @@ module.exports = { proxy: { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { - target: `http://localhost:8081`, + target: `http://localhost:8080`, changeOrigin: true, pathRewrite: { ['^' + process.env.VUE_APP_BASE_API]: '' diff --git a/ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java index 6be5918ac..5b55927bf 100644 --- a/ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi/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/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 1460f0f6d..110c5480c 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -23,7 +23,7 @@ import java.util.Map; /** * 用户对象 sys_user - * + * * @author ruoyi */ diff --git a/ruoyi/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java b/ruoyi/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java index 8f63a799c..f1c8e8354 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java +++ b/ruoyi/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/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java index 672c023c0..cb4a225fb 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java +++ b/ruoyi/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/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java b/ruoyi/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java index 698464128..f968f1a12 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java +++ b/ruoyi/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/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 8fc46d0c2..e2f67bcd2 100644 --- a/ruoyi/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -32,7 +32,7 @@ import java.util.stream.Collectors; /** * Excel相关处理 - * + * * @author ruoyi */ public class ExcelUtil @@ -88,12 +88,12 @@ public class ExcelUtil * 统计列表 */ private Map statistics = new HashMap(); - + /** * 数字格式 */ private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); - + /** * 实体对象 */ @@ -119,7 +119,7 @@ public class ExcelUtil /** * 对excel表单默认第一个索引名转换成list - * + * * @param is 输入流 * @return 转换后集合 */ @@ -130,7 +130,7 @@ public class ExcelUtil /** * 对excel表单指定表格索引名转换成list - * + * * @param sheetName 表格索引名 * @param is 输入流 * @return 转换后集合 @@ -298,7 +298,7 @@ public class ExcelUtil /** * 对list数据源将其里面的数据导入到excel表单 - * + * * @param list 导出数据集合 * @param sheetName 工作表的名称 * @return 结果 @@ -311,7 +311,7 @@ public class ExcelUtil /** * 对list数据源将其里面的数据导入到excel表单 - * + * * @param sheetName 工作表的名称 * @return 结果 */ @@ -323,7 +323,7 @@ public class ExcelUtil /** * 对list数据源将其里面的数据导入到excel表单 - * + * * @return 结果 */ public AjaxResult exportExcel() @@ -391,7 +391,7 @@ public class ExcelUtil /** * 填充excel数据 - * + * * @param index 序号 * @param row 单元格行 */ @@ -418,7 +418,7 @@ public class ExcelUtil /** * 创建表格样式 - * + * * @param wb 工作薄对象 * @return 样式列表 */ @@ -456,7 +456,7 @@ public class ExcelUtil headerFont.setColor(IndexedColors.WHITE.getIndex()); style.setFont(headerFont); styles.put("header", style); - + style = wb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); @@ -500,7 +500,7 @@ public class ExcelUtil /** * 设置单元格信息 - * + * * @param value 单元格值 * @param attr 注解相关 * @param cell 单元格信息 @@ -531,7 +531,7 @@ public class ExcelUtil } } } - + /** * 获取画布 */ @@ -646,7 +646,7 @@ public class ExcelUtil /** * 设置 POI XSSFSheet 单元格提示 - * + * * @param sheet 表单 * @param promptTitle 提示标题 * @param promptContent 提示内容 @@ -656,7 +656,7 @@ public class ExcelUtil * @param endCol 结束列 */ public void setXSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, - int firstCol, int endCol) + int firstCol, int endCol) { DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); @@ -669,7 +669,7 @@ public class ExcelUtil /** * 设置某些列的值只能输入预制的数据,显示下拉框. - * + * * @param sheet 要设置的sheet. * @param textlist 下拉框显示的内容 * @param firstRow 开始行 @@ -703,7 +703,7 @@ public class ExcelUtil /** * 解析导出值 0=男,1=女,2=未知 - * + * * @param propertyValue 参数值 * @param converterExp 翻译注解 * @param separator 分隔符 @@ -740,7 +740,7 @@ public class ExcelUtil /** * 反向解析值 男=0,女=1,未知=2 - * + * * @param propertyValue 参数值 * @param converterExp 翻译注解 * @param separator 分隔符 @@ -774,10 +774,10 @@ public class ExcelUtil } return StrUtil.strip(propertyString.toString(), null,separator); } - + /** * 解析字典值 - * + * * @param dictValue 字典值 * @param dictType 字典类型 * @param separator 分隔符 @@ -790,7 +790,7 @@ public class ExcelUtil /** * 反向解析值字典值 - * + * * @param dictLabel 字典标签 * @param dictType 字典类型 * @param separator 分隔符 @@ -800,7 +800,7 @@ public class ExcelUtil { return DictUtils.getDictValue(dictType, dictLabel, separator); } - + /** * 合计统计信息 */ @@ -837,7 +837,7 @@ public class ExcelUtil cell = row.createCell(0); cell.setCellStyle(styles.get("total")); cell.setCellValue("合计"); - + for (Integer key : keys) { cell = row.createCell(key); @@ -859,7 +859,7 @@ public class ExcelUtil /** * 获取下载路径 - * + * * @param filename 文件名称 */ public String getAbsoluteFile(String filename) @@ -875,7 +875,7 @@ public class ExcelUtil /** * 获取bean中的属性值 - * + * * @param vo 实体对象 * @param field 字段 * @param excel 注解 @@ -906,7 +906,7 @@ public class ExcelUtil /** * 以类的属性的get方法方法形式获取值 - * + * * @param o * @param name * @return value @@ -955,7 +955,7 @@ public class ExcelUtil this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); this.maxHeight = getRowHeight(); } - + /** * 根据注解获取最大行高 */ @@ -991,7 +991,7 @@ public class ExcelUtil /** * 创建工作表 - * + * * @param sheetNo sheet数量 * @param index 序号 */ @@ -1012,7 +1012,7 @@ public class ExcelUtil /** * 获取单元格值 - * + * * @param row 获取的行 * @param column 获取单元格列号 * @return 单元格值 diff --git a/ruoyi/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java b/ruoyi/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java index 1d4dc1f72..183c36405 100644 --- a/ruoyi/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java +++ b/ruoyi/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/src/main/java/com/ruoyi/framework/config/FeignConfig.java b/ruoyi/src/main/java/com/ruoyi/framework/config/FeignConfig.java index df0951693..478a450fd 100644 --- a/ruoyi/src/main/java/com/ruoyi/framework/config/FeignConfig.java +++ b/ruoyi/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/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java b/ruoyi/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java index 93a202caf..bce2150b7 100644 --- a/ruoyi/src/main/java/com/ruoyi/framework/config/MybatisPlusConfig.java +++ b/ruoyi/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/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java b/ruoyi/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java index 0d67c2241..30d5ef91f 100644 --- a/ruoyi/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java +++ b/ruoyi/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/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi/src/main/java/com/ruoyi/generator/controller/GenController.java index d6f2a4372..72fea3be0 100644 --- a/ruoyi/src/main/java/com/ruoyi/generator/controller/GenController.java +++ b/ruoyi/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/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi/src/main/java/com/ruoyi/system/domain/SysConfig.java index 547e89611..66569b707 100644 --- a/ruoyi/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -68,6 +68,7 @@ public class SysConfig implements Serializable { /** * 创建者 */ + @TableField(fill = FieldFill.INSERT) private String createBy; /** @@ -80,6 +81,7 @@ public class SysConfig implements Serializable { /** * 更新者 */ + @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; /** diff --git a/ruoyi/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi/src/main/java/com/ruoyi/system/domain/SysNotice.java index 1efabf56b..e50ecd12c 100644 --- a/ruoyi/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -56,6 +56,7 @@ public class SysNotice implements Serializable { /** * 创建者 */ + @TableField(fill = FieldFill.INSERT) private String createBy; /** @@ -68,6 +69,7 @@ public class SysNotice implements Serializable { /** * 更新者 */ + @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; /** diff --git a/ruoyi/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi/src/main/java/com/ruoyi/system/domain/SysPost.java index 5957ed9c7..5bde68450 100644 --- a/ruoyi/src/main/java/com/ruoyi/system/domain/SysPost.java +++ b/ruoyi/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -67,6 +67,7 @@ public class SysPost implements Serializable { /** * 创建者 */ + @TableField(fill = FieldFill.INSERT) private String createBy; /** @@ -79,6 +80,7 @@ public class SysPost implements Serializable { /** * 更新者 */ + @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; /** diff --git a/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java index f25a90dd2..65f860134 100644 --- a/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi/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/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index b04d3b267..6f7cc414e 100644 --- a/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -25,7 +25,7 @@ import java.util.stream.Collectors; /** * 菜单 业务层处理 - * + * * @author ruoyi */ @Service diff --git a/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index a12432e07..814d96ffc 100644 --- a/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -1,6 +1,7 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.annotation.DataScope; diff --git a/ruoyi/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/ruoyi/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java index 0332a14a9..1d7eb020c 100644 --- a/ruoyi/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java +++ b/ruoyi/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/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java b/ruoyi/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java index 965708157..8a1b74be3 100644 --- a/ruoyi/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java +++ b/ruoyi/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/src/main/resources/application.yml b/ruoyi/src/main/resources/application.yml index 250e48566..85007285c 100644 --- a/ruoyi/src/main/resources/application.yml +++ b/ruoyi/src/main/resources/application.yml @@ -65,15 +65,15 @@ spring: messages: # 国际化资源文件路径 basename: i18n/messages - profiles: + profiles: active: @profiles.active@ # 文件上传 servlet: - multipart: - # 单个文件大小 - max-file-size: 10MB - # 设置总上传的文件大小 - max-request-size: 20MB + multipart: + # 单个文件大小 + max-file-size: 10MB + # 设置总上传的文件大小 + max-request-size: 20MB # 服务模块 devtools: restart: @@ -109,16 +109,17 @@ management: # token配置 token: - # 令牌自定义标识 - header: Authorization - # 令牌密钥 - secret: abcdefghijklmnopqrstuvwxyz - # 令牌有效期(默认30分钟) - expireTime: 30 - + # 令牌自定义标识 + header: Authorization + # 令牌密钥 + secret: abcdefghijklmnopqrstuvwxyz + # 令牌有效期(默认30分钟) + expireTime: 30 + # MyBatis配置 # https://baomidou.com/config/ mybatis-plus: + mapperPackage: com.ruoyi.**.mapper # 对应的 XML 文件位置 mapperLocations: classpath*:mapper/**/*Mapper.xml # 实体扫描,多个package用逗号或者分号分隔 @@ -205,11 +206,11 @@ mybatis-plus: selectStrategy: NOT_EMPTY # PageHelper分页插件 -pagehelper: +pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true - params: count=countSql + params: count=countSql # Swagger配置 swagger: @@ -217,9 +218,15 @@ swagger: enabled: true # 请求前缀 pathMapping: /dev-api + # 标题 + title: '标题:RuoYi-Vue-Plus后台管理系统_接口文档' + # 描述 + description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' + # 版本 + version: '版本号: ${ruoyi-vue-plus.version}' # 防止XSS攻击 -xss: +xss: # 过滤开关 enabled: true # 排除链接(多个用逗号分隔) @@ -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/src/main/resources/banner.txt b/ruoyi/src/main/resources/banner.txt index fee1ce3b5..f592dbe14 100644 --- a/ruoyi/src/main/resources/banner.txt +++ b/ruoyi/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/src/main/resources/logback.xml b/ruoyi/src/main/resources/logback.xml index a759788c4..d407df43e 100644 --- a/ruoyi/src/main/resources/logback.xml +++ b/ruoyi/src/main/resources/logback.xml @@ -5,13 +5,13 @@ value="%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger{36}%n) - %msg%n"/> - - - - ${console.log.pattern} + + + + ${console.log.pattern} utf-8 - - + + @@ -25,21 +25,21 @@ INFO - - - - ${log.path}/sys-info.log + + + + ${log.path}/sys-info.log - + - ${log.path}/sys-info.%d{yyyy-MM-dd}.log - - 60 - - - ${log.pattern} - - + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + INFO @@ -47,16 +47,16 @@ DENY - - - - ${log.path}/sys-error.log + + + + ${log.path}/sys-error.log ${log.path}/sys-error.%d{yyyy-MM-dd}.log - - 60 + + 60 ${log.pattern} @@ -64,16 +64,16 @@ ERROR - + ACCEPT - + DENY - - + + - ${log.path}/sys-user.log + ${log.path}/sys-user.log ${log.path}/sys-user.%d{yyyy-MM-dd}.log @@ -84,24 +84,24 @@ ${log.pattern} + + + + + - - - - - - - - - - + + + + + - - + +