From 3401f38edc3a394406b9a0f64ddb84ae0a009187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 28 Sep 2021 14:37:03 +0800 Subject: [PATCH 01/82] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=A4=9A?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90aop=E8=AF=AD=E6=B3=95=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TestTreeServiceImpl.java | 3 +- .../framework/aspectj/DataSourceAspect.java | 29 +++++++++++++++++-- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java index 349e96857..e793a86fe 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/service/impl/TestTreeServiceImpl.java @@ -1,11 +1,11 @@ package com.ruoyi.demo.service.impl; import cn.hutool.core.bean.BeanUtil; -import com.ruoyi.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.demo.domain.TestTree; import com.ruoyi.demo.domain.bo.TestTreeBo; import com.ruoyi.demo.domain.vo.TestTreeVo; @@ -23,6 +23,7 @@ import java.util.Map; * @author Lion Li * @date 2021-07-26 */ +//@DataSource(DataSourceType.SLAVE) // 切换从库查询 @Service public class TestTreeServiceImpl extends ServicePlusImpl implements ITestTreeService { diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java index 55ec84595..45ffe3bca 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java @@ -6,9 +6,14 @@ import com.ruoyi.common.utils.StringUtils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; +import java.util.Objects; + /** * 多数据源处理 * @@ -19,8 +24,15 @@ import org.springframework.stereotype.Component; @Component public class DataSourceAspect { - @Around("@annotation(dataSource) || @within(dataSource)") - public Object around(ProceedingJoinPoint point, DataSource dataSource) throws Throwable { + @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)" + + "|| @within(com.ruoyi.common.annotation.DataSource)") + public void dsPointCut() { + } + + @Around("dsPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable { + DataSource dataSource = getDataSource(point); + if (StringUtils.isNotNull(dataSource)) { DynamicDataSourceContextHolder.poll(); String source = dataSource.value().getSource(); @@ -35,4 +47,17 @@ public class DataSourceAspect { } } + /** + * 获取需要切换的数据源 + */ + public DataSource getDataSource(ProceedingJoinPoint point) { + MethodSignature signature = (MethodSignature) point.getSignature(); + DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class); + if (Objects.nonNull(dataSource)) { + return dataSource; + } + + return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class); + } + } From 29163a41c2e49c3387e31be12c2dbe65bf7ada27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 28 Sep 2021 18:04:09 +0800 Subject: [PATCH 02/82] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=20Admin=20?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=20=E6=B3=A8=E9=87=8A=20=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/monitor/admin/config/SecurityConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java b/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java index 98834a9bc..ca9072c78 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java +++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/java/com/ruoyi/monitor/admin/config/SecurityConfig.java @@ -9,9 +9,9 @@ import org.springframework.security.config.annotation.web.configuration.WebSecur import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler; /** - * spring security配置 + * admin 监控 安全配置 * - * @author ruoyi + * @author Lion Li */ @Configuration @EnableWebSecurity @@ -29,7 +29,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler(); successHandler.setTargetUrlParameter("redirectTo"); successHandler.setDefaultTargetUrl(adminContextPath + "/"); - + // admin监控 用户鉴权 httpSecurity.authorizeRequests() //授予对所有静态资产和登录页面的公共访问权限。 .antMatchers(adminContextPath + "/assets/**").permitAll() From c7071752a793f8fa49d71edb4ef06c21ab28f5ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 28 Sep 2021 18:23:43 +0800 Subject: [PATCH 03/82] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=20=E5=AF=BC=E5=85=A5=E8=A1=A8=20?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E8=BF=94=E5=9B=9E=20=E4=B8=BB=E9=94=AE?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E9=80=89=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/generator/util/GenUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java index bfa7598d9..0a3eacb7f 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -86,7 +86,7 @@ public class GenUtils column.setIsRequired(GenConstants.REQUIRE); } // 列表字段 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName)) { column.setIsList(GenConstants.REQUIRE); } From a09f1b8666c0ab5c28f630a3bd26e1676e7b9d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 28 Sep 2021 18:24:11 +0800 Subject: [PATCH 04/82] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E5=B8=B8=E9=87=8F=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8E=20BO=20VO=20=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/constant/GenConstants.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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 072fb403c..1d3c8a585 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 @@ -44,19 +44,19 @@ public class GenConstants public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", "bit", "bigint", "float", "double", "decimal" }; - /** 页面不需要添加字段 */ + /** BO对象 不需要添加字段 */ public static final String[] COLUMNNAME_NOT_ADD = { "create_by", "create_time", "del_flag", "update_by", "update_time", "version" }; - /** 页面不需要编辑字段 */ + /** BO对象 不需要编辑字段 */ public static final String[] COLUMNNAME_NOT_EDIT = { "create_by", "create_time", "del_flag", "update_by", "update_time", "version" }; - /** 页面不需要显示的列表字段 */ - public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", + /** VO对象 不需要返回字段 */ + public static final String[] COLUMNNAME_NOT_LIST = { "create_by", "create_time", "del_flag", "update_by", "update_time", "version" }; - /** 页面不需要查询字段 */ + /** BO对象 不需要查询字段 */ public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", "update_time", "remark", "version" }; From f38d7811e31a12e30c89d2efb78994f9c9bec377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 28 Sep 2021 18:26:08 +0800 Subject: [PATCH 05/82] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=E5=B8=B8=E9=87=8F=20=E5=85=B3?= =?UTF-8?q?=E4=BA=8E=20BO=20VO=20=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/generator/util/GenUtils.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java index 0a3eacb7f..44f54397c 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -69,28 +69,26 @@ public class GenUtils } } - // 插入字段(默认所有字段都需要插入) - // 主键不需要添加 + // BO对象 默认插入勾选 if (!arraysContains(GenConstants.COLUMNNAME_NOT_ADD, columnName) && !column.isPk()) { column.setIsInsert(GenConstants.REQUIRE); } - // 编辑字段 - // 编辑需要主键 + // BO对象 默认编辑勾选 if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) { column.setIsEdit(GenConstants.REQUIRE); } - // 编辑需要的设置必选 + // BO对象 默认是否必填勾选 if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) { column.setIsRequired(GenConstants.REQUIRE); } - // 列表字段 + // VO对象 默认返回勾选 if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName)) { column.setIsList(GenConstants.REQUIRE); } - // 查询字段 + // BO对象 默认查询勾选 if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) { column.setIsQuery(GenConstants.REQUIRE); From 5477ce3c39191daf99f17a37304b2c795238dacc Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 29 Sep 2021 19:51:48 +0800 Subject: [PATCH 06/82] =?UTF-8?q?=E4=BF=AE=E6=AD=A3swagger=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E6=8C=87=E5=AE=9AdataTypeClass=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E5=87=BA=E7=8E=B0warn=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/web/controller/tool/TestController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java index 4588a7a53..f1afe51cf 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java @@ -47,7 +47,7 @@ public class TestController extends BaseController } @ApiOperation("获取用户详细") - @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path") + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) @GetMapping("/{userId}") public AjaxResult getUser(@PathVariable Integer userId) { @@ -63,10 +63,10 @@ public class TestController extends BaseController @ApiOperation("新增用户") @ApiImplicitParams({ - @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer"), - @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String"), - @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String"), - @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String") + @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class), + @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class), + @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class) }) @PostMapping("/save") public AjaxResult save(UserEntity user) @@ -95,7 +95,7 @@ public class TestController extends BaseController } @ApiOperation("删除用户信息") - @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path") + @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) @DeleteMapping("/{userId}") public AjaxResult delete(@PathVariable Integer userId) { From a006904724a07f0b10e967376c77a7a8c9d88364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Thu, 30 Sep 2021 03:18:41 +0000 Subject: [PATCH 07/82] fix --- .../java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index f450caa42..af97f1492 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -169,6 +169,7 @@ public class SysMenuServiceImpl implements ISysMenuService children.setComponent(menu.getComponent()); children.setName(StringUtils.capitalize(menu.getPath())); children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); childrenList.add(children); router.setChildren(childrenList); } From 48813161f68949786b1a1ab470ec99678802619c Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 4 Oct 2021 10:27:38 +0800 Subject: [PATCH 08/82] =?UTF-8?q?=E8=AE=BE=E7=BD=AEmybatis=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E7=9A=84=E6=89=A7=E8=A1=8C=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/mybatis/mybatis-config.xml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml index c7c36e375..4b8c49628 100644 --- a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml +++ b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml @@ -3,13 +3,18 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> - - - - - - - + + + + + + + + + + + + From f1fed76273361a6d6ed7ed276a9cafd32677be79 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 4 Oct 2021 10:28:13 +0800 Subject: [PATCH 09/82] =?UTF-8?q?=E5=8D=87=E7=BA=A7element-ui=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC2.15.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- ruoyi-ui/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 2e1d5e075..c1d9a291c 100644 --- a/pom.xml +++ b/pom.xml @@ -21,8 +21,8 @@ 1.2.6 1.21 3.0.0 - 2.3.2 - 2.1.4 + 2.3.2 + 2.1.4 1.3.1 1.2.78 5.8.0 diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index c7db2d8ed..034e0642d 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -41,7 +41,7 @@ "clipboard": "2.0.6", "core-js": "3.8.1", "echarts": "4.9.0", - "element-ui": "2.15.5", + "element-ui": "2.15.6", "file-saver": "2.0.5", "fuse.js": "6.4.3", "highlight.js": "9.18.5", From 0b14155a75f955e553f8730447f2cf17a584fe81 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 9 Oct 2021 11:42:29 +0800 Subject: [PATCH 10/82] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20sendGet=20=E6=97=A0?= =?UTF-8?q?=E5=8F=82=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/http/HttpUtils.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java index 200374328..c920f5b12 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -19,6 +19,7 @@ import javax.net.ssl.X509TrustManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.StringUtils; /** * 通用http发送方法 @@ -55,7 +56,7 @@ public class HttpUtils BufferedReader in = null; try { - String urlNameString = url + "?" + param; + String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url; log.info("sendGet - {}", urlNameString); URL realUrl = new URL(urlNameString); URLConnection connection = realUrl.openConnection(); From 7ae47b50b850d6fd2eac4b76cfcd9c63100f5e92 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 9 Oct 2021 11:43:26 +0800 Subject: [PATCH 11/82] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index b9f9ac289..fa9529119 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -493,7 +493,7 @@ public class ExcelUtil */ public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException { - importTemplateExcel(response, sheetName); + importTemplateExcel(response, sheetName, StringUtils.EMPTY); } /** From f6e477b4f539715bbbc08bf7c0c9bbb8d4208fe7 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 9 Oct 2021 11:43:34 +0800 Subject: [PATCH 12/82] =?UTF-8?q?=E5=8D=87=E7=BA=A7druid=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=881.2.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c1d9a291c..69cd0efab 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ UTF-8 1.8 3.1.1 - 1.2.6 + 1.2.8 1.21 3.0.0 2.3.2 From c4207f640b798009d81fa0d9270e88341a4d5d24 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 10 Oct 2021 11:21:46 +0800 Subject: [PATCH 13/82] =?UTF-8?q?=E4=BD=BF=E7=94=A8JSONField=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/domain/model/LoginUser.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java index 7b1d8966a..993ca2268 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java @@ -4,7 +4,7 @@ import java.util.Collection; import java.util.Set; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import com.fasterxml.jackson.annotation.JsonIgnore; +import com.alibaba.fastjson.annotation.JSONField; import com.ruoyi.common.core.domain.entity.SysUser; /** @@ -119,7 +119,7 @@ public class LoginUser implements UserDetails this.permissions = permissions; } - @JsonIgnore + @JSONField(serialize = false) @Override public String getPassword() { @@ -135,7 +135,7 @@ public class LoginUser implements UserDetails /** * 账户是否未过期,过期无法验证 */ - @JsonIgnore + @JSONField(serialize = false) @Override public boolean isAccountNonExpired() { @@ -147,7 +147,7 @@ public class LoginUser implements UserDetails * * @return */ - @JsonIgnore + @JSONField(serialize = false) @Override public boolean isAccountNonLocked() { @@ -159,7 +159,7 @@ public class LoginUser implements UserDetails * * @return */ - @JsonIgnore + @JSONField(serialize = false) @Override public boolean isCredentialsNonExpired() { @@ -171,7 +171,7 @@ public class LoginUser implements UserDetails * * @return */ - @JsonIgnore + @JSONField(serialize = false) @Override public boolean isEnabled() { From 4fdb0f48ec1f7833d37db1b995ff1b05d0310e6e Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 10 Oct 2021 11:23:04 +0800 Subject: [PATCH 14/82] =?UTF-8?q?=E5=90=8C=E6=AD=A5element2.15.6=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/views/monitor/cache/index.vue | 48 ++++---- ruoyi-ui/src/views/monitor/server/index.vue | 118 ++++++++++---------- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/ruoyi-ui/src/views/monitor/cache/index.vue b/ruoyi-ui/src/views/monitor/cache/index.vue index 36957edd2..22501dc34 100644 --- a/ruoyi-ui/src/views/monitor/cache/index.vue +++ b/ruoyi-ui/src/views/monitor/cache/index.vue @@ -8,34 +8,34 @@ - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + +
Redis版本
{{ cache.info.redis_version }}
运行模式
{{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}
端口
{{ cache.info.tcp_port }}
客户端数
{{ cache.info.connected_clients }}
Redis版本
{{ cache.info.redis_version }}
运行模式
{{ cache.info.redis_mode == "standalone" ? "单机" : "集群" }}
端口
{{ cache.info.tcp_port }}
客户端数
{{ cache.info.connected_clients }}
运行时间(天)
{{ cache.info.uptime_in_days }}
使用内存
{{ cache.info.used_memory_human }}
使用CPU
{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}
内存配置
{{ cache.info.maxmemory_human }}
运行时间(天)
{{ cache.info.uptime_in_days }}
使用内存
{{ cache.info.used_memory_human }}
使用CPU
{{ parseFloat(cache.info.used_cpu_user_children).toFixed(2) }}
内存配置
{{ cache.info.maxmemory_human }}
AOF是否开启
{{ cache.info.aof_enabled == "0" ? "否" : "是" }}
RDB是否成功
{{ cache.info.rdb_last_bgsave_status }}
Key数量
{{ cache.dbSize }}
网络入口/出口
{{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps
AOF是否开启
{{ cache.info.aof_enabled == "0" ? "否" : "是" }}
RDB是否成功
{{ cache.info.rdb_last_bgsave_status }}
Key数量
{{ cache.dbSize }}
网络入口/出口
{{ cache.info.instantaneous_input_kbps }}kps/{{cache.info.instantaneous_output_kbps}}kps
diff --git a/ruoyi-ui/src/views/monitor/server/index.vue b/ruoyi-ui/src/views/monitor/server/index.vue index 367001f4d..503bf9b61 100644 --- a/ruoyi-ui/src/views/monitor/server/index.vue +++ b/ruoyi-ui/src/views/monitor/server/index.vue @@ -8,26 +8,26 @@ - - + + - - + + - - + + - - + + - - + +
属性
属性
核心数
{{ server.cpu.cpuNum }}
核心数
{{ server.cpu.cpuNum }}
用户使用率
{{ server.cpu.used }}%
用户使用率
{{ server.cpu.used }}%
系统使用率
{{ server.cpu.sys }}%
系统使用率
{{ server.cpu.sys }}%
当前空闲率
{{ server.cpu.free }}%
当前空闲率
{{ server.cpu.free }}%
@@ -42,31 +42,31 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - + + +
属性
内存
JVM
属性
内存
JVM
总内存
{{ server.mem.total }}G
{{ server.jvm.total }}M
总内存
{{ server.mem.total }}G
{{ server.jvm.total }}M
已用内存
{{ server.mem.used}}G
{{ server.jvm.used}}M
已用内存
{{ server.mem.used}}G
{{ server.jvm.used}}M
剩余内存
{{ server.mem.free }}G
{{ server.jvm.free }}M
剩余内存
{{ server.mem.free }}G
{{ server.jvm.free }}M
使用率
{{ server.mem.usage }}%
{{ server.jvm.usage }}%
使用率
{{ server.mem.usage }}%
{{ server.jvm.usage }}%
@@ -83,16 +83,16 @@ - - - - + + + + - - - - + + + +
服务器名称
{{ server.sys.computerName }}
操作系统
{{ server.sys.osName }}
服务器名称
{{ server.sys.computerName }}
操作系统
{{ server.sys.osName }}
服务器IP
{{ server.sys.computerIp }}
系统架构
{{ server.sys.osArch }}
服务器IP
{{ server.sys.computerIp }}
系统架构
{{ server.sys.osArch }}
@@ -109,24 +109,24 @@ - - - - + + + + - - - - + + + + - - + + - - + +
Java名称
{{ server.jvm.name }}
Java版本
{{ server.jvm.version }}
Java名称
{{ server.jvm.name }}
Java版本
{{ server.jvm.version }}
启动时间
{{ server.jvm.startTime }}
运行时长
{{ server.jvm.runTime }}
启动时间
{{ server.jvm.startTime }}
运行时长
{{ server.jvm.runTime }}
安装路径
{{ server.jvm.home }}
安装路径
{{ server.jvm.home }}
项目路径
{{ server.sys.userDir }}
项目路径
{{ server.sys.userDir }}
@@ -143,24 +143,24 @@ - - - - - - - + + + + + + + - - - - - - - + + + + + + +
盘符路径
文件系统
盘符类型
总大小
可用大小
已用大小
已用百分比
盘符路径
文件系统
盘符类型
总大小
可用大小
已用大小
已用百分比
{{ sysFile.dirName }}
{{ sysFile.sysTypeName }}
{{ sysFile.typeName }}
{{ sysFile.total }}
{{ sysFile.free }}
{{ sysFile.used }}
{{ sysFile.usage }}%
{{ sysFile.dirName }}
{{ sysFile.sysTypeName }}
{{ sysFile.typeName }}
{{ sysFile.total }}
{{ sysFile.free }}
{{ sysFile.used }}
{{ sysFile.usage }}%
From ae5c68368be574a12952b64b1b91808307eed310 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 10 Oct 2021 11:24:16 +0800 Subject: [PATCH 15/82] =?UTF-8?q?=E5=8D=87=E7=BA=A7SpringBoot=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC2.5.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../controller/system/SysRegisterController.java | 2 +- .../ruoyi/framework/config/ResourcesConfig.java | 15 ++++++++++----- .../interceptor/RepeatSubmitInterceptor.java | 6 +++--- .../framework/web/service/SysRegisterService.java | 2 +- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 69cd0efab..5e4ec7b13 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ org.springframework.boot spring-boot-dependencies - 2.2.13.RELEASE + 2.5.5 pom import diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java index e88a2ad6e..f1552e033 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java @@ -1,13 +1,13 @@ package com.ruoyi.web.controller.system; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.web.service.SysRegisterService; import com.ruoyi.system.service.ISysConfigService; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java index 9cd523e76..24ef0dec9 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -28,10 +28,12 @@ public class ResourcesConfig implements WebMvcConfigurer public void addResourceHandlers(ResourceHandlerRegistry registry) { /** 本地文件上传路径 */ - registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**") + .addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); /** swagger配置 */ - registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/"); } /** @@ -49,17 +51,20 @@ public class ResourcesConfig implements WebMvcConfigurer @Bean public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 设置访问源地址 - config.addAllowedOrigin("*"); + config.addAllowedOriginPattern("*"); // 设置访问源请求头 config.addAllowedHeader("*"); // 设置访问源请求方法 config.addAllowedMethod("*"); - // 对接口配置跨域设置 + // 有效期 1800秒 + config.setMaxAge(1800L); + // 添加映射路径,拦截一切请求 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); + // 返回新的CorsFilter return new CorsFilter(source); } } \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java index 7b7f5a407..509e28731 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java @@ -5,7 +5,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.method.HandlerMethod; -import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; +import org.springframework.web.servlet.HandlerInterceptor; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.core.domain.AjaxResult; @@ -17,7 +17,7 @@ import com.ruoyi.common.utils.ServletUtils; * @author ruoyi */ @Component -public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter +public abstract class RepeatSubmitInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception @@ -40,7 +40,7 @@ public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter } else { - return super.preHandle(request, response, handler); + return true; } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java index c7fbdc942..35a425c7d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java @@ -2,7 +2,6 @@ package com.ruoyi.framework.web.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysUser; @@ -12,6 +11,7 @@ import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.manager.AsyncManager; import com.ruoyi.framework.manager.factory.AsyncFactory; import com.ruoyi.system.service.ISysConfigService; From 8bd6296721185bf5350ac975eb6caca7c9e7b75c Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 10 Oct 2021 11:25:37 +0800 Subject: [PATCH 16/82] =?UTF-8?q?=E5=8D=87=E7=BA=A7pagehelper=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=881.4.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e4ec7b13..91da95425 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 3.0.0 2.3.2 2.1.4 - 1.3.1 + 1.4.0 1.2.78 5.8.0 5.8.0 From b1e5ebab8f2d522b876a46f6a60f37227a6de1e5 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 10 Oct 2021 11:26:50 +0800 Subject: [PATCH 17/82] =?UTF-8?q?=E5=8D=87=E7=BA=A7spring-boot-mybatis?= =?UTF-8?q?=E5=88=B0=E6=9C=80=E6=96=B0=E7=89=882.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 91da95425..91ac13cee 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 1.21 3.0.0 2.3.2 - 2.1.4 + 2.2.0 1.4.0 1.2.78 5.8.0 From eb4376b649a0f8783e8f70406a438ad3c61b8f12 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sun, 10 Oct 2021 14:30:08 +0800 Subject: [PATCH 18/82] =?UTF-8?q?Excel=E5=AF=BC=E5=85=A5=E6=94=AF=E6=8C=81?= =?UTF-8?q?@Excels=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 70 +++++++++---------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index fa9529119..4169360a1 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -268,22 +268,15 @@ public class ExcelUtil } } // 有数据时才处理 得到类的所有field. - Field[] allFields = clazz.getDeclaredFields(); - // 定义一个map用于存放列的序号和field. - Map fieldsMap = new HashMap(); - for (int col = 0; col < allFields.length; col++) + List fields = this.getFields(); + Map fieldsMap = new HashMap(); + for (Object[] objects : fields) { - Field field = allFields[col]; - Excel attr = field.getAnnotation(Excel.class); - if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + Excel attr = (Excel) objects[1]; + Integer column = cellMap.get(attr.name()); + if (column != null) { - // 设置类的私有字段属性可访问. - field.setAccessible(true); - Integer column = cellMap.get(attr.name()); - if (column != null) - { - fieldsMap.put(column, field); - } + fieldsMap.put(column, objects); } } for (int i = titleNum + 1; i <= rows; i++) @@ -296,14 +289,15 @@ public class ExcelUtil continue; } T entity = null; - for (Map.Entry entry : fieldsMap.entrySet()) + for (Map.Entry entry : fieldsMap.entrySet()) { Object val = this.getCellValue(row, entry.getKey()); // 如果不存在实例则新建. entity = (entity == null ? clazz.newInstance() : entity); // 从map中得到对应列的field. - Field field = fieldsMap.get(entry.getKey()); + Field field = (Field) entry.getValue()[0]; + Excel attr = (Excel) entry.getValue()[1]; // 取得类型,并根据对象类型设置值. Class fieldType = field.getType(); if (String.class == fieldType) @@ -363,7 +357,6 @@ public class ExcelUtil } if (StringUtils.isNotNull(fieldType)) { - Excel attr = field.getAnnotation(Excel.class); String propertyName = field.getName(); if (StringUtils.isNotEmpty(attr.targetAttr())) { @@ -610,8 +603,6 @@ public class ExcelUtil { Field field = (Field) os[0]; Excel excel = (Excel) os[1]; - // 设置实体类私有属性可访问 - field.setAccessible(true); this.addCell(excel, row, vo, field, column++); } } @@ -1164,7 +1155,17 @@ public class ExcelUtil */ private void createExcelField() { - this.fields = new ArrayList(); + this.fields = getFields(); + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 获取字段注解信息 + */ + public List getFields() + { + List fields = new ArrayList(); List tempFields = new ArrayList<>(); tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); @@ -1173,7 +1174,12 @@ public class ExcelUtil // 单注解 if (field.isAnnotationPresent(Excel.class)) { - putToField(field, field.getAnnotation(Excel.class)); + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } } // 多注解 @@ -1181,14 +1187,17 @@ public class ExcelUtil { Excels attrs = field.getAnnotation(Excels.class); Excel[] excels = attrs.value(); - for (Excel excel : excels) + for (Excel attr : excels) { - putToField(field, excel); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } } } } - this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); - this.maxHeight = getRowHeight(); + return fields; } /** @@ -1205,17 +1214,6 @@ public class ExcelUtil return (short) (maxHeight * 20); } - /** - * 放到字段集合中 - */ - private void putToField(Field field, Excel attr) - { - if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) - { - this.fields.add(new Object[] { field, attr }); - } - } - /** * 创建一个工作簿 */ From 2006e5e51e9f8f73996db79ab01b9696518efbc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 11 Oct 2021 09:43:03 +0800 Subject: [PATCH 19/82] update springboot-admin 2.5.1 => 2.5.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d24b87a9b..6fa31db63 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ 3.0.3 11.6 4.9.1 - 2.5.1 + 2.5.2 3.16.3 2.2.1 3.4.1 From aaf9f574596e997f1428db3c678319c5eb68f030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 11 Oct 2021 16:49:21 +0800 Subject: [PATCH 20/82] =?UTF-8?q?update=20=E5=8E=BB=E9=99=A4=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisplus/CreateAndUpdateMetaObjectHandler.java | 8 ++++++-- .../java/com/ruoyi/system/service/SysLoginService.java | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java index feb73a458..9b5ce7106 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java @@ -27,7 +27,9 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { this.setFieldValByName("createTime", new Date(), metaObject); } if (metaObject.hasGetter("createBy")) { - this.setFieldValByName("createBy", getLoginUsername(), metaObject); + if (metaObject.getValue("createBy") == null) { + this.setFieldValByName("createBy", getLoginUsername(), metaObject); + } } } catch (Exception e) { throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); @@ -39,7 +41,9 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { public void updateFill(MetaObject metaObject) { try { if (metaObject.hasGetter("updateBy")) { - this.setFieldValByName("updateBy", getLoginUsername(), metaObject); + if (metaObject.getValue("updateBy") == null) { + this.setFieldValByName("updateBy", getLoginUsername(), metaObject); + } } if (metaObject.hasGetter("updateTime")) { this.setFieldValByName("updateTime", new Date(), metaObject); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 0d2218ecb..59cba7fbf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -78,7 +78,7 @@ public class SysLoginService { } asyncService.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"), request); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); - recordLoginInfo(loginUser.getUserId()); + recordLoginInfo(loginUser.getUserId(), username); // 生成token return tokenService.createToken(loginUser); } @@ -110,11 +110,12 @@ public class SysLoginService { * * @param userId 用户ID */ - public void recordLoginInfo(Long userId) { + public void recordLoginInfo(Long userId, String username) { SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setLoginIp(ServletUtils.getClientIP()); sysUser.setLoginDate(DateUtils.getNowDate()); + sysUser.setUpdateBy(username); userService.updateUserProfile(sysUser); } } From cbb0c98f987a69ed3d23d30d65799f1b426e32d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Mon, 11 Oct 2021 17:59:27 +0800 Subject: [PATCH 21/82] =?UTF-8?q?add=20[=E9=87=8D=E7=A3=85=E6=9B=B4?= =?UTF-8?q?=E6=96=B0]=20=E5=A2=9E=E5=8A=A0=E5=88=86=E5=B8=83=E5=BC=8F?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=A1=86=E6=9E=B6=20TLog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + pom.xml | 30 +++++++ .../src/main/resources/application.yml | 4 + ruoyi-admin/src/main/resources/logback.xml | 10 +-- ruoyi-common/pom.xml | 15 ++++ .../PlusWebInvokeTimeInterceptor.java | 85 +++++++++++++++++++ .../framework/config/ResourcesConfig.java | 11 +++ .../ruoyi/framework/config/TLogConfig.java | 49 +++++++++++ 8 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java diff --git a/README.md b/README.md index c91056066..fad886f41 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼 | 分布式限流 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 全局、请求IP、集群ID 多种限流 | | 分布式锁 | Lock4j | [Lock4j官网](https://gitee.com/baomidou/lock4j) | 注解锁、工具锁 多种多样 | | 分布式幂等 | Lock4j | [Lock4j文档](https://gitee.com/baomidou/lock4j) | 基于分布式锁实现 | +| 分布式日志 | TLog | [TLog文档](https://yomahub.com/tlog/docs) | 支持跟踪链路日志记录、性能分析、链路排查 | | 文件存储 | Minio | [Minio文档](https://docs.min.io/) | 本地存储 | | 文件存储 | 七牛、阿里、腾讯 | [OSS使用文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 云存储 | | 监控框架 | SpringBoot-Admin | [SpringBoot-Admin文档](https://codecentric.github.io/spring-boot-admin/current/) | 全方位服务监控 | diff --git a/pom.xml b/pom.xml index 6fa31db63..c35d13127 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ 3.16.3 2.2.1 3.4.1 + 1.3.2 3.0.1 @@ -204,6 +205,35 @@ lock4j-redisson-spring-boot-starter ${lock4j.version} + + + com.yomahub + tlog-spring-boot-configuration + ${tlog.version} + + + + com.yomahub + tlog-webroot + ${tlog.version} + + + javassist + org.javassist + + + guava + com.google.guava + + + + + + com.yomahub + tlog-feign + ${tlog.version} + + com.ruoyi diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 145469d31..dd1c6bab6 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -59,6 +59,10 @@ logging: org.springframework: warn config: classpath:logback.xml +# tlog 全局访问性能拦截 +tlog: + enable-invoke-time-print: true + # Spring配置 spring: application: diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml index c939785e6..33a169725 100644 --- a/ruoyi-admin/src/main/resources/logback.xml +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -7,7 +7,7 @@ - + ${console.log.pattern} utf-8 @@ -22,7 +22,7 @@ 1 - + ${log.pattern} utf-8 @@ -42,7 +42,7 @@ 60 - + ${log.pattern} @@ -64,7 +64,7 @@ 60 - + ${log.pattern} @@ -86,7 +86,7 @@ 60 - + ${log.pattern} diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index f4f7ab93e..dd9c18207 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -156,6 +156,21 @@ com.baomidou lock4j-redisson-spring-boot-starter + + + com.yomahub + tlog-spring-boot-configuration + + + + com.yomahub + tlog-webroot + + + + com.yomahub + tlog-feign + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java new file mode 100644 index 000000000..e2120bf00 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/Interceptor/PlusWebInvokeTimeInterceptor.java @@ -0,0 +1,85 @@ +package com.ruoyi.framework.Interceptor; + +import cn.hutool.core.map.MapUtil; +import com.alibaba.ttl.TransmittableThreadLocal; +import com.ruoyi.common.utils.JsonUtils; +import com.ruoyi.common.utils.StringUtils; +import com.yomahub.tlog.context.TLogContext; +import com.yomahub.tlog.web.interceptor.AbsTLogWebHandlerMethodInterceptor; +import com.yomahub.tlog.web.wrapper.RequestWrapper; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.time.StopWatch; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.ModelAndView; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Map; + +/** + * 重写Tlog web的调用时间统计拦截器 + * + * @author Lion Li + * @since 3.3.0 + */ +@Slf4j +public class PlusWebInvokeTimeInterceptor extends AbsTLogWebHandlerMethodInterceptor { + + private final TransmittableThreadLocal invokeTimeTL = new TransmittableThreadLocal<>(); + + @Override + public boolean preHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (TLogContext.enableInvokeTimePrint()) { + String url = request.getMethod() + " " + request.getRequestURI(); + + // 打印请求参数 + if (isJsonRequest(request)) { + String jsonParam = new RequestWrapper(request).getBodyString(); + log.info("[PLUS]开始请求 => URL[{}],参数类型[json],参数:[{}]", url, jsonParam); + } else { + Map parameterMap = request.getParameterMap(); + if (MapUtil.isNotEmpty(parameterMap)) { + String parameters = JsonUtils.toJsonString(parameterMap); + log.info("[PLUS]开始请求 => URL[{}],参数类型[param],参数:[{}]", url, parameters); + } else { + log.info("[PLUS]开始请求 => URL[{}],无参数", url); + } + } + + StopWatch stopWatch = new StopWatch(); + invokeTimeTL.set(stopWatch); + stopWatch.start(); + } + return true; + } + + @Override + public void postHandleByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletionByHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + if (TLogContext.enableInvokeTimePrint()) { + StopWatch stopWatch = invokeTimeTL.get(); + stopWatch.stop(); + log.info("[PLUS]结束请求 => URL[{}],耗时:[{}]毫秒", request.getMethod() + " " + request.getRequestURI(), stopWatch.getTime()); + invokeTimeTL.remove(); + } + } + + /** + * 判断本次请求的数据类型是否为json + * + * @param request request + * @return boolean + */ + private boolean isJsonRequest(HttpServletRequest request) { + String contentType = request.getContentType(); + if (contentType != null) { + return StringUtils.startsWithIgnoreCase(contentType, MediaType.APPLICATION_JSON_VALUE); + } + return false; + } + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java index b1ecf81f8..f4e2b5fab 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -1,10 +1,13 @@ package com.ruoyi.framework.config; +import com.ruoyi.framework.Interceptor.PlusWebInvokeTimeInterceptor; +import com.yomahub.tlog.web.interceptor.TLogWebInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -20,6 +23,14 @@ public class ResourcesConfig implements WebMvcConfigurer { public void addResourceHandlers(ResourceHandlerRegistry registry) { } + @Override + public void addInterceptors(InterceptorRegistry registry) { + // 全局链路跟踪拦截器 + registry.addInterceptor(new TLogWebInterceptor()); + // 全局访问性能拦截 + registry.addInterceptor(new PlusWebInvokeTimeInterceptor()); + } + /** * 跨域配置 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java new file mode 100644 index 000000000..68bc425d6 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java @@ -0,0 +1,49 @@ +package com.ruoyi.framework.config; + +import com.yomahub.tlog.core.aop.AspectLogAop; +import com.yomahub.tlog.feign.filter.TLogFeignFilter; +import com.yomahub.tlog.spring.TLogPropertyInit; +import com.yomahub.tlog.spring.TLogSpringAware; +import com.yomahub.tlog.springboot.property.TLogProperty; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.core.annotation.Order; + +/** + * 整合 TLog 框架配置 + * + * @author Lion Li + * @since 3.3.0 + */ +@Order(-999) +@Configuration +@Import(TLogProperty.class) +public class TLogConfig { + + @Bean + public TLogPropertyInit tLogPropertyInit(TLogProperty tLogProperty) { + TLogPropertyInit tLogPropertyInit = new TLogPropertyInit(); + tLogPropertyInit.setPattern(tLogProperty.getPattern()); + tLogPropertyInit.setEnableInvokeTimePrint(tLogProperty.enableInvokeTimePrint()); + tLogPropertyInit.setIdGenerator(tLogProperty.getIdGenerator()); + tLogPropertyInit.setMdcEnable(tLogProperty.getMdcEnable()); + return tLogPropertyInit; + } + + @Bean + public TLogSpringAware tLogSpringAware(){ + return new TLogSpringAware(); + } + + @Bean + public AspectLogAop aspectLogAop() { + return new AspectLogAop(); + } + + @Bean + public TLogFeignFilter tLogFeignFilter() { + return new TLogFeignFilter(); + } + +} From 6d6271d6c97a9077626e50f09c1b860c41a44d60 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 14 Oct 2021 16:19:46 +0800 Subject: [PATCH 22/82] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=94=E7=BA=A7?= =?UTF-8?q?=E4=BB=A5=E4=B8=8A=E8=8F=9C=E5=8D=95404=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/store/modules/permission.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js index 340524abc..6143038ab 100644 --- a/ruoyi-ui/src/store/modules/permission.js +++ b/ruoyi-ui/src/store/modules/permission.js @@ -86,7 +86,7 @@ function filterChildren(childrenMap, lastRouter = false) { var children = [] childrenMap.forEach((el, index) => { if (el.children && el.children.length) { - if (el.component === 'ParentView') { + if (el.component === 'ParentView' && !lastRouter) { el.children.forEach(c => { c.path = el.path + '/' + c.path if (c.children && c.children.length) { From e7afea4cb744c4789babd71af2dc03fd0d459ad7 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 14 Oct 2021 16:20:18 +0800 Subject: [PATCH 23/82] =?UTF-8?q?=E5=8D=87=E7=BA=A7oshi=E5=88=B0=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9C=ACv5.8.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 91ac13cee..6feb0ee79 100644 --- a/pom.xml +++ b/pom.xml @@ -25,8 +25,8 @@ 2.2.0 1.4.0 1.2.78 - 5.8.0 - 5.8.0 + 5.8.2 + 5.9.0 2.11.0 1.4 3.2.2 @@ -242,7 +242,7 @@ public aliyun nexus - http://maven.aliyun.com/nexus/content/groups/public/ + https://maven.aliyun.com/repository/public true @@ -253,7 +253,7 @@ public aliyun nexus - http://maven.aliyun.com/nexus/content/groups/public/ + https://maven.aliyun.com/repository/public true From 64ec206ecb5219c7b0df888180b620461418de78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 14 Oct 2021 17:28:13 +0800 Subject: [PATCH 24/82] =?UTF-8?q?update=20=E6=9B=B4=E6=94=B9=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=95=B0=E6=8D=AE=E5=9B=9E=E5=A1=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/components/FileUpload/index.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue index d5c3bc700..a5971f23b 100644 --- a/ruoyi-ui/src/components/FileUpload/index.vue +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -148,7 +148,7 @@ export default { handleUploadSuccess(res, file) { if (res.code === 200) { this.$message.success("上传成功"); - this.fileList.push({ name: res.data.fileName, url: res.data.fileName }); + this.fileList.push({ name: res.data.fileName, url: res.data.url }); this.$emit("input", this.listToString(this.fileList)); } else { this.$message.error(res.msg); From 1eaea5c81c46bee8b0f29f06fcb19836dea2cd93 Mon Sep 17 00:00:00 2001 From: liyang Date: Thu, 14 Oct 2021 21:26:03 +0800 Subject: [PATCH 25/82] =?UTF-8?q?=E4=BF=AE=E6=94=B9oss=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=B6=E5=88=A0=E9=99=A4=E7=BC=93=E5=AD=98?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SysOssConfigServiceImpl.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java index 848f4d63f..c71c65d20 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Lists; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.PagePlus; @@ -113,14 +114,18 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl list = Lists.newArrayList(); + for (Long configId : ids) { + SysOssConfig config = getById(configId); + list.add(config); + } boolean flag = removeByIds(ids); - if (flag) { - for (Long configId : ids) { - SysOssConfig config = getById(configId); - RedisUtils.deleteObject(getCacheKey(config.getConfigKey())); - } - } - return flag; + if (flag) { + list.stream().forEach(sysOssConfig -> { + RedisUtils.deleteObject(getCacheKey(sysOssConfig.getConfigKey())); + }); + } + return flag; } /** From ea249c33fdb89e90178da214133e01ea928e86a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 11:30:24 +0800 Subject: [PATCH 26/82] =?UTF-8?q?update=20=E5=8C=85=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=20=E8=A7=84=E8=8C=83=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreateAndUpdateMetaObjectHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename ruoyi-framework/src/main/java/com/ruoyi/framework/{mybatisplus => handler}/CreateAndUpdateMetaObjectHandler.java (97%) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java similarity index 97% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java rename to ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java index 9b5ce7106..2f502d730 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/mybatisplus/CreateAndUpdateMetaObjectHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java @@ -1,4 +1,4 @@ -package com.ruoyi.framework.mybatisplus; +package com.ruoyi.framework.handler; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; From 14f6249031a47dc8e45172d76a735dc1493f0484 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 11:30:39 +0800 Subject: [PATCH 27/82] =?UTF-8?q?update=20=E5=8C=85=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=20=E8=A7=84=E8=8C=83=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/framework/config/MybatisPlusConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2d3cdbf35..57388ec3a 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 @@ -9,7 +9,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.common.core.mybatisplus.methods.InsertAll; -import com.ruoyi.framework.mybatisplus.CreateAndUpdateMetaObjectHandler; +import com.ruoyi.framework.handler.CreateAndUpdateMetaObjectHandler; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; From 1419700c433256abf19b151d9a8bbe70ca3ec1e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 11:31:00 +0800 Subject: [PATCH 28/82] =?UTF-8?q?update=20=E6=A0=87=E8=AE=B0=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=20=E6=8E=A8=E8=8D=90=E4=BD=BF=E7=94=A8=20spring-cache?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/mybatisplus/cache/MybatisPlusRedisCache.java | 1 + 1 file changed, 1 insertion(+) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java index 51b9ec38e..8f7379fcd 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java @@ -18,6 +18,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; * 使用方法 配置文件开启 mybatis-plus 二级缓存 * 在 XxxMapper.java 类上添加注解 @CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) * + * @deprecated 3.5.0删除 推荐使用spirng-cache * @author Lion Li */ @Slf4j From 6684812014a0f48d0f3ddd9a6612f7c89dc18e8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 11:31:26 +0800 Subject: [PATCH 29/82] =?UTF-8?q?update=20=E6=A0=87=E8=AE=B0=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=20=E6=8E=A8=E8=8D=90=E8=BF=81=E7=A7=BB=E8=87=B3?= =?UTF-8?q?=E6=96=B0=E6=A1=86=E6=9E=B6=20xxl-job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- ruoyi-admin/pom.xml | 2 +- .../java/com/ruoyi/common/constant/ScheduleConstants.java | 3 ++- .../java/com/ruoyi/common/exception/job/TaskException.java | 3 ++- .../main/java/com/ruoyi/quartz/config/ScheduleConfig.java | 2 ++ .../java/com/ruoyi/quartz/controller/SysJobController.java | 1 + .../com/ruoyi/quartz/controller/SysJobLogController.java | 1 + .../src/main/java/com/ruoyi/quartz/domain/SysJob.java | 1 + .../src/main/java/com/ruoyi/quartz/domain/SysJobLog.java | 1 + .../main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java | 1 + .../src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java | 1 + .../java/com/ruoyi/quartz/service/ISysJobLogService.java | 1 + .../main/java/com/ruoyi/quartz/service/ISysJobService.java | 1 + .../com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java | 1 + .../com/ruoyi/quartz/service/impl/SysJobServiceImpl.java | 1 + .../src/main/java/com/ruoyi/quartz/task/RyTask.java | 1 + .../main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java | 1 + .../src/main/java/com/ruoyi/quartz/util/CronUtils.java | 6 ++++-- .../src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java | 1 + .../quartz/util/QuartzDisallowConcurrentExecution.java | 3 ++- .../main/java/com/ruoyi/quartz/util/QuartzJobExecution.java | 3 ++- .../src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java | 3 ++- 22 files changed, 31 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index c35d13127..c9124fc84 100644 --- a/pom.xml +++ b/pom.xml @@ -234,7 +234,7 @@ ${tlog.version} - + com.ruoyi ruoyi-quartz diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 12327e305..560051b1b 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -41,7 +41,7 @@ ruoyi-system - + com.ruoyi ruoyi-quartz 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 8318b8f5f..ba4986cfe 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 @@ -2,7 +2,8 @@ package com.ruoyi.common.constant; /** * 任务调度通用常量 - * + * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public class ScheduleConstants 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..adba5a464 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 @@ -2,7 +2,8 @@ package com.ruoyi.common.exception.job; /** * 计划策略异常 - * + * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public class TaskException extends Exception diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java index c6b838461..61712e5a3 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -5,8 +5,10 @@ import org.springframework.context.annotation.Configuration; /** * 定时任务配置 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author Lion Li */ +@Deprecated @Configuration public class ScheduleConfig { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java index 3a11170d5..4d895a476 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java @@ -23,6 +23,7 @@ import java.util.List; /** * 调度任务信息操作处理 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ @RestController diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java index 6fcba3994..280d6bdb1 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java @@ -18,6 +18,7 @@ import java.util.List; /** * 调度日志操作处理 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ @RestController diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java index 416dced2b..fa841598f 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java @@ -23,6 +23,7 @@ import java.util.Map; /** * 定时任务调度表 sys_job * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java index bc9074af1..5e09c8018 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java @@ -16,6 +16,7 @@ import java.util.Map; /** * 定时任务调度日志表 sys_job_log * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java index fe1a059e2..fd1f15005 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java @@ -6,6 +6,7 @@ import com.ruoyi.quartz.domain.SysJobLog; /** * 调度任务日志信息 数据层 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public interface SysJobLogMapper extends BaseMapperPlus { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java index 14566b439..f96f5d2c8 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java @@ -6,6 +6,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 调度任务信息 数据层 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public interface SysJobMapper extends BaseMapperPlus { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java index 27f598ac3..4b934808c 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java @@ -9,6 +9,7 @@ import java.util.List; /** * 定时任务调度日志信息信息 服务层 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public interface ISysJobLogService extends IService { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java index 81eef937b..bfeca5e03 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java @@ -11,6 +11,7 @@ import java.util.List; /** * 定时任务调度信息信息 服务层 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public interface ISysJobService extends IService { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java index 3ee544ca1..e0a10044c 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java @@ -17,6 +17,7 @@ import java.util.Map; /** * 定时任务调度日志信息 服务层 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ @Service 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 d4fc4265f..3cb7d78a7 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 @@ -26,6 +26,7 @@ import java.util.List; /** * 定时任务调度信息 服务层 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ @Service diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java index e5bfcb798..a387e9622 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Component; /** * 定时任务调度测试 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ @Component("ryTask") diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java index 95437a81f..b083a817f 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java @@ -20,6 +20,7 @@ import java.util.Date; /** * 抽象quartz调用 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public abstract class AbstractQuartzJob implements Job diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java index 6826787a6..4b4168093 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java @@ -1,12 +1,14 @@ package com.ruoyi.quartz.util; +import org.quartz.CronExpression; + import java.text.ParseException; import java.util.Date; -import org.quartz.CronExpression; /** * cron表达式工具类 - * + * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi * */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java index 40a19bdea..c1f89d37d 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java @@ -11,6 +11,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 任务执行工具 * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi */ public class JobInvokeUtil diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java index 96a6dcf8e..f29820108 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java @@ -6,7 +6,8 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务处理(禁止并发执行) - * + * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi * */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java index 87a06bc13..f9e4fee85 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java @@ -5,7 +5,8 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务处理(允许并发执行) - * + * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi * */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java index 37fe72e04..8607fdfef 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -17,7 +17,8 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务工具类 - * + * + * @deprecated 3.5.0删除 迁移至xxl-job * @author ruoyi * */ From bb43b2853d956cba57572df8d01da8e3ac0a201d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 11:45:43 +0800 Subject: [PATCH 30/82] =?UTF-8?q?update=20=E5=89=8D=E7=AB=AF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=9B=BD=E9=99=85=E5=8C=96=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/utils/request.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 9b40b4acb..4acc3b404 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -5,6 +5,8 @@ import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 对应国际化资源文件后缀 +axios.defaults.headers['Content-Language'] = 'zh_CN' // 创建axios实例 const service = axios.create({ // axios中请求配置有baseURL选项,表示请求URL公共部分 From a6fb88d74c20cc28043d75e8a5097fce49cf9a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 15:19:42 +0800 Subject: [PATCH 31/82] =?UTF-8?q?update=20[=E9=87=8D=E5=A4=A7=E6=9B=B4?= =?UTF-8?q?=E6=96=B0]=E5=85=A8=E4=B8=9A=E5=8A=A1=20=E5=A2=9E=E5=8A=A0=20?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3=E6=B3=A8=E8=A7=A3=20?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/RuoYiApplication.java | 8 +- .../com/ruoyi/RuoYiServletInitializer.java | 10 +- .../controller/common/CaptchaController.java | 103 ++--- .../controller/monitor/CacheController.java | 41 +- .../monitor/SysLogininforController.java | 34 +- .../monitor/SysOperlogController.java | 34 +- .../monitor/SysUserOnlineController.java | 49 +-- .../system/SysConfigController.java | 55 +-- .../controller/system/SysDeptController.java | 85 ++-- .../system/SysDictDataController.java | 52 +-- .../system/SysDictTypeController.java | 55 +-- .../controller/system/SysIndexController.java | 28 +- .../controller/system/SysLoginController.java | 41 +- .../controller/system/SysMenuController.java | 72 ++-- .../system/SysNoticeController.java | 51 ++- .../system/SysOssConfigController.java | 125 +++--- .../controller/system/SysOssController.java | 166 ++++---- .../controller/system/SysPostController.java | 59 ++- .../system/SysProfileController.java | 79 ++-- .../system/SysRegisterController.java | 27 +- .../controller/system/SysRoleController.java | 107 +++-- .../controller/system/SysUserController.java | 136 +++---- .../src/main/resources/application.yml | 4 +- .../com/ruoyi/common/config/RuoYiConfig.java | 31 +- .../ruoyi/common/constant/GenConstants.java | 4 +- .../ruoyi/common/core/domain/BaseEntity.java | 18 +- .../ruoyi/common/core/domain/TreeEntity.java | 17 +- .../ruoyi/common/core/domain/TreeSelect.java | 45 ++- .../common/core/domain/dto/OperLogDTO.java | 5 +- .../common/core/domain/entity/SysDept.java | 80 ++-- .../core/domain/entity/SysDictData.java | 64 +-- .../core/domain/entity/SysDictType.java | 57 +-- .../common/core/domain/entity/SysMenu.java | 84 ++-- .../common/core/domain/entity/SysRole.java | 64 ++- .../common/core/domain/entity/SysUser.java | 66 ++- .../common/core/domain/model/LoginBody.java | 18 +- .../common/core/domain/model/LoginUser.java | 42 +- .../core/domain/model/RegisterBody.java | 10 +- .../com/ruoyi/generator/config/GenConfig.java | 48 +-- .../generator/controller/GenController.java | 72 ++-- .../com/ruoyi/generator/domain/GenTable.java | 56 +-- .../generator/domain/GenTableColumn.java | 59 +-- .../mapper/GenTableColumnMapper.java | 4 +- .../generator/mapper/GenTableMapper.java | 14 +- .../service/GenTableColumnServiceImpl.java | 4 +- .../service/GenTableServiceImpl.java | 64 +-- .../service/IGenTableColumnService.java | 10 +- .../generator/service/IGenTableService.java | 30 +- .../com/ruoyi/generator/util/GenUtils.java | 92 ++--- .../generator/util/VelocityInitializer.java | 22 +- .../ruoyi/generator/util/VelocityUtils.java | 188 ++++----- .../com/ruoyi/system/domain/SysConfig.java | 58 +-- .../ruoyi/system/domain/SysLogininfor.java | 22 +- .../com/ruoyi/system/domain/SysNotice.java | 59 +-- .../com/ruoyi/system/domain/SysOperLog.java | 31 +- .../java/com/ruoyi/system/domain/SysPost.java | 60 +-- .../com/ruoyi/system/domain/SysRoleDept.java | 10 +- .../com/ruoyi/system/domain/SysRoleMenu.java | 10 +- .../ruoyi/system/domain/SysUserOnline.java | 17 +- .../com/ruoyi/system/domain/SysUserPost.java | 10 +- .../com/ruoyi/system/domain/SysUserRole.java | 10 +- .../com/ruoyi/system/domain/bo/SysOssBo.java | 90 ++--- .../system/domain/bo/SysOssConfigBo.java | 52 +-- .../com/ruoyi/system/domain/vo/MetaVo.java | 44 +- .../com/ruoyi/system/domain/vo/RouterVo.java | 18 +- .../system/domain/vo/SysOssConfigVo.java | 59 ++- .../com/ruoyi/system/domain/vo/SysOssVo.java | 82 ++-- .../system/domain/vo/SysUserExportVo.java | 116 +++--- .../system/domain/vo/SysUserImportVo.java | 86 ++-- .../ruoyi/system/mapper/SysConfigMapper.java | 2 +- .../ruoyi/system/mapper/SysDeptMapper.java | 22 +- .../system/mapper/SysDictDataMapper.java | 16 +- .../system/mapper/SysDictTypeMapper.java | 2 +- .../system/mapper/SysLogininforMapper.java | 2 +- .../ruoyi/system/mapper/SysMenuMapper.java | 14 +- .../ruoyi/system/mapper/SysNoticeMapper.java | 2 +- .../ruoyi/system/mapper/SysOperLogMapper.java | 2 +- .../ruoyi/system/mapper/SysPostMapper.java | 6 +- .../system/mapper/SysRoleDeptMapper.java | 2 +- .../ruoyi/system/mapper/SysRoleMapper.java | 10 +- .../system/mapper/SysRoleMenuMapper.java | 2 +- .../ruoyi/system/mapper/SysUserMapper.java | 12 +- .../system/mapper/SysUserPostMapper.java | 2 +- .../system/mapper/SysUserRoleMapper.java | 2 +- .../system/service/ISysConfigService.java | 24 +- .../ruoyi/system/service/ISysDeptService.java | 28 +- .../system/service/ISysDictDataService.java | 14 +- .../system/service/ISysDictTypeService.java | 26 +- .../system/service/ISysLogininforService.java | 10 +- .../ruoyi/system/service/ISysMenuService.java | 33 +- .../system/service/ISysNoticeService.java | 14 +- .../system/service/ISysOperLogService.java | 12 +- .../system/service/ISysOssConfigService.java | 63 +-- .../ruoyi/system/service/ISysOssService.java | 6 +- .../ruoyi/system/service/ISysPostService.java | 24 +- .../ruoyi/system/service/ISysRoleService.java | 46 +-- .../system/service/ISysUserOnlineService.java | 10 +- .../ruoyi/system/service/ISysUserService.java | 58 +-- .../ruoyi/system/service/SysLoginService.java | 3 +- .../system/service/SysRegisterService.java | 2 +- .../service/impl/SysConfigServiceImpl.java | 366 ++++++++--------- .../service/impl/SysDeptServiceImpl.java | 36 +- .../service/impl/SysDictDataServiceImpl.java | 188 ++++----- .../service/impl/SysDictTypeServiceImpl.java | 378 +++++++++--------- .../impl/SysLogininforServiceImpl.java | 2 +- .../service/impl/SysMenuServiceImpl.java | 91 +++-- .../service/impl/SysNoticeServiceImpl.java | 12 +- .../service/impl/SysOperLogServiceImpl.java | 16 +- .../service/impl/SysOssConfigServiceImpl.java | 177 ++++---- .../service/impl/SysOssServiceImpl.java | 102 ++--- .../service/impl/SysPostServiceImpl.java | 6 +- .../service/impl/SysRoleServiceImpl.java | 32 +- .../impl/SysUserOnlineServiceImpl.java | 3 +- .../service/impl/SysUserServiceImpl.java | 47 ++- .../system/service/impl/TokenServiceImpl.java | 18 +- 115 files changed, 2600 insertions(+), 2868 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 3a1a4aef0..f389ff437 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -10,12 +10,12 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; */ @SpringBootApplication -public class RuoYiApplication -{ - public static void main(String[] args) - { +public class RuoYiApplication { + + public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(RuoYiApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙"); } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java index 6de67dc76..dd0562684 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java @@ -5,14 +5,14 @@ import org.springframework.boot.web.servlet.support.SpringBootServletInitializer /** * web容器中进行部署 - * + * * @author ruoyi */ -public class RuoYiServletInitializer extends SpringBootServletInitializer -{ +public class RuoYiServletInitializer extends SpringBootServletInitializer { + @Override - protected SpringApplicationBuilder configure(SpringApplicationBuilder application) - { + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(RuoYiApplication.class); } + } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java index b6f8a5087..4a2bf30d7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java @@ -13,6 +13,9 @@ import com.ruoyi.common.utils.reflect.ReflectUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.config.properties.CaptchaProperties; import com.ruoyi.system.service.ISysConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -24,61 +27,61 @@ import java.util.concurrent.TimeUnit; /** * 验证码操作处理 * - * @author ruoyi + * @author Lion Li */ +@Api(value = "验证码操作处理", tags = {"验证码管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController public class CaptchaController { - @Autowired - private CaptchaProperties captchaProperties; + private final CaptchaProperties captchaProperties; + private final ISysConfigService configService; - @Autowired - private ISysConfigService configService; + /** + * 生成验证码 + */ + @ApiOperation("生成验证码") + @GetMapping("/captchaImage") + public AjaxResult> getCode() { + Map ajax = new HashMap<>(); + boolean captchaOnOff = configService.selectCaptchaOnOff(); + ajax.put("captchaOnOff", captchaOnOff); + if (!captchaOnOff) { + return AjaxResult.success(ajax); + } + // 保存验证码信息 + String uuid = IdUtil.simpleUUID(); + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + // 生成验证码 + CaptchaType captchaType = captchaProperties.getType(); + boolean isMath = CaptchaType.MATH == captchaType; + Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength(); + CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length); + AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz()); + captcha.setGenerator(codeGenerator); + captcha.createCode(); + String code = isMath ? getCodeResult(captcha.getCode()) : captcha.getCode(); + RedisUtils.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + ajax.put("uuid", uuid); + ajax.put("img", captcha.getImageBase64()); + return AjaxResult.success(ajax); + } - /** - * 生成验证码 - */ - @GetMapping("/captchaImage") - public AjaxResult getCode() { - Map ajax = new HashMap<>(); - boolean captchaOnOff = configService.selectCaptchaOnOff(); - ajax.put("captchaOnOff", captchaOnOff); - if (!captchaOnOff) { - return AjaxResult.success(ajax); - } - // 保存验证码信息 - String uuid = IdUtil.simpleUUID(); - String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; - // 生成验证码 - CaptchaType captchaType = captchaProperties.getType(); - boolean isMath = CaptchaType.MATH == captchaType; - Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength(); - CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length); - AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz()); - captcha.setGenerator(codeGenerator); - captcha.createCode(); - String code = isMath ? getCodeResult(captcha.getCode()) : captcha.getCode(); - RedisUtils.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); - ajax.put("uuid", uuid); - ajax.put("img", captcha.getImageBase64()); - return AjaxResult.success(ajax); - } - - private String getCodeResult(String capStr) { - int numberLength = captchaProperties.getNumberLength(); - int a = Convert.toInt(StringUtils.substring(capStr, 0, numberLength).trim()); - char operator = capStr.charAt(numberLength); - int b = Convert.toInt(StringUtils.substring(capStr, numberLength + 1, numberLength + 1 + numberLength).trim()); - switch (operator) { - case '*': - return Convert.toStr(a * b); - case '+': - return Convert.toStr(a + b); - case '-': - return Convert.toStr(a - b); - default: - return StringUtils.EMPTY; - } - } + private String getCodeResult(String capStr) { + int numberLength = captchaProperties.getNumberLength(); + int a = Convert.toInt(StringUtils.substring(capStr, 0, numberLength).trim()); + char operator = capStr.charAt(numberLength); + int b = Convert.toInt(StringUtils.substring(capStr, numberLength + 1, numberLength + 1 + numberLength).trim()); + switch (operator) { + case '*': + return Convert.toStr(a * b); + case '+': + return Convert.toStr(a + b); + case '-': + return Convert.toStr(a - b); + default: + return StringUtils.EMPTY; + } + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java index 66749ef4f..ef81c99a3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java @@ -1,8 +1,12 @@ package com.ruoyi.web.controller.monitor; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.RedisServerCommands; import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.access.prepost.PreAuthorize; @@ -15,35 +19,38 @@ import java.util.*; /** * 缓存监控 * - * @author ruoyi + * @author Lion Li */ +@Api(value = "缓存监控", tags = {"缓存监控管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/monitor/cache") -public class CacheController -{ - @Autowired - private RedisTemplate redisTemplate; +public class CacheController { + private final RedisTemplate redisTemplate; + + @ApiOperation("获取缓存监控详细信息") @PreAuthorize("@ss.hasPermi('monitor:cache:list')") @GetMapping() - public AjaxResult getInfo() throws Exception - { - Properties info = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info()); + public AjaxResult> getInfo() throws Exception { + Properties info = (Properties) redisTemplate.execute((RedisCallback) RedisServerCommands::info); Properties commandStats = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info("commandstats")); - Object dbSize = redisTemplate.execute((RedisCallback) connection -> connection.dbSize()); + Object dbSize = redisTemplate.execute((RedisCallback) RedisServerCommands::dbSize); Map result = new HashMap<>(3); result.put("info", info); result.put("dbSize", dbSize); List> pieList = new ArrayList<>(); - commandStats.stringPropertyNames().forEach(key -> { - Map data = new HashMap<>(2); - String property = commandStats.getProperty(key); - data.put("name", StringUtils.removeStart(key, "cmdstat_")); - data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); - pieList.add(data); - }); + if (commandStats != null) { + commandStats.stringPropertyNames().forEach(key -> { + Map data = new HashMap<>(2); + String property = commandStats.getProperty(key); + data.put("name", StringUtils.removeStart(key, "cmdstat_")); + data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); + pieList.add(data); + }); + } result.put("commandStats", pieList); return AjaxResult.success(result); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java index fb0b0029f..d971ca7bc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java @@ -8,8 +8,12 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysLogininfor; import com.ruoyi.system.service.ISysLogininforService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; @@ -18,44 +22,46 @@ import java.util.List; /** * 系统访问记录 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "系统访问记录", tags = {"系统访问记录管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/monitor/logininfor") -public class SysLogininforController extends BaseController -{ - @Autowired - private ISysLogininforService logininforService; +public class SysLogininforController extends BaseController { + private final ISysLogininforService logininforService; + + @ApiOperation("查询系统访问记录列表") @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") @GetMapping("/list") - public TableDataInfo list(SysLogininfor logininfor) - { + public TableDataInfo list(SysLogininfor logininfor) { return logininforService.selectPageLogininforList(logininfor); } + @ApiOperation("导出系统访问记录列表") @Log(title = "登录日志", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") @GetMapping("/export") - public void export(SysLogininfor logininfor, HttpServletResponse response) - { + public void export(SysLogininfor logininfor, HttpServletResponse response) { List list = logininforService.selectLogininforList(logininfor); - ExcelUtil.exportExcel(list, "登录日志", SysLogininfor.class, response); + ExcelUtil.exportExcel(list, "登录日志", SysLogininfor.class, response); } + @ApiOperation("删除系统访问记录") @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") @Log(title = "登录日志", businessType = BusinessType.DELETE) @DeleteMapping("/{infoIds}") - public AjaxResult remove(@PathVariable Long[] infoIds) - { + public AjaxResult remove(@PathVariable Long[] infoIds) { return toAjax(logininforService.deleteLogininforByIds(infoIds)); } + @ApiOperation("清空系统访问记录") @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") @Log(title = "登录日志", businessType = BusinessType.CLEAN) @DeleteMapping("/clean") - public AjaxResult clean() - { + public AjaxResult clean() { logininforService.cleanLogininfor(); return AjaxResult.success(); } 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 02a926d81..f0f090b8d 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 @@ -8,8 +8,12 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysOperLog; import com.ruoyi.system.service.ISysOperLogService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; @@ -18,44 +22,46 @@ import java.util.List; /** * 操作日志记录 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "操作日志记录", tags = {"操作日志记录管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/monitor/operlog") -public class SysOperlogController extends BaseController -{ - @Autowired - private ISysOperLogService operLogService; +public class SysOperlogController extends BaseController { + private final ISysOperLogService operLogService; + + @ApiOperation("查询操作日志记录列表") @PreAuthorize("@ss.hasPermi('monitor:operlog:list')") @GetMapping("/list") - public TableDataInfo list(SysOperLog operLog) - { + public TableDataInfo list(SysOperLog operLog) { return operLogService.selectPageOperLogList(operLog); } + @ApiOperation("导出操作日志记录列表") @Log(title = "操作日志", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") @GetMapping("/export") - public void export(SysOperLog operLog, HttpServletResponse response) - { + public void export(SysOperLog operLog, HttpServletResponse response) { List list = operLogService.selectOperLogList(operLog); - ExcelUtil.exportExcel(list, "操作日志", SysOperLog.class, response); + ExcelUtil.exportExcel(list, "操作日志", SysOperLog.class, response); } + @ApiOperation("删除操作日志记录") @Log(title = "操作日志", businessType = BusinessType.DELETE) @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") @DeleteMapping("/{operIds}") - public AjaxResult remove(@PathVariable Long[] operIds) - { + public AjaxResult remove(@PathVariable Long[] operIds) { return toAjax(operLogService.deleteOperLogByIds(operIds)); } + @ApiOperation("清空操作日志记录") @Log(title = "操作日志", businessType = BusinessType.CLEAN) @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") @DeleteMapping("/clean") - public AjaxResult clean() - { + public AjaxResult clean() { operLogService.cleanOperLog(); return AjaxResult.success(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java index 9c836093f..728bfd078 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java @@ -12,6 +12,9 @@ import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.system.service.ISysUserOnlineService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -24,47 +27,37 @@ import java.util.List; /** * 在线用户监控 * - * @author ruoyi + * @author Lion Li */ +@Api(value = "在线用户监控", tags = {"在线用户监控管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/monitor/online") -public class SysUserOnlineController extends BaseController -{ - @Autowired - private ISysUserOnlineService userOnlineService; +public class SysUserOnlineController extends BaseController { + private final ISysUserOnlineService userOnlineService; + + @ApiOperation("在线用户列表") @PreAuthorize("@ss.hasPermi('monitor:online:list')") @GetMapping("/list") - public TableDataInfo list(String ipaddr, String userName) - { + public TableDataInfo list(String ipaddr, String userName) { Collection keys = RedisUtils.keys(Constants.LOGIN_TOKEN_KEY + "*"); List userOnlineList = new ArrayList(); - for (String key : keys) - { + for (String key : keys) { LoginUser user = RedisUtils.getCacheObject(key); - if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) - { - if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) - { + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) { userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); } - } - else if (StringUtils.isNotEmpty(ipaddr)) - { - if (StringUtils.equals(ipaddr, user.getIpaddr())) - { + } else if (StringUtils.isNotEmpty(ipaddr)) { + if (StringUtils.equals(ipaddr, user.getIpaddr())) { userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); } - } - else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) - { - if (StringUtils.equals(userName, user.getUsername())) - { + } else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) { + if (StringUtils.equals(userName, user.getUsername())) { userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); } - } - else - { + } else { userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); } } @@ -76,11 +69,11 @@ public class SysUserOnlineController extends BaseController /** * 强退用户 */ + @ApiOperation("强退用户") @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") @Log(title = "在线用户", businessType = BusinessType.FORCE) @DeleteMapping("/{tokenId}") - public AjaxResult forceLogout(@PathVariable String tokenId) - { + public AjaxResult forceLogout(@PathVariable String tokenId) { RedisUtils.deleteObject(Constants.LOGIN_TOKEN_KEY + tokenId); return AjaxResult.success(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java index 13fdc672a..42bba0169 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java @@ -10,6 +10,9 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.service.ISysConfigService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -21,64 +24,65 @@ import java.util.List; /** * 参数配置 信息操作处理 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "参数配置控制器", tags = {"参数配置管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/config") -public class SysConfigController extends BaseController -{ - @Autowired - private ISysConfigService configService; +public class SysConfigController extends BaseController { + + private final ISysConfigService configService; /** * 获取参数配置列表 */ + @ApiOperation("获取参数配置列表") @PreAuthorize("@ss.hasPermi('system:config:list')") @GetMapping("/list") - public TableDataInfo list(SysConfig config) - { + public TableDataInfo list(SysConfig config) { return configService.selectPageConfigList(config); } + @ApiOperation("导出参数配置列表") @Log(title = "参数管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:config:export')") @GetMapping("/export") - public void export(SysConfig config, HttpServletResponse response) - { + public void export(SysConfig config, HttpServletResponse response) { List list = configService.selectConfigList(config); - ExcelUtil.exportExcel(list, "参数数据", SysConfig.class, response); + ExcelUtil.exportExcel(list, "参数数据", SysConfig.class, response); } /** * 根据参数编号获取详细信息 */ + @ApiOperation("根据参数编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:config:query')") @GetMapping(value = "/{configId}") - public AjaxResult getInfo(@PathVariable Long configId) - { + public AjaxResult getInfo(@PathVariable Long configId) { return AjaxResult.success(configService.selectConfigById(configId)); } /** * 根据参数键名查询参数值 */ + @ApiOperation("根据参数键名查询参数值") @GetMapping(value = "/configKey/{configKey}") - public AjaxResult getConfigKey(@PathVariable String configKey) - { + public AjaxResult getConfigKey(@PathVariable String configKey) { return AjaxResult.success(configService.selectConfigByKey(configKey)); } /** * 新增参数配置 */ + @ApiOperation("新增参数配置") @PreAuthorize("@ss.hasPermi('system:config:add')") @Log(title = "参数管理", businessType = BusinessType.INSERT) @PostMapping @RepeatSubmit - public AjaxResult add(@Validated @RequestBody SysConfig config) - { - if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) - { + public AjaxResult add(@Validated @RequestBody SysConfig config) { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { return AjaxResult.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); } config.setCreateBy(getUsername()); @@ -88,13 +92,12 @@ public class SysConfigController extends BaseController /** * 修改参数配置 */ + @ApiOperation("修改参数配置") @PreAuthorize("@ss.hasPermi('system:config:edit')") @Log(title = "参数管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysConfig config) - { - if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) - { + public AjaxResult edit(@Validated @RequestBody SysConfig config) { + if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config))) { return AjaxResult.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); } config.setUpdateBy(getUsername()); @@ -104,11 +107,11 @@ public class SysConfigController extends BaseController /** * 删除参数配置 */ + @ApiOperation("删除参数配置") @PreAuthorize("@ss.hasPermi('system:config:remove')") @Log(title = "参数管理", businessType = BusinessType.DELETE) @DeleteMapping("/{configIds}") - public AjaxResult remove(@PathVariable Long[] configIds) - { + public AjaxResult remove(@PathVariable Long[] configIds) { configService.deleteConfigByIds(configIds); return success(); } @@ -116,11 +119,11 @@ public class SysConfigController extends BaseController /** * 刷新参数缓存 */ + @ApiOperation("刷新参数缓存") @PreAuthorize("@ss.hasPermi('system:config:remove')") @Log(title = "参数管理", businessType = BusinessType.CLEAN) @DeleteMapping("/refreshCache") - public AjaxResult refreshCache() - { + public AjaxResult refreshCache() { configService.resetConfigCache(); return AjaxResult.success(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java index fc26e9773..9616004a3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java @@ -5,39 +5,44 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysDeptService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; /** * 部门信息 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "部门控制器", tags = {"部门管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/dept") -public class SysDeptController extends BaseController -{ - @Autowired - private ISysDeptService deptService; +public class SysDeptController extends BaseController { + + private final ISysDeptService deptService; /** * 获取部门列表 */ + @ApiOperation("获取部门列表") @PreAuthorize("@ss.hasPermi('system:dept:list')") @GetMapping("/list") - public AjaxResult list(SysDept dept) - { + public AjaxResult> list(SysDept dept) { List depts = deptService.selectDeptList(dept); return AjaxResult.success(depts); } @@ -45,31 +50,23 @@ public class SysDeptController extends BaseController /** * 查询部门列表(排除节点) */ + @ApiOperation("查询部门列表(排除节点)") @PreAuthorize("@ss.hasPermi('system:dept:list')") @GetMapping("/list/exclude/{deptId}") - public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) - { + public AjaxResult> excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) { List depts = deptService.selectDeptList(new SysDept()); - Iterator it = depts.iterator(); - while (it.hasNext()) - { - SysDept d = (SysDept) it.next(); - if (d.getDeptId().intValue() == deptId - || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")) - { - it.remove(); - } - } + depts.removeIf(d -> d.getDeptId().equals(deptId) + || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); return AjaxResult.success(depts); } /** * 根据部门编号获取详细信息 */ + @ApiOperation("根据部门编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:dept:query')") @GetMapping(value = "/{deptId}") - public AjaxResult getInfo(@PathVariable Long deptId) - { + public AjaxResult getInfo(@PathVariable Long deptId) { deptService.checkDeptDataScope(deptId); return AjaxResult.success(deptService.selectDeptById(deptId)); } @@ -77,9 +74,9 @@ public class SysDeptController extends BaseController /** * 获取部门下拉树列表 */ + @ApiOperation("获取部门下拉树列表") @GetMapping("/treeselect") - public AjaxResult treeselect(SysDept dept) - { + public AjaxResult> treeselect(SysDept dept) { List depts = deptService.selectDeptList(dept); return AjaxResult.success(deptService.buildDeptTreeSelect(depts)); } @@ -87,11 +84,11 @@ public class SysDeptController extends BaseController /** * 加载对应角色部门列表树 */ + @ApiOperation("加载对应角色部门列表树") @GetMapping(value = "/roleDeptTreeselect/{roleId}") - public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId) - { + public AjaxResult> roleDeptTreeselect(@PathVariable("roleId") Long roleId) { List depts = deptService.selectDeptList(new SysDept()); - Map ajax = new HashMap<>(); + Map ajax = new HashMap<>(); ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); ajax.put("depts", deptService.buildDeptTreeSelect(depts)); return AjaxResult.success(ajax); @@ -100,13 +97,12 @@ public class SysDeptController extends BaseController /** * 新增部门 */ + @ApiOperation("新增部门") @PreAuthorize("@ss.hasPermi('system:dept:add')") @Log(title = "部门管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysDept dept) - { - if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) - { + public AjaxResult add(@Validated @RequestBody SysDept dept) { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); } dept.setCreateBy(getUsername()); @@ -116,22 +112,17 @@ public class SysDeptController extends BaseController /** * 修改部门 */ + @ApiOperation("修改部门") @PreAuthorize("@ss.hasPermi('system:dept:edit')") @Log(title = "部门管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysDept dept) - { - if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) - { + public AjaxResult edit(@Validated @RequestBody SysDept dept) { + if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))) { return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); - } - else if (dept.getParentId().equals(dept.getDeptId())) - { + } else if (dept.getParentId().equals(dept.getDeptId())) { return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); - } - else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) - && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) - { + } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) + && deptService.selectNormalChildrenDeptById(dept.getDeptId()) > 0) { return AjaxResult.error("该部门包含未停用的子部门!"); } dept.setUpdateBy(getUsername()); @@ -141,17 +132,15 @@ public class SysDeptController extends BaseController /** * 删除部门 */ + @ApiOperation("删除部门") @PreAuthorize("@ss.hasPermi('system:dept:remove')") @Log(title = "部门管理", businessType = BusinessType.DELETE) @DeleteMapping("/{deptId}") - public AjaxResult remove(@PathVariable Long deptId) - { - if (deptService.hasChildByDeptId(deptId)) - { + public AjaxResult remove(@PathVariable Long deptId) { + if (deptService.hasChildByDeptId(deptId)) { return AjaxResult.error("存在下级部门,不允许删除"); } - if (deptService.checkDeptExistUser(deptId)) - { + if (deptService.checkDeptExistUser(deptId)) { return AjaxResult.error("部门存在用户,不允许删除"); } return toAjax(deptService.deleteDeptById(deptId)); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java index 6462a0c1e..fca1a2094 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java @@ -10,6 +10,9 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -22,54 +25,53 @@ import java.util.List; /** * 数据字典信息 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "数据字典信息控制器", tags = {"数据字典信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/dict/data") -public class SysDictDataController extends BaseController -{ - @Autowired - private ISysDictDataService dictDataService; +public class SysDictDataController extends BaseController { - @Autowired - private ISysDictTypeService dictTypeService; + private final ISysDictDataService dictDataService; + private final ISysDictTypeService dictTypeService; + @ApiOperation("查询字典数据列表") @PreAuthorize("@ss.hasPermi('system:dict:list')") @GetMapping("/list") - public TableDataInfo list(SysDictData dictData) - { + public TableDataInfo list(SysDictData dictData) { return dictDataService.selectPageDictDataList(dictData); } + @ApiOperation("导出字典数据列表") @Log(title = "字典数据", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:dict:export')") @GetMapping("/export") - public void export(SysDictData dictData, HttpServletResponse response) - { + public void export(SysDictData dictData, HttpServletResponse response) { List list = dictDataService.selectDictDataList(dictData); - ExcelUtil.exportExcel(list, "字典数据", SysDictData.class, response); + ExcelUtil.exportExcel(list, "字典数据", SysDictData.class, response); } /** * 查询字典数据详细 */ + @ApiOperation("查询字典数据详细") @PreAuthorize("@ss.hasPermi('system:dict:query')") @GetMapping(value = "/{dictCode}") - public AjaxResult getInfo(@PathVariable Long dictCode) - { + public AjaxResult getInfo(@PathVariable Long dictCode) { return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); } /** * 根据字典类型查询字典数据信息 */ + @ApiOperation("根据字典类型查询字典数据信息") @GetMapping(value = "/type/{dictType}") - public AjaxResult dictType(@PathVariable String dictType) - { + public AjaxResult> dictType(@PathVariable String dictType) { List data = dictTypeService.selectDictDataByType(dictType); - if (StringUtils.isNull(data)) - { - data = new ArrayList(); + if (StringUtils.isNull(data)) { + data = new ArrayList<>(); } return AjaxResult.success(data); } @@ -77,11 +79,11 @@ public class SysDictDataController extends BaseController /** * 新增字典类型 */ + @ApiOperation("新增字典类型") @PreAuthorize("@ss.hasPermi('system:dict:add')") @Log(title = "字典数据", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysDictData dict) - { + public AjaxResult add(@Validated @RequestBody SysDictData dict) { dict.setCreateBy(getUsername()); return toAjax(dictDataService.insertDictData(dict)); } @@ -89,11 +91,11 @@ public class SysDictDataController extends BaseController /** * 修改保存字典类型 */ + @ApiOperation("修改保存字典类型") @PreAuthorize("@ss.hasPermi('system:dict:edit')") @Log(title = "字典数据", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysDictData dict) - { + public AjaxResult edit(@Validated @RequestBody SysDictData dict) { dict.setUpdateBy(getUsername()); return toAjax(dictDataService.updateDictData(dict)); } @@ -101,11 +103,11 @@ public class SysDictDataController extends BaseController /** * 删除字典类型 */ + @ApiOperation("删除字典类型") @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.DELETE) @DeleteMapping("/{dictCodes}") - public AjaxResult remove(@PathVariable Long[] dictCodes) - { + public AjaxResult remove(@PathVariable Long[] dictCodes) { dictDataService.deleteDictDataByIds(dictCodes); return success(); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java index eb5c0b5c9..1e21a41b4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java @@ -9,6 +9,9 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.service.ISysDictTypeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -20,51 +23,52 @@ import java.util.List; /** * 数据字典信息 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "数据字典信息控制器", tags = {"数据字典信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/dict/type") -public class SysDictTypeController extends BaseController -{ - @Autowired - private ISysDictTypeService dictTypeService; +public class SysDictTypeController extends BaseController { + private final ISysDictTypeService dictTypeService; + + @ApiOperation("查询字典类型列表") @PreAuthorize("@ss.hasPermi('system:dict:list')") @GetMapping("/list") - public TableDataInfo list(SysDictType dictType) - { + public TableDataInfo list(SysDictType dictType) { return dictTypeService.selectPageDictTypeList(dictType); } + @ApiOperation("导出字典类型列表") @Log(title = "字典类型", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:dict:export')") @GetMapping("/export") - public void export(SysDictType dictType, HttpServletResponse response) - { + public void export(SysDictType dictType, HttpServletResponse response) { List list = dictTypeService.selectDictTypeList(dictType); - ExcelUtil.exportExcel(list, "字典类型", SysDictType.class, response); + ExcelUtil.exportExcel(list, "字典类型", SysDictType.class, response); } /** * 查询字典类型详细 */ + @ApiOperation("查询字典类型详细") @PreAuthorize("@ss.hasPermi('system:dict:query')") @GetMapping(value = "/{dictId}") - public AjaxResult getInfo(@PathVariable Long dictId) - { + public AjaxResult getInfo(@PathVariable Long dictId) { return AjaxResult.success(dictTypeService.selectDictTypeById(dictId)); } /** * 新增字典类型 */ + @ApiOperation("新增字典类型") @PreAuthorize("@ss.hasPermi('system:dict:add')") @Log(title = "字典类型", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysDictType dict) - { - if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) - { + public AjaxResult add(@Validated @RequestBody SysDictType dict) { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { return AjaxResult.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); } dict.setCreateBy(getUsername()); @@ -74,13 +78,12 @@ public class SysDictTypeController extends BaseController /** * 修改字典类型 */ + @ApiOperation("修改字典类型") @PreAuthorize("@ss.hasPermi('system:dict:edit')") @Log(title = "字典类型", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysDictType dict) - { - if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) - { + public AjaxResult edit(@Validated @RequestBody SysDictType dict) { + if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict))) { return AjaxResult.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); } dict.setUpdateBy(getUsername()); @@ -90,11 +93,11 @@ public class SysDictTypeController extends BaseController /** * 删除字典类型 */ + @ApiOperation("删除字典类型") @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.DELETE) @DeleteMapping("/{dictIds}") - public AjaxResult remove(@PathVariable Long[] dictIds) - { + public AjaxResult remove(@PathVariable Long[] dictIds) { dictTypeService.deleteDictTypeByIds(dictIds); return success(); } @@ -102,11 +105,11 @@ public class SysDictTypeController extends BaseController /** * 刷新字典缓存 */ + @ApiOperation("刷新字典缓存") @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.CLEAN) @DeleteMapping("/refreshCache") - public AjaxResult refreshCache() - { + public AjaxResult refreshCache() { dictTypeService.resetDictCache(); return AjaxResult.success(); } @@ -114,9 +117,9 @@ public class SysDictTypeController extends BaseController /** * 获取字典选择框列表 */ + @ApiOperation("获取字典选择框列表") @GetMapping("/optionselect") - public AjaxResult optionselect() - { + public AjaxResult> optionselect() { List dictTypes = dictTypeService.selectDictTypeAll(); return AjaxResult.success(dictTypes); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java index bfb532e36..541333698 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java @@ -1,29 +1,35 @@ package com.ruoyi.web.controller.system; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.utils.StringUtils; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * 首页 * - * @author ruoyi + * @author Lion Li */ +@Api(value = "首页控制器", tags = {"首页管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController -public class SysIndexController -{ - /** 系统基础配置 */ - @Autowired - private RuoYiConfig ruoyiConfig; +public class SysIndexController { + + /** + * 系统基础配置 + */ + private final RuoYiConfig ruoyiConfig; /** * 访问首页,提示语 */ - @RequestMapping("/") - public String index() - { + @ApiOperation("访问首页,提示语") + @GetMapping("/") + public String index() { return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion()); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 287d4c587..c231acb62 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -6,10 +6,15 @@ import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.service.ISysMenuService; import com.ruoyi.system.service.SysLoginService; import com.ruoyi.system.service.SysPermissionService; -import com.ruoyi.system.service.ISysMenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -23,19 +28,17 @@ import java.util.Set; /** * 登录验证 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "数据字典信息控制器", tags = {"数据字典信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController -public class SysLoginController -{ - @Autowired - private SysLoginService loginService; +public class SysLoginController { - @Autowired - private ISysMenuService menuService; - - @Autowired - private SysPermissionService permissionService; + private final SysLoginService loginService; + private final ISysMenuService menuService; + private final SysPermissionService permissionService; /** * 登录方法 @@ -43,10 +46,10 @@ public class SysLoginController * @param loginBody 登录信息 * @return 结果 */ + @ApiOperation("登录方法") @PostMapping("/login") - public AjaxResult login(@RequestBody LoginBody loginBody) - { - Map ajax = new HashMap<>(); + public AjaxResult> login(@RequestBody LoginBody loginBody) { + Map ajax = new HashMap<>(); // 生成令牌 String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), loginBody.getUuid()); @@ -59,15 +62,15 @@ public class SysLoginController * * @return 用户信息 */ + @ApiOperation("获取用户信息") @GetMapping("getInfo") - public AjaxResult getInfo() - { + public AjaxResult> getInfo() { SysUser user = SecurityUtils.getLoginUser().getUser(); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 Set permissions = permissionService.getMenuPermission(user); - Map ajax = new HashMap<>(); + Map ajax = new HashMap<>(); ajax.put("user", user); ajax.put("roles", roles); ajax.put("permissions", permissions); @@ -79,9 +82,9 @@ public class SysLoginController * * @return 路由信息 */ + @ApiOperation("获取路由信息") @GetMapping("getRouters") - public AjaxResult getRouters() - { + public AjaxResult> getRouters() { Long userId = SecurityUtils.getUserId(); List menus = menuService.selectMenuTreeByUserId(userId); return AjaxResult.success(menuService.buildMenus(menus)); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java index d679bfb31..b0537f2db 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java @@ -4,10 +4,14 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysMenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -20,22 +24,24 @@ import java.util.Map; /** * 菜单信息 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "菜单信息控制器", tags = {"菜单信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/menu") -public class SysMenuController extends BaseController -{ - @Autowired - private ISysMenuService menuService; +public class SysMenuController extends BaseController { + + private final ISysMenuService menuService; /** * 获取菜单列表 */ + @ApiOperation("获取菜单列表") @PreAuthorize("@ss.hasPermi('system:menu:list')") @GetMapping("/list") - public AjaxResult list(SysMenu menu) - { + public AjaxResult> list(SysMenu menu) { List menus = menuService.selectMenuList(menu, getUserId()); return AjaxResult.success(menus); } @@ -43,19 +49,19 @@ public class SysMenuController extends BaseController /** * 根据菜单编号获取详细信息 */ + @ApiOperation("根据菜单编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:menu:query')") @GetMapping(value = "/{menuId}") - public AjaxResult getInfo(@PathVariable Long menuId) - { + public AjaxResult getInfo(@PathVariable Long menuId) { return AjaxResult.success(menuService.selectMenuById(menuId)); } /** * 获取菜单下拉树列表 */ + @ApiOperation("获取菜单下拉树列表") @GetMapping("/treeselect") - public AjaxResult treeselect(SysMenu menu) - { + public AjaxResult> treeselect(SysMenu menu) { List menus = menuService.selectMenuList(menu, getUserId()); return AjaxResult.success(menuService.buildMenuTreeSelect(menus)); } @@ -63,11 +69,11 @@ public class SysMenuController extends BaseController /** * 加载对应角色菜单列表树 */ + @ApiOperation("加载对应角色菜单列表树") @GetMapping(value = "/roleMenuTreeselect/{roleId}") - public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) - { - List menus = menuService.selectMenuList(getUserId()); - Map ajax = new HashMap<>(); + public AjaxResult> roleMenuTreeselect(@PathVariable("roleId") Long roleId) { + List menus = menuService.selectMenuList(getUserId()); + Map ajax = new HashMap<>(); ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); ajax.put("menus", menuService.buildMenuTreeSelect(menus)); return AjaxResult.success(ajax); @@ -76,17 +82,14 @@ public class SysMenuController extends BaseController /** * 新增菜单 */ + @ApiOperation("新增菜单") @PreAuthorize("@ss.hasPermi('system:menu:add')") @Log(title = "菜单管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysMenu menu) - { - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) - { + public AjaxResult add(@Validated @RequestBody SysMenu menu) { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); - } - else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) - { + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); } menu.setCreateBy(getUsername()); @@ -96,21 +99,16 @@ public class SysMenuController extends BaseController /** * 修改菜单 */ + @ApiOperation("修改菜单") @PreAuthorize("@ss.hasPermi('system:menu:edit')") @Log(title = "菜单管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysMenu menu) - { - if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) - { + public AjaxResult edit(@Validated @RequestBody SysMenu menu) { + if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu))) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); - } - else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) - { + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); - } - else if (menu.getMenuId().equals(menu.getParentId())) - { + } else if (menu.getMenuId().equals(menu.getParentId())) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); } menu.setUpdateBy(getUsername()); @@ -120,17 +118,15 @@ public class SysMenuController extends BaseController /** * 删除菜单 */ + @ApiOperation("删除菜单") @PreAuthorize("@ss.hasPermi('system:menu:remove')") @Log(title = "菜单管理", businessType = BusinessType.DELETE) @DeleteMapping("/{menuId}") - public AjaxResult remove(@PathVariable("menuId") Long menuId) - { - if (menuService.hasChildByMenuId(menuId)) - { + public AjaxResult remove(@PathVariable("menuId") Long menuId) { + if (menuService.hasChildByMenuId(menuId)) { return AjaxResult.error("存在子菜单,不允许删除"); } - if (menuService.checkMenuExistRole(menuId)) - { + if (menuService.checkMenuExistRole(menuId)) { return AjaxResult.error("菜单已分配,不允许删除"); } return toAjax(menuService.deleteMenuById(menuId)); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java index 55375a9d8..c288347f4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java @@ -1,17 +1,5 @@ package com.ruoyi.web.controller.system; -import java.util.List; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -19,47 +7,56 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.service.ISysNoticeService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; /** * 公告 信息操作处理 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "公告信息控制器", tags = {"公告信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/notice") -public class SysNoticeController extends BaseController -{ - @Autowired - private ISysNoticeService noticeService; +public class SysNoticeController extends BaseController { + + private final ISysNoticeService noticeService; /** * 获取通知公告列表 */ + @ApiOperation("获取通知公告列表") @PreAuthorize("@ss.hasPermi('system:notice:list')") @GetMapping("/list") - public TableDataInfo list(SysNotice notice) - { + public TableDataInfo list(SysNotice notice) { return noticeService.selectPageNoticeList(notice); } /** * 根据通知公告编号获取详细信息 */ + @ApiOperation("根据通知公告编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:notice:query')") @GetMapping(value = "/{noticeId}") - public AjaxResult getInfo(@PathVariable Long noticeId) - { + public AjaxResult getInfo(@PathVariable Long noticeId) { return AjaxResult.success(noticeService.selectNoticeById(noticeId)); } /** * 新增通知公告 */ + @ApiOperation("新增通知公告") @PreAuthorize("@ss.hasPermi('system:notice:add')") @Log(title = "通知公告", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysNotice notice) - { + public AjaxResult add(@Validated @RequestBody SysNotice notice) { notice.setCreateBy(getUsername()); return toAjax(noticeService.insertNotice(notice)); } @@ -67,11 +64,11 @@ public class SysNoticeController extends BaseController /** * 修改通知公告 */ + @ApiOperation("修改通知公告") @PreAuthorize("@ss.hasPermi('system:notice:edit')") @Log(title = "通知公告", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysNotice notice) - { + public AjaxResult edit(@Validated @RequestBody SysNotice notice) { notice.setUpdateBy(getUsername()); return toAjax(noticeService.updateNotice(notice)); } @@ -79,11 +76,11 @@ public class SysNoticeController extends BaseController /** * 删除通知公告 */ + @ApiOperation("删除通知公告") @PreAuthorize("@ss.hasPermi('system:notice:remove')") @Log(title = "通知公告", businessType = BusinessType.DELETE) @DeleteMapping("/{noticeIds}") - public AjaxResult remove(@PathVariable Long[] noticeIds) - { + public AjaxResult remove(@PathVariable Long[] noticeIds) { return toAjax(noticeService.deleteNoticeByIds(noticeIds)); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java index e72bd1f18..1756ce7a8 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssConfigController.java @@ -38,72 +38,73 @@ import java.util.Arrays; @RequestMapping("/system/oss/config") public class SysOssConfigController extends BaseController { - private final ISysOssConfigService iSysOssConfigService; + private final ISysOssConfigService iSysOssConfigService; - /** - * 查询对象存储配置列表 - */ - @ApiOperation("查询对象存储配置列表") - @PreAuthorize("@ss.hasPermi('system:oss:list')") - @GetMapping("/list") - public TableDataInfo list(@Validated(QueryGroup.class) SysOssConfigBo bo) { - return iSysOssConfigService.queryPageList(bo); - } + /** + * 查询对象存储配置列表 + */ + @ApiOperation("查询对象存储配置列表") + @PreAuthorize("@ss.hasPermi('system:oss:list')") + @GetMapping("/list") + public TableDataInfo list(@Validated(QueryGroup.class) SysOssConfigBo bo) { + return iSysOssConfigService.queryPageList(bo); + } - /** - * 获取对象存储配置详细信息 - */ - @ApiOperation("获取对象存储配置详细信息") - @PreAuthorize("@ss.hasPermi('system:oss:query')") - @GetMapping("/{ossConfigId}") - public AjaxResult getInfo(@NotNull(message = "主键不能为空") - @PathVariable("ossConfigId") Integer ossConfigId) { - return AjaxResult.success(iSysOssConfigService.queryById(ossConfigId)); - } + /** + * 获取对象存储配置详细信息 + */ + @ApiOperation("获取对象存储配置详细信息") + @PreAuthorize("@ss.hasPermi('system:oss:query')") + @GetMapping("/{ossConfigId}") + public AjaxResult getInfo(@NotNull(message = "主键不能为空") + @PathVariable("ossConfigId") Integer ossConfigId) { + return AjaxResult.success(iSysOssConfigService.queryById(ossConfigId)); + } - /** - * 新增对象存储配置 - */ - @ApiOperation("新增对象存储配置") - @PreAuthorize("@ss.hasPermi('system:oss:add')") - @Log(title = "对象存储配置", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public AjaxResult add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) { - return toAjax(iSysOssConfigService.insertByBo(bo) ? 1 : 0); - } + /** + * 新增对象存储配置 + */ + @ApiOperation("新增对象存储配置") + @PreAuthorize("@ss.hasPermi('system:oss:add')") + @Log(title = "对象存储配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public AjaxResult add(@Validated(AddGroup.class) @RequestBody SysOssConfigBo bo) { + return toAjax(iSysOssConfigService.insertByBo(bo) ? 1 : 0); + } - /** - * 修改对象存储配置 - */ - @ApiOperation("修改对象存储配置") - @PreAuthorize("@ss.hasPermi('system:oss:edit')") - @Log(title = "对象存储配置", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public AjaxResult edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) { - return toAjax(iSysOssConfigService.updateByBo(bo) ? 1 : 0); - } + /** + * 修改对象存储配置 + */ + @ApiOperation("修改对象存储配置") + @PreAuthorize("@ss.hasPermi('system:oss:edit')") + @Log(title = "对象存储配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public AjaxResult edit(@Validated(EditGroup.class) @RequestBody SysOssConfigBo bo) { + return toAjax(iSysOssConfigService.updateByBo(bo) ? 1 : 0); + } - /** - * 删除对象存储配置 - */ - @ApiOperation("删除对象存储配置") - @PreAuthorize("@ss.hasPermi('system:oss:remove')") - @Log(title = "对象存储配置", businessType = BusinessType.DELETE) - @DeleteMapping("/{ossConfigIds}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ossConfigIds) { - return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0); - } + /** + * 删除对象存储配置 + */ + @ApiOperation("删除对象存储配置") + @PreAuthorize("@ss.hasPermi('system:oss:remove')") + @Log(title = "对象存储配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ossConfigIds}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ossConfigIds) { + return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0); + } - /** - * 状态修改 - */ - @PreAuthorize("@ss.hasPermi('system:oss:edit')") - @Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE) - @PutMapping("/changeStatus") - public AjaxResult changeStatus(@RequestBody SysOssConfigBo bo) { - return toAjax(iSysOssConfigService.updateOssConfigStatus(bo)); - } + /** + * 状态修改 + */ + @ApiOperation("状态修改") + @PreAuthorize("@ss.hasPermi('system:oss:edit')") + @Log(title = "对象存储状态修改", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysOssConfigBo bo) { + return toAjax(iSysOssConfigService.updateOssConfigStatus(bo)); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java index 3c043534d..cfa4c7b9a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java @@ -38,8 +38,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; import java.io.IOException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashMap; import java.util.Map; @@ -56,92 +54,92 @@ import java.util.Map; @RequestMapping("/system/oss") public class SysOssController extends BaseController { - private final ISysOssService iSysOssService; - private final ISysConfigService iSysConfigService; + private final ISysOssService iSysOssService; + private final ISysConfigService iSysConfigService; - /** - * 查询OSS对象存储列表 - */ - @ApiOperation("查询OSS对象存储列表") - @PreAuthorize("@ss.hasPermi('system:oss:list')") - @GetMapping("/list") - public TableDataInfo list(@Validated(QueryGroup.class) SysOssBo bo) { - return iSysOssService.queryPageList(bo); - } + /** + * 查询OSS对象存储列表 + */ + @ApiOperation("查询OSS对象存储列表") + @PreAuthorize("@ss.hasPermi('system:oss:list')") + @GetMapping("/list") + public TableDataInfo list(@Validated(QueryGroup.class) SysOssBo bo) { + return iSysOssService.queryPageList(bo); + } - /** - * 上传OSS对象存储 - */ - @ApiOperation("上传OSS对象存储") - @ApiImplicitParams({ - @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), - }) - @PreAuthorize("@ss.hasPermi('system:oss:upload')") - @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) - @RepeatSubmit - @PostMapping("/upload") - public AjaxResult> upload(@RequestPart("file") MultipartFile file) { - if (ObjectUtil.isNull(file)) { - throw new ServiceException("上传文件不能为空"); - } - SysOss oss = iSysOssService.upload(file); - Map map = new HashMap<>(2); - map.put("url", oss.getUrl()); - map.put("fileName", oss.getFileName()); - return AjaxResult.success(map); - } + /** + * 上传OSS对象存储 + */ + @ApiOperation("上传OSS对象存储") + @ApiImplicitParams({ + @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), + }) + @PreAuthorize("@ss.hasPermi('system:oss:upload')") + @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) + @RepeatSubmit + @PostMapping("/upload") + public AjaxResult> upload(@RequestPart("file") MultipartFile file) { + if (ObjectUtil.isNull(file)) { + throw new ServiceException("上传文件不能为空"); + } + SysOss oss = iSysOssService.upload(file); + Map map = new HashMap<>(2); + map.put("url", oss.getUrl()); + map.put("fileName", oss.getFileName()); + return AjaxResult.success(map); + } - @ApiOperation("下载OSS对象存储") - @PreAuthorize("@ss.hasPermi('system:oss:download')") - @GetMapping("/download/{ossId}") - public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { - SysOss sysOss = iSysOssService.getById(ossId); - if (ObjectUtil.isNull(sysOss)) { - throw new ServiceException("文件数据不存在!"); - } - response.reset(); - response.addHeader("Access-Control-Allow-Origin", "*"); - response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); - FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); - response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); - long data; - try { - data = HttpUtil.download(sysOss.getUrl(), response.getOutputStream(), false); - } catch (HttpException e) { - if (e.getMessage().contains("403")) { - throw new ServiceException("无读取权限, 请在对应的OSS开启'公有读'权限!"); - } else { - throw new ServiceException(e.getMessage()); - } - } - response.setContentLength(Convert.toInt(data)); - } + @ApiOperation("下载OSS对象存储") + @PreAuthorize("@ss.hasPermi('system:oss:download')") + @GetMapping("/download/{ossId}") + public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { + SysOss sysOss = iSysOssService.getById(ossId); + if (ObjectUtil.isNull(sysOss)) { + throw new ServiceException("文件数据不存在!"); + } + response.reset(); + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); + FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); + long data; + try { + data = HttpUtil.download(sysOss.getUrl(), response.getOutputStream(), false); + } catch (HttpException e) { + if (e.getMessage().contains("403")) { + throw new ServiceException("无读取权限, 请在对应的OSS开启'公有读'权限!"); + } else { + throw new ServiceException(e.getMessage()); + } + } + response.setContentLength(Convert.toInt(data)); + } - /** - * 删除OSS对象存储 - */ - @ApiOperation("删除OSS对象存储") - @PreAuthorize("@ss.hasPermi('system:oss:remove')") - @Log(title = "OSS对象存储" , businessType = BusinessType.DELETE) - @DeleteMapping("/{ossIds}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ossIds) { - return toAjax(iSysOssService.deleteWithValidByIds(Arrays.asList(ossIds), true) ? 1 : 0); - } + /** + * 删除OSS对象存储 + */ + @ApiOperation("删除OSS对象存储") + @PreAuthorize("@ss.hasPermi('system:oss:remove')") + @Log(title = "OSS对象存储", businessType = BusinessType.DELETE) + @DeleteMapping("/{ossIds}") + public AjaxResult remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ossIds) { + return toAjax(iSysOssService.deleteWithValidByIds(Arrays.asList(ossIds), true) ? 1 : 0); + } - /** - * 变更图片列表预览状态 - */ - @ApiOperation("变更图片列表预览状态") - @PreAuthorize("@ss.hasPermi('system:oss:edit')") - @Log(title = "OSS对象存储" , businessType = BusinessType.UPDATE) - @PutMapping("/changePreviewListResource") - public AjaxResult changePreviewListResource(@RequestBody String body) { - Map map = JsonUtils.parseMap(body); - SysConfig config = iSysConfigService.getOne(new LambdaQueryWrapper() - .eq(SysConfig::getConfigKey, CloudConstant.PEREVIEW_LIST_RESOURCE_KEY)); - config.setConfigValue(map.get("previewListResource").toString()); - return toAjax(iSysConfigService.updateConfig(config)); - } + /** + * 变更图片列表预览状态 + */ + @ApiOperation("变更图片列表预览状态") + @PreAuthorize("@ss.hasPermi('system:oss:edit')") + @Log(title = "OSS对象存储", businessType = BusinessType.UPDATE) + @PutMapping("/changePreviewListResource") + public AjaxResult changePreviewListResource(@RequestBody String body) { + Map map = JsonUtils.parseMap(body); + SysConfig config = iSysConfigService.getOne(new LambdaQueryWrapper() + .eq(SysConfig::getConfigKey, CloudConstant.PEREVIEW_LIST_RESOURCE_KEY)); + config.setConfigValue(map.get("previewListResource").toString()); + return toAjax(iSysConfigService.updateConfig(config)); + } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java index 93d4d46bb..d90cabeab 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java @@ -9,6 +9,9 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.service.ISysPostService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -20,58 +23,57 @@ import java.util.List; /** * 岗位信息操作处理 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "岗位信息控制器", tags = {"岗位信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/post") -public class SysPostController extends BaseController -{ - @Autowired - private ISysPostService postService; +public class SysPostController extends BaseController { + + private final ISysPostService postService; /** * 获取岗位列表 */ + @ApiOperation("获取岗位列表") @PreAuthorize("@ss.hasPermi('system:post:list')") @GetMapping("/list") - public TableDataInfo list(SysPost post) - { + public TableDataInfo list(SysPost post) { return postService.selectPagePostList(post); } + @ApiOperation("导出岗位列表") @Log(title = "岗位管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:post:export')") @GetMapping("/export") - public void export(SysPost post, HttpServletResponse response) - { + public void export(SysPost post, HttpServletResponse response) { List list = postService.selectPostList(post); - ExcelUtil.exportExcel(list, "岗位数据", SysPost.class, response); + ExcelUtil.exportExcel(list, "岗位数据", SysPost.class, response); } /** * 根据岗位编号获取详细信息 */ + @ApiOperation("根据岗位编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:post:query')") @GetMapping(value = "/{postId}") - public AjaxResult getInfo(@PathVariable Long postId) - { + public AjaxResult getInfo(@PathVariable Long postId) { return AjaxResult.success(postService.selectPostById(postId)); } /** * 新增岗位 */ + @ApiOperation("新增岗位") @PreAuthorize("@ss.hasPermi('system:post:add')") @Log(title = "岗位管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysPost post) - { - if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) - { + public AjaxResult add(@Validated @RequestBody SysPost post) { + if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) { return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); - } - else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) - { + } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) { return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); } post.setCreateBy(getUsername()); @@ -81,17 +83,14 @@ public class SysPostController extends BaseController /** * 修改岗位 */ + @ApiOperation("修改岗位") @PreAuthorize("@ss.hasPermi('system:post:edit')") @Log(title = "岗位管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysPost post) - { - if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) - { + public AjaxResult edit(@Validated @RequestBody SysPost post) { + if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post))) { return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); - } - else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) - { + } else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post))) { return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); } post.setUpdateBy(getUsername()); @@ -101,20 +100,20 @@ public class SysPostController extends BaseController /** * 删除岗位 */ + @ApiOperation("删除岗位") @PreAuthorize("@ss.hasPermi('system:post:remove')") @Log(title = "岗位管理", businessType = BusinessType.DELETE) @DeleteMapping("/{postIds}") - public AjaxResult remove(@PathVariable Long[] postIds) - { + public AjaxResult remove(@PathVariable Long[] postIds) { return toAjax(postService.deletePostByIds(postIds)); } /** * 获取岗位选择框列表 */ + @ApiOperation("获取岗位选择框列表") @GetMapping("/optionselect") - public AjaxResult optionselect() - { + public AjaxResult> optionselect() { List posts = postService.selectPostAll(); return AjaxResult.success(posts); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java index 66dfd0791..d037e7951 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -6,49 +6,49 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.core.service.TokenService; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.service.ISysOssService; import com.ruoyi.system.service.ISysUserService; +import io.swagger.annotations.*; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; import java.util.HashMap; import java.util.Map; /** * 个人信息 业务处理 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "个人信息控制器", tags = {"个人信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/user/profile") -public class SysProfileController extends BaseController -{ - @Autowired - private ISysUserService userService; +public class SysProfileController extends BaseController { - @Autowired - private TokenService tokenService; - - @Autowired - private ISysOssService iSysOssService; + private final ISysUserService userService; + private final TokenService tokenService; + private final ISysOssService iSysOssService; /** * 个人信息 */ + @ApiOperation("个人信息") @GetMapping - public AjaxResult profile() - { + public AjaxResult> profile() { LoginUser loginUser = getLoginUser(); SysUser user = loginUser.getUser(); - Map ajax = new HashMap<>(); - ajax.put("user", user); + Map ajax = new HashMap<>(); + ajax.put("user", user); ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); return AjaxResult.success(ajax); @@ -57,26 +57,23 @@ public class SysProfileController extends BaseController /** * 修改用户 */ + @ApiOperation("修改用户") @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult updateProfile(@RequestBody SysUser user) - { + public AjaxResult updateProfile(@RequestBody SysUser user) { if (StringUtils.isNotEmpty(user.getPhonenumber()) - && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) - { + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); } if (StringUtils.isNotEmpty(user.getEmail()) - && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) - { + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } LoginUser loginUser = getLoginUser(); SysUser sysUser = loginUser.getUser(); user.setUserId(sysUser.getUserId()); user.setPassword(null); - if (userService.updateUserProfile(user) > 0) - { + if (userService.updateUserProfile(user) > 0) { // 更新缓存用户信息 sysUser.setNickName(user.getNickName()); sysUser.setPhonenumber(user.getPhonenumber()); @@ -91,23 +88,20 @@ public class SysProfileController extends BaseController /** * 重置密码 */ + @ApiOperation("重置密码") @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping("/updatePwd") - public AjaxResult updatePwd(String oldPassword, String newPassword) - { + public AjaxResult updatePwd(String oldPassword, String newPassword) { LoginUser loginUser = getLoginUser(); String userName = loginUser.getUsername(); String password = loginUser.getPassword(); - if (!SecurityUtils.matchesPassword(oldPassword, password)) - { + if (!SecurityUtils.matchesPassword(oldPassword, password)) { return AjaxResult.error("修改密码失败,旧密码错误"); } - if (SecurityUtils.matchesPassword(newPassword, password)) - { + if (SecurityUtils.matchesPassword(newPassword, password)) { return AjaxResult.error("新密码不能与旧密码相同"); } - if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) - { + if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) { // 更新缓存用户密码 loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); tokenService.setLoginUser(loginUser); @@ -119,18 +113,19 @@ public class SysProfileController extends BaseController /** * 头像上传 */ + @ApiOperation("头像上传") + @ApiImplicitParams({ + @ApiImplicitParam(name = "file", value = "用户头像", dataType = "java.io.File", required = true), + }) @Log(title = "用户头像", businessType = BusinessType.UPDATE) @PostMapping("/avatar") - public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException - { - if (!file.isEmpty()) - { + public AjaxResult> avatar(@RequestPart("avatarfile") MultipartFile file) { + Map ajax = new HashMap<>(); + if (!file.isEmpty()) { LoginUser loginUser = getLoginUser(); - SysOss oss = iSysOssService.upload(file); - String avatar = oss.getUrl(); - if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) - { - Map ajax = new HashMap<>(); + SysOss oss = iSysOssService.upload(file); + String avatar = oss.getUrl(); + if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) { ajax.put("imgUrl", avatar); // 更新缓存用户头像 loginUser.getUser().setAvatar(avatar); @@ -138,6 +133,6 @@ public class SysProfileController extends BaseController return AjaxResult.success(ajax); } } - return AjaxResult.error("上传图片异常,请联系管理员"); + return AjaxResult.error("上传图片异常,请联系管理员", ajax); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java index 64904a0cc..11dc6ebc4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java @@ -4,9 +4,13 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.system.service.SysRegisterService; import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.SysRegisterService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -14,22 +18,21 @@ import org.springframework.web.bind.annotation.RestController; /** * 注册验证 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "注册验证控制器", tags = {"注册验证管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController -public class SysRegisterController extends BaseController -{ - @Autowired - private SysRegisterService registerService; +public class SysRegisterController extends BaseController { - @Autowired - private ISysConfigService configService; + private final SysRegisterService registerService; + private final ISysConfigService configService; + @ApiOperation("用户注册") @PostMapping("/register") - public AjaxResult register(@RequestBody RegisterBody user) - { - if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) - { + public AjaxResult register(@RequestBody RegisterBody user) { + if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { return error("当前系统没有开启注册功能!"); } String msg = registerService.register(user); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index e5f40326c..cd525c47e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -8,14 +8,17 @@ import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.core.service.TokenService; +import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.SysPermissionService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -27,47 +30,43 @@ import java.util.List; /** * 角色信息 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "角色信息控制器", tags = {"角色信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/role") -public class SysRoleController extends BaseController -{ - @Autowired - private ISysRoleService roleService; +public class SysRoleController extends BaseController { - @Autowired - private TokenService tokenService; - - @Autowired - private SysPermissionService permissionService; - - @Autowired - private ISysUserService userService; + private final ISysRoleService roleService; + private final TokenService tokenService; + private final ISysUserService userService; + private final SysPermissionService permissionService; + @ApiOperation("查询角色信息列表") @PreAuthorize("@ss.hasPermi('system:role:list')") @GetMapping("/list") - public TableDataInfo list(SysRole role) - { + public TableDataInfo list(SysRole role) { return roleService.selectPageRoleList(role); } + @ApiOperation("导出角色信息列表") @Log(title = "角色管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:role:export')") @GetMapping("/export") - public void export(SysRole role, HttpServletResponse response) - { + public void export(SysRole role, HttpServletResponse response) { List list = roleService.selectRoleList(role); - ExcelUtil.exportExcel(list, "角色数据", SysRole.class, response); + ExcelUtil.exportExcel(list, "角色数据", SysRole.class, response); } /** * 根据角色编号获取详细信息 */ + @ApiOperation("根据角色编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:role:query')") @GetMapping(value = "/{roleId}") - public AjaxResult getInfo(@PathVariable Long roleId) - { + public AjaxResult getInfo(@PathVariable Long roleId) { roleService.checkRoleDataScope(roleId); return AjaxResult.success(roleService.selectRoleById(roleId)); } @@ -75,17 +74,14 @@ public class SysRoleController extends BaseController /** * 新增角色 */ + @ApiOperation("新增角色") @PreAuthorize("@ss.hasPermi('system:role:add')") @Log(title = "角色管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysRole role) - { - if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) - { + public AjaxResult add(@Validated @RequestBody SysRole role) { + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); - } - else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) - { + } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) { return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); } role.setCreateBy(getUsername()); @@ -96,28 +92,23 @@ public class SysRoleController extends BaseController /** * 修改保存角色 */ + @ApiOperation("修改保存角色") @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysRole role) - { + public AjaxResult edit(@Validated @RequestBody SysRole role) { roleService.checkRoleAllowed(role); - if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) - { + if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role))) { return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); - } - else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) - { + } else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role))) { return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); } role.setUpdateBy(getUsername()); - if (roleService.updateRole(role) > 0) - { + if (roleService.updateRole(role) > 0) { // 更新缓存用户权限 LoginUser loginUser = getLoginUser(); - if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) - { + if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) { loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); tokenService.setLoginUser(loginUser); @@ -130,11 +121,11 @@ public class SysRoleController extends BaseController /** * 修改保存数据权限 */ + @ApiOperation("修改保存数据权限") @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.UPDATE) @PutMapping("/dataScope") - public AjaxResult dataScope(@RequestBody SysRole role) - { + public AjaxResult dataScope(@RequestBody SysRole role) { roleService.checkRoleAllowed(role); return toAjax(roleService.authDataScope(role)); } @@ -142,11 +133,11 @@ public class SysRoleController extends BaseController /** * 状态修改 */ + @ApiOperation("状态修改") @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") - public AjaxResult changeStatus(@RequestBody SysRole role) - { + public AjaxResult changeStatus(@RequestBody SysRole role) { roleService.checkRoleAllowed(role); role.setUpdateBy(getUsername()); return toAjax(roleService.updateRoleStatus(role)); @@ -155,74 +146,74 @@ public class SysRoleController extends BaseController /** * 删除角色 */ + @ApiOperation("删除角色") @PreAuthorize("@ss.hasPermi('system:role:remove')") @Log(title = "角色管理", businessType = BusinessType.DELETE) @DeleteMapping("/{roleIds}") - public AjaxResult remove(@PathVariable Long[] roleIds) - { + public AjaxResult remove(@PathVariable Long[] roleIds) { return toAjax(roleService.deleteRoleByIds(roleIds)); } /** * 获取角色选择框列表 */ + @ApiOperation("获取角色选择框列表") @PreAuthorize("@ss.hasPermi('system:role:query')") @GetMapping("/optionselect") - public AjaxResult optionselect() - { + public AjaxResult> optionselect() { return AjaxResult.success(roleService.selectRoleAll()); } /** * 查询已分配用户角色列表 */ + @ApiOperation("查询已分配用户角色列表") @PreAuthorize("@ss.hasPermi('system:role:list')") @GetMapping("/authUser/allocatedList") - public TableDataInfo allocatedList(SysUser user) - { - return userService.selectAllocatedList(user); + public TableDataInfo allocatedList(SysUser user) { + return userService.selectAllocatedList(user); } /** * 查询未分配用户角色列表 */ + @ApiOperation("查询未分配用户角色列表") @PreAuthorize("@ss.hasPermi('system:role:list')") @GetMapping("/authUser/unallocatedList") - public TableDataInfo unallocatedList(SysUser user) - { + public TableDataInfo unallocatedList(SysUser user) { return userService.selectUnallocatedList(user); } /** * 取消授权用户 */ + @ApiOperation("取消授权用户") @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) @PutMapping("/authUser/cancel") - public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) - { + public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) { return toAjax(roleService.deleteAuthUser(userRole)); } /** * 批量取消授权用户 */ + @ApiOperation("批量取消授权用户") @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) @PutMapping("/authUser/cancelAll") - public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) - { + public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) { return toAjax(roleService.deleteAuthUsers(roleId, userIds)); } /** * 批量选择用户授权 */ + @ApiOperation("批量选择用户授权") @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) @PutMapping("/authUser/selectAll") - public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) - { + public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) { return toAjax(roleService.insertAuthUsers(roleId, userIds)); } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java index 28c9f15ef..77c8e3613 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -20,6 +20,11 @@ import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.service.ISysPostService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -36,81 +41,81 @@ import java.util.stream.Collectors; /** * 用户信息 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "用户信息控制器", tags = {"用户信息管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/system/user") -public class SysUserController extends BaseController -{ - @Autowired - private ISysUserService userService; +public class SysUserController extends BaseController { - @Autowired - private ISysRoleService roleService; - - @Autowired - private ISysPostService postService; + private final ISysUserService userService; + private final ISysRoleService roleService; + private final ISysPostService postService; /** * 获取用户列表 */ + @ApiOperation("获取用户列表") @PreAuthorize("@ss.hasPermi('system:user:list')") @GetMapping("/list") - public TableDataInfo list(SysUser user) - { + public TableDataInfo list(SysUser user) { return userService.selectPageUserList(user); } + @ApiOperation("导出用户列表") @Log(title = "用户管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:user:export')") @GetMapping("/export") - public void export(SysUser user, HttpServletResponse response) - { + public void export(SysUser user, HttpServletResponse response) { List list = userService.selectUserList(user); - List listVo = BeanUtil.copyToList(list, SysUserExportVo.class); - for (int i = 0; i < list.size(); i++) { - SysDept dept = list.get(i).getDept(); - SysUserExportVo vo = listVo.get(i); - if (ObjectUtil.isNotEmpty(dept)) { - vo.setDeptName(dept.getDeptName()); - vo.setLeader(dept.getLeader()); - } - } - ExcelUtil.exportExcel(listVo, "用户数据", SysUserExportVo.class, response); + List listVo = BeanUtil.copyToList(list, SysUserExportVo.class); + for (int i = 0; i < list.size(); i++) { + SysDept dept = list.get(i).getDept(); + SysUserExportVo vo = listVo.get(i); + if (ObjectUtil.isNotEmpty(dept)) { + vo.setDeptName(dept.getDeptName()); + vo.setLeader(dept.getLeader()); + } + } + ExcelUtil.exportExcel(listVo, "用户数据", SysUserExportVo.class, response); } + @ApiOperation("导入用户列表") + @ApiImplicitParams({ + @ApiImplicitParam(name = "file", value = "导入文件", dataType = "java.io.File", required = true), + }) @Log(title = "用户管理", businessType = BusinessType.IMPORT) @PreAuthorize("@ss.hasPermi('system:user:import')") @PostMapping("/importData") - public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception - { - List userListVo = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class); - List userList = BeanUtil.copyToList(userListVo, SysUser.class); + public AjaxResult importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception { + List userListVo = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class); + List userList = BeanUtil.copyToList(userListVo, SysUser.class); String operName = getUsername(); String message = userService.importUser(userList, updateSupport, operName); return AjaxResult.success(message); } + @ApiOperation("下载导入模板") @GetMapping("/importTemplate") - public void importTemplate(HttpServletResponse response) - { - ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", SysUserImportVo.class, response); + public void importTemplate(HttpServletResponse response) { + ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", SysUserImportVo.class, response); } /** * 根据用户编号获取详细信息 */ + @ApiOperation("根据用户编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:user:query')") - @GetMapping(value = { "/", "/{userId}" }) - public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) - { - userService.checkUserDataScope(userId); + @GetMapping(value = {"/", "/{userId}"}) + public AjaxResult> getInfo(@PathVariable(value = "userId", required = false) Long userId) { + userService.checkUserDataScope(userId); Map ajax = new HashMap<>(); List roles = roleService.selectRoleAll(); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); ajax.put("posts", postService.selectPostAll()); - if (StringUtils.isNotNull(userId)) - { + if (StringUtils.isNotNull(userId)) { ajax.put("user", userService.selectUserById(userId)); ajax.put("postIds", postService.selectPostListByUserId(userId)); ajax.put("roleIds", roleService.selectRoleListByUserId(userId)); @@ -121,23 +126,18 @@ public class SysUserController extends BaseController /** * 新增用户 */ + @ApiOperation("新增用户") @PreAuthorize("@ss.hasPermi('system:user:add')") @Log(title = "用户管理", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@Validated @RequestBody SysUser user) - { - if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) - { + public AjaxResult add(@Validated @RequestBody SysUser user) { + if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))) { return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); - } - else if (StringUtils.isNotEmpty(user.getPhonenumber()) - && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) - { + } else if (StringUtils.isNotEmpty(user.getPhonenumber()) + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); - } - else if (StringUtils.isNotEmpty(user.getEmail()) - && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) - { + } else if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } user.setCreateBy(getUsername()); @@ -148,20 +148,17 @@ public class SysUserController extends BaseController /** * 修改用户 */ + @ApiOperation("修改用户") @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@Validated @RequestBody SysUser user) - { + public AjaxResult edit(@Validated @RequestBody SysUser user) { userService.checkUserAllowed(user); if (StringUtils.isNotEmpty(user.getPhonenumber()) - && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) - { + && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))) { return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); - } - else if (StringUtils.isNotEmpty(user.getEmail()) - && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) - { + } else if (StringUtils.isNotEmpty(user.getEmail()) + && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } user.setUpdateBy(getUsername()); @@ -171,13 +168,12 @@ public class SysUserController extends BaseController /** * 删除用户 */ + @ApiOperation("删除用户") @PreAuthorize("@ss.hasPermi('system:user:remove')") @Log(title = "用户管理", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") - public AjaxResult remove(@PathVariable Long[] userIds) - { - if (ArrayUtil.contains(userIds, getUserId())) - { + public AjaxResult remove(@PathVariable Long[] userIds) { + if (ArrayUtil.contains(userIds, getUserId())) { return error("当前用户不能删除"); } return toAjax(userService.deleteUserByIds(userIds)); @@ -186,11 +182,11 @@ public class SysUserController extends BaseController /** * 重置密码 */ + @ApiOperation("重置密码") @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/resetPwd") - public AjaxResult resetPwd(@RequestBody SysUser user) - { + public AjaxResult resetPwd(@RequestBody SysUser user) { userService.checkUserAllowed(user); user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setUpdateBy(getUsername()); @@ -200,11 +196,11 @@ public class SysUserController extends BaseController /** * 状态修改 */ + @ApiOperation("状态修改") @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") - public AjaxResult changeStatus(@RequestBody SysUser user) - { + public AjaxResult changeStatus(@RequestBody SysUser user) { userService.checkUserAllowed(user); user.setUpdateBy(getUsername()); return toAjax(userService.updateUserStatus(user)); @@ -213,13 +209,13 @@ public class SysUserController extends BaseController /** * 根据用户编号获取授权角色 */ + @ApiOperation("根据用户编号获取授权角色") @PreAuthorize("@ss.hasPermi('system:user:query')") @GetMapping("/authRole/{userId}") - public AjaxResult authRole(@PathVariable("userId") Long userId) - { + public AjaxResult> authRole(@PathVariable("userId") Long userId) { SysUser user = userService.selectUserById(userId); List roles = roleService.selectRolesByUserId(userId); - Map ajax = new HashMap<>(); + Map ajax = new HashMap<>(); ajax.put("user", user); ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); return AjaxResult.success(ajax); @@ -228,11 +224,11 @@ public class SysUserController extends BaseController /** * 用户授权角色 */ + @ApiOperation("用户授权角色") @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.GRANT) @PutMapping("/authRole") - public AjaxResult insertAuthRole(Long userId, Long[] roleIds) - { + public AjaxResult insertAuthRole(Long userId, Long[] roleIds) { userService.insertUserAuth(userId, roleIds); return success(); } diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index dd1c6bab6..4d2da7514 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -248,10 +248,12 @@ swagger: email: crazylionli@163.com url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus groups: + - name: 代码生成模块 + basePackage: com.ruoyi.generator - name: 演示案例 basePackage: com.ruoyi.demo - name: 系统模块 - basePackage: com.ruoyi.admin + basePackage: com.ruoyi.web # 防止XSS攻击 xss: diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java index 408295a36..9343a4a08 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -2,7 +2,6 @@ package com.ruoyi.common.config; import lombok.Data; import lombok.Getter; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -10,34 +9,42 @@ import org.springframework.stereotype.Component; /** * 读取项目相关配置 * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @Component @ConfigurationProperties(prefix = "ruoyi") -public class RuoYiConfig -{ - /** 项目名称 */ +public class RuoYiConfig { + + /** + * 项目名称 + */ private String name; - /** 版本 */ + /** + * 版本 + */ private String version; - /** 版权年份 */ + /** + * 版权年份 + */ private String copyrightYear; - /** 实例演示开关 */ + /** + * 实例演示开关 + */ private boolean demoEnabled; - /** 获取地址开关 */ + /** + * 获取地址开关 + */ @Getter private static boolean addressEnabled; - public void setAddressEnabled(boolean addressEnabled) - { + public void setAddressEnabled(boolean addressEnabled) { RuoYiConfig.addressEnabled = addressEnabled; } 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 1d3c8a585..d6502db82 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 @@ -61,10 +61,10 @@ public class GenConstants "update_time", "remark", "version" }; /** Entity基类字段 */ - public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; + public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime" }; /** Tree基类字段 */ - public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" }; + public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "children" }; /** 文本框 */ public static final String HTML_INPUT = "input"; 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 a5a92f4d3..18a8d66e9 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,9 +1,10 @@ package com.ruoyi.common.core.domain; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.fasterxml.jackson.annotation.JsonIgnore; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; @@ -14,11 +15,10 @@ import java.util.Map; /** * Entity基类 * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) public class BaseEntity implements Serializable { @@ -28,43 +28,43 @@ public class BaseEntity implements Serializable { * 搜索值 */ @ApiModelProperty(value = "搜索值") + @TableField(exist = false) private String searchValue; /** * 创建者 */ @ApiModelProperty(value = "创建者") + @TableField(fill = FieldFill.INSERT) private String createBy; /** * 创建时间 */ @ApiModelProperty(value = "创建时间") + @TableField(fill = FieldFill.INSERT) private Date createTime; /** * 更新者 */ @ApiModelProperty(value = "更新者") + @TableField(fill = FieldFill.INSERT_UPDATE) private String updateBy; /** * 更新时间 */ @ApiModelProperty(value = "更新时间") + @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; - /** - * 备注 - */ - @ApiModelProperty(value = "备注") - private String remark; - /** * 请求参数 */ @JsonIgnore @ApiModelProperty(value = "请求参数") + @TableField(exist = false) private Map params = new HashMap<>(); } 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 8db10aa2b..f192263e7 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,9 +1,9 @@ package com.ruoyi.common.core.domain; +import com.baomidou.mybatisplus.annotation.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.util.ArrayList; @@ -12,12 +12,11 @@ import java.util.List; /** * Tree基类 * - * @author ruoyi + * @author Lion Li */ -@EqualsAndHashCode(callSuper = true) @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) public class TreeEntity extends BaseEntity { @@ -26,6 +25,7 @@ public class TreeEntity extends BaseEntity { /** * 父菜单名称 */ + @TableField(exist = false) @ApiModelProperty(value = "父菜单名称") private String parentName; @@ -39,17 +39,12 @@ public class TreeEntity extends BaseEntity { * 显示顺序 */ @ApiModelProperty(value = "显示顺序") - private Integer orderNum; - - /** - * 祖级列表 - */ - @ApiModelProperty(value = "祖级列表") - private String ancestors; + private String orderNum; /** * 子部门 */ + @TableField(exist = false) @ApiModelProperty(value = "子部门") private List children = new ArrayList<>(); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java index 2049486fc..963ac5c4d 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java @@ -3,7 +3,10 @@ package com.ruoyi.common.core.domain; import com.fasterxml.jackson.annotation.JsonInclude; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysMenu; -import lombok.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; @@ -12,39 +15,53 @@ import java.util.stream.Collectors; /** * Treeselect树结构实体类 - * - * @author ruoyi + * + * @author Lion Li */ @Data @NoArgsConstructor @Accessors(chain = true) -public class TreeSelect implements Serializable -{ +@ApiModel("树结构实体类") +public class TreeSelect implements Serializable { + private static final long serialVersionUID = 1L; - /** 节点ID */ + /** + * 节点ID + */ + @ApiModelProperty(value = "节点ID") private Long id; - /** 节点名称 */ + /** + * 节点名称 + */ + @ApiModelProperty(value = "节点名称") private String label; - /** 子节点 */ + /** + * 子节点 + */ + @ApiModelProperty(value = "子节点") @JsonInclude(JsonInclude.Include.NON_EMPTY) private List children; - public TreeSelect(SysDept dept) - { + public TreeSelect(SysDept dept) { this.id = dept.getDeptId(); this.label = dept.getDeptName(); - this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + this.children = dept.getChildren() + .stream() + .map(d -> new TreeSelect((SysDept) d)) + .collect(Collectors.toList()); } - public TreeSelect(SysMenu menu) - { + public TreeSelect(SysMenu menu) { this.id = menu.getMenuId(); this.label = menu.getMenuName(); - this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + this.children = menu.getChildren() + .stream() + .map(d -> new TreeSelect((SysMenu) d)) + .collect(Collectors.toList()); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java index f5132efe6..773858f64 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java @@ -8,15 +8,16 @@ import java.io.Serializable; import java.util.Date; /** - * 操作日志记录表 oper_log + * 通用操作日志实体 * - * @author ruoyi + * @author Lion Li */ @Data @NoArgsConstructor @Accessors(chain = true) public class OperLogDTO implements Serializable { + private static final long serialVersionUID = 1L; /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java index 62056e027..17ff6606e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java @@ -1,48 +1,44 @@ package com.ruoyi.common.core.domain.entity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.domain.TreeEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.*; /** * 部门表 sys_dept * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_dept") -public class SysDept implements Serializable { +@ApiModel("部门业务对象") +public class SysDept extends TreeEntity { private static final long serialVersionUID = 1L; /** * 部门ID */ - @TableId(value = "dept_id", type = IdType.AUTO) + @ApiModelProperty(value = "部门id") + @TableId(value = "dept_id") private Long deptId; - /** - * 父部门ID - */ - private Long parentId; - - /** - * 祖级列表 - */ - private String ancestors; - /** * 部门名称 */ + @ApiModelProperty(value = "部门名称") @NotBlank(message = "部门名称不能为空") @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") private String deptName; @@ -50,23 +46,27 @@ public class SysDept implements Serializable { /** * 显示顺序 */ + @ApiModelProperty(value = "显示顺序") @NotBlank(message = "显示顺序不能为空") private String orderNum; /** * 负责人 */ + @ApiModelProperty(value = "负责人") private String leader; /** * 联系电话 */ + @ApiModelProperty(value = "联系电话") @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") private String phone; /** * 邮箱 */ + @ApiModelProperty(value = "邮箱") @Email(message = "邮箱格式不正确") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") private String email; @@ -74,54 +74,20 @@ public class SysDept implements Serializable { /** * 部门状态:0正常,1停用 */ + @ApiModelProperty(value = "部门状态:0正常,1停用") private String status; /** * 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)") @TableLogic private String delFlag; /** - * 父部门名称 + * 祖级列表 */ - @TableField(exist = false) - private String parentName; - - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - - /** - * 子部门 - */ - @TableField(exist = false) - private List children = new ArrayList(); - - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); + @ApiModelProperty(value = "祖级列表") + private String ancestors; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java index 89ee1c1bc..3c572bd27 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java @@ -2,51 +2,54 @@ package com.ruoyi.common.core.domain.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 字典数据表 sys_dict_data * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_dict_data") @ExcelIgnoreUnannotated -public class SysDictData implements Serializable { - private static final long serialVersionUID = 1L; +@ApiModel("字典数据业务对象") +public class SysDictData extends BaseEntity { /** * 字典编码 */ + @ApiModelProperty(value = "字典编码") @ExcelProperty(value = "字典编码") - @TableId(value = "dict_code", type = IdType.AUTO) + @TableId(value = "dict_code") private Long dictCode; /** * 字典排序 */ + @ApiModelProperty(value = "字典排序") @ExcelProperty(value = "字典排序") private Long dictSort; /** * 字典标签 */ + @ApiModelProperty(value = "字典标签") @ExcelProperty(value = "字典标签") @NotBlank(message = "字典标签不能为空") @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") @@ -55,6 +58,7 @@ public class SysDictData implements Serializable { /** * 字典键值 */ + @ApiModelProperty(value = "字典键值") @ExcelProperty(value = "字典键值") @NotBlank(message = "字典键值不能为空") @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") @@ -63,6 +67,7 @@ public class SysDictData implements Serializable { /** * 字典类型 */ + @ApiModelProperty(value = "字典类型") @ExcelProperty(value = "字典类型") @NotBlank(message = "字典类型不能为空") @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") @@ -71,17 +76,20 @@ public class SysDictData implements Serializable { /** * 样式属性(其他样式扩展) */ + @ApiModelProperty(value = "样式属性(其他样式扩展)") @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") private String cssClass; /** * 表格字典样式 */ + @ApiModelProperty(value = "表格字典样式") private String listClass; /** * 是否默认(Y是 N否) */ + @ApiModelProperty(value = "是否默认(Y是 N否)") @ExcelProperty(value = "是否默认", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_yes_no") private String isDefault; @@ -89,47 +97,19 @@ public class SysDictData implements Serializable { /** * 状态(0正常 1停用) */ + @ApiModelProperty(value = "状态(0正常 1停用)") @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - public boolean getDefault() { - return UserConstants.YES.equals(this.isDefault) ? true : false; + return UserConstants.YES.equals(this.isDefault); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java index 35d9a60fe..c6c9b1a29 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java @@ -2,44 +2,46 @@ package com.ruoyi.common.core.domain.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 字典类型表 sys_dict_type * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_dict_type") @ExcelIgnoreUnannotated -public class SysDictType implements Serializable { - private static final long serialVersionUID = 1L; +@ApiModel("字典类型业务对象") +public class SysDictType extends BaseEntity { /** * 字典主键 */ + @ApiModelProperty(value = "字典主键") @ExcelProperty(value = "字典主键") - @TableId(value = "dict_id", type = IdType.AUTO) + @TableId(value = "dict_id") private Long dictId; /** * 字典名称 */ + @ApiModelProperty(value = "字典名称") @ExcelProperty(value = "字典名称") @NotBlank(message = "字典名称不能为空") @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") @@ -48,6 +50,7 @@ public class SysDictType implements Serializable { /** * 字典类型 */ + @ApiModelProperty(value = "字典类型") @ExcelProperty(value = "字典类型") @NotBlank(message = "字典类型不能为空") @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") @@ -56,43 +59,15 @@ public class SysDictType implements Serializable { /** * 状态(0正常 1停用) */ + @ApiModelProperty(value = "状态(0正常 1停用)") @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_normal_disable") private String status; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java index d2c5bbf94..30d074b75 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java @@ -1,154 +1,120 @@ package com.ruoyi.common.core.domain.entity; -import com.baomidou.mybatisplus.annotation.*; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.domain.TreeEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.*; /** * 菜单权限表 sys_menu * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_menu") -public class SysMenu implements Serializable { - private static final long serialVersionUID = 1L; +@ApiModel("菜单权限业务对象") +public class SysMenu extends TreeEntity { /** * 菜单ID */ - @TableId(value = "menu_id", type = IdType.AUTO) + @ApiModelProperty(value = "菜单ID") + @TableId(value = "menu_id") private Long menuId; /** * 菜单名称 */ + @ApiModelProperty(value = "菜单名称") @NotBlank(message = "菜单名称不能为空") @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") private String menuName; - /** - * 父菜单名称 - */ - @TableField(exist = false) - private String parentName; - - /** - * 父菜单ID - */ - private Long parentId; - /** * 显示顺序 */ + @ApiModelProperty(value = "显示顺序") @NotBlank(message = "显示顺序不能为空") private String orderNum; /** * 路由地址 */ + @ApiModelProperty(value = "路由地址") @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") private String path; /** * 组件路径 */ + @ApiModelProperty(value = "组件路径") @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") private String component; /** * 路由参数 */ + @ApiModelProperty(value = "路由参数") private String query; /** * 是否为外链(0是 1否) */ + @ApiModelProperty(value = "是否为外链(0是 1否)") private String isFrame; /** * 是否缓存(0缓存 1不缓存) */ + @ApiModelProperty(value = "是否缓存(0缓存 1不缓存)") private String isCache; /** * 类型(M目录 C菜单 F按钮) */ + @ApiModelProperty(value = "类型(M目录 C菜单 F按钮)") @NotBlank(message = "菜单类型不能为空") private String menuType; /** * 显示状态(0显示 1隐藏) */ + @ApiModelProperty(value = "显示状态(0显示 1隐藏)") private String visible; /** * 菜单状态(0显示 1隐藏) */ + @ApiModelProperty(value = "菜单状态(0显示 1隐藏)") private String status; /** * 权限字符串 */ + @ApiModelProperty(value = "权限字符串") @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") private String perms; /** * 菜单图标 */ + @ApiModelProperty(value = "菜单图标") private String icon; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - - /** - * 子菜单 - */ - @TableField(exist = false) - private List children = new ArrayList(); - } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java index 516352458..1d186db52 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -2,44 +2,48 @@ package com.ruoyi.common.core.domain.entity; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 角色表 sys_role * - * @author ruoyi + * @author Lion Li */ @Data @NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_role") @ExcelIgnoreUnannotated -public class SysRole implements Serializable { - private static final long serialVersionUID = 1L; +public class SysRole extends BaseEntity { /** * 角色ID */ + @ApiModelProperty(value = "角色ID") @ExcelProperty(value = "角色序号") - @TableId(value = "role_id", type = IdType.AUTO) + @TableId(value = "role_id") private Long roleId; /** * 角色名称 */ + @ApiModelProperty(value = "角色名称") @ExcelProperty(value = "角色名称") @NotBlank(message = "角色名称不能为空") @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") @@ -48,6 +52,7 @@ public class SysRole implements Serializable { /** * 角色权限 */ + @ApiModelProperty(value = "角色权限") @ExcelProperty(value = "角色权限") @NotBlank(message = "权限字符不能为空") @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") @@ -56,6 +61,7 @@ public class SysRole implements Serializable { /** * 角色排序 */ + @ApiModelProperty(value = "角色排序") @ExcelProperty(value = "角色排序") @NotBlank(message = "显示顺序不能为空") private String roleSort; @@ -63,6 +69,7 @@ public class SysRole implements Serializable { /** * 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ + @ApiModelProperty(value = "数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限)") @ExcelProperty(value = "数据范围", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") private String dataScope; @@ -70,16 +77,19 @@ public class SysRole implements Serializable { /** * 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ + @ApiModelProperty(value = "菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示)") private boolean menuCheckStrictly; /** * 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ + @ApiModelProperty(value = "部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 )") private boolean deptCheckStrictly; /** * 角色状态(0正常 1停用) */ + @ApiModelProperty(value = "角色状态(0正常 1停用)") @ExcelProperty(value = "角色状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private String status; @@ -87,59 +97,34 @@ public class SysRole implements Serializable { /** * 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)") @TableLogic private String delFlag; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - /** * 用户是否存在此角色标识 默认不存在 */ + @ApiModelProperty(value = "用户是否存在此角色标识 默认不存在") @TableField(exist = false) private boolean flag = false; /** * 菜单组 */ + @ApiModelProperty(value = "菜单组") @TableField(exist = false) private Long[] menuIds; /** * 部门组(数据权限) */ + @ApiModelProperty(value = "部门组(数据权限)") @TableField(exist = false) private Long[] deptIds; @@ -147,6 +132,7 @@ public class SysRole implements Serializable { this.roleId = roleId; } + @ApiModelProperty(value = "是否管理员") public boolean isAdmin() { return isAdmin(this.roleId); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java index 770998126..2fa57f5ca 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -3,46 +3,51 @@ package com.ruoyi.common.core.domain.entity; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * 用户对象 sys_user * - * @author ruoyi + * @author Lion Li */ @Data @NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_user") -public class SysUser implements Serializable { - private static final long serialVersionUID = 1L; +@ApiModel("用户信息业务对象") +public class SysUser extends BaseEntity { /** * 用户ID */ - @TableId(value = "user_id", type = IdType.AUTO) + @ApiModelProperty(value = "用户ID") + @TableId(value = "user_id") private Long userId; /** * 部门ID */ + @ApiModelProperty(value = "部门ID") private Long deptId; /** * 用户账号 */ + @ApiModelProperty(value = "用户账号") @NotBlank(message = "用户账号不能为空") @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") private String userName; @@ -50,12 +55,14 @@ public class SysUser implements Serializable { /** * 用户昵称 */ + @ApiModelProperty(value = "用户昵称") @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") private String nickName; /** * 用户邮箱 */ + @ApiModelProperty(value = "用户邮箱") @Email(message = "邮箱格式不正确") @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") private String email; @@ -63,21 +70,25 @@ public class SysUser implements Serializable { /** * 手机号码 */ + @ApiModelProperty(value = "手机号码") private String phonenumber; /** * 用户性别 */ + @ApiModelProperty(value = "用户性别") private String sex; /** * 用户头像 */ + @ApiModelProperty(value = "用户头像") private String avatar; /** * 密码 */ + @ApiModelProperty(value = "密码") @TableField( insertStrategy = FieldStrategy.NOT_EMPTY, updateStrategy = FieldStrategy.NOT_EMPTY, @@ -94,86 +105,66 @@ public class SysUser implements Serializable { /** * 帐号状态(0正常 1停用) */ + @ApiModelProperty(value = "帐号状态(0正常 1停用)") private String status; /** * 删除标志(0代表存在 2代表删除) */ + @ApiModelProperty(value = "删除标志(0代表存在 2代表删除)") @TableLogic private String delFlag; /** * 最后登录IP */ + @ApiModelProperty(value = "最后登录IP") private String loginIp; /** * 最后登录时间 */ + @ApiModelProperty(value = "最后登录时间") private Date loginDate; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - /** * 部门对象 */ + @ApiModelProperty(value = "部门对象") @TableField(exist = false) private SysDept dept; /** * 角色对象 */ + @ApiModelProperty(value = "角色对象") @TableField(exist = false) private List roles; /** * 角色组 */ + @ApiModelProperty(value = "角色组") @TableField(exist = false) private Long[] roleIds; /** * 岗位组 */ + @ApiModelProperty(value = "岗位组") @TableField(exist = false) private Long[] postIds; /** * 角色ID */ + @ApiModelProperty(value = "角色ID") @TableField(exist = false) private Long roleId; @@ -181,6 +172,7 @@ public class SysUser implements Serializable { this.userId = userId; } + @ApiModelProperty(value = "是否管理员") public boolean isAdmin() { return isAdmin(this.userId); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java index ae2c9e252..d47053694 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java @@ -1,37 +1,43 @@ package com.ruoyi.common.core.domain.model; -import lombok.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.experimental.Accessors; /** * 用户登录对象 - * - * @author ruoyi + * + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) -public class LoginBody -{ +@ApiModel("用户登录对象") +public class LoginBody { + /** * 用户名 */ + @ApiModelProperty(value = "用户名") private String username; /** * 用户密码 */ + @ApiModelProperty(value = "用户密码") private String password; /** * 验证码 */ + @ApiModelProperty(value = "验证码") private String code; /** * 唯一标识 */ + @ApiModelProperty(value = "唯一标识") private String uuid = ""; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java index 7bc072af7..9f7727abb 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java @@ -2,7 +2,8 @@ package com.ruoyi.common.core.domain.model; import com.fasterxml.jackson.annotation.JsonIgnore; import com.ruoyi.common.core.domain.entity.SysUser; -import lombok.*; +import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -13,14 +14,14 @@ import java.util.Set; /** * 登录用户身份权限 * - * @author ruoyi + * @author Lion Li */ @Data @NoArgsConstructor @Accessors(chain = true) -public class LoginUser implements UserDetails -{ +public class LoginUser implements UserDetails { + private static final long serialVersionUID = 1L; /** @@ -78,14 +79,12 @@ public class LoginUser implements UserDetails */ private SysUser user; - public LoginUser(SysUser user, Set permissions) - { + public LoginUser(SysUser user, Set permissions) { this.user = user; this.permissions = permissions; } - public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) - { + public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) { this.userId = userId; this.deptId = deptId; this.user = user; @@ -94,14 +93,12 @@ public class LoginUser implements UserDetails @JsonIgnore @Override - public String getPassword() - { + public String getPassword() { return user.getPassword(); } @Override - public String getUsername() - { + public String getUsername() { return user.getUserName(); } @@ -110,50 +107,39 @@ public class LoginUser implements UserDetails */ @JsonIgnore @Override - public boolean isAccountNonExpired() - { + public boolean isAccountNonExpired() { return true; } /** * 指定用户是否解锁,锁定的用户无法进行身份验证 - * - * @return */ @JsonIgnore @Override - public boolean isAccountNonLocked() - { + public boolean isAccountNonLocked() { return true; } /** * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证 - * - * @return */ @JsonIgnore @Override - public boolean isCredentialsNonExpired() - { + public boolean isCredentialsNonExpired() { return true; } /** * 是否可用 ,禁用的用户不能身份验证 - * - * @return */ @JsonIgnore @Override - public boolean isEnabled() - { + public boolean isEnabled() { return true; } @Override - public Collection getAuthorities() - { + public Collection getAuthorities() { return null; } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java index 5baa88781..ce6c385ae 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java @@ -1,11 +1,13 @@ package com.ruoyi.common.core.domain.model; +import io.swagger.annotations.ApiModel; + /** * 用户注册对象 - * - * @author ruoyi + * + * @author Lion Li */ -public class RegisterBody extends LoginBody -{ +@ApiModel("用户注册对象") +public class RegisterBody extends LoginBody { } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java index cc4cd14c8..92c522f0b 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java @@ -7,67 +7,67 @@ import org.springframework.stereotype.Component; /** * 读取代码生成相关配置 - * + * * @author ruoyi */ @Component @ConfigurationProperties(prefix = "gen") -@PropertySource(value = { "classpath:generator.yml" }) -public class GenConfig -{ - /** 作者 */ +@PropertySource(value = {"classpath:generator.yml"}) +public class GenConfig { + + /** + * 作者 + */ public static String author; - /** 生成包路径 */ + /** + * 生成包路径 + */ public static String packageName; - /** 自动去除表前缀,默认是false */ + /** + * 自动去除表前缀,默认是false + */ public static boolean autoRemovePre; - /** 表前缀(类名不会包含表前缀) */ + /** + * 表前缀(类名不会包含表前缀) + */ public static String tablePrefix; - public static String getAuthor() - { + public static String getAuthor() { return author; } @Value("${author}") - public void setAuthor(String author) - { + public void setAuthor(String author) { GenConfig.author = author; } - public static String getPackageName() - { + public static String getPackageName() { return packageName; } @Value("${packageName}") - public void setPackageName(String packageName) - { + public void setPackageName(String packageName) { GenConfig.packageName = packageName; } - public static boolean getAutoRemovePre() - { + public static boolean getAutoRemovePre() { return autoRemovePre; } @Value("${autoRemovePre}") - public void setAutoRemovePre(boolean autoRemovePre) - { + public void setAutoRemovePre(boolean autoRemovePre) { GenConfig.autoRemovePre = autoRemovePre; } - public static String getTablePrefix() - { + public static String getTablePrefix() { return tablePrefix; } @Value("${tablePrefix}") - public void setTablePrefix(String tablePrefix) - { + public void setTablePrefix(String tablePrefix) { GenConfig.tablePrefix = tablePrefix; } } 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 53438343a..649d1dc67 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 @@ -10,6 +10,9 @@ import com.ruoyi.generator.domain.GenTable; import com.ruoyi.generator.domain.GenTableColumn; import com.ruoyi.generator.service.IGenTableColumnService; import com.ruoyi.generator.service.IGenTableService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -24,36 +27,36 @@ import java.util.Map; /** * 代码生成 操作处理 - * - * @author ruoyi + * + * @author Lion Li */ +@Validated +@Api(value = "代码生成", tags = {"代码生成管理"}) +@RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController @RequestMapping("/tool/gen") -public class GenController extends BaseController -{ - @Autowired - private IGenTableService genTableService; +public class GenController extends BaseController { - @Autowired - private IGenTableColumnService genTableColumnService; + private final IGenTableService genTableService; + private final IGenTableColumnService genTableColumnService; /** * 查询代码生成列表 */ + @ApiOperation("查询代码生成列表") @PreAuthorize("@ss.hasPermi('tool:gen:list')") @GetMapping("/list") - public TableDataInfo genList(GenTable genTable) - { + public TableDataInfo genList(GenTable genTable) { return genTableService.selectPageGenTableList(genTable); } /** * 修改代码生成业务 */ + @ApiOperation("修改代码生成业务") @PreAuthorize("@ss.hasPermi('tool:gen:query')") @GetMapping(value = "/{talbleId}") - public AjaxResult getInfo(@PathVariable Long talbleId) - { + public AjaxResult> getInfo(@PathVariable Long talbleId) { GenTable table = genTableService.selectGenTableById(talbleId); List tables = genTableService.selectGenTableAll(); List list = genTableColumnService.selectGenTableColumnListByTableId(talbleId); @@ -67,21 +70,21 @@ public class GenController extends BaseController /** * 查询数据库列表 */ + @ApiOperation("查询数据库列表") @PreAuthorize("@ss.hasPermi('tool:gen:list')") @GetMapping("/db/list") - public TableDataInfo dataList(GenTable genTable) - { + public TableDataInfo dataList(GenTable genTable) { return genTableService.selectPageDbTableList(genTable); } /** * 查询数据表字段列表 */ + @ApiOperation("查询数据表字段列表") @PreAuthorize("@ss.hasPermi('tool:gen:list')") @GetMapping(value = "/column/{talbleId}") - public TableDataInfo columnList(Long tableId) - { - TableDataInfo dataInfo = new TableDataInfo(); + public TableDataInfo columnList(Long tableId) { + TableDataInfo dataInfo = new TableDataInfo<>(); List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); dataInfo.setRows(list); dataInfo.setTotal(list.size()); @@ -91,11 +94,11 @@ public class GenController extends BaseController /** * 导入表结构(保存) */ + @ApiOperation("导入表结构(保存)") @PreAuthorize("@ss.hasPermi('tool:gen:import')") @Log(title = "代码生成", businessType = BusinessType.IMPORT) @PostMapping("/importTable") - public AjaxResult importTableSave(String tables) - { + public AjaxResult importTableSave(String tables) { String[] tableNames = Convert.toStrArray(tables); // 查询表信息 List tableList = genTableService.selectDbTableListByNames(tableNames); @@ -106,11 +109,11 @@ public class GenController extends BaseController /** * 修改保存代码生成业务 */ + @ApiOperation("修改保存代码生成业务") @PreAuthorize("@ss.hasPermi('tool:gen:edit')") @Log(title = "代码生成", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult editSave(@Validated @RequestBody GenTable genTable) - { + public AjaxResult editSave(@Validated @RequestBody GenTable genTable) { genTableService.validateEdit(genTable); genTableService.updateGenTable(genTable); return AjaxResult.success(); @@ -119,11 +122,11 @@ public class GenController extends BaseController /** * 删除代码生成 */ + @ApiOperation("删除代码生成") @PreAuthorize("@ss.hasPermi('tool:gen:remove')") @Log(title = "代码生成", businessType = BusinessType.DELETE) @DeleteMapping("/{tableIds}") - public AjaxResult remove(@PathVariable Long[] tableIds) - { + public AjaxResult remove(@PathVariable Long[] tableIds) { genTableService.deleteGenTableByIds(tableIds); return AjaxResult.success(); } @@ -131,10 +134,10 @@ public class GenController extends BaseController /** * 预览代码 */ + @ApiOperation("预览代码") @PreAuthorize("@ss.hasPermi('tool:gen:preview')") @GetMapping("/preview/{tableId}") - public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException - { + public AjaxResult> preview(@PathVariable("tableId") Long tableId) throws IOException { Map dataMap = genTableService.previewCode(tableId); return AjaxResult.success(dataMap); } @@ -142,11 +145,11 @@ public class GenController extends BaseController /** * 生成代码(下载方式) */ + @ApiOperation("生成代码(下载方式)") @PreAuthorize("@ss.hasPermi('tool:gen:code')") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/download/{tableName}") - public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException - { + public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException { byte[] data = genTableService.downloadCode(tableName); genCode(response, data); } @@ -154,11 +157,11 @@ public class GenController extends BaseController /** * 生成代码(自定义路径) */ + @ApiOperation("生成代码(自定义路径)") @PreAuthorize("@ss.hasPermi('tool:gen:code')") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/genCode/{tableName}") - public AjaxResult genCode(@PathVariable("tableName") String tableName) - { + public AjaxResult genCode(@PathVariable("tableName") String tableName) { genTableService.generatorCode(tableName); return AjaxResult.success(); } @@ -166,11 +169,11 @@ public class GenController extends BaseController /** * 同步数据库 */ + @ApiOperation("同步数据库") @PreAuthorize("@ss.hasPermi('tool:gen:edit')") @Log(title = "代码生成", businessType = BusinessType.UPDATE) @GetMapping("/synchDb/{tableName}") - public AjaxResult synchDb(@PathVariable("tableName") String tableName) - { + public AjaxResult synchDb(@PathVariable("tableName") String tableName) { genTableService.synchDb(tableName); return AjaxResult.success(); } @@ -178,11 +181,11 @@ public class GenController extends BaseController /** * 批量生成代码 */ + @ApiOperation("批量生成代码") @PreAuthorize("@ss.hasPermi('tool:gen:code')") @Log(title = "代码生成", businessType = BusinessType.GENCODE) @GetMapping("/batchGenCode") - public void batchGenCode(HttpServletResponse response, String tables) throws IOException - { + public void batchGenCode(HttpServletResponse response, String tables) throws IOException { String[] tableNames = Convert.toStrArray(tables); byte[] data = genTableService.downloadCode(tableNames); genCode(response, data); @@ -191,8 +194,7 @@ public class GenController extends BaseController /** * 生成zip文件 */ - private void genCode(HttpServletResponse response, byte[] data) throws IOException - { + private void genCode(HttpServletResponse response, byte[] data) throws IOException { response.reset(); response.addHeader("Access-Control-Allow-Origin", "*"); response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java index 5d3217cd0..252f32cb6 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -1,38 +1,36 @@ package com.ruoyi.generator.domain; -import com.ruoyi.common.utils.StringUtils; -import com.baomidou.mybatisplus.annotation.*; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.constant.GenConstants; -import lombok.*; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; +import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.apache.commons.lang3.ArrayUtils; import javax.validation.Valid; import javax.validation.constraints.NotBlank; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * 业务表 gen_table * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("gen_table") -public class GenTable implements Serializable { - private static final long serialVersionUID = 1L; +public class GenTable extends BaseEntity { /** * 编号 */ - @TableId(value = "table_id", type = IdType.AUTO) + @TableId(value = "table_id") private Long tableId; /** @@ -132,43 +130,11 @@ public class GenTable implements Serializable { */ private String options; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - /** * 备注 */ private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - /** * 树编码字段 */ diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java index 246036089..2d5d10646 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java @@ -1,34 +1,33 @@ package com.ruoyi.generator.domain; +import com.baomidou.mybatisplus.annotation.FieldStrategy; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.utils.StringUtils; -import com.baomidou.mybatisplus.annotation.*; -import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.*; +import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 代码生成业务字段表 gen_table_column * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("gen_table_column") -public class GenTableColumn implements Serializable { - private static final long serialVersionUID = 1L; +public class GenTableColumn extends BaseEntity { /** * 编号 */ - @TableId(value = "column_id", type = IdType.AUTO) + @TableId(value = "column_id") private Long columnId; /** @@ -125,38 +124,6 @@ public class GenTableColumn implements Serializable { */ private Integer sort; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - public String getCapJavaField() { return StringUtils.uncapitalize(javaField); } @@ -224,9 +191,9 @@ public class GenTableColumn implements Serializable { public static boolean isSuperColumn(String javaField) { return StringUtils.equalsAnyIgnoreCase(javaField, // BaseEntity - "createBy", "createTime", "updateBy", "updateTime", "remark", + "createBy", "createTime", "updateBy", "updateTime", // TreeEntity - "parentName", "parentId", "orderNum", "ancestors"); + "parentName", "parentId", "orderNum"); } public boolean isUsableColumn() { diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java index dc5100915..1f7e20ce9 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -8,7 +8,7 @@ import java.util.List; /** * 业务字段 数据层 * - * @author ruoyi + * @author Lion Li */ public interface GenTableColumnMapper extends BaseMapperPlus { /** @@ -17,6 +17,6 @@ public interface GenTableColumnMapper extends BaseMapperPlus { * @param tableName 表名称 * @return 列信息 */ - public List selectDbTableColumnsByName(String tableName); + List selectDbTableColumnsByName(String tableName); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java index 3d3e4b9e5..c55a9a28e 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java @@ -10,7 +10,7 @@ import java.util.List; /** * 业务 数据层 * - * @author ruoyi + * @author Lion Li */ public interface GenTableMapper extends BaseMapperPlus { @@ -25,7 +25,7 @@ public interface GenTableMapper extends BaseMapperPlus { * @param genTable 业务信息 * @return 业务集合 */ - public List selectGenTableList(GenTable genTable); + List selectGenTableList(GenTable genTable); /** * 查询据库列表 @@ -33,7 +33,7 @@ public interface GenTableMapper extends BaseMapperPlus { * @param genTable 业务信息 * @return 数据库表集合 */ - public List selectDbTableList(GenTable genTable); + List selectDbTableList(GenTable genTable); /** * 查询据库列表 @@ -41,14 +41,14 @@ public interface GenTableMapper extends BaseMapperPlus { * @param tableNames 表名称组 * @return 数据库表集合 */ - public List selectDbTableListByNames(String[] tableNames); + List selectDbTableListByNames(String[] tableNames); /** * 查询所有表信息 * * @return 表信息集合 */ - public List selectGenTableAll(); + List selectGenTableAll(); /** * 查询表ID业务信息 @@ -56,7 +56,7 @@ public interface GenTableMapper extends BaseMapperPlus { * @param id 业务ID * @return 业务信息 */ - public GenTable selectGenTableById(Long id); + GenTable selectGenTableById(Long id); /** * 查询表名称业务信息 @@ -64,6 +64,6 @@ public interface GenTableMapper extends BaseMapperPlus { * @param tableName 表名称 * @return 业务信息 */ - public GenTable selectGenTableByName(String tableName); + GenTable selectGenTableByName(String tableName); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java index fff3ae27b..cd4d87547 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java @@ -12,7 +12,7 @@ import java.util.List; /** * 业务字段 服务层实现 * - * @author ruoyi + * @author Lion Li */ @Service public class GenTableColumnServiceImpl extends ServicePlusImpl implements IGenTableColumnService { @@ -26,7 +26,7 @@ public class GenTableColumnServiceImpl extends ServicePlusImpl selectGenTableColumnListByTableId(Long tableId) { return list(new LambdaQueryWrapper() - .eq(GenTableColumn::getTableId,tableId) + .eq(GenTableColumn::getTableId, tableId) .orderByAsc(GenTableColumn::getSort)); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java index 9280abc73..62fe67a3a 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -41,7 +41,7 @@ import java.util.zip.ZipOutputStream; /** * 业务 服务层实现 * - * @author ruoyi + * @author Lion Li */ @Slf4j @Service @@ -163,18 +163,18 @@ public class GenTableServiceImpl extends ServicePlusImpl 0) { - // 保存列信息 - List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); - List saveColumns = new ArrayList<>(); - for (GenTableColumn column : genTableColumns) { - GenUtils.initColumnField(column, table); - saveColumns.add(column); - } - if (CollUtil.isNotEmpty(saveColumns)) { - genTableColumnMapper.insertAll(saveColumns); - } - } + if (row > 0) { + // 保存列信息 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + List saveColumns = new ArrayList<>(); + for (GenTableColumn column : genTableColumns) { + GenUtils.initColumnField(column, table); + saveColumns.add(column); + } + if (CollUtil.isNotEmpty(saveColumns)) { + genTableColumnMapper.insertAll(saveColumns); + } + } } } catch (Exception e) { throw new ServiceException("导入失败:" + e.getMessage()); @@ -253,12 +253,12 @@ public class GenTableServiceImpl extends ServicePlusImpl dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); - List saveColumns = new ArrayList<>(); - dbTableColumns.forEach(column -> { - if (!tableColumnNames.contains(column.getColumnName())) { - GenUtils.initColumnField(column, table); - saveColumns.add(column); - } - }); - if (CollUtil.isNotEmpty(saveColumns)) { - genTableColumnMapper.insertAll(saveColumns); - } + List saveColumns = new ArrayList<>(); + dbTableColumns.forEach(column -> { + if (!tableColumnNames.contains(column.getColumnName())) { + GenUtils.initColumnField(column, table); + saveColumns.add(column); + } + }); + if (CollUtil.isNotEmpty(saveColumns)) { + genTableColumnMapper.insertAll(saveColumns); + } List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(delColumns)) { @@ -359,7 +359,7 @@ public class GenTableServiceImpl extends ServicePlusImpl paramsObj = genTable.getParams(); + Map paramsObj = genTable.getParams(); if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_CODE))) { throw new ServiceException("树编码字段不能为空"); } else if (StringUtils.isEmpty(paramsObj.get(GenConstants.TREE_PARENT_CODE))) { @@ -422,7 +422,7 @@ public class GenTableServiceImpl extends ServicePlusImpl paramsObj = JsonUtils.parseMap(genTable.getOptions()); + Map paramsObj = JsonUtils.parseMap(genTable.getOptions()); if (StringUtils.isNotNull(paramsObj)) { String treeCode = Convert.toStr(paramsObj.get(GenConstants.TREE_CODE)); String treeParentCode = Convert.toStr(paramsObj.get(GenConstants.TREE_PARENT_CODE)); @@ -441,7 +441,7 @@ public class GenTableServiceImpl extends ServicePlusImpl { /** @@ -17,7 +17,7 @@ public interface IGenTableColumnService extends IService { * @param tableId 业务字段编号 * @return 业务字段集合 */ - public List selectGenTableColumnListByTableId(Long tableId); + List selectGenTableColumnListByTableId(Long tableId); /** * 新增业务字段 @@ -25,7 +25,7 @@ public interface IGenTableColumnService extends IService { * @param genTableColumn 业务字段信息 * @return 结果 */ - public int insertGenTableColumn(GenTableColumn genTableColumn); + int insertGenTableColumn(GenTableColumn genTableColumn); /** * 修改业务字段 @@ -33,7 +33,7 @@ public interface IGenTableColumnService extends IService { * @param genTableColumn 业务字段信息 * @return 结果 */ - public int updateGenTableColumn(GenTableColumn genTableColumn); + int updateGenTableColumn(GenTableColumn genTableColumn); /** * 删除业务字段信息 @@ -41,5 +41,5 @@ public interface IGenTableColumnService extends IService { * @param ids 需要删除的数据ID * @return 结果 */ - public int deleteGenTableColumnByIds(String ids); + int deleteGenTableColumnByIds(String ids); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java index 9903ecaf4..1bf0c27e5 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java @@ -10,7 +10,7 @@ import java.util.Map; /** * 业务 服务层 * - * @author ruoyi + * @author Lion Li */ public interface IGenTableService extends IService { @@ -26,7 +26,7 @@ public interface IGenTableService extends IService { * @param genTable 业务信息 * @return 业务集合 */ - public List selectGenTableList(GenTable genTable); + List selectGenTableList(GenTable genTable); /** * 查询据库列表 @@ -34,7 +34,7 @@ public interface IGenTableService extends IService { * @param genTable 业务信息 * @return 数据库表集合 */ - public List selectDbTableList(GenTable genTable); + List selectDbTableList(GenTable genTable); /** * 查询据库列表 @@ -42,14 +42,14 @@ public interface IGenTableService extends IService { * @param tableNames 表名称组 * @return 数据库表集合 */ - public List selectDbTableListByNames(String[] tableNames); + List selectDbTableListByNames(String[] tableNames); /** * 查询所有表信息 * * @return 表信息集合 */ - public List selectGenTableAll(); + List selectGenTableAll(); /** * 查询业务信息 @@ -57,7 +57,7 @@ public interface IGenTableService extends IService { * @param id 业务ID * @return 业务信息 */ - public GenTable selectGenTableById(Long id); + GenTable selectGenTableById(Long id); /** * 修改业务 @@ -65,7 +65,7 @@ public interface IGenTableService extends IService { * @param genTable 业务信息 * @return 结果 */ - public void updateGenTable(GenTable genTable); + void updateGenTable(GenTable genTable); /** * 删除业务信息 @@ -73,14 +73,14 @@ public interface IGenTableService extends IService { * @param tableIds 需要删除的表数据ID * @return 结果 */ - public void deleteGenTableByIds(Long[] tableIds); + void deleteGenTableByIds(Long[] tableIds); /** * 导入表结构 * * @param tableList 导入表列表 */ - public void importGenTable(List tableList); + void importGenTable(List tableList); /** * 预览代码 @@ -88,7 +88,7 @@ public interface IGenTableService extends IService { * @param tableId 表编号 * @return 预览数据列表 */ - public Map previewCode(Long tableId); + Map previewCode(Long tableId); /** * 生成代码(下载方式) @@ -96,7 +96,7 @@ public interface IGenTableService extends IService { * @param tableName 表名称 * @return 数据 */ - public byte[] downloadCode(String tableName); + byte[] downloadCode(String tableName); /** * 生成代码(自定义路径) @@ -104,14 +104,14 @@ public interface IGenTableService extends IService { * @param tableName 表名称 * @return 数据 */ - public void generatorCode(String tableName); + void generatorCode(String tableName); /** * 同步数据库 * * @param tableName 表名称 */ - public void synchDb(String tableName); + void synchDb(String tableName); /** * 批量生成代码(下载方式) @@ -119,12 +119,12 @@ public interface IGenTableService extends IService { * @param tableNames 表数组 * @return 数据 */ - public byte[] downloadCode(String[] tableNames); + byte[] downloadCode(String[] tableNames); /** * 修改保存参数校验 * * @param genTable 业务信息 */ - public void validateEdit(GenTable genTable); + void validateEdit(GenTable genTable); } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java index 44f54397c..c434ca88d 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -1,7 +1,7 @@ package com.ruoyi.generator.util; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.generator.config.GenConfig; import com.ruoyi.generator.domain.GenTable; import com.ruoyi.generator.domain.GenTableColumn; @@ -14,13 +14,12 @@ import java.util.Arrays; * * @author ruoyi */ -public class GenUtils -{ +public class GenUtils { + /** * 初始化表信息 */ - public static void initTable(GenTable genTable, String operName) - { + public static void initTable(GenTable genTable, String operName) { genTable.setClassName(convertClassName(genTable.getTableName())); genTable.setPackageName(GenConfig.getPackageName()); genTable.setModuleName(getModuleName(GenConfig.getPackageName())); @@ -74,55 +73,45 @@ public class GenUtils column.setIsInsert(GenConstants.REQUIRE); } // BO对象 默认编辑勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) { column.setIsEdit(GenConstants.REQUIRE); } // BO对象 默认是否必填勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName)) { column.setIsRequired(GenConstants.REQUIRE); } // VO对象 默认返回勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName)) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName)) { column.setIsList(GenConstants.REQUIRE); } // BO对象 默认查询勾选 - if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) - { + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) { column.setIsQuery(GenConstants.REQUIRE); } // 查询字段类型 - if (StringUtils.endsWithIgnoreCase(columnName, "name")) - { + if (StringUtils.endsWithIgnoreCase(columnName, "name")) { column.setQueryType(GenConstants.QUERY_LIKE); } // 状态字段设置单选框 - if (StringUtils.endsWithIgnoreCase(columnName, "status")) - { + if (StringUtils.endsWithIgnoreCase(columnName, "status")) { column.setHtmlType(GenConstants.HTML_RADIO); } // 类型&性别字段设置下拉框 else if (StringUtils.endsWithIgnoreCase(columnName, "type") - || StringUtils.endsWithIgnoreCase(columnName, "sex")) - { + || StringUtils.endsWithIgnoreCase(columnName, "sex")) { column.setHtmlType(GenConstants.HTML_SELECT); } // 图片字段设置图片上传控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "image")) - { + else if (StringUtils.endsWithIgnoreCase(columnName, "image")) { column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); } // 文件字段设置文件上传控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "file")) - { + else if (StringUtils.endsWithIgnoreCase(columnName, "file")) { column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); } // 内容字段设置富文本控件 - else if (StringUtils.endsWithIgnoreCase(columnName, "content")) - { + else if (StringUtils.endsWithIgnoreCase(columnName, "content")) { column.setHtmlType(GenConstants.HTML_EDITOR); } } @@ -130,12 +119,11 @@ public class GenUtils /** * 校验数组是否包含指定值 * - * @param arr 数组 + * @param arr 数组 * @param targetValue 值 * @return 是否包含 */ - public static boolean arraysContains(String[] arr, String targetValue) - { + public static boolean arraysContains(String[] arr, String targetValue) { return Arrays.asList(arr).contains(targetValue); } @@ -145,8 +133,7 @@ public class GenUtils * @param packageName 包名 * @return 模块名 */ - public static String getModuleName(String packageName) - { + public static String getModuleName(String packageName) { int lastIndex = packageName.lastIndexOf("."); int nameLength = packageName.length(); String moduleName = StringUtils.substring(packageName, lastIndex + 1, nameLength); @@ -159,12 +146,11 @@ public class GenUtils * @param tableName 表名 * @return 业务名 */ - public static String getBusinessName(String tableName) - { + public static String getBusinessName(String tableName) { int firstIndex = tableName.indexOf("_"); int nameLength = tableName.length(); String businessName = StringUtils.substring(tableName, firstIndex + 1, nameLength); - businessName = StringUtils.toCamelCase(businessName); + businessName = StringUtils.toCamelCase(businessName); return businessName; } @@ -174,12 +160,10 @@ public class GenUtils * @param tableName 表名称 * @return 类名 */ - public static String convertClassName(String tableName) - { + public static String convertClassName(String tableName) { boolean autoRemovePre = GenConfig.getAutoRemovePre(); String tablePrefix = GenConfig.getTablePrefix(); - if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) - { + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) { String[] searchList = StringUtils.split(tablePrefix, ","); tableName = replaceFirst(tableName, searchList); } @@ -190,16 +174,13 @@ public class GenUtils * 批量替换前缀 * * @param replacementm 替换值 - * @param searchList 替换列表 + * @param searchList 替换列表 * @return */ - public static String replaceFirst(String replacementm, String[] searchList) - { + public static String replaceFirst(String replacementm, String[] searchList) { String text = replacementm; - for (String searchString : searchList) - { - if (replacementm.startsWith(searchString)) - { + for (String searchString : searchList) { + if (replacementm.startsWith(searchString)) { text = replacementm.replaceFirst(searchString, ""); break; } @@ -213,8 +194,7 @@ public class GenUtils * @param text 需要被替换的名字 * @return 替换后的名字 */ - public static String replaceText(String text) - { + public static String replaceText(String text) { return RegExUtils.replaceAll(text, "(?:表|若依)", ""); } @@ -224,14 +204,10 @@ public class GenUtils * @param columnType 列类型 * @return 截取后的列类型 */ - public static String getDbType(String columnType) - { - if (StringUtils.indexOf(columnType, '(') > 0) - { + public static String getDbType(String columnType) { + if (StringUtils.indexOf(columnType, '(') > 0) { return StringUtils.substringBefore(columnType, "("); - } - else - { + } else { return columnType; } } @@ -242,15 +218,11 @@ public class GenUtils * @param columnType 列类型 * @return 截取后的列类型 */ - public static Integer getColumnLength(String columnType) - { - if (StringUtils.indexOf(columnType, '(') > 0) - { + public static Integer getColumnLength(String columnType) { + if (StringUtils.indexOf(columnType, '(') > 0) { String length = StringUtils.substringBetween(columnType, "(", ")"); return Integer.valueOf(length); - } - else - { + } else { return 0; } } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java index 32452b8f6..461bc2cce 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java @@ -1,24 +1,23 @@ package com.ruoyi.generator.util; -import java.util.Properties; -import org.apache.velocity.app.Velocity; import com.ruoyi.common.constant.Constants; +import org.apache.velocity.app.Velocity; + +import java.util.Properties; /** * VelocityEngine工厂 - * + * * @author ruoyi */ -public class VelocityInitializer -{ +public class VelocityInitializer { + /** * 初始化vm方法 */ - public static void initVelocity() - { + public static void initVelocity() { Properties p = new Properties(); - try - { + try { // 加载classpath目录下的vm文件 p.setProperty("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); // 定义字符集 @@ -26,10 +25,9 @@ public class VelocityInitializer p.setProperty(Velocity.OUTPUT_ENCODING, Constants.UTF8); // 初始化Velocity引擎,指定配置Properties Velocity.init(p); - } - catch (Exception e) - { + } catch (Exception e) { throw new RuntimeException(e); } } + } diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java index 38762275d..0a3ffbc51 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -16,18 +16,24 @@ import java.util.Map; /** * 模板处理工具类 - * + * * @author ruoyi */ -public class VelocityUtils -{ - /** 项目空间路径 */ +public class VelocityUtils { + + /** + * 项目空间路径 + */ private static final String PROJECT_PATH = "main/java"; - /** mybatis空间路径 */ + /** + * mybatis空间路径 + */ private static final String MYBATIS_PATH = "main/resources/mapper"; - /** 默认上级菜单,系统工具 */ + /** + * 默认上级菜单,系统工具 + */ private static final String DEFAULT_PARENT_MENU_ID = "3"; /** @@ -35,8 +41,7 @@ public class VelocityUtils * * @return 模板列表 */ - public static VelocityContext prepareContext(GenTable genTable) - { + public static VelocityContext prepareContext(GenTable genTable) { String moduleName = genTable.getModuleName(); String businessName = genTable.getBusinessName(); String packageName = genTable.getPackageName(); @@ -63,29 +68,25 @@ public class VelocityUtils velocityContext.put("table", genTable); velocityContext.put("dicts", getDicts(genTable)); setMenuVelocityContext(velocityContext, genTable); - if (GenConstants.TPL_TREE.equals(tplCategory)) - { + if (GenConstants.TPL_TREE.equals(tplCategory)) { setTreeVelocityContext(velocityContext, genTable); } - if (GenConstants.TPL_SUB.equals(tplCategory)) - { + if (GenConstants.TPL_SUB.equals(tplCategory)) { setSubVelocityContext(velocityContext, genTable); } return velocityContext; } - public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) - { + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); - Map paramsObj = JsonUtils.parseMap(options); + Map paramsObj = JsonUtils.parseMap(options); String parentMenuId = getParentMenuId(paramsObj); context.put("parentMenuId", parentMenuId); } - public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) - { + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) { String options = genTable.getOptions(); - Map paramsObj = JsonUtils.parseMap(options); + Map paramsObj = JsonUtils.parseMap(options); String treeCode = getTreecode(paramsObj); String treeParentCode = getTreeParentCode(paramsObj); String treeName = getTreeName(paramsObj); @@ -94,18 +95,15 @@ public class VelocityUtils context.put("treeParentCode", treeParentCode); context.put("treeName", treeName); context.put("expandColumn", getExpandColumn(genTable)); - if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) - { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { context.put("tree_parent_code", paramsObj.get(GenConstants.TREE_PARENT_CODE)); } - if (paramsObj.containsKey(GenConstants.TREE_NAME)) - { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) { context.put("tree_name", paramsObj.get(GenConstants.TREE_NAME)); } } - public static void setSubVelocityContext(VelocityContext context, GenTable genTable) - { + public static void setSubVelocityContext(VelocityContext context, GenTable genTable) { GenTable subTable = genTable.getSubTable(); String subTableName = genTable.getSubTableName(); String subTableFkName = genTable.getSubTableFkName(); @@ -127,12 +125,11 @@ public class VelocityUtils * * @return 模板列表 */ - public static List getTemplateList(String tplCategory) - { + public static List getTemplateList(String tplCategory) { List templates = new ArrayList(); templates.add("vm/java/domain.java.vm"); templates.add("vm/java/vo.java.vm"); - templates.add("vm/java/bo.java.vm"); + templates.add("vm/java/bo.java.vm"); templates.add("vm/java/mapper.java.vm"); templates.add("vm/java/service.java.vm"); templates.add("vm/java/serviceImpl.java.vm"); @@ -140,16 +137,11 @@ public class VelocityUtils templates.add("vm/xml/mapper.xml.vm"); templates.add("vm/sql/sql.vm"); templates.add("vm/js/api.js.vm"); - if (GenConstants.TPL_CRUD.equals(tplCategory)) - { + if (GenConstants.TPL_CRUD.equals(tplCategory)) { templates.add("vm/vue/index.vue.vm"); - } - else if (GenConstants.TPL_TREE.equals(tplCategory)) - { + } else if (GenConstants.TPL_TREE.equals(tplCategory)) { templates.add("vm/vue/index-tree.vue.vm"); - } - else if (GenConstants.TPL_SUB.equals(tplCategory)) - { + } else if (GenConstants.TPL_SUB.equals(tplCategory)) { templates.add("vm/vue/index.vue.vm"); templates.add("vm/java/sub-domain.java.vm"); } @@ -159,8 +151,7 @@ public class VelocityUtils /** * 获取文件名 */ - public static String getFileName(String template, GenTable genTable) - { + public static String getFileName(String template, GenTable genTable) { // 文件名称 String fileName = ""; // 包路径 @@ -176,56 +167,34 @@ public class VelocityUtils String mybatisPath = MYBATIS_PATH + "/" + moduleName; String vuePath = "vue"; - if (template.contains("domain.java.vm")) - { + if (template.contains("domain.java.vm")) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); } - if (template.contains("vo.java.vm")) - { + if (template.contains("vo.java.vm")) { fileName = StringUtils.format("{}/domain/vo/{}Vo.java", javaPath, className); } - if (template.contains("bo.java.vm")) - { - fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); - } - if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) - { + if (template.contains("bo.java.vm")) { + fileName = StringUtils.format("{}/domain/bo/{}Bo.java", javaPath, className); + } + if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) { fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); - } - else if (template.contains("mapper.java.vm")) - { + } else if (template.contains("mapper.java.vm")) { fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); - } - else if (template.contains("service.java.vm")) - { + } else if (template.contains("service.java.vm")) { fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); - } - else if (template.contains("serviceImpl.java.vm")) - { + } else if (template.contains("serviceImpl.java.vm")) { fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); - } - else if (template.contains("controller.java.vm")) - { + } else if (template.contains("controller.java.vm")) { fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); - } - else if (template.contains("mapper.xml.vm")) - { + } else if (template.contains("mapper.xml.vm")) { fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); - } - else if (template.contains("sql.vm")) - { + } else if (template.contains("sql.vm")) { fileName = businessName + "Menu.sql"; - } - else if (template.contains("api.js.vm")) - { + } else if (template.contains("api.js.vm")) { fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); - } - else if (template.contains("index.vue.vm")) - { + } else if (template.contains("index.vue.vm")) { fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); - } - else if (template.contains("index-tree.vue.vm")) - { + } else if (template.contains("index-tree.vue.vm")) { fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); } return fileName; @@ -237,8 +206,7 @@ public class VelocityUtils * @param packageName 包名称 * @return 包前缀名称 */ - public static String getPackagePrefix(String packageName) - { + public static String getPackagePrefix(String packageName) { int lastIndex = packageName.lastIndexOf("."); String basePackage = StringUtils.substring(packageName, 0, lastIndex); return basePackage; @@ -246,28 +214,22 @@ public class VelocityUtils /** * 根据列类型获取导入包 - * + * * @param genTable 业务表对象 * @return 返回需要导入的包列表 */ - public static HashSet getImportList(GenTable genTable) - { + public static HashSet getImportList(GenTable genTable) { List columns = genTable.getColumns(); GenTable subGenTable = genTable.getSubTable(); HashSet importList = new HashSet(); - if (StringUtils.isNotNull(subGenTable)) - { + if (StringUtils.isNotNull(subGenTable)) { importList.add("java.util.List"); } - for (GenTableColumn column : columns) - { - if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) - { + for (GenTableColumn column : columns) { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) { importList.add("java.util.Date"); importList.add("com.fasterxml.jackson.annotation.JsonFormat"); - } - else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) - { + } else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) { importList.add("java.math.BigDecimal"); } } @@ -280,15 +242,12 @@ public class VelocityUtils * @param genTable 业务表对象 * @return 返回字典组 */ - public static String getDicts(GenTable genTable) - { + public static String getDicts(GenTable genTable) { List columns = genTable.getColumns(); List dicts = new ArrayList(); - for (GenTableColumn column : columns) - { + for (GenTableColumn column : columns) { if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( - column.getHtmlType(), new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO })) - { + column.getHtmlType(), new String[]{GenConstants.HTML_SELECT, GenConstants.HTML_RADIO})) { dicts.add("'" + column.getDictType() + "'"); } } @@ -298,12 +257,11 @@ public class VelocityUtils /** * 获取权限前缀 * - * @param moduleName 模块名称 + * @param moduleName 模块名称 * @param businessName 业务名称 * @return 返回权限前缀 */ - public static String getPermissionPrefix(String moduleName, String businessName) - { + public static String getPermissionPrefix(String moduleName, String businessName) { return StringUtils.format("{}:{}", moduleName, businessName); } @@ -313,11 +271,9 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 上级菜单ID字段 */ - public static String getParentMenuId(Map paramsObj) - { + public static String getParentMenuId(Map paramsObj) { if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) - && StringUtils.isNotEmpty(Convert.toStr(paramsObj.get(GenConstants.PARENT_MENU_ID)))) - { + && StringUtils.isNotEmpty(Convert.toStr(paramsObj.get(GenConstants.PARENT_MENU_ID)))) { return Convert.toStr(paramsObj.get(GenConstants.PARENT_MENU_ID)); } return DEFAULT_PARENT_MENU_ID; @@ -329,10 +285,8 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 树编码 */ - public static String getTreecode(Map paramsObj) - { - if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_CODE)) - { + public static String getTreecode(Map paramsObj) { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_CODE)) { return StringUtils.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_CODE))); } return StringUtils.EMPTY; @@ -344,10 +298,8 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 树父编码 */ - public static String getTreeParentCode(Map paramsObj) - { - if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) - { + public static String getTreeParentCode(Map paramsObj) { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) { return StringUtils.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_PARENT_CODE))); } return StringUtils.EMPTY; @@ -359,10 +311,8 @@ public class VelocityUtils * @param paramsObj 生成其他选项 * @return 树名称 */ - public static String getTreeName(Map paramsObj) - { - if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_NAME)) - { + public static String getTreeName(Map paramsObj) { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.TREE_NAME)) { return StringUtils.toCamelCase(Convert.toStr(paramsObj.get(GenConstants.TREE_NAME))); } return StringUtils.EMPTY; @@ -374,20 +324,16 @@ public class VelocityUtils * @param genTable 业务表对象 * @return 展开按钮列序号 */ - public static int getExpandColumn(GenTable genTable) - { + public static int getExpandColumn(GenTable genTable) { String options = genTable.getOptions(); Map paramsObj = JsonUtils.parseMap(options); String treeName = Convert.toStr(paramsObj.get(GenConstants.TREE_NAME)); int num = 0; - for (GenTableColumn column : genTable.getColumns()) - { - if (column.isList()) - { + for (GenTableColumn column : genTable.getColumns()) { + if (column.isList()) { num++; String columnName = column.getColumnName(); - if (columnName.equals(treeName)) - { + if (columnName.equals(treeName)) { break; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java index cdd7810fa..3b9fce0b5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -2,44 +2,46 @@ package com.ruoyi.system.domain; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 参数配置表 sys_config * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_config") @ExcelIgnoreUnannotated -public class SysConfig implements Serializable { - private static final long serialVersionUID = 1L; +@ApiModel("参数配置业务对象") +public class SysConfig extends BaseEntity { /** * 参数主键 */ + @ApiModelProperty(value = "参数主键") @ExcelProperty(value = "参数主键") - @TableId(value = "config_id", type = IdType.AUTO) + @TableId(value = "config_id") private Long configId; /** * 参数名称 */ + @ApiModelProperty(value = "参数名称") @ExcelProperty(value = "参数名称") @NotBlank(message = "参数名称不能为空") @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") @@ -48,6 +50,7 @@ public class SysConfig implements Serializable { /** * 参数键名 */ + @ApiModelProperty(value = "参数键名") @ExcelProperty(value = "参数键名") @NotBlank(message = "参数键名长度不能为空") @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") @@ -56,6 +59,7 @@ public class SysConfig implements Serializable { /** * 参数键值 */ + @ApiModelProperty(value = "参数键值") @ExcelProperty(value = "参数键值") @NotBlank(message = "参数键值不能为空") @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") @@ -64,43 +68,15 @@ public class SysConfig implements Serializable { /** * 系统内置(Y是 N否) */ + @ApiModelProperty(value = "系统内置(Y是 N否)") @ExcelProperty(value = "系统内置", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_yes_no") private String configType; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java index 898aa8a08..a1575378d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -2,14 +2,14 @@ package com.ruoyi.system.domain; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; @@ -20,76 +20,86 @@ import java.util.Map; /** * 系统访问记录表 sys_logininfor * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("sys_logininfor") @ExcelIgnoreUnannotated +@ApiModel("系统访问记录业务对象") public class SysLogininfor implements Serializable { private static final long serialVersionUID = 1L; /** * ID */ + @ApiModelProperty(value = "访问ID") @ExcelProperty(value = "序号") - @TableId(value = "info_id", type = IdType.AUTO) + @TableId(value = "info_id") private Long infoId; /** * 用户账号 */ + @ApiModelProperty(value = "用户账号") @ExcelProperty(value = "用户账号") private String userName; /** * 登录状态 0成功 1失败 */ + @ApiModelProperty(value = "登录状态 0成功 1失败") @ExcelProperty(value = "登录状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_common_status") + @ExcelDictFormat(dictType = "sys_common_status") private String status; /** * 登录IP地址 */ + @ApiModelProperty(value = "登录IP地址") @ExcelProperty(value = "登录地址") private String ipaddr; /** * 登录地点 */ + @ApiModelProperty(value = "登录地点") @ExcelProperty(value = "登录地点") private String loginLocation; /** * 浏览器类型 */ + @ApiModelProperty(value = "浏览器类型") @ExcelProperty(value = "浏览器") private String browser; /** * 操作系统 */ + @ApiModelProperty(value = "操作系统") @ExcelProperty(value = "操作系统") private String os; /** * 提示消息 */ + @ApiModelProperty(value = "提示消息") @ExcelProperty(value = "提示消息") private String msg; /** * 访问时间 */ + @ApiModelProperty(value = "访问时间") @ExcelProperty(value = "访问时间") private Date loginTime; /** * 请求参数 */ + @ApiModelProperty(value = "请求参数") @TableField(exist = false) private Map params = new HashMap<>(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java index e50ecd12c..2b230bf6a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -1,39 +1,38 @@ package com.ruoyi.system.domain; -import com.baomidou.mybatisplus.annotation.*; -import com.fasterxml.jackson.annotation.JsonFormat; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 通知公告表 sys_notice * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_notice") -public class SysNotice implements Serializable { - private static final long serialVersionUID = 1L; +public class SysNotice extends BaseEntity { /** * 公告ID */ - @TableId(value = "notice_id", type = IdType.AUTO) + @ApiModelProperty(value = "公告ID") + @TableId(value = "notice_id") private Long noticeId; /** * 公告标题 */ + @ApiModelProperty(value = "公告标题") @NotBlank(message = "公告标题不能为空") @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") private String noticeTitle; @@ -41,53 +40,25 @@ public class SysNotice implements Serializable { /** * 公告类型(1通知 2公告) */ + @ApiModelProperty(value = "公告类型(1通知 2公告)") private String noticeType; /** * 公告内容 */ + @ApiModelProperty(value = "公告内容") private String noticeContent; /** * 公告状态(0正常 1关闭) */ + @ApiModelProperty(value = "公告状态(0正常 1关闭)") private String status; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java index 20fc273ab..84ab555ec 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -2,14 +2,14 @@ package com.ruoyi.system.domain; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.io.Serializable; @@ -20,33 +20,37 @@ import java.util.Map; /** * 操作日志记录表 oper_log * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("sys_oper_log") @ExcelIgnoreUnannotated +@ApiModel("操作日志记录业务对象") public class SysOperLog implements Serializable { + private static final long serialVersionUID = 1L; /** * 日志主键 */ - @ExcelProperty(value = "操作序号") - @TableId(value = "oper_id", type = IdType.AUTO) + @ApiModelProperty(value = "日志主键") + @ExcelProperty(value = "日志主键") + @TableId(value = "oper_id") private Long operId; /** * 操作模块 */ + @ApiModelProperty(value = "操作模块") @ExcelProperty(value = "操作模块") private String title; /** * 业务类型(0其它 1新增 2修改 3删除) */ + @ApiModelProperty(value = "业务类型(0其它 1新增 2修改 3删除)") @ExcelProperty(value = "业务类型", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_oper_type") private Integer businessType; @@ -54,24 +58,28 @@ public class SysOperLog implements Serializable { /** * 业务类型数组 */ + @ApiModelProperty(value = "业务类型数组") @TableField(exist = false) private Integer[] businessTypes; /** * 请求方法 */ + @ApiModelProperty(value = "请求方法") @ExcelProperty(value = "请求方法") private String method; /** * 请求方式 */ + @ApiModelProperty(value = "请求方式") @ExcelProperty(value = "请求方式") private String requestMethod; /** * 操作类别(0其它 1后台用户 2手机端用户) */ + @ApiModelProperty(value = "操作类别(0其它 1后台用户 2手机端用户)") @ExcelProperty(value = "操作类别", converter = ExcelDictConvert.class) @ExcelDictFormat(readConverterExp = "0=其它,1=后台用户,2=手机端用户") private Integer operatorType; @@ -79,48 +87,56 @@ public class SysOperLog implements Serializable { /** * 操作人员 */ + @ApiModelProperty(value = "操作人员") @ExcelProperty(value = "操作人员") private String operName; /** * 部门名称 */ + @ApiModelProperty(value = "部门名称") @ExcelProperty(value = "部门名称") private String deptName; /** * 请求url */ + @ApiModelProperty(value = "请求url") @ExcelProperty(value = "请求地址") private String operUrl; /** * 操作地址 */ + @ApiModelProperty(value = "操作地址") @ExcelProperty(value = "操作地址") private String operIp; /** * 操作地点 */ + @ApiModelProperty(value = "操作地点") @ExcelProperty(value = "操作地点") private String operLocation; /** * 请求参数 */ + @ApiModelProperty(value = "请求参数") @ExcelProperty(value = "请求参数") private String operParam; /** * 返回参数 */ + @ApiModelProperty(value = "返回参数") @ExcelProperty(value = "返回参数") private String jsonResult; /** * 操作状态(0正常 1异常) */ + @ApiModelProperty(value = "操作状态(0正常 1异常)") @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private Integer status; @@ -128,18 +144,21 @@ public class SysOperLog implements Serializable { /** * 错误消息 */ + @ApiModelProperty(value = "错误消息") @ExcelProperty(value = "错误消息") private String errorMsg; /** * 操作时间 */ + @ApiModelProperty(value = "操作时间") @ExcelProperty(value = "操作时间") private Date operTime; /** * 请求参数 */ + @ApiModelProperty(value = "请求参数") @TableField(exist = false) private Map params = new HashMap<>(); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java index 56722500f..b0b8a11e5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -2,44 +2,47 @@ package com.ruoyi.system.domain; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.common.core.domain.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import javax.validation.constraints.NotBlank; import javax.validation.constraints.Size; -import java.io.Serializable; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; /** * 岗位表 sys_post * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_post") @ExcelIgnoreUnannotated -public class SysPost implements Serializable { - private static final long serialVersionUID = 1L; +@ApiModel("岗位信息业务对象") +public class SysPost extends BaseEntity { /** * 岗位序号 */ + @ApiModelProperty(value = "岗位序号") @ExcelProperty(value = "岗位序号") - @TableId(value = "post_id", type = IdType.AUTO) + @TableId(value = "post_id") private Long postId; /** * 岗位编码 */ + @ApiModelProperty(value = "岗位编码") @ExcelProperty(value = "岗位编码") @NotBlank(message = "岗位编码不能为空") @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") @@ -48,6 +51,7 @@ public class SysPost implements Serializable { /** * 岗位名称 */ + @ApiModelProperty(value = "岗位名称") @ExcelProperty(value = "岗位名称") @NotBlank(message = "岗位名称不能为空") @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") @@ -56,6 +60,7 @@ public class SysPost implements Serializable { /** * 岗位排序 */ + @ApiModelProperty(value = "岗位排序") @ExcelProperty(value = "岗位排序") @NotBlank(message = "显示顺序不能为空") private String postSort; @@ -63,48 +68,21 @@ public class SysPost implements Serializable { /** * 状态(0正常 1停用) */ + @ApiModelProperty(value = "状态(0正常 1停用)") @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "sys_common_status") private String status; - /** - * 创建者 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 更新者 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - /** * 备注 */ + @ApiModelProperty(value = "备注") private String remark; - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - /** * 用户是否存在此岗位标识 默认不存在 */ + @ApiModelProperty(value = "用户是否存在此岗位标识 默认不存在") @TableField(exist = false) private boolean flag = false; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java index 703f93986..8c93badab 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java @@ -1,29 +1,33 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** * 角色和部门关联 sys_role_dept * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("sys_role_dept") +@ApiModel("角色和部门关联") public class SysRoleDept { + /** * 角色ID */ + @ApiModelProperty(value = "角色ID") private Long roleId; /** * 部门ID */ + @ApiModelProperty(value = "部门ID") private Long deptId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java index 66941a97b..aa819c706 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java @@ -1,29 +1,33 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** * 角色和菜单关联 sys_role_menu * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("sys_role_menu") +@ApiModel("角色和菜单关联") public class SysRoleMenu { + /** * 角色ID */ + @ApiModelProperty(value = "角色ID") private Long roleId; /** * 菜单ID */ + @ApiModelProperty(value = "角色ID") private Long menuId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java index c204e86af..f81508c8c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java @@ -1,56 +1,67 @@ package com.ruoyi.system.domain; -import lombok.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.experimental.Accessors; /** * 当前在线会话 * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) +@ApiModel("当前在线会话业务对象") public class SysUserOnline { + /** * 会话编号 */ + @ApiModelProperty(value = "会话编号") private String tokenId; /** * 部门名称 */ + @ApiModelProperty(value = "部门名称") private String deptName; /** * 用户名称 */ + @ApiModelProperty(value = "用户名称") private String userName; /** * 登录IP地址 */ + @ApiModelProperty(value = "登录IP地址") private String ipaddr; /** * 登录地址 */ + @ApiModelProperty(value = "登录地址") private String loginLocation; /** * 浏览器类型 */ + @ApiModelProperty(value = "浏览器类型") private String browser; /** * 操作系统 */ + @ApiModelProperty(value = "操作系统") private String os; /** * 登录时间 */ + @ApiModelProperty(value = "登录时间") private Long loginTime; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java index 33ec0ab18..f6694e37d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java @@ -1,29 +1,33 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** * 用户和岗位关联 sys_user_post * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("sys_user_post") +@ApiModel("用户和岗位关联") public class SysUserPost { + /** * 用户ID */ + @ApiModelProperty(value = "用户ID") private Long userId; /** * 岗位ID */ + @ApiModelProperty(value = "岗位ID") private Long postId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java index d02bdfe5b..fd4e2e5b0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java @@ -1,29 +1,33 @@ package com.ruoyi.system.domain; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** * 用户和角色关联 sys_user_role * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("sys_user_role") +@ApiModel("用户和角色关联") public class SysUserRole { + /** * 用户ID */ + @ApiModelProperty(value = "用户ID") private Long userId; /** * 角色ID */ + @ApiModelProperty(value = "角色ID") private Long roleId; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssBo.java index e41f94ff6..f2770abd3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssBo.java @@ -16,52 +16,52 @@ import lombok.EqualsAndHashCode; @ApiModel("OSS对象存储分页查询对象") public class SysOssBo extends BaseEntity { - /** - * 分页大小 - */ - @ApiModelProperty("分页大小") - private Integer pageSize; - /** - * 当前页数 - */ - @ApiModelProperty("当前页数") - private Integer pageNum; - /** - * 排序列 - */ - @ApiModelProperty("排序列") - private String orderByColumn; - /** - * 排序的方向desc或者asc - */ - @ApiModelProperty(value = "排序的方向", example = "asc,desc") - private String isAsc; + /** + * 分页大小 + */ + @ApiModelProperty("分页大小") + private Integer pageSize; + /** + * 当前页数 + */ + @ApiModelProperty("当前页数") + private Integer pageNum; + /** + * 排序列 + */ + @ApiModelProperty("排序列") + private String orderByColumn; + /** + * 排序的方向desc或者asc + */ + @ApiModelProperty(value = "排序的方向", example = "asc,desc") + private String isAsc; - /** - * 文件名 - */ - @ApiModelProperty("文件名") - private String fileName; - /** - * 原名 - */ - @ApiModelProperty("原名") - private String originalName; - /** - * 文件后缀名 - */ - @ApiModelProperty("文件后缀名") - private String fileSuffix; - /** - * URL地址 - */ - @ApiModelProperty("URL地址") - private String url; - /** - * 服务商 - */ - @ApiModelProperty("服务商") - private String service; + /** + * 文件名 + */ + @ApiModelProperty("文件名") + private String fileName; + /** + * 原名 + */ + @ApiModelProperty("原名") + private String originalName; + /** + * 文件后缀名 + */ + @ApiModelProperty("文件后缀名") + private String fileSuffix; + /** + * URL地址 + */ + @ApiModelProperty("URL地址") + private String url; + /** + * 服务商 + */ + @ApiModelProperty("服务商") + private String service; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java index 44bc7a205..9b8b3784c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysOssConfigBo.java @@ -25,43 +25,43 @@ import javax.validation.constraints.Size; @ApiModel("对象存储配置业务对象") public class SysOssConfigBo extends BaseEntity { - /** - * 主建 - */ - @ApiModelProperty(value = "主建", required = true) - @NotNull(message = "主建不能为空", groups = { EditGroup.class }) - private Long ossConfigId; + /** + * 主建 + */ + @ApiModelProperty(value = "主建", required = true) + @NotNull(message = "主建不能为空", groups = {EditGroup.class}) + private Long ossConfigId; /** * 配置key */ @ApiModelProperty(value = "configKey", required = true) - @NotBlank(message = "configKey不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(min = 2, max = 100, message = "configKey长度必须介于2和20 之间") + @NotBlank(message = "configKey不能为空", groups = {AddGroup.class, EditGroup.class}) + @Size(min = 2, max = 100, message = "configKey长度必须介于2和20 之间") private String configKey; /** * accessKey */ @ApiModelProperty(value = "accessKey", required = true) - @NotBlank(message = "accessKey不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(min = 2, max = 100, message = "accessKey长度必须介于2和100 之间") + @NotBlank(message = "accessKey不能为空", groups = {AddGroup.class, EditGroup.class}) + @Size(min = 2, max = 100, message = "accessKey长度必须介于2和100 之间") private String accessKey; /** * 秘钥 */ @ApiModelProperty(value = "secretKey", required = true) - @NotBlank(message = "secretKey不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(min = 2, max = 100, message = "secretKey长度必须介于2和100 之间") + @NotBlank(message = "secretKey不能为空", groups = {AddGroup.class, EditGroup.class}) + @Size(min = 2, max = 100, message = "secretKey长度必须介于2和100 之间") private String secretKey; /** * 桶名称 */ @ApiModelProperty(value = "bucketName", required = true) - @NotBlank(message = "bucketName不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(min = 2, max = 100, message = "bucketName长度必须介于2和100之间") + @NotBlank(message = "bucketName不能为空", groups = {AddGroup.class, EditGroup.class}) + @Size(min = 2, max = 100, message = "bucketName长度必须介于2和100之间") private String bucketName; /** @@ -74,21 +74,21 @@ public class SysOssConfigBo extends BaseEntity { * 访问站点 */ @ApiModelProperty(value = "endpoint", required = true) - @NotBlank(message = "endpoint不能为空", groups = { AddGroup.class, EditGroup.class }) - @Size(min = 2, max = 100, message = "endpoint长度必须介于2和100之间") + @NotBlank(message = "endpoint不能为空", groups = {AddGroup.class, EditGroup.class}) + @Size(min = 2, max = 100, message = "endpoint长度必须介于2和100之间") private String endpoint; - /** - * 是否https(Y=是,N=否) - */ - @ApiModelProperty("是否https(Y=是,N=否)") - private String isHttps; + /** + * 是否https(Y=是,N=否) + */ + @ApiModelProperty("是否https(Y=是,N=否)") + private String isHttps; - /** - * 状态(0=正常,1=停用) - */ - @ApiModelProperty("状态(0=正常,1=停用)") - private String status; + /** + * 状态(0=正常,1=停用) + */ + @ApiModelProperty("状态(0=正常,1=停用)") + private String status; /** * 域 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java index 495db54e1..6a3798adb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java @@ -1,8 +1,9 @@ package com.ruoyi.system.domain.vo; import com.ruoyi.common.utils.StringUtils; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import lombok.NoArgsConstructor; import lombok.experimental.Accessors; /** @@ -12,28 +13,33 @@ import lombok.experimental.Accessors; */ @Data -@NoArgsConstructor @Accessors(chain = true) +@ApiModel("路由显示信息") public class MetaVo { + /** * 设置该路由在侧边栏和面包屑中展示的名字 */ + @ApiModelProperty(value = "设置该路由在侧边栏和面包屑中展示的名字") private String title; /** * 设置该路由的图标,对应路径src/assets/icons/svg */ + @ApiModelProperty(value = "设置该路由的图标,对应路径src/assets/icons/svg") private String icon; /** * 设置为true,则不会被 缓存 */ + @ApiModelProperty(value = "设置为true,则不会被 缓存") private boolean noCache; - /** - * 内链地址(http(s)://开头) - */ - private String link; + /** + * 内链地址(http(s)://开头) + */ + @ApiModelProperty(value = "内链地址(http(s)://开头)") + private String link; public MetaVo(String title, String icon) { this.title = title; @@ -46,19 +52,19 @@ public class MetaVo { this.noCache = noCache; } - public MetaVo(String title, String icon, String link) { - this.title = title; - this.icon = icon; - this.link = link; - } + public MetaVo(String title, String icon, String link) { + this.title = title; + this.icon = icon; + this.link = link; + } - public MetaVo(String title, String icon, boolean noCache, String link) { - this.title = title; - this.icon = icon; - this.noCache = noCache; - if (StringUtils.ishttp(link)) { - this.link = link; - } - } + public MetaVo(String title, String icon, boolean noCache, String link) { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) { + this.link = link; + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java index 387adb447..05ba451d7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java @@ -1,7 +1,9 @@ package com.ruoyi.system.domain.vo; import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; import lombok.experimental.Accessors; import java.util.List; @@ -9,56 +11,66 @@ import java.util.List; /** * 路由配置信息 * - * @author ruoyi + * @author Lion Li */ @Data -@NoArgsConstructor @Accessors(chain = true) @JsonInclude(JsonInclude.Include.NON_EMPTY) +@ApiModel("路由配置信息") public class RouterVo { + /** * 路由名字 */ + @ApiModelProperty(value = "路由名字") private String name; /** * 路由地址 */ + @ApiModelProperty(value = "路由地址") private String path; /** * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 */ + @ApiModelProperty(value = "是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现") private boolean hidden; /** * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 */ + @ApiModelProperty(value = "重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击") private String redirect; /** * 组件地址 */ + @ApiModelProperty(value = "组件地址") private String component; /** * 路由参数:如 {"id": 1, "name": "ry"} */ + @ApiModelProperty(value = "路由参数:如 {\"id\": 1, \"name\": \"ry\"}") private String query; /** * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 */ + @ApiModelProperty(value = "当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面") private Boolean alwaysShow; /** * 其他元素 */ + @ApiModelProperty(value = "其他元素") private MetaVo meta; /** * 子路由 */ + @ApiModelProperty(value = "子路由") private List children; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java index 79b2b1766..0fb08dd00 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssConfigVo.java @@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; - /** * 对象存储配置视图对象 sys_oss_config * @@ -19,78 +18,78 @@ import lombok.Data; @ExcelIgnoreUnannotated public class SysOssConfigVo { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** + /** * 主建 */ - @ApiModelProperty("主建") - private Long ossConfigId; + @ApiModelProperty("主建") + private Long ossConfigId; /** * 配置key */ - @ApiModelProperty("配置key") - private String configKey; + @ApiModelProperty("配置key") + private String configKey; /** * accessKey */ - @ApiModelProperty("accessKey") - private String accessKey; + @ApiModelProperty("accessKey") + private String accessKey; /** * 秘钥 */ - @ApiModelProperty("secretKey") - private String secretKey; + @ApiModelProperty("secretKey") + private String secretKey; /** * 桶名称 */ - @ApiModelProperty("桶名称") - private String bucketName; + @ApiModelProperty("桶名称") + private String bucketName; /** * 前缀 */ - @ApiModelProperty("前缀") - private String prefix; + @ApiModelProperty("前缀") + private String prefix; /** * 访问站点 */ - @ApiModelProperty("访问站点") - private String endpoint; + @ApiModelProperty("访问站点") + private String endpoint; /** * 是否https(Y=是,N=否) */ - @ApiModelProperty("是否https(Y=是,N=否)") - private String isHttps; + @ApiModelProperty("是否https(Y=是,N=否)") + private String isHttps; /** * 域 */ - @ApiModelProperty("域") - private String region; + @ApiModelProperty("域") + private String region; /** * 状态(0=正常,1=停用) */ - @ApiModelProperty("状态(0=正常,1=停用)") - private String status; + @ApiModelProperty("状态(0=正常,1=停用)") + private String status; /** * 扩展字段 */ - @ApiModelProperty("扩展字段") - private String ext1; + @ApiModelProperty("扩展字段") + private String ext1; - /** - * 备注 - */ - @ApiModelProperty("备注") - private String remark; + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remark; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssVo.java index 26e0151df..eb2299ee6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysOssVo.java @@ -15,55 +15,55 @@ import java.util.Date; @ApiModel("OSS对象存储视图对象") public class SysOssVo { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 对象存储主键 - */ - @ApiModelProperty("对象存储主键") - private Long ossId; + /** + * 对象存储主键 + */ + @ApiModelProperty("对象存储主键") + private Long ossId; - /** - * 文件名 - */ - @ApiModelProperty("文件名") - private String fileName; + /** + * 文件名 + */ + @ApiModelProperty("文件名") + private String fileName; - /** - * 原名 - */ - @ApiModelProperty("原名") - private String originalName; + /** + * 原名 + */ + @ApiModelProperty("原名") + private String originalName; - /** - * 文件后缀名 - */ - @ApiModelProperty("文件后缀名") - private String fileSuffix; + /** + * 文件后缀名 + */ + @ApiModelProperty("文件后缀名") + private String fileSuffix; - /** - * URL地址 - */ - @ApiModelProperty("URL地址") - private String url; + /** + * URL地址 + */ + @ApiModelProperty("URL地址") + private String url; - /** - * 创建时间 - */ - @ApiModelProperty("创建时间") - private Date createTime; + /** + * 创建时间 + */ + @ApiModelProperty("创建时间") + private Date createTime; - /** - * 上传人 - */ - @ApiModelProperty("上传人") - private String createBy; + /** + * 上传人 + */ + @ApiModelProperty("上传人") + private String createBy; - /** - * 服务商 - */ - @ApiModelProperty("服务商") - private String service; + /** + * 服务商 + */ + @ApiModelProperty("服务商") + private String service; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java index 6842f0adb..c43c8a5c3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserExportVo.java @@ -20,74 +20,74 @@ import java.util.Date; @NoArgsConstructor @Accessors(chain = true) public class SysUserExportVo implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 用户ID - */ - @ExcelProperty(value = "用户序号") - private Long userId; + /** + * 用户ID + */ + @ExcelProperty(value = "用户序号") + private Long userId; - /** - * 用户账号 - */ - @ExcelProperty(value = "登录名称") - private String userName; + /** + * 用户账号 + */ + @ExcelProperty(value = "登录名称") + private String userName; - /** - * 用户昵称 - */ - @ExcelProperty(value = "用户名称") - private String nickName; + /** + * 用户昵称 + */ + @ExcelProperty(value = "用户名称") + private String nickName; - /** - * 用户邮箱 - */ - @ExcelProperty(value = "用户邮箱") - private String email; + /** + * 用户邮箱 + */ + @ExcelProperty(value = "用户邮箱") + private String email; - /** - * 手机号码 - */ - @ExcelProperty(value = "手机号码") - private String phonenumber; + /** + * 手机号码 + */ + @ExcelProperty(value = "手机号码") + private String phonenumber; - /** - * 用户性别 - */ - @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_user_sex") - private String sex; + /** + * 用户性别 + */ + @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_user_sex") + private String sex; - /** - * 帐号状态(0正常 1停用) - */ - @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_common_status") - private String status; + /** + * 帐号状态(0正常 1停用) + */ + @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_common_status") + private String status; - /** - * 最后登录IP - */ - @ExcelProperty(value = "最后登录IP") - private String loginIp; + /** + * 最后登录IP + */ + @ExcelProperty(value = "最后登录IP") + private String loginIp; - /** - * 最后登录时间 - */ - @ExcelProperty(value = "最后登录时间") - private Date loginDate; + /** + * 最后登录时间 + */ + @ExcelProperty(value = "最后登录时间") + private Date loginDate; - /** - * 部门名称 - */ - @ExcelProperty(value = "部门名称") - private String deptName; + /** + * 部门名称 + */ + @ExcelProperty(value = "部门名称") + private String deptName; - /** - * 负责人 - */ - @ExcelProperty(value = "部门负责人") - private String leader; + /** + * 负责人 + */ + @ExcelProperty(value = "部门负责人") + private String leader; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserImportVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserImportVo.java index 9c1a7d30d..16932ad68 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserImportVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/SysUserImportVo.java @@ -18,56 +18,56 @@ import java.io.Serializable; @NoArgsConstructor // @Accessors(chain = true) // 导入不允许使用 会找不到set方法 public class SysUserImportVo implements Serializable { - private static final long serialVersionUID = 1L; + private static final long serialVersionUID = 1L; - /** - * 用户ID - */ - @ExcelProperty(value = "用户序号") - private Long userId; + /** + * 用户ID + */ + @ExcelProperty(value = "用户序号") + private Long userId; - /** - * 部门ID - */ - @ExcelProperty(value = "部门编号") - private Long deptId; + /** + * 部门ID + */ + @ExcelProperty(value = "部门编号") + private Long deptId; - /** - * 用户账号 - */ - @ExcelProperty(value = "登录名称") - private String userName; + /** + * 用户账号 + */ + @ExcelProperty(value = "登录名称") + private String userName; - /** - * 用户昵称 - */ - @ExcelProperty(value = "用户名称") - private String nickName; + /** + * 用户昵称 + */ + @ExcelProperty(value = "用户名称") + private String nickName; - /** - * 用户邮箱 - */ - @ExcelProperty(value = "用户邮箱") - private String email; + /** + * 用户邮箱 + */ + @ExcelProperty(value = "用户邮箱") + private String email; - /** - * 手机号码 - */ - @ExcelProperty(value = "手机号码") - private String phonenumber; + /** + * 手机号码 + */ + @ExcelProperty(value = "手机号码") + private String phonenumber; - /** - * 用户性别 - */ - @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_user_sex") - private String sex; + /** + * 用户性别 + */ + @ExcelProperty(value = "用户性别", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_user_sex") + private String sex; - /** - * 帐号状态(0正常 1停用) - */ - @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_common_status") - private String status; + /** + * 帐号状态(0正常 1停用) + */ + @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_common_status") + private String status; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java index 97aaa5210..9431389e2 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysConfig; /** * 参数配置 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysConfigMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java index ecee7eae0..051085c3e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -9,7 +9,7 @@ import java.util.List; /** * 部门管理 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysDeptMapper extends BaseMapperPlus { @@ -19,23 +19,23 @@ public interface SysDeptMapper extends BaseMapperPlus { * @param dept 部门信息 * @return 部门信息集合 */ - public List selectDeptList(SysDept dept); + List selectDeptList(SysDept dept); /** * 根据角色ID查询部门树信息 * - * @param roleId 角色ID + * @param roleId 角色ID * @param deptCheckStrictly 部门树选择项是否关联显示 * @return 选中部门列表 */ - public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); - /** - * 修改子元素关系 - * - * @param depts 子元素 - * @return 结果 - */ - public int updateDeptChildren(@Param("depts") List depts); + /** + * 修改子元素关系 + * + * @param depts 子元素 + * @return 结果 + */ + int updateDeptChildren(@Param("depts") List depts); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java index db5c98e3b..e45c198d0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java @@ -9,15 +9,15 @@ import java.util.List; /** * 字典表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysDictDataMapper extends BaseMapperPlus { - default List selectDictDataByType(String dictType) { - return selectList( - new LambdaQueryWrapper() - .eq(SysDictData::getStatus, "0") - .eq(SysDictData::getDictType, dictType) - .orderByAsc(SysDictData::getDictSort)); - } + default List selectDictDataByType(String dictType) { + return selectList( + new LambdaQueryWrapper() + .eq(SysDictData::getStatus, "0") + .eq(SysDictData::getDictType, dictType) + .orderByAsc(SysDictData::getDictSort)); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java index 7ff8c460e..7e03a2504 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; /** * 字典表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysDictTypeMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java index cc99c104a..fe47417f0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysLogininfor; /** * 系统访问日志情况信息 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysLogininforMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java index f54ceea89..8b5dcd6b1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -9,7 +9,7 @@ import java.util.List; /** * 菜单表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysMenuMapper extends BaseMapperPlus { @@ -18,7 +18,7 @@ public interface SysMenuMapper extends BaseMapperPlus { * * @return 权限列表 */ - public List selectMenuPerms(); + List selectMenuPerms(); /** * 根据用户查询系统菜单列表 @@ -26,7 +26,7 @@ public interface SysMenuMapper extends BaseMapperPlus { * @param menu 菜单信息 * @return 菜单列表 */ - public List selectMenuListByUserId(SysMenu menu); + List selectMenuListByUserId(SysMenu menu); /** * 根据用户ID查询权限 @@ -34,14 +34,14 @@ public interface SysMenuMapper extends BaseMapperPlus { * @param userId 用户ID * @return 权限列表 */ - public List selectMenuPermsByUserId(Long userId); + List selectMenuPermsByUserId(Long userId); /** * 根据用户ID查询菜单 * * @return 菜单列表 */ - public List selectMenuTreeAll(); + List selectMenuTreeAll(); /** * 根据用户ID查询菜单 @@ -49,7 +49,7 @@ public interface SysMenuMapper extends BaseMapperPlus { * @param userId 用户ID * @return 菜单列表 */ - public List selectMenuTreeByUserId(Long userId); + List selectMenuTreeByUserId(Long userId); /** * 根据角色ID查询菜单树信息 @@ -58,6 +58,6 @@ public interface SysMenuMapper extends BaseMapperPlus { * @param menuCheckStrictly 菜单树选择项是否关联显示 * @return 选中菜单列表 */ - public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java index 68c2825d0..de972ff1f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysNotice; /** * 通知公告表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysNoticeMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java index 93d32625d..c1c3b5411 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysOperLog; /** * 操作日志 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysOperLogMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java index 8a1b309f8..50a5c752c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java @@ -8,7 +8,7 @@ import java.util.List; /** * 岗位信息 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysPostMapper extends BaseMapperPlus { @@ -18,7 +18,7 @@ public interface SysPostMapper extends BaseMapperPlus { * @param userId 用户ID * @return 选中岗位ID列表 */ - public List selectPostListByUserId(Long userId); + List selectPostListByUserId(Long userId); /** * 查询用户所属岗位组 @@ -26,6 +26,6 @@ public interface SysPostMapper extends BaseMapperPlus { * @param userName 用户名 * @return 结果 */ - public List selectPostsByUserName(String userName); + List selectPostsByUserName(String userName); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java index af248c17e..bf91a9273 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysRoleDept; /** * 角色与部门关联表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysRoleDeptMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index 972f8f61c..164a69747 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -10,7 +10,7 @@ import java.util.List; /** * 角色表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysRoleMapper extends BaseMapperPlus { @@ -22,7 +22,7 @@ public interface SysRoleMapper extends BaseMapperPlus { * @param role 角色信息 * @return 角色数据集合信息 */ - public List selectRoleList(SysRole role); + List selectRoleList(SysRole role); /** * 根据用户ID查询角色 @@ -30,7 +30,7 @@ public interface SysRoleMapper extends BaseMapperPlus { * @param userId 用户ID * @return 角色列表 */ - public List selectRolePermissionByUserId(Long userId); + List selectRolePermissionByUserId(Long userId); /** @@ -39,7 +39,7 @@ public interface SysRoleMapper extends BaseMapperPlus { * @param userId 用户ID * @return 选中角色ID列表 */ - public List selectRoleListByUserId(Long userId); + List selectRoleListByUserId(Long userId); /** * 根据用户ID查询角色 @@ -47,6 +47,6 @@ public interface SysRoleMapper extends BaseMapperPlus { * @param userName 用户名 * @return 角色列表 */ - public List selectRolesByUserName(String userName); + List selectRolesByUserName(String userName); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java index c7e743ed8..f92ebbb0f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysRoleMenu; /** * 角色与菜单关联表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysRoleMenuMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java index cba066880..e930d879a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -10,7 +10,7 @@ import java.util.List; /** * 用户表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysUserMapper extends BaseMapperPlus { @@ -22,7 +22,7 @@ public interface SysUserMapper extends BaseMapperPlus { * @param sysUser 用户信息 * @return 用户信息集合信息 */ - public List selectUserList(SysUser sysUser); + List selectUserList(SysUser sysUser); /** * 根据条件分页查询未已配用户角色列表 @@ -30,7 +30,7 @@ public interface SysUserMapper extends BaseMapperPlus { * @param user 用户信息 * @return 用户信息集合信息 */ - public Page selectAllocatedList(@Param("page") Page page, @Param("user") SysUser user); + Page selectAllocatedList(@Param("page") Page page, @Param("user") SysUser user); /** * 根据条件分页查询未分配用户角色列表 @@ -38,7 +38,7 @@ public interface SysUserMapper extends BaseMapperPlus { * @param user 用户信息 * @return 用户信息集合信息 */ - public Page selectUnallocatedList(@Param("page") Page page, @Param("user") SysUser user); + Page selectUnallocatedList(@Param("page") Page page, @Param("user") SysUser user); /** * 通过用户名查询用户 @@ -46,7 +46,7 @@ public interface SysUserMapper extends BaseMapperPlus { * @param userName 用户名 * @return 用户对象信息 */ - public SysUser selectUserByUserName(String userName); + SysUser selectUserByUserName(String userName); /** * 通过用户ID查询用户 @@ -54,6 +54,6 @@ public interface SysUserMapper extends BaseMapperPlus { * @param userId 用户ID * @return 用户对象信息 */ - public SysUser selectUserById(Long userId); + SysUser selectUserById(Long userId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java index e5c63e336..e0f1bb049 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysUserPost; /** * 用户与岗位关联表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysUserPostMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java index 260ec32ae..052599cf7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysUserRole; /** * 用户与角色关联表 数据层 * - * @author ruoyi + * @author Lion Li */ public interface SysUserRoleMapper extends BaseMapperPlus { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java index fdc76fb4d..fe283876f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 参数配置 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysConfigService extends IService { @@ -22,7 +22,7 @@ public interface ISysConfigService extends IService { * @param configId 参数配置ID * @return 参数配置信息 */ - public SysConfig selectConfigById(Long configId); + SysConfig selectConfigById(Long configId); /** * 根据键名查询参数配置信息 @@ -30,14 +30,14 @@ public interface ISysConfigService extends IService { * @param configKey 参数键名 * @return 参数键值 */ - public String selectConfigByKey(String configKey); + String selectConfigByKey(String configKey); /** * 获取验证码开关 * * @return true开启,false关闭 */ - public boolean selectCaptchaOnOff(); + boolean selectCaptchaOnOff(); /** * 查询参数配置列表 @@ -45,7 +45,7 @@ public interface ISysConfigService extends IService { * @param config 参数配置信息 * @return 参数配置集合 */ - public List selectConfigList(SysConfig config); + List selectConfigList(SysConfig config); /** * 新增参数配置 @@ -53,7 +53,7 @@ public interface ISysConfigService extends IService { * @param config 参数配置信息 * @return 结果 */ - public int insertConfig(SysConfig config); + int insertConfig(SysConfig config); /** * 修改参数配置 @@ -61,7 +61,7 @@ public interface ISysConfigService extends IService { * @param config 参数配置信息 * @return 结果 */ - public int updateConfig(SysConfig config); + int updateConfig(SysConfig config); /** * 批量删除参数信息 @@ -69,22 +69,22 @@ public interface ISysConfigService extends IService { * @param configIds 需要删除的参数ID * @return 结果 */ - public void deleteConfigByIds(Long[] configIds); + void deleteConfigByIds(Long[] configIds); /** * 加载参数缓存数据 */ - public void loadingConfigCache(); + void loadingConfigCache(); /** * 清空参数缓存数据 */ - public void clearConfigCache(); + void clearConfigCache(); /** * 重置参数缓存数据 */ - public void resetConfigCache(); + void resetConfigCache(); /** * 校验参数键名是否唯一 @@ -92,5 +92,5 @@ public interface ISysConfigService extends IService { * @param config 参数信息 * @return 结果 */ - public String checkConfigKeyUnique(SysConfig config); + String checkConfigKeyUnique(SysConfig config); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java index 38bccc9c5..ea6afa2e5 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 部门管理 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysDeptService extends IService { /** @@ -18,7 +18,7 @@ public interface ISysDeptService extends IService { * @param dept 部门信息 * @return 部门信息集合 */ - public List selectDeptList(SysDept dept); + List selectDeptList(SysDept dept); /** * 构建前端所需要树结构 @@ -26,7 +26,7 @@ public interface ISysDeptService extends IService { * @param depts 部门列表 * @return 树结构列表 */ - public List buildDeptTree(List depts); + List buildDeptTree(List depts); /** * 构建前端所需要下拉树结构 @@ -34,7 +34,7 @@ public interface ISysDeptService extends IService { * @param depts 部门列表 * @return 下拉树结构列表 */ - public List buildDeptTreeSelect(List depts); + List buildDeptTreeSelect(List depts); /** * 根据角色ID查询部门树信息 @@ -42,7 +42,7 @@ public interface ISysDeptService extends IService { * @param roleId 角色ID * @return 选中部门列表 */ - public List selectDeptListByRoleId(Long roleId); + List selectDeptListByRoleId(Long roleId); /** * 根据部门ID查询信息 @@ -50,7 +50,7 @@ public interface ISysDeptService extends IService { * @param deptId 部门ID * @return 部门信息 */ - public SysDept selectDeptById(Long deptId); + SysDept selectDeptById(Long deptId); /** * 根据ID查询所有子部门(正常状态) @@ -58,7 +58,7 @@ public interface ISysDeptService extends IService { * @param deptId 部门ID * @return 子部门数 */ - public long selectNormalChildrenDeptById(Long deptId); + long selectNormalChildrenDeptById(Long deptId); /** * 是否存在部门子节点 @@ -66,7 +66,7 @@ public interface ISysDeptService extends IService { * @param deptId 部门ID * @return 结果 */ - public boolean hasChildByDeptId(Long deptId); + boolean hasChildByDeptId(Long deptId); /** * 查询部门是否存在用户 @@ -74,7 +74,7 @@ public interface ISysDeptService extends IService { * @param deptId 部门ID * @return 结果 true 存在 false 不存在 */ - public boolean checkDeptExistUser(Long deptId); + boolean checkDeptExistUser(Long deptId); /** * 校验部门名称是否唯一 @@ -82,14 +82,14 @@ public interface ISysDeptService extends IService { * @param dept 部门信息 * @return 结果 */ - public String checkDeptNameUnique(SysDept dept); + String checkDeptNameUnique(SysDept dept); /** * 校验部门是否有数据权限 * * @param deptId 部门id */ - public void checkDeptDataScope(Long deptId); + void checkDeptDataScope(Long deptId); /** * 新增保存部门信息 @@ -97,7 +97,7 @@ public interface ISysDeptService extends IService { * @param dept 部门信息 * @return 结果 */ - public int insertDept(SysDept dept); + int insertDept(SysDept dept); /** * 修改保存部门信息 @@ -105,7 +105,7 @@ public interface ISysDeptService extends IService { * @param dept 部门信息 * @return 结果 */ - public int updateDept(SysDept dept); + int updateDept(SysDept dept); /** * 删除部门管理信息 @@ -113,5 +113,5 @@ public interface ISysDeptService extends IService { * @param deptId 部门ID * @return 结果 */ - public int deleteDeptById(Long deptId); + int deleteDeptById(Long deptId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java index 25daa1a88..ce6898ecf 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 字典 业务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysDictDataService extends IService { @@ -22,7 +22,7 @@ public interface ISysDictDataService extends IService { * @param dictData 字典数据信息 * @return 字典数据集合信息 */ - public List selectDictDataList(SysDictData dictData); + List selectDictDataList(SysDictData dictData); /** * 根据字典类型和字典键值查询字典数据信息 @@ -31,7 +31,7 @@ public interface ISysDictDataService extends IService { * @param dictValue 字典键值 * @return 字典标签 */ - public String selectDictLabel(String dictType, String dictValue); + String selectDictLabel(String dictType, String dictValue); /** * 根据字典数据ID查询信息 @@ -39,7 +39,7 @@ public interface ISysDictDataService extends IService { * @param dictCode 字典数据ID * @return 字典数据 */ - public SysDictData selectDictDataById(Long dictCode); + SysDictData selectDictDataById(Long dictCode); /** * 批量删除字典数据信息 @@ -47,7 +47,7 @@ public interface ISysDictDataService extends IService { * @param dictCodes 需要删除的字典数据ID * @return 结果 */ - public void deleteDictDataByIds(Long[] dictCodes); + void deleteDictDataByIds(Long[] dictCodes); /** * 新增保存字典数据信息 @@ -55,7 +55,7 @@ public interface ISysDictDataService extends IService { * @param dictData 字典数据信息 * @return 结果 */ - public int insertDictData(SysDictData dictData); + int insertDictData(SysDictData dictData); /** * 修改保存字典数据信息 @@ -63,5 +63,5 @@ public interface ISysDictDataService extends IService { * @param dictData 字典数据信息 * @return 结果 */ - public int updateDictData(SysDictData dictData); + int updateDictData(SysDictData dictData); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java index ac1d6c9af..9599c4f1a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -10,7 +10,7 @@ import java.util.List; /** * 字典 业务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysDictTypeService extends IService { @@ -23,14 +23,14 @@ public interface ISysDictTypeService extends IService { * @param dictType 字典类型信息 * @return 字典类型集合信息 */ - public List selectDictTypeList(SysDictType dictType); + List selectDictTypeList(SysDictType dictType); /** * 根据所有字典类型 * * @return 字典类型集合信息 */ - public List selectDictTypeAll(); + List selectDictTypeAll(); /** * 根据字典类型查询字典数据 @@ -38,7 +38,7 @@ public interface ISysDictTypeService extends IService { * @param dictType 字典类型 * @return 字典数据集合信息 */ - public List selectDictDataByType(String dictType); + List selectDictDataByType(String dictType); /** * 根据字典类型ID查询信息 @@ -46,7 +46,7 @@ public interface ISysDictTypeService extends IService { * @param dictId 字典类型ID * @return 字典类型 */ - public SysDictType selectDictTypeById(Long dictId); + SysDictType selectDictTypeById(Long dictId); /** * 根据字典类型查询信息 @@ -54,7 +54,7 @@ public interface ISysDictTypeService extends IService { * @param dictType 字典类型 * @return 字典类型 */ - public SysDictType selectDictTypeByType(String dictType); + SysDictType selectDictTypeByType(String dictType); /** * 批量删除字典信息 @@ -62,22 +62,22 @@ public interface ISysDictTypeService extends IService { * @param dictIds 需要删除的字典ID * @return 结果 */ - public void deleteDictTypeByIds(Long[] dictIds); + void deleteDictTypeByIds(Long[] dictIds); /** * 加载字典缓存数据 */ - public void loadingDictCache(); + void loadingDictCache(); /** * 清空字典缓存数据 */ - public void clearDictCache(); + void clearDictCache(); /** * 重置字典缓存数据 */ - public void resetDictCache(); + void resetDictCache(); /** * 新增保存字典类型信息 @@ -85,7 +85,7 @@ public interface ISysDictTypeService extends IService { * @param dictType 字典类型信息 * @return 结果 */ - public int insertDictType(SysDictType dictType); + int insertDictType(SysDictType dictType); /** * 修改保存字典类型信息 @@ -93,7 +93,7 @@ public interface ISysDictTypeService extends IService { * @param dictType 字典类型信息 * @return 结果 */ - public int updateDictType(SysDictType dictType); + int updateDictType(SysDictType dictType); /** * 校验字典类型称是否唯一 @@ -101,5 +101,5 @@ public interface ISysDictTypeService extends IService { * @param dictType 字典类型 * @return 结果 */ - public String checkDictTypeUnique(SysDictType dictType); + String checkDictTypeUnique(SysDictType dictType); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java index 5a7d9700b..5d4a66e24 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 系统访问日志情况信息 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysLogininforService extends IService { @@ -21,7 +21,7 @@ public interface ISysLogininforService extends IService { * * @param logininfor 访问日志对象 */ - public void insertLogininfor(SysLogininfor logininfor); + void insertLogininfor(SysLogininfor logininfor); /** * 查询系统登录日志集合 @@ -29,7 +29,7 @@ public interface ISysLogininforService extends IService { * @param logininfor 访问日志对象 * @return 登录记录集合 */ - public List selectLogininforList(SysLogininfor logininfor); + List selectLogininforList(SysLogininfor logininfor); /** * 批量删除系统登录日志 @@ -37,10 +37,10 @@ public interface ISysLogininforService extends IService { * @param infoIds 需要删除的登录日志ID * @return */ - public int deleteLogininforByIds(Long[] infoIds); + int deleteLogininforByIds(Long[] infoIds); /** * 清空系统登录日志 */ - public void cleanLogininfor(); + void cleanLogininfor(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index 391cf1901..eea882e67 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -11,16 +11,17 @@ import java.util.Set; /** * 菜单 业务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysMenuService extends IService { + /** * 根据用户查询系统菜单列表 * * @param userId 用户ID * @return 菜单列表 */ - public List selectMenuList(Long userId); + List selectMenuList(Long userId); /** * 根据用户查询系统菜单列表 @@ -29,7 +30,7 @@ public interface ISysMenuService extends IService { * @param userId 用户ID * @return 菜单列表 */ - public List selectMenuList(SysMenu menu, Long userId); + List selectMenuList(SysMenu menu, Long userId); /** * 根据用户ID查询权限 @@ -37,7 +38,7 @@ public interface ISysMenuService extends IService { * @param userId 用户ID * @return 权限列表 */ - public Set selectMenuPermsByUserId(Long userId); + Set selectMenuPermsByUserId(Long userId); /** * 根据用户ID查询菜单树信息 @@ -45,7 +46,7 @@ public interface ISysMenuService extends IService { * @param userId 用户ID * @return 菜单列表 */ - public List selectMenuTreeByUserId(Long userId); + List selectMenuTreeByUserId(Long userId); /** * 根据角色ID查询菜单树信息 @@ -53,7 +54,7 @@ public interface ISysMenuService extends IService { * @param roleId 角色ID * @return 选中菜单列表 */ - public List selectMenuListByRoleId(Long roleId); + List selectMenuListByRoleId(Long roleId); /** * 构建前端路由所需要的菜单 @@ -61,7 +62,7 @@ public interface ISysMenuService extends IService { * @param menus 菜单列表 * @return 路由列表 */ - public List buildMenus(List menus); + List buildMenus(List menus); /** * 构建前端所需要树结构 @@ -69,7 +70,7 @@ public interface ISysMenuService extends IService { * @param menus 菜单列表 * @return 树结构列表 */ - public List buildMenuTree(List menus); + List buildMenuTree(List menus); /** * 构建前端所需要下拉树结构 @@ -77,7 +78,7 @@ public interface ISysMenuService extends IService { * @param menus 菜单列表 * @return 下拉树结构列表 */ - public List buildMenuTreeSelect(List menus); + List buildMenuTreeSelect(List menus); /** * 根据菜单ID查询信息 @@ -85,7 +86,7 @@ public interface ISysMenuService extends IService { * @param menuId 菜单ID * @return 菜单信息 */ - public SysMenu selectMenuById(Long menuId); + SysMenu selectMenuById(Long menuId); /** * 是否存在菜单子节点 @@ -93,7 +94,7 @@ public interface ISysMenuService extends IService { * @param menuId 菜单ID * @return 结果 true 存在 false 不存在 */ - public boolean hasChildByMenuId(Long menuId); + boolean hasChildByMenuId(Long menuId); /** * 查询菜单是否存在角色 @@ -101,7 +102,7 @@ public interface ISysMenuService extends IService { * @param menuId 菜单ID * @return 结果 true 存在 false 不存在 */ - public boolean checkMenuExistRole(Long menuId); + boolean checkMenuExistRole(Long menuId); /** * 新增保存菜单信息 @@ -109,7 +110,7 @@ public interface ISysMenuService extends IService { * @param menu 菜单信息 * @return 结果 */ - public int insertMenu(SysMenu menu); + int insertMenu(SysMenu menu); /** * 修改保存菜单信息 @@ -117,7 +118,7 @@ public interface ISysMenuService extends IService { * @param menu 菜单信息 * @return 结果 */ - public int updateMenu(SysMenu menu); + int updateMenu(SysMenu menu); /** * 删除菜单管理信息 @@ -125,7 +126,7 @@ public interface ISysMenuService extends IService { * @param menuId 菜单ID * @return 结果 */ - public int deleteMenuById(Long menuId); + int deleteMenuById(Long menuId); /** * 校验菜单名称是否唯一 @@ -133,5 +134,5 @@ public interface ISysMenuService extends IService { * @param menu 菜单信息 * @return 结果 */ - public String checkMenuNameUnique(SysMenu menu); + String checkMenuNameUnique(SysMenu menu); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java index 535e7608d..7db68daea 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 公告 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysNoticeService extends IService { @@ -22,7 +22,7 @@ public interface ISysNoticeService extends IService { * @param noticeId 公告ID * @return 公告信息 */ - public SysNotice selectNoticeById(Long noticeId); + SysNotice selectNoticeById(Long noticeId); /** * 查询公告列表 @@ -30,7 +30,7 @@ public interface ISysNoticeService extends IService { * @param notice 公告信息 * @return 公告集合 */ - public List selectNoticeList(SysNotice notice); + List selectNoticeList(SysNotice notice); /** * 新增公告 @@ -38,7 +38,7 @@ public interface ISysNoticeService extends IService { * @param notice 公告信息 * @return 结果 */ - public int insertNotice(SysNotice notice); + int insertNotice(SysNotice notice); /** * 修改公告 @@ -46,7 +46,7 @@ public interface ISysNoticeService extends IService { * @param notice 公告信息 * @return 结果 */ - public int updateNotice(SysNotice notice); + int updateNotice(SysNotice notice); /** * 删除公告信息 @@ -54,7 +54,7 @@ public interface ISysNoticeService extends IService { * @param noticeId 公告ID * @return 结果 */ - public int deleteNoticeById(Long noticeId); + int deleteNoticeById(Long noticeId); /** * 批量删除公告信息 @@ -62,5 +62,5 @@ public interface ISysNoticeService extends IService { * @param noticeIds 需要删除的公告ID * @return 结果 */ - public int deleteNoticeByIds(Long[] noticeIds); + int deleteNoticeByIds(Long[] noticeIds); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java index ecfadb196..531f6390f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 操作日志 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysOperLogService extends IService { @@ -20,7 +20,7 @@ public interface ISysOperLogService extends IService { * * @param operLog 操作日志对象 */ - public void insertOperlog(SysOperLog operLog); + void insertOperlog(SysOperLog operLog); /** * 查询系统操作日志集合 @@ -28,7 +28,7 @@ public interface ISysOperLogService extends IService { * @param operLog 操作日志对象 * @return 操作日志集合 */ - public List selectOperLogList(SysOperLog operLog); + List selectOperLogList(SysOperLog operLog); /** * 批量删除系统操作日志 @@ -36,7 +36,7 @@ public interface ISysOperLogService extends IService { * @param operIds 需要删除的操作日志ID * @return 结果 */ - public int deleteOperLogByIds(Long[] operIds); + int deleteOperLogByIds(Long[] operIds); /** * 查询操作日志详细 @@ -44,10 +44,10 @@ public interface ISysOperLogService extends IService { * @param operId 操作ID * @return 操作日志对象 */ - public SysOperLog selectOperLogById(Long operId); + SysOperLog selectOperLogById(Long operId); /** * 清空操作日志 */ - public void cleanOperLog(); + void cleanOperLog(); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java index 2748078f4..759ec5b41 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssConfigService.java @@ -17,42 +17,45 @@ import java.util.Collection; */ public interface ISysOssConfigService extends IServicePlus { - /** - * 查询单个 - */ - SysOssConfigVo queryById(Integer ossConfigId); + /** + * 查询单个 + */ + SysOssConfigVo queryById(Integer ossConfigId); - /** - * 查询列表 - */ + /** + * 查询列表 + */ TableDataInfo queryPageList(SysOssConfigBo bo); - /** - * 根据新增业务对象插入对象存储配置 - * @param bo 对象存储配置新增业务对象 - * @return - */ - Boolean insertByBo(SysOssConfigBo bo); + /** + * 根据新增业务对象插入对象存储配置 + * + * @param bo 对象存储配置新增业务对象 + * @return + */ + Boolean insertByBo(SysOssConfigBo bo); - /** - * 根据编辑业务对象修改对象存储配置 - * @param bo 对象存储配置编辑业务对象 - * @return - */ - Boolean updateByBo(SysOssConfigBo bo); + /** + * 根据编辑业务对象修改对象存储配置 + * + * @param bo 对象存储配置编辑业务对象 + * @return + */ + Boolean updateByBo(SysOssConfigBo bo); - /** - * 校验并删除数据 - * @param ids 主键集合 - * @param isValid 是否校验,true-删除前校验,false-不校验 - * @return - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + /** + * 校验并删除数据 + * + * @param ids 主键集合 + * @param isValid 是否校验,true-删除前校验,false-不校验 + * @return + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); - /** - * 启用停用状态 - */ - int updateOssConfigStatus(SysOssConfigBo bo); + /** + * 启用停用状态 + */ + int updateOssConfigStatus(SysOssConfigBo bo); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java index b5dc0784f..948e8f762 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOssService.java @@ -16,9 +16,9 @@ import java.util.Collection; */ public interface ISysOssService extends IServicePlus { - TableDataInfo queryPageList(SysOssBo sysOss); + TableDataInfo queryPageList(SysOssBo sysOss); - SysOss upload(MultipartFile file); + SysOss upload(MultipartFile file); - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java index 3f9db85e8..a049928ce 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 岗位信息 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysPostService extends IService { @@ -22,14 +22,14 @@ public interface ISysPostService extends IService { * @param post 岗位信息 * @return 岗位列表 */ - public List selectPostList(SysPost post); + List selectPostList(SysPost post); /** * 查询所有岗位 * * @return 岗位列表 */ - public List selectPostAll(); + List selectPostAll(); /** * 通过岗位ID查询岗位信息 @@ -37,7 +37,7 @@ public interface ISysPostService extends IService { * @param postId 岗位ID * @return 角色对象信息 */ - public SysPost selectPostById(Long postId); + SysPost selectPostById(Long postId); /** * 根据用户ID获取岗位选择框列表 @@ -45,7 +45,7 @@ public interface ISysPostService extends IService { * @param userId 用户ID * @return 选中岗位ID列表 */ - public List selectPostListByUserId(Long userId); + List selectPostListByUserId(Long userId); /** * 校验岗位名称 @@ -53,7 +53,7 @@ public interface ISysPostService extends IService { * @param post 岗位信息 * @return 结果 */ - public String checkPostNameUnique(SysPost post); + String checkPostNameUnique(SysPost post); /** * 校验岗位编码 @@ -61,7 +61,7 @@ public interface ISysPostService extends IService { * @param post 岗位信息 * @return 结果 */ - public String checkPostCodeUnique(SysPost post); + String checkPostCodeUnique(SysPost post); /** * 通过岗位ID查询岗位使用数量 @@ -69,7 +69,7 @@ public interface ISysPostService extends IService { * @param postId 岗位ID * @return 结果 */ - public long countUserPostById(Long postId); + long countUserPostById(Long postId); /** * 删除岗位信息 @@ -77,7 +77,7 @@ public interface ISysPostService extends IService { * @param postId 岗位ID * @return 结果 */ - public int deletePostById(Long postId); + int deletePostById(Long postId); /** * 批量删除岗位信息 @@ -86,7 +86,7 @@ public interface ISysPostService extends IService { * @return 结果 * @throws Exception 异常 */ - public int deletePostByIds(Long[] postIds); + int deletePostByIds(Long[] postIds); /** * 新增保存岗位信息 @@ -94,7 +94,7 @@ public interface ISysPostService extends IService { * @param post 岗位信息 * @return 结果 */ - public int insertPost(SysPost post); + int insertPost(SysPost post); /** * 修改保存岗位信息 @@ -102,5 +102,5 @@ public interface ISysPostService extends IService { * @param post 岗位信息 * @return 结果 */ - public int updatePost(SysPost post); + int updatePost(SysPost post); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java index 84e647891..c97d2a6f9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -11,7 +11,7 @@ import java.util.Set; /** * 角色业务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysRoleService extends IService { @@ -24,7 +24,7 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 角色数据集合信息 */ - public List selectRoleList(SysRole role); + List selectRoleList(SysRole role); /** * 根据用户ID查询角色列表 @@ -32,7 +32,7 @@ public interface ISysRoleService extends IService { * @param userId 用户ID * @return 角色列表 */ - public List selectRolesByUserId(Long userId); + List selectRolesByUserId(Long userId); /** * 根据用户ID查询角色权限 @@ -40,14 +40,14 @@ public interface ISysRoleService extends IService { * @param userId 用户ID * @return 权限列表 */ - public Set selectRolePermissionByUserId(Long userId); + Set selectRolePermissionByUserId(Long userId); /** * 查询所有角色 * * @return 角色列表 */ - public List selectRoleAll(); + List selectRoleAll(); /** * 根据用户ID获取角色选择框列表 @@ -55,7 +55,7 @@ public interface ISysRoleService extends IService { * @param userId 用户ID * @return 选中角色ID列表 */ - public List selectRoleListByUserId(Long userId); + List selectRoleListByUserId(Long userId); /** * 通过角色ID查询角色 @@ -63,7 +63,7 @@ public interface ISysRoleService extends IService { * @param roleId 角色ID * @return 角色对象信息 */ - public SysRole selectRoleById(Long roleId); + SysRole selectRoleById(Long roleId); /** * 校验角色名称是否唯一 @@ -71,7 +71,7 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 结果 */ - public String checkRoleNameUnique(SysRole role); + String checkRoleNameUnique(SysRole role); /** * 校验角色权限是否唯一 @@ -79,21 +79,21 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 结果 */ - public String checkRoleKeyUnique(SysRole role); + String checkRoleKeyUnique(SysRole role); /** * 校验角色是否允许操作 * * @param role 角色信息 */ - public void checkRoleAllowed(SysRole role); + void checkRoleAllowed(SysRole role); /** * 校验角色是否有数据权限 * * @param roleId 角色id */ - public void checkRoleDataScope(Long roleId); + void checkRoleDataScope(Long roleId); /** * 通过角色ID查询角色使用数量 @@ -101,7 +101,7 @@ public interface ISysRoleService extends IService { * @param roleId 角色ID * @return 结果 */ - public long countUserRoleByRoleId(Long roleId); + long countUserRoleByRoleId(Long roleId); /** * 新增保存角色信息 @@ -109,7 +109,7 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 结果 */ - public int insertRole(SysRole role); + int insertRole(SysRole role); /** * 修改保存角色信息 @@ -117,7 +117,7 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 结果 */ - public int updateRole(SysRole role); + int updateRole(SysRole role); /** * 修改角色状态 @@ -125,7 +125,7 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 结果 */ - public int updateRoleStatus(SysRole role); + int updateRoleStatus(SysRole role); /** * 修改数据权限信息 @@ -133,7 +133,7 @@ public interface ISysRoleService extends IService { * @param role 角色信息 * @return 结果 */ - public int authDataScope(SysRole role); + int authDataScope(SysRole role); /** * 通过角色ID删除角色 @@ -141,7 +141,7 @@ public interface ISysRoleService extends IService { * @param roleId 角色ID * @return 结果 */ - public int deleteRoleById(Long roleId); + int deleteRoleById(Long roleId); /** * 批量删除角色信息 @@ -149,7 +149,7 @@ public interface ISysRoleService extends IService { * @param roleIds 需要删除的角色ID * @return 结果 */ - public int deleteRoleByIds(Long[] roleIds); + int deleteRoleByIds(Long[] roleIds); /** * 取消授权用户角色 @@ -157,23 +157,23 @@ public interface ISysRoleService extends IService { * @param userRole 用户和角色关联信息 * @return 结果 */ - public int deleteAuthUser(SysUserRole userRole); + int deleteAuthUser(SysUserRole userRole); /** * 批量取消授权用户角色 * - * @param roleId 角色ID + * @param roleId 角色ID * @param userIds 需要取消授权的用户数据ID * @return 结果 */ - public int deleteAuthUsers(Long roleId, Long[] userIds); + int deleteAuthUsers(Long roleId, Long[] userIds); /** * 批量选择授权用户角色 * - * @param roleId 角色ID + * @param roleId 角色ID * @param userIds 需要删除的用户数据ID * @return 结果 */ - public int insertAuthUsers(Long roleId, Long[] userIds); + int insertAuthUsers(Long roleId, Long[] userIds); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java index 4e0064975..aefc3c745 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java @@ -6,7 +6,7 @@ import com.ruoyi.system.domain.SysUserOnline; /** * 在线用户 服务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysUserOnlineService { /** @@ -16,7 +16,7 @@ public interface ISysUserOnlineService { * @param user 用户信息 * @return 在线用户信息 */ - public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); + SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); /** * 通过用户名称查询信息 @@ -25,7 +25,7 @@ public interface ISysUserOnlineService { * @param user 用户信息 * @return 在线用户信息 */ - public SysUserOnline selectOnlineByUserName(String userName, LoginUser user); + SysUserOnline selectOnlineByUserName(String userName, LoginUser user); /** * 通过登录地址/用户名称查询信息 @@ -35,7 +35,7 @@ public interface ISysUserOnlineService { * @param user 用户信息 * @return 在线用户信息 */ - public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); + SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); /** * 设置在线用户信息 @@ -43,5 +43,5 @@ public interface ISysUserOnlineService { * @param user 用户信息 * @return 在线用户 */ - public SysUserOnline loginUserToUserOnline(LoginUser user); + SysUserOnline loginUserToUserOnline(LoginUser user); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java index 24096c3d7..d6e8d9d3d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 用户 业务层 * - * @author ruoyi + * @author Lion Li */ public interface ISysUserService extends IService { @@ -22,7 +22,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 用户信息集合信息 */ - public List selectUserList(SysUser user); + List selectUserList(SysUser user); /** * 根据条件分页查询已分配用户角色列表 @@ -30,7 +30,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 用户信息集合信息 */ - public TableDataInfo selectAllocatedList(SysUser user); + TableDataInfo selectAllocatedList(SysUser user); /** * 根据条件分页查询未分配用户角色列表 @@ -38,7 +38,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 用户信息集合信息 */ - public TableDataInfo selectUnallocatedList(SysUser user); + TableDataInfo selectUnallocatedList(SysUser user); /** * 通过用户名查询用户 @@ -46,7 +46,7 @@ public interface ISysUserService extends IService { * @param userName 用户名 * @return 用户对象信息 */ - public SysUser selectUserByUserName(String userName); + SysUser selectUserByUserName(String userName); /** * 通过用户ID查询用户 @@ -54,7 +54,7 @@ public interface ISysUserService extends IService { * @param userId 用户ID * @return 用户对象信息 */ - public SysUser selectUserById(Long userId); + SysUser selectUserById(Long userId); /** * 根据用户ID查询用户所属角色组 @@ -62,7 +62,7 @@ public interface ISysUserService extends IService { * @param userName 用户名 * @return 结果 */ - public String selectUserRoleGroup(String userName); + String selectUserRoleGroup(String userName); /** * 根据用户ID查询用户所属岗位组 @@ -70,7 +70,7 @@ public interface ISysUserService extends IService { * @param userName 用户名 * @return 结果 */ - public String selectUserPostGroup(String userName); + String selectUserPostGroup(String userName); /** * 校验用户名称是否唯一 @@ -78,7 +78,7 @@ public interface ISysUserService extends IService { * @param userName 用户名称 * @return 结果 */ - public String checkUserNameUnique(String userName); + String checkUserNameUnique(String userName); /** * 校验手机号码是否唯一 @@ -86,7 +86,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public String checkPhoneUnique(SysUser user); + String checkPhoneUnique(SysUser user); /** * 校验email是否唯一 @@ -94,21 +94,21 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public String checkEmailUnique(SysUser user); + String checkEmailUnique(SysUser user); /** * 校验用户是否允许操作 * * @param user 用户信息 */ - public void checkUserAllowed(SysUser user); + void checkUserAllowed(SysUser user); /** * 校验用户是否有数据权限 * * @param userId 用户id */ - public void checkUserDataScope(Long userId); + void checkUserDataScope(Long userId); /** * 新增用户信息 @@ -116,7 +116,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public int insertUser(SysUser user); + int insertUser(SysUser user); /** * 注册用户信息 @@ -124,7 +124,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public boolean registerUser(SysUser user); + boolean registerUser(SysUser user); /** * 修改用户信息 @@ -132,15 +132,15 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public int updateUser(SysUser user); + int updateUser(SysUser user); /** * 用户授权角色 * - * @param userId 用户ID + * @param userId 用户ID * @param roleIds 角色组 */ - public void insertUserAuth(Long userId, Long[] roleIds); + void insertUserAuth(Long userId, Long[] roleIds); /** * 修改用户状态 @@ -148,7 +148,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public int updateUserStatus(SysUser user); + int updateUserStatus(SysUser user); /** * 修改用户基本信息 @@ -156,16 +156,16 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public int updateUserProfile(SysUser user); + int updateUserProfile(SysUser user); /** * 修改用户头像 * * @param userName 用户名 - * @param avatar 头像地址 + * @param avatar 头像地址 * @return 结果 */ - public boolean updateUserAvatar(String userName, String avatar); + boolean updateUserAvatar(String userName, String avatar); /** * 重置用户密码 @@ -173,7 +173,7 @@ public interface ISysUserService extends IService { * @param user 用户信息 * @return 结果 */ - public int resetPwd(SysUser user); + int resetPwd(SysUser user); /** * 重置用户密码 @@ -182,7 +182,7 @@ public interface ISysUserService extends IService { * @param password 密码 * @return 结果 */ - public int resetUserPwd(String userName, String password); + int resetUserPwd(String userName, String password); /** * 通过用户ID删除用户 @@ -190,7 +190,7 @@ public interface ISysUserService extends IService { * @param userId 用户ID * @return 结果 */ - public int deleteUserById(Long userId); + int deleteUserById(Long userId); /** * 批量删除用户信息 @@ -198,15 +198,15 @@ public interface ISysUserService extends IService { * @param userIds 需要删除的用户ID * @return 结果 */ - public int deleteUserByIds(Long[] userIds); + int deleteUserByIds(Long[] userIds); /** * 导入用户数据 * - * @param userList 用户数据列表 + * @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 - * @param operName 操作用户 + * @param operName 操作用户 * @return 结果 */ - public String importUser(List userList, Boolean isUpdateSupport, String operName); + String importUser(List userList, Boolean isUpdateSupport, String operName); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 59cba7fbf..70f66019f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -26,10 +26,11 @@ import javax.servlet.http.HttpServletRequest; /** * 登录校验方法 * - * @author ruoyi + * @author Lion Li */ @Service public class SysLoginService { + @Autowired private TokenService tokenService; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java index 045c680c3..171224976 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java @@ -14,7 +14,7 @@ import org.springframework.stereotype.Service; /** * 注册校验方法 * - * @author ruoyi + * @author Lion Li */ @Service public class SysRegisterService { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java index 7aba69d89..a01bcd141 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -26,204 +26,204 @@ import java.util.Map; /** * 参数配置 服务层实现 * - * @author ruoyi + * @author Lion Li */ @Service public class SysConfigServiceImpl extends ServicePlusImpl implements ISysConfigService { - /** - * 项目启动时,初始化参数到缓存 - */ - @PostConstruct - public void init() { - loadingConfigCache(); - } + /** + * 项目启动时,初始化参数到缓存 + */ + @PostConstruct + public void init() { + loadingConfigCache(); + } - @Override - public TableDataInfo selectPageConfigList(SysConfig config) { - Map params = config.getParams(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName()) - .eq(StringUtils.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType()) - .like(StringUtils.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey()) - .apply(StringUtils.isNotEmpty(params.get("beginTime")), - "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", - params.get("beginTime")) - .apply(StringUtils.isNotEmpty(params.get("endTime")), - "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", - params.get("endTime")); - return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); - } + @Override + public TableDataInfo selectPageConfigList(SysConfig config) { + Map params = config.getParams(); + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName()) + .eq(StringUtils.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType()) + .like(StringUtils.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey()) + .apply(StringUtils.isNotEmpty(params.get("beginTime")), + "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", + params.get("beginTime")) + .apply(StringUtils.isNotEmpty(params.get("endTime")), + "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", + params.get("endTime")); + return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); + } - /** - * 查询参数配置信息 - * - * @param configId 参数配置ID - * @return 参数配置信息 - */ - @Override - @DataSource(DataSourceType.MASTER) - public SysConfig selectConfigById(Long configId) { - return baseMapper.selectById(configId); - } + /** + * 查询参数配置信息 + * + * @param configId 参数配置ID + * @return 参数配置信息 + */ + @Override + @DataSource(DataSourceType.MASTER) + public SysConfig selectConfigById(Long configId) { + return baseMapper.selectById(configId); + } - /** - * 根据键名查询参数配置信息 - * - * @param configKey 参数key - * @return 参数键值 - */ - @Override - public String selectConfigByKey(String configKey) { - String configValue = Convert.toStr(RedisUtils.getCacheObject(getCacheKey(configKey))); - if (StringUtils.isNotEmpty(configValue)) { - return configValue; - } - SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper() - .eq(SysConfig::getConfigKey, configKey)); - if (StringUtils.isNotNull(retConfig)) { - RedisUtils.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); - return retConfig.getConfigValue(); - } - return StringUtils.EMPTY; - } + /** + * 根据键名查询参数配置信息 + * + * @param configKey 参数key + * @return 参数键值 + */ + @Override + public String selectConfigByKey(String configKey) { + String configValue = Convert.toStr(RedisUtils.getCacheObject(getCacheKey(configKey))); + if (StringUtils.isNotEmpty(configValue)) { + return configValue; + } + SysConfig retConfig = baseMapper.selectOne(new LambdaQueryWrapper() + .eq(SysConfig::getConfigKey, configKey)); + if (StringUtils.isNotNull(retConfig)) { + RedisUtils.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); + return retConfig.getConfigValue(); + } + return StringUtils.EMPTY; + } - /** - * 获取验证码开关 - * - * @return true开启,false关闭 - */ - @Override - public boolean selectCaptchaOnOff() { - String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff"); - if (StringUtils.isEmpty(captchaOnOff)) { - return true; - } - return Convert.toBool(captchaOnOff); - } + /** + * 获取验证码开关 + * + * @return true开启,false关闭 + */ + @Override + public boolean selectCaptchaOnOff() { + String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff"); + if (StringUtils.isEmpty(captchaOnOff)) { + return true; + } + return Convert.toBool(captchaOnOff); + } - /** - * 查询参数配置列表 - * - * @param config 参数配置信息 - * @return 参数配置集合 - */ - @Override - public List selectConfigList(SysConfig config) { - Map params = config.getParams(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName()) - .eq(StringUtils.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType()) - .like(StringUtils.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey()) - .apply(StringUtils.isNotEmpty(params.get("beginTime")), - "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", - params.get("beginTime")) - .apply(StringUtils.isNotEmpty(params.get("endTime")), - "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", - params.get("endTime")); - return baseMapper.selectList(lqw); - } + /** + * 查询参数配置列表 + * + * @param config 参数配置信息 + * @return 参数配置集合 + */ + @Override + public List selectConfigList(SysConfig config) { + Map params = config.getParams(); + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(config.getConfigName()), SysConfig::getConfigName, config.getConfigName()) + .eq(StringUtils.isNotBlank(config.getConfigType()), SysConfig::getConfigType, config.getConfigType()) + .like(StringUtils.isNotBlank(config.getConfigKey()), SysConfig::getConfigKey, config.getConfigKey()) + .apply(StringUtils.isNotEmpty(params.get("beginTime")), + "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", + params.get("beginTime")) + .apply(StringUtils.isNotEmpty(params.get("endTime")), + "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", + params.get("endTime")); + return baseMapper.selectList(lqw); + } - /** - * 新增参数配置 - * - * @param config 参数配置信息 - * @return 结果 - */ - @Override - public int insertConfig(SysConfig config) { - int row = baseMapper.insert(config); - if (row > 0) { - RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); - } - return row; - } + /** + * 新增参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int insertConfig(SysConfig config) { + int row = baseMapper.insert(config); + if (row > 0) { + RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } - /** - * 修改参数配置 - * - * @param config 参数配置信息 - * @return 结果 - */ - @Override - public int updateConfig(SysConfig config) { - int row = baseMapper.updateById(config); - if (row > 0) { - RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); - } - return row; - } + /** + * 修改参数配置 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public int updateConfig(SysConfig config) { + int row = baseMapper.updateById(config); + if (row > 0) { + RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } - /** - * 批量删除参数信息 - * - * @param configIds 需要删除的参数ID - * @return 结果 - */ - @Override - public void deleteConfigByIds(Long[] configIds) { - for (Long configId : configIds) { - SysConfig config = selectConfigById(configId); - if (StringUtils.equals(UserConstants.YES, config.getConfigType())) { - throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); - } - RedisUtils.deleteObject(getCacheKey(config.getConfigKey())); - } - baseMapper.deleteBatchIds(Arrays.asList(configIds)); - } + /** + * 批量删除参数信息 + * + * @param configIds 需要删除的参数ID + * @return 结果 + */ + @Override + public void deleteConfigByIds(Long[] configIds) { + for (Long configId : configIds) { + SysConfig config = selectConfigById(configId); + if (StringUtils.equals(UserConstants.YES, config.getConfigType())) { + throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey())); + } + RedisUtils.deleteObject(getCacheKey(config.getConfigKey())); + } + baseMapper.deleteBatchIds(Arrays.asList(configIds)); + } - /** - * 加载参数缓存数据 - */ - @Override - public void loadingConfigCache() { - List configsList = selectConfigList(new SysConfig()); - for (SysConfig config : configsList) { - RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); - } - } + /** + * 加载参数缓存数据 + */ + @Override + public void loadingConfigCache() { + List configsList = selectConfigList(new SysConfig()); + for (SysConfig config : configsList) { + RedisUtils.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } - /** - * 清空参数缓存数据 - */ - @Override - public void clearConfigCache() { - Collection keys = RedisUtils.keys(Constants.SYS_CONFIG_KEY + "*"); - RedisUtils.deleteObject(keys); - } + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache() { + Collection keys = RedisUtils.keys(Constants.SYS_CONFIG_KEY + "*"); + RedisUtils.deleteObject(keys); + } - /** - * 重置参数缓存数据 - */ - @Override - public void resetConfigCache() { - clearConfigCache(); - loadingConfigCache(); - } + /** + * 重置参数缓存数据 + */ + @Override + public void resetConfigCache() { + clearConfigCache(); + loadingConfigCache(); + } - /** - * 校验参数键名是否唯一 - * - * @param config 参数配置信息 - * @return 结果 - */ - @Override - public String checkConfigKeyUnique(SysConfig config) { - Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); - SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysConfig::getConfigKey, config.getConfigKey())); - if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } + /** + * 校验参数键名是否唯一 + * + * @param config 参数配置信息 + * @return 结果 + */ + @Override + public String checkConfigKeyUnique(SysConfig config) { + Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); + SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysConfig::getConfigKey, config.getConfigKey())); + if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } - /** - * 设置cache key - * - * @param configKey 参数键 - * @return 缓存键key - */ - private String getCacheKey(String configKey) { - return Constants.SYS_CONFIG_KEY + configKey; - } + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) { + return Constants.SYS_CONFIG_KEY + configKey; + } } 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 cbafcf459..45c6faed6 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 @@ -29,7 +29,7 @@ import java.util.stream.Collectors; /** * 部门管理 服务实现 * - * @author ruoyi + * @author Lion Li */ @Service public class SysDeptServiceImpl extends ServicePlusImpl implements ISysDeptService { @@ -65,13 +65,13 @@ public class SysDeptServiceImpl extends ServicePlusImpl() .set(SysDept::getStatus, "0") .in(SysDept::getDeptId, Arrays.asList(deptIds))); @@ -247,13 +247,13 @@ public class SysDeptServiceImpl extends ServicePlusImpl children = list(new LambdaQueryWrapper() - .apply("find_in_set({0},ancestors)",deptId)); + .apply("find_in_set({0},ancestors)", deptId)); for (SysDept child : children) { child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); } @@ -292,11 +292,11 @@ public class SysDeptServiceImpl extends ServicePlusImpl getChildList(List list, SysDept t) { List tlist = new ArrayList(); - for (SysDept n : list) { - if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { - tlist.add(n); - } - } + for (SysDept n : list) { + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { + tlist.add(n); + } + } return tlist; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java index fdd436f44..35908e3b1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -1,12 +1,12 @@ package com.ruoyi.system.service.impl; -import com.ruoyi.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.service.ISysDictDataService; import org.springframework.stereotype.Service; @@ -16,108 +16,108 @@ import java.util.List; /** * 字典 业务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysDictDataServiceImpl extends ServicePlusImpl implements ISysDictDataService { - @Override - public TableDataInfo selectPageDictDataList(SysDictData dictData) { - LambdaQueryWrapper lqw = new LambdaQueryWrapper() - .eq(StringUtils.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType()) - .like(StringUtils.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel()) - .eq(StringUtils.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus()) - .orderByAsc(SysDictData::getDictSort); - return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); - } + @Override + public TableDataInfo selectPageDictDataList(SysDictData dictData) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .eq(StringUtils.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType()) + .like(StringUtils.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel()) + .eq(StringUtils.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus()) + .orderByAsc(SysDictData::getDictSort); + return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); + } - /** - * 根据条件分页查询字典数据 - * - * @param dictData 字典数据信息 - * @return 字典数据集合信息 - */ - @Override - public List selectDictDataList(SysDictData dictData) { - return list(new LambdaQueryWrapper() - .eq(StringUtils.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType()) - .like(StringUtils.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel()) - .eq(StringUtils.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus()) - .orderByAsc(SysDictData::getDictSort)); - } + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataList(SysDictData dictData) { + return list(new LambdaQueryWrapper() + .eq(StringUtils.isNotBlank(dictData.getDictType()), SysDictData::getDictType, dictData.getDictType()) + .like(StringUtils.isNotBlank(dictData.getDictLabel()), SysDictData::getDictLabel, dictData.getDictLabel()) + .eq(StringUtils.isNotBlank(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus()) + .orderByAsc(SysDictData::getDictSort)); + } - /** - * 根据字典类型和字典键值查询字典数据信息 - * - * @param dictType 字典类型 - * @param dictValue 字典键值 - * @return 字典标签 - */ - @Override - public String selectDictLabel(String dictType, String dictValue) { - return getOne(new LambdaQueryWrapper() - .select(SysDictData::getDictLabel) - .eq(SysDictData::getDictType, dictType) - .eq(SysDictData::getDictValue, dictValue)) - .getDictLabel(); - } + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * @return 字典标签 + */ + @Override + public String selectDictLabel(String dictType, String dictValue) { + return getOne(new LambdaQueryWrapper() + .select(SysDictData::getDictLabel) + .eq(SysDictData::getDictType, dictType) + .eq(SysDictData::getDictValue, dictValue)) + .getDictLabel(); + } - /** - * 根据字典数据ID查询信息 - * - * @param dictCode 字典数据ID - * @return 字典数据 - */ - @Override - public SysDictData selectDictDataById(Long dictCode) { - return getById(dictCode); - } + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * @return 字典数据 + */ + @Override + public SysDictData selectDictDataById(Long dictCode) { + return getById(dictCode); + } - /** - * 批量删除字典数据信息 - * - * @param dictCodes 需要删除的字典数据ID - * @return 结果 - */ - @Override - public void deleteDictDataByIds(Long[] dictCodes) { - for (Long dictCode : dictCodes) { - SysDictData data = selectDictDataById(dictCode); + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * @return 结果 + */ + @Override + public void deleteDictDataByIds(Long[] dictCodes) { + for (Long dictCode : dictCodes) { + SysDictData data = selectDictDataById(dictCode); removeById(dictCode); - List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); - } - } + List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + } - /** - * 新增保存字典数据信息 - * - * @param data 字典数据信息 - * @return 结果 - */ - @Override - public int insertDictData(SysDictData data) { - int row = baseMapper.insert(data); - if (row > 0) { - List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); - } - return row; - } + /** + * 新增保存字典数据信息 + * + * @param data 字典数据信息 + * @return 结果 + */ + @Override + public int insertDictData(SysDictData data) { + int row = baseMapper.insert(data); + if (row > 0) { + List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } - /** - * 修改保存字典数据信息 - * - * @param data 字典数据信息 - * @return 结果 - */ - @Override - public int updateDictData(SysDictData data) { - int row = baseMapper.updateById(data); - if (row > 0) { - List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); - } - return row; - } + /** + * 修改保存字典数据信息 + * + * @param data 字典数据信息 + * @return 结果 + */ + @Override + public int updateDictData(SysDictData data) { + int row = baseMapper.updateById(data); + if (row > 0) { + List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java index e3341586e..bb940c2b0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -1,7 +1,6 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.collection.CollUtil; -import com.ruoyi.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.constant.UserConstants; @@ -12,6 +11,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictTypeMapper; import com.ruoyi.system.service.ISysDictTypeService; @@ -27,210 +27,210 @@ import java.util.Map; /** * 字典 业务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysDictTypeServiceImpl extends ServicePlusImpl implements ISysDictTypeService { - @Autowired - private SysDictDataMapper dictDataMapper; + @Autowired + private SysDictDataMapper dictDataMapper; - /** - * 项目启动时,初始化字典到缓存 - */ - @PostConstruct - public void init() { - loadingDictCache(); - } + /** + * 项目启动时,初始化字典到缓存 + */ + @PostConstruct + public void init() { + loadingDictCache(); + } - @Override - public TableDataInfo selectPageDictTypeList(SysDictType dictType) { - Map params = dictType.getParams(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName()) - .eq(StringUtils.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus()) - .like(StringUtils.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType()) - .apply(StringUtils.isNotEmpty(params.get("beginTime")), - "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", - params.get("beginTime")) - .apply(StringUtils.isNotEmpty(params.get("endTime")), - "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", - params.get("endTime")); - return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); - } + @Override + public TableDataInfo selectPageDictTypeList(SysDictType dictType) { + Map params = dictType.getParams(); + LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName()) + .eq(StringUtils.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus()) + .like(StringUtils.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType()) + .apply(StringUtils.isNotEmpty(params.get("beginTime")), + "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", + params.get("beginTime")) + .apply(StringUtils.isNotEmpty(params.get("endTime")), + "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", + params.get("endTime")); + return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); + } - /** - * 根据条件分页查询字典类型 - * - * @param dictType 字典类型信息 - * @return 字典类型集合信息 - */ - @Override - public List selectDictTypeList(SysDictType dictType) { - Map params = dictType.getParams(); - return list(new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName()) - .eq(StringUtils.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus()) - .like(StringUtils.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType()) - .apply(StringUtils.isNotEmpty(params.get("beginTime")), - "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", - params.get("beginTime")) - .apply(StringUtils.isNotEmpty(params.get("endTime")), - "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", - params.get("endTime"))); - } + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeList(SysDictType dictType) { + Map params = dictType.getParams(); + return list(new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName()) + .eq(StringUtils.isNotBlank(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus()) + .like(StringUtils.isNotBlank(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType()) + .apply(StringUtils.isNotEmpty(params.get("beginTime")), + "date_format(create_time,'%y%m%d') >= date_format({0},'%y%m%d')", + params.get("beginTime")) + .apply(StringUtils.isNotEmpty(params.get("endTime")), + "date_format(create_time,'%y%m%d') <= date_format({0},'%y%m%d')", + params.get("endTime"))); + } - /** - * 根据所有字典类型 - * - * @return 字典类型集合信息 - */ - @Override - public List selectDictTypeAll() { - return list(); - } + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeAll() { + return list(); + } - /** - * 根据字典类型查询字典数据 - * - * @param dictType 字典类型 - * @return 字典数据集合信息 - */ - @Override - public List selectDictDataByType(String dictType) { - List dictDatas = DictUtils.getDictCache(dictType); - if (CollUtil.isNotEmpty(dictDatas)) { - return dictDatas; - } - dictDatas = dictDataMapper.selectDictDataByType(dictType); - if (CollUtil.isNotEmpty(dictDatas)) { - DictUtils.setDictCache(dictType, dictDatas); - return dictDatas; - } - return null; - } + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataByType(String dictType) { + List dictDatas = DictUtils.getDictCache(dictType); + if (CollUtil.isNotEmpty(dictDatas)) { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (CollUtil.isNotEmpty(dictDatas)) { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } - /** - * 根据字典类型ID查询信息 - * - * @param dictId 字典类型ID - * @return 字典类型 - */ - @Override - public SysDictType selectDictTypeById(Long dictId) { - return getById(dictId); - } + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeById(Long dictId) { + return getById(dictId); + } - /** - * 根据字典类型查询信息 - * - * @param dictType 字典类型 - * @return 字典类型 - */ - @Override - public SysDictType selectDictTypeByType(String dictType) { - return getOne(new LambdaQueryWrapper().eq(SysDictType::getDictType, dictType)); - } + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeByType(String dictType) { + return getOne(new LambdaQueryWrapper().eq(SysDictType::getDictType, dictType)); + } - /** - * 批量删除字典类型信息 - * - * @param dictIds 需要删除的字典ID - * @return 结果 - */ - @Override - public void deleteDictTypeByIds(Long[] dictIds) { - for (Long dictId : dictIds) { - SysDictType dictType = selectDictTypeById(dictId); - if (dictDataMapper.selectCount(new LambdaQueryWrapper() - .eq(SysDictData::getDictType, dictType.getDictType())) > 0) { - throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); - } - DictUtils.removeDictCache(dictType.getDictType()); - } - baseMapper.deleteBatchIds(Arrays.asList(dictIds)); - } + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * @return 结果 + */ + @Override + public void deleteDictTypeByIds(Long[] dictIds) { + for (Long dictId : dictIds) { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.selectCount(new LambdaQueryWrapper() + .eq(SysDictData::getDictType, dictType.getDictType())) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); + } + DictUtils.removeDictCache(dictType.getDictType()); + } + baseMapper.deleteBatchIds(Arrays.asList(dictIds)); + } - /** - * 加载字典缓存数据 - */ - @Override - public void loadingDictCache() { - List dictTypeList = list(); - for (SysDictType dictType : dictTypeList) { - List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); - DictUtils.setDictCache(dictType.getDictType(), dictDatas); - } - } + /** + * 加载字典缓存数据 + */ + @Override + public void loadingDictCache() { + List dictTypeList = list(); + for (SysDictType dictType : dictTypeList) { + List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); + DictUtils.setDictCache(dictType.getDictType(), dictDatas); + } + } - /** - * 清空字典缓存数据 - */ - @Override - public void clearDictCache() { - DictUtils.clearDictCache(); - } + /** + * 清空字典缓存数据 + */ + @Override + public void clearDictCache() { + DictUtils.clearDictCache(); + } - /** - * 重置字典缓存数据 - */ - @Override - public void resetDictCache() { - clearDictCache(); - loadingDictCache(); - } + /** + * 重置字典缓存数据 + */ + @Override + public void resetDictCache() { + clearDictCache(); + loadingDictCache(); + } - /** - * 新增保存字典类型信息 - * - * @param dict 字典类型信息 - * @return 结果 - */ - @Override - public int insertDictType(SysDictType dict) { - int row = baseMapper.insert(dict); - if (row > 0) { - DictUtils.setDictCache(dict.getDictType(), null); - } - return row; - } + /** + * 新增保存字典类型信息 + * + * @param dict 字典类型信息 + * @return 结果 + */ + @Override + public int insertDictType(SysDictType dict) { + int row = baseMapper.insert(dict); + if (row > 0) { + DictUtils.setDictCache(dict.getDictType(), null); + } + return row; + } - /** - * 修改保存字典类型信息 - * - * @param dict 字典类型信息 - * @return 结果 - */ - @Override - @Transactional - public int updateDictType(SysDictType dict) { - SysDictType oldDict = getById(dict.getDictId()); - dictDataMapper.update(null, new LambdaUpdateWrapper() - .set(SysDictData::getDictType, dict.getDictType()) - .eq(SysDictData::getDictType, oldDict.getDictType())); - int row = baseMapper.updateById(dict); - if (row > 0) { - List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); - DictUtils.setDictCache(dict.getDictType(), dictDatas); - } - return row; - } + /** + * 修改保存字典类型信息 + * + * @param dict 字典类型信息 + * @return 结果 + */ + @Override + @Transactional + public int updateDictType(SysDictType dict) { + SysDictType oldDict = getById(dict.getDictId()); + dictDataMapper.update(null, new LambdaUpdateWrapper() + .set(SysDictData::getDictType, dict.getDictType()) + .eq(SysDictData::getDictType, oldDict.getDictType())); + int row = baseMapper.updateById(dict); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); + } + return row; + } - /** - * 校验字典类型称是否唯一 - * - * @param dict 字典类型 - * @return 结果 - */ - @Override - public String checkDictTypeUnique(SysDictType dict) { - Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); - SysDictType dictType = getOne(new LambdaQueryWrapper() - .eq(SysDictType::getDictType, dict.getDictType()) - .last("limit 1")); - if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } + /** + * 校验字典类型称是否唯一 + * + * @param dict 字典类型 + * @return 结果 + */ + @Override + public String checkDictTypeUnique(SysDictType dict) { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = getOne(new LambdaQueryWrapper() + .eq(SysDictType::getDictType, dict.getDictType()) + .last("limit 1")); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java index ede22718d..dda5b5d1b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -27,7 +27,7 @@ import java.util.Map; /** * 系统访问日志情况信息 服务层处理 * - * @author ruoyi + * @author Lion Li */ @Slf4j @Service diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java index bd7c528a0..643d304eb 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -26,11 +26,10 @@ import java.util.stream.Collectors; /** * 菜单 业务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysMenuServiceImpl extends ServicePlusImpl implements ISysMenuService { - public static final String PREMISSION_STRING = "perms[\"{0}\"]"; @Autowired private SysRoleMapper roleMapper; @@ -61,9 +60,9 @@ public class SysMenuServiceImpl extends ServicePlusImpl() - .like(StringUtils.isNotBlank(menu.getMenuName()),SysMenu::getMenuName,menu.getMenuName()) - .eq(StringUtils.isNotBlank(menu.getVisible()),SysMenu::getVisible,menu.getVisible()) - .eq(StringUtils.isNotBlank(menu.getStatus()),SysMenu::getStatus,menu.getStatus()) + .like(StringUtils.isNotBlank(menu.getMenuName()), SysMenu::getMenuName, menu.getMenuName()) + .eq(StringUtils.isNotBlank(menu.getVisible()), SysMenu::getVisible, menu.getVisible()) + .eq(StringUtils.isNotBlank(menu.getStatus()), SysMenu::getStatus, menu.getStatus()) .orderByAsc(SysMenu::getParentId) .orderByAsc(SysMenu::getOrderNum)); } else { @@ -137,7 +136,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl cMenus = menu.getChildren(); + List cMenus = (List) menu.getChildren(); if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { router.setAlwaysShow(true); router.setRedirect("noRedirect"); @@ -151,18 +150,18 @@ public class SysMenuServiceImpl extends ServicePlusImpl childrenList = new ArrayList(); - RouterVo children = new RouterVo(); - String routerPath = StringUtils.replaceEach(menu.getPath(), new String[] { Constants.HTTP, Constants.HTTPS }, new String[] { "", "" }); - children.setPath(routerPath); - children.setComponent(UserConstants.INNER_LINK); - children.setName(StringUtils.capitalize(routerPath)); - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/inner"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = StringUtils.replaceEach(menu.getPath(), new String[]{Constants.HTTP, Constants.HTTPS}, new String[]{"", ""}); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); childrenList.add(children); router.setChildren(childrenList); } @@ -184,13 +183,13 @@ public class SysMenuServiceImpl extends ServicePlusImpl().eq(SysMenu::getParentId,menuId)); + long result = count(new LambdaQueryWrapper().eq(SysMenu::getParentId, menuId)); return result > 0; } @@ -240,7 +239,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl().eq(SysRoleMenu::getMenuId,menuId)); + long result = roleMenuMapper.selectCount(new LambdaQueryWrapper().eq(SysRoleMenu::getMenuId, menuId)); return result > 0; } @@ -287,8 +286,8 @@ public class SysMenuServiceImpl extends ServicePlusImpl() - .eq(SysMenu::getMenuName,menu.getMenuName()) - .eq(SysMenu::getParentId,menu.getParentId()) + .eq(SysMenu::getMenuName, menu.getMenuName()) + .eq(SysMenu::getParentId, menu.getParentId()) .last("limit 1")); if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { return UserConstants.NOT_UNIQUE; @@ -321,7 +320,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl getChildPerms(List list, int parentId) { List returnList = new ArrayList(); - for (SysMenu t : list) { - // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 - if (t.getParentId() == parentId) { - recursionFn(list, t); - returnList.add(t); - } - } + for (SysMenu t : list) { + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) { + recursionFn(list, t); + returnList.add(t); + } + } return returnList; } @@ -425,11 +424,11 @@ public class SysMenuServiceImpl extends ServicePlusImpl getChildList(List list, SysMenu t) { List tlist = new ArrayList(); - for (SysMenu n : list) { - if (n.getParentId().longValue() == t.getMenuId().longValue()) { - tlist.add(n); - } - } + for (SysMenu n : list) { + if (n.getParentId().longValue() == t.getMenuId().longValue()) { + tlist.add(n); + } + } return tlist; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java index dd8fdbcea..b4f70d7c6 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -1,10 +1,10 @@ package com.ruoyi.system.service.impl; -import com.ruoyi.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.mapper.SysNoticeMapper; import com.ruoyi.system.service.ISysNoticeService; @@ -16,7 +16,7 @@ import java.util.List; /** * 公告 服务层实现 * - * @author ruoyi + * @author Lion Li */ @Service public class SysNoticeServiceImpl extends ServicePlusImpl implements ISysNoticeService { @@ -27,7 +27,7 @@ public class SysNoticeServiceImpl extends ServicePlusImpl selectNoticeList(SysNotice notice) { return list(new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(notice.getNoticeTitle()),SysNotice::getNoticeTitle,notice.getNoticeTitle()) - .eq(StringUtils.isNotBlank(notice.getNoticeType()),SysNotice::getNoticeType,notice.getNoticeType()) - .like(StringUtils.isNotBlank(notice.getCreateBy()),SysNotice::getCreateBy,notice.getCreateBy())); + .like(StringUtils.isNotBlank(notice.getNoticeTitle()), SysNotice::getNoticeTitle, notice.getNoticeTitle()) + .eq(StringUtils.isNotBlank(notice.getNoticeType()), SysNotice::getNoticeType, notice.getNoticeType()) + .like(StringUtils.isNotBlank(notice.getCreateBy()), SysNotice::getCreateBy, notice.getCreateBy())); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index f4c39f4a4..c39ced07e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -3,10 +3,10 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ArrayUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.service.OperLogService; -import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; @@ -24,7 +24,7 @@ import java.util.Map; /** * 操作日志 服务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysOperLogServiceImpl extends ServicePlusImpl implements ISysOperLogService, OperLogService { @@ -64,7 +64,7 @@ public class SysOperLogServiceImpl extends ServicePlusImpl selectOperLogList(SysOperLog operLog) { Map params = operLog.getParams(); return list(new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(operLog.getTitle()),SysOperLog::getTitle,operLog.getTitle()) + .like(StringUtils.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle()) .eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0, - SysOperLog::getBusinessType,operLog.getBusinessType()) + SysOperLog::getBusinessType, operLog.getBusinessType()) .func(f -> { - if (ArrayUtil.isNotEmpty(operLog.getBusinessTypes())){ + if (ArrayUtil.isNotEmpty(operLog.getBusinessTypes())) { f.in(SysOperLog::getBusinessType, Arrays.asList(operLog.getBusinessTypes())); } }) .eq(operLog.getStatus() != null && operLog.getStatus() > 0, - SysOperLog::getStatus,operLog.getStatus()) - .like(StringUtils.isNotBlank(operLog.getOperName()),SysOperLog::getOperName,operLog.getOperName()) + SysOperLog::getStatus, operLog.getStatus()) + .like(StringUtils.isNotBlank(operLog.getOperName()), SysOperLog::getOperName, operLog.getOperName()) .apply(StringUtils.isNotEmpty(params.get("beginTime")), "date_format(oper_time,'%y%m%d') >= date_format({0},'%y%m%d')", params.get("beginTime")) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java index c71c65d20..df3f6d153 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssConfigServiceImpl.java @@ -43,23 +43,23 @@ import java.util.List; @Service public class SysOssConfigServiceImpl extends ServicePlusImpl implements ISysOssConfigService { - /** - * 项目启动时,初始化参数到缓存,加载配置类 - */ - @PostConstruct - public void init() { - List list = list(); - for (SysOssConfig config : list) { - String configKey = config.getConfigKey(); - if ("0".equals(config.getStatus())) { - RedisUtils.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, configKey); - } - setConfigCache(true, config); - } - } + /** + * 项目启动时,初始化参数到缓存,加载配置类 + */ + @PostConstruct + public void init() { + List list = list(); + for (SysOssConfig config : list) { + String configKey = config.getConfigKey(); + if ("0".equals(config.getStatus())) { + RedisUtils.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, configKey); + } + setConfigCache(true, config); + } + } @Override - public SysOssConfigVo queryById(Integer ossConfigId){ + public SysOssConfigVo queryById(Integer ossConfigId) { return getVoById(ossConfigId); } @@ -74,46 +74,46 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getConfigKey()), SysOssConfig::getConfigKey, bo.getConfigKey()); lqw.like(StringUtils.isNotBlank(bo.getBucketName()), SysOssConfig::getBucketName, bo.getBucketName()); - lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysOssConfig::getStatus, bo.getStatus()); - return lqw; + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysOssConfig::getStatus, bo.getStatus()); + return lqw; } @Override public Boolean insertByBo(SysOssConfigBo bo) { SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class); validEntityBeforeSave(config); - return setConfigCache(save(config), config); + return setConfigCache(save(config), config); } @Override public Boolean updateByBo(SysOssConfigBo bo) { SysOssConfig config = BeanUtil.toBean(bo, SysOssConfig.class); validEntityBeforeSave(config); - LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); - luw.set(StringUtils.isBlank(config.getPrefix()), SysOssConfig::getPrefix, ""); - luw.set(StringUtils.isBlank(config.getRegion()), SysOssConfig::getRegion, ""); - luw.set(StringUtils.isBlank(config.getExt1()), SysOssConfig::getExt1, ""); - luw.eq(SysOssConfig::getOssConfigId, config.getOssConfigId()); - return setConfigCache(update(config, luw), config); + LambdaUpdateWrapper luw = new LambdaUpdateWrapper<>(); + luw.set(StringUtils.isBlank(config.getPrefix()), SysOssConfig::getPrefix, ""); + luw.set(StringUtils.isBlank(config.getRegion()), SysOssConfig::getRegion, ""); + luw.set(StringUtils.isBlank(config.getExt1()), SysOssConfig::getExt1, ""); + luw.eq(SysOssConfig::getOssConfigId, config.getOssConfigId()); + return setConfigCache(update(config, luw), config); } /** * 保存前的数据校验 */ - private void validEntityBeforeSave(SysOssConfig entity){ - if (StringUtils.isNotEmpty(entity.getConfigKey()) - && UserConstants.NOT_UNIQUE.equals(checkConfigKeyUnique(entity))) { - throw new ServiceException("操作配置'" + entity.getConfigKey() + "'失败, 配置key已存在!"); - } + private void validEntityBeforeSave(SysOssConfig entity) { + if (StringUtils.isNotEmpty(entity.getConfigKey()) + && UserConstants.NOT_UNIQUE.equals(checkConfigKeyUnique(entity))) { + throw new ServiceException("操作配置'" + entity.getConfigKey() + "'失败, 配置key已存在!"); + } } @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid) { - if (CollUtil.containsAny(ids, CloudConstant.SYSTEM_DATA_IDS)) { - throw new ServiceException("系统内置, 不可删除!"); - } - } + if (isValid) { + if (CollUtil.containsAny(ids, CloudConstant.SYSTEM_DATA_IDS)) { + throw new ServiceException("系统内置, 不可删除!"); + } + } List list = Lists.newArrayList(); for (Long configId : ids) { SysOssConfig config = getById(configId); @@ -128,61 +128,62 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl() - .select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey) - .eq(SysOssConfig::getConfigKey, sysOssConfig.getConfigKey())); - if (StringUtils.isNotNull(info) && info.getOssConfigId() != ossConfigId) { - return UserConstants.NOT_UNIQUE; - } - return UserConstants.UNIQUE; - } + /** + * 判断configKey是否唯一 + */ + private String checkConfigKeyUnique(SysOssConfig sysOssConfig) { + long ossConfigId = StringUtils.isNull(sysOssConfig.getOssConfigId()) ? -1L : sysOssConfig.getOssConfigId(); + SysOssConfig info = getOne(new LambdaQueryWrapper() + .select(SysOssConfig::getOssConfigId, SysOssConfig::getConfigKey) + .eq(SysOssConfig::getConfigKey, sysOssConfig.getConfigKey())); + if (StringUtils.isNotNull(info) && info.getOssConfigId() != ossConfigId) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } - /** - * 启用禁用状态 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int updateOssConfigStatus(SysOssConfigBo bo) { - SysOssConfig sysOssConfig = BeanUtil.toBean(bo, SysOssConfig.class); - int row = baseMapper.update(null, new LambdaUpdateWrapper() - .set(SysOssConfig::getStatus, "1")); - row += baseMapper.updateById(sysOssConfig); - if (row > 0) { - RedisUtils.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey()); - } - return row; - } + /** + * 启用禁用状态 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateOssConfigStatus(SysOssConfigBo bo) { + SysOssConfig sysOssConfig = BeanUtil.toBean(bo, SysOssConfig.class); + int row = baseMapper.update(null, new LambdaUpdateWrapper() + .set(SysOssConfig::getStatus, "1")); + row += baseMapper.updateById(sysOssConfig); + if (row > 0) { + RedisUtils.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey()); + } + return row; + } - /** - * 设置cache key - * - * @param configKey 参数键 - * @return 缓存键key - */ - private String getCacheKey(String configKey) { - return CloudConstant.SYS_OSS_KEY + configKey; - } + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + private String getCacheKey(String configKey) { + return CloudConstant.SYS_OSS_KEY + configKey; + } - /** - * 如果操作成功 则更新缓存 - * @param flag 操作状态 - * @param config 配置 - * @return 返回操作状态 - */ - private boolean setConfigCache(boolean flag, SysOssConfig config) { - if (flag) { - RedisUtils.setCacheObject( - getCacheKey(config.getConfigKey()), - JsonUtils.toJsonString(config)); - RedisUtils.publish(CloudConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> { - log.info("发布刷新OSS配置 => " + msg); - }); - } - return flag; - } + /** + * 如果操作成功 则更新缓存 + * + * @param flag 操作状态 + * @param config 配置 + * @return 返回操作状态 + */ + private boolean setConfigCache(boolean flag, SysOssConfig config) { + if (flag) { + RedisUtils.setCacheObject( + getCacheKey(config.getConfigKey()), + JsonUtils.toJsonString(config)); + RedisUtils.publish(CloudConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> { + log.info("发布刷新OSS配置 => " + msg); + }); + } + return flag; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java index 13a22204b..b703ff690 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOssServiceImpl.java @@ -32,59 +32,59 @@ import java.util.Map; @Service public class SysOssServiceImpl extends ServicePlusImpl implements ISysOssService { - @Override - public TableDataInfo queryPageList(SysOssBo bo) { - PagePlus result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo)); - return PageUtils.buildDataInfo(result); - } + @Override + public TableDataInfo queryPageList(SysOssBo bo) { + PagePlus result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo)); + return PageUtils.buildDataInfo(result); + } - private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); - lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); - lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix()); - lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl()); - lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, - SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); - lqw.eq(StringUtils.isNotBlank(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); - lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); - return lqw; - } + private LambdaQueryWrapper buildQueryWrapper(SysOssBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getFileName()), SysOss::getFileName, bo.getFileName()); + lqw.like(StringUtils.isNotBlank(bo.getOriginalName()), SysOss::getOriginalName, bo.getOriginalName()); + lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix()); + lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl()); + lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null, + SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime")); + lqw.eq(StringUtils.isNotBlank(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy()); + lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService()); + return lqw; + } - @Override - public SysOss upload(MultipartFile file) { - String originalfileName = file.getOriginalFilename(); - String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); - ICloudStorageStrategy storage = OssFactory.instance(); - UploadResult uploadResult; - try { - uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); - } catch (IOException e) { - throw new ServiceException(e.getMessage()); - } - // 保存文件信息 - SysOss oss = new SysOss() - .setUrl(uploadResult.getUrl()) - .setFileSuffix(suffix) - .setFileName(uploadResult.getFilename()) - .setOriginalName(originalfileName) - .setService(storage.getServiceType()); - save(oss); - return oss; - } + @Override + public SysOss upload(MultipartFile file) { + String originalfileName = file.getOriginalFilename(); + String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); + ICloudStorageStrategy storage = OssFactory.instance(); + UploadResult uploadResult; + try { + uploadResult = storage.uploadSuffix(file.getBytes(), suffix, file.getContentType()); + } catch (IOException e) { + throw new ServiceException(e.getMessage()); + } + // 保存文件信息 + SysOss oss = new SysOss() + .setUrl(uploadResult.getUrl()) + .setFileSuffix(suffix) + .setFileName(uploadResult.getFilename()) + .setOriginalName(originalfileName) + .setService(storage.getServiceType()); + save(oss); + return oss; + } - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if (isValid) { - // 做一些业务上的校验,判断是否需要校验 - } - List list = listByIds(ids); - for (SysOss sysOss : list) { - ICloudStorageStrategy storage = OssFactory.instance(sysOss.getService()); - storage.delete(sysOss.getUrl()); - } - return removeByIds(ids); - } + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + // 做一些业务上的校验,判断是否需要校验 + } + List list = listByIds(ids); + for (SysOss sysOss : list) { + ICloudStorageStrategy storage = OssFactory.instance(sysOss.getService()); + storage.delete(sysOss.getUrl()); + } + return removeByIds(ids); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java index 3a3cd0f8f..9681b3db4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -21,7 +21,7 @@ import java.util.List; /** * 岗位信息 服务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysPostServiceImpl extends ServicePlusImpl implements ISysPostService { @@ -35,7 +35,7 @@ public class SysPostServiceImpl extends ServicePlusImpl().eq(SysUserPost::getPostId,postId)); + return userPostMapper.selectCount(new LambdaQueryWrapper().eq(SysUserPost::getPostId, postId)); } /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index eff0022ea..6e0ed78ce 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; @@ -29,7 +29,7 @@ import java.util.*; /** * 角色 业务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysRoleServiceImpl extends ServicePlusImpl implements ISysRoleService { @@ -280,7 +280,7 @@ public class SysRoleServiceImpl extends ServicePlusImpl 0) { - rows = roleMenuMapper.insertAll(list); + rows = roleMenuMapper.insertAll(list); } return rows; } @@ -301,7 +301,7 @@ public class SysRoleServiceImpl extends ServicePlusImpl 0) { - rows = roleDeptMapper.insertAll(list); + rows = roleDeptMapper.insertAll(list); } return rows; } @@ -355,45 +355,45 @@ public class SysRoleServiceImpl extends ServicePlusImpl() - .eq(SysUserRole::getRoleId, userRole.getRoleId()) - .eq(SysUserRole::getUserId, userRole.getUserId())); + .eq(SysUserRole::getRoleId, userRole.getRoleId()) + .eq(SysUserRole::getUserId, userRole.getUserId())); } /** * 批量取消授权用户角色 * - * @param roleId 角色ID + * @param roleId 角色ID * @param userIds 需要取消授权的用户数据ID * @return 结果 */ @Override public int deleteAuthUsers(Long roleId, Long[] userIds) { - return userRoleMapper.delete(new LambdaQueryWrapper() - .eq(SysUserRole::getRoleId, roleId) - .in(SysUserRole::getUserId, Arrays.asList(userIds))); + return userRoleMapper.delete(new LambdaQueryWrapper() + .eq(SysUserRole::getRoleId, roleId) + .in(SysUserRole::getUserId, Arrays.asList(userIds))); } /** * 批量选择授权用户角色 * - * @param roleId 角色ID + * @param roleId 角色ID * @param userIds 需要删除的用户数据ID * @return 结果 */ @Override public int insertAuthUsers(Long roleId, Long[] userIds) { // 新增用户与角色管理 - int rows = 1; - List list = new ArrayList(); + int rows = 1; + List list = new ArrayList(); for (Long userId : userIds) { SysUserRole ur = new SysUserRole(); ur.setUserId(userId); ur.setRoleId(roleId); list.add(ur); } - if (list.size() > 0) { - rows = userRoleMapper.insertAll(list); - } + if (list.size() > 0) { + rows = userRoleMapper.insertAll(list); + } return rows; } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java index 6a41cb67c..cf5afc54c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java @@ -9,10 +9,11 @@ import org.springframework.stereotype.Service; /** * 在线用户 服务层处理 * - * @author ruoyi + * @author Lion Li */ @Service public class SysUserOnlineServiceImpl implements ISysUserOnlineService { + /** * 通过登录地址查询信息 * diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java index 7e3182171..e1bd9cc39 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -31,7 +31,7 @@ import java.util.List; /** * 用户 业务层处理 * - * @author ruoyi + * @author Lion Li */ @Slf4j @Service @@ -79,7 +79,7 @@ public class SysUserServiceImpl extends ServicePlusImpl selectAllocatedList(SysUser user) { - return PageUtils.buildDataInfo(baseMapper.selectAllocatedList(PageUtils.buildPage(), user)); + return PageUtils.buildDataInfo(baseMapper.selectAllocatedList(PageUtils.buildPage(), user)); } /** @@ -91,7 +91,7 @@ public class SysUserServiceImpl extends ServicePlusImpl selectUnallocatedList(SysUser user) { - return PageUtils.buildDataInfo(baseMapper.selectUnallocatedList(PageUtils.buildPage(), user)); + return PageUtils.buildDataInfo(baseMapper.selectUnallocatedList(PageUtils.buildPage(), user)); } /** @@ -258,7 +258,7 @@ public class SysUserServiceImpl extends ServicePlusImpl 0; } @@ -274,11 +274,11 @@ public class SysUserServiceImpl extends ServicePlusImpl().eq(SysUserRole::getUserId,userId)); + userRoleMapper.delete(new LambdaQueryWrapper().eq(SysUserRole::getUserId, userId)); // 新增用户与角色管理 insertUserRole(user); // 删除用户与岗位关联 - userPostMapper.delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId,userId)); + userPostMapper.delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId, userId)); // 新增用户与岗位管理 insertUserPost(user); return baseMapper.updateById(user); @@ -287,15 +287,14 @@ public class SysUserServiceImpl extends ServicePlusImpl() - .eq(SysUserRole::getUserId, userId)); + .eq(SysUserRole::getUserId, userId)); insertUserRole(userId, roleIds); } @@ -325,15 +324,15 @@ public class SysUserServiceImpl extends ServicePlusImpl() - .set(SysUser::getAvatar,avatar) - .eq(SysUser::getUserName,userName)) > 0; + .set(SysUser::getAvatar, avatar) + .eq(SysUser::getUserName, userName)) > 0; } /** @@ -358,8 +357,8 @@ public class SysUserServiceImpl extends ServicePlusImpl() - .set(SysUser::getPassword,password) - .eq(SysUser::getUserName,userName)); + .set(SysUser::getPassword, password) + .eq(SysUser::getUserName, userName)); } /** @@ -379,7 +378,7 @@ public class SysUserServiceImpl extends ServicePlusImpl 0) { - userRoleMapper.insertAll(list); + userRoleMapper.insertAll(list); } } } @@ -401,7 +400,7 @@ public class SysUserServiceImpl extends ServicePlusImpl 0) { - userPostMapper.insertAll(list); + userPostMapper.insertAll(list); } } } @@ -409,7 +408,7 @@ public class SysUserServiceImpl extends ServicePlusImpl().eq(SysUserRole::getUserId,userId)); + userRoleMapper.delete(new LambdaQueryWrapper().eq(SysUserRole::getUserId, userId)); // 删除用户与岗位表 - userPostMapper.delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId,userId)); + userPostMapper.delete(new LambdaQueryWrapper().eq(SysUserPost::getUserId, userId)); return baseMapper.deleteById(userId); } @@ -458,18 +457,18 @@ public class SysUserServiceImpl extends ServicePlusImpl ids = Arrays.asList(userIds); // 删除用户与角色关联 - userRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId,ids)); + userRoleMapper.delete(new LambdaQueryWrapper().in(SysUserRole::getUserId, ids)); // 删除用户与岗位表 - userPostMapper.delete(new LambdaQueryWrapper().in(SysUserPost::getUserId,ids)); + userPostMapper.delete(new LambdaQueryWrapper().in(SysUserPost::getUserId, ids)); return baseMapper.deleteBatchIds(ids); } /** * 导入用户数据 * - * @param userList 用户数据列表 + * @param userList 用户数据列表 * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 - * @param operName 操作用户 + * @param operName 操作用户 * @return 结果 */ @Override diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java index f54130a9a..15b9759b8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java @@ -49,16 +49,16 @@ public class TokenServiceImpl implements TokenService { // 获取请求携带的令牌 String token = getToken(request); if (StringUtils.isNotEmpty(token)) { - try { - Claims claims = parseToken(token); - // 解析对应的权限以及用户信息 - String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); - String userKey = getTokenKey(uuid); - LoginUser user = RedisUtils.getCacheObject(userKey); - return user; - } catch (Exception e) { + try { + Claims claims = parseToken(token); + // 解析对应的权限以及用户信息 + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + String userKey = getTokenKey(uuid); + LoginUser user = RedisUtils.getCacheObject(userKey); + return user; + } catch (Exception e) { - } + } } return null; } From 37a8addf5263bd9af09e6d64b9c89969aa76111d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 15:55:44 +0800 Subject: [PATCH 32/82] =?UTF-8?q?update=20feign=20=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=E8=BF=87=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 3 ++- ruoyi-common/pom.xml | 2 ++ .../java/com/ruoyi/demo/controller/FeignTestController.java | 1 + .../src/main/java/com/ruoyi/demo/feign/FeignTestService.java | 1 + .../java/com/ruoyi/demo/feign/constant/FeignTestConstant.java | 4 ++++ .../java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java | 1 + .../src/main/java/com/ruoyi/framework/config/FeignConfig.java | 2 ++ 7 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c9124fc84..ab8fe420c 100644 --- a/pom.xml +++ b/pom.xml @@ -159,6 +159,7 @@ ${hutool.version} + org.springframework.cloud spring-cloud-starter-openfeign @@ -170,7 +171,7 @@ - + io.github.openfeign feign-okhttp diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index dd9c18207..b8017cab5 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -111,11 +111,13 @@ lombok + org.springframework.cloud spring-cloud-starter-openfeign + io.github.openfeign feign-okhttp diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java index f8bec9f9c..2f833e33e 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java @@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RestController; * feign测试controller * * @author Lion Li + * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 */ @Api(value = "feign测试", tags = {"feign测试"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java index afda66cfb..50eb4ebf6 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java @@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam; * 增加 feign 的目的为使 http 请求接口化 * * @author Lion Li + * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 */ @FeignClient( name = FeignTestConstant.BAIDU_NAME, diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java index 7a5b3fb81..28dfa8adb 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java @@ -1,5 +1,9 @@ package com.ruoyi.demo.feign.constant; +/** + * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 + */ +@Deprecated public class FeignTestConstant { public static final String BAIDU_NAME = "baidu"; diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java index b7e4a1931..8e81ad7ad 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Component; * * @see {com.ruoyi.framework.config.FeignConfig#errorDecoder()} * @author Lion Li + * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 */ @Slf4j @Component 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 14db1c95b..8b432ad89 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 @@ -17,7 +17,9 @@ import java.util.concurrent.TimeUnit; * openfeign配置类 * * @author Lion Li + * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 */ +@Deprecated @EnableFeignClients("${feign.package}") @Configuration @ConditionalOnClass(Feign.class) From b47f8fd7844bfc971846fd6a7b91d7a14fb92933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 16:19:42 +0800 Subject: [PATCH 33/82] =?UTF-8?q?update=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=20=E6=94=B9=E4=B8=BA=E7=94=9F=E6=88=90=E6=8A=BD?= =?UTF-8?q?=E8=B1=A1=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/vm/java/domain.java.vm | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm index 29a4f23c7..dfd1465f6 100644 --- a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -8,31 +8,38 @@ import java.io.Serializable; import java.util.Date; import java.math.BigDecimal; +#foreach ($import in $importList) +import ${import}; +#end +#if($table.crud || $table.sub) +import com.ruoyi.common.core.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.domain.TreeEntity; +#end + /** * ${functionName}对象 ${tableName} * * @author ${author} * @date ${datetime} */ +#if($table.crud || $table.sub) + #set($Entity="BaseEntity") +#elseif($table.tree) + #set($Entity="TreeEntity") +#end @Data -@NoArgsConstructor @Accessors(chain = true) @TableName("${tableName}") -public class ${ClassName} implements Serializable { +public class ${ClassName} extends ${Entity} { private static final long serialVersionUID=1L; #foreach ($column in $columns) - +#if(!$table.isSuperColumn($column.javaField)) /** * $column.columnComment */ -#if($column.javaField=="createBy"||$column.javaField=="createTime") - @TableField(fill = FieldFill.INSERT) -#end -#if($column.javaField=="updateBy"||$column.javaField=="updateTime") - @TableField(fill = FieldFill.INSERT_UPDATE) -#end #if($column.javaField=='delFlag') @TableLogic #end @@ -44,5 +51,6 @@ public class ${ClassName} implements Serializable { #end private $column.javaType $column.javaField; #end +#end } From 284f47e76c16e1c7837cb74f96449072ad68ff9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 16:19:51 +0800 Subject: [PATCH 34/82] =?UTF-8?q?update=20=E4=BB=A3=E7=A0=81=E7=94=9F?= =?UTF-8?q?=E6=88=90=20=E6=94=B9=E4=B8=BA=E7=94=9F=E6=88=90=E6=8A=BD?= =?UTF-8?q?=E8=B1=A1=E5=AE=9E=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/constant/GenConstants.java | 2 +- .../main/java/com/ruoyi/generator/domain/GenTableColumn.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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 d6502db82..27c57035a 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 @@ -64,7 +64,7 @@ public class GenConstants public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime" }; /** Tree基类字段 */ - public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "children" }; + public static final String[] TREE_ENTITY = { "parentName", "parentId", "children" }; /** 文本框 */ public static final String HTML_INPUT = "input"; diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java index 2d5d10646..8c08d543c 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java @@ -193,7 +193,7 @@ public class GenTableColumn extends BaseEntity { // BaseEntity "createBy", "createTime", "updateBy", "updateTime", // TreeEntity - "parentName", "parentId", "orderNum"); + "parentName", "parentId"); } public boolean isUsableColumn() { From 36e501b4578680c2f8d0edca5852c6624813cd53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 16:20:16 +0800 Subject: [PATCH 35/82] =?UTF-8?q?update=20=E9=80=9A=E7=94=A8=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=B3=A8=E5=85=A5=E6=94=B9=E4=B8=BA=E9=80=82=E9=85=8D?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E5=AE=9E=E4=BD=93=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreateAndUpdateMetaObjectHandler.java | 50 +++++++++++++------ 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java index 2f502d730..d662ae9fa 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/handler/CreateAndUpdateMetaObjectHandler.java @@ -1,10 +1,13 @@ package com.ruoyi.framework.handler; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; @@ -22,31 +25,50 @@ public class CreateAndUpdateMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { try { - //根据属性名字设置要填充的值 - if (metaObject.hasGetter("createTime")) { - this.setFieldValByName("createTime", new Date(), metaObject); - } - if (metaObject.hasGetter("createBy")) { - if (metaObject.getValue("createBy") == null) { - this.setFieldValByName("createBy", getLoginUsername(), metaObject); + if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) { + BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject(); + Date current = new Date(); + // 创建时间为空 则填充 + if (ObjectUtil.isNull(baseEntity.getCreateTime())) { + baseEntity.setCreateTime(current); + } + // 更新时间为空 则填充 + if (ObjectUtil.isNull(baseEntity.getUpdateTime())) { + baseEntity.setUpdateTime(current); + } + String username = getLoginUsername(); + // 当前已登录 且 创建人为空 则填充 + if (StringUtils.isNotBlank(username) + && StringUtils.isBlank(baseEntity.getCreateBy())) { + baseEntity.setCreateBy(username); + } + // 当前已登录 且 更信任为空 则填充 + if (StringUtils.isNotBlank(username) + && StringUtils.isBlank(baseEntity.getUpdateBy())) { + baseEntity.setUpdateBy(username); } } } catch (Exception e) { throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); } - updateFill(metaObject); } @Override public void updateFill(MetaObject metaObject) { try { - if (metaObject.hasGetter("updateBy")) { - if (metaObject.getValue("updateBy") == null) { - this.setFieldValByName("updateBy", getLoginUsername(), metaObject); + if (ObjectUtil.isNotNull(metaObject) && metaObject.getOriginalObject() instanceof BaseEntity) { + BaseEntity baseEntity = (BaseEntity) metaObject.getOriginalObject(); + Date current = new Date(); + // 更新时间为空 则填充 + if (ObjectUtil.isNull(baseEntity.getUpdateTime())) { + baseEntity.setUpdateTime(current); + } + String username = getLoginUsername(); + // 当前已登录 且 更信任为空 则填充 + if (StringUtils.isNotBlank(username) + && StringUtils.isBlank(baseEntity.getUpdateBy())) { + baseEntity.setUpdateBy(username); } - } - if (metaObject.hasGetter("updateTime")) { - this.setFieldValByName("updateTime", new Date(), metaObject); } } catch (Exception e) { throw new ServiceException("自动注入异常 => " + e.getMessage(), HttpStatus.HTTP_UNAUTHORIZED); From 9e0ec2b03cfeeb56b8bc14513412ba24a0632c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 16:21:00 +0800 Subject: [PATCH 36/82] =?UTF-8?q?update=20=E4=BF=AE=E6=94=B9=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E4=BB=A3=E7=A0=81=20=E6=B5=8B=E8=AF=95=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E5=AE=9E=E4=BD=93=E9=80=9A=E8=BF=87=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=A0=91=E5=AE=9E=E4=BD=93=E4=B8=8D=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/domain/TreeEntity.java | 6 --- .../java/com/ruoyi/demo/domain/TestDemo.java | 36 +++------------ .../java/com/ruoyi/demo/domain/TestTree.java | 44 ++++--------------- 3 files changed, 13 insertions(+), 73 deletions(-) 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 f192263e7..c0e62c710 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 @@ -35,12 +35,6 @@ public class TreeEntity extends BaseEntity { @ApiModelProperty(value = "父菜单ID") private Long parentId; - /** - * 显示顺序 - */ - @ApiModelProperty(value = "显示顺序") - private String orderNum; - /** * 子部门 */ diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java index 21149d80d..74b57d991 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestDemo.java @@ -1,13 +1,11 @@ package com.ruoyi.demo.domain; import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.io.Serializable; -import java.util.Date; - /** * 测试单表对象 test_demo * @@ -15,10 +13,10 @@ import java.util.Date; * @date 2021-07-26 */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("test_demo") -public class TestDemo implements Serializable { +public class TestDemo extends BaseEntity { private static final long serialVersionUID=1L; @@ -42,7 +40,7 @@ public class TestDemo implements Serializable { /** * 排序号 */ - @OrderBy(isDesc = false, sort = 1) + @OrderBy(asc = false, sort = 1) private Long orderNum; /** @@ -61,30 +59,6 @@ public class TestDemo implements Serializable { @Version private Long version; - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 创建人 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - - /** - * 更新人 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - /** * 删除标志 */ diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java index 799a6d415..92e005b85 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/domain/TestTree.java @@ -1,13 +1,14 @@ package com.ruoyi.demo.domain; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.Version; +import com.ruoyi.common.core.domain.TreeEntity; import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; -import java.io.Serializable; -import java.util.Date; - /** * 测试树表对象 test_tree * @@ -15,10 +16,10 @@ import java.util.Date; * @date 2021-07-26 */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("test_tree") -public class TestTree implements Serializable { +public class TestTree extends TreeEntity { private static final long serialVersionUID=1L; @@ -29,11 +30,6 @@ public class TestTree implements Serializable { @TableId(value = "id") private Long id; - /** - * 父id - */ - private Long parentId; - /** * 部门id */ @@ -55,30 +51,6 @@ public class TestTree implements Serializable { @Version private Long version; - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 创建人 - */ - @TableField(fill = FieldFill.INSERT) - private String createBy; - - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateTime; - - /** - * 更新人 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private String updateBy; - /** * 删除标志 */ From e66d0e4f7465e840cc73e3b2d7dc4eeb2dc804b8 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 15 Oct 2021 17:56:57 +0800 Subject: [PATCH 37/82] =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B=E4=BF=9D=E6=8C=81=E4=B8=80?= =?UTF-8?q?=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java | 2 +- .../src/main/java/com/ruoyi/system/service/ISysRoleService.java | 2 +- .../java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java | 2 +- ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java index e4379c97b..58ede18e0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -39,7 +39,7 @@ public interface SysRoleMapper * @param userId 用户ID * @return 选中角色ID列表 */ - public List selectRoleListByUserId(Long userId); + public List selectRoleListByUserId(Long userId); /** * 通过角色ID查询角色 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java index 1690ed53a..bf1f7b3d9 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -49,7 +49,7 @@ public interface ISysRoleService * @param userId 用户ID * @return 选中角色ID列表 */ - public List selectRoleListByUserId(Long userId); + public List selectRoleListByUserId(Long userId); /** * 通过角色ID查询角色 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java index cde75c873..f53f975fe 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -122,7 +122,7 @@ public class SysRoleServiceImpl implements ISysRoleService * @return 选中角色ID列表 */ @Override - public List selectRoleListByUserId(Long userId) + public List selectRoleListByUserId(Long userId) { return roleMapper.selectRoleListByUserId(userId); } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index c26cfe5a0..a8d3ede58 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -65,7 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select r.role_id from sys_role r left join sys_user_role ur on ur.role_id = r.role_id From 519ea854d57f83feb6d6e992ce85eaad0a9acaaa Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 15 Oct 2021 17:57:46 +0800 Subject: [PATCH 38/82] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=E8=B7=AF=E7=94=B1=E6=87=92=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E6=8F=90=E5=8D=87=E9=A1=B5=E9=9D=A2=E5=93=8D=E5=BA=94=E9=80=9F?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/store/modules/permission.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js index 6143038ab..4c8ed023b 100644 --- a/ruoyi-ui/src/store/modules/permission.js +++ b/ruoyi-ui/src/store/modules/permission.js @@ -106,8 +106,13 @@ function filterChildren(childrenMap, lastRouter = false) { return children } -export const loadView = (view) => { // 路由懒加载 - return (resolve) => require([`@/views/${view}`], resolve) +export const loadView = (view) => { + if (process.env.NODE_ENV === 'development') { + return (resolve) => require([`@/views/${view}`], resolve) + } else { + // 使用 import 实现生产环境的路由懒加载 + return () => import(`@/views/${view}`) + } } export default permission From 60404a6564d2aa2e456cb56020db7a1f2ea83e27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 15 Oct 2021 19:30:42 +0800 Subject: [PATCH 39/82] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E4=B8=8D?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=AF=BC=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/layout/components/Navbar.vue | 3 +-- ruoyi-ui/src/views/index.vue | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue index 69656f019..075bf7413 100644 --- a/ruoyi-ui/src/layout/components/Navbar.vue +++ b/ruoyi-ui/src/layout/components/Navbar.vue @@ -56,7 +56,6 @@ import SizeSelect from '@/components/SizeSelect' import Search from '@/components/HeaderSearch' import RuoYiGit from '@/components/RuoYi/Git' import RuoYiDoc from '@/components/RuoYi/Doc' -import config from '@/../vue.config' export default { components: { @@ -103,7 +102,7 @@ export default { type: 'warning' }).then(() => { this.$store.dispatch('LogOut').then(() => { - location.href = config.publicPath + 'index'; + this.$router.push({ path: "/login" }) }) }).catch(() => {}); } diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index ae96e9954..3d1ab2057 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -478,14 +478,13 @@ + + + + + + + + + + + + <#-- jquery cookie --> + + <#-- jquery.validate --> + + + <#-- layer --> + + + <#-- common --> + + + + + +<#macro commonHeader> +
+ + +
+ + + + + + +<#macro commonLeft pageName > + + + + +<#macro commonControl > + + + + +
+ + +<#macro commonFooter > +
+ Powered by XXL-JOB ${I18n.admin_version} + +
+ \ No newline at end of file diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/help.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/help.ftl new file mode 100644 index 000000000..1409fc50c --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/help.ftl @@ -0,0 +1,47 @@ + + + + <#import "./common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + ${I18n.admin_name} + +sidebar-collapse "> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "help" /> + + +
+ +
+

${I18n.job_help}

+
+ + +
+
+

${I18n.admin_name_full}

+
+

+ Github     + +

+ ${I18n.job_help_document} +

+ +

+

+
+
+ +
+ + + + <@netCommon.commonFooter /> +
+<@netCommon.commonScript /> + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/index.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/index.ftl new file mode 100644 index 000000000..d642f4e68 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/index.ftl @@ -0,0 +1,147 @@ + + + + <#import "./common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse "> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "index" /> + + +
+ +
+

${I18n.job_dashboard_name}

+ +
+ + +
+ + +
+ + <#-- 任务信息 --> +
+
+ + +
+ ${I18n.job_dashboard_job_num} + ${jobInfoCount} + +
+
+
+ ${I18n.job_dashboard_job_num_tip} +
+
+
+ + <#-- 调度信息 --> +
+
+ + +
+ ${I18n.job_dashboard_trigger_num} + ${jobLogCount} + +
+
+
+ + ${I18n.job_dashboard_trigger_num_tip} + <#--<#if jobLogCount gt 0> + 调度成功率:${(jobLogSuccessCount*100/jobLogCount)?string("0.00")}% + --> + +
+
+
+ + <#-- 执行器 --> +
+
+ + +
+ ${I18n.job_dashboard_jobgroup_num} + ${executorCount} + +
+
+
+ ${I18n.job_dashboard_jobgroup_num_tip} +
+
+
+ +
+ + <#-- 调度报表:时间区间筛选,左侧折线图 + 右侧饼图 --> +
+
+
+
+

${I18n.job_dashboard_report}

+ <#----> + + +
+ + <#----> +
+ + +
+
+
+ <#-- 左侧折线图 --> +
+
+
+ <#-- 右侧饼图 --> +
+
+
+
+
+
+
+
+ +
+ +
+ + + + <@netCommon.commonFooter /> +
+<@netCommon.commonScript /> + + + +<#-- echarts --> + + + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl new file mode 100644 index 000000000..a386b2883 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobcode/jobcode.index.ftl @@ -0,0 +1,164 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + + + + +
+ +
+ +
+ +
+ + + <#--<@netCommon.commonFooter />--> +
+ + + + +<@netCommon.commonScript /> + + + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" /> + <#assign glueTypeIdeMode = "text/x-java" /> + + <#if jobInfo.glueType == "GLUE_GROOVY" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" /> + <#assign glueTypeIdeMode = "text/x-java" /> + <#elseif jobInfo.glueType == "GLUE_SHELL" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/shell/shell.js" /> + <#assign glueTypeIdeMode = "text/x-sh" /> + <#elseif jobInfo.glueType == "GLUE_PYTHON" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/python/python.js" /> + <#assign glueTypeIdeMode = "text/x-python" /> + <#elseif jobInfo.glueType == "GLUE_PHP" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/php/php.js" /> + <#assign glueTypeIdeMode = "text/x-php" /> + <#assign glueTypeModeSrc02 = "${request.contextPath}/static/plugins/codemirror/mode/clike/clike.js" /> + <#elseif jobInfo.glueType == "GLUE_NODEJS" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/javascript/javascript.js" /> + <#assign glueTypeIdeMode = "text/javascript" /> + <#elseif jobInfo.glueType == "GLUE_POWERSHELL" > + <#assign glueTypeModeSrc = "${request.contextPath}/static/plugins/codemirror/mode/powershell/powershell.js" /> + <#assign glueTypeIdeMode = "powershell" /> + + + + + +<#if glueTypeModeSrc02?exists> + + + + + + + + + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl new file mode 100644 index 000000000..778df9ec2 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobgroup/jobgroup.index.ftl @@ -0,0 +1,172 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse "> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "jobgroup" /> + + +
+ +
+

${I18n.jobgroup_name}

+
+ + +
+ +
+
+
+ AppName + +
+
+
+
+ ${I18n.jobgroup_field_title} + +
+
+
+ +
+
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + +
IDAppName${I18n.jobgroup_field_title}${I18n.jobgroup_field_addressType}OnLine ${I18n.jobgroup_field_registryList}${I18n.system_opt}
+
+
+
+
+
+
+ + + + + + + + + <@netCommon.commonFooter /> +
+ +<@netCommon.commonScript /> + + + + + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl new file mode 100644 index 000000000..3a5d7d8a7 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/jobinfo/jobinfo.index.ftl @@ -0,0 +1,540 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse"> +
+ + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "jobinfo" /> + + +
+ +
+

${I18n.jobinfo_name}

+
+ + +
+ +
+
+
+ ${I18n.jobinfo_field_jobgroup} + +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+
+ <#--
+

调度列表

+
--> +
+ + + + + + + + + + + + + + + + + + + +
${I18n.jobinfo_field_id}${I18n.jobinfo_field_jobgroup}${I18n.jobinfo_field_jobdesc}${I18n.schedule_type}${I18n.jobinfo_field_gluetype}${I18n.jobinfo_field_executorparam}addTimeupdateTime${I18n.jobinfo_field_author}${I18n.jobinfo_field_alarmemail}${I18n.system_status}${I18n.system_opt}
+
+
+
+
+
+
+ + + <@netCommon.commonFooter /> +
+ + + + + + + +<#-- trigger --> + + +<@netCommon.commonScript /> + + + + + +<#-- cronGen --> + + + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl new file mode 100644 index 000000000..3881cfa6a --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/joblog/joblog.detail.ftl @@ -0,0 +1,72 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + ${I18n.admin_name} + + + +
+ +
+ +
+ +
+
+
+                
+
  • +
    +
    +
    + + + <@netCommon.commonFooter /> + +
    + +<@netCommon.commonScript /> + + + + + \ No newline at end of file diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/joblog/joblog.index.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/joblog/joblog.index.ftl new file mode 100644 index 000000000..a2e983de8 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/joblog/joblog.index.ftl @@ -0,0 +1,180 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + + + ${I18n.admin_name} + +sidebar-collapse "> +
    + + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "joblog" /> + + +
    + +
    +

    ${I18n.joblog_name}

    +
    + + +
    +
    +
    +
    + ${I18n.jobinfo_field_jobgroup} + +
    +
    +
    +
    + ${I18n.jobinfo_job} + +
    +
    + +
    +
    + ${I18n.joblog_status} + +
    +
    + +
    +
    + + ${I18n.joblog_field_triggerTime} + + +
    +
    + +
    + +
    + +
    + +
    +
    + +
    +
    +
    + <#--

    调度日志

    --> +
    + + + + + + <#-- + + --> + + + + + + + + + + +
    ${I18n.jobinfo_field_id}jobGroup执行器地址运行模式任务参数${I18n.joblog_field_triggerTime}${I18n.joblog_field_triggerCode}${I18n.joblog_field_triggerMsg}${I18n.joblog_field_handleTime}${I18n.joblog_field_handleCode}${I18n.joblog_field_handleMsg}${I18n.system_opt}
    +
    +
    +
    +
    +
    +
    + + + <@netCommon.commonFooter /> +
    + + + + +<@netCommon.commonScript /> + + + + + + + + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/login.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/login.ftl new file mode 100644 index 000000000..c3f696385 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/login.ftl @@ -0,0 +1,45 @@ + + + + <#import "./common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + ${I18n.admin_name} + + + +<@netCommon.commonScript /> + + + + + diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/user/user.index.ftl b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/user/user.index.ftl new file mode 100644 index 000000000..012039826 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/templates/user/user.index.ftl @@ -0,0 +1,188 @@ + + + + <#import "../common/common.macro.ftl" as netCommon> + <@netCommon.commonStyle /> + + + ${I18n.admin_name} + +sidebar-collapse"> +
    + + <@netCommon.commonHeader /> + + <@netCommon.commonLeft "user" /> + + +
    + +
    +

    ${I18n.user_manage}

    +
    + + +
    + +
    +
    +
    + ${I18n.user_role} + +
    +
    +
    +
    + ${I18n.user_username} + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + + + + + + + + + + + + +
    ID${I18n.user_username}${I18n.user_password}${I18n.user_role}${I18n.user_permission}${I18n.system_opt}
    +
    +
    +
    +
    +
    +
    + + + <@netCommon.commonFooter /> +
    + + + + + + + +<@netCommon.commonScript /> + + + + + + From c60130e53445f391bd624d436685a39f589f19a1 Mon Sep 17 00:00:00 2001 From: sxq <812980466@qq.com> Date: Wed, 20 Oct 2021 11:43:41 +0800 Subject: [PATCH 43/82] =?UTF-8?q?xxl-job-admin=E7=9A=84sql=20=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/tables_xxl_job.sql | 122 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 sql/tables_xxl_job.sql diff --git a/sql/tables_xxl_job.sql b/sql/tables_xxl_job.sql new file mode 100644 index 000000000..02e4442a2 --- /dev/null +++ b/sql/tables_xxl_job.sql @@ -0,0 +1,122 @@ +# +# XXL-JOB v2.3.0 +# Copyright (c) 2015-present, xuxueli. + +CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; +use `xxl_job`; + +SET NAMES utf8mb4; + +CREATE TABLE `xxl_job_info` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_desc` varchar(255) NOT NULL, + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + `author` varchar(64) DEFAULT NULL COMMENT '作者', + `alarm_email` varchar(255) DEFAULT NULL COMMENT '报警邮件', + `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '调度类型', + `schedule_conf` varchar(128) DEFAULT NULL COMMENT '调度配置,值含义取决于调度类型', + `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '调度过期策略', + `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '执行器路由策略', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞处理策略', + `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任务执行超时时间,单位秒', + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `glue_type` varchar(50) NOT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE备注', + `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新时间', + `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任务ID,多个逗号分隔', + `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '调度状态:0-停止,1-运行', + `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次调度时间', + `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次调度时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_log` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `job_group` int(11) NOT NULL COMMENT '执行器主键ID', + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', + `executor_address` varchar(255) DEFAULT NULL COMMENT '执行器地址,本次执行的地址', + `executor_handler` varchar(255) DEFAULT NULL COMMENT '执行器任务handler', + `executor_param` varchar(512) DEFAULT NULL COMMENT '执行器任务参数', + `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '执行器任务分片参数,格式如 1/2', + `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失败重试次数', + `trigger_time` datetime DEFAULT NULL COMMENT '调度-时间', + `trigger_code` int(11) NOT NULL COMMENT '调度-结果', + `trigger_msg` text COMMENT '调度-日志', + `handle_time` datetime DEFAULT NULL COMMENT '执行-时间', + `handle_code` int(11) NOT NULL COMMENT '执行-状态', + `handle_msg` text COMMENT '执行-日志', + `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警状态:0-默认、1-无需告警、2-告警成功、3-告警失败', + PRIMARY KEY (`id`), + KEY `I_trigger_time` (`trigger_time`), + KEY `I_handle_code` (`handle_code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_log_report` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `trigger_day` datetime DEFAULT NULL COMMENT '调度-时间', + `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '运行中-日志数量', + `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行成功-日志数量', + `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '执行失败-日志数量', + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_logglue` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `job_id` int(11) NOT NULL COMMENT '任务,主键ID', + `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE类型', + `glue_source` mediumtext COMMENT 'GLUE源代码', + `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE备注', + `add_time` datetime DEFAULT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_registry` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `registry_group` varchar(50) NOT NULL, + `registry_key` varchar(255) NOT NULL, + `registry_value` varchar(255) NOT NULL, + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_group` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `app_name` varchar(64) NOT NULL COMMENT '执行器AppName', + `title` varchar(12) NOT NULL COMMENT '执行器名称', + `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '执行器地址类型:0=自动注册、1=手动录入', + `address_list` text COMMENT '执行器地址列表,多地址逗号分隔', + `update_time` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(50) NOT NULL COMMENT '账号', + `password` varchar(50) NOT NULL COMMENT '密码', + `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用户、1-管理员', + `permission` varchar(255) DEFAULT NULL COMMENT '权限:执行器ID列表,多个逗号分割', + PRIMARY KEY (`id`), + UNIQUE KEY `i_username` (`username`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +CREATE TABLE `xxl_job_lock` ( + `lock_name` varchar(50) NOT NULL COMMENT '锁名称', + PRIMARY KEY (`lock_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' ); +INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); +INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); +INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); + +commit; + From 12d76e4f205c41cf3fd8ea215b787e900b3cc876 Mon Sep 17 00:00:00 2001 From: sxq <812980466@qq.com> Date: Wed, 20 Oct 2021 11:56:17 +0800 Subject: [PATCH 44/82] =?UTF-8?q?1=EF=BC=9Aproperties=20=E6=8D=A2=E6=88=90?= =?UTF-8?q?yml=20=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E3=80=82=202?= =?UTF-8?q?=EF=BC=9A=E9=BB=98=E8=AE=A4=E7=AB=AF=E5=8F=A3=E6=94=B9=E6=88=90?= =?UTF-8?q?9100=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.properties | 65 ------------------ .../src/main/resources/application.yml | 68 +++++++++++++++++++ 2 files changed, 68 insertions(+), 65 deletions(-) delete mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.properties create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.properties b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.properties deleted file mode 100644 index 004bac73c..000000000 --- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.properties +++ /dev/null @@ -1,65 +0,0 @@ -### web -server.port=8080 -server.servlet.context-path=/xxl-job-admin - -### actuator -management.server.servlet.context-path=/actuator -management.health.mail.enabled=false - -### resources -spring.mvc.servlet.load-on-startup=0 -spring.mvc.static-path-pattern=/static/** -spring.resources.static-locations=classpath:/static/ - -### freemarker -spring.freemarker.templateLoaderPath=classpath:/templates/ -spring.freemarker.suffix=.ftl -spring.freemarker.charset=UTF-8 -spring.freemarker.request-context-attribute=request -spring.freemarker.settings.number_format=0.########## - -### mybatis -mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml -#mybatis.type-aliases-package=com.xxl.job.admin.core.model - -### xxl-job, datasource -spring.datasource.url=jdbc:mysql://192.168.199.15:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai -spring.datasource.username=root -spring.datasource.password=root -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver - -### datasource-pool -spring.datasource.type=com.zaxxer.hikari.HikariDataSource -spring.datasource.hikari.minimum-idle=10 -spring.datasource.hikari.maximum-pool-size=30 -spring.datasource.hikari.auto-commit=true -spring.datasource.hikari.idle-timeout=30000 -spring.datasource.hikari.pool-name=HikariCP -spring.datasource.hikari.max-lifetime=900000 -spring.datasource.hikari.connection-timeout=10000 -spring.datasource.hikari.connection-test-query=SELECT 1 -spring.datasource.hikari.validation-timeout=1000 - -### xxl-job, email -spring.mail.host=smtp.qq.com -spring.mail.port=25 -spring.mail.username=943887556@qq.com -spring.mail.from=943887556@qq.com -spring.mail.password=tianque887556 -spring.mail.properties.mail.smtp.auth=true -spring.mail.properties.mail.smtp.starttls.enable=true -spring.mail.properties.mail.smtp.starttls.required=true -spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory - -### xxl-job, access token -xxl.job.accessToken= - -### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") -xxl.job.i18n=zh_CN - -## xxl-job, triggerpool max size -xxl.job.triggerpool.fast.max=200 -xxl.job.triggerpool.slow.max=100 - -### xxl-job, log retention days -xxl.job.logretentiondays=30 diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml new file mode 100644 index 000000000..4ce77d3f0 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml @@ -0,0 +1,68 @@ +management: + health: + mail: + enabled: false + server: + servlet: + context-path: /actuator +mybatis: + mapper-locations: classpath:/mybatis-mapper/*Mapper.xml +server: + port: 9100 + servlet: + context-path: /xxl-job-admin +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + hikari: + auto-commit: true + connection-test-query: SELECT 1 + connection-timeout: 10000 + idle-timeout: 30000 + max-lifetime: 900000 + maximum-pool-size: 30 + minimum-idle: 10 + pool-name: HikariCP + validation-timeout: 1000 + type: com.zaxxer.hikari.HikariDataSource + url: jdbc:mysql://192.168.199.15:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai + username: root + password: root + freemarker: + charset: UTF-8 + request-context-attribute: request + settings: + number_format: 0.########## + suffix: .ftl + templateLoaderPath: classpath:/templates/ + mail: + from: 943887556@qq.com + host: smtp.qq.com + password: tianque887556 + port: 25 + properties: + mail: + smtp: + auth: true + socketFactory: + class: javax.net.ssl.SSLSocketFactory + starttls: + enable: true + required: true + username: 943887556@qq.com + mvc: + servlet: + load-on-startup: 0 + static-path-pattern: /static/** + resources: + static-locations: classpath:/static/ +xxl: + job: + accessToken: '' + i18n: zh_CN + logretentiondays: 30 + triggerpool: + fast: + max: 200 + slow: + max: 100 From a8092ace325bb2a4a5af044720834c8611eaa1bc Mon Sep 17 00:00:00 2001 From: sxq <812980466@qq.com> Date: Wed, 20 Oct 2021 11:58:14 +0800 Subject: [PATCH 45/82] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml index 4ce77d3f0..bf07eedb2 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml @@ -25,7 +25,7 @@ spring: pool-name: HikariCP validation-timeout: 1000 type: com.zaxxer.hikari.HikariDataSource - url: jdbc:mysql://192.168.199.15:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://localhost:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai username: root password: root freemarker: @@ -36,9 +36,9 @@ spring: suffix: .ftl templateLoaderPath: classpath:/templates/ mail: - from: 943887556@qq.com + from: xx@qq.com host: smtp.qq.com - password: tianque887556 + password: XXXXXXXX port: 25 properties: mail: @@ -49,7 +49,7 @@ spring: starttls: enable: true required: true - username: 943887556@qq.com + username: XXXXXX@qq.com mvc: servlet: load-on-startup: 0 From 2b0452207ed14352e66f046475ec9e9b83770722 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:06:42 +0800 Subject: [PATCH 46/82] =?UTF-8?q?update=20admin=E7=9B=91=E6=8E=A7=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=97=A5=E5=BF=97=E6=96=87=E4=BB=B6=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-extend/ruoyi-monitor-admin/Dockerfile | 1 + .../src/main/resources/logback.xml | 34 ++++++++++ .../src/main/resources/application.yml | 63 ++++++++++++------- .../src/main/resources/banner.txt | 8 +++ 4 files changed, 83 insertions(+), 23 deletions(-) create mode 100644 ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback.xml create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/banner.txt diff --git a/ruoyi-extend/ruoyi-monitor-admin/Dockerfile b/ruoyi-extend/ruoyi-monitor-admin/Dockerfile index ef551fec3..b506a2ddd 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/Dockerfile +++ b/ruoyi-extend/ruoyi-monitor-admin/Dockerfile @@ -3,6 +3,7 @@ FROM anapsix/alpine-java:8_server-jre_unlimited MAINTAINER Lion Li RUN mkdir -p /ruoyi/monitor +RUN mkdir -p /ruoyi/monitor/logs WORKDIR /ruoyi/monitor diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback.xml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback.xml new file mode 100644 index 000000000..16bb9376b --- /dev/null +++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/logback.xml @@ -0,0 +1,34 @@ + + + + logback + + + + + + + ${console.log.pattern} + utf-8 + + + + + ${log.path}.log + + ${log.path}.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml index bf07eedb2..e4319110a 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml @@ -1,19 +1,27 @@ -management: - health: - mail: - enabled: false - server: - servlet: - context-path: /actuator -mybatis: - mapper-locations: classpath:/mybatis-mapper/*Mapper.xml +--- # server 配置 server: port: 9100 servlet: context-path: /xxl-job-admin +spring: + mvc: + servlet: + load-on-startup: 0 + static-path-pattern: /static/** + web: + resources: + static-locations: classpath:/static/ + +--- # 数据库配置 +mybatis: + mapper-locations: classpath:/mybatis-mapper/*Mapper.xml spring: datasource: + type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai + username: root + password: root hikari: auto-commit: true connection-test-query: SELECT 1 @@ -24,10 +32,9 @@ spring: minimum-idle: 10 pool-name: HikariCP validation-timeout: 1000 - type: com.zaxxer.hikari.HikariDataSource - url: jdbc:mysql://localhost:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai - username: root - password: root + +--- # 页面配置 +spring: freemarker: charset: UTF-8 request-context-attribute: request @@ -35,10 +42,14 @@ spring: number_format: 0.########## suffix: .ftl templateLoaderPath: classpath:/templates/ + +--- # 邮件配置 +spring: mail: - from: xx@qq.com + from: xxx@qq.com host: smtp.qq.com - password: XXXXXXXX + username: xxx@qq.com + password: xxx port: 25 properties: mail: @@ -49,17 +60,23 @@ spring: starttls: enable: true required: true - username: XXXXXX@qq.com - mvc: - servlet: - load-on-startup: 0 - static-path-pattern: /static/** - resources: - static-locations: classpath:/static/ + +--- # 监控配置 +management: + health: + mail: + enabled: false + server: + base-path: /actuator + +--- # xxljob系统配置 xxl: job: - accessToken: '' + # 鉴权token + accessToken: xxl-job + # 国际化 i18n: zh_CN + # 日志清理 logretentiondays: 30 triggerpool: fast: diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/banner.txt b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/banner.txt new file mode 100644 index 000000000..a9179c6a4 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Application Version: ${ruoyi-vue-plus.version} +Spring Boot Version: ${spring-boot.version} +__ __ _ _ _ _ _ +\ \ / / | | | | | | /\ | | (_) + \ V / __ _| |______ | | ___ | |__ ______ / \ __| |_ __ ___ _ _ __ + > < \ \/ / |______| | |/ _ \| '_ \______/ /\ \ / _` | '_ ` _ \| | '_ \ + / . \ > <| | | |__| | (_) | |_) | / ____ \ (_| | | | | | | | | | | +/_/ \_\/_/\_\_| \____/ \___/|_.__/ /_/ \_\__,_|_| |_| |_|_|_| |_| From 82f1f5d0cf1b51a5d81915e842e01760f404fa74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:07:16 +0800 Subject: [PATCH 47/82] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96xxl-job-admin?= =?UTF-8?q?=E7=9B=B8=E5=85=B3pr=E4=BB=A3=E7=A0=81=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA?= =?UTF-8?q?=E4=B8=8Edocker=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/docker-compose.yml | 18 ++++++++++++++++++ pom.xml | 12 +----------- .../src/main/resources/banner.txt | 8 ++++++++ ruoyi-extend/ruoyi-xxl-job-admin/Dockerfile | 16 +++++++++++----- ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 12 ++++++++++-- .../src/main/resources/logback.xml | 17 +++++++++++------ sql/tables_xxl_job.sql | 3 --- 7 files changed, 59 insertions(+), 27 deletions(-) create mode 100644 ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index e676d5607..7e5f32fc0 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -138,12 +138,30 @@ services: environment: # 时区上海 TZ: Asia/Shanghai + volumes: + # 配置文件 + - /docker/monitor/logs/:/ruoyi/monitor/logs privileged: true restart: always networks: ruoyi_net: ipv4_address: 172.30.0.90 + ruoyi-xxl-job-admin: + image: "ruoyi/ruoyi-xxl-job-admin:3.2.0" + container_name: ruoyi-xxl-job-admin + environment: + # 时区上海 + TZ: Asia/Shanghai + volumes: + # 配置文件 + - /docker/xxljob/logs/:/ruoyi/xxljob/logs + privileged: true + restart: always + networks: + ruoyi_net: + ipv4_address: 172.30.0.92 + networks: ruoyi_net: driver: bridge diff --git a/pom.xml b/pom.xml index 9c3b5dfbe..be718ebde 100644 --- a/pom.xml +++ b/pom.xml @@ -37,6 +37,7 @@ 2.2.1 3.4.1 1.3.2 + 2.3.0 3.0.1 @@ -53,17 +54,6 @@ ruoyi 1.2.2 - - 4.1.58.Final - 2.8.6 - 3.0.7 - 5.3.3 - 1.7.30 - 1.3.2 - 2.1.4 - 8.0.23 - 2.3.0 - diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt new file mode 100644 index 000000000..abb124d8c --- /dev/null +++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/banner.txt @@ -0,0 +1,8 @@ +Application Version: ${ruoyi-vue-plus.version} +Spring Boot Version: ${spring-boot.version} + __ __ _ _ _ _ +| \/ | (_) | /\ | | (_) +| \ / | ___ _ __ _| |_ ___ _ __ ______ / \ __| |_ __ ___ _ _ __ +| |\/| |/ _ \| '_ \| | __/ _ \| '__|______/ /\ \ / _` | '_ ` _ \| | '_ \ +| | | | (_) | | | | | || (_) | | / ____ \ (_| | | | | | | | | | | +|_| |_|\___/|_| |_|_|\__\___/|_| /_/ \_\__,_|_| |_| |_|_|_| |_| diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/Dockerfile b/ruoyi-extend/ruoyi-xxl-job-admin/Dockerfile index dc1953712..f7221bdf0 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/Dockerfile +++ b/ruoyi-extend/ruoyi-xxl-job-admin/Dockerfile @@ -1,11 +1,17 @@ -FROM openjdk:8-jre-slim -MAINTAINER xuxueli +FROM anapsix/alpine-java:8_server-jre_unlimited -ENV PARAMS="" +MAINTAINER Lion Li + +RUN mkdir -p /ruoyi/xxljob +RUN mkdir -p /ruoyi/xxljob/logs + +WORKDIR /ruoyi/xxljob ENV TZ=PRC RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone -ADD target/xxl-job-admin-*.jar /app.jar +EXPOSE 9100 -ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"] \ No newline at end of file +ADD ./target/ruoyi-xxl-job-admin.jar ./app.jar + +ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] \ No newline at end of file diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index c0ff2fabe..f71190d3a 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -9,6 +9,11 @@ ruoyi-xxl-job-admin jar + + 2.1.4 + 8.0.23 + + @@ -93,11 +98,14 @@ com.spotify docker-maven-plugin - 0.4.13 + ${docker.plugin.version} - ${project.artifactId}:${project.version} + ${docker.namespace}/${project.artifactId}:${project.version} ${project.basedir} + ${docker.registry.host} + ${docker.registry.url} + ${docker.registry.url} / diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/logback.xml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/logback.xml index d4b08c240..9c2e77233 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/logback.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/logback.xml @@ -2,22 +2,27 @@ logback - + + + - %d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n + ${console.log.pattern} + utf-8 - ${log.path} + ${log.path}.log - ${log.path}.%d{yyyy-MM-dd}.zip + ${log.path}.%d{yyyy-MM-dd}.log + + 60 - %date %level [%thread] %logger{36} [%file : %line] %msg%n - + ${log.pattern} diff --git a/sql/tables_xxl_job.sql b/sql/tables_xxl_job.sql index 02e4442a2..3cd585a09 100644 --- a/sql/tables_xxl_job.sql +++ b/sql/tables_xxl_job.sql @@ -2,9 +2,6 @@ # XXL-JOB v2.3.0 # Copyright (c) 2015-present, xuxueli. -CREATE database if NOT EXISTS `xxl_job` default character set utf8mb4 collate utf8mb4_unicode_ci; -use `xxl_job`; - SET NAMES utf8mb4; CREATE TABLE `xxl_job_info` ( From aaa15b403a89490a33a45d68c8b7cfa34d87b175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:22:45 +0800 Subject: [PATCH 48/82] =?UTF-8?q?add=20[=E9=87=8D=E5=A4=A7=E6=9B=B4?= =?UTF-8?q?=E6=96=B0]=E5=A2=9E=E5=8A=A0=20ruoyi-job=20=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E6=A8=A1=E5=9D=97(=E5=9F=BA=E4=BA=8Exxl-job)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 21 ++ ruoyi-admin/pom.xml | 5 + .../src/main/resources/application-dev.yml | 53 ++-- .../src/main/resources/application-prod.yml | 54 ++-- ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 1 - ruoyi-job/pom.xml | 39 +++ .../com/ruoyi/job/config/XxlJobConfig.java | 44 +++ .../config/properties/XxlJobProperties.java | 38 +++ .../com/ruoyi/job/service/SampleService.java | 254 ++++++++++++++++++ 9 files changed, 477 insertions(+), 32 deletions(-) create mode 100644 ruoyi-job/pom.xml create mode 100644 ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java create mode 100644 ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java create mode 100644 ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java diff --git a/pom.xml b/pom.xml index be718ebde..f14bbd792 100644 --- a/pom.xml +++ b/pom.xml @@ -209,6 +209,13 @@ ${lock4j.version} + + + com.xuxueli + xxl-job-core + ${xxl-job-core-version} + + com.yomahub tlog-spring-boot-configuration @@ -237,6 +244,12 @@ ${tlog.version} + + com.yomahub + tlog-xxl-job + ${tlog.version} + + com.ruoyi @@ -244,6 +257,13 @@ ${ruoyi-vue-plus.version} + + + com.ruoyi + ruoyi-job + ${ruoyi-vue-plus.version} + + com.ruoyi @@ -294,6 +314,7 @@ ruoyi-framework ruoyi-system ruoyi-quartz + ruoyi-job ruoyi-generator ruoyi-common ruoyi-demo diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 560051b1b..2567d0f14 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -47,6 +47,11 @@ ruoyi-quartz + + com.ruoyi + ruoyi-job + + com.ruoyi ruoyi-oss diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index eb6962f1c..867a1fd9d 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -1,4 +1,41 @@ -# 数据源配置 +--- # 监控配置 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + # 增加客户端开关 + enabled: true + # 设置 Spring Boot Admin Server 地址 + url: http://localhost:9090/admin + instance: + prefer-ip: true # 注册实例时,优先使用 IP + username: ruoyi + password: 123456 + +--- # xxl-job 配置 +xxl: + job: + # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。 + admin-addresses: http://localhost:9100/xxl-job-admin + # 执行器通讯TOKEN:非空时启用 + access-token: xxl-job + # 执行器配置 + executor: + # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册 + appname: xxl-job-executor + # 执行器端口号 执行器从9101开始往后写 + port: 9101 + # 执行器注册:默认IP:PORT + address: + # 执行器IP:默认自动获取IP + ip: + # 执行器运行日志文件存储磁盘路径 + logpath: ./logs/xxl-job + # 执行器日志文件保存天数:大于3生效 + logretentiondays: 30 + +--- # 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource @@ -179,17 +216,3 @@ redisson: # # 订阅模式 # subscriptionMode: "MASTER" ---- # 监控配置 -spring: - boot: - admin: - # Spring Boot Admin Client 客户端的相关配置 - client: - # 增加客户端开关 - enabled: true - # 设置 Spring Boot Admin Server 地址 - url: http://localhost:9090/admin - instance: - prefer-ip: true # 注册实例时,优先使用 IP - username: ruoyi - password: 123456 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 13a2da878..b66db3e07 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -1,4 +1,41 @@ -# 数据源配置 +--- # 监控配置 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + # 增加客户端开关 + enabled: true + # 设置 Spring Boot Admin Server 地址 + url: http://172.30.0.90:9090/admin + instance: + prefer-ip: true # 注册实例时,优先使用 IP + username: ruoyi + password: 123456 + +--- # xxl-job 配置 +xxl: + job: + # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。 + admin-addresses: http://172.30.0.92:9100/xxl-job-admin + # 执行器通讯TOKEN:非空时启用 + access-token: xxl-job + # 执行器配置 + executor: + # 执行器AppName:执行器心跳注册分组依据;为空则关闭自动注册 + appname: xxl-job-executor + # 执行器端口号 执行器从9101开始往后写 + port: 9101 + # 执行器注册:默认IP:PORT + address: + # 执行器IP:默认自动获取IP + ip: + # 执行器运行日志文件存储磁盘路径 + logpath: ./logs/xxl-job + # 执行器日志文件保存天数:大于3生效 + logretentiondays: 30 + +--- # 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource @@ -178,18 +215,3 @@ redisson: # readMode: "SLAVE" # # 订阅模式 # subscriptionMode: "MASTER" - ---- # 监控配置 -spring: - boot: - admin: - # Spring Boot Admin Client 客户端的相关配置 - client: - # 增加客户端开关 - enabled: true - # 设置 Spring Boot Admin Server 地址 - url: http://172.30.0.90:9090/admin - instance: - prefer-ip: true # 注册实例时,优先使用 IP - username: ruoyi - password: 123456 diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index f71190d3a..fe00af97d 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -75,7 +75,6 @@ com.xuxueli xxl-job-core - ${xxl-job-core-version} diff --git a/ruoyi-job/pom.xml b/ruoyi-job/pom.xml new file mode 100644 index 000000000..05a297f90 --- /dev/null +++ b/ruoyi-job/pom.xml @@ -0,0 +1,39 @@ + + + + ruoyi-vue-plus + com.ruoyi + 3.2.0 + + 4.0.0 + jar + ruoyi-job + + + 任务调度 + + + + + + + com.ruoyi + ruoyi-common + + + + + com.xuxueli + xxl-job-core + + + + com.yomahub + tlog-xxl-job + + + + + diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java b/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java new file mode 100644 index 000000000..a4e7060ce --- /dev/null +++ b/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java @@ -0,0 +1,44 @@ +package com.ruoyi.job.config; + +import com.ruoyi.job.config.properties.XxlJobProperties; +import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; +import com.yomahub.tlog.springboot.lifecircle.TLogXxljobEnhanceInit; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.context.annotation.Bean; + +/** + * xxl-job config + * + * @author Lion Li + */ +@Slf4j +@EnableConfigurationProperties(XxlJobProperties.class) +@AllArgsConstructor +public class XxlJobConfig { + + private final XxlJobProperties xxlJobProperties; + + @Bean + public XxlJobSpringExecutor xxlJobExecutor() { + log.info(">>>>>>>>>>> xxl-job config init."); + XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); + xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses()); + xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken()); + XxlJobProperties.Executor executor = xxlJobProperties.getExecutor(); + xxlJobSpringExecutor.setAppname(executor.getAppname()); + xxlJobSpringExecutor.setAddress(executor.getAddress()); + xxlJobSpringExecutor.setIp(executor.getIp()); + xxlJobSpringExecutor.setPort(executor.getPort()); + xxlJobSpringExecutor.setLogPath(executor.getLogPath()); + xxlJobSpringExecutor.setLogRetentionDays(executor.getLogRetentionDays()); + return xxlJobSpringExecutor; + } + + @Bean + public TLogXxljobEnhanceInit tLogXxljobEnhanceInit(){ + return new TLogXxljobEnhanceInit(); + } + +} \ No newline at end of file diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java b/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java new file mode 100644 index 000000000..d7b8dbe3f --- /dev/null +++ b/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java @@ -0,0 +1,38 @@ +package com.ruoyi.job.config.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; + +/** + * xxljob配置类 + * + * @author Lion Li + */ +@Data +@ConfigurationProperties(prefix = "xxl.job") +public class XxlJobProperties { + + private String adminAddresses; + + private String accessToken; + + private Executor executor; + + @Data + @NoArgsConstructor + public static class Executor { + + private String appname; + + private String address; + + private String ip; + + private int port; + + private String logPath; + + private int logRetentionDays; + } +} diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java b/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java new file mode 100644 index 000000000..20afa2e64 --- /dev/null +++ b/ruoyi-job/src/main/java/com/ruoyi/job/service/SampleService.java @@ -0,0 +1,254 @@ +package com.ruoyi.job.service; + +import com.xxl.job.core.context.XxlJobHelper; +import com.xxl.job.core.handler.annotation.XxlJob; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +/** + * XxlJob开发示例(Bean模式) + *

    + * 开发步骤: + * 1、任务开发:在Spring Bean实例中,开发Job方法; + * 2、注解配置:为Job方法添加注解 "@XxlJob(value="自定义jobhandler名称", init = "JobHandler初始化方法", destroy = "JobHandler销毁方法")",注解value值对应的是调度中心新建任务的JobHandler属性的值。 + * 3、执行日志:需要通过 "XxlJobHelper.log" 打印执行日志; + * 4、任务结果:默认任务结果为 "成功" 状态,不需要主动设置;如有诉求,比如设置任务结果为失败,可以通过 "XxlJobHelper.handleFail/handleSuccess" 自主设置任务结果; + * + * @author xuxueli 2019-12-11 21:52:51 + */ +@Slf4j +@Service +public class SampleService { + + + /** + * 1、简单任务示例(Bean模式) + */ + @XxlJob("demoJobHandler") + public void demoJobHandler() throws Exception { + XxlJobHelper.log("XXL-JOB, Hello World."); + + for (int i = 0; i < 5; i++) { + XxlJobHelper.log("beat at:" + i); + TimeUnit.SECONDS.sleep(2); + } + // default success + } + + + /** + * 2、分片广播任务 + */ + @XxlJob("shardingJobHandler") + public void shardingJobHandler() throws Exception { + + // 分片参数 + int shardIndex = XxlJobHelper.getShardIndex(); + int shardTotal = XxlJobHelper.getShardTotal(); + + XxlJobHelper.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardIndex, shardTotal); + + // 业务逻辑 + for (int i = 0; i < shardTotal; i++) { + if (i == shardIndex) { + XxlJobHelper.log("第 {} 片, 命中分片开始处理", i); + } else { + XxlJobHelper.log("第 {} 片, 忽略", i); + } + } + + } + + + /** + * 3、命令行任务 + */ + @XxlJob("commandJobHandler") + public void commandJobHandler() throws Exception { + String command = XxlJobHelper.getJobParam(); + int exitValue = -1; + + BufferedReader bufferedReader = null; + try { + // command process + ProcessBuilder processBuilder = new ProcessBuilder(); + processBuilder.command(command); + processBuilder.redirectErrorStream(true); + + Process process = processBuilder.start(); + //Process process = Runtime.getRuntime().exec(command); + + BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream()); + bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream)); + + // command log + String line; + while ((line = bufferedReader.readLine()) != null) { + XxlJobHelper.log(line); + } + + // command exit + process.waitFor(); + exitValue = process.exitValue(); + } catch (Exception e) { + XxlJobHelper.log(e); + } finally { + if (bufferedReader != null) { + bufferedReader.close(); + } + } + + if (exitValue == 0) { + // default success + } else { + XxlJobHelper.handleFail("command exit value(" + exitValue + ") is failed"); + } + + } + + + /** + * 4、跨平台Http任务 + * 参数示例: + * "url: http://www.baidu.com\n" + + * "method: get\n" + + * "data: content\n"; + */ + @XxlJob("httpJobHandler") + public void httpJobHandler() throws Exception { + + // param parse + String param = XxlJobHelper.getJobParam(); + if (param == null || param.trim().length() == 0) { + XxlJobHelper.log("param[" + param + "] invalid."); + + XxlJobHelper.handleFail(); + return; + } + + String[] httpParams = param.split("\n"); + String url = null; + String method = null; + String data = null; + for (String httpParam : httpParams) { + if (httpParam.startsWith("url:")) { + url = httpParam.substring(httpParam.indexOf("url:") + 4).trim(); + } + if (httpParam.startsWith("method:")) { + method = httpParam.substring(httpParam.indexOf("method:") + 7).trim().toUpperCase(); + } + if (httpParam.startsWith("data:")) { + data = httpParam.substring(httpParam.indexOf("data:") + 5).trim(); + } + } + + // param valid + if (url == null || url.trim().length() == 0) { + XxlJobHelper.log("url[" + url + "] invalid."); + + XxlJobHelper.handleFail(); + return; + } + if (method == null || !Arrays.asList("GET", "POST").contains(method)) { + XxlJobHelper.log("method[" + method + "] invalid."); + + XxlJobHelper.handleFail(); + return; + } + boolean isPostMethod = method.equals("POST"); + + // request + HttpURLConnection connection = null; + BufferedReader bufferedReader = null; + try { + // connection + URL realUrl = new URL(url); + connection = (HttpURLConnection) realUrl.openConnection(); + + // connection setting + connection.setRequestMethod(method); + connection.setDoOutput(isPostMethod); + connection.setDoInput(true); + connection.setUseCaches(false); + connection.setReadTimeout(5 * 1000); + connection.setConnectTimeout(3 * 1000); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); + connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); + + // do connection + connection.connect(); + + // data + if (isPostMethod && data != null && data.trim().length() > 0) { + DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); + dataOutputStream.write(data.getBytes("UTF-8")); + dataOutputStream.flush(); + dataOutputStream.close(); + } + + // valid StatusCode + int statusCode = connection.getResponseCode(); + if (statusCode != 200) { + throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid."); + } + + // result + bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")); + StringBuilder result = new StringBuilder(); + String line; + while ((line = bufferedReader.readLine()) != null) { + result.append(line); + } + String responseMsg = result.toString(); + + XxlJobHelper.log(responseMsg); + + return; + } catch (Exception e) { + XxlJobHelper.log(e); + + XxlJobHelper.handleFail(); + return; + } finally { + try { + if (bufferedReader != null) { + bufferedReader.close(); + } + if (connection != null) { + connection.disconnect(); + } + } catch (Exception e2) { + XxlJobHelper.log(e2); + } + } + + } + + /** + * 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑; + */ + @XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy") + public void demoJobHandler2() throws Exception { + XxlJobHelper.log("XXL-JOB, Hello World."); + } + + public void init() { + log.info("init"); + } + + public void destroy() { + log.info("destory"); + } + + +} From eed4e09282d3f586cfb54637753f7873941c6c14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:27:05 +0800 Subject: [PATCH 49/82] =?UTF-8?q?update=20=E4=BB=8E=E6=80=BB=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E6=A8=A1=E5=9D=97=E5=89=94=E9=99=A4=20ruoyi-quartz=20?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=87=B3=20ruoyi-job?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 2567d0f14..b203e6eb4 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -42,10 +42,10 @@ - - com.ruoyi - ruoyi-quartz - + + + + com.ruoyi From 78cd6f36ef6c58feb95cc39049f1a6336f38b410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:32:53 +0800 Subject: [PATCH 50/82] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20ruoyi-xxl-job-?= =?UTF-8?q?admin=20=E5=A4=9A=E7=8E=AF=E5=A2=83=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 36 +++++++++++++ .../src/main/resources/application-prod.yml | 36 +++++++++++++ .../src/main/resources/application.yml | 53 ++++--------------- 3 files changed, 82 insertions(+), 43 deletions(-) create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml new file mode 100644 index 000000000..065b34262 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-dev.yml @@ -0,0 +1,36 @@ +--- # 数据库配置 +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai + username: root + password: root + hikari: + auto-commit: true + connection-test-query: SELECT 1 + connection-timeout: 10000 + idle-timeout: 30000 + max-lifetime: 900000 + maximum-pool-size: 30 + minimum-idle: 10 + pool-name: HikariCP + validation-timeout: 1000 + +--- # 邮件配置 +spring: + mail: + from: xxx@qq.com + host: smtp.qq.com + username: xxx@qq.com + password: xxx + port: 25 + properties: + mail: + smtp: + auth: true + socketFactory: + class: javax.net.ssl.SSLSocketFactory + starttls: + enable: true + required: true diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml new file mode 100644 index 000000000..774d7f81c --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application-prod.yml @@ -0,0 +1,36 @@ +--- # 数据库配置 +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://172.30.0.92:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai + username: root + password: root + hikari: + auto-commit: true + connection-test-query: SELECT 1 + connection-timeout: 10000 + idle-timeout: 30000 + max-lifetime: 900000 + maximum-pool-size: 30 + minimum-idle: 10 + pool-name: HikariCP + validation-timeout: 1000 + +--- # 邮件配置 +spring: + mail: + from: xxx@qq.com + host: smtp.qq.com + username: xxx@qq.com + password: xxx + port: 25 + properties: + mail: + smtp: + auth: true + socketFactory: + class: javax.net.ssl.SSLSocketFactory + starttls: + enable: true + required: true diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml index e4319110a..edafdb01b 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/application.yml @@ -4,34 +4,19 @@ server: servlet: context-path: /xxl-job-admin spring: - mvc: - servlet: - load-on-startup: 0 - static-path-pattern: /static/** - web: - resources: - static-locations: classpath:/static/ + profiles: + active: @profiles.active@ + mvc: + servlet: + load-on-startup: 0 + static-path-pattern: /static/** + web: + resources: + static-locations: classpath:/static/ ---- # 数据库配置 +--- # mybatis 配置 mybatis: mapper-locations: classpath:/mybatis-mapper/*Mapper.xml -spring: - datasource: - type: com.zaxxer.hikari.HikariDataSource - driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai - username: root - password: root - hikari: - auto-commit: true - connection-test-query: SELECT 1 - connection-timeout: 10000 - idle-timeout: 30000 - max-lifetime: 900000 - maximum-pool-size: 30 - minimum-idle: 10 - pool-name: HikariCP - validation-timeout: 1000 --- # 页面配置 spring: @@ -43,24 +28,6 @@ spring: suffix: .ftl templateLoaderPath: classpath:/templates/ ---- # 邮件配置 -spring: - mail: - from: xxx@qq.com - host: smtp.qq.com - username: xxx@qq.com - password: xxx - port: 25 - properties: - mail: - smtp: - auth: true - socketFactory: - class: javax.net.ssl.SSLSocketFactory - starttls: - enable: true - required: true - --- # 监控配置 management: health: From 83922c5737fb83388bc7950bc68f4e55d1a3ac0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:44:10 +0800 Subject: [PATCH 51/82] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E5=85=B3?= =?UTF-8?q?=E4=BA=8Exxl-job=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index fad886f41..3d69f9db2 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼 | 分布式锁 | Lock4j | [Lock4j官网](https://gitee.com/baomidou/lock4j) | 注解锁、工具锁 多种多样 | | 分布式幂等 | Lock4j | [Lock4j文档](https://gitee.com/baomidou/lock4j) | 基于分布式锁实现 | | 分布式日志 | TLog | [TLog文档](https://yomahub.com/tlog/docs) | 支持跟踪链路日志记录、性能分析、链路排查 | +| 分布式任务调度 | Xxl-Job | [Xxl-Job官网](https://www.xuxueli.com/xxl-job/) | 高性能 高可靠 易扩展 | | 文件存储 | Minio | [Minio文档](https://docs.min.io/) | 本地存储 | | 文件存储 | 七牛、阿里、腾讯 | [OSS使用文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages?sort_id=4359146&doc_id=1469725) | 云存储 | | 监控框架 | SpringBoot-Admin | [SpringBoot-Admin文档](https://codecentric.github.io/spring-boot-admin/current/) | 全方位服务监控 | From b6443e0c01553ced0592e6e6cec7464e9b07b3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 13:53:36 +0800 Subject: [PATCH 52/82] =?UTF-8?q?update=20quartz=E6=94=B9=E4=B8=BA?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E4=B8=80=E4=B8=AA=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- ruoyi-admin/pom.xml | 2 +- .../main/java/com/ruoyi/common/constant/ScheduleConstants.java | 2 +- .../common/core/mybatisplus/cache/MybatisPlusRedisCache.java | 2 +- .../main/java/com/ruoyi/common/exception/job/TaskException.java | 2 +- .../src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java | 2 +- .../main/java/com/ruoyi/quartz/controller/SysJobController.java | 2 +- .../java/com/ruoyi/quartz/controller/SysJobLogController.java | 2 +- ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java | 2 +- .../src/main/java/com/ruoyi/quartz/domain/SysJobLog.java | 2 +- .../src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java | 2 +- .../src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java | 2 +- .../main/java/com/ruoyi/quartz/service/ISysJobLogService.java | 2 +- .../src/main/java/com/ruoyi/quartz/service/ISysJobService.java | 2 +- .../com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java | 2 +- .../java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java | 2 +- ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java | 2 +- .../src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java | 2 +- ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java | 2 +- .../src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java | 2 +- .../ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java | 2 +- .../src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java | 2 +- .../src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java | 2 +- 23 files changed, 23 insertions(+), 23 deletions(-) diff --git a/pom.xml b/pom.xml index f14bbd792..63135fd79 100644 --- a/pom.xml +++ b/pom.xml @@ -250,7 +250,7 @@ ${tlog.version} - + com.ruoyi ruoyi-quartz diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index b203e6eb4..966e0655f 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -41,7 +41,7 @@ ruoyi-system - + 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 ba4986cfe..ec430c26a 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 @@ -3,7 +3,7 @@ package com.ruoyi.common.constant; /** * 任务调度通用常量 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public class ScheduleConstants diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java index 8f7379fcd..c790c663b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java @@ -18,7 +18,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock; * 使用方法 配置文件开启 mybatis-plus 二级缓存 * 在 XxxMapper.java 类上添加注解 @CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) * - * @deprecated 3.5.0删除 推荐使用spirng-cache + * @deprecated 3.4.0删除 推荐使用spirng-cache * @author Lion Li */ @Slf4j 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 adba5a464..59ea3a687 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 @@ -3,7 +3,7 @@ package com.ruoyi.common.exception.job; /** * 计划策略异常 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public class TaskException extends Exception diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java index 61712e5a3..c5fa2ec0f 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -5,7 +5,7 @@ import org.springframework.context.annotation.Configuration; /** * 定时任务配置 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author Lion Li */ @Deprecated diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java index 4d895a476..58efca748 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java @@ -23,7 +23,7 @@ import java.util.List; /** * 调度任务信息操作处理 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ @RestController diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java index 280d6bdb1..f568d65d1 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java @@ -18,7 +18,7 @@ import java.util.List; /** * 调度日志操作处理 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ @RestController diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java index fa841598f..ee15e552e 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java @@ -23,7 +23,7 @@ import java.util.Map; /** * 定时任务调度表 sys_job * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java index 5e09c8018..2ea63df5c 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java @@ -16,7 +16,7 @@ import java.util.Map; /** * 定时任务调度日志表 sys_job_log * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java index fd1f15005..0bffa118c 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.quartz.domain.SysJobLog; /** * 调度任务日志信息 数据层 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public interface SysJobLogMapper extends BaseMapperPlus { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java index f96f5d2c8..13f2da7c7 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java @@ -6,7 +6,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 调度任务信息 数据层 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public interface SysJobMapper extends BaseMapperPlus { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java index 4b934808c..ff8451acc 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java @@ -9,7 +9,7 @@ import java.util.List; /** * 定时任务调度日志信息信息 服务层 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public interface ISysJobLogService extends IService { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java index bfeca5e03..cbe4621fd 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java @@ -11,7 +11,7 @@ import java.util.List; /** * 定时任务调度信息信息 服务层 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public interface ISysJobService extends IService { diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java index e0a10044c..76edb49bb 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java @@ -17,7 +17,7 @@ import java.util.Map; /** * 定时任务调度日志信息 服务层 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ @Service 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 3cb7d78a7..6962cf1db 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 @@ -26,7 +26,7 @@ import java.util.List; /** * 定时任务调度信息 服务层 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ @Service diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java index a387e9622..7fd55c5d9 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java @@ -7,7 +7,7 @@ import org.springframework.stereotype.Component; /** * 定时任务调度测试 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ @Component("ryTask") diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java index b083a817f..1705433f3 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java @@ -20,7 +20,7 @@ import java.util.Date; /** * 抽象quartz调用 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public abstract class AbstractQuartzJob implements Job diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java index 4b4168093..2253af18c 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java @@ -8,7 +8,7 @@ import java.util.Date; /** * cron表达式工具类 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi * */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java index c1f89d37d..ed15d1f7c 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java @@ -11,7 +11,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 任务执行工具 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi */ public class JobInvokeUtil diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java index f29820108..fc0ce7b9f 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java @@ -7,7 +7,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务处理(禁止并发执行) * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi * */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java index f9e4fee85..404c26634 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java @@ -6,7 +6,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务处理(允许并发执行) * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi * */ diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java index 8607fdfef..182d1d698 100644 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -18,7 +18,7 @@ import com.ruoyi.quartz.domain.SysJob; /** * 定时任务工具类 * - * @deprecated 3.5.0删除 迁移至xxl-job + * @deprecated 3.4.0删除 迁移至xxl-job * @author ruoyi * */ From c0eb3c53c138a3db5c477377b83f9670599b95ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 14:18:26 +0800 Subject: [PATCH 53/82] =?UTF-8?q?update=20swagger=E7=BB=84=20=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 4d2da7514..0b000c78a 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -248,12 +248,12 @@ swagger: email: crazylionli@163.com url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus groups: - - name: 代码生成模块 - basePackage: com.ruoyi.generator - - name: 演示案例 + - name: 1.演示案例 basePackage: com.ruoyi.demo - - name: 系统模块 + - name: 2.系统模块 basePackage: com.ruoyi.web + - name: 3.代码生成模块 + basePackage: com.ruoyi.generator # 防止XSS攻击 xss: From e04938666cb44a52330c92e2630c6481556b3418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 14:37:20 +0800 Subject: [PATCH 54/82] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20xxl-admin=20?= =?UTF-8?q?=E9=83=A8=E5=88=86=E6=96=87=E4=BB=B6=E8=A2=AB=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 - .../static/adminlte/dist/css/AdminLTE.min.css | 8 ++++++++ .../adminlte/dist/css/skins/_all-skins.min.css | 1 + .../static/adminlte/dist/js/adminlte.min.js | 13 +++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css create mode 100644 ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js diff --git a/.gitignore b/.gitignore index 2c0e049aa..4fbb2fe73 100644 --- a/.gitignore +++ b/.gitignore @@ -29,7 +29,6 @@ target/ nbproject/private/ build/* nbbuild/ -dist/ nbdist/ .nb-gradle/ diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css new file mode 100644 index 000000000..e5f8af67e --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/AdminLTE.min.css @@ -0,0 +1,8 @@ +/*! + * AdminLTE v2.4.18 + * + * Author: Colorlib + * Support: + * Repository: git://github.com/ColorlibHQ/AdminLTE.git + * License: MIT + */html,body{height:100%}.layout-boxed html,.layout-boxed body{height:100%}body{font-family:'Source Sans Pro','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;overflow-x:hidden;overflow-y:auto}.wrapper{height:100%;position:relative;overflow-x:hidden;overflow-y:auto}.wrapper:before,.wrapper:after{content:" ";display:table}.wrapper:after{clear:both}.layout-boxed .wrapper{max-width:1250px;margin:0 auto;min-height:100%;box-shadow:0 0 8px rgba(0,0,0,0.5);position:relative}.layout-boxed{background-color:#f9fafc}.content-wrapper,.main-footer{-webkit-transition:-webkit-transform .3s ease-in-out,margin .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,margin .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,margin .3s ease-in-out;transition:transform .3s ease-in-out,margin .3s ease-in-out;margin-left:230px;z-index:820}.layout-top-nav .content-wrapper,.layout-top-nav .main-footer{margin-left:0}@media (max-width:767px){.content-wrapper,.main-footer{margin-left:0}}@media (min-width:768px){.sidebar-collapse .content-wrapper,.sidebar-collapse .main-footer{margin-left:0}}@media (max-width:767px){.sidebar-open .content-wrapper,.sidebar-open .main-footer{-webkit-transform:translate(230px, 0);-ms-transform:translate(230px, 0);-o-transform:translate(230px, 0);transform:translate(230px, 0)}}.content-wrapper{min-height:calc(100vh - 101px);background-color:#ecf0f5;z-index:800}@media (max-width:767px){.content-wrapper{min-height:calc(100vh - 151px)}}.main-footer{background:#fff;padding:15px;color:#444;border-top:1px solid #d2d6de}.fixed .main-header,.fixed .main-sidebar,.fixed .left-side{position:fixed}.fixed .main-header{top:0;right:0;left:0}.fixed .content-wrapper,.fixed .right-side{padding-top:50px}@media (max-width:767px){.fixed .content-wrapper,.fixed .right-side{padding-top:100px}}.fixed.layout-boxed .wrapper{max-width:100%}.fixed .wrapper{overflow:hidden}.hold-transition .content-wrapper,.hold-transition .right-side,.hold-transition .main-footer,.hold-transition .main-sidebar,.hold-transition .left-side,.hold-transition .main-header .navbar,.hold-transition .main-header .logo,.hold-transition .menu-open .fa-angle-left{-webkit-transition:none;-o-transition:none;transition:none}.content{min-height:250px;padding:15px;margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:'Source Sans Pro',sans-serif}a{color:#3c8dbc}a:hover,a:active,a:focus{outline:none;text-decoration:none;color:#72afd2}.page-header{margin:10px 0 20px 0;font-size:22px}.page-header>small{color:#666;display:block;margin-top:5px}.main-header{position:relative;max-height:100px;z-index:1030}.main-header .navbar{-webkit-transition:margin-left .3s ease-in-out;-o-transition:margin-left .3s ease-in-out;transition:margin-left .3s ease-in-out;margin-bottom:0;margin-left:230px;border:none;min-height:50px;border-radius:0}.layout-top-nav .main-header .navbar{margin-left:0}.main-header #navbar-search-input.form-control{background:rgba(255,255,255,0.2);border-color:transparent}.main-header #navbar-search-input.form-control:focus,.main-header #navbar-search-input.form-control:active{border-color:rgba(0,0,0,0.1);background:rgba(255,255,255,0.9)}.main-header #navbar-search-input.form-control::-moz-placeholder{color:#ccc;opacity:1}.main-header #navbar-search-input.form-control:-ms-input-placeholder{color:#ccc}.main-header #navbar-search-input.form-control::-webkit-input-placeholder{color:#ccc}.main-header .navbar-custom-menu,.main-header .navbar-right{float:right}@media (max-width:991px){.main-header .navbar-custom-menu a,.main-header .navbar-right a{color:inherit;background:transparent}}@media (max-width:767px){.main-header .navbar-right{float:none}.navbar-collapse .main-header .navbar-right{margin:7.5px -15px}.main-header .navbar-right>li{color:inherit;border:0}}.main-header .sidebar-toggle{float:left;background-color:transparent;background-image:none;padding:15px 15px;font-family:fontAwesome}.main-header .sidebar-toggle:before{content:"\f0c9"}.main-header .sidebar-toggle:hover{color:#fff}.main-header .sidebar-toggle:focus,.main-header .sidebar-toggle:active{background:transparent}.main-header .sidebar-toggle.fa5{font-family:"Font Awesome\ 5 Free"}.main-header .sidebar-toggle.fa5:before{content:"\f0c9";font-weight:900}.main-header .sidebar-toggle .icon-bar{display:none}.main-header .navbar .nav>li.user>a>.fa,.main-header .navbar .nav>li.user>a>.glyphicon,.main-header .navbar .nav>li.user>a>.ion{margin-right:5px}.main-header .navbar .nav>li>a>.label{position:absolute;top:9px;right:7px;text-align:center;font-size:9px;padding:2px 3px;line-height:.9}.main-header .logo{-webkit-transition:width .3s ease-in-out;-o-transition:width .3s ease-in-out;transition:width .3s ease-in-out;display:block;float:left;height:50px;font-size:20px;line-height:50px;text-align:center;width:230px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;padding:0 15px;font-weight:300;overflow:hidden}.main-header .logo img{padding:4px;object-fit:contain;margin:0 auto}.main-header .logo .logo-lg{display:block}.main-header .logo .logo-lg img{max-width:200px;max-height:50px}.main-header .logo .logo-lg .brandlogo-image{margin-top:8px;margin-right:10px;margin-left:-5px}.main-header .logo .logo-mini{display:none}.main-header .logo .logo-mini img{max-width:50px;max-height:50px}.main-header .logo .logo-mini .brandlogo-image{margin-top:8px;margin-right:10px;margin-left:10px}.main-header .logo .brandlogo-image{float:left;height:34px;width:auto}.main-header .navbar-brand{color:#fff}.content-header{position:relative;padding:15px 15px 0 15px}.content-header>h1{margin:0;font-size:24px}.content-header>h1>small{font-size:15px;display:inline-block;padding-left:4px;font-weight:300}.content-header>.breadcrumb{float:right;background:transparent;margin-top:0;margin-bottom:0;font-size:12px;padding:7px 5px;position:absolute;top:15px;right:10px;border-radius:2px}.content-header>.breadcrumb>li>a{color:#444;text-decoration:none;display:inline-block}.content-header>.breadcrumb>li>a>.fa,.content-header>.breadcrumb>li>a>.glyphicon,.content-header>.breadcrumb>li>a>.ion{margin-right:5px}.content-header>.breadcrumb>li+li:before{content:'>\00a0'}@media (max-width:991px){.content-header>.breadcrumb{position:relative;margin-top:5px;top:0;right:0;float:none;background:#d2d6de;padding-left:10px}.content-header>.breadcrumb li:before{color:#97a0b3}}.navbar-toggle{color:#fff;border:0;margin:0;padding:15px 15px}@media (max-width:991px){.navbar-custom-menu .navbar-nav>li{float:left}.navbar-custom-menu .navbar-nav{margin:0;float:left}.navbar-custom-menu .navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px}}@media (max-width:767px){.main-header{position:relative}.main-header .logo,.main-header .navbar{width:100%;float:none}.main-header .navbar{margin:0}.main-header .navbar-custom-menu{float:right}}@media (max-width:991px){.navbar-collapse.pull-left{float:none !important}.navbar-collapse.pull-left+.navbar-custom-menu{display:block;position:absolute;top:0;right:40px}}.main-sidebar{position:absolute;top:0;left:0;padding-top:50px;min-height:100%;width:230px;z-index:810;-webkit-transition:-webkit-transform .3s ease-in-out,width .3s ease-in-out;-moz-transition:-moz-transform .3s ease-in-out,width .3s ease-in-out;-o-transition:-o-transform .3s ease-in-out,width .3s ease-in-out;transition:transform .3s ease-in-out,width .3s ease-in-out}@media (max-width:767px){.main-sidebar{padding-top:100px}}@media (max-width:767px){.main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (min-width:768px){.sidebar-collapse .main-sidebar{-webkit-transform:translate(-230px, 0);-ms-transform:translate(-230px, 0);-o-transform:translate(-230px, 0);transform:translate(-230px, 0)}}@media (max-width:767px){.sidebar-open .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}}.sidebar{padding-bottom:10px}.sidebar-form input:focus{border-color:transparent}.user-panel{position:relative;width:100%;padding:10px;overflow:hidden}.user-panel:before,.user-panel:after{content:" ";display:table}.user-panel:after{clear:both}.user-panel>.image>img{width:100%;max-width:45px;height:auto}.user-panel>.info{padding:5px 5px 5px 15px;line-height:1;position:absolute;left:55px}.user-panel>.info>p{font-weight:600;margin-bottom:9px}.user-panel>.info>a{text-decoration:none;padding-right:5px;margin-top:3px;font-size:11px}.user-panel>.info>a>.fa,.user-panel>.info>a>.ion,.user-panel>.info>a>.glyphicon{margin-right:3px}.sidebar-menu{list-style:none;margin:0;padding:0}.sidebar-menu>li{position:relative;margin:0;padding:0}.sidebar-menu>li>a{padding:12px 5px 12px 15px;display:block}.sidebar-menu>li>a>.fa,.sidebar-menu>li>a>.glyphicon,.sidebar-menu>li>a>.ion{width:20px}.sidebar-menu>li .label,.sidebar-menu>li .badge{margin-right:5px}.sidebar-menu>li .badge{margin-top:3px}.sidebar-menu li.header{padding:10px 25px 10px 15px;font-size:12px}.sidebar-menu li>a>.fa-angle-left,.sidebar-menu li>a>.pull-right-container>.fa-angle-left{width:auto;height:auto;padding:0;margin-right:10px;-webkit-transition:transform .5s ease;-o-transition:transform .5s ease;transition:transform .5s ease}.sidebar-menu li>a>.fa-angle-left{position:absolute;top:50%;right:10px;margin-top:-8px}.sidebar-menu .menu-open>a>.fa-angle-left,.sidebar-menu .menu-open>a>.pull-right-container>.fa-angle-left{-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);transform:rotate(-90deg)}.sidebar-menu .active>.treeview-menu{display:block}@media (min-width:768px){.sidebar-mini.sidebar-collapse .content-wrapper,.sidebar-mini.sidebar-collapse .right-side,.sidebar-mini.sidebar-collapse .main-footer{margin-left:50px !important;z-index:840}.sidebar-mini.sidebar-collapse .main-sidebar{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);width:50px !important;z-index:850}.sidebar-mini.sidebar-collapse .sidebar-menu>li{position:relative}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a{margin-right:0}.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span{border-top-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li:not(.treeview)>a>span{border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{padding-top:5px;padding-bottom:5px;border-bottom-right-radius:4px}.sidebar-mini.sidebar-collapse .main-sidebar .user-panel>.info,.sidebar-mini.sidebar-collapse .sidebar-form,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span,.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu>li>a>span>.pull-right,.sidebar-mini.sidebar-collapse .sidebar-menu li.header{display:none !important;-webkit-transform:translateZ(0)}.sidebar-mini.sidebar-collapse .main-header .logo{width:50px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-mini{display:block;margin-left:-15px;margin-right:-15px;font-size:18px}.sidebar-mini.sidebar-collapse .main-header .logo>.logo-lg{display:none}.sidebar-mini.sidebar-collapse .main-header .navbar{margin-left:50px}}@media (min-width:768px){.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span:not(.pull-right),.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{display:block !important;position:absolute;width:180px;left:50px}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>span{top:0;margin-left:-3px;padding:12px 5px 12px 20px;background-color:inherit}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container{position:relative !important;float:right;width:auto !important;left:180px !important;top:-22px !important;z-index:900}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>a>.pull-right-container>.label:not(:first-of-type){display:none}.sidebar-mini:not(.sidebar-mini-expand-feature).sidebar-collapse .sidebar-menu>li:hover>.treeview-menu{top:44px;margin-left:0}}.sidebar-expanded-on-hover .main-footer,.sidebar-expanded-on-hover .content-wrapper{margin-left:50px}.sidebar-expanded-on-hover .main-sidebar{box-shadow:3px 0 8px rgba(0,0,0,0.125)}.sidebar-menu,.main-sidebar .user-panel,.sidebar-menu>li.header{white-space:nowrap;overflow:hidden}.sidebar-menu:hover{overflow:visible}.sidebar-form,.sidebar-menu>li.header{overflow:hidden;text-overflow:clip}.sidebar-menu li>a{position:relative}.sidebar-menu li>a>.pull-right-container{position:absolute;right:10px;top:50%;margin-top:-7px}.control-sidebar-bg{position:fixed;z-index:1000;bottom:0}.control-sidebar-bg,.control-sidebar{top:0;right:-230px;width:230px;-webkit-transition:right .3s ease-in-out;-o-transition:right .3s ease-in-out;transition:right .3s ease-in-out}.control-sidebar{position:absolute;padding-top:50px;z-index:1010}@media (max-width:767px){.control-sidebar{padding-top:100px}}.control-sidebar>.tab-content{padding:10px 15px}.control-sidebar.control-sidebar-open,.control-sidebar.control-sidebar-open+.control-sidebar-bg{right:0}.control-sidebar-hold-transition .control-sidebar-bg,.control-sidebar-hold-transition .control-sidebar,.control-sidebar-hold-transition .content-wrapper{transition:none}.control-sidebar-open .control-sidebar-bg,.control-sidebar-open .control-sidebar{right:0}@media (min-width:768px){.control-sidebar-open .content-wrapper,.control-sidebar-open .right-side,.control-sidebar-open .main-footer{margin-right:230px}}.fixed .control-sidebar{position:fixed;height:100%;overflow-y:auto;padding-bottom:50px}.nav-tabs.control-sidebar-tabs>li:first-of-type>a,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:hover,.nav-tabs.control-sidebar-tabs>li:first-of-type>a:focus{border-left-width:0}.nav-tabs.control-sidebar-tabs>li>a{border-radius:0}.nav-tabs.control-sidebar-tabs>li>a,.nav-tabs.control-sidebar-tabs>li>a:hover{border-top:none;border-right:none;border-left:1px solid transparent;border-bottom:1px solid transparent}.nav-tabs.control-sidebar-tabs>li>a .icon{font-size:16px}.nav-tabs.control-sidebar-tabs>li.active>a,.nav-tabs.control-sidebar-tabs>li.active>a:hover,.nav-tabs.control-sidebar-tabs>li.active>a:focus,.nav-tabs.control-sidebar-tabs>li.active>a:active{border-top:none;border-right:none;border-bottom:none}@media (max-width:768px){.nav-tabs.control-sidebar-tabs{display:table}.nav-tabs.control-sidebar-tabs>li{display:table-cell}}.control-sidebar-heading{font-weight:400;font-size:16px;padding:10px 0;margin-bottom:10px}.control-sidebar-subheading{display:block;font-weight:400;font-size:14px}.control-sidebar-menu{list-style:none;padding:0;margin:0 -15px}.control-sidebar-menu>li>a{display:block;padding:10px 15px}.control-sidebar-menu>li>a:before,.control-sidebar-menu>li>a:after{content:" ";display:table}.control-sidebar-menu>li>a:after{clear:both}.control-sidebar-menu>li>a>.control-sidebar-subheading{margin-top:0}.control-sidebar-menu .menu-icon{float:left;width:35px;height:35px;border-radius:50%;text-align:center;line-height:35px}.control-sidebar-menu .menu-info{margin-left:45px;margin-top:3px}.control-sidebar-menu .menu-info>.control-sidebar-subheading{margin:0}.control-sidebar-menu .menu-info>p{margin:0;font-size:11px}.control-sidebar-menu .progress{margin:0}.control-sidebar-dark{color:#b8c7ce}.control-sidebar-dark,.control-sidebar-dark+.control-sidebar-bg{background:#222d32}.control-sidebar-dark .nav-tabs.control-sidebar-tabs{border-bottom:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a{background:#181f23;color:#b8c7ce}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#141a1d;border-bottom-color:#141a1d}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:active{background:#1c2529}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li>a:hover{color:#fff}.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-dark .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#222d32;color:#fff}.control-sidebar-dark .control-sidebar-heading,.control-sidebar-dark .control-sidebar-subheading{color:#fff}.control-sidebar-dark .control-sidebar-menu>li>a:hover{background:#1e282c}.control-sidebar-dark .control-sidebar-menu>li>a .menu-info>p{color:#b8c7ce}.control-sidebar-light{color:#5e5e5e}.control-sidebar-light,.control-sidebar-light+.control-sidebar-bg{background:#f9fafc;border-left:1px solid #d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs{border-bottom:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a{background:#e8ecf4;color:#444}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus{border-left-color:#d2d6de;border-bottom-color:#d2d6de}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li>a:active{background:#eff1f7}.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:hover,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:focus,.control-sidebar-light .nav-tabs.control-sidebar-tabs>li.active>a:active{background:#f9fafc;color:#111}.control-sidebar-light .control-sidebar-heading,.control-sidebar-light .control-sidebar-subheading{color:#111}.control-sidebar-light .control-sidebar-menu{margin-left:-14px}.control-sidebar-light .control-sidebar-menu>li>a:hover{background:#f4f4f5}.control-sidebar-light .control-sidebar-menu>li>a .menu-info>p{color:#5e5e5e}.dropdown-menu{box-shadow:none;border-color:#eee}.dropdown-menu>li>a{color:#777}.dropdown-menu>li>a>.glyphicon,.dropdown-menu>li>a>.fa,.dropdown-menu>li>a>.ion{margin-right:10px}.dropdown-menu>li>a:hover{background-color:#e1e3e9;color:#333}.dropdown-menu>.divider{background-color:#eee}.navbar-nav>.notifications-menu>.dropdown-menu,.navbar-nav>.messages-menu>.dropdown-menu,.navbar-nav>.tasks-menu>.dropdown-menu{width:280px;padding:0 0 0 0;margin:0;top:100%}.navbar-nav>.notifications-menu>.dropdown-menu>li,.navbar-nav>.messages-menu>.dropdown-menu>li,.navbar-nav>.tasks-menu>.dropdown-menu>li{position:relative}.navbar-nav>.notifications-menu>.dropdown-menu>li.header,.navbar-nav>.messages-menu>.dropdown-menu>li.header,.navbar-nav>.tasks-menu>.dropdown-menu>li.header{border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0;background-color:#ffffff;padding:7px 10px;border-bottom:1px solid #f4f4f4;color:#444444;font-size:14px}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px;font-size:12px;background-color:#fff;padding:7px 10px;border-bottom:1px solid #eeeeee;color:#444 !important;text-align:center}@media (max-width:991px){.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a{background:#fff !important;color:#444 !important}}.navbar-nav>.notifications-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li.footer>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li.footer>a:hover{text-decoration:none;font-weight:normal}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu,.navbar-nav>.messages-menu>.dropdown-menu>li .menu,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu{max-height:200px;margin:0;padding:0;list-style:none;overflow-x:hidden}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{display:block;white-space:nowrap;border-bottom:1px solid #f4f4f4}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:hover,.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a:hover{background:#f4f4f4;text-decoration:none}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a{color:#444444;overflow:hidden;text-overflow:ellipsis;padding:10px}.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.glyphicon,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.fa,.navbar-nav>.notifications-menu>.dropdown-menu>li .menu>li>a>.ion{width:20px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a{margin:0;padding:10px 10px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>div>img{margin:auto 10px auto auto;width:40px;height:40px}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4{padding:0;margin:0 0 0 45px;color:#444444;font-size:15px;position:relative}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>h4>small{color:#999999;font-size:10px;position:absolute;top:0;right:0}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a>p{margin:0 0 0 45px;font-size:12px;color:#888888}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:before,.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{content:" ";display:table}.navbar-nav>.messages-menu>.dropdown-menu>li .menu>li>a:after{clear:both}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a{padding:10px}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>h3{font-size:14px;padding:0;margin:0 0 10px 0;color:#666666}.navbar-nav>.tasks-menu>.dropdown-menu>li .menu>li>a>.progress{padding:0;margin:0}.navbar-nav>.user-menu>.dropdown-menu{border-top-right-radius:0;border-top-left-radius:0;padding:1px 0 0 0;border-top-width:0;width:280px}.navbar-nav>.user-menu>.dropdown-menu,.navbar-nav>.user-menu>.dropdown-menu>.user-body{border-bottom-right-radius:4px;border-bottom-left-radius:4px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header{height:175px;padding:10px;text-align:center}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>img{z-index:5;height:90px;width:90px;border:3px solid;border-color:transparent;border-color:rgba(255,255,255,0.2)}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p{z-index:5;color:#fff;color:rgba(255,255,255,0.8);font-size:17px;margin-top:10px}.navbar-nav>.user-menu>.dropdown-menu>li.user-header>p>small{display:block;font-size:12px}.navbar-nav>.user-menu>.dropdown-menu>.user-body{padding:15px;border-bottom:1px solid #f4f4f4;border-top:1px solid #dddddd}.navbar-nav>.user-menu>.dropdown-menu>.user-body:before,.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-body:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-body a{color:#444 !important}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-body a{background:#fff !important;color:#444 !important}}.navbar-nav>.user-menu>.dropdown-menu>.user-footer{background-color:#f9f9f9;padding:10px}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:before,.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{content:" ";display:table}.navbar-nav>.user-menu>.dropdown-menu>.user-footer:after{clear:both}.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default{color:#666666}@media (max-width:991px){.navbar-nav>.user-menu>.dropdown-menu>.user-footer .btn-default:hover{background-color:#f9f9f9}}.navbar-nav>.user-menu .user-image{float:left;width:25px;height:25px;border-radius:50%;margin-right:10px;margin-top:-2px}@media (max-width:767px){.navbar-nav>.user-menu .user-image{float:none;margin-right:0;margin-top:-8px;line-height:10px}}.open:not(.dropup)>.animated-dropdown-menu{backface-visibility:visible !important;-webkit-animation:flipInX .7s both;-o-animation:flipInX .7s both;animation:flipInX .7s both}@keyframes flipInX{0%{transform:perspective(400px) rotate3d(1, 0, 0, 90deg);transition-timing-function:ease-in;opacity:0}40%{transform:perspective(400px) rotate3d(1, 0, 0, -20deg);transition-timing-function:ease-in}60%{transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{transform:perspective(400px)}}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 90deg);-webkit-transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -20deg);-webkit-transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, 10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1, 0, 0, -5deg)}100%{-webkit-transform:perspective(400px)}}.navbar-custom-menu>.navbar-nav>li{position:relative}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:0;left:auto}@media (max-width:991px){.navbar-custom-menu>.navbar-nav{float:right}.navbar-custom-menu>.navbar-nav>li{position:static}.navbar-custom-menu>.navbar-nav>li>.dropdown-menu{position:absolute;right:5%;left:auto;border:1px solid #ddd;background:#fff}}.form-control{border-radius:0;box-shadow:none;border-color:#d2d6de}.form-control:focus{border-color:#3c8dbc;box-shadow:none}.form-control::-moz-placeholder,.form-control:-ms-input-placeholder,.form-control::-webkit-input-placeholder{color:#bbb;opacity:1}.form-control:not(select){-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-group.has-success label{color:#00a65a}.form-group.has-success .form-control,.form-group.has-success .input-group-addon{border-color:#00a65a;box-shadow:none}.form-group.has-success .help-block{color:#00a65a}.form-group.has-warning label{color:#f39c12}.form-group.has-warning .form-control,.form-group.has-warning .input-group-addon{border-color:#f39c12;box-shadow:none}.form-group.has-warning .help-block{color:#f39c12}.form-group.has-error label{color:#dd4b39}.form-group.has-error .form-control,.form-group.has-error .input-group-addon{border-color:#dd4b39;box-shadow:none}.form-group.has-error .help-block{color:#dd4b39}.input-group .input-group-addon{border-radius:0;border-color:#d2d6de;background-color:#fff}.btn-group-vertical .btn.btn-flat:first-of-type,.btn-group-vertical .btn.btn-flat:last-of-type{border-radius:0}.icheck>label{padding-left:0}.form-control-feedback.fa{line-height:34px}.input-lg+.form-control-feedback.fa,.input-group-lg+.form-control-feedback.fa,.form-group-lg .form-control+.form-control-feedback.fa{line-height:46px}.input-sm+.form-control-feedback.fa,.input-group-sm+.form-control-feedback.fa,.form-group-sm .form-control+.form-control-feedback.fa{line-height:30px}.progress,.progress>.progress-bar{-webkit-box-shadow:none;box-shadow:none}.progress,.progress>.progress-bar,.progress .progress-bar,.progress>.progress-bar .progress-bar{border-radius:1px}.progress.sm,.progress-sm{height:10px}.progress.sm,.progress-sm,.progress.sm .progress-bar,.progress-sm .progress-bar{border-radius:1px}.progress.xs,.progress-xs{height:7px}.progress.xs,.progress-xs,.progress.xs .progress-bar,.progress-xs .progress-bar{border-radius:1px}.progress.xxs,.progress-xxs{height:3px}.progress.xxs,.progress-xxs,.progress.xxs .progress-bar,.progress-xxs .progress-bar{border-radius:1px}.progress.vertical{position:relative;width:30px;height:200px;display:inline-block;margin-right:10px}.progress.vertical>.progress-bar{width:100%;position:absolute;bottom:0}.progress.vertical.sm,.progress.vertical.progress-sm{width:20px}.progress.vertical.xs,.progress.vertical.progress-xs{width:10px}.progress.vertical.xxs,.progress.vertical.progress-xxs{width:3px}.progress-group .progress-text{font-weight:600}.progress-group .progress-number{float:right}.table tr>td .progress{margin:0}.progress-bar-light-blue,.progress-bar-primary{background-color:#3c8dbc}.progress-striped .progress-bar-light-blue,.progress-striped .progress-bar-primary{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-green,.progress-bar-success{background-color:#00a65a}.progress-striped .progress-bar-green,.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-aqua,.progress-bar-info{background-color:#00c0ef}.progress-striped .progress-bar-aqua,.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-yellow,.progress-bar-warning{background-color:#f39c12}.progress-striped .progress-bar-yellow,.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-red,.progress-bar-danger{background-color:#dd4b39}.progress-striped .progress-bar-red,.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.small-box{border-radius:2px;position:relative;display:block;margin-bottom:20px;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.small-box>.inner{padding:10px}.small-box>.small-box-footer{position:relative;text-align:center;padding:3px 0;color:#fff;color:rgba(255,255,255,0.8);display:block;z-index:10;background:rgba(0,0,0,0.1);text-decoration:none}.small-box>.small-box-footer:hover{color:#fff;background:rgba(0,0,0,0.15)}.small-box h3{font-size:38px;font-weight:bold;margin:0 0 10px 0;white-space:nowrap;padding:0}.small-box p{font-size:15px}.small-box p>small{display:block;color:#f9f9f9;font-size:13px;margin-top:5px}.small-box h3,.small-box p{z-index:5}.small-box .icon{-webkit-transition:all .3s linear;-o-transition:all .3s linear;transition:all .3s linear;position:absolute;top:-10px;right:10px;z-index:0;font-size:90px;color:rgba(0,0,0,0.15)}.small-box:hover{text-decoration:none;color:#f9f9f9}.small-box:hover .icon{font-size:95px}@media (max-width:767px){.small-box{text-align:center}.small-box .icon{display:none}.small-box p{font-size:12px}}.box{position:relative;border-radius:3px;background:#ffffff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box.box-primary{border-top-color:#3c8dbc}.box.box-info{border-top-color:#00c0ef}.box.box-danger{border-top-color:#dd4b39}.box.box-warning{border-top-color:#f39c12}.box.box-success{border-top-color:#00a65a}.box.box-default{border-top-color:#d2d6de}.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:none}.box .nav-stacked>li{border-bottom:1px solid #f4f4f4;margin:0}.box .nav-stacked>li:last-of-type{border-bottom:none}.box.height-control .box-body{max-height:300px;overflow:auto}.box .border-right{border-right:1px solid #f4f4f4}.box .border-left{border-left:1px solid #f4f4f4}.box.box-solid{border-top:0}.box.box-solid>.box-header .btn.btn-default{background:transparent}.box.box-solid>.box-header .btn:hover,.box.box-solid>.box-header a:hover{background:rgba(0,0,0,0.1)}.box.box-solid.box-default{border:1px solid #d2d6de}.box.box-solid.box-default>.box-header{color:#444;background:#d2d6de;background-color:#d2d6de}.box.box-solid.box-default>.box-header a,.box.box-solid.box-default>.box-header .btn{color:#444}.box.box-solid.box-primary{border:1px solid #3c8dbc}.box.box-solid.box-primary>.box-header{color:#fff;background:#3c8dbc;background-color:#3c8dbc}.box.box-solid.box-primary>.box-header a,.box.box-solid.box-primary>.box-header .btn{color:#fff}.box.box-solid.box-info{border:1px solid #00c0ef}.box.box-solid.box-info>.box-header{color:#fff;background:#00c0ef;background-color:#00c0ef}.box.box-solid.box-info>.box-header a,.box.box-solid.box-info>.box-header .btn{color:#fff}.box.box-solid.box-danger{border:1px solid #dd4b39}.box.box-solid.box-danger>.box-header{color:#fff;background:#dd4b39;background-color:#dd4b39}.box.box-solid.box-danger>.box-header a,.box.box-solid.box-danger>.box-header .btn{color:#fff}.box.box-solid.box-warning{border:1px solid #f39c12}.box.box-solid.box-warning>.box-header{color:#fff;background:#f39c12;background-color:#f39c12}.box.box-solid.box-warning>.box-header a,.box.box-solid.box-warning>.box-header .btn{color:#fff}.box.box-solid.box-success{border:1px solid #00a65a}.box.box-solid.box-success>.box-header{color:#fff;background:#00a65a;background-color:#00a65a}.box.box-solid.box-success>.box-header a,.box.box-solid.box-success>.box-header .btn{color:#fff}.box.box-solid>.box-header>.box-tools .btn{border:0;box-shadow:none}.box.box-solid[class*='bg']>.box-header{color:#fff}.box .box-group>.box{margin-bottom:5px}.box .knob-label{text-align:center;color:#333;font-weight:100;font-size:12px;margin-bottom:.3em}.box>.overlay,.overlay-wrapper>.overlay,.box>.loading-img,.overlay-wrapper>.loading-img{position:absolute;top:0;left:0;width:100%;height:100%}.box .overlay,.overlay-wrapper .overlay{z-index:50;background:rgba(255,255,255,0.7);border-radius:3px}.box .overlay>.fa,.overlay-wrapper .overlay>.fa{position:absolute;top:50%;left:50%;margin-left:-15px;margin-top:-15px;color:#000;font-size:30px}.box .overlay.dark,.overlay-wrapper .overlay.dark{background:rgba(0,0,0,0.5)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.box-header{color:#444;display:block;padding:10px;position:relative}.box-header.with-border{border-bottom:1px solid #f4f4f4}.collapsed-box .box-header.with-border{border-bottom:none}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion,.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-header>.fa,.box-header>.glyphicon,.box-header>.ion{margin-right:5px}.box-header>.box-tools{float:right;margin-top:-5px;margin-bottom:-5px}.box-header>.box-tools [data-toggle="tooltip"]{position:relative}.box-header>.box-tools.pull-right .dropdown-menu{right:0;left:auto}.box-header>.box-tools .dropdown-menu>li>a{color:#444 !important}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.btn-box-tool.btn:active{box-shadow:none}.box-body{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;padding:10px}.no-header .box-body{border-top-right-radius:3px;border-top-left-radius:3px}.box-body>.table{margin-bottom:0}.box-body .fc{margin-top:5px}.box-body .full-width-chart{margin:-19px}.box-body.no-padding .full-width-chart{margin:-9px}.box-body .box-pane{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:3px}.box-body .box-pane-right{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:0}.box-footer{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border-top:1px solid #f4f4f4;padding:10px;background-color:#fff}.chart-legend{margin:10px 0}@media (max-width:991px){.chart-legend>li{float:left;margin-right:10px}}.box-comments{background:#f7f7f7}.box-comments .box-comment{padding:8px 0;border-bottom:1px solid #eee}.box-comments .box-comment:before,.box-comments .box-comment:after{content:" ";display:table}.box-comments .box-comment:after{clear:both}.box-comments .box-comment:last-of-type{border-bottom:0}.box-comments .box-comment:first-of-type{padding-top:0}.box-comments .box-comment img{float:left}.box-comments .comment-text{margin-left:40px;color:#555}.box-comments .username{color:#444;display:block;font-weight:600}.box-comments .text-muted{font-weight:400;font-size:12px}.todo-list{margin:0;padding:0;list-style:none;overflow:auto}.todo-list>li{border-radius:2px;padding:10px;background:#f4f4f4;margin-bottom:2px;border-left:2px solid #e6e7e8;color:#444}.todo-list>li:last-of-type{margin-bottom:0}.todo-list>li>input[type='checkbox']{margin:0 10px 0 5px}.todo-list>li .text{display:inline-block;margin-left:5px;font-weight:600}.todo-list>li .label{margin-left:10px;font-size:9px}.todo-list>li .tools{display:none;float:right;color:#dd4b39}.todo-list>li .tools>.fa,.todo-list>li .tools>.glyphicon,.todo-list>li .tools>.ion{margin-right:5px;cursor:pointer}.todo-list>li:hover .tools{display:inline-block}.todo-list>li.done{color:#999}.todo-list>li.done .text{text-decoration:line-through;font-weight:500}.todo-list>li.done .label{background:#d2d6de !important}.todo-list .danger{border-left-color:#dd4b39}.todo-list .warning{border-left-color:#f39c12}.todo-list .info{border-left-color:#00c0ef}.todo-list .success{border-left-color:#00a65a}.todo-list .primary{border-left-color:#3c8dbc}.todo-list .handle{display:inline-block;cursor:move;margin:0 5px}.chat{padding:5px 20px 5px 10px}.chat .item{margin-bottom:10px}.chat .item:before,.chat .item:after{content:" ";display:table}.chat .item:after{clear:both}.chat .item>img{width:40px;height:40px;border:2px solid transparent;border-radius:50%}.chat .item>.online{border:2px solid #00a65a}.chat .item>.offline{border:2px solid #dd4b39}.chat .item>.message{margin-left:55px;margin-top:-40px}.chat .item>.message>.name{display:block;font-weight:600}.chat .item>.attachment{border-radius:3px;background:#f4f4f4;margin-left:65px;margin-right:15px;padding:10px}.chat .item>.attachment>h4{margin:0 0 5px 0;font-weight:600;font-size:14px}.chat .item>.attachment>p,.chat .item>.attachment>.filename{font-weight:600;font-size:13px;font-style:italic;margin:0}.chat .item>.attachment:before,.chat .item>.attachment:after{content:" ";display:table}.chat .item>.attachment:after{clear:both}.box-input{max-width:200px}.modal .panel-body{color:#444}.info-box{display:block;min-height:90px;background:#fff;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:2px;margin-bottom:15px}.info-box small{font-size:14px}.info-box .progress{background:rgba(0,0,0,0.2);margin:5px -10px 5px -10px;height:2px}.info-box .progress,.info-box .progress .progress-bar{border-radius:0}.info-box .progress .progress-bar{background:#fff}.info-box-icon{border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px;display:block;float:left;height:90px;width:90px;text-align:center;font-size:45px;line-height:90px;background:rgba(0,0,0,0.2)}.info-box-icon>img{max-width:100%}.info-box-content{padding:5px 10px;margin-left:90px}.info-box-number{display:block;font-weight:bold;font-size:18px}.progress-description,.info-box-text{display:block;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.info-box-text{text-transform:uppercase}.info-box-more{display:block}.progress-description{margin:0}.timeline{position:relative;margin:0 0 30px 0;padding:0;list-style:none}.timeline:before{content:'';position:absolute;top:0;bottom:0;width:4px;background:#ddd;left:31px;margin:0;border-radius:2px}.timeline>li{position:relative;margin-right:10px;margin-bottom:15px}.timeline>li:before,.timeline>li:after{content:" ";display:table}.timeline>li:after{clear:both}.timeline>li>.timeline-item{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;margin-top:0;background:#fff;color:#444;margin-left:60px;margin-right:15px;padding:0;position:relative}.timeline>li>.timeline-item>.time{color:#999;float:right;padding:10px;font-size:12px}.timeline>li>.timeline-item>.timeline-header{margin:0;color:#555;border-bottom:1px solid #f4f4f4;padding:10px;font-size:16px;line-height:1.1}.timeline>li>.timeline-item>.timeline-header>a{font-weight:600}.timeline>li>.timeline-item>.timeline-body,.timeline>li>.timeline-item>.timeline-footer{padding:10px}.timeline>li>.fa,.timeline>li>.glyphicon,.timeline>li>.ion{width:30px;height:30px;font-size:15px;line-height:30px;position:absolute;color:#666;background:#d2d6de;border-radius:50%;text-align:center;left:18px;top:0}.timeline>.time-label>span{font-weight:600;padding:5px;display:inline-block;background-color:#fff;border-radius:4px}.timeline-inverse>li>.timeline-item{background:#f0f0f0;border:1px solid #ddd;-webkit-box-shadow:none;box-shadow:none}.timeline-inverse>li>.timeline-item>.timeline-header{border-bottom-color:#ddd}.btn{border-radius:3px;-webkit-box-shadow:none;box-shadow:none;border:1px solid transparent}.btn.uppercase{text-transform:uppercase}.btn.btn-flat{border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;border-width:1px}.btn:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:focus{outline:none}.btn.btn-file{position:relative;overflow:hidden}.btn.btn-file>input[type='file']{position:absolute;top:0;right:0;min-width:100%;min-height:100%;font-size:100px;text-align:right;opacity:0;filter:alpha(opacity=0);outline:none;background:white;cursor:inherit;display:block}.btn-default{background-color:#f4f4f4;color:#444;border-color:#ddd}.btn-default:hover,.btn-default:active,.btn-default.hover{background-color:#e7e7e7}.btn-primary{background-color:#3c8dbc;border-color:#367fa9}.btn-primary:hover,.btn-primary:active,.btn-primary.hover{background-color:#367fa9}.btn-success{background-color:#00a65a;border-color:#008d4c}.btn-success:hover,.btn-success:active,.btn-success.hover{background-color:#008d4c}.btn-info{background-color:#00c0ef;border-color:#00acd6}.btn-info:hover,.btn-info:active,.btn-info.hover{background-color:#00acd6}.btn-danger{background-color:#dd4b39;border-color:#d73925}.btn-danger:hover,.btn-danger:active,.btn-danger.hover{background-color:#d73925}.btn-warning{background-color:#f39c12;border-color:#e08e0b}.btn-warning:hover,.btn-warning:active,.btn-warning.hover{background-color:#e08e0b}.btn-outline{border:1px solid #fff;background:transparent;color:#fff}.btn-outline:hover,.btn-outline:focus,.btn-outline:active{color:rgba(255,255,255,0.7);border-color:rgba(255,255,255,0.7)}.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn[class*='bg-']:hover{-webkit-box-shadow:inset 0 0 100px rgba(0,0,0,0.2);box-shadow:inset 0 0 100px rgba(0,0,0,0.2)}.btn-app{border-radius:3px;position:relative;padding:15px 5px;margin:0 0 10px 10px;min-width:80px;height:60px;text-align:center;color:#666;border:1px solid #ddd;background-color:#f4f4f4;font-size:12px}.btn-app>.fa,.btn-app>.glyphicon,.btn-app>.ion{font-size:20px;display:block}.btn-app:hover{background:#f4f4f4;color:#444;border-color:#aaa}.btn-app:active,.btn-app:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-app>.badge{position:absolute;top:-3px;right:-10px;font-size:10px;font-weight:400}.callout{border-radius:3px;margin:0 0 20px 0;padding:15px 30px 15px 15px;border-left:5px solid #eee}.callout a{color:#fff;text-decoration:underline}.callout a:hover{color:#eee}.callout h4{margin-top:0;font-weight:600}.callout p:last-child{margin-bottom:0}.callout code,.callout .highlight{background-color:#fff}.callout.callout-danger{border-color:#c23321}.callout.callout-warning{border-color:#c87f0a}.callout.callout-info{border-color:#0097bc}.callout.callout-success{border-color:#00733e}.alert{border-radius:3px}.alert h4{font-weight:600}.alert .icon{margin-right:10px}.alert .close{color:#000;opacity:.2;filter:alpha(opacity=20)}.alert .close:hover{opacity:.5;filter:alpha(opacity=50)}.alert a{color:#fff;text-decoration:underline}.alert-success{border-color:#008d4c}.alert-danger,.alert-error{border-color:#d73925}.alert-warning{border-color:#e08e0b}.alert-info{border-color:#00acd6}.nav>li>a:hover,.nav>li>a:active,.nav>li>a:focus{color:#444;background:#f7f7f7}.nav-pills>li>a{border-radius:0;border-top:3px solid transparent;color:#444}.nav-pills>li>a>.fa,.nav-pills>li>a>.glyphicon,.nav-pills>li>a>.ion{margin-right:5px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{border-top-color:#3c8dbc}.nav-pills>li.active>a{font-weight:600}.nav-stacked>li>a{border-radius:0;border-top:0;border-left:3px solid transparent;color:#444}.nav-stacked>li.active>a,.nav-stacked>li.active>a:hover{background:transparent;color:#444;border-top:0;border-left-color:#3c8dbc}.nav-stacked>li.header{border-bottom:1px solid #ddd;color:#777;margin-bottom:10px;padding:5px 10px;text-transform:uppercase}.nav-tabs-custom{margin-bottom:20px;background:#fff;box-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px}.nav-tabs-custom>.nav-tabs{margin:0;border-bottom-color:#f4f4f4;border-top-right-radius:3px;border-top-left-radius:3px}.nav-tabs-custom>.nav-tabs>li{border-top:3px solid transparent;margin-bottom:-2px;margin-right:5px}.nav-tabs-custom>.nav-tabs>li.disabled>a{color:#777}.nav-tabs-custom>.nav-tabs>li>a{color:#444;border-radius:0}.nav-tabs-custom>.nav-tabs>li>a.text-muted{color:#999}.nav-tabs-custom>.nav-tabs>li>a,.nav-tabs-custom>.nav-tabs>li>a:hover{background:transparent;margin:0}.nav-tabs-custom>.nav-tabs>li>a:hover{color:#999}.nav-tabs-custom>.nav-tabs>li:not(.active)>a:hover,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:focus,.nav-tabs-custom>.nav-tabs>li:not(.active)>a:active{border-color:transparent}.nav-tabs-custom>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom>.nav-tabs>li.active>a,.nav-tabs-custom>.nav-tabs>li.active:hover>a{background-color:#fff;color:#444}.nav-tabs-custom>.nav-tabs>li.active>a{border-top-color:transparent;border-left-color:#f4f4f4;border-right-color:#f4f4f4}.nav-tabs-custom>.nav-tabs>li:first-of-type{margin-left:0}.nav-tabs-custom>.nav-tabs>li:first-of-type.active>a{border-left-color:transparent}.nav-tabs-custom>.nav-tabs.pull-right{float:none !important}.nav-tabs-custom>.nav-tabs.pull-right>li{float:right}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type{margin-right:0}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type>a{border-left-width:1px}.nav-tabs-custom>.nav-tabs.pull-right>li:first-of-type.active>a{border-left-color:#f4f4f4;border-right-color:transparent}.nav-tabs-custom>.nav-tabs>li.header{line-height:35px;padding:0 10px;font-size:20px;color:#444}.nav-tabs-custom>.nav-tabs>li.header>.fa,.nav-tabs-custom>.nav-tabs>li.header>.glyphicon,.nav-tabs-custom>.nav-tabs>li.header>.ion{margin-right:5px}.nav-tabs-custom>.tab-content{background:#fff;padding:10px;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.nav-tabs-custom .dropdown.open>a:active,.nav-tabs-custom .dropdown.open>a:focus{background:transparent;color:#999}.nav-tabs-custom.tab-primary>.nav-tabs>li.active{border-top-color:#3c8dbc}.nav-tabs-custom.tab-info>.nav-tabs>li.active{border-top-color:#00c0ef}.nav-tabs-custom.tab-danger>.nav-tabs>li.active{border-top-color:#dd4b39}.nav-tabs-custom.tab-warning>.nav-tabs>li.active{border-top-color:#f39c12}.nav-tabs-custom.tab-success>.nav-tabs>li.active{border-top-color:#00a65a}.nav-tabs-custom.tab-default>.nav-tabs>li.active{border-top-color:#d2d6de}.pagination>li>a{background:#fafafa;color:#666}.pagination.pagination-flat>li>a{border-radius:0 !important}.products-list{list-style:none;margin:0;padding:0}.products-list>.item{border-radius:3px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1);padding:10px 0;background:#fff}.products-list>.item:before,.products-list>.item:after{content:" ";display:table}.products-list>.item:after{clear:both}.products-list .product-img{float:left}.products-list .product-img img{width:50px;height:50px}.products-list .product-info{margin-left:60px}.products-list .product-title{font-weight:600}.products-list .product-description{display:block;color:#999;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.product-list-in-box>.item{-webkit-box-shadow:none;box-shadow:none;border-radius:0;border-bottom:1px solid #f4f4f4}.product-list-in-box>.item:last-of-type{border-bottom-width:0}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-top:1px solid #f4f4f4}.table>thead>tr>th{border-bottom:2px solid #f4f4f4}.table tr td .progress{margin-top:5px}.table-bordered{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #f4f4f4}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table.no-border,.table.no-border td,.table.no-border th{border:0}table.text-center,table.text-center td,table.text-center th{text-align:center}.table.align th{text-align:left}.table.align td{text-align:right}.label-default{background-color:#d2d6de;color:#444}.direct-chat .box-body{border-bottom-right-radius:0;border-bottom-left-radius:0;position:relative;overflow-x:hidden;padding:0}.direct-chat.chat-pane-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-messages{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0);padding:10px;height:250px;overflow:auto}.direct-chat-msg,.direct-chat-text{display:block}.direct-chat-msg{margin-bottom:10px}.direct-chat-msg:before,.direct-chat-msg:after{content:" ";display:table}.direct-chat-msg:after{clear:both}.direct-chat-messages,.direct-chat-contacts{-webkit-transition:-webkit-transform .5s ease-in-out;-moz-transition:-moz-transform .5s ease-in-out;-o-transition:-o-transform .5s ease-in-out;transition:transform .5s ease-in-out}.direct-chat-text{border-radius:5px;position:relative;padding:5px 10px;background:#d2d6de;border:1px solid #d2d6de;margin:5px 0 0 50px;color:#444}.direct-chat-text:after,.direct-chat-text:before{position:absolute;right:100%;top:15px;border:solid transparent;border-right-color:#d2d6de;content:' ';height:0;width:0;pointer-events:none}.direct-chat-text:after{border-width:5px;margin-top:-5px}.direct-chat-text:before{border-width:6px;margin-top:-6px}.right .direct-chat-text{margin-right:50px;margin-left:0}.right .direct-chat-text:after,.right .direct-chat-text:before{right:auto;left:100%;border-right-color:transparent;border-left-color:#d2d6de}.direct-chat-img{border-radius:50%;float:left;width:40px;height:40px}.right .direct-chat-img{float:right}.direct-chat-info{display:block;margin-bottom:2px;font-size:12px}.direct-chat-name{font-weight:600}.direct-chat-timestamp{color:#999}.direct-chat-contacts-open .direct-chat-contacts{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.direct-chat-contacts{-webkit-transform:translate(101%, 0);-ms-transform:translate(101%, 0);-o-transform:translate(101%, 0);transform:translate(101%, 0);position:absolute;top:0;bottom:0;height:250px;width:100%;background:#222d32;color:#fff;overflow:auto}.contacts-list>li{border-bottom:1px solid rgba(0,0,0,0.2);padding:10px;margin:0}.contacts-list>li:before,.contacts-list>li:after{content:" ";display:table}.contacts-list>li:after{clear:both}.contacts-list>li:last-of-type{border-bottom:none}.contacts-list-img{border-radius:50%;width:40px;float:left}.contacts-list-info{margin-left:45px;color:#fff}.contacts-list-name,.contacts-list-status{display:block}.contacts-list-name{font-weight:600}.contacts-list-status{font-size:12px}.contacts-list-date{color:#aaa;font-weight:normal}.contacts-list-msg{color:#999}.direct-chat-danger .right>.direct-chat-text{background:#dd4b39;border-color:#dd4b39;color:#fff}.direct-chat-danger .right>.direct-chat-text:after,.direct-chat-danger .right>.direct-chat-text:before{border-left-color:#dd4b39}.direct-chat-primary .right>.direct-chat-text{background:#3c8dbc;border-color:#3c8dbc;color:#fff}.direct-chat-primary .right>.direct-chat-text:after,.direct-chat-primary .right>.direct-chat-text:before{border-left-color:#3c8dbc}.direct-chat-warning .right>.direct-chat-text{background:#f39c12;border-color:#f39c12;color:#fff}.direct-chat-warning .right>.direct-chat-text:after,.direct-chat-warning .right>.direct-chat-text:before{border-left-color:#f39c12}.direct-chat-info .right>.direct-chat-text{background:#00c0ef;border-color:#00c0ef;color:#fff}.direct-chat-info .right>.direct-chat-text:after,.direct-chat-info .right>.direct-chat-text:before{border-left-color:#00c0ef}.direct-chat-success .right>.direct-chat-text{background:#00a65a;border-color:#00a65a;color:#fff}.direct-chat-success .right>.direct-chat-text:after,.direct-chat-success .right>.direct-chat-text:before{border-left-color:#00a65a}.users-list>li{width:25%;float:left;padding:10px;text-align:center}.users-list>li img{border-radius:50%;max-width:100%;height:auto}.users-list>li>a:hover,.users-list>li>a:hover .users-list-name{color:#999}.users-list-name,.users-list-date{display:block}.users-list-name{font-weight:600;color:#444;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.users-list-date{color:#999;font-size:12px}.carousel-control.left,.carousel-control.right{background-image:none}.carousel-control>.fa{font-size:40px;position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-20px}.modal{background:rgba(0,0,0,0.3)}.modal-content{border-radius:0;-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125);border:0}@media (min-width:768px){.modal-content{-webkit-box-shadow:0 2px 3px rgba(0,0,0,0.125);box-shadow:0 2px 3px rgba(0,0,0,0.125)}}.modal-header{border-bottom-color:#f4f4f4}.modal-footer{border-top-color:#f4f4f4}.modal-primary .modal-header,.modal-primary .modal-footer{border-color:#307095}.modal-warning .modal-header,.modal-warning .modal-footer{border-color:#c87f0a}.modal-info .modal-header,.modal-info .modal-footer{border-color:#0097bc}.modal-success .modal-header,.modal-success .modal-footer{border-color:#00733e}.modal-danger .modal-header,.modal-danger .modal-footer{border-color:#c23321}.box-widget{border:none;position:relative}.widget-user .widget-user-header{padding:20px;height:120px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user .widget-user-username{margin-top:0;margin-bottom:5px;font-size:25px;font-weight:300;text-shadow:0 1px 1px rgba(0,0,0,0.2)}.widget-user .widget-user-desc{margin-top:0}.widget-user .widget-user-image{position:absolute;top:65px;left:50%;margin-left:-45px}.widget-user .widget-user-image>img{width:90px;height:auto;border:3px solid #fff}.widget-user .box-footer{padding-top:30px}.widget-user-2 .widget-user-header{padding:20px;border-top-right-radius:3px;border-top-left-radius:3px}.widget-user-2 .widget-user-username{margin-top:5px;margin-bottom:5px;font-size:25px;font-weight:300}.widget-user-2 .widget-user-desc{margin-top:0}.widget-user-2 .widget-user-username,.widget-user-2 .widget-user-desc{margin-left:75px}.widget-user-2 .widget-user-image>img{width:65px;height:auto;float:left}.treeview-menu{display:none;list-style:none;padding:0;margin:0;padding-left:5px}.treeview-menu .treeview-menu{padding-left:20px}.treeview-menu>li{margin:0}.treeview-menu>li>a{padding:5px 5px 5px 15px;display:block;font-size:14px}.treeview-menu>li>a>.fa,.treeview-menu>li>a>.glyphicon,.treeview-menu>li>a>.ion{width:20px}.treeview-menu>li>a>.pull-right-container>.fa-angle-left,.treeview-menu>li>a>.pull-right-container>.fa-angle-down,.treeview-menu>li>a>.fa-angle-left,.treeview-menu>li>a>.fa-angle-down{width:auto}.treeview>ul.treeview-menu{overflow:hidden;height:auto;padding-top:0px !important;padding-bottom:0px !important}.treeview.menu-open>ul.treeview-menu{overflow:visible;height:auto}.mailbox-messages>.table{margin:0}.mailbox-controls{padding:5px}.mailbox-controls.with-border{border-bottom:1px solid #f4f4f4}.mailbox-read-info{border-bottom:1px solid #f4f4f4;padding:10px}.mailbox-read-info h3{font-size:20px;margin:0}.mailbox-read-info h5{margin:0;padding:5px 0 0 0}.mailbox-read-time{color:#999;font-size:13px}.mailbox-read-message{padding:10px}.mailbox-attachments li{float:left;width:200px;border:1px solid #eee;margin-bottom:10px;margin-right:10px}.mailbox-attachment-name{font-weight:bold;color:#666}.mailbox-attachment-icon,.mailbox-attachment-info,.mailbox-attachment-size{display:block}.mailbox-attachment-info{padding:10px;background:#f4f4f4}.mailbox-attachment-size{color:#999;font-size:12px}.mailbox-attachment-icon{text-align:center;font-size:65px;color:#666;padding:20px 10px}.mailbox-attachment-icon.has-img{padding:0}.mailbox-attachment-icon.has-img>img{max-width:100%;height:auto}.lockscreen{background:#d2d6de}.lockscreen-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.lockscreen-logo a{color:#444}.lockscreen-wrapper{max-width:400px;margin:0 auto;margin-top:10%}.lockscreen .lockscreen-name{text-align:center;font-weight:600}.lockscreen-item{border-radius:4px;padding:0;background:#fff;position:relative;margin:10px auto 30px auto;width:290px}.lockscreen-image{border-radius:50%;position:absolute;left:-10px;top:-25px;background:#fff;padding:5px;z-index:10}.lockscreen-image>img{border-radius:50%;width:70px;height:70px}.lockscreen-credentials{margin-left:70px}.lockscreen-credentials .form-control{border:0}.lockscreen-credentials .btn{background-color:#fff;border:0;padding:0 10px}.lockscreen-footer{margin-top:10px}.login-logo,.register-logo{font-size:35px;text-align:center;margin-bottom:25px;font-weight:300}.login-logo a,.register-logo a{color:#444}.login-page,.register-page{height:auto;background:#d2d6de}.login-box,.register-box{width:360px;margin:7% auto}@media (max-width:768px){.login-box,.register-box{width:90%;margin-top:20px}}.login-box-body,.register-box-body{background:#fff;padding:20px;border-top:0;color:#666}.login-box-body .form-control-feedback,.register-box-body .form-control-feedback{color:#777}.login-box-msg,.register-box-msg{margin:0;text-align:center;padding:0 20px 20px 20px}.social-auth-links{margin:10px 0}.error-page{width:600px;margin:20px auto 0 auto}@media (max-width:991px){.error-page{width:100%}}.error-page>.headline{float:left;font-size:100px;font-weight:300}@media (max-width:991px){.error-page>.headline{float:none;text-align:center}}.error-page>.error-content{margin-left:190px;display:block}@media (max-width:991px){.error-page>.error-content{margin-left:0}}.error-page>.error-content>h3{font-weight:300;font-size:25px}@media (max-width:991px){.error-page>.error-content>h3{text-align:center}}.invoice{position:relative;background:#fff;border:1px solid #f4f4f4;padding:20px;margin:10px 25px}.invoice-title{margin-top:0}.profile-user-img{margin:0 auto;width:100px;padding:3px;border:3px solid #d2d6de}.profile-username{font-size:21px;margin-top:5px}.post{border-bottom:1px solid #d2d6de;margin-bottom:15px;padding-bottom:15px;color:#666}.post:last-of-type{border-bottom:0;margin-bottom:0;padding-bottom:0}.post .user-block{margin-bottom:15px}.btn-social{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.btn-social>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social.btn-lg{padding-left:61px}.btn-social.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social.btn-sm{padding-left:38px}.btn-social.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social.btn-xs{padding-left:30px}.btn-social.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon{position:relative;padding-left:44px;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:34px;width:34px;padding:0}.btn-social-icon>:first-child{position:absolute;left:0;top:0;bottom:0;width:32px;line-height:34px;font-size:1.6em;text-align:center;border-right:1px solid rgba(0,0,0,0.2)}.btn-social-icon.btn-lg{padding-left:61px}.btn-social-icon.btn-lg>:first-child{line-height:45px;width:45px;font-size:1.8em}.btn-social-icon.btn-sm{padding-left:38px}.btn-social-icon.btn-sm>:first-child{line-height:28px;width:28px;font-size:1.4em}.btn-social-icon.btn-xs{padding-left:30px}.btn-social-icon.btn-xs>:first-child{line-height:20px;width:20px;font-size:1.2em}.btn-social-icon>:first-child{border:none;text-align:center;width:100%}.btn-social-icon.btn-lg{height:45px;width:45px;padding-left:0;padding-right:0}.btn-social-icon.btn-sm{height:30px;width:30px;padding-left:0;padding-right:0}.btn-social-icon.btn-xs{height:22px;width:22px;padding-left:0;padding-right:0}.btn-adn{color:#fff;background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn:focus,.btn-adn.focus{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:hover{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{color:#fff;background-color:#ce563f;border-color:rgba(0,0,0,0.2)}.btn-adn:active:hover,.btn-adn.active:hover,.open>.dropdown-toggle.btn-adn:hover,.btn-adn:active:focus,.btn-adn.active:focus,.open>.dropdown-toggle.btn-adn:focus,.btn-adn:active.focus,.btn-adn.active.focus,.open>.dropdown-toggle.btn-adn.focus{color:#fff;background-color:#b94630;border-color:rgba(0,0,0,0.2)}.btn-adn:active,.btn-adn.active,.open>.dropdown-toggle.btn-adn{background-image:none}.btn-adn.disabled:hover,.btn-adn[disabled]:hover,fieldset[disabled] .btn-adn:hover,.btn-adn.disabled:focus,.btn-adn[disabled]:focus,fieldset[disabled] .btn-adn:focus,.btn-adn.disabled.focus,.btn-adn[disabled].focus,fieldset[disabled] .btn-adn.focus{background-color:#d87a68;border-color:rgba(0,0,0,0.2)}.btn-adn .badge{color:#d87a68;background-color:#fff}.btn-bitbucket{color:#fff;background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:focus,.btn-bitbucket.focus{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:hover{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{color:#fff;background-color:#163758;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active:hover,.btn-bitbucket.active:hover,.open>.dropdown-toggle.btn-bitbucket:hover,.btn-bitbucket:active:focus,.btn-bitbucket.active:focus,.open>.dropdown-toggle.btn-bitbucket:focus,.btn-bitbucket:active.focus,.btn-bitbucket.active.focus,.open>.dropdown-toggle.btn-bitbucket.focus{color:#fff;background-color:#0f253c;border-color:rgba(0,0,0,0.2)}.btn-bitbucket:active,.btn-bitbucket.active,.open>.dropdown-toggle.btn-bitbucket{background-image:none}.btn-bitbucket.disabled:hover,.btn-bitbucket[disabled]:hover,fieldset[disabled] .btn-bitbucket:hover,.btn-bitbucket.disabled:focus,.btn-bitbucket[disabled]:focus,fieldset[disabled] .btn-bitbucket:focus,.btn-bitbucket.disabled.focus,.btn-bitbucket[disabled].focus,fieldset[disabled] .btn-bitbucket.focus{background-color:#205081;border-color:rgba(0,0,0,0.2)}.btn-bitbucket .badge{color:#205081;background-color:#fff}.btn-dropbox{color:#fff;background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox:focus,.btn-dropbox.focus{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:hover{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{color:#fff;background-color:#0d6aad;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active:hover,.btn-dropbox.active:hover,.open>.dropdown-toggle.btn-dropbox:hover,.btn-dropbox:active:focus,.btn-dropbox.active:focus,.open>.dropdown-toggle.btn-dropbox:focus,.btn-dropbox:active.focus,.btn-dropbox.active.focus,.open>.dropdown-toggle.btn-dropbox.focus{color:#fff;background-color:#0a568c;border-color:rgba(0,0,0,0.2)}.btn-dropbox:active,.btn-dropbox.active,.open>.dropdown-toggle.btn-dropbox{background-image:none}.btn-dropbox.disabled:hover,.btn-dropbox[disabled]:hover,fieldset[disabled] .btn-dropbox:hover,.btn-dropbox.disabled:focus,.btn-dropbox[disabled]:focus,fieldset[disabled] .btn-dropbox:focus,.btn-dropbox.disabled.focus,.btn-dropbox[disabled].focus,fieldset[disabled] .btn-dropbox.focus{background-color:#1087dd;border-color:rgba(0,0,0,0.2)}.btn-dropbox .badge{color:#1087dd;background-color:#fff}.btn-facebook{color:#fff;background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook:focus,.btn-facebook.focus{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:hover{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{color:#fff;background-color:#2d4373;border-color:rgba(0,0,0,0.2)}.btn-facebook:active:hover,.btn-facebook.active:hover,.open>.dropdown-toggle.btn-facebook:hover,.btn-facebook:active:focus,.btn-facebook.active:focus,.open>.dropdown-toggle.btn-facebook:focus,.btn-facebook:active.focus,.btn-facebook.active.focus,.open>.dropdown-toggle.btn-facebook.focus{color:#fff;background-color:#23345a;border-color:rgba(0,0,0,0.2)}.btn-facebook:active,.btn-facebook.active,.open>.dropdown-toggle.btn-facebook{background-image:none}.btn-facebook.disabled:hover,.btn-facebook[disabled]:hover,fieldset[disabled] .btn-facebook:hover,.btn-facebook.disabled:focus,.btn-facebook[disabled]:focus,fieldset[disabled] .btn-facebook:focus,.btn-facebook.disabled.focus,.btn-facebook[disabled].focus,fieldset[disabled] .btn-facebook.focus{background-color:#3b5998;border-color:rgba(0,0,0,0.2)}.btn-facebook .badge{color:#3b5998;background-color:#fff}.btn-flickr{color:#fff;background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr:focus,.btn-flickr.focus{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:hover{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{color:#fff;background-color:#cc006a;border-color:rgba(0,0,0,0.2)}.btn-flickr:active:hover,.btn-flickr.active:hover,.open>.dropdown-toggle.btn-flickr:hover,.btn-flickr:active:focus,.btn-flickr.active:focus,.open>.dropdown-toggle.btn-flickr:focus,.btn-flickr:active.focus,.btn-flickr.active.focus,.open>.dropdown-toggle.btn-flickr.focus{color:#fff;background-color:#a80057;border-color:rgba(0,0,0,0.2)}.btn-flickr:active,.btn-flickr.active,.open>.dropdown-toggle.btn-flickr{background-image:none}.btn-flickr.disabled:hover,.btn-flickr[disabled]:hover,fieldset[disabled] .btn-flickr:hover,.btn-flickr.disabled:focus,.btn-flickr[disabled]:focus,fieldset[disabled] .btn-flickr:focus,.btn-flickr.disabled.focus,.btn-flickr[disabled].focus,fieldset[disabled] .btn-flickr.focus{background-color:#ff0084;border-color:rgba(0,0,0,0.2)}.btn-flickr .badge{color:#ff0084;background-color:#fff}.btn-foursquare{color:#fff;background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare:focus,.btn-foursquare.focus{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:hover{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{color:#fff;background-color:#f71752;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active:hover,.btn-foursquare.active:hover,.open>.dropdown-toggle.btn-foursquare:hover,.btn-foursquare:active:focus,.btn-foursquare.active:focus,.open>.dropdown-toggle.btn-foursquare:focus,.btn-foursquare:active.focus,.btn-foursquare.active.focus,.open>.dropdown-toggle.btn-foursquare.focus{color:#fff;background-color:#e30742;border-color:rgba(0,0,0,0.2)}.btn-foursquare:active,.btn-foursquare.active,.open>.dropdown-toggle.btn-foursquare{background-image:none}.btn-foursquare.disabled:hover,.btn-foursquare[disabled]:hover,fieldset[disabled] .btn-foursquare:hover,.btn-foursquare.disabled:focus,.btn-foursquare[disabled]:focus,fieldset[disabled] .btn-foursquare:focus,.btn-foursquare.disabled.focus,.btn-foursquare[disabled].focus,fieldset[disabled] .btn-foursquare.focus{background-color:#f94877;border-color:rgba(0,0,0,0.2)}.btn-foursquare .badge{color:#f94877;background-color:#fff}.btn-github{color:#fff;background-color:#444444;border-color:rgba(0,0,0,0.2)}.btn-github:focus,.btn-github.focus{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:hover{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{color:#fff;background-color:#2b2b2b;border-color:rgba(0,0,0,0.2)}.btn-github:active:hover,.btn-github.active:hover,.open>.dropdown-toggle.btn-github:hover,.btn-github:active:focus,.btn-github.active:focus,.open>.dropdown-toggle.btn-github:focus,.btn-github:active.focus,.btn-github.active.focus,.open>.dropdown-toggle.btn-github.focus{color:#fff;background-color:#191919;border-color:rgba(0,0,0,0.2)}.btn-github:active,.btn-github.active,.open>.dropdown-toggle.btn-github{background-image:none}.btn-github.disabled:hover,.btn-github[disabled]:hover,fieldset[disabled] .btn-github:hover,.btn-github.disabled:focus,.btn-github[disabled]:focus,fieldset[disabled] .btn-github:focus,.btn-github.disabled.focus,.btn-github[disabled].focus,fieldset[disabled] .btn-github.focus{background-color:#444444;border-color:rgba(0,0,0,0.2)}.btn-github .badge{color:#444444;background-color:#fff}.btn-google{color:#fff;background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google:focus,.btn-google.focus{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:hover{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{color:#fff;background-color:#c23321;border-color:rgba(0,0,0,0.2)}.btn-google:active:hover,.btn-google.active:hover,.open>.dropdown-toggle.btn-google:hover,.btn-google:active:focus,.btn-google.active:focus,.open>.dropdown-toggle.btn-google:focus,.btn-google:active.focus,.btn-google.active.focus,.open>.dropdown-toggle.btn-google.focus{color:#fff;background-color:#a32b1c;border-color:rgba(0,0,0,0.2)}.btn-google:active,.btn-google.active,.open>.dropdown-toggle.btn-google{background-image:none}.btn-google.disabled:hover,.btn-google[disabled]:hover,fieldset[disabled] .btn-google:hover,.btn-google.disabled:focus,.btn-google[disabled]:focus,fieldset[disabled] .btn-google:focus,.btn-google.disabled.focus,.btn-google[disabled].focus,fieldset[disabled] .btn-google.focus{background-color:#dd4b39;border-color:rgba(0,0,0,0.2)}.btn-google .badge{color:#dd4b39;background-color:#fff}.btn-instagram{color:#fff;background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram:focus,.btn-instagram.focus{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:hover{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{color:#fff;background-color:#305777;border-color:rgba(0,0,0,0.2)}.btn-instagram:active:hover,.btn-instagram.active:hover,.open>.dropdown-toggle.btn-instagram:hover,.btn-instagram:active:focus,.btn-instagram.active:focus,.open>.dropdown-toggle.btn-instagram:focus,.btn-instagram:active.focus,.btn-instagram.active.focus,.open>.dropdown-toggle.btn-instagram.focus{color:#fff;background-color:#26455d;border-color:rgba(0,0,0,0.2)}.btn-instagram:active,.btn-instagram.active,.open>.dropdown-toggle.btn-instagram{background-image:none}.btn-instagram.disabled:hover,.btn-instagram[disabled]:hover,fieldset[disabled] .btn-instagram:hover,.btn-instagram.disabled:focus,.btn-instagram[disabled]:focus,fieldset[disabled] .btn-instagram:focus,.btn-instagram.disabled.focus,.btn-instagram[disabled].focus,fieldset[disabled] .btn-instagram.focus{background-color:#3f729b;border-color:rgba(0,0,0,0.2)}.btn-instagram .badge{color:#3f729b;background-color:#fff}.btn-linkedin{color:#fff;background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin:focus,.btn-linkedin.focus{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:hover{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{color:#fff;background-color:#005983;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active:hover,.btn-linkedin.active:hover,.open>.dropdown-toggle.btn-linkedin:hover,.btn-linkedin:active:focus,.btn-linkedin.active:focus,.open>.dropdown-toggle.btn-linkedin:focus,.btn-linkedin:active.focus,.btn-linkedin.active.focus,.open>.dropdown-toggle.btn-linkedin.focus{color:#fff;background-color:#00405f;border-color:rgba(0,0,0,0.2)}.btn-linkedin:active,.btn-linkedin.active,.open>.dropdown-toggle.btn-linkedin{background-image:none}.btn-linkedin.disabled:hover,.btn-linkedin[disabled]:hover,fieldset[disabled] .btn-linkedin:hover,.btn-linkedin.disabled:focus,.btn-linkedin[disabled]:focus,fieldset[disabled] .btn-linkedin:focus,.btn-linkedin.disabled.focus,.btn-linkedin[disabled].focus,fieldset[disabled] .btn-linkedin.focus{background-color:#007bb6;border-color:rgba(0,0,0,0.2)}.btn-linkedin .badge{color:#007bb6;background-color:#fff}.btn-microsoft{color:#fff;background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft:focus,.btn-microsoft.focus{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:hover{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{color:#fff;background-color:#125acd;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active:hover,.btn-microsoft.active:hover,.open>.dropdown-toggle.btn-microsoft:hover,.btn-microsoft:active:focus,.btn-microsoft.active:focus,.open>.dropdown-toggle.btn-microsoft:focus,.btn-microsoft:active.focus,.btn-microsoft.active.focus,.open>.dropdown-toggle.btn-microsoft.focus{color:#fff;background-color:#0f4bac;border-color:rgba(0,0,0,0.2)}.btn-microsoft:active,.btn-microsoft.active,.open>.dropdown-toggle.btn-microsoft{background-image:none}.btn-microsoft.disabled:hover,.btn-microsoft[disabled]:hover,fieldset[disabled] .btn-microsoft:hover,.btn-microsoft.disabled:focus,.btn-microsoft[disabled]:focus,fieldset[disabled] .btn-microsoft:focus,.btn-microsoft.disabled.focus,.btn-microsoft[disabled].focus,fieldset[disabled] .btn-microsoft.focus{background-color:#2672ec;border-color:rgba(0,0,0,0.2)}.btn-microsoft .badge{color:#2672ec;background-color:#fff}.btn-openid{color:#fff;background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid:focus,.btn-openid.focus{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:hover{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{color:#fff;background-color:#da7908;border-color:rgba(0,0,0,0.2)}.btn-openid:active:hover,.btn-openid.active:hover,.open>.dropdown-toggle.btn-openid:hover,.btn-openid:active:focus,.btn-openid.active:focus,.open>.dropdown-toggle.btn-openid:focus,.btn-openid:active.focus,.btn-openid.active.focus,.open>.dropdown-toggle.btn-openid.focus{color:#fff;background-color:#b86607;border-color:rgba(0,0,0,0.2)}.btn-openid:active,.btn-openid.active,.open>.dropdown-toggle.btn-openid{background-image:none}.btn-openid.disabled:hover,.btn-openid[disabled]:hover,fieldset[disabled] .btn-openid:hover,.btn-openid.disabled:focus,.btn-openid[disabled]:focus,fieldset[disabled] .btn-openid:focus,.btn-openid.disabled.focus,.btn-openid[disabled].focus,fieldset[disabled] .btn-openid.focus{background-color:#f7931e;border-color:rgba(0,0,0,0.2)}.btn-openid .badge{color:#f7931e;background-color:#fff}.btn-pinterest{color:#fff;background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest:focus,.btn-pinterest.focus{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:hover{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{color:#fff;background-color:#9f191f;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active:hover,.btn-pinterest.active:hover,.open>.dropdown-toggle.btn-pinterest:hover,.btn-pinterest:active:focus,.btn-pinterest.active:focus,.open>.dropdown-toggle.btn-pinterest:focus,.btn-pinterest:active.focus,.btn-pinterest.active.focus,.open>.dropdown-toggle.btn-pinterest.focus{color:#fff;background-color:#801419;border-color:rgba(0,0,0,0.2)}.btn-pinterest:active,.btn-pinterest.active,.open>.dropdown-toggle.btn-pinterest{background-image:none}.btn-pinterest.disabled:hover,.btn-pinterest[disabled]:hover,fieldset[disabled] .btn-pinterest:hover,.btn-pinterest.disabled:focus,.btn-pinterest[disabled]:focus,fieldset[disabled] .btn-pinterest:focus,.btn-pinterest.disabled.focus,.btn-pinterest[disabled].focus,fieldset[disabled] .btn-pinterest.focus{background-color:#cb2027;border-color:rgba(0,0,0,0.2)}.btn-pinterest .badge{color:#cb2027;background-color:#fff}.btn-reddit{color:#000;background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit:focus,.btn-reddit.focus{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:hover{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{color:#000;background-color:#bcddff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active:hover,.btn-reddit.active:hover,.open>.dropdown-toggle.btn-reddit:hover,.btn-reddit:active:focus,.btn-reddit.active:focus,.open>.dropdown-toggle.btn-reddit:focus,.btn-reddit:active.focus,.btn-reddit.active.focus,.open>.dropdown-toggle.btn-reddit.focus{color:#000;background-color:#98ccff;border-color:rgba(0,0,0,0.2)}.btn-reddit:active,.btn-reddit.active,.open>.dropdown-toggle.btn-reddit{background-image:none}.btn-reddit.disabled:hover,.btn-reddit[disabled]:hover,fieldset[disabled] .btn-reddit:hover,.btn-reddit.disabled:focus,.btn-reddit[disabled]:focus,fieldset[disabled] .btn-reddit:focus,.btn-reddit.disabled.focus,.btn-reddit[disabled].focus,fieldset[disabled] .btn-reddit.focus{background-color:#eff7ff;border-color:rgba(0,0,0,0.2)}.btn-reddit .badge{color:#eff7ff;background-color:#000}.btn-soundcloud{color:#fff;background-color:#ff5500;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:focus,.btn-soundcloud.focus{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:hover{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{color:#fff;background-color:#c40;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active:hover,.btn-soundcloud.active:hover,.open>.dropdown-toggle.btn-soundcloud:hover,.btn-soundcloud:active:focus,.btn-soundcloud.active:focus,.open>.dropdown-toggle.btn-soundcloud:focus,.btn-soundcloud:active.focus,.btn-soundcloud.active.focus,.open>.dropdown-toggle.btn-soundcloud.focus{color:#fff;background-color:#a83800;border-color:rgba(0,0,0,0.2)}.btn-soundcloud:active,.btn-soundcloud.active,.open>.dropdown-toggle.btn-soundcloud{background-image:none}.btn-soundcloud.disabled:hover,.btn-soundcloud[disabled]:hover,fieldset[disabled] .btn-soundcloud:hover,.btn-soundcloud.disabled:focus,.btn-soundcloud[disabled]:focus,fieldset[disabled] .btn-soundcloud:focus,.btn-soundcloud.disabled.focus,.btn-soundcloud[disabled].focus,fieldset[disabled] .btn-soundcloud.focus{background-color:#ff5500;border-color:rgba(0,0,0,0.2)}.btn-soundcloud .badge{color:#ff5500;background-color:#fff}.btn-tumblr{color:#fff;background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr:focus,.btn-tumblr.focus{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:hover{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{color:#fff;background-color:#1c2d3f;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active:hover,.btn-tumblr.active:hover,.open>.dropdown-toggle.btn-tumblr:hover,.btn-tumblr:active:focus,.btn-tumblr.active:focus,.open>.dropdown-toggle.btn-tumblr:focus,.btn-tumblr:active.focus,.btn-tumblr.active.focus,.open>.dropdown-toggle.btn-tumblr.focus{color:#fff;background-color:#111c26;border-color:rgba(0,0,0,0.2)}.btn-tumblr:active,.btn-tumblr.active,.open>.dropdown-toggle.btn-tumblr{background-image:none}.btn-tumblr.disabled:hover,.btn-tumblr[disabled]:hover,fieldset[disabled] .btn-tumblr:hover,.btn-tumblr.disabled:focus,.btn-tumblr[disabled]:focus,fieldset[disabled] .btn-tumblr:focus,.btn-tumblr.disabled.focus,.btn-tumblr[disabled].focus,fieldset[disabled] .btn-tumblr.focus{background-color:#2c4762;border-color:rgba(0,0,0,0.2)}.btn-tumblr .badge{color:#2c4762;background-color:#fff}.btn-twitter{color:#fff;background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter:focus,.btn-twitter.focus{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:hover{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{color:#fff;background-color:#2795e9;border-color:rgba(0,0,0,0.2)}.btn-twitter:active:hover,.btn-twitter.active:hover,.open>.dropdown-toggle.btn-twitter:hover,.btn-twitter:active:focus,.btn-twitter.active:focus,.open>.dropdown-toggle.btn-twitter:focus,.btn-twitter:active.focus,.btn-twitter.active.focus,.open>.dropdown-toggle.btn-twitter.focus{color:#fff;background-color:#1583d7;border-color:rgba(0,0,0,0.2)}.btn-twitter:active,.btn-twitter.active,.open>.dropdown-toggle.btn-twitter{background-image:none}.btn-twitter.disabled:hover,.btn-twitter[disabled]:hover,fieldset[disabled] .btn-twitter:hover,.btn-twitter.disabled:focus,.btn-twitter[disabled]:focus,fieldset[disabled] .btn-twitter:focus,.btn-twitter.disabled.focus,.btn-twitter[disabled].focus,fieldset[disabled] .btn-twitter.focus{background-color:#55acee;border-color:rgba(0,0,0,0.2)}.btn-twitter .badge{color:#55acee;background-color:#fff}.btn-vimeo{color:#fff;background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo:focus,.btn-vimeo.focus{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:hover{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{color:#fff;background-color:#1295bf;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active:hover,.btn-vimeo.active:hover,.open>.dropdown-toggle.btn-vimeo:hover,.btn-vimeo:active:focus,.btn-vimeo.active:focus,.open>.dropdown-toggle.btn-vimeo:focus,.btn-vimeo:active.focus,.btn-vimeo.active.focus,.open>.dropdown-toggle.btn-vimeo.focus{color:#fff;background-color:#0f7b9f;border-color:rgba(0,0,0,0.2)}.btn-vimeo:active,.btn-vimeo.active,.open>.dropdown-toggle.btn-vimeo{background-image:none}.btn-vimeo.disabled:hover,.btn-vimeo[disabled]:hover,fieldset[disabled] .btn-vimeo:hover,.btn-vimeo.disabled:focus,.btn-vimeo[disabled]:focus,fieldset[disabled] .btn-vimeo:focus,.btn-vimeo.disabled.focus,.btn-vimeo[disabled].focus,fieldset[disabled] .btn-vimeo.focus{background-color:#1ab7ea;border-color:rgba(0,0,0,0.2)}.btn-vimeo .badge{color:#1ab7ea;background-color:#fff}.btn-vk{color:#fff;background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk:focus,.btn-vk.focus{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:hover{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{color:#fff;background-color:#466482;border-color:rgba(0,0,0,0.2)}.btn-vk:active:hover,.btn-vk.active:hover,.open>.dropdown-toggle.btn-vk:hover,.btn-vk:active:focus,.btn-vk.active:focus,.open>.dropdown-toggle.btn-vk:focus,.btn-vk:active.focus,.btn-vk.active.focus,.open>.dropdown-toggle.btn-vk.focus{color:#fff;background-color:#3a526b;border-color:rgba(0,0,0,0.2)}.btn-vk:active,.btn-vk.active,.open>.dropdown-toggle.btn-vk{background-image:none}.btn-vk.disabled:hover,.btn-vk[disabled]:hover,fieldset[disabled] .btn-vk:hover,.btn-vk.disabled:focus,.btn-vk[disabled]:focus,fieldset[disabled] .btn-vk:focus,.btn-vk.disabled.focus,.btn-vk[disabled].focus,fieldset[disabled] .btn-vk.focus{background-color:#587ea3;border-color:rgba(0,0,0,0.2)}.btn-vk .badge{color:#587ea3;background-color:#fff}.btn-yahoo{color:#fff;background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:focus,.btn-yahoo.focus{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:hover{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{color:#fff;background-color:#500a6f;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active:hover,.btn-yahoo.active:hover,.open>.dropdown-toggle.btn-yahoo:hover,.btn-yahoo:active:focus,.btn-yahoo.active:focus,.open>.dropdown-toggle.btn-yahoo:focus,.btn-yahoo:active.focus,.btn-yahoo.active.focus,.open>.dropdown-toggle.btn-yahoo.focus{color:#fff;background-color:#39074e;border-color:rgba(0,0,0,0.2)}.btn-yahoo:active,.btn-yahoo.active,.open>.dropdown-toggle.btn-yahoo{background-image:none}.btn-yahoo.disabled:hover,.btn-yahoo[disabled]:hover,fieldset[disabled] .btn-yahoo:hover,.btn-yahoo.disabled:focus,.btn-yahoo[disabled]:focus,fieldset[disabled] .btn-yahoo:focus,.btn-yahoo.disabled.focus,.btn-yahoo[disabled].focus,fieldset[disabled] .btn-yahoo.focus{background-color:#720e9e;border-color:rgba(0,0,0,0.2)}.btn-yahoo .badge{color:#720e9e;background-color:#fff}.fc-button{background:#f4f4f4;background-image:none;color:#444;border-color:#ddd;border-bottom-color:#ddd}.fc-button:hover,.fc-button:active,.fc-button.hover{background-color:#e9e9e9}.fc-header-title h2{font-size:15px;line-height:1.6em;color:#666;margin-left:10px}.fc-header-right{padding-right:10px}.fc-header-left{padding-left:10px}.fc-widget-header{background:#fafafa}.fc-grid{width:100%;border:0}.fc-widget-header:first-of-type,.fc-widget-content:first-of-type{border-left:0;border-right:0}.fc-widget-header:last-of-type,.fc-widget-content:last-of-type{border-right:0}.fc-toolbar{padding:10px;margin:0}.fc-day-number{font-size:20px;font-weight:300;padding-right:10px}.fc-color-picker{list-style:none;margin:0;padding:0}.fc-color-picker>li{float:left;font-size:30px;margin-right:5px;line-height:30px}.fc-color-picker>li .fa{-webkit-transition:-webkit-transform linear .3s;-moz-transition:-moz-transform linear .3s;-o-transition:-o-transform linear .3s;transition:transform linear .3s}.fc-color-picker>li .fa:hover{-webkit-transform:rotate(30deg);-ms-transform:rotate(30deg);-o-transform:rotate(30deg);transform:rotate(30deg)}#add-new-event{-webkit-transition:all linear .3s;-o-transition:all linear .3s;transition:all linear .3s}.external-event{padding:5px 10px;font-weight:bold;margin-bottom:4px;box-shadow:0 1px 1px rgba(0,0,0,0.1);text-shadow:0 1px 1px rgba(0,0,0,0.1);border-radius:3px;cursor:move}.external-event:hover{box-shadow:inset 0 0 90px rgba(0,0,0,0.2)}.select2-container--default.select2-container--focus,.select2-selection.select2-container--focus,.select2-container--default:focus,.select2-selection:focus,.select2-container--default:active,.select2-selection:active{outline:none}.select2-container--default .select2-selection--single,.select2-selection .select2-selection--single{border:1px solid #d2d6de;border-radius:0;padding:6px 12px;height:34px}.select2-container--default.select2-container--open{border-color:#3c8dbc}.select2-dropdown{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#3c8dbc;color:white}.select2-results__option{padding:6px 12px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{padding-left:0;padding-right:0;height:auto;margin-top:-4px}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:6px;padding-left:20px}.select2-container--default .select2-selection--single .select2-selection__arrow{height:28px;right:3px}.select2-container--default .select2-selection--single .select2-selection__arrow b{margin-top:0}.select2-dropdown .select2-search__field,.select2-search--inline .select2-search__field{border:1px solid #d2d6de}.select2-dropdown .select2-search__field:focus,.select2-search--inline .select2-search__field:focus{outline:none}.select2-container--default.select2-container--focus .select2-selection--multiple,.select2-container--default .select2-search--dropdown .select2-search__field{border-color:#3c8dbc !important}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option[aria-selected=true],.select2-container--default .select2-results__option[aria-selected=true]:hover{color:#444}.select2-container--default .select2-selection--multiple{border:1px solid #d2d6de;border-radius:0}.select2-container--default .select2-selection--multiple:focus{border-color:#3c8dbc}.select2-container--default.select2-container--focus .select2-selection--multiple{border-color:#d2d6de}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc;border-color:#367fa9;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}.box .datepicker-inline,.box .datepicker-inline .datepicker-days,.box .datepicker-inline>table,.box .datepicker-inline .datepicker-days>table{width:100%}.box .datepicker-inline td:hover,.box .datepicker-inline .datepicker-days td:hover,.box .datepicker-inline>table td:hover,.box .datepicker-inline .datepicker-days>table td:hover{background-color:rgba(255,255,255,0.3)}.box .datepicker-inline td.day.old,.box .datepicker-inline .datepicker-days td.day.old,.box .datepicker-inline>table td.day.old,.box .datepicker-inline .datepicker-days>table td.day.old,.box .datepicker-inline td.day.new,.box .datepicker-inline .datepicker-days td.day.new,.box .datepicker-inline>table td.day.new,.box .datepicker-inline .datepicker-days>table td.day.new{color:#777}.pad{padding:10px}.margin{margin:10px}.margin-bottom{margin-bottom:20px}.margin-bottom-none{margin-bottom:0}.margin-r-5{margin-right:5px}.inline{display:inline}.description-block{display:block;margin:10px 0;text-align:center}.description-block.margin-bottom{margin-bottom:25px}.description-block>.description-header{margin:0;padding:0;font-weight:600;font-size:16px}.description-block>.description-text{text-transform:uppercase}.bg-red,.bg-yellow,.bg-aqua,.bg-blue,.bg-light-blue,.bg-green,.bg-navy,.bg-teal,.bg-olive,.bg-lime,.bg-orange,.bg-fuchsia,.bg-purple,.bg-maroon,.bg-black,.bg-red-active,.bg-yellow-active,.bg-aqua-active,.bg-blue-active,.bg-light-blue-active,.bg-green-active,.bg-navy-active,.bg-teal-active,.bg-olive-active,.bg-lime-active,.bg-orange-active,.bg-fuchsia-active,.bg-purple-active,.bg-maroon-active,.bg-black-active,.callout.callout-danger,.callout.callout-warning,.callout.callout-info,.callout.callout-success,.alert-success,.alert-danger,.alert-error,.alert-warning,.alert-info,.label-danger,.label-info,.label-warning,.label-primary,.label-success,.modal-primary .modal-body,.modal-primary .modal-header,.modal-primary .modal-footer,.modal-warning .modal-body,.modal-warning .modal-header,.modal-warning .modal-footer,.modal-info .modal-body,.modal-info .modal-header,.modal-info .modal-footer,.modal-success .modal-body,.modal-success .modal-header,.modal-success .modal-footer,.modal-danger .modal-body,.modal-danger .modal-header,.modal-danger .modal-footer{color:#fff !important}.bg-gray{color:#000;background-color:#d2d6de !important}.bg-gray-light{background-color:#f7f7f7}.bg-black{background-color:#111 !important}.bg-red,.callout.callout-danger,.alert-danger,.alert-error,.label-danger,.modal-danger .modal-body{background-color:#dd4b39 !important}.bg-yellow,.callout.callout-warning,.alert-warning,.label-warning,.modal-warning .modal-body{background-color:#f39c12 !important}.bg-aqua,.callout.callout-info,.alert-info,.label-info,.modal-info .modal-body{background-color:#00c0ef !important}.bg-blue{background-color:#0073b7 !important}.bg-light-blue,.label-primary,.modal-primary .modal-body{background-color:#3c8dbc !important}.bg-green,.callout.callout-success,.alert-success,.label-success,.modal-success .modal-body{background-color:#00a65a !important}.bg-navy{background-color:#001F3F !important}.bg-teal{background-color:#39CCCC !important}.bg-olive{background-color:#3D9970 !important}.bg-lime{background-color:#01FF70 !important}.bg-orange{background-color:#FF851B !important}.bg-fuchsia{background-color:#F012BE !important}.bg-purple{background-color:#605ca8 !important}.bg-maroon{background-color:#D81B60 !important}.bg-gray-active{color:#000;background-color:#b5bbc8 !important}.bg-black-active{background-color:#000 !important}.bg-red-active,.modal-danger .modal-header,.modal-danger .modal-footer{background-color:#d33724 !important}.bg-yellow-active,.modal-warning .modal-header,.modal-warning .modal-footer{background-color:#db8b0b !important}.bg-aqua-active,.modal-info .modal-header,.modal-info .modal-footer{background-color:#00a7d0 !important}.bg-blue-active{background-color:#005384 !important}.bg-light-blue-active,.modal-primary .modal-header,.modal-primary .modal-footer{background-color:#357ca5 !important}.bg-green-active,.modal-success .modal-header,.modal-success .modal-footer{background-color:#008d4c !important}.bg-navy-active{background-color:#001a35 !important}.bg-teal-active{background-color:#30bbbb !important}.bg-olive-active{background-color:#368763 !important}.bg-lime-active{background-color:#00e765 !important}.bg-orange-active{background-color:#ff7701 !important}.bg-fuchsia-active{background-color:#db0ead !important}.bg-purple-active{background-color:#555299 !important}.bg-maroon-active{background-color:#ca195a !important}[class^="bg-"].disabled{opacity:.65;filter:alpha(opacity=65)}.text-red{color:#dd4b39 !important}.text-yellow{color:#f39c12 !important}.text-aqua{color:#00c0ef !important}.text-blue{color:#0073b7 !important}.text-black{color:#111 !important}.text-light-blue{color:#3c8dbc !important}.text-green{color:#00a65a !important}.text-gray{color:#d2d6de !important}.text-navy{color:#001F3F !important}.text-teal{color:#39CCCC !important}.text-olive{color:#3D9970 !important}.text-lime{color:#01FF70 !important}.text-orange{color:#FF851B !important}.text-fuchsia{color:#F012BE !important}.text-purple{color:#605ca8 !important}.text-maroon{color:#D81B60 !important}.link-muted{color:#7a869d}.link-muted:hover,.link-muted:focus{color:#606c84}.link-black{color:#666}.link-black:hover,.link-black:focus{color:#999}.hide{display:none !important}.no-border{border:0 !important}.no-padding{padding:0 !important}.no-margin{margin:0 !important}.no-shadow{box-shadow:none !important}.list-unstyled,.chart-legend,.contacts-list,.users-list,.mailbox-attachments{list-style:none;margin:0;padding:0}.list-group-unbordered>.list-group-item{border-left:0;border-right:0;border-radius:0;padding-left:0;padding-right:0}.flat{border-radius:0 !important}.text-bold,.text-bold.table td,.text-bold.table th{font-weight:700}.text-sm{font-size:12px}.jqstooltip{padding:5px !important;width:auto !important;height:auto !important}.bg-teal-gradient{background:#39CCCC !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #39CCCC), color-stop(1, #7adddd)) !important;background:-ms-linear-gradient(bottom, #39CCCC, #7adddd) !important;background:-moz-linear-gradient(center bottom, #39CCCC 0%, #7adddd 100%) !important;background:-o-linear-gradient(#7adddd, #39CCCC) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39CCCC', GradientType=0) !important;color:#fff}.bg-light-blue-gradient{background:#3c8dbc !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;background:-ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;background:-moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important;background:-o-linear-gradient(#67a8ce, #3c8dbc) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;color:#fff}.bg-blue-gradient{background:#0073b7 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;background:-ms-linear-gradient(bottom, #0073b7, #0089db) !important;background:-moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important;background:-o-linear-gradient(#0089db, #0073b7) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;color:#fff}.bg-aqua-gradient{background:#00c0ef !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;background:-ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;background:-moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;background:-o-linear-gradient(#14d1ff, #00c0ef) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;color:#fff}.bg-yellow-gradient{background:#f39c12 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;background:-ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;background:-moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;background:-o-linear-gradient(#f7bc60, #f39c12) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;color:#fff}.bg-purple-gradient{background:#605ca8 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;background:-ms-linear-gradient(bottom, #605ca8, #9491c4) !important;background:-moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;background:-o-linear-gradient(#9491c4, #605ca8) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;color:#fff}.bg-green-gradient{background:#00a65a !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;background:-ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;background:-moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;background:-o-linear-gradient(#00ca6d, #00a65a) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;color:#fff}.bg-red-gradient{background:#dd4b39 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;background:-ms-linear-gradient(bottom, #dd4b39, #e47365) !important;background:-moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;background:-o-linear-gradient(#e47365, #dd4b39) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;color:#fff}.bg-black-gradient{background:#111 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #111), color-stop(1, #2b2b2b)) !important;background:-ms-linear-gradient(bottom, #111, #2b2b2b) !important;background:-moz-linear-gradient(center bottom, #111 0%, #2b2b2b 100%) !important;background:-o-linear-gradient(#2b2b2b, #111) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111', GradientType=0) !important;color:#fff}.bg-maroon-gradient{background:#D81B60 !important;background:-webkit-gradient(linear, left bottom, left top, color-stop(0, #D81B60), color-stop(1, #e73f7c)) !important;background:-ms-linear-gradient(bottom, #D81B60, #e73f7c) !important;background:-moz-linear-gradient(center bottom, #D81B60 0%, #e73f7c 100%) !important;background:-o-linear-gradient(#e73f7c, #D81B60) !important;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#D81B60', GradientType=0) !important;color:#fff}.description-block .description-icon{font-size:16px}.no-pad-top{padding-top:0}.position-static{position:static !important}.list-header{font-size:15px;padding:10px 4px;font-weight:bold;color:#666}.list-seperator{height:1px;background:#f4f4f4;margin:15px 0 9px 0}.list-link>a{padding:4px;color:#777}.list-link>a:hover{color:#222}.font-light{font-weight:300}.user-block:before,.user-block:after{content:" ";display:table}.user-block:after{clear:both}.user-block img{width:40px;height:40px;float:left}.user-block .username,.user-block .description,.user-block .comment{display:block;margin-left:50px}.user-block .username{font-size:16px;font-weight:600}.user-block .description{color:#999;font-size:13px}.user-block.user-block-sm .username,.user-block.user-block-sm .description,.user-block.user-block-sm .comment{margin-left:40px}.user-block.user-block-sm .username{font-size:14px}.img-sm,.img-md,.img-lg,.box-comments .box-comment img,.user-block.user-block-sm img{float:left}.img-sm,.box-comments .box-comment img,.user-block.user-block-sm img{width:30px !important;height:30px !important}.img-sm+.img-push{margin-left:40px}.img-md{width:60px;height:60px}.img-md+.img-push{margin-left:70px}.img-lg{width:100px;height:100px}.img-lg+.img-push{margin-left:110px}.img-bordered{border:3px solid #d2d6de;padding:3px}.img-bordered-sm{border:2px solid #d2d6de;padding:2px}.attachment-block{border:1px solid #f4f4f4;padding:5px;margin-bottom:10px;background:#f7f7f7}.attachment-block .attachment-img{max-width:100px;max-height:100px;height:auto;float:left}.attachment-block .attachment-pushed{margin-left:110px}.attachment-block .attachment-heading{margin:0}.attachment-block .attachment-text{color:#555}.connectedSortable{min-height:100px}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sort-highlight{background:#f4f4f4;border:1px dashed #ddd;margin-bottom:10px}.full-opacity-hover{opacity:.65;filter:alpha(opacity=65)}.full-opacity-hover:hover{opacity:1;filter:alpha(opacity=100)}.chart{position:relative;overflow:hidden;width:100%}.chart svg,.chart canvas{width:100% !important}hr{border-top:1px solid #555}#red .slider-selection{background:#f56954}#blue .slider-selection{background:#3c8dbc}#green .slider-selection{background:#00a65a}#yellow .slider-selection{background:#f39c12}#aqua .slider-selection{background:#00c0ef}#purple .slider-selection{background:#932ab6}@media print{.no-print,.main-sidebar,.left-side,.main-header,.content-header{display:none !important}.content-wrapper,.right-side,.main-footer{margin-left:0 !important;min-height:0 !important;-webkit-transform:translate(0, 0) !important;-ms-transform:translate(0, 0) !important;-o-transform:translate(0, 0) !important;transform:translate(0, 0) !important}.fixed .content-wrapper,.fixed .right-side{padding-top:0 !important}.invoice{width:100%;border:0;margin:0;padding:0}.invoice-col{float:left;width:33.3333333%}.table-responsive{overflow:auto}.table-responsive>.table tr th,.table-responsive>.table tr td{white-space:normal !important}} \ No newline at end of file diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css new file mode 100644 index 000000000..5c98c67fa --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/css/skins/_all-skins.min.css @@ -0,0 +1 @@ +.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header .logo{background-color:#367fa9;color:#fff;border-bottom:0 solid transparent}.skin-blue .main-header .logo:hover{background-color:#357ca5}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .wrapper,.skin-blue .main-sidebar,.skin-blue .left-side{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li:hover>a,.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-blue .sidebar-menu>li.active>a{border-left-color:#3c8dbc}.skin-blue .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-blue .sidebar-menu .treeview-menu>li.active>a,.skin-blue .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-blue .sidebar-form input[type="text"],.skin-blue .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-blue .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue .sidebar-form input[type="text"]:focus,.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header .navbar{background-color:#3c8dbc}.skin-blue-light .main-header .navbar .nav>li>a{color:#fff}.skin-blue-light .main-header .navbar .nav>li>a:hover,.skin-blue-light .main-header .navbar .nav>li>a:active,.skin-blue-light .main-header .navbar .nav>li>a:focus,.skin-blue-light .main-header .navbar .nav .open>a,.skin-blue-light .main-header .navbar .nav .open>a:hover,.skin-blue-light .main-header .navbar .nav .open>a:focus,.skin-blue-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-blue-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue-light .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-blue-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-blue-light .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue-light .main-header .logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue-light .main-header .logo:hover{background-color:#3b8ab8}.skin-blue-light .main-header li.user-header{background-color:#3c8dbc}.skin-blue-light .content-header{background:transparent}.skin-blue-light .wrapper,.skin-blue-light .main-sidebar,.skin-blue-light .left-side{background-color:#f9fafc}.skin-blue-light .main-sidebar{border-right:1px solid #d2d6de}.skin-blue-light .user-panel>.info,.skin-blue-light .user-panel>.info>a{color:#444}.skin-blue-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-blue-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-blue-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-blue-light .sidebar-menu>li:hover>a,.skin-blue-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-blue-light .sidebar-menu>li.active{border-left-color:#3c8dbc}.skin-blue-light .sidebar-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-blue-light .sidebar a{color:#444}.skin-blue-light .sidebar a:hover{text-decoration:none}.skin-blue-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a,.skin-blue-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-blue-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-blue-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-blue-light .sidebar-form input[type="text"],.skin-blue-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-blue-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-blue-light .sidebar-form input[type="text"]:focus,.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-blue-light .main-footer{border-top-color:#d2d6de}.skin-blue.layout-top-nav .main-header>.logo{background-color:#3c8dbc;color:#fff;border-bottom:0 solid transparent}.skin-blue.layout-top-nav .main-header>.logo:hover{background-color:#3b8ab8}.skin-black .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black .main-header .navbar-toggle{color:#333}.skin-black .main-header .navbar-brand{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar{background-color:#fff}.skin-black .main-header .navbar .nav>li>a{color:#333}.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black .main-header .navbar .sidebar-toggle{color:#333}.skin-black .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-nav>li>a{border-right:1px solid #eee}.skin-black .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black .main-header .navbar .navbar-right>li>a{border-left:1px solid #eee;border-right-width:0}.skin-black .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #eee}.skin-black .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black .main-header .logo:hover{background-color:#1f1f1f}}.skin-black .main-header li.user-header{background-color:#222}.skin-black .content-header{background:transparent;box-shadow:none}.skin-black .wrapper,.skin-black .main-sidebar,.skin-black .left-side{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li:hover>a,.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-black .sidebar-menu>li.active>a{border-left-color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-black .sidebar-menu .treeview-menu>li.active>a,.skin-black .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-black .sidebar-form input[type="text"],.skin-black .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-black .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black .sidebar-form input[type="text"]:focus,.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-black .pace .pace-progress{background:#222}.skin-black .pace .pace-activity{border-top-color:#222;border-left-color:#222}.skin-black-light .main-header{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.skin-black-light .main-header .navbar-toggle{color:#333}.skin-black-light .main-header .navbar-brand{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar{background-color:#fff}.skin-black-light .main-header .navbar .nav>li>a{color:#333}.skin-black-light .main-header .navbar .nav>li>a:hover,.skin-black-light .main-header .navbar .nav>li>a:active,.skin-black-light .main-header .navbar .nav>li>a:focus,.skin-black-light .main-header .navbar .nav .open>a,.skin-black-light .main-header .navbar .nav .open>a:hover,.skin-black-light .main-header .navbar .nav .open>a:focus,.skin-black-light .main-header .navbar .nav>.active>a{background:#fff;color:#999}.skin-black-light .main-header .navbar .sidebar-toggle{color:#333}.skin-black-light .main-header .navbar .sidebar-toggle:hover{color:#999;background:#fff}.skin-black-light .main-header .navbar>.sidebar-toggle{color:#333;border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-nav>li>a{border-right:1px solid #d2d6de}.skin-black-light .main-header .navbar .navbar-custom-menu .navbar-nav>li>a,.skin-black-light .main-header .navbar .navbar-right>li>a{border-left:1px solid #d2d6de;border-right-width:0}.skin-black-light .main-header .logo{background-color:#fff;color:#333;border-bottom:0 solid transparent;border-right:1px solid #d2d6de}.skin-black-light .main-header .logo:hover{background-color:#fcfcfc}@media (max-width:767px){.skin-black-light .main-header .logo{background-color:#222;color:#fff;border-bottom:0 solid transparent;border-right:none}.skin-black-light .main-header .logo:hover{background-color:#1f1f1f}}.skin-black-light .main-header li.user-header{background-color:#222}.skin-black-light .content-header{background:transparent;box-shadow:none}.skin-black-light .wrapper,.skin-black-light .main-sidebar,.skin-black-light .left-side{background-color:#f9fafc}.skin-black-light .main-sidebar{border-right:1px solid #d2d6de}.skin-black-light .user-panel>.info,.skin-black-light .user-panel>.info>a{color:#444}.skin-black-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-black-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-black-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-black-light .sidebar-menu>li:hover>a,.skin-black-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-black-light .sidebar-menu>li.active{border-left-color:#fff}.skin-black-light .sidebar-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-black-light .sidebar a{color:#444}.skin-black-light .sidebar a:hover{text-decoration:none}.skin-black-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-black-light .sidebar-menu .treeview-menu>li.active>a,.skin-black-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-black-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-black-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-black-light .sidebar-form input[type="text"],.skin-black-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-black-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-black-light .sidebar-form input[type="text"]:focus,.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header .logo{background-color:#008d4c;color:#fff;border-bottom:0 solid transparent}.skin-green .main-header .logo:hover{background-color:#008749}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .wrapper,.skin-green .main-sidebar,.skin-green .left-side{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li:hover>a,.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-green .sidebar-menu>li.active>a{border-left-color:#00a65a}.skin-green .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-green .sidebar-menu .treeview-menu>li.active>a,.skin-green .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-green .sidebar-form input[type="text"],.skin-green .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-green .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green .sidebar-form input[type="text"]:focus,.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-green-light .main-header .navbar{background-color:#00a65a}.skin-green-light .main-header .navbar .nav>li>a{color:#fff}.skin-green-light .main-header .navbar .nav>li>a:hover,.skin-green-light .main-header .navbar .nav>li>a:active,.skin-green-light .main-header .navbar .nav>li>a:focus,.skin-green-light .main-header .navbar .nav .open>a,.skin-green-light .main-header .navbar .nav .open>a:hover,.skin-green-light .main-header .navbar .nav .open>a:focus,.skin-green-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-green-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-green-light .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-green-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-green-light .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green-light .main-header .logo{background-color:#00a65a;color:#fff;border-bottom:0 solid transparent}.skin-green-light .main-header .logo:hover{background-color:#00a157}.skin-green-light .main-header li.user-header{background-color:#00a65a}.skin-green-light .content-header{background:transparent}.skin-green-light .wrapper,.skin-green-light .main-sidebar,.skin-green-light .left-side{background-color:#f9fafc}.skin-green-light .main-sidebar{border-right:1px solid #d2d6de}.skin-green-light .user-panel>.info,.skin-green-light .user-panel>.info>a{color:#444}.skin-green-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-green-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-green-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-green-light .sidebar-menu>li:hover>a,.skin-green-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-green-light .sidebar-menu>li.active{border-left-color:#00a65a}.skin-green-light .sidebar-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-green-light .sidebar a{color:#444}.skin-green-light .sidebar a:hover{text-decoration:none}.skin-green-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-green-light .sidebar-menu .treeview-menu>li.active>a,.skin-green-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-green-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-green-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-green-light .sidebar-form input[type="text"],.skin-green-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-green-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-green-light .sidebar-form input[type="text"]:focus,.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-red .main-header .navbar{background-color:#dd4b39}.skin-red .main-header .navbar .nav>li>a{color:#fff}.skin-red .main-header .navbar .nav>li>a:hover,.skin-red .main-header .navbar .nav>li>a:active,.skin-red .main-header .navbar .nav>li>a:focus,.skin-red .main-header .navbar .nav .open>a,.skin-red .main-header .navbar .nav .open>a:hover,.skin-red .main-header .navbar .nav .open>a:focus,.skin-red .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red .main-header .navbar .sidebar-toggle{color:#fff}.skin-red .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red .main-header .logo{background-color:#d73925;color:#fff;border-bottom:0 solid transparent}.skin-red .main-header .logo:hover{background-color:#d33724}.skin-red .main-header li.user-header{background-color:#dd4b39}.skin-red .content-header{background:transparent}.skin-red .wrapper,.skin-red .main-sidebar,.skin-red .left-side{background-color:#222d32}.skin-red .user-panel>.info,.skin-red .user-panel>.info>a{color:#fff}.skin-red .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-red .sidebar-menu>li>a{border-left:3px solid transparent}.skin-red .sidebar-menu>li:hover>a,.skin-red .sidebar-menu>li.active>a,.skin-red .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-red .sidebar-menu>li.active>a{border-left-color:#dd4b39}.skin-red .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-red .sidebar a{color:#b8c7ce}.skin-red .sidebar a:hover{text-decoration:none}.skin-red .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-red .sidebar-menu .treeview-menu>li.active>a,.skin-red .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-red .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-red .sidebar-form input[type="text"],.skin-red .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-red .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red .sidebar-form input[type="text"]:focus,.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-red-light .main-header .navbar{background-color:#dd4b39}.skin-red-light .main-header .navbar .nav>li>a{color:#fff}.skin-red-light .main-header .navbar .nav>li>a:hover,.skin-red-light .main-header .navbar .nav>li>a:active,.skin-red-light .main-header .navbar .nav>li>a:focus,.skin-red-light .main-header .navbar .nav .open>a,.skin-red-light .main-header .navbar .nav .open>a:hover,.skin-red-light .main-header .navbar .nav .open>a:focus,.skin-red-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-red-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-red-light .main-header .navbar .sidebar-toggle:hover{background-color:#d73925}@media (max-width:767px){.skin-red-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-red-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-red-light .main-header .navbar .dropdown-menu li a:hover{background:#d73925}}.skin-red-light .main-header .logo{background-color:#dd4b39;color:#fff;border-bottom:0 solid transparent}.skin-red-light .main-header .logo:hover{background-color:#dc4735}.skin-red-light .main-header li.user-header{background-color:#dd4b39}.skin-red-light .content-header{background:transparent}.skin-red-light .wrapper,.skin-red-light .main-sidebar,.skin-red-light .left-side{background-color:#f9fafc}.skin-red-light .main-sidebar{border-right:1px solid #d2d6de}.skin-red-light .user-panel>.info,.skin-red-light .user-panel>.info>a{color:#444}.skin-red-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-red-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-red-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-red-light .sidebar-menu>li:hover>a,.skin-red-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-red-light .sidebar-menu>li.active{border-left-color:#dd4b39}.skin-red-light .sidebar-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-red-light .sidebar a{color:#444}.skin-red-light .sidebar a:hover{text-decoration:none}.skin-red-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-red-light .sidebar-menu .treeview-menu>li.active>a,.skin-red-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-red-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-red-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-red-light .sidebar-form input[type="text"],.skin-red-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-red-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-red-light .sidebar-form input[type="text"]:focus,.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-red-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-red-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-yellow .main-header .navbar{background-color:#f39c12}.skin-yellow .main-header .navbar .nav>li>a{color:#fff}.skin-yellow .main-header .navbar .nav>li>a:hover,.skin-yellow .main-header .navbar .nav>li>a:active,.skin-yellow .main-header .navbar .nav>li>a:focus,.skin-yellow .main-header .navbar .nav .open>a,.skin-yellow .main-header .navbar .nav .open>a:hover,.skin-yellow .main-header .navbar .nav .open>a:focus,.skin-yellow .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow .main-header .logo{background-color:#e08e0b;color:#fff;border-bottom:0 solid transparent}.skin-yellow .main-header .logo:hover{background-color:#db8b0b}.skin-yellow .main-header li.user-header{background-color:#f39c12}.skin-yellow .content-header{background:transparent}.skin-yellow .wrapper,.skin-yellow .main-sidebar,.skin-yellow .left-side{background-color:#222d32}.skin-yellow .user-panel>.info,.skin-yellow .user-panel>.info>a{color:#fff}.skin-yellow .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-yellow .sidebar-menu>li>a{border-left:3px solid transparent}.skin-yellow .sidebar-menu>li:hover>a,.skin-yellow .sidebar-menu>li.active>a,.skin-yellow .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-yellow .sidebar-menu>li.active>a{border-left-color:#f39c12}.skin-yellow .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-yellow .sidebar a{color:#b8c7ce}.skin-yellow .sidebar a:hover{text-decoration:none}.skin-yellow .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-yellow .sidebar-menu .treeview-menu>li.active>a,.skin-yellow .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-yellow .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-yellow .sidebar-form input[type="text"],.skin-yellow .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-yellow .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow .sidebar-form input[type="text"]:focus,.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-yellow-light .main-header .navbar{background-color:#f39c12}.skin-yellow-light .main-header .navbar .nav>li>a{color:#fff}.skin-yellow-light .main-header .navbar .nav>li>a:hover,.skin-yellow-light .main-header .navbar .nav>li>a:active,.skin-yellow-light .main-header .navbar .nav>li>a:focus,.skin-yellow-light .main-header .navbar .nav .open>a,.skin-yellow-light .main-header .navbar .nav .open>a:hover,.skin-yellow-light .main-header .navbar .nav .open>a:focus,.skin-yellow-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-yellow-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-yellow-light .main-header .navbar .sidebar-toggle:hover{background-color:#e08e0b}@media (max-width:767px){.skin-yellow-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-yellow-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-yellow-light .main-header .navbar .dropdown-menu li a:hover{background:#e08e0b}}.skin-yellow-light .main-header .logo{background-color:#f39c12;color:#fff;border-bottom:0 solid transparent}.skin-yellow-light .main-header .logo:hover{background-color:#f39a0d}.skin-yellow-light .main-header li.user-header{background-color:#f39c12}.skin-yellow-light .content-header{background:transparent}.skin-yellow-light .wrapper,.skin-yellow-light .main-sidebar,.skin-yellow-light .left-side{background-color:#f9fafc}.skin-yellow-light .main-sidebar{border-right:1px solid #d2d6de}.skin-yellow-light .user-panel>.info,.skin-yellow-light .user-panel>.info>a{color:#444}.skin-yellow-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-yellow-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-yellow-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-yellow-light .sidebar-menu>li:hover>a,.skin-yellow-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-yellow-light .sidebar-menu>li.active{border-left-color:#f39c12}.skin-yellow-light .sidebar-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-yellow-light .sidebar a{color:#444}.skin-yellow-light .sidebar a:hover{text-decoration:none}.skin-yellow-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a,.skin-yellow-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-yellow-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-yellow-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-yellow-light .sidebar-form input[type="text"],.skin-yellow-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-yellow-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-yellow-light .sidebar-form input[type="text"]:focus,.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-yellow-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-yellow-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}}.skin-purple .main-header .navbar{background-color:#605ca8}.skin-purple .main-header .navbar .nav>li>a{color:#fff}.skin-purple .main-header .navbar .nav>li>a:hover,.skin-purple .main-header .navbar .nav>li>a:active,.skin-purple .main-header .navbar .nav>li>a:focus,.skin-purple .main-header .navbar .nav .open>a,.skin-purple .main-header .navbar .nav .open>a:hover,.skin-purple .main-header .navbar .nav .open>a:focus,.skin-purple .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple .main-header .logo{background-color:#555299;color:#fff;border-bottom:0 solid transparent}.skin-purple .main-header .logo:hover{background-color:#545096}.skin-purple .main-header li.user-header{background-color:#605ca8}.skin-purple .content-header{background:transparent}.skin-purple .wrapper,.skin-purple .main-sidebar,.skin-purple .left-side{background-color:#222d32}.skin-purple .user-panel>.info,.skin-purple .user-panel>.info>a{color:#fff}.skin-purple .sidebar-menu>li.header{color:#4b646f;background:#1a2226}.skin-purple .sidebar-menu>li>a{border-left:3px solid transparent}.skin-purple .sidebar-menu>li:hover>a,.skin-purple .sidebar-menu>li.active>a,.skin-purple .sidebar-menu>li.menu-open>a{color:#fff;background:#1e282c}.skin-purple .sidebar-menu>li.active>a{border-left-color:#605ca8}.skin-purple .sidebar-menu>li>.treeview-menu{margin:0 1px;background:#2c3b41}.skin-purple .sidebar a{color:#b8c7ce}.skin-purple .sidebar a:hover{text-decoration:none}.skin-purple .sidebar-menu .treeview-menu>li>a{color:#8aa4af}.skin-purple .sidebar-menu .treeview-menu>li.active>a,.skin-purple .sidebar-menu .treeview-menu>li>a:hover{color:#fff}.skin-purple .sidebar-form{border-radius:3px;border:1px solid #374850;margin:10px 10px}.skin-purple .sidebar-form input[type="text"],.skin-purple .sidebar-form .btn{box-shadow:none;background-color:#374850;border:1px solid transparent;height:35px}.skin-purple .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple .sidebar-form input[type="text"]:focus,.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.skin-purple-light .main-header .navbar{background-color:#605ca8}.skin-purple-light .main-header .navbar .nav>li>a{color:#fff}.skin-purple-light .main-header .navbar .nav>li>a:hover,.skin-purple-light .main-header .navbar .nav>li>a:active,.skin-purple-light .main-header .navbar .nav>li>a:focus,.skin-purple-light .main-header .navbar .nav .open>a,.skin-purple-light .main-header .navbar .nav .open>a:hover,.skin-purple-light .main-header .navbar .nav .open>a:focus,.skin-purple-light .main-header .navbar .nav>.active>a{background:rgba(0,0,0,0.1);color:#f6f6f6}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{color:#f6f6f6;background:rgba(0,0,0,0.1)}.skin-purple-light .main-header .navbar .sidebar-toggle{color:#fff}.skin-purple-light .main-header .navbar .sidebar-toggle:hover{background-color:#555299}@media (max-width:767px){.skin-purple-light .main-header .navbar .dropdown-menu li.divider{background-color:rgba(255,255,255,0.1)}.skin-purple-light .main-header .navbar .dropdown-menu li a{color:#fff}.skin-purple-light .main-header .navbar .dropdown-menu li a:hover{background:#555299}}.skin-purple-light .main-header .logo{background-color:#605ca8;color:#fff;border-bottom:0 solid transparent}.skin-purple-light .main-header .logo:hover{background-color:#5d59a6}.skin-purple-light .main-header li.user-header{background-color:#605ca8}.skin-purple-light .content-header{background:transparent}.skin-purple-light .wrapper,.skin-purple-light .main-sidebar,.skin-purple-light .left-side{background-color:#f9fafc}.skin-purple-light .main-sidebar{border-right:1px solid #d2d6de}.skin-purple-light .user-panel>.info,.skin-purple-light .user-panel>.info>a{color:#444}.skin-purple-light .sidebar-menu>li{-webkit-transition:border-left-color .3s ease;-o-transition:border-left-color .3s ease;transition:border-left-color .3s ease}.skin-purple-light .sidebar-menu>li.header{color:#848484;background:#f9fafc}.skin-purple-light .sidebar-menu>li>a{border-left:3px solid transparent;font-weight:600}.skin-purple-light .sidebar-menu>li:hover>a,.skin-purple-light .sidebar-menu>li.active>a{color:#000;background:#f4f4f5}.skin-purple-light .sidebar-menu>li.active{border-left-color:#605ca8}.skin-purple-light .sidebar-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-menu>li>.treeview-menu{background:#f4f4f5}.skin-purple-light .sidebar a{color:#444}.skin-purple-light .sidebar a:hover{text-decoration:none}.skin-purple-light .sidebar-menu .treeview-menu>li>a{color:#777}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a,.skin-purple-light .sidebar-menu .treeview-menu>li>a:hover{color:#000}.skin-purple-light .sidebar-menu .treeview-menu>li.active>a{font-weight:600}.skin-purple-light .sidebar-form{border-radius:3px;border:1px solid #d2d6de;margin:10px 10px}.skin-purple-light .sidebar-form input[type="text"],.skin-purple-light .sidebar-form .btn{box-shadow:none;background-color:#fff;border:1px solid transparent;height:35px}.skin-purple-light .sidebar-form input[type="text"]{color:#666;border-top-left-radius:2px;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:2px}.skin-purple-light .sidebar-form input[type="text"]:focus,.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-purple-light .sidebar-form input[type="text"]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-purple-light .sidebar-form .btn{color:#999;border-top-left-radius:0;border-top-right-radius:2px;border-bottom-right-radius:2px;border-bottom-left-radius:0}@media (min-width:768px){.skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu>li>.treeview-menu{border-left:1px solid #d2d6de}} \ No newline at end of file diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js new file mode 100644 index 000000000..42c9719c5 --- /dev/null +++ b/ruoyi-extend/ruoyi-xxl-job-admin/src/main/resources/static/adminlte/dist/js/adminlte.min.js @@ -0,0 +1,13 @@ +/*! AdminLTE app.js +* ================ +* Main JS application file for AdminLTE v2. This file +* should be included in all pages. It controls some layout +* options and implements exclusive AdminLTE plugins. +* +* @author Colorlib +* @support +* @version v2.4.18 +* @repository git://github.com/ColorlibHQ/AdminLTE.git +* @license MIT +*/ +if("undefined"==typeof jQuery)throw new Error("AdminLTE requires jQuery");!function(i){"use strict";function s(t,e){if(this.element=t,this.options=e,this.$overlay=i(e.overlayTemplate),""===e.source)throw new Error("Source url was not defined. Please specify a url in your BoxRefresh source option.");this._setUpListeners(),this.load()}var r="lte.boxrefresh",a={source:"",params:{},trigger:".refresh-btn",content:".box-body",loadInContent:!0,responseType:"",overlayTemplate:'

    ',onLoadStart:function(){},onLoadDone:function(t){return t}},t='[data-widget="box-refresh"]';function e(n){return this.each(function(){var t=i(this),e=t.data(r);if(!e){var o=i.extend({},a,t.data(),"object"==typeof n&&n);t.data(r,e=new s(t,o))}if("string"==typeof e){if(void 0===e[n])throw new Error("No method named "+n);e[n]()}})}s.prototype.load=function(){this._addOverlay(),this.options.onLoadStart.call(i(this)),i.get(this.options.source,this.options.params,function(t){this.options.loadInContent&&i(this.element).find(this.options.content).html(t),this.options.onLoadDone.call(i(this),t),this._removeOverlay()}.bind(this),""!==this.options.responseType&&this.options.responseType)},s.prototype._setUpListeners=function(){i(this.element).on("click",this.options.trigger,function(t){t&&t.preventDefault(),this.load()}.bind(this))},s.prototype._addOverlay=function(){i(this.element).append(this.$overlay)},s.prototype._removeOverlay=function(){i(this.$overlay).remove()};var o=i.fn.boxRefresh;i.fn.boxRefresh=e,i.fn.boxRefresh.Constructor=s,i.fn.boxRefresh.noConflict=function(){return i.fn.boxRefresh=o,this},i(window).on("load",function(){i(t).each(function(){e.call(i(this))})})}(jQuery),function(i){"use strict";function s(t,e){this.element=t,this.options=e,this._setUpListeners()}var r="lte.boxwidget",a={animationSpeed:500,collapseTrigger:'[data-widget="collapse"]',removeTrigger:'[data-widget="remove"]',collapseIcon:"fa-minus",expandIcon:"fa-plus",removeIcon:"fa-times"},t=".box",e=".collapsed-box",d=".box-header",l=".box-body",c=".box-footer",h=".box-tools",f="collapsed-box",p="collapsing.boxwidget",u="collapsed.boxwidget",g="expanding.boxwidget",v="expanded.boxwidget",o="removing.boxwidget",n="removed.boxwidget";function b(n){return this.each(function(){var t=i(this),e=t.data(r);if(!e){var o=i.extend({},a,t.data(),"object"==typeof n&&n);t.data(r,e=new s(t,o))}if("string"==typeof n){if(void 0===e[n])throw new Error("No method named "+n);e[n]()}})}s.prototype.toggle=function(){!i(this.element).is(e)?this.collapse():this.expand()},s.prototype.expand=function(){var t=i.Event(v),e=i.Event(g),o=this.options.collapseIcon,n=this.options.expandIcon;i(this.element).removeClass(f),i(this.element).children(d+", "+l+", "+c).children(h).find("."+n).removeClass(n).addClass(o),i(this.element).children(l+", "+c).slideDown(this.options.animationSpeed,function(){i(this.element).trigger(t)}.bind(this)).trigger(e)},s.prototype.collapse=function(){var t=i.Event(u),e=i.Event(p),o=this.options.collapseIcon,n=this.options.expandIcon;i(this.element).children(d+", "+l+", "+c).children(h).find("."+o).removeClass(o).addClass(n),i(this.element).children(l+", "+c).slideUp(this.options.animationSpeed,function(){i(this.element).addClass(f),i(this.element).trigger(t)}.bind(this)).trigger(e)},s.prototype.remove=function(){var t=i.Event(n),e=i.Event(o);i(this.element).slideUp(this.options.animationSpeed,function(){i(this.element).trigger(t),i(this.element).remove()}.bind(this)).trigger(e)},s.prototype._setUpListeners=function(){var e=this;i(this.element).on("click",this.options.collapseTrigger,function(t){return t&&t.preventDefault(),e.toggle(i(this)),!1}),i(this.element).on("click",this.options.removeTrigger,function(t){return t&&t.preventDefault(),e.remove(i(this)),!1})};var m=i.fn.boxWidget;i.fn.boxWidget=b,i.fn.boxWidget.Constructor=s,i.fn.boxWidget.noConflict=function(){return i.fn.boxWidget=m,this},i(window).on("load",function(){i(t).each(function(){b.call(i(this))})})}(jQuery),function(i){"use strict";function s(t,e){this.element=t,this.options=e,this.hasBindedResize=!1,this.init()}var r="lte.controlsidebar",a={controlsidebarSlide:!0},e=".control-sidebar",t='[data-toggle="control-sidebar"]',o=".control-sidebar-open",n=".control-sidebar-bg",d=".wrapper",l=".layout-boxed",c="control-sidebar-open",h="control-sidebar-hold-transition",f="collapsed.controlsidebar",p="expanded.controlsidebar";function u(n){return this.each(function(){var t=i(this),e=t.data(r);if(!e){var o=i.extend({},a,t.data(),"object"==typeof n&&n);t.data(r,e=new s(t,o))}"string"==typeof n&&e.toggle()})}s.prototype.init=function(){i(this.element).is(t)||i(this).on("click",this.toggle),this.fix(),i(window).resize(function(){this.fix()}.bind(this))},s.prototype.toggle=function(t){t&&t.preventDefault(),this.fix(),i(e).is(o)||i("body").is(o)?this.collapse():this.expand()},s.prototype.expand=function(){i(e).show(),this.options.controlsidebarSlide?i(e).addClass(c):i("body").addClass(h).addClass(c).delay(50).queue(function(){i("body").removeClass(h),i(this).dequeue()}),i(this.element).trigger(i.Event(p))},s.prototype.collapse=function(){this.options.controlsidebarSlide?i(e).removeClass(c):i("body").addClass(h).removeClass(c).delay(50).queue(function(){i("body").removeClass(h),i(this).dequeue()}),i(e).fadeOut(),i(this.element).trigger(i.Event(f))},s.prototype.fix=function(){i("body").is(l)&&this._fixForBoxed(i(n))},s.prototype._fixForBoxed=function(t){t.css({position:"absolute",height:i(d).height()})};var g=i.fn.controlSidebar;i.fn.controlSidebar=u,i.fn.controlSidebar.Constructor=s,i.fn.controlSidebar.noConflict=function(){return i.fn.controlSidebar=g,this},i(document).on("click",t,function(t){t&&t.preventDefault(),u.call(i(this),"toggle")})}(jQuery),function(n){"use strict";function i(t){this.element=t}var s="lte.directchat",t='[data-widget="chat-pane-toggle"]',e=".direct-chat",o="direct-chat-contacts-open";function r(o){return this.each(function(){var t=n(this),e=t.data(s);e||t.data(s,e=new i(t)),"string"==typeof o&&e.toggle(t)})}i.prototype.toggle=function(t){t.parents(e).first().toggleClass(o)};var a=n.fn.directChat;n.fn.directChat=r,n.fn.directChat.Constructor=i,n.fn.directChat.noConflict=function(){return n.fn.directChat=a,this},n(document).on("click",t,function(t){t&&t.preventDefault(),r.call(n(this),"toggle")})}(jQuery),function(i){"use strict";function s(t){this.options=t,this.init()}var r="lte.pushmenu",a={collapseScreenSize:767,expandOnHover:!1,expandTransitionDelay:200},t=".sidebar-collapse",e=".main-sidebar",o=".content-wrapper",n=".sidebar-form .form-control",d='[data-toggle="push-menu"]',l=".sidebar-mini",c=".sidebar-expanded-on-hover",h=".fixed",f="sidebar-collapse",p="sidebar-open",u="sidebar-expanded-on-hover",g="sidebar-mini-expand-feature",v="expanded.pushMenu",b="collapsed.pushMenu";function m(n){return this.each(function(){var t=i(this),e=t.data(r);if(!e){var o=i.extend({},a,t.data(),"object"==typeof n&&n);t.data(r,e=new s(o))}"toggle"===n&&e.toggle()})}s.prototype.init=function(){(this.options.expandOnHover||i("body").is(l+h))&&(this.expandOnHover(),i("body").addClass(g)),i(o).click(function(){i(window).width()<=this.options.collapseScreenSize&&i("body").hasClass(p)&&this.close()}.bind(this)),i(n).click(function(t){t.stopPropagation()})},s.prototype.toggle=function(){var t=i(window).width(),e=!i("body").hasClass(f);t<=this.options.collapseScreenSize&&(e=i("body").hasClass(p)),e?this.close():this.open()},s.prototype.open=function(){i(window).width()>this.options.collapseScreenSize?i("body").removeClass(f).trigger(i.Event(v)):i("body").addClass(p).trigger(i.Event(v))},s.prototype.close=function(){i(window).width()>this.options.collapseScreenSize?i("body").addClass(f).trigger(i.Event(b)):i("body").removeClass(p+" "+f).trigger(i.Event(b))},s.prototype.expandOnHover=function(){i(e).hover(function(){i("body").is(l+t)&&i(window).width()>this.options.collapseScreenSize&&this.expand()}.bind(this),function(){i("body").is(c)&&this.collapse()}.bind(this))},s.prototype.expand=function(){setTimeout(function(){i("body").removeClass(f).addClass(u)},this.options.expandTransitionDelay)},s.prototype.collapse=function(){setTimeout(function(){i("body").removeClass(u).addClass(f)},this.options.expandTransitionDelay)};var y=i.fn.pushMenu;i.fn.pushMenu=m,i.fn.pushMenu.Constructor=s,i.fn.pushMenu.noConflict=function(){return i.fn.pushMenu=y,this},i(document).on("click",d,function(t){t.preventDefault(),m.call(i(this),"toggle")}),i(window).on("load",function(){m.call(i(d))})}(jQuery),function(i){"use strict";function s(t,e){this.element=t,this.options=e,this._setUpListeners()}var r="lte.todolist",a={onCheck:function(t){return t},onUnCheck:function(t){return t}},e={data:'[data-widget="todo-list"]'},o="done";function t(n){return this.each(function(){var t=i(this),e=t.data(r);if(!e){var o=i.extend({},a,t.data(),"object"==typeof n&&n);t.data(r,e=new s(t,o))}if("string"==typeof e){if(void 0===e[n])throw new Error("No method named "+n);e[n]()}})}s.prototype.toggle=function(t){t.parents(e.li).first().toggleClass(o),t.prop("checked")?this.check(t):this.unCheck(t)},s.prototype.check=function(t){this.options.onCheck.call(t)},s.prototype.unCheck=function(t){this.options.onUnCheck.call(t)},s.prototype._setUpListeners=function(){var t=this;i(this.element).on("change ifChanged","input:checkbox",function(){t.toggle(i(this))})};var n=i.fn.todoList;i.fn.todoList=t,i.fn.todoList.Constructor=s,i.fn.todoList.noConflict=function(){return i.fn.todoList=n,this},i(window).on("load",function(){i(e.data).each(function(){t.call(i(this))})})}(jQuery),function(s){"use strict";function n(t,e){this.element=t,this.options=e,s(this.element).addClass(h),s(a+o,this.element).addClass(c),this._setUpListeners()}var i="lte.tree",r={animationSpeed:500,accordion:!0,followLink:!1,trigger:".treeview a"},a=".treeview",d=".treeview-menu",l=".menu-open, .active",t='[data-widget="tree"]',o=".active",c="menu-open",h="tree",f="collapsed.tree",p="expanded.tree";function e(o){return this.each(function(){var t=s(this);if(!t.data(i)){var e=s.extend({},r,t.data(),"object"==typeof o&&o);t.data(i,new n(t,e))}})}n.prototype.toggle=function(t,e){var o=t.next(d),n=t.parent(),i=n.hasClass(c);n.is(a)&&(this.options.followLink&&"#"!==t.attr("href")||e.preventDefault(),i?this.collapse(o,n):this.expand(o,n))},n.prototype.expand=function(t,e){var o=s.Event(p);if(this.options.accordion){var n=e.siblings(l),i=n.children(d);this.collapse(i,n)}e.addClass(c),t.stop().slideDown(this.options.animationSpeed,function(){s(this.element).trigger(o),e.height("auto")}.bind(this))},n.prototype.collapse=function(t,e){var o=s.Event(f);e.removeClass(c),t.stop().slideUp(this.options.animationSpeed,function(){s(this.element).trigger(o),e.find(a).removeClass(c).find(d).hide()}.bind(this))},n.prototype._setUpListeners=function(){var e=this;s(this.element).on("click",this.options.trigger,function(t){e.toggle(s(this),t)})};var u=s.fn.tree;s.fn.tree=e,s.fn.tree.Constructor=n,s.fn.tree.noConflict=function(){return s.fn.tree=u,this},s(window).on("load",function(){s(t).each(function(){e.call(s(this))})})}(jQuery),function(a){"use strict";function i(t){this.options=t,this.bindedResize=!1,this.activate()}var s="lte.layout",r={slimscroll:!0,resetHeight:!0},d=".wrapper",l=".content-wrapper",c=".layout-boxed",h=".main-footer",f=".main-header",t=".main-sidebar",e="slimScrollDiv",p=".sidebar",u=".control-sidebar",o=".sidebar-menu",n=".main-header .logo",g="fixed",v="hold-transition";function b(n){return this.each(function(){var t=a(this),e=t.data(s);if(!e){var o=a.extend({},r,t.data(),"object"==typeof n&&n);t.data(s,e=new i(o))}if("string"==typeof n){if(void 0===e[n])throw new Error("No method named "+n);e[n]()}})}i.prototype.activate=function(){this.fix(),this.fixSidebar(),a("body").removeClass(v),this.options.resetHeight&&a("body, html, "+d).css({height:"auto","min-height":"100%"}),this.bindedResize||(a(window).resize(function(){this.fix(),this.fixSidebar(),a(n+", "+p).one("webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend",function(){this.fix(),this.fixSidebar()}.bind(this))}.bind(this)),this.bindedResize=!0),a(o).on("expanded.tree",function(){this.fix(),this.fixSidebar()}.bind(this)),a(o).on("collapsed.tree",function(){this.fix(),this.fixSidebar()}.bind(this))},i.prototype.fix=function(){a(c+" > "+d).css("overflow","hidden");var t=a(h).outerHeight()||0,e=a(f).outerHeight()||0,o=e+t,n=a(window).height(),i=a(p).outerHeight()||0;if(a("body").hasClass(g))a(l).css("min-height",n-t);else{var s;s=i+e<=n?(a(l).css("min-height",n-o),n-o):(a(l).css("min-height",i),i);var r=a(u);void 0!==r&&r.height()>s&&a(l).css("min-height",r.height())}},i.prototype.fixSidebar=function(){a("body").hasClass(g)?this.options.slimscroll&&void 0!==a.fn.slimScroll&&0===a(t).find(e).length&&a(p).slimScroll({height:a(window).height()-a(f).height()+"px"}):void 0!==a.fn.slimScroll&&a(p).slimScroll({destroy:!0}).height("auto")};var m=a.fn.layout;a.fn.layout=b,a.fn.layout.Constuctor=i,a.fn.layout.noConflict=function(){return a.fn.layout=m,this},a(window).on("load",function(){b.call(a("body"))})}(jQuery); \ No newline at end of file From a870a1c6bcb5ca385be193a7efd3f5c72cfd14c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 15:23:51 +0800 Subject: [PATCH 55/82] =?UTF-8?q?update=20sql=E6=96=87=E4=BB=B6=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20xxljob=E6=8E=A7=E5=88=B6=E5=8F=B0=E8=8F=9C=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ry_20210908.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/ry_20210908.sql b/sql/ry_20210908.sql index df0335bdb..1df23f453 100644 --- a/sql/ry_20210908.sql +++ b/sql/ry_20210908.sql @@ -172,7 +172,7 @@ insert into sys_menu values('106', '参数设置', '1', '7', 'config', 's insert into sys_menu values('107', '通知公告', '1', '8', 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', sysdate(), '', null, '通知公告菜单'); insert into sys_menu values('108', '日志管理', '1', '9', 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', sysdate(), '', null, '日志管理菜单'); insert into sys_menu values('109', '在线用户', '2', '1', 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', sysdate(), '', null, '在线用户菜单'); -insert into sys_menu values('110', '定时任务', '2', '2', 'job', 'monitor/job/index', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', sysdate(), '', null, '定时任务菜单'); +# insert into sys_menu values('110', '定时任务', '2', '2', 'job', 'monitor/job/index', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', sysdate(), '', null, '定时任务菜单'); insert into sys_menu values('111', '数据监控', '2', '3', 'druid', 'monitor/druid/index', '', 1, 0, 'C', '0', '0', 'monitor:druid:list', 'druid', 'admin', sysdate(), '', null, '数据监控菜单'); # insert into sys_menu values('112', '服务监控', '2', '4', 'server', 'monitor/server/index', '', 1, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', sysdate(), '', null, '服务监控菜单'); insert into sys_menu values('113', '缓存监控', '2', '5', 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', sysdate(), '', null, '缓存监控菜单'); @@ -181,6 +181,8 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen', 't insert into sys_menu values('116', '系统接口', '3', '3', 'swagger', 'tool/swagger/index', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', sysdate(), '', null, '系统接口菜单'); -- springboot-admin监控 insert into sys_menu values('117', 'Admin监控', '2', '5', 'Admin', 'monitor/admin/index', '', 1, 0, 'C', '0', '0', 'monitor:admin:list', 'dashboard', 'admin', sysdate(), '', null, 'Admin监控菜单'); +-- xxl-job-admin控制台 +insert into sys_menu values('120', '任务调度中心', '2', '5', 'XxlJob', 'monitor/xxljob/index', '', 1, 0, 'C', '0', '0', 'monitor:xxljob:list', 'job', 'admin', sysdate(), '', null, 'Xxl-Job控制台菜单'); -- 三级菜单 insert into sys_menu values('500', '操作日志', '108', '1', 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', sysdate(), '', null, '操作日志菜单'); From 6f3f89a0d34cd34f4f4436f1247f2853c1d78d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 15:24:09 +0800 Subject: [PATCH 56/82] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0xxljob?= =?UTF-8?q?=E9=BB=98=E8=AE=A4sql=E6=89=A7=E8=A1=8C=E5=99=A8=E5=90=8D?= =?UTF-8?q?=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/tables_xxl_job.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/tables_xxl_job.sql b/sql/tables_xxl_job.sql index 3cd585a09..236c557e5 100644 --- a/sql/tables_xxl_job.sql +++ b/sql/tables_xxl_job.sql @@ -110,7 +110,7 @@ CREATE TABLE `xxl_job_lock` ( PRIMARY KEY (`lock_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例执行器', 0, NULL, '2018-11-03 22:21:31' ); +INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor', '示例执行器', 0, NULL, '2018-11-03 22:21:31' ); INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '测试任务1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代码初始化', '2018-11-03 22:21:31', ''); INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); From 809774d87cdb9efff7489af5042d7dc00677d2de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 15:24:41 +0800 Subject: [PATCH 57/82] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0xxljob?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=B1=BB=20=E5=A2=9E=E5=8A=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java b/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java index a4e7060ce..5986e3b3f 100644 --- a/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java +++ b/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java @@ -7,6 +7,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; /** * xxl-job config @@ -14,6 +15,7 @@ import org.springframework.context.annotation.Bean; * @author Lion Li */ @Slf4j +@Configuration @EnableConfigurationProperties(XxlJobProperties.class) @AllArgsConstructor public class XxlJobConfig { From 83ce927d16d14651ef51b97925ff4576873acb3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 15:25:14 +0800 Subject: [PATCH 58/82] =?UTF-8?q?add=20=E5=89=8D=E7=AB=AF=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=20=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E9=A1=B5=E9=9D=A2=20=E4=B8=8E=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=8F=8Anginx=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/nginx/nginx.conf | 12 ++++++++++++ ruoyi-ui/.env.development | 3 +++ ruoyi-ui/.env.production | 3 +++ ruoyi-ui/.env.staging | 3 +++ ruoyi-ui/src/views/monitor/xxljob/index.vue | 15 +++++++++++++++ 5 files changed, 36 insertions(+) create mode 100644 ruoyi-ui/src/views/monitor/xxljob/index.vue diff --git a/docker/nginx/nginx.conf b/docker/nginx/nginx.conf index a511f351b..93a633e14 100644 --- a/docker/nginx/nginx.conf +++ b/docker/nginx/nginx.conf @@ -31,6 +31,10 @@ http { server 172.30.0.90:9090; } + upstream xxl-job-admin { + server 172.30.0.92:9100; + } + server { listen 80; server_name localhost; @@ -70,6 +74,14 @@ http { proxy_pass http://monitor-admin/admin/; } + location /xxl-job-admin/ { + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header REMOTE-HOST $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_pass http://xxl-job-admin/xxl-job-admin/; + } + error_page 500 502 503 504 /50x.html; location = /50x.html { root html; diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development index a1a508de4..3b003aa38 100644 --- a/ruoyi-ui/.env.development +++ b/ruoyi-ui/.env.development @@ -10,5 +10,8 @@ VUE_APP_BASE_API = '/dev-api' # 监控地址 VUE_APP_MONITRO_ADMIN = 'http://localhost:9090/admin/login' +# xxl-job 控制台地址 +VUE_APP_XXL_JOB_ADMIN = 'http://localhost:9100/xxl-job-admin' + # 路由懒加载 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production index b6eec53c6..2d0bb6184 100644 --- a/ruoyi-ui/.env.production +++ b/ruoyi-ui/.env.production @@ -7,5 +7,8 @@ ENV = 'production' # 监控地址 VUE_APP_MONITRO_ADMIN = '/admin/login' +# 监控地址 +VUE_APP_XXL_JOB_ADMIN = '/xxl-job-admin' + # 若依管理系统/生产环境 VUE_APP_BASE_API = '/prod-api' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging index e74ce6ce2..49ce55c95 100644 --- a/ruoyi-ui/.env.staging +++ b/ruoyi-ui/.env.staging @@ -9,5 +9,8 @@ ENV = 'staging' # 监控地址 VUE_APP_MONITRO_ADMIN = '/admin/login' +# 监控地址 +VUE_APP_XXL_JOB_ADMIN = '/xxl-job-admin' + # 若依管理系统/测试环境 VUE_APP_BASE_API = '/stage-api' diff --git a/ruoyi-ui/src/views/monitor/xxljob/index.vue b/ruoyi-ui/src/views/monitor/xxljob/index.vue new file mode 100644 index 000000000..7167b48b3 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/xxljob/index.vue @@ -0,0 +1,15 @@ + + From d0700172fa18bef2cbba6b0c2bb32c61dbeb32db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Wed, 20 Oct 2021 15:30:39 +0800 Subject: [PATCH 59/82] =?UTF-8?q?update=20=E5=90=88=E5=B9=B6oss.sql?= =?UTF-8?q?=E8=87=B3=E4=B8=BBsql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/oss.sql | 57 ------------------------------------------- sql/ry_20210908.sql | 59 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 58 deletions(-) delete mode 100644 sql/oss.sql diff --git a/sql/oss.sql b/sql/oss.sql deleted file mode 100644 index fe07eb4a5..000000000 --- a/sql/oss.sql +++ /dev/null @@ -1,57 +0,0 @@ --- ---------------------------- --- OSS对象存储表 --- ---------------------------- -drop table if exists sys_oss; -create table sys_oss ( - oss_id bigint(20) not null auto_increment comment '对象存储主键', - file_name varchar(64) not null default '' comment '文件名', - original_name varchar(64) not null default '' comment '原名', - file_suffix varchar(10) not null default '' comment '文件后缀名', - url varchar(200) not null comment 'URL地址', - create_time datetime default null comment '创建时间', - create_by varchar(64) default '' comment '上传人', - update_time datetime default null comment '更新时间', - update_by varchar(64) default '' comment '更新人', - service varchar(10) not null default 'minio' comment '服务商', - primary key (oss_id) -) engine=innodb comment ='OSS对象存储表'; - --- ---------------------------- --- OSS对象存储动态配置表 --- ---------------------------- -drop table if exists sys_oss_config; -create table sys_oss_config ( - oss_config_id bigint(20) not null auto_increment comment '主建', - config_key varchar(255) not null default '' comment '配置key', - access_key varchar(255) default '' comment 'accessKey', - secret_key varchar(255) default '' comment '秘钥', - bucket_name varchar(255) default '' comment '桶名称', - prefix varchar(255) default '' comment '前缀', - endpoint varchar(255) default '' comment '访问站点', - is_https char(1) default 'N' comment '是否https(Y=是,N=否)', - region varchar(255) default '' comment '域', - status char(1) default '1' comment '状态(0=正常,1=停用)', - ext1 varchar(255) default '' comment '扩展字段', - create_by varchar(64) default '' comment '创建者', - create_time datetime default null comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime default null comment '更新时间', - remark varchar(500) default null comment '备注', - primary key (oss_config_id) -) engine=innodb comment='对象存储配置表'; - -insert into sys_config values(11, 'OSS预览列表资源开关', 'sys.oss.previewListResource', 'true', 'Y', 'admin', sysdate(), '', null, 'true:开启, false:关闭'); - -insert into sys_menu values('118', '文件管理', '1', '10', 'oss', 'system/oss/index', '', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', sysdate(), '', null, '文件管理菜单'); - -insert into sys_menu values('1600', '文件查询', '118', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:query', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1601', '文件上传', '118', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:upload', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1602', '文件下载', '118', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:download', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1603', '文件删除', '118', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:remove', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1604', '配置添加', '118', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:add', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1605', '配置编辑', '118', '6', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:edit', '#', 'admin', sysdate(), '', null, ''); - -insert into sys_oss_config values (1, 'minio', 'ruoyi', 'ruoyi123', 'ruoyi', '', 'http://localhost:9000', 'N', '', '0', '', 'admin', sysdate(), 'admin', sysdate(), NULL); -insert into sys_oss_config values (2, 'qiniu', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', '', 'http://XXX.XXXX.com', 'N', 'z0', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL); -insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', '', 'http://oss-cn-beijing.aliyuncs.com', 'N', '', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL); -insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi-1250000000', '', 'http://cos.ap-beijing.myqcloud.com', 'N', 'ap-beijing', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL); diff --git a/sql/ry_20210908.sql b/sql/ry_20210908.sql index 1df23f453..048d80032 100644 --- a/sql/ry_20210908.sql +++ b/sql/ry_20210908.sql @@ -181,6 +181,8 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen', 't insert into sys_menu values('116', '系统接口', '3', '3', 'swagger', 'tool/swagger/index', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', sysdate(), '', null, '系统接口菜单'); -- springboot-admin监控 insert into sys_menu values('117', 'Admin监控', '2', '5', 'Admin', 'monitor/admin/index', '', 1, 0, 'C', '0', '0', 'monitor:admin:list', 'dashboard', 'admin', sysdate(), '', null, 'Admin监控菜单'); +-- oss菜单 +insert into sys_menu values('118', '文件管理', '1', '10', 'oss', 'system/oss/index', '', 1, 0, 'C', '0', '0', 'system:oss:list', 'upload', 'admin', sysdate(), '', null, '文件管理菜单'); -- xxl-job-admin控制台 insert into sys_menu values('120', '任务调度中心', '2', '5', 'XxlJob', 'monitor/xxljob/index', '', 1, 0, 'C', '0', '0', 'monitor:xxljob:list', 'job', 'admin', sysdate(), '', null, 'Xxl-Job控制台菜单'); @@ -260,6 +262,13 @@ insert into sys_menu values('1057', '生成删除', '115', '3', '#', '', '', 1, insert into sys_menu values('1058', '导入代码', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', sysdate(), '', null, ''); insert into sys_menu values('1059', '预览代码', '115', '4', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', sysdate(), '', null, ''); insert into sys_menu values('1060', '生成代码', '115', '5', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', sysdate(), '', null, ''); +-- oss相关按钮 +insert into sys_menu values('1600', '文件查询', '118', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1601', '文件上传', '118', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:upload', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1602', '文件下载', '118', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:download', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1603', '文件删除', '118', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1604', '配置添加', '118', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1605', '配置编辑', '118', '6', '#', '', '', 1, 0, 'F', '0', '0', 'system:oss:edit', '#', 'admin', sysdate(), '', null, ''); -- ---------------------------- @@ -545,6 +554,7 @@ insert into sys_config values(2, '用户管理-账号初始密码', 'sys insert into sys_config values(3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' ); insert into sys_config values(4, '账号自助-验证码开关', 'sys.account.captchaOnOff', 'true', 'Y', 'admin', sysdate(), '', null, '是否开启验证码功能(true开启,false关闭)'); insert into sys_config values(5, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)'); +insert into sys_config values(11, 'OSS预览列表资源开关', 'sys.oss.previewListResource', 'true', 'Y', 'admin', sysdate(), '', null, 'true:开启, false:关闭'); -- ---------------------------- @@ -690,4 +700,51 @@ create table gen_table_column ( 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 +) engine=innodb auto_increment=1 comment = '代码生成业务表字段'; + +-- ---------------------------- +-- OSS对象存储表 +-- ---------------------------- +drop table if exists sys_oss; +create table sys_oss ( + oss_id bigint(20) not null auto_increment comment '对象存储主键', + file_name varchar(64) not null default '' comment '文件名', + original_name varchar(64) not null default '' comment '原名', + file_suffix varchar(10) not null default '' comment '文件后缀名', + url varchar(200) not null comment 'URL地址', + create_time datetime default null comment '创建时间', + create_by varchar(64) default '' comment '上传人', + update_time datetime default null comment '更新时间', + update_by varchar(64) default '' comment '更新人', + service varchar(10) not null default 'minio' comment '服务商', + primary key (oss_id) +) engine=innodb comment ='OSS对象存储表'; + +-- ---------------------------- +-- OSS对象存储动态配置表 +-- ---------------------------- +drop table if exists sys_oss_config; +create table sys_oss_config ( + oss_config_id bigint(20) not null auto_increment comment '主建', + config_key varchar(255) not null default '' comment '配置key', + access_key varchar(255) default '' comment 'accessKey', + secret_key varchar(255) default '' comment '秘钥', + bucket_name varchar(255) default '' comment '桶名称', + prefix varchar(255) default '' comment '前缀', + endpoint varchar(255) default '' comment '访问站点', + is_https char(1) default 'N' comment '是否https(Y=是,N=否)', + region varchar(255) default '' comment '域', + status char(1) default '1' comment '状态(0=正常,1=停用)', + ext1 varchar(255) default '' comment '扩展字段', + create_by varchar(64) default '' comment '创建者', + create_time datetime default null comment '创建时间', + update_by varchar(64) default '' comment '更新者', + update_time datetime default null comment '更新时间', + remark varchar(500) default null comment '备注', + primary key (oss_config_id) +) engine=innodb comment='对象存储配置表'; + +insert into sys_oss_config values (1, 'minio', 'ruoyi', 'ruoyi123', 'ruoyi', '', 'http://localhost:9000', 'N', '', '0', '', 'admin', sysdate(), 'admin', sysdate(), NULL); +insert into sys_oss_config values (2, 'qiniu', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', '', 'http://XXX.XXXX.com', 'N', 'z0', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL); +insert into sys_oss_config values (3, 'aliyun', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi', '', 'http://oss-cn-beijing.aliyuncs.com', 'N', '', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL); +insert into sys_oss_config values (4, 'qcloud', 'XXXXXXXXXXXXXXX', 'XXXXXXXXXXXXXXX', 'ruoyi-1250000000', '', 'http://cos.ap-beijing.myqcloud.com', 'N', 'ap-beijing', '1', '', 'admin', sysdate(), 'admin', sysdate(), NULL); From 255c8a083ecf864f84c05677323c9ac0bb14672b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 21 Oct 2021 09:33:13 +0800 Subject: [PATCH 60/82] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20RedisUtils=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=AE=BE=E7=BD=AE=E8=BF=87=E6=9C=9F=E6=97=B6?= =?UTF-8?q?=E9=97=B4=20=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/RedisCacheController.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java index 5ef9d49cd..903b982b1 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisCacheController.java @@ -1,6 +1,7 @@ package com.ruoyi.demo.controller; import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.RedisUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -12,6 +13,8 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.TimeUnit; + /** * spring-cache 演示案例 * @@ -76,4 +79,24 @@ public class RedisCacheController { return AjaxResult.success("操作成功", value); } + /** + * 测试设置过期时间 + * 手动设置过期时间10秒 + * 11秒后获取 判断是否相等 + */ + @ApiOperation("测试设置过期时间") + @GetMapping("/test6") + public AjaxResult test6(String key, String value){ + RedisUtils.setCacheObject(key, value); + boolean flag = RedisUtils.expire(key, 10, TimeUnit.SECONDS); + System.out.println("***********" + flag); + try { + Thread.sleep(11 * 1000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + Object obj = RedisUtils.getCacheObject(key); + return AjaxResult.success("操作成功", value.equals(obj)); + } + } From f4b619d1d132da755a9813fbcfb8bc3c12289827 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 21 Oct 2021 10:10:30 +0800 Subject: [PATCH 61/82] =?UTF-8?q?update=20=E4=BF=AE=E6=AD=A3=E6=B3=A8?= =?UTF-8?q?=E9=87=8A=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 63135fd79..ed2acc1e9 100644 --- a/pom.xml +++ b/pom.xml @@ -292,7 +292,7 @@ ${ruoyi-vue-plus.version}
    - + com.ruoyi ruoyi-oss From 6c9dc9ae511a3cdf203a57b80d60bd0812a00d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 21 Oct 2021 17:40:44 +0800 Subject: [PATCH 62/82] =?UTF-8?q?update=20=E4=BF=AE=E6=AD=A3pr=20=E4=B8=8D?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ed2acc1e9..2dd48f94b 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ 2.2.1 3.4.1 1.3.2 - 2.3.0 + 2.3.0 3.0.1 @@ -213,7 +213,7 @@ com.xuxueli xxl-job-core - ${xxl-job-core-version} + ${xxl-job.version} From c1c4fb2ca4a2ab1f560362b484e23ce19a8b073a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 21 Oct 2021 18:10:45 +0800 Subject: [PATCH 63/82] update hutool 5.7.13 => 5.7.14 update qcloud.cos 5.6.55 => 5.6.58 update minio 8.3.0 => 8.3.1 --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 2dd48f94b..d32449125 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ 0.9.1 3.4.3.4 3.9.1 - 5.7.13 + 5.7.14 3.0.3 11.6 4.9.1 @@ -45,8 +45,8 @@ 7.8.0 3.13.1 - 5.6.55 - 8.3.0 + 5.6.58 + 8.3.1 localhost From 32bfe334c0be11152b1789ddcc2d54b26daf342b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 21 Oct 2021 18:41:56 +0800 Subject: [PATCH 64/82] =?UTF-8?q?update=20=E6=95=B4=E7=90=86=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=97=A0=E7=94=A8=E6=B3=A8=E9=87=8A=20=E4=BF=9D?= =?UTF-8?q?=E8=AF=81=E4=BB=A3=E7=A0=81=E6=95=B4=E6=B4=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application-dev.yml | 62 ----------------- .../src/main/resources/application-prod.yml | 61 ----------------- .../src/main/resources/application.yml | 53 ++------------- ruoyi-framework/pom.xml | 9 --- .../framework/config/MybatisPlusConfig.java | 48 ++++--------- .../ruoyi/framework/config/RedisConfig.java | 67 ++++++++++++++++++- 6 files changed, 86 insertions(+), 214 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 867a1fd9d..c77d5120d 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -154,65 +154,3 @@ redisson: subscriptionsPerConnection: 5 # DNS监测时间间隔,单位:毫秒 dnsMonitoringInterval: 5000 - -#--- # redis 集群配置(单机与集群只能开启一个另一个需要注释掉) -#spring: -# redis: -# cluster: -# nodes: -# - 192.168.0.100:6379 -# - 192.168.0.101:6379 -# - 192.168.0.102:6379 -# # 密码 -# password: -# # 连接超时时间 -# timeout: 10s -# # 是否开启ssl -# ssl: false -# -#redisson: -# # 线程池数量 -# threads: 16 -# # Netty线程池数量 -# nettyThreads: 32 -# # 传输模式 -# transportMode: "NIO" -# # 集群配置 -# clusterServersConfig: -# # 客户端名称 -# clientName: ${ruoyi.name} -# # master最小空闲连接数 -# masterConnectionMinimumIdleSize: 32 -# # master连接池大小 -# masterConnectionPoolSize: 64 -# # slave最小空闲连接数 -# slaveConnectionMinimumIdleSize: 32 -# # slave连接池大小 -# slaveConnectionPoolSize: 64 -# # 连接空闲超时,单位:毫秒 -# idleConnectionTimeout: 10000 -# # ping连接间隔 -# pingConnectionInterval: 1000 -# # 命令等待超时,单位:毫秒 -# timeout: 3000 -# # 如果尝试在此限制之内发送成功,则开始启用 timeout 计时。 -# retryAttempts: 3 -# # 命令重试发送时间间隔,单位:毫秒 -# retryInterval: 1500 -# # 从可用服务器的内部列表中排除 Redis Slave 重新连接尝试的间隔。 -# failedSlaveReconnectionInterval: 3000 -# # 发布和订阅连接池最小空闲连接数 -# subscriptionConnectionMinimumIdleSize: 1 -# # 发布和订阅连接池大小 -# subscriptionConnectionPoolSize: 50 -# # 单个连接最大订阅数量 -# subscriptionsPerConnection: 5 -# # 扫描间隔 -# scanInterval: 1000 -# # DNS监测时间间隔,单位:毫秒 -# dnsMonitoringInterval: 5000 -# # 读取模式 -# readMode: "SLAVE" -# # 订阅模式 -# subscriptionMode: "MASTER" - diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index b66db3e07..32ebb7c38 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -154,64 +154,3 @@ redisson: subscriptionsPerConnection: 5 # DNS监测时间间隔,单位:毫秒 dnsMonitoringInterval: 5000 - -#--- # redis 集群配置(单机与集群只能开启一个另一个需要注释掉) -#spring: -# redis: -# cluster: -# nodes: -# - 192.168.0.100:6379 -# - 192.168.0.101:6379 -# - 192.168.0.102:6379 -# # 密码 -# password: -# # 连接超时时间 -# timeout: 10s -# # 是否开启ssl -# ssl: false -# -#redisson: -# # 线程池数量 -# threads: 16 -# # Netty线程池数量 -# nettyThreads: 32 -# # 传输模式 -# transportMode: "NIO" -# # 集群配置 -# clusterServersConfig: -# # 客户端名称 -# clientName: ${ruoyi.name} -# # master最小空闲连接数 -# masterConnectionMinimumIdleSize: 32 -# # master连接池大小 -# masterConnectionPoolSize: 64 -# # slave最小空闲连接数 -# slaveConnectionMinimumIdleSize: 32 -# # slave连接池大小 -# slaveConnectionPoolSize: 64 -# # 连接空闲超时,单位:毫秒 -# idleConnectionTimeout: 10000 -# # ping连接间隔 -# pingConnectionInterval: 1000 -# # 命令等待超时,单位:毫秒 -# timeout: 3000 -# # 如果尝试在此限制之内发送成功,则开始启用 timeout 计时。 -# retryAttempts: 3 -# # 命令重试发送时间间隔,单位:毫秒 -# retryInterval: 1500 -# # 从可用服务器的内部列表中排除 Redis Slave 重新连接尝试的间隔。 -# failedSlaveReconnectionInterval: 3000 -# # 发布和订阅连接池最小空闲连接数 -# subscriptionConnectionMinimumIdleSize: 1 -# # 发布和订阅连接池大小 -# subscriptionConnectionPoolSize: 50 -# # 单个连接最大订阅数量 -# subscriptionsPerConnection: 5 -# # 扫描间隔 -# scanInterval: 1000 -# # DNS监测时间间隔,单位:毫秒 -# dnsMonitoringInterval: 5000 -# # 读取模式 -# readMode: "SLAVE" -# # 订阅模式 -# subscriptionMode: "MASTER" diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 0b000c78a..360c20128 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -43,14 +43,6 @@ server: io: 8 # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载 worker: 256 -# # tomcat 配置 -# tomcat: -# # tomcat的URI编码 -# uri-encoding: UTF-8 -# # tomcat最大线程数,默认为200 -# max-threads: 500 -# # Tomcat启动初始化的线程数,默认值25 -# min-spare-threads: 30 # 日志配置 logging: @@ -147,43 +139,24 @@ mybatis-plus: mapperLocations: classpath*:mapper/**/*Mapper.xml # 实体扫描,多个package用逗号或者分号分隔 typeAliasesPackage: com.ruoyi.**.domain - # 针对 typeAliasesPackage,如果配置了该属性,则仅仅会扫描路径下以该类作为父类的域对象 - #typeAliasesSuperType: Class - # 如果配置了该属性,SqlSessionFactoryBean 会把该包下面的类注册为对应的 TypeHandler - #typeHandlersPackage: null - # 如果配置了该属性,会将路径下的枚举类进行注入,让实体类字段能够简单快捷的使用枚举属性 - #typeEnumsPackage: null # 启动时是否检查 MyBatis XML 文件的存在,默认不检查 checkConfigLocation: false # 通过该属性可指定 MyBatis 的执行器,MyBatis 的执行器总共有三种: - # SIMPLE:该执行器类型不做特殊的事情,为每个语句的执行创建一个新的预处理语句(PreparedStatement) - # REUSE:该执行器类型会复用预处理语句(PreparedStatement) - # BATCH:该执行器类型会批量执行所有的更新语句 + # SIMPLE:每个语句创建新的预处理器 REUSE:会复用预处理器 BATCH:批量执行所有的更新 executorType: SIMPLE configuration: # 自动驼峰命名规则(camel case)映射 - # 如果您的数据库命名符合规则无需使用 @TableField 注解指定数据库字段名 mapUnderscoreToCamelCase: true - # 默认枚举处理类,如果配置了该属性,枚举将统一使用指定处理器进行处理 - # org.apache.ibatis.type.EnumTypeHandler : 存储枚举的名称 - # org.apache.ibatis.type.EnumOrdinalTypeHandler : 存储枚举的索引 - # com.baomidou.mybatisplus.extension.handlers.MybatisEnumTypeHandler : 枚举类需要实现IEnum接口或字段标记@EnumValue注解. - defaultEnumTypeHandler: org.apache.ibatis.type.EnumTypeHandler # 当设置为 true 的时候,懒加载的对象可能被任何懒属性全部加载,否则,每个属性都按需加载。需要和 lazyLoadingEnabled 一起使用。 aggressiveLazyLoading: true # MyBatis 自动映射策略 - # NONE:不启用自动映射 - # PARTIAL:只对非嵌套的 resultMap 进行自动映射 - # FULL:对所有的 resultMap 都进行自动映射 + # NONE:不启用 PARTIAL:只对非嵌套 resultMap 自动映射 FULL:对所有 resultMap 自动映射 autoMappingBehavior: PARTIAL # MyBatis 自动映射时未知列或未知属性处理策 - # NONE:不做任何处理 (默认值) - # WARNING:以日志的形式打印相关警告信息 - # FAILING:当作映射失败处理,并抛出异常和详细信息 + # NONE:不做处理 WARNING:打印相关警告 FAILING:抛出异常和详细信息 autoMappingUnknownColumnBehavior: NONE # Mybatis一级缓存,默认为 SESSION - # SESSION session级别缓存,同一个session相同查询语句不会再次查询数据库 - # STATEMENT 关闭一级缓存 + # SESSION session级别缓存 STATEMENT 关闭一级缓存 localCacheScope: SESSION # 开启Mybatis二级缓存,默认为 true cacheEnabled: false @@ -198,32 +171,18 @@ mybatis-plus: enableSqlRunner: false dbConfig: # 主键类型 - # AUTO 数据库ID自增 - # NONE 空 - # INPUT 用户输入ID - # ASSIGN_ID 全局唯一ID - # ASSIGN_UUID 全局唯一ID UUID + # AUTO 自增 NONE 空 INPUT 用户输入 ASSIGN_ID 雪花 ASSIGN_UUID 唯一 UUID idType: AUTO - # 表名前缀 - tablePrefix: null - # 字段 format,例: %s,(对主键无效) - columnFormat: null # 表名是否使用驼峰转下划线命名,只对表名生效 tableUnderline: true # 大写命名,对表名和字段名均生效 capitalMode: false - # 全局的entity的逻辑删除字段属性名 - logicDeleteField: null # 逻辑已删除值 logicDeleteValue: 2 # 逻辑未删除值 logicNotDeleteValue: 0 # 字段验证策略之 insert,在 insert 的时候的字段验证策略 - # IGNORED 忽略判断 - # NOT_NULL 非NULL判断 - # NOT_EMPTY 非空判断(只对字符串类型字段,其他类型字段依然为非NULL判断) - # DEFAULT 默认的,一般只用于注解里 - # NEVER 不加入 SQL + # IGNORED 忽略 NOT_NULL 非NULL NOT_EMPTY 非空 DEFAULT 默认 NEVER 不加入 SQL insertStrategy: NOT_NULL # 字段验证策略之 update,在 update 的时候的字段验证策略 updateStrategy: NOT_NULL diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 20176a0be..f80c2646b 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -17,7 +17,6 @@ - org.springframework.boot @@ -34,14 +33,6 @@ org.springframework.boot spring-boot-starter-undertow - - - - - - - - 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 57388ec3a..db81b7437 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 @@ -18,13 +18,12 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.List; /** - * mybatis-plus配置类 + * mybatis-plus配置类(下方注释有插件介绍) * * @author Lion Li */ @EnableTransactionManagement(proxyTargetClass = true) @Configuration -// 指定要扫描的Mapper类的包的路径 @MapperScan("${mybatis-plus.mapperPackage}") public class MybatisPlusConfig { @@ -35,14 +34,11 @@ public class MybatisPlusConfig { interceptor.addInnerInterceptor(paginationInnerInterceptor()); // 乐观锁插件 interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor()); - // 阻断插件 -// interceptor.addInnerInterceptor(blockAttackInnerInterceptor()); return interceptor; } /** * 分页插件,自动识别数据库类型 - * https://baomidou.com/guide/interceptor-pagination.html */ public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(); @@ -55,41 +51,13 @@ public class MybatisPlusConfig { /** * 乐观锁插件 - * https://baomidou.com/guide/interceptor-optimistic-locker.html */ public OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor() { return new OptimisticLockerInnerInterceptor(); } - /** - * 如果是对全表的删除或更新操作,就会终止该操作 - * https://baomidou.com/guide/interceptor-block-attack.html - */ -// public BlockAttackInnerInterceptor blockAttackInnerInterceptor() { -// return new BlockAttackInnerInterceptor(); -// } - - /** - * sql性能规范插件(垃圾SQL拦截) - * 如有需要可以启用 - */ -// public IllegalSQLInnerInterceptor illegalSQLInnerInterceptor() { -// return new IllegalSQLInnerInterceptor(); -// } - - - /** - * 自定义主键策略 - * https://baomidou.com/guide/id-generator.html - */ -// @Bean -// public IdentifierGenerator idGenerator() { -// return new CustomIdGenerator(); -// } - /** * 元对象字段填充控制器 - * https://baomidou.com/guide/auto-fill-metainfo.html */ @Bean public MetaObjectHandler metaObjectHandler() { @@ -98,7 +66,6 @@ public class MybatisPlusConfig { /** * sql注入器配置 - * https://baomidou.com/guide/sql-injector.html */ @Bean public ISqlInjector sqlInjector() { @@ -113,6 +80,19 @@ public class MybatisPlusConfig { } /** + * PaginationInnerInterceptor 分页插件,自动识别数据库类型 + * https://baomidou.com/guide/interceptor-pagination.html + * OptimisticLockerInnerInterceptor 乐观锁插件 + * https://baomidou.com/guide/interceptor-optimistic-locker.html + * MetaObjectHandler 元对象字段填充控制器 + * https://baomidou.com/guide/auto-fill-metainfo.html + * ISqlInjector sql注入器 + * https://baomidou.com/guide/sql-injector.html + * BlockAttackInnerInterceptor 如果是对全表的删除或更新操作,就会终止该操作 + * https://baomidou.com/guide/interceptor-block-attack.html + * IllegalSQLInnerInterceptor sql性能规范插件(垃圾SQL拦截) + * IdentifierGenerator 自定义主键策略 + * https://baomidou.com/guide/id-generator.html * TenantLineInnerInterceptor 多租户插件 * https://baomidou.com/guide/interceptor-tenant-line.html * DynamicTableNameInnerInterceptor 动态表名插件 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java index c1c303a26..d7ae1cdce 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -76,7 +76,7 @@ public class RedisConfig extends CachingConfigurerSupport { .setConnectionPoolSize(singleServerConfig.getConnectionPoolSize()) .setDnsMonitoringInterval(singleServerConfig.getDnsMonitoringInterval()); } - + // 集群配置方式 参考下方注释 RedissonProperties.ClusterServersConfig clusterServersConfig = redissonProperties.getClusterServersConfig(); if (ObjectUtil.isNotNull(clusterServersConfig)) { // 使用集群模式 @@ -123,4 +123,69 @@ public class RedisConfig extends CachingConfigurerSupport { return new RedissonSpringCacheManager(redissonClient, config, JsonJacksonCodec.INSTANCE); } + /** + * redis集群配置 yml + * + * --- # redis 集群配置(单机与集群只能开启一个另一个需要注释掉) + * spring: + * redis: + * cluster: + * nodes: + * - 192.168.0.100:6379 + * - 192.168.0.101:6379 + * - 192.168.0.102:6379 + * # 密码 + * password: + * # 连接超时时间 + * timeout: 10s + * # 是否开启ssl + * ssl: false + * + * redisson: + * # 线程池数量 + * threads: 16 + * # Netty线程池数量 + * nettyThreads: 32 + * # 传输模式 + * transportMode: "NIO" + * # 集群配置 + * clusterServersConfig: + * # 客户端名称 + * clientName: ${ruoyi.name} + * # master最小空闲连接数 + * masterConnectionMinimumIdleSize: 32 + * # master连接池大小 + * masterConnectionPoolSize: 64 + * # slave最小空闲连接数 + * slaveConnectionMinimumIdleSize: 32 + * # slave连接池大小 + * slaveConnectionPoolSize: 64 + * # 连接空闲超时,单位:毫秒 + * idleConnectionTimeout: 10000 + * # ping连接间隔 + * pingConnectionInterval: 1000 + * # 命令等待超时,单位:毫秒 + * timeout: 3000 + * # 如果尝试在此限制之内发送成功,则开始启用 timeout 计时。 + * retryAttempts: 3 + * # 命令重试发送时间间隔,单位:毫秒 + * retryInterval: 1500 + * # 从可用服务器的内部列表中排除 Redis Slave 重新连接尝试的间隔。 + * failedSlaveReconnectionInterval: 3000 + * # 发布和订阅连接池最小空闲连接数 + * subscriptionConnectionMinimumIdleSize: 1 + * # 发布和订阅连接池大小 + * subscriptionConnectionPoolSize: 50 + * # 单个连接最大订阅数量 + * subscriptionsPerConnection: 5 + * # 扫描间隔 + * scanInterval: 1000 + * # DNS监测时间间隔,单位:毫秒 + * dnsMonitoringInterval: 5000 + * # 读取模式 + * readMode: "SLAVE" + * # 订阅模式 + * subscriptionMode: "MASTER" + */ + } From 336adbd056818bae90b2bee57ae45ce8f1cd0524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 22 Oct 2021 10:04:15 +0800 Subject: [PATCH 65/82] =?UTF-8?q?update=20=E7=BB=9F=E4=B8=80=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../ruoyi/common/annotation/DataScope.java | 21 +-- .../ruoyi/common/annotation/DataSource.java | 17 +- .../common/annotation/ExcelDictFormat.java | 24 +-- .../java/com/ruoyi/common/annotation/Log.java | 27 ++- .../ruoyi/common/annotation/RateLimiter.java | 22 +-- .../ruoyi/common/annotation/RepeatSubmit.java | 17 +- .../com/ruoyi/common/constant/Constants.java | 19 +- .../ruoyi/common/constant/GenConstants.java | 175 ++++++++++++------ .../ruoyi/common/constant/UserConstants.java | 72 +++++-- .../core/controller/BaseController.java | 41 ++-- .../ruoyi/common/enums/BusinessStatus.java | 6 +- .../com/ruoyi/common/enums/BusinessType.java | 7 +- .../ruoyi/common/enums/DataSourceType.java | 20 +- .../com/ruoyi/common/enums/HttpMethod.java | 18 +- .../com/ruoyi/common/enums/LimitType.java | 3 +- .../com/ruoyi/common/enums/OperatorType.java | 5 +- .../com/ruoyi/common/enums/UserStatus.java | 14 +- .../common/exception/DemoModeException.java | 8 +- .../common/exception/GlobalException.java | 26 +-- .../common/exception/ServiceException.java | 32 ++-- .../ruoyi/common/exception/UtilException.java | 14 +- .../common/exception/base/BaseException.java | 50 ++--- .../common/exception/file/FileException.java | 6 +- .../FileNameLengthLimitExceededException.java | 10 +- .../file/FileSizeLimitExceededException.java | 10 +- .../file/InvalidExtensionException.java | 54 ++---- .../exception/user/CaptchaException.java | 8 +- .../user/CaptchaExpireException.java | 8 +- .../common/exception/user/UserException.java | 6 +- .../user/UserPasswordNotMatchException.java | 8 +- .../ruoyi/common/filter/RepeatableFilter.java | 22 +-- .../filter/RepeatedlyRequestWrapper.java | 30 +-- .../com/ruoyi/common/filter/XssFilter.java | 27 +-- .../filter/XssHttpServletRequestWrapper.java | 45 ++--- .../com/ruoyi/common/utils/BeanCopyUtils.java | 90 ++++----- .../com/ruoyi/common/utils/DateUtils.java | 75 +++----- .../com/ruoyi/common/utils/DictUtils.java | 90 ++++----- .../com/ruoyi/common/utils/JsonUtils.java | 33 ++-- .../com/ruoyi/common/utils/MessageUtils.java | 10 +- .../com/ruoyi/common/utils/PageUtils.java | 12 +- .../com/ruoyi/common/utils/SecurityUtils.java | 62 +++---- .../com/ruoyi/common/utils/ServletUtils.java | 171 ++++++++--------- .../com/ruoyi/common/utils/StringUtils.java | 2 +- .../java/com/ruoyi/common/utils/Threads.java | 68 +++---- .../ruoyi/common/utils/file/FileUtils.java | 13 +- .../ruoyi/common/utils/ip/AddressUtils.java | 70 +++---- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 4 +- .../common/utils/reflect/ReflectUtils.java | 66 +++---- .../common/utils/spring/SpringUtils.java | 88 ++++----- .../com/ruoyi/common/utils/sql/SqlUtil.java | 12 +- .../filter/JwtAuthenticationTokenFilter.java | 7 +- .../handle/AuthenticationEntryPointImpl.java | 8 +- .../web/exception/GlobalExceptionHandler.java | 38 ++-- 54 files changed, 806 insertions(+), 987 deletions(-) diff --git a/pom.xml b/pom.xml index d32449125..afa510549 100644 --- a/pom.xml +++ b/pom.xml @@ -36,7 +36,7 @@ 3.16.3 2.2.1 3.4.1 - 1.3.2 + 1.3.3 2.3.0 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 155f7c3a7..feaa3f42c 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,10 +1,6 @@ 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 java.lang.annotation.*; /** * 数据权限过滤注解 @@ -14,20 +10,19 @@ import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented -public @interface DataScope -{ +public @interface DataScope { /** * 部门表的别名 */ - public String deptAlias() default ""; + String deptAlias() default ""; /** * 用户表的别名 */ - public String userAlias() default ""; + String userAlias() default ""; - /** - * 是否过滤用户权限 - */ - public boolean isUser() default false; + /** + * 是否过滤用户权限 + */ + boolean isUser() default false; } 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 79cd191f8..e7d2250a6 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,28 +1,23 @@ 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; +import java.lang.annotation.*; + /** * 自定义多数据源切换注解 - * + *

    * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准 * * @author ruoyi */ -@Target({ ElementType.METHOD, ElementType.TYPE }) +@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited -public @interface DataSource -{ +public @interface DataSource { /** * 切换数据源名称 */ - public DataSourceType value() default DataSourceType.MASTER; + DataSourceType value() default DataSourceType.MASTER; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/ExcelDictFormat.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/ExcelDictFormat.java index a51116b5c..400080ea7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/ExcelDictFormat.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/ExcelDictFormat.java @@ -12,19 +12,19 @@ import java.lang.annotation.*; @Inherited public @interface ExcelDictFormat { - /** - * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) - */ - String dictType() default ""; + /** + * 如果是字典类型,请设置字典的type值 (如: sys_user_sex) + */ + String dictType() default ""; - /** - * 读取内容转表达式 (如: 0=男,1=女,2=未知) - */ - String readConverterExp() default ""; + /** + * 读取内容转表达式 (如: 0=男,1=女,2=未知) + */ + String readConverterExp() default ""; - /** - * 分隔符,读取字符串组内容 - */ - String separator() default ","; + /** + * 分隔符,读取字符串组内容 + */ + String separator() default ","; } 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 ca02c6c4a..32c39a3b0 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,46 +1,41 @@ 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; +import java.lang.annotation.*; + /** * 自定义操作日志记录注解 - * - * @author ruoyi * + * @author ruoyi */ -@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Target({ElementType.PARAMETER, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented -public @interface Log -{ +public @interface Log { /** - * 模块 + * 模块 */ - public String title() default ""; + String title() default ""; /** * 功能 */ - public BusinessType businessType() default BusinessType.OTHER; + BusinessType businessType() default BusinessType.OTHER; /** * 操作人类别 */ - public OperatorType operatorType() default OperatorType.MANAGE; + OperatorType operatorType() default OperatorType.MANAGE; /** * 是否保存请求的参数 */ - public boolean isSaveRequestData() default true; + boolean isSaveRequestData() default true; /** * 是否保存响应的参数 */ - public boolean isSaveResponseData() default true; + boolean isSaveResponseData() default true; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java index 564203861..90db9d776 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java @@ -1,40 +1,36 @@ 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.constant.Constants; import com.ruoyi.common.enums.LimitType; +import java.lang.annotation.*; + /** * 限流注解 - * - * @author ruoyi + * + * @author Lion Li */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented -public @interface RateLimiter -{ +public @interface RateLimiter { /** * 限流key */ - public String key() default Constants.RATE_LIMIT_KEY; + String key() default Constants.RATE_LIMIT_KEY; /** * 限流时间,单位秒 */ - public int time() default 60; + int time() default 60; /** * 限流次数 */ - public int count() default 100; + int count() default 100; /** * 限流类型 */ - public LimitType limitType() default LimitType.DEFAULT; + LimitType limitType() default LimitType.DEFAULT; } 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 512f4bf52..4a15b7cb7 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 @@ -1,11 +1,6 @@ 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 java.lang.annotation.*; import java.util.concurrent.TimeUnit; /** @@ -19,12 +14,12 @@ import java.util.concurrent.TimeUnit; @Documented public @interface RepeatSubmit { - /** - * 间隔时间(ms),小于此时间视为重复提交 - */ - int interval() default 5000; + /** + * 间隔时间(ms),小于此时间视为重复提交 + */ + int interval() default 5000; - TimeUnit timeUnit() default TimeUnit.MILLISECONDS; + TimeUnit timeUnit() default TimeUnit.MILLISECONDS; /** * 提示消息 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 c2cb29dcb..6d83fe30e 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 @@ -7,8 +7,7 @@ import io.jsonwebtoken.Claims; * * @author ruoyi */ -public class Constants -{ +public class Constants { /** * UTF-8 字符集 */ @@ -134,13 +133,13 @@ public class Constants */ public static final String SYS_DICT_KEY = "sys_dict:"; - /** - * RMI 远程方法调用 - */ - public static final String LOOKUP_RMI = "rmi://"; + /** + * RMI 远程方法调用 + */ + public static final String LOOKUP_RMI = "rmi://"; - /** - * LDAP 远程方法调用 - */ - public static final String LOOKUP_LDAP = "ldap://"; + /** + * LDAP 远程方法调用 + */ + public static final String LOOKUP_LDAP = "ldap://"; } 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 27c57035a..4d0a4e8a7 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 @@ -2,118 +2,187 @@ package com.ruoyi.common.constant; /** * 代码生成通用常量 - * + * * @author ruoyi */ -public class GenConstants -{ - /** 单表(增删改查) */ +public class GenConstants { + /** + * 单表(增删改查) + */ public static final String TPL_CRUD = "crud"; - /** 树表(增删改查) */ + /** + * 树表(增删改查) + */ public static final String TPL_TREE = "tree"; - /** 主子表(增删改查) */ + /** + * 主子表(增删改查) + */ public static final String TPL_SUB = "sub"; - /** 树编码字段 */ + /** + * 树编码字段 + */ public static final String TREE_CODE = "treeCode"; - /** 树父编码字段 */ + /** + * 树父编码字段 + */ public static final String TREE_PARENT_CODE = "treeParentCode"; - /** 树名称字段 */ + /** + * 树名称字段 + */ public static final String TREE_NAME = "treeName"; - /** 上级菜单ID字段 */ + /** + * 上级菜单ID字段 + */ public static final String PARENT_MENU_ID = "parentMenuId"; - /** 上级菜单名称字段 */ + /** + * 上级菜单名称字段 + */ public static final String PARENT_MENU_NAME = "parentMenuName"; - /** 数据库字符串类型 */ - public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; + /** + * 数据库字符串类型 + */ + public static final String[] COLUMNTYPE_STR = {"char", "varchar", "nvarchar", "varchar2"}; - /** 数据库文本类型 */ - public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; + /** + * 数据库文本类型 + */ + public static final String[] COLUMNTYPE_TEXT = {"tinytext", "text", "mediumtext", "longtext"}; - /** 数据库时间类型 */ - public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; + /** + * 数据库时间类型 + */ + public static final String[] COLUMNTYPE_TIME = {"datetime", "time", "date", "timestamp"}; - /** 数据库数字类型 */ - public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", - "bit", "bigint", "float", "double", "decimal" }; + /** + * 数据库数字类型 + */ + public static final String[] COLUMNTYPE_NUMBER = {"tinyint", "smallint", "mediumint", "int", "number", "integer", + "bit", "bigint", "float", "double", "decimal"}; - /** BO对象 不需要添加字段 */ - public static final String[] COLUMNNAME_NOT_ADD = { "create_by", "create_time", "del_flag", "update_by", - "update_time", "version" }; + /** + * BO对象 不需要添加字段 + */ + public static final String[] COLUMNNAME_NOT_ADD = {"create_by", "create_time", "del_flag", "update_by", + "update_time", "version"}; - /** BO对象 不需要编辑字段 */ - public static final String[] COLUMNNAME_NOT_EDIT = { "create_by", "create_time", "del_flag", "update_by", - "update_time", "version" }; + /** + * BO对象 不需要编辑字段 + */ + public static final String[] COLUMNNAME_NOT_EDIT = {"create_by", "create_time", "del_flag", "update_by", + "update_time", "version"}; - /** VO对象 不需要返回字段 */ - public static final String[] COLUMNNAME_NOT_LIST = { "create_by", "create_time", "del_flag", "update_by", - "update_time", "version" }; + /** + * VO对象 不需要返回字段 + */ + public static final String[] COLUMNNAME_NOT_LIST = {"create_by", "create_time", "del_flag", "update_by", + "update_time", "version"}; - /** BO对象 不需要查询字段 */ - public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", - "update_time", "remark", "version" }; + /** + * BO对象 不需要查询字段 + */ + public static final String[] COLUMNNAME_NOT_QUERY = {"id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark", "version"}; - /** Entity基类字段 */ - public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime" }; + /** + * Entity基类字段 + */ + public static final String[] BASE_ENTITY = {"createBy", "createTime", "updateBy", "updateTime"}; - /** Tree基类字段 */ - public static final String[] TREE_ENTITY = { "parentName", "parentId", "children" }; + /** + * Tree基类字段 + */ + public static final String[] TREE_ENTITY = {"parentName", "parentId", "children"}; - /** 文本框 */ + /** + * 文本框 + */ 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 HTML_IMAGE_UPLOAD = "imageUpload"; - /** 文件上传控件 */ + /** + * 文件上传控件 + */ public static final String HTML_FILE_UPLOAD = "fileUpload"; - /** 富文本控件 */ + /** + * 富文本控件 + */ public static final String HTML_EDITOR = "editor"; - /** 字符串类型 */ + /** + * 字符串类型 + */ 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/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java index a936cd838..fa88e7c17 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 @@ -5,62 +5,96 @@ package com.ruoyi.common.constant; * * @author ruoyi */ -public class UserConstants -{ +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_DISABLE = "1"; - /** 角色封禁状态 */ + /** + * 角色封禁状态 + */ public static final String ROLE_DISABLE = "1"; - /** 部门正常状态 */ + /** + * 部门正常状态 + */ public static final String DEPT_NORMAL = "0"; - /** 部门停用状态 */ + /** + * 部门停用状态 + */ public static final String DEPT_DISABLE = "1"; - /** 字典正常状态 */ + /** + * 字典正常状态 + */ public static final String DICT_NORMAL = "0"; - /** 是否为系统默认(是) */ + /** + * 是否为系统默认(是) + */ public static final String YES = "Y"; - /** 是否菜单外链(是) */ + /** + * 是否菜单外链(是) + */ public static final String YES_FRAME = "0"; - /** 是否菜单外链(否) */ + /** + * 是否菜单外链(否) + */ public static final String NO_FRAME = "1"; - /** 菜单类型(目录) */ + /** + * 菜单类型(目录) + */ public static final String TYPE_DIR = "M"; - /** 菜单类型(菜单) */ + /** + * 菜单类型(菜单) + */ public static final String TYPE_MENU = "C"; - /** 菜单类型(按钮) */ + /** + * 菜单类型(按钮) + */ public static final String TYPE_BUTTON = "F"; - /** Layout组件标识 */ + /** + * Layout组件标识 + */ public final static String LAYOUT = "Layout"; - /** ParentView组件标识 */ + /** + * ParentView组件标识 + */ public final static String PARENT_VIEW = "ParentView"; - /** InnerLink组件标识 */ + /** + * InnerLink组件标识 + */ public final static String INNER_LINK = "InnerLink"; - /** 校验返回结果码 */ + /** + * 校验返回结果码 + */ public final static String UNIQUE = "0"; public final static String NOT_UNIQUE = "1"; 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 04a21a7b4..bad8f77a5 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 @@ -4,58 +4,49 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * web层通用数据处理 * * @author ruoyi */ -public class BaseController -{ - protected final Logger logger = LoggerFactory.getLogger(this.getClass()); +public class BaseController { /** * 返回成功 */ - public AjaxResult success() - { + public AjaxResult success() { return AjaxResult.success(); } /** * 返回失败消息 */ - public AjaxResult error() - { + public AjaxResult error() { return AjaxResult.error(); } /** * 返回成功消息 */ - public AjaxResult success(String message) - { + public AjaxResult success(String message) { return AjaxResult.success(message); } /** * 返回失败消息 */ - public AjaxResult error(String message) - { + public AjaxResult error(String message) { return AjaxResult.error(message); } /** * 响应返回结果 - * + * * @param rows 影响行数 * @return 操作结果 */ - protected AjaxResult toAjax(int rows) - { + protected AjaxResult toAjax(int rows) { return rows > 0 ? AjaxResult.success() : AjaxResult.error(); } @@ -65,48 +56,42 @@ public class BaseController * @param result 结果 * @return 操作结果 */ - protected AjaxResult toAjax(boolean result) - { + protected AjaxResult toAjax(boolean result) { return result ? success() : error(); } /** * 页面跳转 */ - public String redirect(String url) - { + public String redirect(String url) { return StringUtils.format("redirect:{}", url); } /** * 获取用户缓存信息 */ - public LoginUser getLoginUser() - { + public LoginUser getLoginUser() { return SecurityUtils.getLoginUser(); } /** * 获取登录用户id */ - public Long getUserId() - { + public Long getUserId() { return getLoginUser().getUserId(); } /** * 获取登录部门id */ - public Long getDeptId() - { + public Long getDeptId() { return getLoginUser().getDeptId(); } /** * 获取登录用户名 */ - public String getUsername() - { + public String getUsername() { return getLoginUser().getUsername(); } } 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 10b7306fe..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 @@ -2,12 +2,10 @@ package com.ruoyi.common.enums; /** * 操作状态 - * - * @author ruoyi * + * @author ruoyi */ -public enum BusinessStatus -{ +public enum BusinessStatus { /** * 成功 */ 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 2e17c4a5d..2d2f2e463 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 @@ -2,11 +2,10 @@ package com.ruoyi.common.enums; /** * 业务操作类型 - * + * * @author ruoyi */ -public enum BusinessType -{ +public enum BusinessType { /** * 其它 */ @@ -51,7 +50,7 @@ public enum BusinessType * 生成代码 */ GENCODE, - + /** * 清空数据 */ 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 d5f546536..d6fe72864 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 @@ -10,16 +10,16 @@ import lombok.Getter; */ @AllArgsConstructor public enum DataSourceType { - /** - * 主库 - */ - MASTER("master"), + /** + * 主库 + */ + MASTER("master"), - /** - * 从库 - */ - SLAVE("slave"); + /** + * 从库 + */ + SLAVE("slave"); - @Getter - private final String source; + @Getter + private final String source; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java index be6f73929..bd1bfcc46 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java @@ -1,36 +1,32 @@ package com.ruoyi.common.enums; +import org.springframework.lang.Nullable; + import java.util.HashMap; import java.util.Map; -import org.springframework.lang.Nullable; /** * 请求方式 * * @author ruoyi */ -public enum HttpMethod -{ +public enum HttpMethod { GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; private static final Map mappings = new HashMap<>(16); - static - { - for (HttpMethod httpMethod : values()) - { + static { + for (HttpMethod httpMethod : values()) { mappings.put(httpMethod.name(), httpMethod); } } @Nullable - public static HttpMethod resolve(@Nullable String method) - { + public static HttpMethod resolve(@Nullable String method) { return (method != null ? mappings.get(method) : null); } - public boolean matches(String method) - { + public boolean matches(String method) { return (this == resolve(method)); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java index 02c2b3d30..897f7068f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java @@ -6,8 +6,7 @@ package com.ruoyi.common.enums; * @author ruoyi */ -public enum LimitType -{ +public enum LimitType { /** * 默认策略全局限流 */ 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 bdd143c1c..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 @@ -2,11 +2,10 @@ package com.ruoyi.common.enums; /** * 操作人类别 - * + * * @author ruoyi */ -public enum OperatorType -{ +public enum OperatorType { /** * 其它 */ 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 d7ff44a98..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 @@ -2,29 +2,25 @@ package com.ruoyi.common.enums; /** * 用户状态 - * + * * @author ruoyi */ -public enum UserStatus -{ +public enum UserStatus { OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); private final String code; private final String info; - UserStatus(String code, String info) - { + UserStatus(String code, String info) { this.code = code; this.info = info; } - public String getCode() - { + public String getCode() { return code; } - public String getInfo() - { + public String getInfo() { return info; } } 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 f6ad2ab49..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 @@ -2,14 +2,12 @@ package com.ruoyi.common.exception; /** * 演示模式异常 - * + * * @author ruoyi */ -public class DemoModeException extends RuntimeException -{ +public class DemoModeException extends RuntimeException { private static final long serialVersionUID = 1L; - public DemoModeException() - { + public DemoModeException() { } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java index 318b9aecc..5584cbce3 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java @@ -2,11 +2,10 @@ package com.ruoyi.common.exception; /** * 全局异常 - * + * * @author ruoyi */ -public class GlobalException extends RuntimeException -{ +public class GlobalException extends RuntimeException { private static final long serialVersionUID = 1L; @@ -17,7 +16,7 @@ public class GlobalException extends RuntimeException /** * 错误明细,内部调试错误 - * + *

    * 和 {@link CommonResult#getDetailMessage()} 一致的设计 */ private String detailMessage; @@ -25,33 +24,28 @@ public class GlobalException extends RuntimeException /** * 空构造方法,避免反序列化问题 */ - public GlobalException() - { + public GlobalException() { } - public GlobalException(String message) - { + public GlobalException(String message) { this.message = message; } - public String getDetailMessage() - { + public String getDetailMessage() { return detailMessage; } - public GlobalException setDetailMessage(String detailMessage) - { + public GlobalException setDetailMessage(String detailMessage) { this.detailMessage = detailMessage; return this; } - public String getMessage() - { + @Override + public String getMessage() { return message; } - public GlobalException setMessage(String message) - { + public GlobalException setMessage(String message) { this.message = message; return this; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java index 734e8fc5d..95ce6d84c 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java @@ -2,11 +2,10 @@ package com.ruoyi.common.exception; /** * 业务异常 - * + * * @author ruoyi */ -public final class ServiceException extends RuntimeException -{ +public final class ServiceException extends RuntimeException { private static final long serialVersionUID = 1L; /** @@ -21,7 +20,7 @@ public final class ServiceException extends RuntimeException /** * 错误明细,内部调试错误 - * + *

    * 和 {@link CommonResult#getDetailMessage()} 一致的设计 */ private String detailMessage; @@ -29,44 +28,37 @@ public final class ServiceException extends RuntimeException /** * 空构造方法,避免反序列化问题 */ - public ServiceException() - { + public ServiceException() { } - public ServiceException(String message) - { + public ServiceException(String message) { this.message = message; } - public ServiceException(String message, Integer code) - { + public ServiceException(String message, Integer code) { this.message = message; this.code = code; } - public String getDetailMessage() - { + public String getDetailMessage() { return detailMessage; } - public String getMessage() - { + @Override + public String getMessage() { return message; } - public Integer getCode() - { + public Integer getCode() { return code; } - public ServiceException setMessage(String message) - { + public ServiceException setMessage(String message) { this.message = message; return this; } - public ServiceException setDetailMessage(String detailMessage) - { + public ServiceException setDetailMessage(String detailMessage) { this.detailMessage = detailMessage; return this; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java index 980fa465e..01cc8782b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java @@ -2,25 +2,21 @@ package com.ruoyi.common.exception; /** * 工具类异常 - * + * * @author ruoyi */ -public class UtilException extends RuntimeException -{ +public class UtilException extends RuntimeException { private static final long serialVersionUID = 8247610319171014183L; - public UtilException(Throwable e) - { + public UtilException(Throwable e) { super(e.getMessage(), e); } - public UtilException(String message) - { + public UtilException(String message) { super(message); } - public UtilException(String message, Throwable throwable) - { + public UtilException(String message, Throwable throwable) { super(message, throwable); } } 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 5f97a3bab..13c0d2fef 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 @@ -2,14 +2,17 @@ package com.ruoyi.common.exception.base; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.StringUtils; +import lombok.*; /** * 基础异常 * * @author ruoyi */ -public class BaseException extends RuntimeException -{ +@Data +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +public class BaseException extends RuntimeException { private static final long serialVersionUID = 1L; /** @@ -32,66 +35,39 @@ public class BaseException extends RuntimeException */ private String defaultMessage; - public BaseException(String module, String code, Object[] args, 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) - { + public BaseException(String module, String code, Object[] args) { this(module, code, args, null); } - public BaseException(String module, String defaultMessage) - { + public BaseException(String module, String defaultMessage) { this(module, null, null, defaultMessage); } - public BaseException(String code, Object[] args) - { + public BaseException(String code, Object[] args) { this(null, code, args, null); } - public BaseException(String defaultMessage) - { + public BaseException(String defaultMessage) { this(null, null, null, defaultMessage); } @Override - public String getMessage() - { + public String getMessage() { String message = null; - if (!StringUtils.isEmpty(code)) - { + if (!StringUtils.isEmpty(code)) { message = MessageUtils.message(code, args); } - if (message == null) - { + 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 b4c57f6d3..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 @@ -7,12 +7,10 @@ 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 70e0ec9b1..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 @@ -2,15 +2,13 @@ package com.ruoyi.common.exception.file; /** * 文件名称超长限制异常类 - * + * * @author ruoyi */ -public class FileNameLengthLimitExceededException extends FileException -{ +public class FileNameLengthLimitExceededException extends FileException { private static final long serialVersionUID = 1L; - public FileNameLengthLimitExceededException(int defaultFileNameLength) - { - super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); + 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 f1c8e8354..7de92e24c 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,80 +1,60 @@ package com.ruoyi.common.exception.file; -import java.util.Arrays; +import lombok.*; import org.apache.commons.fileupload.FileUploadException; +import java.util.Arrays; + /** * 文件上传 误异常类 - * + * * @author ruoyi */ -public class InvalidExtensionException extends FileUploadException -{ +@Data +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +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) - { + 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 - { + public static class InvalidImageExtensionException extends InvalidExtensionException { private static final long serialVersionUID = 1L; - public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) - { + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename); } } - public static class InvalidFlashExtensionException extends InvalidExtensionException - { + public static class InvalidFlashExtensionException extends InvalidExtensionException { private static final long serialVersionUID = 1L; - public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) - { + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename); } } - public static class InvalidMediaExtensionException extends InvalidExtensionException - { + public static class InvalidMediaExtensionException extends InvalidExtensionException { private static final long serialVersionUID = 1L; - public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) - { + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename); } } - public static class InvalidVideoExtensionException extends InvalidExtensionException - { + public static class InvalidVideoExtensionException extends InvalidExtensionException { private static final long serialVersionUID = 1L; - public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) - { + public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) { super(allowedExtension, extension, filename); } } 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 389dbc753..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 @@ -2,15 +2,13 @@ package com.ruoyi.common.exception.user; /** * 验证码错误异常类 - * + * * @author ruoyi */ -public class CaptchaException extends UserException -{ +public class CaptchaException extends UserException { private static final long serialVersionUID = 1L; - public CaptchaException() - { + public CaptchaException() { super("user.jcaptcha.error", null); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java index 85f94861b..ae5f759f0 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java @@ -2,15 +2,13 @@ package com.ruoyi.common.exception.user; /** * 验证码失效异常类 - * + * * @author ruoyi */ -public class CaptchaExpireException extends UserException -{ +public class CaptchaExpireException extends UserException { private static final long serialVersionUID = 1L; - public CaptchaExpireException() - { + public CaptchaExpireException() { super("user.jcaptcha.expire", 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 f25afc5eb..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 @@ -7,12 +7,10 @@ import com.ruoyi.common.exception.base.BaseException; * * @author ruoyi */ -public class UserException extends BaseException -{ +public class UserException extends BaseException { private static final long serialVersionUID = 1L; - public UserException(String code, Object[] args) - { + public UserException(String code, Object[] args) { super("user", code, args, 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 a7f3e5ffe..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 @@ -2,15 +2,13 @@ package com.ruoyi.common.exception.user; /** * 用户密码不正确或不符合规范异常类 - * + * * @author ruoyi */ -public class UserPasswordNotMatchException extends UserException -{ +public class UserPasswordNotMatchException extends UserException { private static final long serialVersionUID = 1L; - public UserPasswordNotMatchException() - { + public UserPasswordNotMatchException() { super("user.password.not.match", null); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java index ffe614ceb..0e4b2658b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java @@ -12,37 +12,29 @@ import java.io.IOException; * * @author ruoyi */ -public class RepeatableFilter implements Filter -{ +public class RepeatableFilter implements Filter { @Override - public void init(FilterConfig filterConfig) throws ServletException - { + public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException - { + throws IOException, ServletException { ServletRequest requestWrapper = null; if (request instanceof HttpServletRequest - && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) - { + && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) { requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); } - if (null == requestWrapper) - { + if (null == requestWrapper) { chain.doFilter(request, response); - } - else - { + } else { chain.doFilter(requestWrapper, response); } } @Override - public void destroy() - { + public void destroy() { } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java index 74659bfdd..b6fd0b65a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java @@ -18,12 +18,10 @@ import java.nio.charset.StandardCharsets; * * @author ruoyi */ -public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper -{ +public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper { private final byte[] body; - public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException - { + public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException { super(request); request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); @@ -32,44 +30,36 @@ public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper } @Override - public BufferedReader getReader() throws IOException - { + public BufferedReader getReader() throws IOException { return new BufferedReader(new InputStreamReader(getInputStream())); } @Override - public ServletInputStream getInputStream() throws IOException - { + public ServletInputStream getInputStream() throws IOException { final ByteArrayInputStream bais = new ByteArrayInputStream(body); - return new ServletInputStream() - { + return new ServletInputStream() { @Override - public int read() throws IOException - { + public int read() throws IOException { return bais.read(); } @Override - public int available() throws IOException - { + public int available() throws IOException { return body.length; } @Override - public boolean isFinished() - { + public boolean isFinished() { return false; } @Override - public boolean isReady() - { + public boolean isReady() { return false; } @Override - public void setReadListener(ReadListener readListener) - { + public void setReadListener(ReadListener readListener) { } }; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java index 7c141671a..f397de1ec 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java @@ -14,22 +14,18 @@ import java.util.List; * * @author ruoyi */ -public class XssFilter implements Filter -{ +public class XssFilter implements Filter { /** * 排除链接 */ public List excludes = new ArrayList<>(); @Override - public void init(FilterConfig filterConfig) throws ServletException - { + public void init(FilterConfig filterConfig) throws ServletException { String tempExcludes = filterConfig.getInitParameter("excludes"); - if (StringUtils.isNotEmpty(tempExcludes)) - { + if (StringUtils.isNotEmpty(tempExcludes)) { String[] url = tempExcludes.split(","); - for (int i = 0; url != null && i < url.length; i++) - { + for (int i = 0; url != null && i < url.length; i++) { excludes.add(url[i]); } } @@ -37,12 +33,10 @@ public class XssFilter implements Filter @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException - { + throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse resp = (HttpServletResponse) response; - if (handleExcludeURL(req, resp)) - { + if (handleExcludeURL(req, resp)) { chain.doFilter(request, response); return; } @@ -50,21 +44,18 @@ public class XssFilter implements Filter chain.doFilter(xssRequest, response); } - private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) - { + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) { String url = request.getServletPath(); String method = request.getMethod(); // GET DELETE 不过滤 - if (method == null || method.matches("GET") || method.matches("DELETE")) - { + if (method == null || method.matches("GET") || method.matches("DELETE")) { return true; } return StringUtils.matches(url, excludes); } @Override - public void destroy() - { + public void destroy() { } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java index 8af1257df..a8ffd66cc 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java @@ -19,26 +19,21 @@ import java.nio.charset.StandardCharsets; * * @author ruoyi */ -public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper -{ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { /** * @param request */ - public XssHttpServletRequestWrapper(HttpServletRequest request) - { + public XssHttpServletRequestWrapper(HttpServletRequest request) { super(request); } @Override - public String[] getParameterValues(String name) - { + public String[] getParameterValues(String name) { String[] values = super.getParameterValues(name); - if (values != null) - { + if (values != null) { int length = values.length; String[] escapseValues = new String[length]; - for (int i = 0; i < length; i++) - { + for (int i = 0; i < length; i++) { // 防xss攻击和过滤前后空格 escapseValues[i] = HtmlUtil.cleanHtmlTag(values[i]).trim(); } @@ -48,18 +43,15 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper } @Override - public ServletInputStream getInputStream() throws IOException - { + public ServletInputStream getInputStream() throws IOException { // 非json类型,直接返回 - if (!isJsonRequest()) - { + if (!isJsonRequest()) { return super.getInputStream(); } // 为空,直接返回 String json = IoUtil.read(super.getInputStream(), StandardCharsets.UTF_8); - if (StringUtils.isEmpty(json)) - { + if (StringUtils.isEmpty(json)) { return super.getInputStream(); } @@ -67,34 +59,28 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper json = HtmlUtil.cleanHtmlTag(json).trim(); byte[] jsonBytes = json.getBytes(StandardCharsets.UTF_8); final ByteArrayInputStream bis = IoUtil.toStream(jsonBytes); - return new ServletInputStream() - { + return new ServletInputStream() { @Override - public boolean isFinished() - { + public boolean isFinished() { return true; } @Override - public boolean isReady() - { + public boolean isReady() { return true; } @Override - public int available() throws IOException - { + public int available() throws IOException { return jsonBytes.length; } @Override - public void setReadListener(ReadListener readListener) - { + public void setReadListener(ReadListener readListener) { } @Override - public int read() throws IOException - { + public int read() throws IOException { return bis.read(); } }; @@ -105,8 +91,7 @@ public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper * * @param request */ - public boolean isJsonRequest() - { + public boolean isJsonRequest() { String header = super.getHeader(HttpHeaders.CONTENT_TYPE); return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java index 16a252d0f..8bf40d16a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/BeanCopyUtils.java @@ -16,51 +16,51 @@ import java.util.stream.Collectors; */ public class BeanCopyUtils { - /** - * 单对象基于class创建拷贝 - * - * @param source 数据来源实体 - * @param copyOptions copy条件 - * @param desc 描述对象 转换后的对象 - * @return desc - */ - public static V oneCopy(T source, CopyOptions copyOptions, Class desc) { - V v = ReflectUtil.newInstanceIfPossible(desc); - return oneCopy(source, copyOptions, v); - } + /** + * 单对象基于class创建拷贝 + * + * @param source 数据来源实体 + * @param copyOptions copy条件 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static V oneCopy(T source, CopyOptions copyOptions, Class desc) { + V v = ReflectUtil.newInstanceIfPossible(desc); + return oneCopy(source, copyOptions, v); + } - /** - * 单对象基于对象创建拷贝 - * - * @param source 数据来源实体 - * @param copyOptions copy条件 - * @param desc 转换后的对象 - * @return desc - */ - public static V oneCopy(T source, CopyOptions copyOptions, V desc) { - if (ObjectUtil.isNull(source)) { - return null; - } - return BeanCopier.create(source, desc, copyOptions).copy(); - } + /** + * 单对象基于对象创建拷贝 + * + * @param source 数据来源实体 + * @param copyOptions copy条件 + * @param desc 转换后的对象 + * @return desc + */ + public static V oneCopy(T source, CopyOptions copyOptions, V desc) { + if (ObjectUtil.isNull(source)) { + return null; + } + return BeanCopier.create(source, desc, copyOptions).copy(); + } - /** - * 列表对象基于class创建拷贝 - * - * @param sourceList 数据来源实体列表 - * @param copyOptions copy条件 - * @param desc 描述对象 转换后的对象 - * @return desc - */ - public static List listCopy(List sourceList, CopyOptions copyOptions, Class desc) { - if (ObjectUtil.isNull(sourceList)) { - return null; - } - if (CollUtil.isEmpty(sourceList)) { - return CollUtil.newArrayList(); - } - return sourceList.stream() - .map(source -> oneCopy(source, copyOptions, desc)) - .collect(Collectors.toList()); - } + /** + * 列表对象基于class创建拷贝 + * + * @param sourceList 数据来源实体列表 + * @param copyOptions copy条件 + * @param desc 描述对象 转换后的对象 + * @return desc + */ + public static List listCopy(List sourceList, CopyOptions copyOptions, Class desc) { + if (ObjectUtil.isNull(sourceList)) { + return null; + } + if (CollUtil.isEmpty(sourceList)) { + return CollUtil.newArrayList(); + } + return sourceList.stream() + .map(source -> oneCopy(source, copyOptions, desc)) + .collect(Collectors.toList()); + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java index 536cb3cf0..1e27f2494 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -1,18 +1,19 @@ package com.ruoyi.common.utils; +import org.apache.commons.lang3.time.DateFormatUtils; + import java.lang.management.ManagementFactory; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; -import org.apache.commons.lang3.time.DateFormatUtils; /** * 时间工具类 - * + * * @author ruoyi */ -public class DateUtils extends org.apache.commons.lang3.time.DateUtils -{ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils { + public static String YYYY = "yyyy"; public static String YYYY_MM = "yyyy-MM"; @@ -22,65 +23,54 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; - + private static String[] parsePatterns = { - "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; /** * 获取当前Date型日期 - * + * * @return Date() 当前日期 */ - public static Date getNowDate() - { + public static Date getNowDate() { return new Date(); } /** * 获取当前日期, 默认格式为yyyy-MM-dd - * + * * @return String */ - public static String getDate() - { + public static String getDate() { return dateTimeNow(YYYY_MM_DD); } - public static final String getTime() - { + public static final String getTime() { return dateTimeNow(YYYY_MM_DD_HH_MM_SS); } - public static final String dateTimeNow() - { + public static final String dateTimeNow() { return dateTimeNow(YYYYMMDDHHMMSS); } - public static final String dateTimeNow(final String format) - { + public static final String dateTimeNow(final String format) { return parseDateToStr(format, new Date()); } - public static final String dateTime(final Date date) - { + public static final String dateTime(final Date date) { return parseDateToStr(YYYY_MM_DD, date); } - public static final String parseDateToStr(final String format, final Date date) - { + public static final String parseDateToStr(final String format, final Date date) { return new SimpleDateFormat(format).format(date); } - public static final Date dateTime(final String format, final String ts) - { - try - { + public static final Date dateTime(final String format, final String ts) { + try { return new SimpleDateFormat(format).parse(ts); - } - catch (ParseException e) - { + } catch (ParseException e) { throw new RuntimeException(e); } } @@ -88,8 +78,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils /** * 日期路径 即年/月/日 如2018/08/08 */ - public static final String datePath() - { + public static final String datePath() { Date now = new Date(); return DateFormatUtils.format(now, "yyyy/MM/dd"); } @@ -97,8 +86,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils /** * 日期路径 即年/月/日 如20180808 */ - public static final String dateTime() - { + public static final String dateTime() { Date now = new Date(); return DateFormatUtils.format(now, "yyyyMMdd"); } @@ -106,27 +94,21 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils /** * 日期型字符串转化为日期 格式 */ - public static Date parseDate(Object str) - { - if (str == null) - { + public static Date parseDate(Object str) { + if (str == null) { return null; } - try - { + try { return parseDate(str.toString(), parsePatterns); - } - catch (ParseException e) - { + } catch (ParseException e) { return null; } } - + /** * 获取服务器启动时间 */ - public static Date getServerStartDate() - { + public static Date getServerStartDate() { long time = ManagementFactory.getRuntimeMXBean().getStartTime(); return new Date(time); } @@ -134,8 +116,7 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils /** * 计算两个时间差 */ - public static String getDatePoor(Date endDate, Date nowDate) - { + public static String getDatePoor(Date endDate, Date nowDate) { long nd = 1000 * 24 * 60 * 60; long nh = 1000 * 60 * 60; long nm = 1000 * 60; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java index 39e71a66a..f24d0e8b4 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -12,8 +12,8 @@ import java.util.List; * * @author ruoyi */ -public class DictUtils -{ +public class DictUtils { + /** * 分隔符 */ @@ -22,11 +22,10 @@ public class DictUtils /** * 设置字典缓存 * - * @param key 参数键 + * @param key 参数键 * @param dictDatas 字典数据列表 */ - public static void setDictCache(String key, List dictDatas) - { + public static void setDictCache(String key, List dictDatas) { RedisUtils.setCacheObject(getCacheKey(key), dictDatas); } @@ -36,12 +35,10 @@ public class DictUtils * @param key 参数键 * @return dictDatas 字典数据列表 */ - public static List getDictCache(String key) - { + public static List getDictCache(String key) { Object cacheObj = RedisUtils.getCacheObject(getCacheKey(key)); - if (StringUtils.isNotNull(cacheObj)) - { - List dictDatas = (List)cacheObj; + if (StringUtils.isNotNull(cacheObj)) { + List dictDatas = (List) cacheObj; return dictDatas; } return null; @@ -50,60 +47,49 @@ public class DictUtils /** * 根据字典类型和字典值获取字典标签 * - * @param dictType 字典类型 + * @param dictType 字典类型 * @param dictValue 字典值 * @return 字典标签 */ - public static String getDictLabel(String dictType, String dictValue) - { + public static String getDictLabel(String dictType, String dictValue) { return getDictLabel(dictType, dictValue, SEPARATOR); } /** * 根据字典类型和字典标签获取字典值 * - * @param dictType 字典类型 + * @param dictType 字典类型 * @param dictLabel 字典标签 * @return 字典值 */ - public static String getDictValue(String dictType, String dictLabel) - { + public static String getDictValue(String dictType, String dictLabel) { return getDictValue(dictType, dictLabel, SEPARATOR); } /** * 根据字典类型和字典值获取字典标签 * - * @param dictType 字典类型 + * @param dictType 字典类型 * @param dictValue 字典值 * @param separator 分隔符 * @return 字典标签 */ - public static String getDictLabel(String dictType, String dictValue, String separator) - { + public static String getDictLabel(String dictType, String dictValue, String separator) { StringBuilder propertyString = new StringBuilder(); List datas = getDictCache(dictType); - if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) - { - for (SysDictData dict : datas) - { - for (String value : dictValue.split(separator)) - { - if (value.equals(dict.getDictValue())) - { + if (StringUtils.containsAny(dictValue, separator) && CollUtil.isNotEmpty(datas)) { + for (SysDictData dict : datas) { + for (String value : dictValue.split(separator)) { + if (value.equals(dict.getDictValue())) { propertyString.append(dict.getDictLabel() + separator); break; } } } - } - else - { - for (SysDictData dict : datas) - { - if (dictValue.equals(dict.getDictValue())) - { + } else { + for (SysDictData dict : datas) { + if (dictValue.equals(dict.getDictValue())) { return dict.getDictLabel(); } } @@ -114,36 +100,27 @@ public class DictUtils /** * 根据字典类型和字典标签获取字典值 * - * @param dictType 字典类型 + * @param dictType 字典类型 * @param dictLabel 字典标签 * @param separator 分隔符 * @return 字典值 */ - public static String getDictValue(String dictType, String dictLabel, String separator) - { + public static String getDictValue(String dictType, String dictLabel, String separator) { StringBuilder propertyString = new StringBuilder(); List datas = getDictCache(dictType); - if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) - { - for (SysDictData dict : datas) - { - for (String label : dictLabel.split(separator)) - { - if (label.equals(dict.getDictLabel())) - { + if (StringUtils.containsAny(dictLabel, separator) && CollUtil.isNotEmpty(datas)) { + for (SysDictData dict : datas) { + for (String label : dictLabel.split(separator)) { + if (label.equals(dict.getDictLabel())) { propertyString.append(dict.getDictValue() + separator); break; } } } - } - else - { - for (SysDictData dict : datas) - { - if (dictLabel.equals(dict.getDictLabel())) - { + } else { + for (SysDictData dict : datas) { + if (dictLabel.equals(dict.getDictLabel())) { return dict.getDictValue(); } } @@ -156,16 +133,14 @@ public class DictUtils * * @param key 字典键 */ - public static void removeDictCache(String key) - { + public static void removeDictCache(String key) { RedisUtils.deleteObject(getCacheKey(key)); } /** * 清空字典缓存 */ - public static void clearDictCache() - { + public static void clearDictCache() { Collection keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*"); RedisUtils.deleteObject(keys); } @@ -176,8 +151,7 @@ public class DictUtils * @param configKey 参数键 * @return 缓存键key */ - public static String getCacheKey(String configKey) - { + public static String getCacheKey(String configKey) { return Constants.SYS_DICT_KEY + configKey; } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/JsonUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/JsonUtils.java index 7246b0af6..b65c23dc8 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/JsonUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/JsonUtils.java @@ -24,9 +24,9 @@ public class JsonUtils { private static ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); public static String toJsonString(Object object) { - if (StringUtils.isNull(object)) { - return null; - } + if (StringUtils.isNull(object)) { + return null; + } try { return objectMapper.writeValueAsString(object); } catch (JsonProcessingException e) { @@ -57,9 +57,9 @@ public class JsonUtils { } public static T parseObject(String text, TypeReference typeReference) { - if (StringUtils.isBlank(text)) { - return null; - } + if (StringUtils.isBlank(text)) { + return null; + } try { return objectMapper.readValue(text, typeReference); } catch (IOException e) { @@ -67,16 +67,17 @@ public class JsonUtils { } } - public static Map parseMap(String text) { - if (StringUtils.isBlank(text)) { - return null; - } - try { - return objectMapper.readValue(text, new TypeReference>() {}); - } catch (IOException e) { - throw new RuntimeException(e); - } - } + public static Map parseMap(String text) { + if (StringUtils.isBlank(text)) { + return null; + } + try { + return objectMapper.readValue(text, new TypeReference>() { + }); + } catch (IOException e) { + throw new RuntimeException(e); + } + } public static List parseArray(String text, Class clazz) { if (StringUtils.isEmpty(text)) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java index 7dac75a3b..039eb2435 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java @@ -1,16 +1,15 @@ package com.ruoyi.common.utils; +import com.ruoyi.common.utils.spring.SpringUtils; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; -import com.ruoyi.common.utils.spring.SpringUtils; /** * 获取i18n资源文件 - * + * * @author ruoyi */ -public class MessageUtils -{ +public class MessageUtils { /** * 根据消息键和参数 获取消息 委托给spring messageSource * @@ -18,8 +17,7 @@ public class MessageUtils * @param args 参数 * @return 获取国际化翻译值 */ - public static String message(String code, Object... args) - { + public static String message(String code, Object... args) { MessageSource messageSource = SpringUtils.getBean(MessageSource.class); return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java index a0b4d3c65..b358e3be7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java @@ -48,6 +48,7 @@ public class PageUtils { /** * 构建 plus 分页对象 + * * @param domain 实体 * @param vo 实体 * @return 分页对象 @@ -66,12 +67,13 @@ public class PageUtils { return page; } - public static Page buildPage() { - return buildPage(null, null); - } + public static Page buildPage() { + return buildPage(null, null); + } /** * 构建 MP 普通分页对象 + * * @param domain 实体 * @return 分页对象 */ @@ -98,8 +100,8 @@ public class PageUtils { } if (StringUtils.isNotBlank(orderByColumn)) { String orderBy = SqlUtil.escapeOrderBySql(orderByColumn); - orderBy = StringUtils.toUnderScoreCase(orderBy); - if ("asc".equals(isAsc)) { + orderBy = StringUtils.toUnderScoreCase(orderBy); + if ("asc".equals(isAsc)) { return OrderItem.asc(orderBy); } else if ("desc".equals(isAsc)) { return OrderItem.desc(orderBy); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java index 969eaf579..91a40ec12 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -1,30 +1,26 @@ package com.ruoyi.common.utils; import cn.hutool.http.HttpStatus; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.exception.ServiceException; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import com.ruoyi.common.core.domain.model.LoginUser; -import com.ruoyi.common.exception.ServiceException; /** * 安全服务工具类 * * @author ruoyi */ -public class SecurityUtils -{ +public class SecurityUtils { + /** * 用户ID **/ - public static Long getUserId() - { - try - { + public static Long getUserId() { + try { return getLoginUser().getUserId(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取用户ID异常", HttpStatus.HTTP_UNAUTHORIZED); } } @@ -32,14 +28,10 @@ public class SecurityUtils /** * 获取部门ID **/ - public static Long getDeptId() - { - try - { + public static Long getDeptId() { + try { return getLoginUser().getDeptId(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取部门ID异常", HttpStatus.HTTP_UNAUTHORIZED); } } @@ -47,14 +39,10 @@ public class SecurityUtils /** * 获取用户账户 **/ - public static String getUsername() - { - try - { + public static String getUsername() { + try { return getLoginUser().getUsername(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取用户账户异常", HttpStatus.HTTP_UNAUTHORIZED); } } @@ -62,14 +50,10 @@ public class SecurityUtils /** * 获取用户 **/ - public static LoginUser getLoginUser() - { - try - { + public static LoginUser getLoginUser() { + try { return (LoginUser) getAuthentication().getPrincipal(); - } - catch (Exception e) - { + } catch (Exception e) { throw new ServiceException("获取用户信息异常", HttpStatus.HTTP_UNAUTHORIZED); } } @@ -77,8 +61,7 @@ public class SecurityUtils /** * 获取Authentication */ - public static Authentication getAuthentication() - { + public static Authentication getAuthentication() { return SecurityContextHolder.getContext().getAuthentication(); } @@ -88,8 +71,7 @@ public class SecurityUtils * @param password 密码 * @return 加密字符串 */ - public static String encryptPassword(String password) - { + public static String encryptPassword(String password) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.encode(password); } @@ -97,12 +79,11 @@ public class SecurityUtils /** * 判断密码是否相同 * - * @param rawPassword 真实密码 + * @param rawPassword 真实密码 * @param encodedPassword 加密后字符 * @return 结果 */ - public static boolean matchesPassword(String rawPassword, String encodedPassword) - { + public static boolean matchesPassword(String rawPassword, String encodedPassword) { BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); return passwordEncoder.matches(rawPassword, encodedPassword); } @@ -113,8 +94,7 @@ public class SecurityUtils * @param userId 用户ID * @return 结果 */ - public static boolean isAdmin(Long userId) - { + public static boolean isAdmin(Long userId) { return userId != null && 1L == userId; } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java index f611834d3..1e1db3749 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java @@ -20,33 +20,34 @@ import java.nio.charset.StandardCharsets; * @author ruoyi */ public class ServletUtils extends ServletUtil { - /** - * 获取String参数 - */ - public static String getParameter(String name) { - return getRequest().getParameter(name); - } - /** - * 获取String参数 - */ - public static String getParameter(String name, String defaultValue) { - return Convert.toStr(getRequest().getParameter(name), defaultValue); - } + /** + * 获取String参数 + */ + public static String getParameter(String name) { + return getRequest().getParameter(name); + } - /** - * 获取Integer参数 - */ - public static Integer getParameterToInt(String name) { - return Convert.toInt(getRequest().getParameter(name)); - } + /** + * 获取String参数 + */ + public static String getParameter(String name, String defaultValue) { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } - /** - * 获取Integer参数 - */ - public static Integer getParameterToInt(String name, Integer defaultValue) { - return Convert.toInt(getRequest().getParameter(name), defaultValue); - } + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name) { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 获取Integer参数 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } /** * 获取Boolean参数 @@ -69,75 +70,75 @@ public class ServletUtils extends ServletUtil { return getRequestAttributes().getRequest(); } - /** - * 获取response - */ - public static HttpServletResponse getResponse() { - return getRequestAttributes().getResponse(); - } + /** + * 获取response + */ + public static HttpServletResponse getResponse() { + return getRequestAttributes().getResponse(); + } - /** - * 获取session - */ - public static HttpSession getSession() { - return getRequest().getSession(); - } + /** + * 获取session + */ + public static HttpSession getSession() { + return getRequest().getSession(); + } - public static ServletRequestAttributes getRequestAttributes() { - RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); - return (ServletRequestAttributes) attributes; - } + public static ServletRequestAttributes getRequestAttributes() { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } - /** - * 将字符串渲染到客户端 - * - * @param response 渲染对象 - * @param string 待渲染的字符串 - * @return null - */ - public static String renderString(HttpServletResponse response, String string) { - try { - response.setStatus(HttpStatus.HTTP_OK); - response.setContentType(MediaType.APPLICATION_JSON_VALUE); - response.setCharacterEncoding(StandardCharsets.UTF_8.toString()); - response.getWriter().print(string); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } + /** + * 将字符串渲染到客户端 + * + * @param response 渲染对象 + * @param string 待渲染的字符串 + * @return null + */ + public static String renderString(HttpServletResponse response, String string) { + try { + response.setStatus(HttpStatus.HTTP_OK); + response.setContentType(MediaType.APPLICATION_JSON_VALUE); + response.setCharacterEncoding(StandardCharsets.UTF_8.toString()); + response.getWriter().print(string); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } - /** - * 是否是Ajax异步请求 - * - * @param request - */ - public static boolean isAjaxRequest(HttpServletRequest request) { + /** + * 是否是Ajax异步请求 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) { - String accept = request.getHeader("accept"); - if (accept != null && accept.indexOf("application/json") != -1) { - return true; - } + String accept = request.getHeader("accept"); + if (accept != null && accept.indexOf("application/json") != -1) { + return true; + } - String xRequestedWith = request.getHeader("X-Requested-With"); - if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) { - return true; - } + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) { + return true; + } - String uri = request.getRequestURI(); - if (StringUtils.equalsAnyIgnoreCase(uri, ".json", ".xml")) { - return true; - } + String uri = request.getRequestURI(); + if (StringUtils.equalsAnyIgnoreCase(uri, ".json", ".xml")) { + return true; + } - String ajax = request.getParameter("__ajax"); - if (StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml")) { - return true; - } - return false; - } + String ajax = request.getParameter("__ajax"); + if (StringUtils.equalsAnyIgnoreCase(ajax, "json", "xml")) { + return true; + } + return false; + } - public static String getClientIP() { - return getClientIP(getRequest()); - } + public static String getClientIP() { + return getClientIP(getRequest()); + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java index c6371cc32..12fc4db9b 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -13,7 +13,7 @@ import java.util.*; /** * 字符串工具类 * - * @author ruoyi + * @author Lion Li */ public class StringUtils extends org.apache.commons.lang3.StringUtils { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java index 193419506..9474a9597 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java @@ -1,33 +1,25 @@ package com.ruoyi.common.utils; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.concurrent.*; + /** * 线程相关工具类. - * + * * @author ruoyi */ -public class Threads -{ +public class Threads { private static final Logger logger = LoggerFactory.getLogger(Threads.class); /** * sleep等待,单位为毫秒 */ - public static void sleep(long milliseconds) - { - try - { + public static void sleep(long milliseconds) { + try { Thread.sleep(milliseconds); - } - catch (InterruptedException e) - { + } catch (InterruptedException e) { return; } } @@ -39,24 +31,17 @@ public class Threads * 如果仍人超時,則強制退出. * 另对在shutdown时线程本身被调用中断做了处理. */ - public static void shutdownAndAwaitTermination(ExecutorService pool) - { - if (pool != null && !pool.isShutdown()) - { + public static void shutdownAndAwaitTermination(ExecutorService pool) { + if (pool != null && !pool.isShutdown()) { pool.shutdown(); - try - { - if (!pool.awaitTermination(120, TimeUnit.SECONDS)) - { + try { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) { pool.shutdownNow(); - if (!pool.awaitTermination(120, TimeUnit.SECONDS)) - { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) { logger.info("Pool did not terminate"); } } - } - catch (InterruptedException ie) - { + } catch (InterruptedException ie) { pool.shutdownNow(); Thread.currentThread().interrupt(); } @@ -66,33 +51,22 @@ public class Threads /** * 打印线程异常信息 */ - public static void printException(Runnable r, Throwable t) - { - if (t == null && r instanceof Future) - { - try - { + public static void printException(Runnable r, Throwable t) { + if (t == null && r instanceof Future) { + try { Future future = (Future) r; - if (future.isDone()) - { + if (future.isDone()) { future.get(); } - } - catch (CancellationException ce) - { + } catch (CancellationException ce) { t = ce; - } - catch (ExecutionException ee) - { + } catch (ExecutionException ee) { t = ee.getCause(); - } - catch (InterruptedException ie) - { + } catch (InterruptedException ie) { Thread.currentThread().interrupt(); } } - if (t != null) - { + if (t != null) { logger.error(t.getMessage(), t); } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index 3ab304c0c..6e09a4a4f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -10,20 +10,18 @@ import java.nio.charset.StandardCharsets; /** * 文件处理工具类 * - * @author ruoyi + * @author Lion Li */ -public class FileUtils extends FileUtil -{ +public class FileUtils extends FileUtil { /** * 下载文件名重新编码 * - * @param response 响应对象 + * @param response 响应对象 * @param realFileName 真实文件名 * @return */ - public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException - { + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { String percentEncodedFileName = percentEncode(realFileName); StringBuilder contentDispositionValue = new StringBuilder(); @@ -44,8 +42,7 @@ public class FileUtils extends FileUtil * @param s 需要百分号编码的字符串 * @return 百分号编码后的字符串 */ - public static String percentEncode(String s) throws UnsupportedEncodingException - { + public static String percentEncode(String s) throws UnsupportedEncodingException { String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); return encode.replaceAll("\\+", "%20"); } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java index bd7522c51..808cc8d5c 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java @@ -14,45 +14,45 @@ import java.util.Map; /** * 获取地址类 * - * @author ruoyi + * @author Lion Li */ @Slf4j public class AddressUtils { - // IP地址查询 - public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + // IP地址查询 + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; - // 未知地址 - public static final String UNKNOWN = "XX XX"; + // 未知地址 + public static final String UNKNOWN = "XX XX"; - public static String getRealAddressByIP(String ip) { - String address = UNKNOWN; - if (StringUtils.isBlank(ip)){ - return address; - } - // 内网不查询 - ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip); - if (NetUtil.isInnerIP(ip)) { - return "内网IP"; - } - if (RuoYiConfig.isAddressEnabled()) { - try { - String rspStr = HttpUtil.createGet(IP_URL) - .body("ip=" + ip + "&json=true", Constants.GBK) - .execute() - .body(); - if (StringUtils.isEmpty(rspStr)) { - log.error("获取地理位置异常 {}", ip); - return UNKNOWN; - } - Map obj = JsonUtils.parseMap(rspStr); - String region = obj.get("pro"); - String city = obj.get("city"); - return String.format("%s %s", region, city); - } catch (Exception e) { - log.error("获取地理位置异常 {}", ip); - } - } - return address; - } + public static String getRealAddressByIP(String ip) { + String address = UNKNOWN; + if (StringUtils.isBlank(ip)) { + return address; + } + // 内网不查询 + ip = "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip); + if (NetUtil.isInnerIP(ip)) { + return "内网IP"; + } + if (RuoYiConfig.isAddressEnabled()) { + try { + String rspStr = HttpUtil.createGet(IP_URL) + .body("ip=" + ip + "&json=true", Constants.GBK) + .execute() + .body(); + if (StringUtils.isEmpty(rspStr)) { + log.error("获取地理位置异常 {}", ip); + return UNKNOWN; + } + Map obj = JsonUtils.parseMap(rspStr); + String region = obj.get("pro"); + String city = obj.get("city"); + return String.format("%s %s", region, city); + } catch (Exception e) { + log.error("获取地理位置异常 {}", ip); + } + } + return address; + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index e3001c605..23d9afddb 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -12,14 +12,12 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; import java.util.List; /** * Excel相关处理 * - * @author ruoyi + * @author Lion Li */ public class ExcelUtil { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java index 749f1abd3..07ac943c3 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java @@ -13,41 +13,41 @@ import java.lang.reflect.Method; @SuppressWarnings("rawtypes") public class ReflectUtils extends ReflectUtil { - private static final String SETTER_PREFIX = "set"; + private static final String SETTER_PREFIX = "set"; - private static final String GETTER_PREFIX = "get"; + private static final String GETTER_PREFIX = "get"; - /** - * 调用Getter方法. - * 支持多级,如:对象名.对象名.方法 - */ - @SuppressWarnings("unchecked") - public static E invokeGetter(Object obj, String propertyName) { - Object object = obj; - for (String name : StringUtils.split(propertyName, ".")) { - String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); - object = invoke(object, getterMethodName); - } - return (E) object; - } + /** + * 调用Getter方法. + * 支持多级,如:对象名.对象名.方法 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invoke(object, getterMethodName); + } + return (E) object; + } - /** - * 调用Setter方法, 仅匹配方法名。 - * 支持多级,如:对象名.对象名.方法 - */ - public static void invokeSetter(Object obj, String propertyName, E value) { - Object object = obj; - String[] names = StringUtils.split(propertyName, "."); - for (int i = 0; i < names.length; i++) { - if (i < names.length - 1) { - String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); - object = invoke(object, getterMethodName); - } else { - String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); - Method method = getMethodByName(object.getClass(), setterMethodName); - invoke(object, method, value); - } - } - } + /** + * 调用Setter方法, 仅匹配方法名。 + * 支持多级,如:对象名.对象名.方法 + */ + public static void invokeSetter(Object obj, String propertyName, E value) { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) { + if (i < names.length - 1) { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invoke(object, getterMethodName); + } else { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + Method method = getMethodByName(object.getClass(), setterMethodName); + invoke(object, method, value); + } + } + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java index 14ff8a4d6..ebc6d27f4 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java @@ -13,53 +13,53 @@ import org.springframework.stereotype.Component; @Component public final class SpringUtils extends SpringUtil { - /** - * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true - * - * @param name - * @return boolean - */ - public static boolean containsBean(String name) { - return getBeanFactory().containsBean(name); - } + /** + * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) { + return getBeanFactory().containsBean(name); + } - /** - * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 - * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) - * - * @param name - * @return boolean - */ - public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { - return getBeanFactory().isSingleton(name); - } + /** + * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 + * 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) + * + * @param name + * @return boolean + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { + return getBeanFactory().isSingleton(name); + } - /** - * @param name - * @return Class 注册对象的类型 - */ - public static Class getType(String name) throws NoSuchBeanDefinitionException { - return getBeanFactory().getType(name); - } + /** + * @param name + * @return Class 注册对象的类型 + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException { + return getBeanFactory().getType(name); + } - /** - * 如果给定的bean名字在bean定义中有别名,则返回这些别名 - * - * @param name - */ - public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { - return getBeanFactory().getAliases(name); - } + /** + * 如果给定的bean名字在bean定义中有别名,则返回这些别名 + * + * @param name + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException { + return getBeanFactory().getAliases(name); + } - /** - * 获取aop代理对象 - * - * @param invoker - * @return - */ - @SuppressWarnings("unchecked") - public static T getAopProxy(T invoker) { - return (T) AopContext.currentProxy(); - } + /** + * 获取aop代理对象 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) { + return (T) AopContext.currentProxy(); + } } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java index 04731a5cf..8121e0253 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java @@ -8,8 +8,7 @@ import com.ruoyi.common.utils.StringUtils; * * @author ruoyi */ -public class SqlUtil -{ +public class SqlUtil { /** * 仅支持字母、数字、下划线、空格、逗号、小数点(支持多个字段排序) */ @@ -18,10 +17,8 @@ public class SqlUtil /** * 检查字符,防止注入绕过 */ - public static String escapeOrderBySql(String value) - { - if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) - { + public static String escapeOrderBySql(String value) { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) { throw new UtilException("参数不符合规范,不能进行查询"); } return value; @@ -30,8 +27,7 @@ public class SqlUtil /** * 验证 order by 语法是否符合规范 */ - public static boolean isValidOrderBySql(String value) - { + public static boolean isValidOrderBySql(String value) { return value.matches(SQL_PATTERN); } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java index 967ef6464..4ebb4aaea 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -23,15 +23,14 @@ import java.io.IOException; * @author ruoyi */ @Component -public class JwtAuthenticationTokenFilter extends OncePerRequestFilter -{ +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter { + @Autowired private TokenService tokenService; @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) - throws ServletException, IOException - { + throws ServletException, IOException { LoginUser loginUser = tokenService.getLoginUser(request); if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) { tokenService.verifyToken(loginUser); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java index 5757081dd..35b0f921c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java @@ -1,10 +1,10 @@ package com.ruoyi.framework.security.handle; -import com.ruoyi.common.utils.StringUtils; import cn.hutool.http.HttpStatus; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.AuthenticationEntryPoint; import org.springframework.stereotype.Component; @@ -20,14 +20,12 @@ import java.io.Serializable; * @author ruoyi */ @Component -public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable -{ +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable { private static final long serialVersionUID = -8970718410437077606L; @Override public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) - throws IOException - { + throws IOException { int code = HttpStatus.HTTP_UNAUTHORIZED; String msg = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI()); ServletUtils.renderString(response, JsonUtils.toJsonString(AjaxResult.error(code, msg))); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java index 9cf69ffb8..d76e61601 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java @@ -5,8 +5,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.exception.DemoModeException; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.AccessDeniedException; import org.springframework.validation.BindException; import org.springframework.web.HttpRequestMethodNotSupportedException; @@ -20,19 +19,17 @@ import javax.validation.ConstraintViolationException; /** * 全局异常处理器 * - * @author ruoyi + * @author Lion Li */ +@Slf4j @RestControllerAdvice -public class GlobalExceptionHandler -{ - private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); +public class GlobalExceptionHandler { /** * 权限校验异常 */ @ExceptionHandler(AccessDeniedException.class) - public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) - { + public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',权限校验失败'{}'", requestURI, e.getMessage()); return AjaxResult.error(HttpStatus.HTTP_FORBIDDEN, "没有权限,请联系管理员授权"); @@ -42,9 +39,8 @@ public class GlobalExceptionHandler * 请求方式不支持 */ @ExceptionHandler(HttpRequestMethodNotSupportedException.class) - public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, - HttpServletRequest request) - { + public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',不支持'{}'请求", requestURI, e.getMethod()); return AjaxResult.error(e.getMessage()); @@ -54,8 +50,7 @@ public class GlobalExceptionHandler * 业务异常 */ @ExceptionHandler(ServiceException.class) - public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) - { + public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) { log.error(e.getMessage(), e); Integer code = e.getCode(); return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); @@ -65,8 +60,7 @@ public class GlobalExceptionHandler * 拦截未知的运行时异常 */ @ExceptionHandler(RuntimeException.class) - public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) - { + public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',发生未知异常.", requestURI, e); return AjaxResult.error(e.getMessage()); @@ -76,8 +70,7 @@ public class GlobalExceptionHandler * 系统异常 */ @ExceptionHandler(Exception.class) - public AjaxResult handleException(Exception e, HttpServletRequest request) - { + public AjaxResult handleException(Exception e, HttpServletRequest request) { String requestURI = request.getRequestURI(); log.error("请求地址'{}',发生系统异常.", requestURI, e); return AjaxResult.error(e.getMessage()); @@ -87,8 +80,7 @@ public class GlobalExceptionHandler * 自定义验证异常 */ @ExceptionHandler(BindException.class) - public AjaxResult handleBindException(BindException e) - { + public AjaxResult handleBindException(BindException e) { log.error(e.getMessage(), e); String message = e.getAllErrors().get(0).getDefaultMessage(); return AjaxResult.error(message); @@ -98,7 +90,7 @@ public class GlobalExceptionHandler * 自定义验证异常 */ @ExceptionHandler(ConstraintViolationException.class) - public AjaxResult constraintViolationException(ConstraintViolationException e) { + public AjaxResult constraintViolationException(ConstraintViolationException e) { log.error(e.getMessage(), e); String message = e.getConstraintViolations().iterator().next().getMessage(); return AjaxResult.error(message); @@ -108,8 +100,7 @@ public class GlobalExceptionHandler * 自定义验证异常 */ @ExceptionHandler(MethodArgumentNotValidException.class) - public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) - { + public AjaxResult handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { log.error(e.getMessage(), e); String message = e.getBindingResult().getFieldError().getDefaultMessage(); return AjaxResult.error(message); @@ -119,8 +110,7 @@ public class GlobalExceptionHandler * 演示模式异常 */ @ExceptionHandler(DemoModeException.class) - public AjaxResult handleDemoModeException(DemoModeException e) - { + public AjaxResult handleDemoModeException(DemoModeException e) { return AjaxResult.error("演示模式,不允许操作"); } } From 2d7d137abd0eb54a632ca2e18424348eab96cdd8 Mon Sep 17 00:00:00 2001 From: abbfun <819589789@qq.com> Date: Fri, 22 Oct 2021 03:09:54 +0000 Subject: [PATCH 66/82] =?UTF-8?q?update=20ruoyi-common/src/main/java/com/r?= =?UTF-8?q?uoyi/common/core/domain/AjaxResult.java.=20AjaxResult=E9=93=BE?= =?UTF-8?q?=E5=BC=8F=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/core/domain/AjaxResult.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 b26e066ab..472afc868 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 @@ -145,4 +145,16 @@ public class AjaxResult extends HashMap { return new AjaxResult(code, msg, null); } + + /** + * 链式调用 + * + * @param key 键 + * @param value 内容 + * @return 警告消息 + */ + public AjaxResult put(String key, Object value) { + super.put(key, value); + return this; + } } From 296e6171a1191ba5fcd674a29499547bf30c5f57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 22 Oct 2021 11:22:31 +0800 Subject: [PATCH 67/82] =?UTF-8?q?update=20=E8=A1=A5=E5=85=A8=E5=9B=BD?= =?UTF-8?q?=E9=99=85=E5=8C=96=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/resources/i18n/messages.properties | 5 -- .../resources/i18n/messages_en_US.properties | 59 +++++++++---------- .../resources/i18n/messages_zh_CN.properties | 5 -- 3 files changed, 29 insertions(+), 40 deletions(-) diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties index 3e4694f62..ede2df8c8 100644 --- a/ruoyi-admin/src/main/resources/i18n/messages.properties +++ b/ruoyi-admin/src/main/resources/i18n/messages.properties @@ -10,12 +10,9 @@ user.password.delete=对不起,您的账号已被删除 user.blocked=用户已封禁,请联系管理员 role.blocked=角色已封禁,请联系管理员 user.logout.success=退出成功 - length.not.valid=长度必须在{min}到{max}个字符之间 - user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 user.password.not.valid=* 5-50个字符 - user.email.not.valid=邮箱格式错误 user.mobile.phone.number.not.valid=手机号格式错误 user.login.success=登录成功 @@ -23,11 +20,9 @@ user.register.success=注册成功 user.notfound=请重新登录 user.forcelogout=管理员强制退出,请重新登录 user.unknown.error=未知错误,请重新登录 - ##文件上传消息 upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
    允许的文件最大大小是:{0}MB! upload.filename.exceed.length=上传的文件名最长{0}个字符 - ##权限 no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] diff --git a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties b/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties index 8a3fba3fd..af57cf4e4 100644 --- a/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties +++ b/ruoyi-admin/src/main/resources/i18n/messages_en_US.properties @@ -1,33 +1,32 @@ #错误消息 -not.null= -user.jcaptcha.error= -user.jcaptcha.expire= -user.not.exists= -user.password.not.match= -user.password.retry.limit.count= -user.password.retry.limit.exceed= -user.password.delete= -user.blocked= -role.blocked= -user.logout.success= -length.not.valid= -user.username.not.valid= -user.password.not.valid= -user.email.not.valid= -user.mobile.phone.number.not.valid= -user.login.success= -user.register.success=register success -user.notfound= -user.unknown.error= - +not.null=* Required fill in +user.jcaptcha.error=Captcha error +user.jcaptcha.expire=Captcha invalid +user.not.exists=User does not exist/Password error +user.password.not.match=User does not exist/Password error +user.password.retry.limit.count=Password input error {0} times +user.password.retry.limit.exceed=Password input error {0} times, account locked for 10 minutes +user.password.delete=Sorry, your account has been deleted +user.blocked=User disabled,please contact administrators +role.blocked=Role disabled,please contact administrators +user.logout.success=Exit successful +length.not.valid=The length must be between {min} and {max} characters +user.username.not.valid=* 2 to 20 chinese characters, letters, numbers or underscores, and must start with a non number +user.password.not.valid=* 5-50 characters +user.email.not.valid=Mailbox format error +user.mobile.phone.number.not.valid=Phone number format error +user.login.success=Login successful +user.register.success=Register successful +user.notfound=Please login again +user.forcelogout=The administrator is forced to exit,please login again +user.unknown.error=Unknown error, please login again ##文件上传消息 -upload.exceed.maxSize= -upload.filename.exceed.length= - +upload.exceed.maxSize=The uploaded file size exceeds the limit file size!
    the maximum allowed file size is:{0}MB! +upload.filename.exceed.length=The maximum length of uploaded file name is {0} characters ##权限 -no.permission= -no.create.permission= -no.update.permission= -no.delete.permission= -no.export.permission= -no.view.permission= +no.permission=You do not have permission to the data,please contact your administrator to add permissions [{0}] +no.create.permission=You do not have permission to create data,please contact your administrator to add permissions [{0}] +no.update.permission=You do not have permission to modify data,please contact your administrator to add permissions [{0}] +no.delete.permission=You do not have permission to delete data,please contact your administrator to add permissions [{0}] +no.export.permission=You do not have permission to export data,please contact your administrator to add permissions [{0}] +no.view.permission=You do not have permission to view data,please contact your administrator to add permissions [{0}] diff --git a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties index 3e4694f62..ede2df8c8 100644 --- a/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties +++ b/ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties @@ -10,12 +10,9 @@ user.password.delete=对不起,您的账号已被删除 user.blocked=用户已封禁,请联系管理员 role.blocked=角色已封禁,请联系管理员 user.logout.success=退出成功 - length.not.valid=长度必须在{min}到{max}个字符之间 - user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头 user.password.not.valid=* 5-50个字符 - user.email.not.valid=邮箱格式错误 user.mobile.phone.number.not.valid=手机号格式错误 user.login.success=登录成功 @@ -23,11 +20,9 @@ user.register.success=注册成功 user.notfound=请重新登录 user.forcelogout=管理员强制退出,请重新登录 user.unknown.error=未知错误,请重新登录 - ##文件上传消息 upload.exceed.maxSize=上传的文件大小超出限制的文件大小!
    允许的文件最大大小是:{0}MB! upload.filename.exceed.length=上传的文件名最长{0}个字符 - ##权限 no.permission=您没有数据的权限,请联系管理员添加权限 [{0}] no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}] From b8a8b76c38fd774f1ed14774eaa7b6429fe55a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 22 Oct 2021 12:38:33 +0800 Subject: [PATCH 68/82] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E8=B7=A8?= =?UTF-8?q?=E5=9F=9F=E8=AE=BF=E9=97=AE=E6=97=A0=E6=9D=83=E9=99=90=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=AF=B7=E6=B1=82=E5=A4=B4=20download-filename=20?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E6=96=87=E4=BB=B6=E5=90=8D=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/web/controller/system/SysOssController.java | 2 -- .../src/main/java/com/ruoyi/common/utils/file/FileUtils.java | 3 +++ .../src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java | 2 -- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java index cfa4c7b9a..62f3c44c0 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysOssController.java @@ -98,8 +98,6 @@ public class SysOssController extends BaseController { throw new ServiceException("文件数据不存在!"); } response.reset(); - response.addHeader("Access-Control-Allow-Origin", "*"); - response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); FileUtils.setAttachmentResponseHeader(response, sysOss.getOriginalName()); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); long data; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index 6e09a4a4f..5df292386 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -22,6 +22,9 @@ public class FileUtils extends FileUtil { * @return */ public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException { + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); + String percentEncodedFileName = percentEncode(realFileName); StringBuilder contentDispositionValue = new StringBuilder(); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 23d9afddb..813fc979e 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -42,8 +42,6 @@ public class ExcelUtil { try { String filename = encodingFilename(sheetName); response.reset(); - response.addHeader("Access-Control-Allow-Origin", "*"); - response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); FileUtils.setAttachmentResponseHeader(response, filename); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); ServletOutputStream os = response.getOutputStream(); From 3dbbc6a22360fa65c66609285f10bffc3a32334d Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 22 Oct 2021 16:23:08 +0800 Subject: [PATCH 69/82] =?UTF-8?q?AjaxResult=E9=87=8D=E5=86=99put=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E4=BB=A5=E6=96=B9=E4=BE=BF=E9=93=BE=E5=BC=8F?= =?UTF-8?q?=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/core/domain/AjaxResult.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) 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 472afc868..8ca1b9b11 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 @@ -146,15 +146,17 @@ public class AjaxResult extends HashMap return new AjaxResult(code, msg, null); } - /** - * 链式调用 - * - * @param key 键 - * @param value 内容 - * @return 警告消息 - */ - public AjaxResult put(String key, Object value) { - super.put(key, value); - return this; - } + /** + * 方便链式调用 + * + * @param key 键 + * @param value 值 + * @return 数据对象 + */ + @Override + public AjaxResult put(String key, Object value) + { + super.put(key, value); + return this; + } } From ef4fef3d56f569d151ef71a9288e9973a19f4f6d Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 23 Oct 2021 10:21:02 +0800 Subject: [PATCH 70/82] update ry.sh. --- ry.bat | 26 +++++++++++++------------- ry.sh | 12 ++++-------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/ry.bat b/ry.bat index 5de3e1503..9f16232b2 100644 --- a/ry.bat +++ b/ry.bat @@ -4,36 +4,36 @@ rem jarƽ set AppName=ruoyi-admin.jar rem JVM -set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" +set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" -ECHO. +ECHO. ECHO. [1] %AppName% ECHO. [2] ر%AppName% ECHO. [3] %AppName% ECHO. [4] ״̬ %AppName% - ECHO. [5] -ECHO. + ECHO. [5] +ECHO. ECHO.ѡĿ: set /p ID= - IF "%id%"=="1" GOTO start - IF "%id%"=="2" GOTO stop - IF "%id%"=="3" GOTO restart + IF "%id%"=="1" GOTO start + IF "%id%"=="2" GOTO stop + IF "%id%"=="3" GOTO restart IF "%id%"=="4" GOTO status IF "%id%"=="5" EXIT -PAUSE +PAUSE :start for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( set pid=%%a set image_name=%%b ) if defined pid ( - echo %%is running - PAUSE - ) + echo %%is running + PAUSE + ) -start javaw -jar %JAVA_OPTS% ruoyi-admin.jar +start javaw %JAVA_OPTS% -jar %AppName% echo starting echo Start %AppName% success... @@ -64,4 +64,4 @@ goto:eof if not defined pid (echo process %AppName% is dead ) else ( echo %image_name% is running ) -goto:eof \ No newline at end of file +goto:eof diff --git a/ry.sh b/ry.sh index 7c4f50385..d6a9cf33a 100644 --- a/ry.sh +++ b/ry.sh @@ -1,13 +1,9 @@ #!/bin/sh -# author ruoyi -# ./ry.sh start 启动 -# ./ry.sh stop 停止 -# ./ry.sh restart 重启 -# ./ry.sh status 状态 +# ./ry.sh start 启动 stop 停止 restart 重启 status 状态 AppName=ruoyi-admin.jar # JVM参数 -JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512M -Xmx512M -XX:PermSize=256M -XX:MaxPermSize=512M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" +JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" APP_HOME=`pwd` LOG_PATH=$APP_HOME/logs/$AppName.log @@ -30,7 +26,7 @@ function start() if [ x"$PID" != x"" ]; then echo "$AppName is running..." else - nohup java -jar $JVM_OPTS target/$AppName > /dev/null 2>&1 & + nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 & echo "Start $AppName success..." fi } @@ -38,7 +34,7 @@ function start() function stop() { echo "Stop $AppName" - + PID="" query(){ PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` From a4558c32b2b7630236f9f4323c79033879c1378b Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 23 Oct 2021 10:23:32 +0800 Subject: [PATCH 71/82] =?UTF-8?q?=E8=A7=A3=E6=9E=90blob=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E7=99=BB=E5=BD=95=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/plugins/download.js | 45 +++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js index cb10ab0e4..2aa81229a 100644 --- a/ruoyi-ui/src/plugins/download.js +++ b/ruoyi-ui/src/plugins/download.js @@ -1,6 +1,7 @@ import { saveAs } from 'file-saver' import axios from 'axios' import { getToken } from '@/utils/auth' +import { Message } from 'element-ui' const baseURL = process.env.VUE_APP_BASE_API @@ -12,9 +13,14 @@ export default { url: url, responseType: 'blob', headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(res => { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURI(res.headers['download-filename'])) + }).then(async (res) => { + const isLogin = await this.blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURI(res.headers['download-filename'])) + } else { + Message.error('无效的会话,或者会话已过期,请重新登录。'); + } }) }, resource(resource) { @@ -24,9 +30,14 @@ export default { url: url, responseType: 'blob', headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(res => { - const blob = new Blob([res.data]) - this.saveAs(blob, decodeURI(res.headers['download-filename'])) + }).then(async (res) => { + const isLogin = await this.blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURI(res.headers['download-filename'])) + } else { + Message.error('无效的会话,或者会话已过期,请重新登录。'); + } }) }, zip(url, name) { @@ -36,13 +47,27 @@ export default { url: url, responseType: 'blob', headers: { 'Authorization': 'Bearer ' + getToken() } - }).then(res => { - const blob = new Blob([res.data], { type: 'application/zip' }) - this.saveAs(blob, name) + }).then(async (res) => { + const isLogin = await this.blobValidate(res.data); + if (isLogin) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name) + } else { + Message.error('无效的会话,或者会话已过期,请重新登录。'); + } }) }, saveAs(text, name, opts) { saveAs(text, name, opts); - } + }, + async blobValidate(data) { + try { + const text = await data.text(); + JSON.parse(text); + return false; + } catch (error) { + return true; + } + }, } From 17550a5f4bd152bb67a0de2c1284e2eef243777c Mon Sep 17 00:00:00 2001 From: Remenber_Ray <343509740@qq.com> Date: Sun, 24 Oct 2021 02:34:25 +0000 Subject: [PATCH 72/82] =?UTF-8?q?update=20ruoyi-common/src/main/java/com/r?= =?UTF-8?q?uoyi/common/utils/Threads.java.=20=E4=BF=AE=E5=A4=8D=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java index 395920a24..f34935284 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java @@ -36,7 +36,7 @@ public class Threads * 停止线程池 * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务. * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数. - * 如果仍人超時,則強制退出. + * 如果仍然超時,則強制退出. * 另对在shutdown时线程本身被调用中断做了处理. */ public static void shutdownAndAwaitTermination(ExecutorService pool) From 4583787759c30499cfb756615f9a10b4f7bbe281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 24 Oct 2021 17:13:04 +0800 Subject: [PATCH 73/82] =?UTF-8?q?fix=20=20=E8=B7=A8=E5=9F=9F=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E4=B9=8B=E5=90=8E=20=E4=B8=8B=E8=BD=BD=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=8E=B7=E5=8F=96=20download-filename?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/file/FileUtils.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java index 8d8f5a6a3..dd1bcc46f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -210,6 +210,8 @@ public class FileUtils .append("utf-8''") .append(percentEncodedFileName); + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); response.setHeader("Content-disposition", contentDispositionValue.toString()); response.setHeader("download-filename", percentEncodedFileName); } From 2173ed504d2f3dc0f727c2b10230ee14ed0c9436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Sun, 24 Oct 2021 17:23:15 +0800 Subject: [PATCH 74/82] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E5=85=B3?= =?UTF-8?q?=E4=BA=8E=E5=85=A8=E5=B1=80=E8=B7=AF=E5=BE=84=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=B8=8E=E6=96=87=E6=A1=A3=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/layout/components/Navbar.vue | 2 +- ruoyi-ui/src/router/index.js | 1 + ruoyi-ui/src/utils/request.js | 2 +- ruoyi-ui/vue.config.js | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue index 075bf7413..e6721b70e 100644 --- a/ruoyi-ui/src/layout/components/Navbar.vue +++ b/ruoyi-ui/src/layout/components/Navbar.vue @@ -102,7 +102,7 @@ export default { type: 'warning' }).then(() => { this.$store.dispatch('LogOut').then(() => { - this.$router.push({ path: "/login" }) + location.href = this.$router.options.base + '/index'; }) }).catch(() => {}); } diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index 96f557b34..cedf0b3aa 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -167,6 +167,7 @@ export const constantRoutes = [ ] export default new Router({ + base: "", // 项目前缀 与 publicPath 同步 例如 /api mode: 'history', // 去掉url中的# scrollBehavior: () => ({ y: 0 }), routes: constantRoutes diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 4acc3b404..e8b3b5f16 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -65,7 +65,7 @@ service.interceptors.response.use(res => { } ).then(() => { store.dispatch('LogOut').then(() => { - location.href = '/index'; + location.href = this.$router.options.base + '/index'; }) }).catch(() => {}); return Promise.reject('无效的会话,或者会话已过期,请重新登录。') diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index ee6353c2d..4d6967bda 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -16,6 +16,7 @@ module.exports = { // 部署生产环境和开发环境下的URL。 // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 + // 设置基路径参考文档: http://doc.ruoyi.vip/ruoyi-vue/document/qdsc.html#应用路径 publicPath: process.env.NODE_ENV === "production" ? "/" : "/", // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) outputDir: 'dist', From 8a7dcf8a80583eb5710a336c89be63541c3054f0 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 25 Oct 2021 10:26:00 +0800 Subject: [PATCH 75/82] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E9=94=99=E5=88=AB?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/common/annotation/RepeatSubmit.java | 2 +- .../java/com/ruoyi/framework/aspectj/RateLimiterAspect.java | 4 ++-- ruoyi-ui/src/layout/components/Settings/index.vue | 4 ++-- ruoyi-ui/src/views/index.vue | 2 +- ruoyi-ui/src/views/monitor/cache/index.vue | 2 +- ruoyi-ui/src/views/monitor/server/index.vue | 2 +- ruoyi-ui/src/views/system/role/index.vue | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) 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 408300525..1e2774350 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 @@ -27,5 +27,5 @@ public @interface RepeatSubmit /** * 提示消息 */ - public String message() default "不允许重复提交,请稍后再试"; + public String message() default "不允许重复提交,请稍候再试"; } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java index 5020d000b..7b8ccf1d3 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java @@ -61,7 +61,7 @@ public class RateLimiterAspect Long number = redisTemplate.execute(limitScript, keys, count, time); if (StringUtils.isNull(number) || number.intValue() > count) { - throw new ServiceException("访问过于频繁,请稍后再试"); + throw new ServiceException("访问过于频繁,请稍候再试"); } log.info("限制请求'{}',当前请求'{}',缓存key'{}'", count, number.intValue(), key); } @@ -71,7 +71,7 @@ public class RateLimiterAspect } catch (Exception e) { - throw new RuntimeException("服务器限流异常,请稍后再试"); + throw new RuntimeException("服务器限流异常,请稍候再试"); } } diff --git a/ruoyi-ui/src/layout/components/Settings/index.vue b/ruoyi-ui/src/layout/components/Settings/index.vue index 4dff1d0c5..bd2f553cf 100644 --- a/ruoyi-ui/src/layout/components/Settings/index.vue +++ b/ruoyi-ui/src/layout/components/Settings/index.vue @@ -162,7 +162,7 @@ export default { this.sideTheme = val; }, saveSetting() { - this.$modal.loading("正在保存到本地,请稍后..."); + this.$modal.loading("正在保存到本地,请稍候..."); this.$cache.local.set( "layout-setting", `{ @@ -178,7 +178,7 @@ export default { setTimeout(this.$modal.closeLoading(), 1000) }, resetSetting() { - this.$modal.loading("正在清除设置缓存并刷新,请稍后..."); + this.$modal.loading("正在清除设置缓存并刷新,请稍候..."); this.$cache.local.remove("layout-setting") setTimeout("window.location.reload()", 1000) } diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 00379e5aa..46811841b 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -590,7 +590,7 @@

  • 修复表格时间为空出现的异常
  • 添加Jackson日期反序列化时区配置
  • 调整根据用户权限加载菜单数据树形结构
  • -
  • 调整成功登陆不恢复按钮,防止多次点击
  • +
  • 调整成功登录不恢复按钮,防止多次点击
  • 修改用户个人资料同步缓存信息
  • 修复页面同时出现el-upload和Editor不显示处理
  • 修复在角色管理页修改菜单权限偶尔未选中问题
  • diff --git a/ruoyi-ui/src/views/monitor/cache/index.vue b/ruoyi-ui/src/views/monitor/cache/index.vue index 22501dc34..cafa28cfb 100644 --- a/ruoyi-ui/src/views/monitor/cache/index.vue +++ b/ruoyi-ui/src/views/monitor/cache/index.vue @@ -139,7 +139,7 @@ export default { }, // 打开加载层 openLoading() { - this.$modal.loading("正在加载缓存监控数据,请稍后!"); + this.$modal.loading("正在加载缓存监控数据,请稍候!"); }, }, }; diff --git a/ruoyi-ui/src/views/monitor/server/index.vue b/ruoyi-ui/src/views/monitor/server/index.vue index 503bf9b61..3eaaea0e1 100644 --- a/ruoyi-ui/src/views/monitor/server/index.vue +++ b/ruoyi-ui/src/views/monitor/server/index.vue @@ -196,7 +196,7 @@ export default { }, // 打开加载层 openLoading() { - this.$modal.loading("正在加载服务监控数据,请稍后!"); + this.$modal.loading("正在加载服务监控数据,请稍候!"); } } }; diff --git a/ruoyi-ui/src/views/system/role/index.vue b/ruoyi-ui/src/views/system/role/index.vue index 6e5855863..5110834d4 100644 --- a/ruoyi-ui/src/views/system/role/index.vue +++ b/ruoyi-ui/src/views/system/role/index.vue @@ -200,7 +200,7 @@ ref="menu" node-key="id" :check-strictly="!form.menuCheckStrictly" - empty-text="加载中,请稍后" + empty-text="加载中,请稍候" :props="defaultProps" > @@ -245,7 +245,7 @@ ref="dept" node-key="id" :check-strictly="!form.deptCheckStrictly" - empty-text="加载中,请稍后" + empty-text="加载中,请稍候" :props="defaultProps" > From e47dcb10decfb156048ec20d80442fbaa38d94f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 25 Oct 2021 18:03:44 +0800 Subject: [PATCH 76/82] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E5=8E=9F?= =?UTF-8?q?=E7=94=9F=20=E4=BB=BB=E5=8A=A1=E8=B0=83=E5=BA=A6=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=20=E9=9B=86=E6=88=90=E4=B9=8B=E5=90=8E=20=E5=AD=97?= =?UTF-8?q?=E4=BD=93=E5=9B=BE=E6=A0=87=E8=A2=AB=E8=BF=87=E6=BB=A4=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index fe00af97d..7be85f987 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -93,6 +93,18 @@ + + org.apache.maven.plugins + maven-resources-plugin + + + ttf + jks + woff + woff2 + + + com.spotify From d254340b9b8f21b7a30f260a728fa821a5b93b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Mon, 25 Oct 2021 18:33:26 +0800 Subject: [PATCH 77/82] =?UTF-8?q?fix=20=E4=BF=AE=E6=AD=A3=E9=94=99?= =?UTF-8?q?=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/framework/aspectj/RateLimiterAspect.java | 4 ++-- .../src/main/resources/mapper/system/SysRoleMapper.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java index dc140e22b..df4d9c877 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java @@ -37,13 +37,13 @@ public class RateLimiterAspect { } long number = RedisUtils.rateLimiter(combineKey, rateType, count, time); if (number == -1) { - throw new ServiceException("访问过于频繁,请稍后再试"); + throw new ServiceException("访问过于频繁,请稍候再试"); } log.info("限制令牌 => {}, 剩余令牌 => {}, 缓存key => '{}'", count, number, combineKey); } catch (ServiceException e) { throw e; } catch (Exception e) { - throw new RuntimeException("服务器限流异常,请稍后再试"); + throw new RuntimeException("服务器限流异常,请稍候再试"); } } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 87bdc63df..94b161b3b 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -100,7 +100,7 @@ WHERE r.del_flag = '0' and ur.user_id = #{userId} - select r.role_id from sys_role r left join sys_user_role ur on ur.role_id = r.role_id From 16d6e11e944b8eaac8e52dc9327278784e006670 Mon Sep 17 00:00:00 2001 From: sxq <812980466@qq.com> Date: Tue, 26 Oct 2021 15:12:58 +0800 Subject: [PATCH 78/82] =?UTF-8?q?1:=E5=8D=87=E7=BA=A7springboot=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=88=B02.5.6=E3=80=82=202:=E5=8D=87=E7=BA=A7hutool?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=88=B05.7.15=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index afa510549..fcfec2302 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ 3.2.0 - 2.5.5 + 2.5.6 UTF-8 UTF-8 1.8 @@ -28,7 +28,7 @@ 0.9.1 3.4.3.4 3.9.1 - 5.7.14 + 5.7.15 3.0.3 11.6 4.9.1 From b6596d021b6216bd7750614e5588b319b4a5ce83 Mon Sep 17 00:00:00 2001 From: Ricky Date: Tue, 26 Oct 2021 17:22:20 +0800 Subject: [PATCH 79/82] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E9=AA=8C=E8=AF=81=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-common/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 486d39f8c..eb84d30ce 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -43,8 +43,8 @@ - javax.validation - validation-api + org.springframework.boot + spring-boot-starter-validation From 2e4689d557d0585cb86fc77fd7f14bb40db7e50f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 26 Oct 2021 18:30:02 +0800 Subject: [PATCH 80/82] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0xxl-job?= =?UTF-8?q?=E6=89=A7=E8=A1=8C=E5=99=A8=E5=BC=80=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 2 ++ ruoyi-admin/src/main/resources/application-prod.yml | 2 ++ ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java | 2 ++ .../java/com/ruoyi/job/config/properties/XxlJobProperties.java | 2 ++ 4 files changed, 8 insertions(+) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index c77d5120d..015b3028e 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -16,6 +16,8 @@ spring: --- # xxl-job 配置 xxl: job: + # 执行器开关 + enabled: true # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。 admin-addresses: http://localhost:9100/xxl-job-admin # 执行器通讯TOKEN:非空时启用 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 32ebb7c38..9aac0e3b3 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -16,6 +16,8 @@ spring: --- # xxl-job 配置 xxl: job: + # 执行器开关 + enabled: true # 调度中心地址:如调度中心集群部署存在多个地址则用逗号分隔。 admin-addresses: http://172.30.0.92:9100/xxl-job-admin # 执行器通讯TOKEN:非空时启用 diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java b/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java index 5986e3b3f..2df063e36 100644 --- a/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java +++ b/ruoyi-job/src/main/java/com/ruoyi/job/config/XxlJobConfig.java @@ -5,6 +5,7 @@ import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import com.yomahub.tlog.springboot.lifecircle.TLogXxljobEnhanceInit; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -18,6 +19,7 @@ import org.springframework.context.annotation.Configuration; @Configuration @EnableConfigurationProperties(XxlJobProperties.class) @AllArgsConstructor +@ConditionalOnProperty(prefix = "xxl.job", name = "enabled", havingValue = "true") public class XxlJobConfig { private final XxlJobProperties xxlJobProperties; diff --git a/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java b/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java index d7b8dbe3f..f2c755a15 100644 --- a/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java +++ b/ruoyi-job/src/main/java/com/ruoyi/job/config/properties/XxlJobProperties.java @@ -13,6 +13,8 @@ import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "xxl.job") public class XxlJobProperties { + private Boolean enabled; + private String adminAddresses; private String accessToken; From 3bf96c6cd7a61b6b9888589abbf2162ccc6ffdec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 26 Oct 2021 19:09:50 +0800 Subject: [PATCH 81/82] =?UTF-8?q?update=20=E5=88=A0=E9=99=A4=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E4=BE=9D=E8=B5=96=20=E8=A1=A5=E5=85=A8=E6=BC=94?= =?UTF-8?q?=E7=A4=BAdemo=E6=B3=A8=E8=A7=A3=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/demo/controller/TestDemoController.java | 2 +- ruoyi-framework/pom.xml | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java index a3a9d2224..32af7d2dc 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java @@ -59,7 +59,7 @@ public class TestDemoController extends BaseController { @ApiOperation("自定义分页查询") @PreAuthorize("@ss.hasPermi('demo:demo:list')") @GetMapping("/page") - public TableDataInfo page(@Validated TestDemoBo bo) { + public TableDataInfo page(@Validated(QueryGroup.class) TestDemoBo bo) { return iTestDemoService.customPageList(bo); } diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index f80c2646b..8dc0f2589 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -40,12 +40,6 @@ spring-boot-starter-aop
    - - - org.springframework.boot - spring-boot-starter-validation - - com.alibaba From dbb2d8462bf5ca3d5dac8a16e585aaa728cf591e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Tue, 26 Oct 2021 19:42:27 +0800 Subject: [PATCH 82/82] =?UTF-8?q?update=20=E8=BF=81=E7=A7=BB=E6=89=80?= =?UTF-8?q?=E6=9C=89=E8=84=9A=E6=9C=AC=E6=96=87=E4=BB=B6=E8=87=B3script?= =?UTF-8?q?=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ry.bat => script/bin/ry.bat | 0 ry.sh => script/bin/ry.sh | 0 {docker => script/docker}/deploy.sh | 0 {docker => script/docker}/docker-compose.yml | 0 {docker => script/docker}/nginx/nginx.conf | 0 {docker => script/docker}/redis/redis.conf | 0 {sql => script/sql}/quartz.sql | 346 +++++++++---------- {sql => script/sql}/ry_20210908.sql | 0 {sql => script/sql}/tables_xxl_job.sql | 0 {sql => script/sql}/test.sql | 0 10 files changed, 173 insertions(+), 173 deletions(-) rename ry.bat => script/bin/ry.bat (100%) rename ry.sh => script/bin/ry.sh (100%) rename {docker => script/docker}/deploy.sh (100%) rename {docker => script/docker}/docker-compose.yml (100%) rename {docker => script/docker}/nginx/nginx.conf (100%) rename {docker => script/docker}/redis/redis.conf (100%) rename {sql => script/sql}/quartz.sql (98%) rename {sql => script/sql}/ry_20210908.sql (100%) rename {sql => script/sql}/tables_xxl_job.sql (100%) rename {sql => script/sql}/test.sql (100%) diff --git a/ry.bat b/script/bin/ry.bat similarity index 100% rename from ry.bat rename to script/bin/ry.bat diff --git a/ry.sh b/script/bin/ry.sh similarity index 100% rename from ry.sh rename to script/bin/ry.sh diff --git a/docker/deploy.sh b/script/docker/deploy.sh similarity index 100% rename from docker/deploy.sh rename to script/docker/deploy.sh diff --git a/docker/docker-compose.yml b/script/docker/docker-compose.yml similarity index 100% rename from docker/docker-compose.yml rename to script/docker/docker-compose.yml diff --git a/docker/nginx/nginx.conf b/script/docker/nginx/nginx.conf similarity index 100% rename from docker/nginx/nginx.conf rename to script/docker/nginx/nginx.conf diff --git a/docker/redis/redis.conf b/script/docker/redis/redis.conf similarity index 100% rename from docker/redis/redis.conf rename to script/docker/redis/redis.conf diff --git a/sql/quartz.sql b/script/sql/quartz.sql similarity index 98% rename from sql/quartz.sql rename to script/sql/quartz.sql index 5f99bfb59..cee613b7b 100644 --- a/sql/quartz.sql +++ b/script/sql/quartz.sql @@ -1,174 +1,174 @@ -DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; -DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; -DROP TABLE IF EXISTS QRTZ_LOCKS; -DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_TRIGGERS; -DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; -DROP TABLE IF EXISTS QRTZ_CALENDARS; - --- ---------------------------- --- 1、存储每一个已配置的 jobDetail 的详细信息 --- ---------------------------- -create table QRTZ_JOB_DETAILS ( - sched_name varchar(120) not null comment '调度名称', - job_name varchar(200) not null comment '任务名称', - job_group varchar(200) not null comment '任务组名', - description varchar(250) null comment '相关介绍', - job_class_name varchar(250) not null comment '执行任务类名称', - is_durable varchar(1) not null comment '是否持久化', - is_nonconcurrent varchar(1) not null comment '是否并发', - is_update_data varchar(1) not null comment '是否更新数据', - requests_recovery varchar(1) not null comment '是否接受恢复执行', - job_data blob null comment '存放持久化job对象', - primary key (sched_name, job_name, job_group) -) engine=innodb comment = '任务详细信息表'; - --- ---------------------------- --- 2、 存储已配置的 Trigger 的信息 --- ---------------------------- -create table QRTZ_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment '触发器的名字', - trigger_group varchar(200) not null comment '触发器所属组的名字', - job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键', - job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键', - description varchar(250) null comment '相关介绍', - next_fire_time bigint(13) null comment '上一次触发时间(毫秒)', - prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)', - priority integer null comment '优先级', - trigger_state varchar(16) not null comment '触发器状态', - trigger_type varchar(8) not null comment '触发器的类型', - start_time bigint(13) not null comment '开始时间', - end_time bigint(13) null comment '结束时间', - calendar_name varchar(200) null comment '日程表名称', - misfire_instr smallint(2) null comment '补偿执行的策略', - job_data blob null comment '存放持久化job对象', - 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 comment = '触发器详细信息表'; - --- ---------------------------- --- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 --- ---------------------------- -create table QRTZ_SIMPLE_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - repeat_count bigint(7) not null comment '重复的次数统计', - repeat_interval bigint(12) not null comment '重复的间隔时间', - times_triggered bigint(10) not null comment '已经触发的次数', - 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 comment = '简单触发器的信息表'; - --- ---------------------------- --- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息 --- ---------------------------- -create table QRTZ_CRON_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - cron_expression varchar(200) not null comment 'cron表达式', - time_zone_id varchar(80) comment '时区', - 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 comment = 'Cron类型的触发器表'; - --- ---------------------------- --- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) --- ---------------------------- -create table QRTZ_BLOB_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - blob_data blob null comment '存放持久化Trigger对象', - 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 comment = 'Blob类型的触发器表'; - --- ---------------------------- --- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围 --- ---------------------------- -create table QRTZ_CALENDARS ( - sched_name varchar(120) not null comment '调度名称', - calendar_name varchar(200) not null comment '日历名称', - calendar blob not null comment '存放持久化calendar对象', - primary key (sched_name, calendar_name) -) engine=innodb comment = '日历信息表'; - --- ---------------------------- --- 7、 存储已暂停的 Trigger 组的信息 --- ---------------------------- -create table QRTZ_PAUSED_TRIGGER_GRPS ( - sched_name varchar(120) not null comment '调度名称', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - primary key (sched_name, trigger_group) -) engine=innodb comment = '暂停的触发器表'; - --- ---------------------------- --- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 --- ---------------------------- -create table QRTZ_FIRED_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - entry_id varchar(95) not null comment '调度器实例id', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - instance_name varchar(200) not null comment '调度器实例名', - fired_time bigint(13) not null comment '触发的时间', - sched_time bigint(13) not null comment '定时器制定的时间', - priority integer not null comment '优先级', - state varchar(16) not null comment '状态', - job_name varchar(200) null comment '任务名称', - job_group varchar(200) null comment '任务组名', - is_nonconcurrent varchar(1) null comment '是否并发', - requests_recovery varchar(1) null comment '是否接受恢复执行', - primary key (sched_name, entry_id) -) engine=innodb comment = '已触发的触发器表'; - --- ---------------------------- --- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 --- ---------------------------- -create table QRTZ_SCHEDULER_STATE ( - sched_name varchar(120) not null comment '调度名称', - instance_name varchar(200) not null comment '实例名称', - last_checkin_time bigint(13) not null comment '上次检查时间', - checkin_interval bigint(13) not null comment '检查间隔时间', - primary key (sched_name, instance_name) -) engine=innodb comment = '调度器状态表'; - --- ---------------------------- --- 10、 存储程序的悲观锁的信息(假如使用了悲观锁) --- ---------------------------- -create table QRTZ_LOCKS ( - sched_name varchar(120) not null comment '调度名称', - lock_name varchar(40) not null comment '悲观锁名称', - primary key (sched_name, lock_name) -) engine=innodb comment = '存储的悲观锁信息表'; - --- ---------------------------- --- 11、 Quartz集群实现同步机制的行锁表 --- ---------------------------- -create table QRTZ_SIMPROP_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数', - str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数', - str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数', - int_prop_1 int null comment 'int类型的trigger的第一个参数', - int_prop_2 int null comment 'int类型的trigger的第二个参数', - long_prop_1 bigint null comment 'long类型的trigger的第一个参数', - long_prop_2 bigint null comment 'long类型的trigger的第二个参数', - dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数', - dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数', - bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数', - bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数', - 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 comment = '同步机制的行锁表'; - +DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; +DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; +DROP TABLE IF EXISTS QRTZ_LOCKS; +DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; +DROP TABLE IF EXISTS QRTZ_CALENDARS; + +-- ---------------------------- +-- 1、存储每一个已配置的 jobDetail 的详细信息 +-- ---------------------------- +create table QRTZ_JOB_DETAILS ( + sched_name varchar(120) not null comment '调度名称', + job_name varchar(200) not null comment '任务名称', + job_group varchar(200) not null comment '任务组名', + description varchar(250) null comment '相关介绍', + job_class_name varchar(250) not null comment '执行任务类名称', + is_durable varchar(1) not null comment '是否持久化', + is_nonconcurrent varchar(1) not null comment '是否并发', + is_update_data varchar(1) not null comment '是否更新数据', + requests_recovery varchar(1) not null comment '是否接受恢复执行', + job_data blob null comment '存放持久化job对象', + primary key (sched_name, job_name, job_group) +) engine=innodb comment = '任务详细信息表'; + +-- ---------------------------- +-- 2、 存储已配置的 Trigger 的信息 +-- ---------------------------- +create table QRTZ_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment '触发器的名字', + trigger_group varchar(200) not null comment '触发器所属组的名字', + job_name varchar(200) not null comment 'qrtz_job_details表job_name的外键', + job_group varchar(200) not null comment 'qrtz_job_details表job_group的外键', + description varchar(250) null comment '相关介绍', + next_fire_time bigint(13) null comment '上一次触发时间(毫秒)', + prev_fire_time bigint(13) null comment '下一次触发时间(默认为-1表示不触发)', + priority integer null comment '优先级', + trigger_state varchar(16) not null comment '触发器状态', + trigger_type varchar(8) not null comment '触发器的类型', + start_time bigint(13) not null comment '开始时间', + end_time bigint(13) null comment '结束时间', + calendar_name varchar(200) null comment '日程表名称', + misfire_instr smallint(2) null comment '补偿执行的策略', + job_data blob null comment '存放持久化job对象', + 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 comment = '触发器详细信息表'; + +-- ---------------------------- +-- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数 +-- ---------------------------- +create table QRTZ_SIMPLE_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + repeat_count bigint(7) not null comment '重复的次数统计', + repeat_interval bigint(12) not null comment '重复的间隔时间', + times_triggered bigint(10) not null comment '已经触发的次数', + 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 comment = '简单触发器的信息表'; + +-- ---------------------------- +-- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息 +-- ---------------------------- +create table QRTZ_CRON_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + cron_expression varchar(200) not null comment 'cron表达式', + time_zone_id varchar(80) comment '时区', + 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 comment = 'Cron类型的触发器表'; + +-- ---------------------------- +-- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候) +-- ---------------------------- +create table QRTZ_BLOB_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + blob_data blob null comment '存放持久化Trigger对象', + 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 comment = 'Blob类型的触发器表'; + +-- ---------------------------- +-- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围 +-- ---------------------------- +create table QRTZ_CALENDARS ( + sched_name varchar(120) not null comment '调度名称', + calendar_name varchar(200) not null comment '日历名称', + calendar blob not null comment '存放持久化calendar对象', + primary key (sched_name, calendar_name) +) engine=innodb comment = '日历信息表'; + +-- ---------------------------- +-- 7、 存储已暂停的 Trigger 组的信息 +-- ---------------------------- +create table QRTZ_PAUSED_TRIGGER_GRPS ( + sched_name varchar(120) not null comment '调度名称', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + primary key (sched_name, trigger_group) +) engine=innodb comment = '暂停的触发器表'; + +-- ---------------------------- +-- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息 +-- ---------------------------- +create table QRTZ_FIRED_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + entry_id varchar(95) not null comment '调度器实例id', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + instance_name varchar(200) not null comment '调度器实例名', + fired_time bigint(13) not null comment '触发的时间', + sched_time bigint(13) not null comment '定时器制定的时间', + priority integer not null comment '优先级', + state varchar(16) not null comment '状态', + job_name varchar(200) null comment '任务名称', + job_group varchar(200) null comment '任务组名', + is_nonconcurrent varchar(1) null comment '是否并发', + requests_recovery varchar(1) null comment '是否接受恢复执行', + primary key (sched_name, entry_id) +) engine=innodb comment = '已触发的触发器表'; + +-- ---------------------------- +-- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例 +-- ---------------------------- +create table QRTZ_SCHEDULER_STATE ( + sched_name varchar(120) not null comment '调度名称', + instance_name varchar(200) not null comment '实例名称', + last_checkin_time bigint(13) not null comment '上次检查时间', + checkin_interval bigint(13) not null comment '检查间隔时间', + primary key (sched_name, instance_name) +) engine=innodb comment = '调度器状态表'; + +-- ---------------------------- +-- 10、 存储程序的悲观锁的信息(假如使用了悲观锁) +-- ---------------------------- +create table QRTZ_LOCKS ( + sched_name varchar(120) not null comment '调度名称', + lock_name varchar(40) not null comment '悲观锁名称', + primary key (sched_name, lock_name) +) engine=innodb comment = '存储的悲观锁信息表'; + +-- ---------------------------- +-- 11、 Quartz集群实现同步机制的行锁表 +-- ---------------------------- +create table QRTZ_SIMPROP_TRIGGERS ( + sched_name varchar(120) not null comment '调度名称', + trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', + trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', + str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数', + str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数', + str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数', + int_prop_1 int null comment 'int类型的trigger的第一个参数', + int_prop_2 int null comment 'int类型的trigger的第二个参数', + long_prop_1 bigint null comment 'long类型的trigger的第一个参数', + long_prop_2 bigint null comment 'long类型的trigger的第二个参数', + dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数', + dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数', + bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数', + bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数', + 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 comment = '同步机制的行锁表'; + commit; \ No newline at end of file diff --git a/sql/ry_20210908.sql b/script/sql/ry_20210908.sql similarity index 100% rename from sql/ry_20210908.sql rename to script/sql/ry_20210908.sql diff --git a/sql/tables_xxl_job.sql b/script/sql/tables_xxl_job.sql similarity index 100% rename from sql/tables_xxl_job.sql rename to script/sql/tables_xxl_job.sql diff --git a/sql/test.sql b/script/sql/test.sql similarity index 100% rename from sql/test.sql rename to script/sql/test.sql