From 13c770b6beedaee905d99d44bcd5c3378eeda0da Mon Sep 17 00:00:00 2001 From: Awen <39176130+yu1183688986@users.noreply.github.com> Date: Wed, 27 Oct 2021 19:03:29 +0800 Subject: [PATCH 001/111] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=B8=83=E5=B0=94=E5=88=A4=E6=96=AD=E8=AF=AD=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/common/utils/html/HTMLFilter.java | 2 +- .../src/main/java/com/ruoyi/common/utils/uuid/UUID.java | 8 ++++---- .../com/ruoyi/system/service/impl/SysDeptServiceImpl.java | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java index 415acbab2..d3b211a48 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java @@ -332,7 +332,7 @@ public final class HTMLFilter final String name = m.group(1).toLowerCase(); if (allowed(name)) { - if (false == inArray(name, vSelfClosingTags)) + if (!inArray(name, vSelfClosingTags)) { if (vTagCounts.containsKey(name)) { diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java index eef72ee0b..c0c18af01 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java @@ -343,25 +343,25 @@ public final class UUID implements java.io.Serializable, Comparable final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); // time_low builder.append(digits(mostSigBits >> 32, 8)); - if (false == isSimple) + if (!isSimple) { builder.append('-'); } // time_mid builder.append(digits(mostSigBits >> 16, 4)); - if (false == isSimple) + if (!isSimple) { builder.append('-'); } // time_high_and_version builder.append(digits(mostSigBits, 4)); - if (false == isSimple) + if (!isSimple) { builder.append('-'); } // variant_and_sequence builder.append(digits(leastSigBits >> 48, 4)); - if (false == isSimple) + if (!isSimple) { builder.append('-'); } 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 a2c3b5b1e..9bf8fe0e1 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 @@ -140,7 +140,7 @@ public class SysDeptServiceImpl implements ISysDeptService public boolean hasChildByDeptId(Long deptId) { int result = deptMapper.hasChildByDeptId(deptId); - return result > 0 ? true : false; + return result > 0; } /** @@ -153,7 +153,7 @@ public class SysDeptServiceImpl implements ISysDeptService public boolean checkDeptExistUser(Long deptId) { int result = deptMapper.checkDeptExistUser(deptId); - return result > 0 ? true : false; + return result > 0; } /** @@ -325,6 +325,6 @@ public class SysDeptServiceImpl implements ISysDeptService */ private boolean hasChild(List list, SysDept t) { - return getChildList(list, t).size() > 0 ? true : false; + return getChildList(list, t).size() > 0; } } From 25321984fad576dad314864a45a7f997b278ded0 Mon Sep 17 00:00:00 2001 From: sxq <812980466@qq.com> Date: Fri, 29 Oct 2021 16:55:42 +0800 Subject: [PATCH 002/111] =?UTF-8?q?=E6=96=B0=E5=A2=9Estartup=20trace?= =?UTF-8?q?=E7=9B=91=E6=8E=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index f389ff437..85fc94ecc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -2,6 +2,7 @@ package com.ruoyi; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.metrics.buffering.BufferingApplicationStartup; /** * 启动程序 @@ -14,7 +15,11 @@ public class RuoYiApplication { public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); - SpringApplication.run(RuoYiApplication.class, args); + System.setProperty("StartFlightRecording:filename", "recording.jfr"); + System.setProperty("duration", "10s"); + SpringApplication application = new SpringApplication(RuoYiApplication.class); + application.setApplicationStartup(new BufferingApplicationStartup(2048)); + application.run(args); System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙"); } From ea2e560bd9525da57c35157b7537d29677740f2e Mon Sep 17 00:00:00 2001 From: sxq <812980466@qq.com> Date: Fri, 29 Oct 2021 17:28:33 +0800 Subject: [PATCH 003/111] =?UTF-8?q?=E5=8E=BB=E6=8E=89jfr=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E7=B1=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 85fc94ecc..9875547cb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -15,8 +15,6 @@ public class RuoYiApplication { public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); - System.setProperty("StartFlightRecording:filename", "recording.jfr"); - System.setProperty("duration", "10s"); SpringApplication application = new SpringApplication(RuoYiApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); application.run(args); From da2cb61cae18b7da32b972f9f71489bb59af6382 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, 29 Oct 2021 17:37:15 +0800 Subject: [PATCH 004/111] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=20pr=20!107?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 9875547cb..b52d32d6e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -16,8 +16,8 @@ public class RuoYiApplication { public static void main(String[] args) { System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication application = new SpringApplication(RuoYiApplication.class); - application.setApplicationStartup(new BufferingApplicationStartup(2048)); - application.run(args); + application.setApplicationStartup(new BufferingApplicationStartup(2048)); + application.run(args); System.out.println("(♥◠‿◠)ノ゙ RuoYi-Vue-Plus启动成功 ლ(´ڡ`ლ)゙"); } From cd0aad10b0e6fe284eafafd932b9d4705460c04f 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, 31 Oct 2021 21:28:19 +0800 Subject: [PATCH 005/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20SysOss?= =?UTF-8?q?=E3=80=81SysOssConfig=20=E6=9C=AA=E7=BB=A7=E6=89=BF=20BaseEntit?= =?UTF-8?q?y=20=E5=9F=BA=E7=A1=80=E5=AE=9E=E4=BD=93=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/system/domain/SysOss.java | 41 +++--------------- .../com/ruoyi/system/domain/SysOssConfig.java | 43 +++---------------- 2 files changed, 14 insertions(+), 70 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java index d090c9297..0793d04fe 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOss.java @@ -1,26 +1,23 @@ package com.ruoyi.system.domain; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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; - /** * OSS对象存储对象 * * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_oss") -public class SysOss implements Serializable { - - private static final long serialVersionUID = 1L; - +public class SysOss extends BaseEntity { /** * 对象存储主键 @@ -48,30 +45,6 @@ public class SysOss implements Serializable { */ private String url; - /** - * 创建时间 - */ - @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-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java index 3a6fb835a..ff081ce90 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOssConfig.java @@ -1,27 +1,22 @@ package com.ruoyi.system.domain; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +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; -import java.math.BigDecimal; /** * 对象存储配置对象 sys_oss_config * - * @author ruoyi - * @date 2021-08-11 + * @author Lion Li */ @Data -@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) @Accessors(chain = true) @TableName("sys_oss_config") -public class SysOssConfig implements Serializable { - - private static final long serialVersionUID=1L; - +public class SysOssConfig extends BaseEntity { /** * 主建 @@ -79,30 +74,6 @@ public class SysOssConfig implements Serializable { */ private String ext1; - /** - * 创建者 - */ - @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; - /** * 备注 */ From a8ab3ffd01fe5d3c3dd83c31bfef6218a8217755 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, 1 Nov 2021 09:55:14 +0800 Subject: [PATCH 006/111] =?UTF-8?q?update=20=E5=8D=87=E7=BA=A7=20docker=20?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/docker/docker-compose.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/script/docker/docker-compose.yml b/script/docker/docker-compose.yml index c73a93c86..c738a2514 100644 --- a/script/docker/docker-compose.yml +++ b/script/docker/docker-compose.yml @@ -2,7 +2,7 @@ version: '3' services: mysql: - image: mysql:8.0.24 + image: mysql:8.0.27 container_name: mysql environment: # 时区上海 @@ -32,8 +32,7 @@ services: ipv4_address: 172.30.0.36 nginx-web: - # 如果需要指定版本 就把 latest 换成版本号 - image: nginx:latest + image: nginx:1.21.3 container_name: nginx-web environment: # 时区上海 @@ -56,7 +55,7 @@ services: - ruoyi_net redis: - image: redis:6.2.1 + image: redis:6.2.6 container_name: redis ports: - 6379:6379 @@ -76,7 +75,7 @@ services: ipv4_address: 172.30.0.48 minio: - image: minio/minio:RELEASE.2021-07-08T01-15-01Z + image: minio/minio:RELEASE.2021-10-27T16-29-42Z container_name: minio ports: # api 端口 From 3ae5ec92a530e5f14720a8b7d490959430399b11 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 1 Nov 2021 13:29:27 +0800 Subject: [PATCH 007/111] =?UTF-8?q?=E7=99=BB=E5=BD=95/=E9=AA=8C=E8=AF=81?= =?UTF-8?q?=E7=A0=81=E8=AF=B7=E6=B1=82headers=E4=B8=8D=E8=AE=BE=E7=BD=AEto?= =?UTF-8?q?ken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/api/login.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js index 224561606..26742e79c 100644 --- a/ruoyi-ui/src/api/login.js +++ b/ruoyi-ui/src/api/login.js @@ -10,6 +10,9 @@ export function login(username, password, code, uuid) { } return request({ url: '/login', + headers: { + isToken: false + }, method: 'post', data: data }) @@ -47,6 +50,9 @@ export function logout() { export function getCodeImg() { return request({ url: '/captchaImage', + headers: { + isToken: false + }, method: 'get', timeout: 20000 }) From c4e17ff8472fd9f8123e86b593b2968ad5936b15 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, 1 Nov 2021 13:49:11 +0800 Subject: [PATCH 008/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20xxl-job-admi?= =?UTF-8?q?n=20=E9=83=A8=E7=BD=B2=E9=97=AE=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 | 1 + .../src/main/resources/application-prod.yml | 2 +- script/docker/deploy.sh | 10 +++++++--- script/docker/nginx/nginx.conf | 4 ++-- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index 1c1ba6f37..a2b198fc9 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -80,6 +80,7 @@ + ${project.artifactId} org.springframework.boot 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 index 774d7f81c..2994909ac 100644 --- 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 @@ -3,7 +3,7 @@ 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 + url: jdbc:mysql://172.30.0.36:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai username: root password: root hikari: diff --git a/script/docker/deploy.sh b/script/docker/deploy.sh index 28822ecfd..1564002d1 100644 --- a/script/docker/deploy.sh +++ b/script/docker/deploy.sh @@ -16,6 +16,10 @@ port(){ firewall-cmd --add-port=9000/tcp --permanent # minio 控制台端口 firewall-cmd --add-port=9001/tcp --permanent + # 监控中心端口 + firewall-cmd --add-port=9090/tcp --permanent + # 任务调度中心端口 + firewall-cmd --add-port=9100/tcp --permanent # 重启防火墙 service firewalld restart } @@ -39,19 +43,19 @@ base(){ docker-compose up -d mysql nginx-web redis minio } -#启动基础模块 +#启动监控模块 monitor(){ docker-compose up -d ruoyi-monitor-admin } #启动程序模块 start(){ - docker-compose up -d ruoyi-server1 ruoyi-server2 + docker-compose up -d ruoyi-xxl-job-admin ruoyi-server1 ruoyi-server2 } #停止程序模块 stop(){ - docker-compose stop ruoyi-server1 ruoyi-server2 + docker-compose stop ruoyi-xxl-job-admin ruoyi-server1 ruoyi-server2 } #关闭所有模块 diff --git a/script/docker/nginx/nginx.conf b/script/docker/nginx/nginx.conf index 93a633e14..b4ba03175 100644 --- a/script/docker/nginx/nginx.conf +++ b/script/docker/nginx/nginx.conf @@ -31,7 +31,7 @@ http { server 172.30.0.90:9090; } - upstream xxl-job-admin { + upstream xxljob-admin { server 172.30.0.92:9100; } @@ -79,7 +79,7 @@ http { 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/; + proxy_pass http://xxljob-admin/xxl-job-admin/; } error_page 500 502 503 504 /50x.html; From 181f62c15ead24c5e56b77dde3bbf443430691bf Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 1 Nov 2021 14:40:00 +0800 Subject: [PATCH 009/111] =?UTF-8?q?=E5=9B=9E=E6=98=BE=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=AD=97=E5=85=B8=E9=94=AE=E5=80=BC=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/src/utils/ruoyi.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js index 63bd379b7..440bf4cd8 100644 --- a/ruoyi-ui/src/utils/ruoyi.js +++ b/ruoyi-ui/src/utils/ruoyi.js @@ -85,8 +85,8 @@ export function selectDictLabels(datas, value, separator) { var temp = value.split(currentSeparator); Object.keys(value.split(currentSeparator)).some((val) => { Object.keys(datas).some((key) => { - if (datas[key].dictValue == ('' + temp[val])) { - actions.push(datas[key].dictLabel + currentSeparator); + if (datas[key].value == ('' + temp[val])) { + actions.push(datas[key].label + currentSeparator); } }) }) From bd09e5b11ccb425d2b280c96b98dc110b1bb2c59 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 1 Nov 2021 15:02:47 +0800 Subject: [PATCH 010/111] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E6=97=A0=E6=B3=95=E8=A2=AB=E5=8F=8D=E8=BD=AC=E4=B9=89?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/utils/html/EscapeUtil.java | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java index 65fd7920f..dda96c32f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java @@ -69,26 +69,37 @@ public class EscapeUtil */ private static String encode(String text) { - int len; - if ((text == null) || ((len = text.length()) == 0)) + if (StringUtils.isEmpty(text)) { return StringUtils.EMPTY; } - StringBuilder buffer = new StringBuilder(len + (len >> 2)); + + final StringBuilder tmp = new StringBuilder(text.length() * 6); char c; - for (int i = 0; i < len; i++) + for (int i = 0; i < text.length(); i++) { c = text.charAt(i); - if (c < 64) + if (c < 256) { - buffer.append(TEXT[c]); + tmp.append("%"); + if (c < 16) + { + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); } else { - buffer.append(c); + tmp.append("%u"); + if (c <= 0xfff) + { + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); } } - return buffer.toString(); + return tmp.toString(); } /** @@ -145,11 +156,12 @@ public class EscapeUtil public static void main(String[] args) { String html = ""; + String escape = EscapeUtil.escape(html); // String html = "ipt>alert(\"XSS\")ipt>"; // String html = "<123"; // String html = "123>"; - System.out.println(EscapeUtil.clean(html)); - System.out.println(EscapeUtil.escape(html)); - System.out.println(EscapeUtil.unescape(html)); + System.out.println("clean: " + EscapeUtil.clean(html)); + System.out.println("escape: " + escape); + System.out.println("unescape: " + EscapeUtil.unescape(escape)); } } From cc4c52c998f5ffd6adc63d62d870ce76ffa9ae61 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 1 Nov 2021 15:03:06 +0800 Subject: [PATCH 011/111] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=B1=8F=E8=94=BD?= =?UTF-8?q?=E8=BF=9D=E8=A7=84=E5=AD=97=E7=AC=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/common/constant/Constants.java | 8 +++++++- .../com/ruoyi/quartz/controller/SysJobController.java | 8 ++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 9f55771bf..9e770c812 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 @@ -148,4 +148,10 @@ public class Constants * LDAP 远程方法调用 */ public static final String LOOKUP_LDAP = "ldap://"; -} + + /** + * 定时任务违规的字符 + */ + public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework.jndi" }; +} \ No newline at end of file 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 c9616c2f6..2f3ddab6f 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 @@ -96,6 +96,10 @@ public class SysJobController extends BaseController { return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用"); } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) + { + return error("新增任务'" + job.getJobName() + "'失败,目标字符串存在违规"); + } job.setCreateBy(getUsername()); return toAjax(jobService.insertJob(job)); } @@ -124,6 +128,10 @@ public class SysJobController extends BaseController { return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用"); } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) + { + return error("修改任务'" + job.getJobName() + "'失败,目标字符串存在违规"); + } job.setUpdateBy(getUsername()); return toAjax(jobService.updateJob(job)); } From 06f06ce390a268800eace3dfc4785b8846f3c173 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, 1 Nov 2021 17:44:01 +0800 Subject: [PATCH 012/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20Linux=20?= =?UTF-8?q?=E6=B8=85=E9=99=A4=E4=B8=B4=E6=97=B6=E7=9B=AE=E5=BD=95=20?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E4=B8=8A=E4=BC=A0=E6=89=BE=E4=B8=8D=E5=88=B0?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/Dockerfile | 1 + ruoyi-admin/src/main/resources/application-prod.yml | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/ruoyi-admin/Dockerfile b/ruoyi-admin/Dockerfile index 88f4932b6..1bbd2ccf6 100644 --- a/ruoyi-admin/Dockerfile +++ b/ruoyi-admin/Dockerfile @@ -4,6 +4,7 @@ MAINTAINER Lion Li RUN mkdir -p /ruoyi/server RUN mkdir -p /ruoyi/server/logs +RUN mkdir -p /ruoyi/server/temp WORKDIR /ruoyi/server diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 9aac0e3b3..4f024f450 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -1,3 +1,10 @@ +--- # 配置临时路径存储 +spring: + servlet: + multipart: + # 临时文件存储位置 避免临时文件被系统清理报错 + location: ./temp + --- # 监控配置 spring: boot: From bbbe83b737bb39804967a23502cbf9af135db164 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 2 Nov 2021 14:40:21 +0800 Subject: [PATCH 013/111] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=BE=A4?= =?UTF-8?q?=E5=8F=B7=EF=BC=9A101539465?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- ruoyi-ui/src/views/index.vue | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f1ec311a8..0c10287a4 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,4 @@ ## 若依前后端分离交流群 -QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) 点击按钮入群。 \ No newline at end of file +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) 点击按钮入群。 \ No newline at end of file diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 46811841b..4609c136e 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -120,9 +120,9 @@

QQ群:满937441 满887144332 满180251782 满104180207 - 满186866453 满201396349 - - 101456076满186866453 满201396349 满101456076 + + 101539465

From 0b35927b16a220a2b8bd37bb4668269b425c5c2f 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, 2 Nov 2021 22:43:53 +0800 Subject: [PATCH 014/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E5=AE=9E=E4=BD=93=20=E4=BC=A0=E5=8F=82=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=8E=A5=E6=94=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/core/domain/BaseEntity.java | 2 -- 1 file changed, 2 deletions(-) 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 18a8d66e9..b21807033 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 @@ -2,7 +2,6 @@ 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.experimental.Accessors; @@ -62,7 +61,6 @@ public class BaseEntity implements Serializable { /** * 请求参数 */ - @JsonIgnore @ApiModelProperty(value = "请求参数") @TableField(exist = false) private Map params = new HashMap<>(); From 1d32420a279bc42b356168181c3a8254dd14e1dd 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, 3 Nov 2021 13:50:51 +0800 Subject: [PATCH 015/111] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20ValidatorUti?= =?UTF-8?q?ls=20=E6=A0=A1=E9=AA=8C=E6=A1=86=E6=9E=B6=E5=B7=A5=E5=85=B7=20?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=9C=A8=E9=9D=9E=20Controller=20=E7=9A=84?= =?UTF-8?q?=E5=9C=B0=E6=96=B9=E6=A0=A1=E9=AA=8C=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/common/utils/ValidatorUtils.java | 25 +++++++++++++++++++ .../demo/controller/TestDemoController.java | 6 ++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java new file mode 100644 index 000000000..797224520 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java @@ -0,0 +1,25 @@ +package com.ruoyi.common.utils; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validation; +import javax.validation.Validator; +import java.util.Set; + +/** + * Validator 校验框架工具 + * + * @author L.cm + */ +public class ValidatorUtils { + + private static final Validator VALID = Validation.buildDefaultValidatorFactory().getValidator(); + + public static void validate(T object, Class... groups) { + Set> validate = VALID.validate(object, groups); + if (!validate.isEmpty()) { + throw new ConstraintViolationException("参数校验异常", validate); + } + } + +} 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 32af7d2dc..66339de28 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 @@ -9,6 +9,7 @@ import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.core.validate.QueryGroup; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.ValidatorUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.demo.domain.bo.TestDemoBo; import com.ruoyi.demo.domain.vo.TestDemoVo; @@ -98,7 +99,10 @@ public class TestDemoController extends BaseController { @Log(title = "测试单表", businessType = BusinessType.INSERT) @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "不允许重复提交") @PostMapping() - public AjaxResult add(@Validated(AddGroup.class) @RequestBody TestDemoBo bo) { + public AjaxResult add(@RequestBody TestDemoBo bo) { + // 使用校验工具对标 @Validated(AddGroup.class) 注解 + // 用于在非 Controller 的地方校验对象 + ValidatorUtils.validate(bo, AddGroup.class); return toAjax(iTestDemoService.insertByBo(bo) ? 1 : 0); } From 03e2ff587ed9610dca8e699909c1528379caa7e1 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, 3 Nov 2021 13:58:59 +0800 Subject: [PATCH 016/111] =?UTF-8?q?=E5=90=8C=E6=AD=A5=20ruoyi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/ValidatorUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java index 797224520..c28cf80fa 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ValidatorUtils.java @@ -9,7 +9,7 @@ import java.util.Set; /** * Validator 校验框架工具 * - * @author L.cm + * @author Lion Li */ public class ValidatorUtils { From 95dcae1a85615e42fc9cb8d30f46f376977f8936 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, 3 Nov 2021 14:46:12 +0800 Subject: [PATCH 017/111] =?UTF-8?q?remove=20=E7=A7=BB=E9=99=A4=20quartz=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E4=B8=8E=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 8 - ruoyi-admin/pom.xml | 6 - .../src/main/resources/application.yml | 31 --- ruoyi-admin/src/main/resources/spy.properties | 2 - .../com/ruoyi/common/constant/Constants.java | 9 - .../common/constant/ScheduleConstants.java | 51 ---- .../common/exception/job/TaskException.java | 35 --- ruoyi-quartz/pom.xml | 40 --- .../ruoyi/quartz/config/ScheduleConfig.java | 15 -- .../quartz/controller/SysJobController.java | 160 ------------ .../controller/SysJobLogController.java | 86 ------ .../java/com/ruoyi/quartz/domain/SysJob.java | 140 ---------- .../com/ruoyi/quartz/domain/SysJobLog.java | 83 ------ .../ruoyi/quartz/mapper/SysJobLogMapper.java | 14 - .../com/ruoyi/quartz/mapper/SysJobMapper.java | 14 - .../quartz/service/ISysJobLogService.java | 63 ----- .../ruoyi/quartz/service/ISysJobService.java | 107 -------- .../service/impl/SysJobLogServiceImpl.java | 114 -------- .../service/impl/SysJobServiceImpl.java | 247 ------------------ .../java/com/ruoyi/quartz/task/RyTask.java | 30 --- .../ruoyi/quartz/util/AbstractQuartzJob.java | 109 -------- .../java/com/ruoyi/quartz/util/CronUtils.java | 65 ----- .../com/ruoyi/quartz/util/JobInvokeUtil.java | 183 ------------- .../QuartzDisallowConcurrentExecution.java | 22 -- .../ruoyi/quartz/util/QuartzJobExecution.java | 20 -- .../com/ruoyi/quartz/util/ScheduleUtils.java | 114 -------- .../mapper/quartz/SysJobLogMapper.xml | 18 -- .../resources/mapper/quartz/SysJobMapper.xml | 23 -- script/sql/quartz.sql | 174 ------------ 29 files changed, 1983 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java delete mode 100644 ruoyi-quartz/pom.xml delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java delete mode 100644 ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java delete mode 100644 ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml delete mode 100644 ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml delete mode 100644 script/sql/quartz.sql diff --git a/pom.xml b/pom.xml index c5da82755..c18418ca5 100644 --- a/pom.xml +++ b/pom.xml @@ -257,13 +257,6 @@ ${tlog.version} - - - com.ruoyi - ruoyi-quartz - ${ruoyi-vue-plus.version} - - com.ruoyi @@ -320,7 +313,6 @@ ruoyi-admin ruoyi-framework ruoyi-system - ruoyi-quartz ruoyi-job ruoyi-generator ruoyi-common diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index 9ec68cdd1..b736a4245 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -41,12 +41,6 @@ ruoyi-system - - - - - - com.ruoyi ruoyi-job diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 360c20128..7acd7efcd 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -293,34 +293,3 @@ management: endpoint: logfile: external-file: ./logs/sys-console.log - ---- # 定时任务配置 -spring: - quartz: - scheduler-name: RuoyiScheduler - startup-delay: 1s - overwrite-existing-jobs: true - auto-startup: true - job-store-type: jdbc - properties: - org: - quartz: - # Scheduler 相关配置 - scheduler: - instanceName: RuoyiScheduler - instanceId: AUTO - # 线程池相关配置 - threadPool: - class: org.quartz.simpl.SimpleThreadPool - threadCount: 20 - threadPriority: 5 - # JobStore 集群配置 - jobStore: - class: org.quartz.impl.jdbcjobstore.JobStoreTX - isClustered: true - clusterCheckinInterval: 15000 - txIsolationLevelSerializable: true - misfireThreshold: 60000 - tablePrefix: QRTZ_ - # sqlserver 启用 - # selectWithLockSQL: SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ? diff --git a/ruoyi-admin/src/main/resources/spy.properties b/ruoyi-admin/src/main/resources/spy.properties index 0ed983b3b..918f1cb5e 100644 --- a/ruoyi-admin/src/main/resources/spy.properties +++ b/ruoyi-admin/src/main/resources/spy.properties @@ -22,5 +22,3 @@ outagedetection=true outagedetectioninterval=2 # 是否过滤 Log filter=true -# 过滤 Log 时所排除的表名列表,以逗号分隔 -exclude=QRTZ_ 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 6d83fe30e..9c91a1a15 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 @@ -133,13 +133,4 @@ public class Constants { */ public static final String SYS_DICT_KEY = "sys_dict:"; - /** - * RMI 远程方法调用 - */ - public static final String LOOKUP_RMI = "rmi://"; - - /** - * LDAP 远程方法调用 - */ - public static final String LOOKUP_LDAP = "ldap://"; } 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 deleted file mode 100644 index ec430c26a..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ruoyi.common.constant; - -/** - * 任务调度通用常量 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -public class ScheduleConstants -{ - public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; - - /** 执行目标key */ - public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; - - /** 默认 */ - public static final String MISFIRE_DEFAULT = "0"; - - /** 立即触发执行 */ - public static final String MISFIRE_IGNORE_MISFIRES = "1"; - - /** 触发一次执行 */ - public static final String MISFIRE_FIRE_AND_PROCEED = "2"; - - /** 不触发立即执行 */ - public static final String MISFIRE_DO_NOTHING = "3"; - - public enum Status - { - /** - * 正常 - */ - NORMAL("0"), - /** - * 暂停 - */ - PAUSE("1"); - - private String value; - - private Status(String value) - { - this.value = value; - } - - public String getValue() - { - return value; - } - } -} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java deleted file mode 100644 index 59ea3a687..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ruoyi.common.exception.job; - -/** - * 计划策略异常 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -public class TaskException extends Exception -{ - private static final long serialVersionUID = 1L; - - private Code code; - - public TaskException(String msg, Code code) - { - this(msg, code, null); - } - - public TaskException(String msg, Code code, Exception nestedEx) - { - super(msg, nestedEx); - this.code = code; - } - - public Code getCode() - { - return code; - } - - public enum Code - { - TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE - } -} \ No newline at end of file diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml deleted file mode 100644 index 1480b8133..000000000 --- a/ruoyi-quartz/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - ruoyi-vue-plus - com.ruoyi - 3.3.0 - - 4.0.0 - - ruoyi-quartz - - - quartz定时任务 - - - - - - - org.springframework.boot - spring-boot-starter-quartz - - - com.mchange - c3p0 - - - - - - - com.ruoyi - ruoyi-common - - - - - 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 deleted file mode 100644 index c5fa2ec0f..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.ruoyi.quartz.config; - -import org.springframework.context.annotation.Configuration; - -/** - * 定时任务配置 - * - * @deprecated 3.4.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 deleted file mode 100644 index 58efca748..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.ruoyi.quartz.controller; - -import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.exception.job.TaskException; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.quartz.domain.SysJob; -import com.ruoyi.quartz.service.ISysJobService; -import com.ruoyi.quartz.util.CronUtils; -import org.quartz.SchedulerException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.util.List; - -/** - * 调度任务信息操作处理 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -@RestController -@RequestMapping("/monitor/job") -public class SysJobController extends BaseController -{ - @Autowired - private ISysJobService jobService; - - /** - * 查询定时任务列表 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:list')") - @GetMapping("/list") - public TableDataInfo list(SysJob sysJob) - { - return jobService.selectPageJobList(sysJob); - } - - /** - * 导出定时任务列表 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:export')") - @Log(title = "定时任务", businessType = BusinessType.EXPORT) - @GetMapping("/export") - public void export(SysJob sysJob, HttpServletResponse response) - { - List list = jobService.selectJobList(sysJob); - ExcelUtil.exportExcel(list, "定时任务", SysJob.class, response); - } - - /** - * 获取定时任务详细信息 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:query')") - @GetMapping(value = "/{jobId}") - public AjaxResult getInfo(@PathVariable("jobId") Long jobId) - { - return AjaxResult.success(jobService.selectJobById(jobId)); - } - - /** - * 新增定时任务 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:add')") - @Log(title = "定时任务", businessType = BusinessType.INSERT) - @PostMapping - public AjaxResult add(@RequestBody SysJob job) throws SchedulerException, TaskException - { - if (!CronUtils.isValid(job.getCronExpression())) - { - return error("新增任务'" + job.getJobName() + "'失败,Cron表达式不正确"); - } - else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) - { - return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); - } - else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_LDAP)) - { - return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap://'调用"); - } - else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS })) - { - return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用"); - } - job.setCreateBy(getUsername()); - return toAjax(jobService.insertJob(job)); - } - - /** - * 修改定时任务 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:edit')") - @Log(title = "定时任务", businessType = BusinessType.UPDATE) - @PutMapping - public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException - { - if (!CronUtils.isValid(job.getCronExpression())) - { - return error("修改任务'" + job.getJobName() + "'失败,Cron表达式不正确"); - } - else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) - { - return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用"); - } - else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_LDAP)) - { - return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'ldap://'调用"); - } - else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS })) - { - return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用"); - } - job.setUpdateBy(getUsername()); - return toAjax(jobService.updateJob(job)); - } - - /** - * 定时任务状态修改 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") - @Log(title = "定时任务", businessType = BusinessType.UPDATE) - @PutMapping("/changeStatus") - public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException - { - SysJob newJob = jobService.selectJobById(job.getJobId()); - newJob.setStatus(job.getStatus()); - return toAjax(jobService.changeStatus(newJob)); - } - - /** - * 定时任务立即执行一次 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") - @Log(title = "定时任务", businessType = BusinessType.UPDATE) - @PutMapping("/run") - public AjaxResult run(@RequestBody SysJob job) throws SchedulerException - { - jobService.run(job); - return AjaxResult.success(); - } - - /** - * 删除定时任务 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:remove')") - @Log(title = "定时任务", businessType = BusinessType.DELETE) - @DeleteMapping("/{jobIds}") - public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException - { - jobService.deleteJobByIds(jobIds); - return AjaxResult.success(); - } -} 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 deleted file mode 100644 index f568d65d1..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.ruoyi.quartz.controller; - -import com.ruoyi.common.annotation.Log; -import com.ruoyi.common.core.controller.BaseController; -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.enums.BusinessType; -import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.quartz.domain.SysJobLog; -import com.ruoyi.quartz.service.ISysJobLogService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.*; - -import javax.servlet.http.HttpServletResponse; -import java.util.List; - -/** - * 调度日志操作处理 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -@RestController -@RequestMapping("/monitor/jobLog") -public class SysJobLogController extends BaseController -{ - @Autowired - private ISysJobLogService jobLogService; - - /** - * 查询定时任务调度日志列表 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:list')") - @GetMapping("/list") - public TableDataInfo list(SysJobLog sysJobLog) - { - return jobLogService.selectPageJobLogList(sysJobLog); - } - - /** - * 导出定时任务调度日志列表 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:export')") - @Log(title = "任务调度日志", businessType = BusinessType.EXPORT) - @GetMapping("/export") - public void export(SysJobLog sysJobLog, HttpServletResponse response) - { - List list = jobLogService.selectJobLogList(sysJobLog); - ExcelUtil.exportExcel(list, "调度日志", SysJobLog.class, response); - } - - /** - * 根据调度编号获取详细信息 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:query')") - @GetMapping(value = "/{configId}") - public AjaxResult getInfo(@PathVariable Long jobLogId) - { - return AjaxResult.success(jobLogService.selectJobLogById(jobLogId)); - } - - - /** - * 删除定时任务调度日志 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:remove')") - @Log(title = "定时任务调度日志", businessType = BusinessType.DELETE) - @DeleteMapping("/{jobLogIds}") - public AjaxResult remove(@PathVariable Long[] jobLogIds) - { - return toAjax(jobLogService.deleteJobLogByIds(jobLogIds)); - } - - /** - * 清空定时任务调度日志 - */ - @PreAuthorize("@ss.hasPermi('monitor:job:remove')") - @Log(title = "调度日志", businessType = BusinessType.CLEAN) - @DeleteMapping("/clean") - public AjaxResult clean() - { - jobLogService.cleanJobLog(); - return AjaxResult.success(); - } -} 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 deleted file mode 100644 index ee15e552e..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java +++ /dev/null @@ -1,140 +0,0 @@ -package com.ruoyi.quartz.domain; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.ruoyi.common.annotation.ExcelDictFormat; -import com.ruoyi.common.constant.ScheduleConstants; -import com.ruoyi.common.convert.ExcelDictConvert; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.quartz.util.CronUtils; -import lombok.Data; -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_job - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ - -@Data -@NoArgsConstructor -@Accessors(chain = true) -@TableName("sys_job") -@ExcelIgnoreUnannotated -public class SysJob implements Serializable { - private static final long serialVersionUID = 1L; - - /** - * 任务ID - */ - @ExcelProperty(value = "任务序号") - @TableId(value = "job_id", type = IdType.AUTO) - private Long jobId; - - /** - * 任务名称 - */ - @NotBlank(message = "任务名称不能为空") - @Size(min = 0, max = 64, message = "任务名称不能超过64个字符") - @ExcelProperty(value = "任务名称") - private String jobName; - - /** - * 任务组名 - */ - @ExcelProperty(value = "任务组名", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_job_group") - private String jobGroup; - - /** - * 调用目标字符串 - */ - @NotBlank(message = "调用目标字符串不能为空") - @Size(min = 0, max = 500, message = "调用目标字符串长度不能超过500个字符") - @ExcelProperty(value = "调用目标字符串") - private String invokeTarget; - - /** - * cron执行表达式 - */ - @NotBlank(message = "Cron执行表达式不能为空") - @Size(min = 0, max = 255, message = "Cron执行表达式不能超过255个字符") - @ExcelProperty(value = "执行表达式") - private String cronExpression; - - /** - * cron计划策略 - */ - @ExcelProperty(value = "计划策略 ", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "0=默认,1=立即触发执行,2=触发一次执行,3=不触发立即执行") - private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT; - - /** - * 是否并发执行(0允许 1禁止) - */ - @ExcelProperty(value = "并发执行", converter = ExcelDictConvert.class) - @ExcelDictFormat(readConverterExp = "0=允许,1=禁止") - private String concurrent; - - /** - * 任务状态(0正常 1暂停) - */ - @ExcelProperty(value = "任务状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_job_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; - - /** - * 备注 - */ - private String remark; - - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - public Date getNextValidTime() { - if (StringUtils.isNotEmpty(cronExpression)) { - return CronUtils.getNextExecution(cronExpression); - } - return null; - } - -} 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 deleted file mode 100644 index 2ea63df5c..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.ruoyi.quartz.domain; - -import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; -import com.alibaba.excel.annotation.ExcelProperty; -import com.baomidou.mybatisplus.annotation.*; -import com.ruoyi.common.annotation.ExcelDictFormat; -import com.ruoyi.common.convert.ExcelDictConvert; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -/** - * 定时任务调度日志表 sys_job_log - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ - -@Data -@NoArgsConstructor -@Accessors(chain = true) -@TableName("sys_job_log") -@ExcelIgnoreUnannotated -public class SysJobLog -{ - private static final long serialVersionUID = 1L; - - /** ID */ - @ExcelProperty(value = "日志序号") - @TableId(value = "job_log_id", type = IdType.AUTO) - private Long jobLogId; - - /** 任务名称 */ - @ExcelProperty(value = "任务名称") - private String jobName; - - /** 任务组名 */ - @ExcelProperty(value = "任务组名", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_job_group") - private String jobGroup; - - /** 调用目标字符串 */ - @ExcelProperty(value = "调用目标字符串") - private String invokeTarget; - - /** 日志信息 */ - @ExcelProperty(value = "日志信息") - private String jobMessage; - - /** 执行状态(0正常 1失败) */ - @ExcelProperty(value = "执行状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_common_status") - private String status; - - /** 异常信息 */ - @ExcelProperty(value = "异常信息") - private String exceptionInfo; - - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createTime; - - /** - * 请求参数 - */ - @TableField(exist = false) - private Map params = new HashMap<>(); - - /** 开始时间 */ - @TableField(exist = false) - private Date startTime; - - /** 停止时间 */ - @TableField(exist = false) - private Date stopTime; - -} 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 deleted file mode 100644 index 0bffa118c..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ruoyi.quartz.mapper; - -import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; -import com.ruoyi.quartz.domain.SysJobLog; - -/** - * 调度任务日志信息 数据层 - * - * @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 deleted file mode 100644 index 13f2da7c7..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.ruoyi.quartz.mapper; - -import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; -import com.ruoyi.quartz.domain.SysJob; - -/** - * 调度任务信息 数据层 - * - * @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 deleted file mode 100644 index ff8451acc..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.ruoyi.quartz.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.quartz.domain.SysJobLog; - -import java.util.List; - -/** - * 定时任务调度日志信息信息 服务层 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -public interface ISysJobLogService extends IService { - - - TableDataInfo selectPageJobLogList(SysJobLog jobLog); - - /** - * 获取quartz调度器日志的计划任务 - * - * @param jobLog 调度日志信息 - * @return 调度任务日志集合 - */ - public List selectJobLogList(SysJobLog jobLog); - - /** - * 通过调度任务日志ID查询调度信息 - * - * @param jobLogId 调度任务日志ID - * @return 调度任务日志对象信息 - */ - public SysJobLog selectJobLogById(Long jobLogId); - - /** - * 新增任务日志 - * - * @param jobLog 调度日志信息 - */ - public void addJobLog(SysJobLog jobLog); - - /** - * 批量删除调度日志信息 - * - * @param logIds 需要删除的日志ID - * @return 结果 - */ - public int deleteJobLogByIds(Long[] logIds); - - /** - * 删除任务日志 - * - * @param jobId 调度日志ID - * @return 结果 - */ - public int deleteJobLogById(Long jobId); - - /** - * 清空任务日志 - */ - public void cleanJobLog(); -} 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 deleted file mode 100644 index cbe4621fd..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.ruoyi.quartz.service; - -import com.baomidou.mybatisplus.extension.service.IService; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.exception.job.TaskException; -import com.ruoyi.quartz.domain.SysJob; -import org.quartz.SchedulerException; - -import java.util.List; - -/** - * 定时任务调度信息信息 服务层 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -public interface ISysJobService extends IService { - /** - * 获取quartz调度器的计划任务 - * - * @param job 调度信息 - * @return 调度任务集合 - */ - public TableDataInfo selectPageJobList(SysJob job); - - public List selectJobList(SysJob job); - - /** - * 通过调度任务ID查询调度信息 - * - * @param jobId 调度任务ID - * @return 调度任务对象信息 - */ - public SysJob selectJobById(Long jobId); - - /** - * 暂停任务 - * - * @param job 调度信息 - * @return 结果 - */ - public int pauseJob(SysJob job) throws SchedulerException; - - /** - * 恢复任务 - * - * @param job 调度信息 - * @return 结果 - */ - public int resumeJob(SysJob job) throws SchedulerException; - - /** - * 删除任务后,所对应的trigger也将被删除 - * - * @param job 调度信息 - * @return 结果 - */ - public int deleteJob(SysJob job) throws SchedulerException; - - /** - * 批量删除调度信息 - * - * @param jobIds 需要删除的任务ID - * @return 结果 - */ - public void deleteJobByIds(Long[] jobIds) throws SchedulerException; - - /** - * 任务调度状态修改 - * - * @param job 调度信息 - * @return 结果 - */ - public int changeStatus(SysJob job) throws SchedulerException; - - /** - * 立即运行任务 - * - * @param job 调度信息 - * @return 结果 - */ - public void run(SysJob job) throws SchedulerException; - - /** - * 新增任务 - * - * @param job 调度信息 - * @return 结果 - */ - public int insertJob(SysJob job) throws SchedulerException, TaskException; - - /** - * 更新任务 - * - * @param job 调度信息 - * @return 结果 - */ - public int updateJob(SysJob job) throws SchedulerException, TaskException; - - /** - * 校验cron表达式是否有效 - * - * @param cronExpression 表达式 - * @return 结果 - */ - public boolean checkCronExpressionIsValid(String cronExpression); -} 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 deleted file mode 100644 index 76edb49bb..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.ruoyi.quartz.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.quartz.domain.SysJobLog; -import com.ruoyi.quartz.mapper.SysJobLogMapper; -import com.ruoyi.quartz.service.ISysJobLogService; -import org.springframework.stereotype.Service; - -import java.util.Arrays; -import java.util.List; -import java.util.Map; - -/** - * 定时任务调度日志信息 服务层 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -@Service -public class SysJobLogServiceImpl extends ServicePlusImpl implements ISysJobLogService { - - @Override - public TableDataInfo selectPageJobLogList(SysJobLog jobLog) { - Map params = jobLog.getParams(); - LambdaQueryWrapper lqw = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(jobLog.getJobName()), SysJobLog::getJobName, jobLog.getJobName()) - .eq(StringUtils.isNotBlank(jobLog.getJobGroup()), SysJobLog::getJobGroup, jobLog.getJobGroup()) - .eq(StringUtils.isNotBlank(jobLog.getStatus()), SysJobLog::getStatus, jobLog.getStatus()) - .like(StringUtils.isNotBlank(jobLog.getInvokeTarget()), SysJobLog::getInvokeTarget, jobLog.getInvokeTarget()) - .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)); - } - - /** - * 获取quartz调度器日志的计划任务 - * - * @param jobLog 调度日志信息 - * @return 调度任务日志集合 - */ - @Override - public List selectJobLogList(SysJobLog jobLog) { - Map params = jobLog.getParams(); - return list(new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(jobLog.getJobName()), SysJobLog::getJobName, jobLog.getJobName()) - .eq(StringUtils.isNotBlank(jobLog.getJobGroup()), SysJobLog::getJobGroup, jobLog.getJobGroup()) - .eq(StringUtils.isNotBlank(jobLog.getStatus()), SysJobLog::getStatus, jobLog.getStatus()) - .like(StringUtils.isNotBlank(jobLog.getInvokeTarget()), SysJobLog::getInvokeTarget, jobLog.getInvokeTarget()) - .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"))); - } - - /** - * 通过调度任务日志ID查询调度信息 - * - * @param jobLogId 调度任务日志ID - * @return 调度任务日志对象信息 - */ - @Override - public SysJobLog selectJobLogById(Long jobLogId) { - return getById(jobLogId); - } - - /** - * 新增任务日志 - * - * @param jobLog 调度日志信息 - */ - @Override - public void addJobLog(SysJobLog jobLog) { - baseMapper.insert(jobLog); - } - - /** - * 批量删除调度日志信息 - * - * @param logIds 需要删除的数据ID - * @return 结果 - */ - @Override - public int deleteJobLogByIds(Long[] logIds) { - return baseMapper.deleteBatchIds(Arrays.asList(logIds)); - } - - /** - * 删除任务日志 - * - * @param jobId 调度日志ID - */ - @Override - public int deleteJobLogById(Long jobId) { - return baseMapper.deleteById(jobId); - } - - /** - * 清空任务日志 - */ - @Override - public void cleanJobLog() { - remove(new LambdaQueryWrapper<>()); - } -} 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 deleted file mode 100644 index 6962cf1db..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java +++ /dev/null @@ -1,247 +0,0 @@ -package com.ruoyi.quartz.service.impl; - -import com.ruoyi.common.utils.StringUtils; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.ruoyi.common.constant.ScheduleConstants; -import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; -import com.ruoyi.common.core.page.TableDataInfo; -import com.ruoyi.common.exception.job.TaskException; -import com.ruoyi.common.utils.PageUtils; -import com.ruoyi.quartz.domain.SysJob; -import com.ruoyi.quartz.mapper.SysJobMapper; -import com.ruoyi.quartz.service.ISysJobService; -import com.ruoyi.quartz.util.CronUtils; -import com.ruoyi.quartz.util.ScheduleUtils; -import org.quartz.JobDataMap; -import org.quartz.JobKey; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import javax.annotation.PostConstruct; -import java.util.List; - -/** - * 定时任务调度信息 服务层 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -@Service -public class SysJobServiceImpl extends ServicePlusImpl implements ISysJobService { - @Autowired - private Scheduler scheduler; - - /** - * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据) - */ - @PostConstruct - public void init() throws SchedulerException, TaskException { - scheduler.clear(); - List jobList = list(); - for (SysJob job : jobList) { - ScheduleUtils.createScheduleJob(scheduler, job); - } - } - - @Override - public TableDataInfo selectPageJobList(SysJob job) { - LambdaQueryWrapper lqw = new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(job.getJobName()), SysJob::getJobName, job.getJobName()) - .eq(StringUtils.isNotBlank(job.getJobGroup()), SysJob::getJobGroup, job.getJobGroup()) - .eq(StringUtils.isNotBlank(job.getStatus()), SysJob::getStatus, job.getStatus()) - .like(StringUtils.isNotBlank(job.getInvokeTarget()), SysJob::getInvokeTarget, job.getInvokeTarget()); - return PageUtils.buildDataInfo(page(PageUtils.buildPage(), lqw)); - } - - /** - * 获取quartz调度器的计划任务列表 - * - * @param job 调度信息 - * @return - */ - @Override - public List selectJobList(SysJob job) { - return list(new LambdaQueryWrapper() - .like(StringUtils.isNotBlank(job.getJobName()), SysJob::getJobName, job.getJobName()) - .eq(StringUtils.isNotBlank(job.getJobGroup()), SysJob::getJobGroup, job.getJobGroup()) - .eq(StringUtils.isNotBlank(job.getStatus()), SysJob::getStatus, job.getStatus()) - .like(StringUtils.isNotBlank(job.getInvokeTarget()), SysJob::getInvokeTarget, job.getInvokeTarget())); - } - - /** - * 通过调度任务ID查询调度信息 - * - * @param jobId 调度任务ID - * @return 调度任务对象信息 - */ - @Override - public SysJob selectJobById(Long jobId) { - return getById(jobId); - } - - /** - * 暂停任务 - * - * @param job 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int pauseJob(SysJob job) throws SchedulerException { - Long jobId = job.getJobId(); - String jobGroup = job.getJobGroup(); - job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); - int rows = baseMapper.updateById(job); - if (rows > 0) { - scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); - } - return rows; - } - - /** - * 恢复任务 - * - * @param job 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int resumeJob(SysJob job) throws SchedulerException { - Long jobId = job.getJobId(); - String jobGroup = job.getJobGroup(); - job.setStatus(ScheduleConstants.Status.NORMAL.getValue()); - int rows = baseMapper.updateById(job); - if (rows > 0) { - scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup)); - } - return rows; - } - - /** - * 删除任务后,所对应的trigger也将被删除 - * - * @param job 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int deleteJob(SysJob job) throws SchedulerException { - Long jobId = job.getJobId(); - String jobGroup = job.getJobGroup(); - int rows = baseMapper.deleteById(jobId); - if (rows > 0) { - scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup)); - } - return rows; - } - - /** - * 批量删除调度信息 - * - * @param jobIds 需要删除的任务ID - * @return 结果 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void deleteJobByIds(Long[] jobIds) throws SchedulerException { - for (Long jobId : jobIds) { - SysJob job = getById(jobId); - deleteJob(job); - } - } - - /** - * 任务调度状态修改 - * - * @param job 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int changeStatus(SysJob job) throws SchedulerException { - int rows = 0; - String status = job.getStatus(); - if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) { - rows = resumeJob(job); - } else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) { - rows = pauseJob(job); - } - return rows; - } - - /** - * 立即运行任务 - * - * @param job 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void run(SysJob job) throws SchedulerException { - Long jobId = job.getJobId(); - String jobGroup = job.getJobGroup(); - SysJob properties = selectJobById(job.getJobId()); - // 参数 - JobDataMap dataMap = new JobDataMap(); - dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties); - scheduler.triggerJob(ScheduleUtils.getJobKey(jobId, jobGroup), dataMap); - } - - /** - * 新增任务 - * - * @param job 调度信息 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int insertJob(SysJob job) throws SchedulerException, TaskException { - job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); - int rows = baseMapper.insert(job); - if (rows > 0) { - ScheduleUtils.createScheduleJob(scheduler, job); - } - return rows; - } - - /** - * 更新任务的时间表达式 - * - * @param job 调度信息 - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int updateJob(SysJob job) throws SchedulerException, TaskException { - SysJob properties = selectJobById(job.getJobId()); - int rows = baseMapper.updateById(job); - if (rows > 0) { - updateSchedulerJob(job, properties.getJobGroup()); - } - return rows; - } - - /** - * 更新任务 - * - * @param job 任务对象 - * @param jobGroup 任务组名 - */ - public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException { - Long jobId = job.getJobId(); - // 判断是否存在 - JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); - if (scheduler.checkExists(jobKey)) { - // 防止创建时存在数据问题 先移除,然后在执行创建操作 - scheduler.deleteJob(jobKey); - } - ScheduleUtils.createScheduleJob(scheduler, job); - } - - /** - * 校验cron表达式是否有效 - * - * @param cronExpression 表达式 - * @return 结果 - */ - @Override - public boolean checkCronExpressionIsValid(String cronExpression) { - return CronUtils.isValid(cronExpression); - } -} 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 deleted file mode 100644 index 7fd55c5d9..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.ruoyi.quartz.task; - -import cn.hutool.core.lang.Console; -import com.ruoyi.common.utils.StringUtils; -import org.springframework.stereotype.Component; - -/** - * 定时任务调度测试 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -@Component("ryTask") -public class RyTask -{ - public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) - { - Console.log(StringUtils.format("执行多参方法: 字符串类型{},布尔类型{},长整型{},浮点型{},整形{}", s, b, l, d, i)); - } - - public void ryParams(String params) - { - Console.log("执行有参方法:" + params); - } - - public void ryNoParams() - { - Console.log("执行无参方法"); - } -} 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 deleted file mode 100644 index 1705433f3..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.ruoyi.quartz.util; - -import cn.hutool.core.bean.BeanUtil; -import cn.hutool.core.exceptions.ExceptionUtil; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.constant.ScheduleConstants; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.quartz.domain.SysJob; -import com.ruoyi.quartz.domain.SysJobLog; -import com.ruoyi.quartz.service.ISysJobLogService; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.util.Date; - -/** - * 抽象quartz调用 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -public abstract class AbstractQuartzJob implements Job -{ - private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class); - - /** - * 线程本地变量 - */ - private static ThreadLocal threadLocal = new ThreadLocal<>(); - - @Override - public void execute(JobExecutionContext context) throws JobExecutionException - { - SysJob sysJob = new SysJob(); - BeanUtil.copyProperties(context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES),sysJob); - try - { - before(context, sysJob); - if (StringUtils.isNotNull(sysJob)) - { - doExecute(context, sysJob); - } - after(context, sysJob, null); - } - catch (Exception e) - { - log.error("任务执行异常 - :", e); - after(context, sysJob, e); - } - } - - /** - * 执行前 - * - * @param context 工作执行上下文对象 - * @param sysJob 系统计划任务 - */ - protected void before(JobExecutionContext context, SysJob sysJob) - { - threadLocal.set(new Date()); - } - - /** - * 执行后 - * - * @param context 工作执行上下文对象 - * @param sysJob 系统计划任务 - */ - protected void after(JobExecutionContext context, SysJob sysJob, Exception e) - { - Date startTime = threadLocal.get(); - threadLocal.remove(); - - final SysJobLog sysJobLog = new SysJobLog(); - sysJobLog.setJobName(sysJob.getJobName()); - sysJobLog.setJobGroup(sysJob.getJobGroup()); - sysJobLog.setInvokeTarget(sysJob.getInvokeTarget()); - sysJobLog.setStartTime(startTime); - sysJobLog.setStopTime(new Date()); - long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime(); - sysJobLog.setJobMessage(sysJobLog.getJobName() + " 总共耗时:" + runMs + "毫秒"); - if (e != null) - { - sysJobLog.setStatus(Constants.FAIL); - String errorMsg = StringUtils.substring(ExceptionUtil.stacktraceToString(e), 0, 2000); - sysJobLog.setExceptionInfo(errorMsg); - } - else - { - sysJobLog.setStatus(Constants.SUCCESS); - } - - // 写入数据库当中 - SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); - } - - /** - * 执行方法,由子类重载 - * - * @param context 工作执行上下文对象 - * @param sysJob 系统计划任务 - * @throws Exception 执行过程中的异常 - */ - protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception; -} 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 deleted file mode 100644 index 2253af18c..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.ruoyi.quartz.util; - -import org.quartz.CronExpression; - -import java.text.ParseException; -import java.util.Date; - -/** - * cron表达式工具类 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - * - */ -public class CronUtils -{ - /** - * 返回一个布尔值代表一个给定的Cron表达式的有效性 - * - * @param cronExpression Cron表达式 - * @return boolean 表达式是否有效 - */ - public static boolean isValid(String cronExpression) - { - return CronExpression.isValidExpression(cronExpression); - } - - /** - * 返回一个字符串值,表示该消息无效Cron表达式给出有效性 - * - * @param cronExpression Cron表达式 - * @return String 无效时返回表达式错误描述,如果有效返回null - */ - public static String getInvalidMessage(String cronExpression) - { - try - { - new CronExpression(cronExpression); - return null; - } - catch (ParseException pe) - { - return pe.getMessage(); - } - } - - /** - * 返回下一个执行时间根据给定的Cron表达式 - * - * @param cronExpression Cron表达式 - * @return Date 下次Cron表达式执行时间 - */ - public static Date getNextExecution(String cronExpression) - { - try - { - CronExpression cron = new CronExpression(cronExpression); - return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis())); - } - catch (ParseException e) - { - throw new IllegalArgumentException(e.getMessage()); - } - } -} 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 deleted file mode 100644 index ed15d1f7c..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.ruoyi.quartz.util; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.LinkedList; -import java.util.List; -import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.quartz.domain.SysJob; - -/** - * 任务执行工具 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - */ -public class JobInvokeUtil -{ - /** - * 执行方法 - * - * @param sysJob 系统任务 - */ - public static void invokeMethod(SysJob sysJob) throws Exception - { - String invokeTarget = sysJob.getInvokeTarget(); - String beanName = getBeanName(invokeTarget); - String methodName = getMethodName(invokeTarget); - List methodParams = getMethodParams(invokeTarget); - - if (!isValidClassName(beanName)) - { - Object bean = SpringUtils.getBean(beanName); - invokeMethod(bean, methodName, methodParams); - } - else - { - Object bean = Class.forName(beanName).newInstance(); - invokeMethod(bean, methodName, methodParams); - } - } - - /** - * 调用任务方法 - * - * @param bean 目标对象 - * @param methodName 方法名称 - * @param methodParams 方法参数 - */ - private static void invokeMethod(Object bean, String methodName, List methodParams) - throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, - InvocationTargetException - { - if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) - { - Method method = bean.getClass().getDeclaredMethod(methodName, getMethodParamsType(methodParams)); - method.invoke(bean, getMethodParamsValue(methodParams)); - } - else - { - Method method = bean.getClass().getDeclaredMethod(methodName); - method.invoke(bean); - } - } - - /** - * 校验是否为为class包名 - * - * @param str 名称 - * @return true是 false否 - */ - public static boolean isValidClassName(String invokeTarget) - { - return StringUtils.countMatches(invokeTarget, ".") > 1; - } - - /** - * 获取bean名称 - * - * @param invokeTarget 目标字符串 - * @return bean名称 - */ - public static String getBeanName(String invokeTarget) - { - String beanName = StringUtils.substringBefore(invokeTarget, "("); - return StringUtils.substringBeforeLast(beanName, "."); - } - - /** - * 获取bean方法 - * - * @param invokeTarget 目标字符串 - * @return method方法 - */ - public static String getMethodName(String invokeTarget) - { - String methodName = StringUtils.substringBefore(invokeTarget, "("); - return StringUtils.substringAfterLast(methodName, "."); - } - - /** - * 获取method方法参数相关列表 - * - * @param invokeTarget 目标字符串 - * @return method方法相关参数列表 - */ - public static List getMethodParams(String invokeTarget) - { - String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")"); - if (StringUtils.isEmpty(methodStr)) - { - return null; - } - String[] methodParams = methodStr.split(","); - List classs = new LinkedList<>(); - for (int i = 0; i < methodParams.length; i++) - { - String str = StringUtils.trimToEmpty(methodParams[i]); - // String字符串类型,包含' - if (StringUtils.contains(str, "'")) - { - classs.add(new Object[] { StringUtils.replace(str, "'", ""), String.class }); - } - // boolean布尔类型,等于true或者false - else if (StringUtils.equals(str, "true") || StringUtils.equalsIgnoreCase(str, "false")) - { - classs.add(new Object[] { Boolean.valueOf(str), Boolean.class }); - } - // long长整形,包含L - else if (StringUtils.containsIgnoreCase(str, "L")) - { - classs.add(new Object[] { Long.valueOf(StringUtils.replaceIgnoreCase(str, "L", "")), Long.class }); - } - // double浮点类型,包含D - else if (StringUtils.containsIgnoreCase(str, "D")) - { - classs.add(new Object[] { Double.valueOf(StringUtils.replaceIgnoreCase(str, "D", "")), Double.class }); - } - // 其他类型归类为整形 - else - { - classs.add(new Object[] { Integer.valueOf(str), Integer.class }); - } - } - return classs; - } - - /** - * 获取参数类型 - * - * @param methodParams 参数相关列表 - * @return 参数类型列表 - */ - public static Class[] getMethodParamsType(List methodParams) - { - Class[] classs = new Class[methodParams.size()]; - int index = 0; - for (Object[] os : methodParams) - { - classs[index] = (Class) os[1]; - index++; - } - return classs; - } - - /** - * 获取参数值 - * - * @param methodParams 参数相关列表 - * @return 参数值列表 - */ - public static Object[] getMethodParamsValue(List methodParams) - { - Object[] classs = new Object[methodParams.size()]; - int index = 0; - for (Object[] os : methodParams) - { - classs[index] = (Object) os[0]; - index++; - } - return classs; - } -} 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 deleted file mode 100644 index fc0ce7b9f..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.ruoyi.quartz.util; - -import org.quartz.DisallowConcurrentExecution; -import org.quartz.JobExecutionContext; -import com.ruoyi.quartz.domain.SysJob; - -/** - * 定时任务处理(禁止并发执行) - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - * - */ -@DisallowConcurrentExecution -public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob -{ - @Override - protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception - { - JobInvokeUtil.invokeMethod(sysJob); - } -} 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 deleted file mode 100644 index 404c26634..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.ruoyi.quartz.util; - -import org.quartz.JobExecutionContext; -import com.ruoyi.quartz.domain.SysJob; - -/** - * 定时任务处理(允许并发执行) - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - * - */ -public class QuartzJobExecution extends AbstractQuartzJob -{ - @Override - protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception - { - JobInvokeUtil.invokeMethod(sysJob); - } -} 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 deleted file mode 100644 index 182d1d698..000000000 --- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java +++ /dev/null @@ -1,114 +0,0 @@ -package com.ruoyi.quartz.util; - -import org.quartz.CronScheduleBuilder; -import org.quartz.CronTrigger; -import org.quartz.Job; -import org.quartz.JobBuilder; -import org.quartz.JobDetail; -import org.quartz.JobKey; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.TriggerBuilder; -import org.quartz.TriggerKey; -import com.ruoyi.common.constant.ScheduleConstants; -import com.ruoyi.common.exception.job.TaskException; -import com.ruoyi.common.exception.job.TaskException.Code; -import com.ruoyi.quartz.domain.SysJob; - -/** - * 定时任务工具类 - * - * @deprecated 3.4.0删除 迁移至xxl-job - * @author ruoyi - * - */ -public class ScheduleUtils -{ - /** - * 得到quartz任务类 - * - * @param sysJob 执行计划 - * @return 具体执行任务类 - */ - private static Class getQuartzJobClass(SysJob sysJob) - { - boolean isConcurrent = "0".equals(sysJob.getConcurrent()); - return isConcurrent ? QuartzJobExecution.class : QuartzDisallowConcurrentExecution.class; - } - - /** - * 构建任务触发对象 - */ - public static TriggerKey getTriggerKey(Long jobId, String jobGroup) - { - return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); - } - - /** - * 构建任务键对象 - */ - public static JobKey getJobKey(Long jobId, String jobGroup) - { - return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); - } - - /** - * 创建定时任务 - */ - public static void createScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException - { - Class jobClass = getQuartzJobClass(job); - // 构建job信息 - Long jobId = job.getJobId(); - String jobGroup = job.getJobGroup(); - JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); - - // 表达式调度构建器 - CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); - cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder); - - // 按新的cronExpression表达式构建一个新的trigger - CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup)) - .withSchedule(cronScheduleBuilder).build(); - - // 放入参数,运行时的方法可以获取 - jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job); - - // 判断是否存在 - if (scheduler.checkExists(getJobKey(jobId, jobGroup))) - { - // 防止创建时存在数据问题 先移除,然后在执行创建操作 - scheduler.deleteJob(getJobKey(jobId, jobGroup)); - } - - scheduler.scheduleJob(jobDetail, trigger); - - // 暂停任务 - if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue())) - { - scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); - } - } - - /** - * 设置定时任务策略 - */ - public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb) - throws TaskException - { - switch (job.getMisfirePolicy()) - { - case ScheduleConstants.MISFIRE_DEFAULT: - return cb; - case ScheduleConstants.MISFIRE_IGNORE_MISFIRES: - return cb.withMisfireHandlingInstructionIgnoreMisfires(); - case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED: - return cb.withMisfireHandlingInstructionFireAndProceed(); - case ScheduleConstants.MISFIRE_DO_NOTHING: - return cb.withMisfireHandlingInstructionDoNothing(); - default: - throw new TaskException("The task misfire policy '" + job.getMisfirePolicy() - + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR); - } - } -} diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml deleted file mode 100644 index 736a6992a..000000000 --- a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml deleted file mode 100644 index 0a6342ba1..000000000 --- a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/script/sql/quartz.sql b/script/sql/quartz.sql deleted file mode 100644 index cee613b7b..000000000 --- a/script/sql/quartz.sql +++ /dev/null @@ -1,174 +0,0 @@ -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 From 8a93371baa43bf4d3027c9c1d8eea83d9ba2188c 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, 3 Nov 2021 15:02:29 +0800 Subject: [PATCH 018/111] =?UTF-8?q?remove=20=E7=A7=BB=E9=99=A4=20feign=20?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81=E4=B8=8E=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 27 ------ .../src/main/resources/application.yml | 16 ---- ruoyi-common/pom.xml | 16 ---- .../file/InvalidExtensionException.java | 61 ------------ .../demo/controller/FeignTestController.java | 37 -------- .../ruoyi/demo/feign/FeignTestService.java | 27 ------ .../feign/constant/FeignTestConstant.java | 13 --- .../feign/fallback/FeignTestFallback.java | 28 ------ .../demo/feign/fallback/package-info.java | 1 - .../com/ruoyi/demo/feign/package-info.java | 1 - .../ruoyi/framework/config/FeignConfig.java | 95 ------------------- .../ruoyi/framework/config/I18nConfig.java | 4 +- .../ruoyi/framework/config/TLogConfig.java | 6 -- .../generator/controller/GenController.java | 6 +- .../service/GenTableServiceImpl.java | 8 +- 15 files changed, 9 insertions(+), 337 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java delete mode 100644 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java delete mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java diff --git a/pom.xml b/pom.xml index c18418ca5..5a2c8b1f0 100644 --- a/pom.xml +++ b/pom.xml @@ -29,8 +29,6 @@ 3.4.3.4 3.9.1 5.7.15 - 3.0.3 - 11.6 4.9.1 2.5.2 3.16.3 @@ -168,25 +166,6 @@ ${hutool.version} - - - org.springframework.cloud - spring-cloud-starter-openfeign - ${feign.version} - - - feign-core - io.github.openfeign - - - - - - io.github.openfeign - feign-okhttp - ${feign-okhttp.version} - - com.squareup.okhttp3 okhttp @@ -245,12 +224,6 @@ - - com.yomahub - tlog-feign - ${tlog.version} - - com.yomahub tlog-xxl-job diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 7acd7efcd..cd53e4a37 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -242,22 +242,6 @@ thread-pool: # ABORT_POLICY 中止 rejectedExecutionHandler: CALLER_RUNS_POLICY -# feign 相关配置 -feign: - # 不支持多包, 如有需要可在注解配置 或 提升扫包等级 - # 例如 com.**.**.feign - package: com.ruoyi.**.feign - # 开启压缩 - compression: - request: - enabled: true - response: - enabled: true - okhttp: - enabled: true - circuitbreaker: - enabled: true - --- # redisson 缓存配置 redisson: cacheGroup: diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml index 12f14a06e..9b5af9876 100644 --- a/ruoyi-common/pom.xml +++ b/ruoyi-common/pom.xml @@ -117,18 +117,6 @@ lombok - - - org.springframework.cloud - spring-cloud-starter-openfeign - - - - - io.github.openfeign - feign-okhttp - - de.codecentric spring-boot-admin-starter-client @@ -175,10 +163,6 @@ tlog-webroot - - com.yomahub - tlog-feign - 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 deleted file mode 100644 index 7de92e24c..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.ruoyi.common.exception.file; - -import lombok.*; -import org.apache.commons.fileupload.FileUploadException; - -import java.util.Arrays; - -/** - * 文件上传 误异常类 - * - * @author ruoyi - */ -@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) { - super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]"); - this.allowedExtension = allowedExtension; - this.extension = extension; - this.filename = filename; - } - - public static class InvalidImageExtensionException extends InvalidExtensionException { - private static final long serialVersionUID = 1L; - - public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) { - super(allowedExtension, extension, filename); - } - } - - public static class InvalidFlashExtensionException extends InvalidExtensionException { - private static final long serialVersionUID = 1L; - - public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) { - super(allowedExtension, extension, filename); - } - } - - public static class InvalidMediaExtensionException extends InvalidExtensionException { - private static final long serialVersionUID = 1L; - - public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) { - super(allowedExtension, extension, filename); - } - } - - public static class InvalidVideoExtensionException extends InvalidExtensionException { - private static final long serialVersionUID = 1L; - - public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) { - super(allowedExtension, extension, filename); - } - } -} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java deleted file mode 100644 index 2f833e33e..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.ruoyi.demo.controller; - -import com.ruoyi.common.core.domain.AjaxResult; -import com.ruoyi.demo.feign.FeignTestService; -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.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * feign测试controller - * - * @author Lion Li - * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 - */ -@Api(value = "feign测试", tags = {"feign测试"}) -@RequiredArgsConstructor(onConstructor_ = @Autowired) -@RestController -@RequestMapping("/feign/test") -public class FeignTestController { - - private final FeignTestService feignTestService; - - /** - * 搜索数据 - */ - @ApiOperation("测试使用feign请求数据") - @GetMapping("/search/{wd}") - public AjaxResult search(@PathVariable String wd) { - String search = feignTestService.search(wd); - return AjaxResult.success("操作成功",search); - } -} 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 deleted file mode 100644 index 50eb4ebf6..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.ruoyi.demo.feign; - -import com.ruoyi.demo.feign.constant.FeignTestConstant; -import com.ruoyi.demo.feign.fallback.FeignTestFallback; -import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestParam; - -/** - * feign测试service - * 规范接口 Service 无感调用 - * 常量管理请求路径 更加规范 - * 自定义容错处理 安全可靠 (需自行配置熔断器) - * 增加 feign 的目的为使 http 请求接口化 - * - * @author Lion Li - * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 - */ -@FeignClient( - name = FeignTestConstant.BAIDU_NAME, - url = FeignTestConstant.BAIDU_URL, - fallback = FeignTestFallback.class) -public interface FeignTestService { - - @GetMapping("/s") - String search(@RequestParam("wd") String wd); -} 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 deleted file mode 100644 index 28dfa8adb..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/constant/FeignTestConstant.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.ruoyi.demo.feign.constant; - -/** - * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 - */ -@Deprecated -public class FeignTestConstant { - - public static final String BAIDU_NAME = "baidu"; - - public static final String BAIDU_URL = "http://www.baidu.com"; - -} 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 deleted file mode 100644 index 8e81ad7ad..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.ruoyi.demo.feign.fallback; - - -import com.ruoyi.demo.feign.FeignTestService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Component; - -/** - * feign测试fallback - * 自定义封装结构体熔断 - * 需重写解码器 根据自定义实体 自行解析熔断 - * - * 熔断器需要自行添加配置 - * - * @see {com.ruoyi.framework.config.FeignConfig#errorDecoder()} - * @author Lion Li - * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 - */ -@Slf4j -@Component -public class FeignTestFallback implements FeignTestService { - - @Override - public String search(String wd) { - log.error("fallback"); - return "报错啦"; - } -} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java deleted file mode 100644 index 47983a0e1..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package com.ruoyi.demo.feign.fallback; \ No newline at end of file diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java deleted file mode 100644 index 91e4b4a5b..000000000 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java +++ /dev/null @@ -1 +0,0 @@ -package com.ruoyi.demo.feign; \ No newline at end of file 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 deleted file mode 100644 index 8b432ad89..000000000 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.ruoyi.framework.config; - -import feign.*; -import okhttp3.ConnectionPool; -import okhttp3.OkHttpClient; -import org.springframework.boot.autoconfigure.AutoConfigureBefore; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.cloud.openfeign.FeignAutoConfiguration; -import org.springframework.cloud.openfeign.support.SpringMvcContract; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.TimeUnit; - -/** - * openfeign配置类 - * - * @author Lion Li - * @deprecated 由于使用人数较少 决定与 3.4.0 版本移除 - */ -@Deprecated -@EnableFeignClients("${feign.package}") -@Configuration -@ConditionalOnClass(Feign.class) -@AutoConfigureBefore(FeignAutoConfiguration.class) -public class FeignConfig { - - @Bean - public OkHttpClient okHttpClient(){ - return new OkHttpClient.Builder() - .readTimeout(60, TimeUnit.SECONDS) - .connectTimeout(60, TimeUnit.SECONDS) - .writeTimeout(120, TimeUnit.SECONDS) - .connectionPool(new ConnectionPool()) - .build(); - } - - @Bean - public Contract feignContract() { - return new SpringMvcContract(); - } - - @Bean - public Logger.Level feignLoggerLevel() { - return Logger.Level.BASIC; - } - - @Bean - public Request.Options feignRequestOptions() { - return new Request.Options(10, TimeUnit.SECONDS, 60,TimeUnit.SECONDS,true); - } - - @Bean - public Retryer feignRetry() { - return new Retryer.Default(); - } - -// /** -// * 自定义异常解码器 -// * 用于自定义返回体异常熔断 -// */ -// @Bean -// public ErrorDecoder errorDecoder() { -// return new CustomErrorDecoder(); -// } -// -// -// /** -// * 自定义返回体解码器 -// */ -// @Slf4j -// public static class CustomErrorDecoder implements ErrorDecoder { -// -// @Override -// public Exception decode(String methodKey, Response response) { -// Exception exception = null; -// try { -// // 获取原始的返回内容 -// String json = JsonUtils.toJsonString(response.body().asReader(StandardCharsets.UTF_8)); -// exception = new RuntimeException(json); -// // 将返回内容反序列化为Result,这里应根据自身项目作修改 -// AjaxResult result = JsonUtils.parseObject(json, AjaxResult.class); -// // 业务异常抛出简单的 RuntimeException,保留原来错误信息 -// if (result.getCode() != 200) { -// exception = new RuntimeException(result.getMsg()); -// } -// } catch (IOException e) { -// log.error(e.getMessage(), e); -// } -// return exception; -// } -// } - -} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java index 48b341beb..20b52a8e2 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java @@ -1,7 +1,6 @@ package com.ruoyi.framework.config; import cn.hutool.core.util.StrUtil; -import org.jetbrains.annotations.NotNull; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.LocaleResolver; @@ -28,7 +27,6 @@ public class I18nConfig { */ static class I18nLocaleResolver implements LocaleResolver { - @NotNull @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) { String language = httpServletRequest.getHeader("content-language"); @@ -41,7 +39,7 @@ public class I18nConfig { } @Override - public void setLocale(@NotNull HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { + public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { } } 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 index 68bc425d6..c1665d9b0 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/TLogConfig.java @@ -1,7 +1,6 @@ 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; @@ -41,9 +40,4 @@ public class TLogConfig { return new AspectLogAop(); } - @Bean - public TLogFeignFilter tLogFeignFilter() { - return new TLogFeignFilter(); - } - } 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 649d1dc67..b90addf71 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 @@ -1,6 +1,7 @@ package com.ruoyi.generator.controller; import cn.hutool.core.convert.Convert; +import cn.hutool.core.io.IoUtil; import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -13,7 +14,6 @@ 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; import org.springframework.validation.annotation.Validated; @@ -201,6 +201,6 @@ public class GenController extends BaseController { response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); response.addHeader("Content-Length", "" + data.length); response.setContentType("application/octet-stream; charset=UTF-8"); - IOUtils.write(data, response.getOutputStream()); + IoUtil.write(response.getOutputStream(), false, data); } -} \ No newline at end of file +} 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 62fe67a3a..b53393f0c 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 @@ -2,6 +2,7 @@ package com.ruoyi.generator.service; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.io.IoUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.GenConstants; @@ -21,7 +22,7 @@ import com.ruoyi.generator.util.GenUtils; import com.ruoyi.generator.util.VelocityInitializer; import com.ruoyi.generator.util.VelocityUtils; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.io.IOUtils; +import org.apache.poi.util.IOUtils; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.Velocity; @@ -33,6 +34,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.StringWriter; +import java.nio.charset.StandardCharsets; import java.util.*; import java.util.stream.Collectors; import java.util.zip.ZipEntry; @@ -341,8 +343,8 @@ public class GenTableServiceImpl extends ServicePlusImpl Date: Wed, 3 Nov 2021 15:04:10 +0800 Subject: [PATCH 019/111] =?UTF-8?q?remove=20=E7=A7=BB=E9=99=A4=20MybatisPl?= =?UTF-8?q?usRedisCache=20=E4=BA=8C=E7=BA=A7=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cache/MybatisPlusRedisCache.java | 91 ------------------- .../com/ruoyi/demo/mapper/TestDemoMapper.java | 4 - 2 files changed, 95 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java 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 deleted file mode 100644 index c790c663b..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/mybatisplus/cache/MybatisPlusRedisCache.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.ruoyi.common.core.mybatisplus.cache; - -import cn.hutool.extra.spring.SpringUtil; -import com.ruoyi.common.utils.RedisUtils; -import lombok.extern.slf4j.Slf4j; -import org.apache.ibatis.cache.Cache; -import org.springframework.data.redis.connection.RedisServerCommands; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.util.CollectionUtils; - -import java.util.Collection; -import java.util.concurrent.locks.ReadWriteLock; -import java.util.concurrent.locks.ReentrantReadWriteLock; - -/** - * mybatis-redis 二级缓存 - * - * 使用方法 配置文件开启 mybatis-plus 二级缓存 - * 在 XxxMapper.java 类上添加注解 @CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) - * - * @deprecated 3.4.0删除 推荐使用spirng-cache - * @author Lion Li - */ -@Slf4j -public class MybatisPlusRedisCache implements Cache { - - private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock(true); - - private String id; - - public MybatisPlusRedisCache(final String id) { - if (id == null) { - throw new IllegalArgumentException("Cache instances require an ID"); - } - this.id = id; - } - - @Override - public String getId() { - return this.id; - } - - @Override - public void putObject(Object key, Object value) { - if (value != null) { - RedisUtils.setCacheObject(key.toString(), value); - } - } - - @Override - public Object getObject(Object key) { - try { - if (key != null) { - return RedisUtils.getCacheObject(key.toString()); - } - } catch (Exception e) { - e.printStackTrace(); - log.error("缓存出错"); - } - return null; - } - - @Override - public Object removeObject(Object key) { - if (key != null) { - RedisUtils.deleteObject(key.toString()); - } - return null; - } - - @Override - public void clear() { - log.debug("清空缓存"); - Collection keys = RedisUtils.keys("*:" + this.id + "*"); - if (!CollectionUtils.isEmpty(keys)) { - RedisUtils.deleteObject(keys); - } - } - - @Override - public int getSize() { - RedisTemplate redisTemplate = SpringUtil.getBean("redisTemplate"); - Long size = redisTemplate.execute(RedisServerCommands::dbSize); - return size.intValue(); - } - - @Override - public ReadWriteLock getReadWriteLock() { - return this.readWriteLock; - } -} diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java index efbbffc44..dccea6154 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/mapper/TestDemoMapper.java @@ -2,11 +2,9 @@ package com.ruoyi.demo.mapper; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.ruoyi.common.core.mybatisplus.cache.MybatisPlusRedisCache; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.demo.domain.TestDemo; import com.ruoyi.demo.domain.vo.TestDemoVo; -import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Param; /** @@ -15,8 +13,6 @@ import org.apache.ibatis.annotations.Param; * @author Lion Li * @date 2021-07-26 */ -// 如使需切换数据源 请勿使用缓存 会造成数据不一致现象 -@CacheNamespace(implementation = MybatisPlusRedisCache.class, eviction = MybatisPlusRedisCache.class) public interface TestDemoMapper extends BaseMapperPlus { Page customPageList(@Param("page") Page page, @Param("ew") Wrapper wrapper); From 2f21f293c199ae596efeff080c76dc0f285e8faa 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, 4 Nov 2021 10:32:18 +0800 Subject: [PATCH 020/111] =?UTF-8?q?update=20=E5=9F=BA=E4=BA=8E=20hutool=20?= =?UTF-8?q?=E5=B0=81=E8=A3=85=E6=A0=91=E6=9E=84=E5=BB=BA=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=20=E9=87=8D=E6=9E=84=E9=83=A8=E9=97=A8=E4=B8=8E=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E6=A0=91=E7=BB=93=E6=9E=84=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysDeptController.java | 4 +- .../controller/system/SysMenuController.java | 4 +- .../ruoyi/common/core/domain/TreeSelect.java | 67 ------------- .../ruoyi/common/utils/TreeBuildUtils.java | 31 ++++++ .../ruoyi/system/service/ISysDeptService.java | 12 +-- .../ruoyi/system/service/ISysMenuService.java | 12 +-- .../service/impl/SysDeptServiceImpl.java | 97 ++++--------------- .../service/impl/SysMenuServiceImpl.java | 59 ++++------- 8 files changed, 77 insertions(+), 209 deletions(-) delete mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java 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 98f5838fc..8a467060d 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 @@ -1,11 +1,11 @@ package com.ruoyi.web.controller.system; +import cn.hutool.core.lang.tree.Tree; import cn.hutool.core.util.ArrayUtil; 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; @@ -76,7 +76,7 @@ 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)); } 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 1fd181637..11371f843 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 @@ -1,10 +1,10 @@ package com.ruoyi.web.controller.system; +import cn.hutool.core.lang.tree.Tree; 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; @@ -61,7 +61,7 @@ public class SysMenuController extends BaseController { */ @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)); } 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 deleted file mode 100644 index 963ac5c4d..000000000 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java +++ /dev/null @@ -1,67 +0,0 @@ -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 io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; - -import java.io.Serializable; -import java.util.List; -import java.util.stream.Collectors; - -/** - * Treeselect树结构实体类 - * - * @author Lion Li - */ - -@Data -@NoArgsConstructor -@Accessors(chain = true) -@ApiModel("树结构实体类") -public class TreeSelect implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 节点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) { - this.id = dept.getDeptId(); - this.label = dept.getDeptName(); - this.children = dept.getChildren() - .stream() - .map(d -> new TreeSelect((SysDept) d)) - .collect(Collectors.toList()); - } - - public TreeSelect(SysMenu menu) { - this.id = menu.getMenuId(); - this.label = menu.getMenuName(); - 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/utils/TreeBuildUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java new file mode 100644 index 000000000..a8380a287 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TreeBuildUtils.java @@ -0,0 +1,31 @@ +package com.ruoyi.common.utils; + +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.lang.tree.TreeNodeConfig; +import cn.hutool.core.lang.tree.TreeUtil; +import cn.hutool.core.lang.tree.parser.NodeParser; + +import java.util.List; + +/** + * 扩展 hutool TreeUtil 封装系统树构建 + * + * @author Lion Li + */ +public class TreeBuildUtils extends TreeUtil { + + /** + * 根据前端定制差异化字段 + */ + public static final TreeNodeConfig DEFAULT_CONFIG = TreeNodeConfig.DEFAULT_CONFIG.setNameKey("label"); + + /** + * 默认树父节点id + */ + public static final Long DEFAULT_PARENT_ID = 0L; + + public static List> build(List list, NodeParser nodeParser) { + return TreeUtil.build(list, DEFAULT_PARENT_ID, DEFAULT_CONFIG, nodeParser); + } + +} 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 ea6afa2e5..bd8c5ffbf 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 @@ -1,7 +1,7 @@ package com.ruoyi.system.service; +import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; -import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; import java.util.List; @@ -20,21 +20,13 @@ public interface ISysDeptService extends IService { */ List selectDeptList(SysDept dept); - /** - * 构建前端所需要树结构 - * - * @param depts 部门列表 - * @return 树结构列表 - */ - List buildDeptTree(List depts); - /** * 构建前端所需要下拉树结构 * * @param depts 部门列表 * @return 下拉树结构列表 */ - List buildDeptTreeSelect(List depts); + List> buildDeptTreeSelect(List depts); /** * 根据角色ID查询部门树信息 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 eea882e67..bc4c960af 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 @@ -1,7 +1,7 @@ package com.ruoyi.system.service; +import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.extension.service.IService; -import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.system.domain.vo.RouterVo; @@ -64,21 +64,13 @@ public interface ISysMenuService extends IService { */ List buildMenus(List menus); - /** - * 构建前端所需要树结构 - * - * @param menus 菜单列表 - * @return 树结构列表 - */ - List buildMenuTree(List menus); - /** * 构建前端所需要下拉树结构 * * @param menus 菜单列表 * @return 下拉树结构列表 */ - List buildMenuTreeSelect(List menus); + List> buildMenuTreeSelect(List menus); /** * 根据菜单ID查询信息 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 45c6faed6..0a2f8e6af 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 @@ -1,11 +1,11 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.annotation.DataScope; import com.ruoyi.common.constant.UserConstants; -import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; @@ -13,6 +13,7 @@ import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.TreeBuildUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.system.mapper.SysDeptMapper; import com.ruoyi.system.mapper.SysRoleMapper; @@ -21,10 +22,8 @@ import com.ruoyi.system.service.ISysDeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; /** * 部门管理 服务实现 @@ -52,32 +51,6 @@ public class SysDeptServiceImpl extends ServicePlusImpl buildDeptTree(List depts) { - List returnList = new ArrayList(); - List tempList = new ArrayList(); - for (SysDept dept : depts) { - tempList.add(dept.getDeptId()); - } - for (SysDept dept : depts) { - // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(dept.getParentId())) { - recursionFn(depts, dept); - returnList.add(dept); - } - } - if (returnList.isEmpty()) { - returnList = depts; - } - return returnList; - } - /** * 构建前端所需要下拉树结构 * @@ -85,9 +58,12 @@ public class SysDeptServiceImpl extends ServicePlusImpl buildDeptTreeSelect(List depts) { - List deptTrees = buildDeptTree(depts); - return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + public List> buildDeptTreeSelect(List depts) { + return TreeBuildUtils.build(depts, (dept, tree) -> + tree.setId(dept.getDeptId()) + .setParentId(dept.getParentId()) + .setName(dept.getDeptName()) + .setWeight(dept.getOrderNum())); } /** @@ -122,8 +98,8 @@ public class SysDeptServiceImpl extends ServicePlusImpl() - .eq(SysDept::getStatus, 0) - .apply("find_in_set({0}, ancestors)", deptId)); + .eq(SysDept::getStatus, 0) + .apply("find_in_set({0}, ancestors)", deptId)); } /** @@ -135,8 +111,8 @@ public class SysDeptServiceImpl extends ServicePlusImpl() - .eq(SysDept::getParentId, deptId) - .last("limit 1")); + .eq(SysDept::getParentId, deptId) + .last("limit 1")); return result > 0; } @@ -149,7 +125,7 @@ public class SysDeptServiceImpl extends ServicePlusImpl() - .eq(SysUser::getDeptId, deptId)); + .eq(SysUser::getDeptId, deptId)); return result > 0; } @@ -163,9 +139,9 @@ public class SysDeptServiceImpl extends ServicePlusImpl() - .eq(SysDept::getDeptName, dept.getDeptName()) - .eq(SysDept::getParentId, dept.getParentId()) - .last("limit 1")); + .eq(SysDept::getDeptName, dept.getDeptName()) + .eq(SysDept::getParentId, dept.getParentId()) + .last("limit 1")); if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { return UserConstants.NOT_UNIQUE; } @@ -224,7 +200,7 @@ public class SysDeptServiceImpl extends ServicePlusImpl() - .set(SysDept::getStatus, "0") - .in(SysDept::getDeptId, Arrays.asList(deptIds))); + .set(SysDept::getStatus, "0") + .in(SysDept::getDeptId, Arrays.asList(deptIds))); } /** @@ -253,7 +229,7 @@ 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)); } @@ -273,37 +249,4 @@ public class SysDeptServiceImpl extends ServicePlusImpl list, SysDept t) { - // 得到子节点列表 - List childList = getChildList(list, t); - t.setChildren(childList); - for (SysDept tChild : childList) { - if (hasChild(list, tChild)) { - recursionFn(list, tChild); - } - } - } - - /** - * 得到子节点列表 - */ - private List 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); - } - } - return tlist; - } - - /** - * 判断是否有子节点 - */ - private boolean hasChild(List list, SysDept t) { - return getChildList(list, t).size() > 0; - } } 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 643d304eb..98236e90b 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 @@ -1,15 +1,16 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.lang.tree.Tree; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; -import com.ruoyi.common.core.domain.TreeSelect; import com.ruoyi.common.core.domain.entity.SysMenu; 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.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.TreeBuildUtils; import com.ruoyi.system.domain.SysRoleMenu; import com.ruoyi.system.domain.vo.MetaVo; import com.ruoyi.system.domain.vo.RouterVo; @@ -21,7 +22,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; -import java.util.stream.Collectors; /** * 菜单 业务层处理 @@ -60,11 +60,11 @@ 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()) - .orderByAsc(SysMenu::getParentId) - .orderByAsc(SysMenu::getOrderNum)); + .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 { menu.getParams().put("userId", userId); menuList = baseMapper.selectMenuListByUserId(menu); @@ -170,32 +170,6 @@ public class SysMenuServiceImpl extends ServicePlusImpl buildMenuTree(List menus) { - List returnList = new ArrayList(); - List tempList = new ArrayList(); - for (SysMenu dept : menus) { - tempList.add(dept.getMenuId()); - } - for (SysMenu menu : menus) { - // 如果是顶级节点, 遍历该父节点的所有子节点 - if (!tempList.contains(menu.getParentId())) { - recursionFn(menus, menu); - returnList.add(menu); - } - } - if (returnList.isEmpty()) { - returnList = menus; - } - return returnList; - } - /** * 构建前端所需要下拉树结构 * @@ -203,9 +177,12 @@ public class SysMenuServiceImpl extends ServicePlusImpl buildMenuTreeSelect(List menus) { - List menuTrees = buildMenuTree(menus); - return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + public List> buildMenuTreeSelect(List menus) { + return TreeBuildUtils.build(menus, (menu, tree) -> + tree.setId(menu.getMenuId()) + .setParentId(menu.getParentId()) + .setName(menu.getMenuName()) + .setWeight(menu.getOrderNum())); } /** @@ -286,9 +263,9 @@ public class SysMenuServiceImpl extends ServicePlusImpl() - .eq(SysMenu::getMenuName, menu.getMenuName()) - .eq(SysMenu::getParentId, menu.getParentId()) - .last("limit 1")); + .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; } @@ -324,7 +301,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl Date: Thu, 4 Nov 2021 14:18:38 +0800 Subject: [PATCH 021/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20SysLoginCont?= =?UTF-8?q?roller=20=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3=E4=B9=A6=E5=86=99?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/web/controller/system/SysLoginController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 c231acb62..d73ebc20d 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 @@ -31,7 +31,7 @@ import java.util.Set; * @author Lion Li */ @Validated -@Api(value = "数据字典信息控制器", tags = {"数据字典信息管理"}) +@Api(value = "登录验证控制器", tags = {"登录验证管理"}) @RequiredArgsConstructor(onConstructor_ = @Autowired) @RestController public class SysLoginController { From c7c9bd6b08c9da9749a74929e9f9ae4a39b334ed 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, 4 Nov 2021 18:49:46 +0800 Subject: [PATCH 022/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E9=80=BB=E8=BE=91=E5=88=A0=E9=99=A4=20=E5=B7=AE?= =?UTF-8?q?=E5=BC=82=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/mapper/system/SysUserMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml index 04788f760..5d9a18568 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -189,12 +189,12 @@ From 019f585c833efebf2480d0ad3c75f9174acf9d53 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, 4 Nov 2021 19:01:33 +0800 Subject: [PATCH 023/111] =?UTF-8?q?update=20=E8=A1=A5=E5=85=A8=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=97=A5=E5=BF=97=E6=9C=8D=E5=8A=A1=20=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/common/core/service/LogininforService.java | 5 +++++ .../java/com/ruoyi/common/core/service/OperLogService.java | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java index 1bf34d526..91aee4369 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java @@ -2,6 +2,11 @@ package com.ruoyi.common.core.service; import javax.servlet.http.HttpServletRequest; +/** + * 通用 系统访问日志 + * + * @author Lion Li + */ public interface LogininforService { void recordLogininfor(String username, String status, String message, diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java index 71e5647ee..a3b27e6a7 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java @@ -3,7 +3,13 @@ package com.ruoyi.common.core.service; import com.ruoyi.common.core.domain.dto.OperLogDTO; import org.springframework.scheduling.annotation.Async; +/** + * 通用 操作日志 + * + * @author Lion Li + */ public interface OperLogService { + @Async void recordOper(OperLogDTO operLogDTO); } From 8ea56d3b22432d7af3d14f3539e2cbf7c3dbb036 Mon Sep 17 00:00:00 2001 From: phanes <5411232+phanes@user.noreply.gitee.com> Date: Sun, 7 Nov 2021 11:58:35 +0800 Subject: [PATCH 024/111] =?UTF-8?q?update=20=E5=87=8F=E5=B0=91=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E7=89=B9=E5=AE=9A=E6=95=B0=E6=8D=AE=E5=BA=93=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/service/impl/SysDeptServiceImpl.java | 9 ++++----- .../service/impl/SysDictTypeServiceImpl.java | 6 +++--- .../system/service/impl/SysMenuServiceImpl.java | 6 +++--- .../system/service/impl/SysPostServiceImpl.java | 14 ++++++++------ .../system/service/impl/SysRoleServiceImpl.java | 14 ++++++++------ .../system/service/impl/SysUserServiceImpl.java | 16 +++++++++------- 6 files changed, 35 insertions(+), 30 deletions(-) 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 0a2f8e6af..995bd2d60 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 @@ -111,8 +111,7 @@ public class SysDeptServiceImpl extends ServicePlusImpl() - .eq(SysDept::getParentId, deptId) - .last("limit 1")); + .eq(SysDept::getParentId, deptId)); return result > 0; } @@ -138,11 +137,11 @@ public class SysDeptServiceImpl extends ServicePlusImpl() + long count = count(new LambdaQueryWrapper() .eq(SysDept::getDeptName, dept.getDeptName()) .eq(SysDept::getParentId, dept.getParentId()) - .last("limit 1")); - if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { + .ne(SysDept::getDeptId, deptId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; 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 bb940c2b0..0cdce84c1 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 @@ -225,10 +225,10 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl() + long count = count(new LambdaQueryWrapper() .eq(SysDictType::getDictType, dict.getDictType()) - .last("limit 1")); - if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { + .ne(SysDictType::getDictId, dictId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; 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 98236e90b..c8f193af1 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 @@ -262,11 +262,11 @@ public class SysMenuServiceImpl extends ServicePlusImpl() + long count = count(new LambdaQueryWrapper() .eq(SysMenu::getMenuName, menu.getMenuName()) .eq(SysMenu::getParentId, menu.getParentId()) - .last("limit 1")); - if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { + .ne(SysMenu::getMenuId, menuId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; 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 9681b3db4..4e04f3a19 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 @@ -93,9 +93,10 @@ public class SysPostServiceImpl extends ServicePlusImpl() - .eq(SysPost::getPostName, post.getPostName()).last("limit 1")); - if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) { + long count = count(new LambdaQueryWrapper() + .eq(SysPost::getPostName, post.getPostName()) + .ne(SysPost::getPostId, postId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -110,9 +111,10 @@ public class SysPostServiceImpl extends ServicePlusImpl() - .eq(SysPost::getPostCode, post.getPostCode()).last("limit 1")); - if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) { + long count = count(new LambdaQueryWrapper() + .eq(SysPost::getPostCode, post.getPostCode()) + .ne(SysPost::getPostId, postId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; 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 7dd14af8f..7bad29746 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 @@ -141,9 +141,10 @@ public class SysRoleServiceImpl extends ServicePlusImpl() - .eq(SysRole::getRoleName, role.getRoleName()).last("limit 1")); - if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + long count = count(new LambdaQueryWrapper() + .eq(SysRole::getRoleName, role.getRoleName()) + .ne(SysRole::getRoleId, roleId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -158,9 +159,10 @@ public class SysRoleServiceImpl extends ServicePlusImpl() - .eq(SysRole::getRoleKey, role.getRoleKey()).last("limit 1")); - if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + long count = count(new LambdaQueryWrapper() + .eq(SysRole::getRoleKey, role.getRoleKey()) + .ne(SysRole::getRoleId, roleId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; 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 788992a9d..08724cbb7 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 @@ -162,7 +162,7 @@ public class SysUserServiceImpl extends ServicePlusImpl().eq(SysUser::getUserName, userName).last("limit 1")); + long count = count(new LambdaQueryWrapper().eq(SysUser::getUserName, userName)); if (count > 0) { return UserConstants.NOT_UNIQUE; } @@ -178,10 +178,11 @@ public class SysUserServiceImpl extends ServicePlusImpl() + long count = count(new LambdaQueryWrapper() .select(SysUser::getUserId, SysUser::getPhonenumber) - .eq(SysUser::getPhonenumber, user.getPhonenumber()).last("limit 1")); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + .eq(SysUser::getPhonenumber, user.getPhonenumber()) + .ne(SysUser::getUserId, userId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; @@ -196,10 +197,11 @@ public class SysUserServiceImpl extends ServicePlusImpl() + long count = count(new LambdaQueryWrapper() .select(SysUser::getUserId, SysUser::getEmail) - .eq(SysUser::getEmail, user.getEmail()).last("limit 1")); - if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + .eq(SysUser::getEmail, user.getEmail()) + .ne(SysUser::getUserId, userId)); + if (count > 0) { return UserConstants.NOT_UNIQUE; } return UserConstants.UNIQUE; From 57df7f8dfe2b1ea4f3d0cb542d5d6d258be54f91 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, 8 Nov 2021 14:36:07 +0800 Subject: [PATCH 025/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20OSS=20?= =?UTF-8?q?=E4=B8=83=E7=89=9B=E4=BA=91=20token=20=E8=BF=87=E6=9C=9F?= =?UTF-8?q?=E6=9C=AA=E5=88=B7=E6=96=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oss/service/impl/QiniuCloudStorageStrategy.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java index e9b8dc096..0c23e7612 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java @@ -24,7 +24,7 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy { private UploadManager uploadManager; private BucketManager bucketManager; - private String token; + private Auth auth; @Override public void init(CloudStorageProperties cloudStorageProperties) { @@ -35,9 +35,8 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy { config.useHttpsDomains = false; config.useHttpsDomains = "Y".equals(properties.getIsHttps()); uploadManager = new UploadManager(config); - Auth auth = Auth.create(properties.getAccessKey(), properties.getSecretKey()); + auth = Auth.create(properties.getAccessKey(), properties.getSecretKey()); String bucketName = properties.getBucketName(); - token = auth.uploadToken(bucketName); bucketManager = new BucketManager(auth, config); if (!ArrayUtil.contains(bucketManager.buckets(), bucketName)) { @@ -69,9 +68,10 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy { @Override public UploadResult upload(byte[] data, String path, String contentType) { try { - Response res = uploadManager.put(data, path, token, null, contentType, false); + String token = auth.uploadToken(properties.getBucketName()); + Response res = uploadManager.put(data, path, token, null, contentType, false); if (!res.isOK()) { - throw new RuntimeException("上传七牛出错:" + res.toString()); + throw new RuntimeException("上传七牛出错:" + res.error); } } catch (Exception e) { throw new OssException("上传文件失败,请核对七牛配置信息:[" + e.getMessage() + "]"); @@ -85,7 +85,7 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy { path = path.replace(getEndpointLink() + "/", ""); Response res = bucketManager.delete(properties.getBucketName(), path); if (!res.isOK()) { - throw new RuntimeException("删除七牛文件出错:" + res.toString()); + throw new RuntimeException("删除七牛文件出错:" + res.error); } } catch (Exception e) { throw new OssException(e.getMessage()); From 4d5048435c5c48dad64cfbc086b1a59576bc6454 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, 8 Nov 2021 18:17:29 +0800 Subject: [PATCH 026/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20ruoyi=20?= =?UTF-8?q?=E5=85=B3=E4=BA=8E=20=E9=85=8D=E7=BD=AE=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E8=B7=AF=E5=BE=84=E7=9A=84bug=20=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E7=BB=9F=E4=B8=80?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/.env.development | 3 +++ ruoyi-ui/.env.production | 3 +++ ruoyi-ui/.env.staging | 3 +++ 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 | 3 +-- 7 files changed, 12 insertions(+), 5 deletions(-) diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development index 3b003aa38..4addbcd8d 100644 --- a/ruoyi-ui/.env.development +++ b/ruoyi-ui/.env.development @@ -7,6 +7,9 @@ ENV = 'development' # 若依管理系统/开发环境 VUE_APP_BASE_API = '/dev-api' +# 应用访问路径 例如使用前缀 /admin/index +VUE_APP_CONTEXT_PATH = '/index' + # 监控地址 VUE_APP_MONITRO_ADMIN = 'http://localhost:9090/admin/login' diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production index 2d0bb6184..45f4ad1ef 100644 --- a/ruoyi-ui/.env.production +++ b/ruoyi-ui/.env.production @@ -4,6 +4,9 @@ VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统 # 生产环境配置 ENV = 'production' +# 应用访问路径 例如使用前缀 /admin/index +VUE_APP_CONTEXT_PATH = '/index' + # 监控地址 VUE_APP_MONITRO_ADMIN = '/admin/login' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging index 49ce55c95..ed147ca48 100644 --- a/ruoyi-ui/.env.staging +++ b/ruoyi-ui/.env.staging @@ -6,6 +6,9 @@ NODE_ENV = production # 测试环境配置 ENV = 'staging' +# 应用访问路径 例如使用前缀 /admin/index +VUE_APP_CONTEXT_PATH = '/index' + # 监控地址 VUE_APP_MONITRO_ADMIN = '/admin/login' diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue index e6721b70e..8f73e7cab 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(() => { - location.href = this.$router.options.base + '/index'; + location.href = process.env.VUE_APP_CONTEXT_PATH; }) }).catch(() => {}); } diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js index cedf0b3aa..96f557b34 100644 --- a/ruoyi-ui/src/router/index.js +++ b/ruoyi-ui/src/router/index.js @@ -167,7 +167,6 @@ 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 e8b3b5f16..5ce0d0063 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 = this.$router.options.base + '/index'; + location.href = process.env.VUE_APP_CONTEXT_PATH; }) }).catch(() => {}); return Promise.reject('无效的会话,或者会话已过期,请重新登录。') diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js index 4d6967bda..73c217777 100644 --- a/ruoyi-ui/vue.config.js +++ b/ruoyi-ui/vue.config.js @@ -16,8 +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" ? "/" : "/", + publicPath: process.env.VUE_APP_CONTEXT_PATH, // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) outputDir: 'dist', // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) From 3b574875cb5f4e1eab24bfedbeff4cd3c2b19ea5 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, 10 Nov 2021 10:07:28 +0800 Subject: [PATCH 027/111] update hutool 5.7.15 => 5.7.16 update okhttp 4.9.1 => 4.9.2 update spring-boot-admin 2.5.2 => 2.5.3 update redisson 3.16.3 => 3.16.4 update tlog 1.3.3 => 1.3.4 --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 5a2c8b1f0..f4c8c06c2 100644 --- a/pom.xml +++ b/pom.xml @@ -28,13 +28,13 @@ 0.9.1 3.4.3.4 3.9.1 - 5.7.15 - 4.9.1 - 2.5.2 - 3.16.3 + 5.7.16 + 4.9.2 + 2.5.3 + 3.16.4 2.2.1 3.4.1 - 1.3.3 + 1.3.4 2.3.0 From d185d4e4ccaba6480bedf7a497cb7d5b633576cb Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 10 Nov 2021 11:13:27 +0800 Subject: [PATCH 028/111] =?UTF-8?q?=E5=A2=9E=E5=8A=A0sendGet=E6=97=A0?= =?UTF-8?q?=E5=8F=82=E8=AF=B7=E6=B1=82=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/ruoyi/common/utils/http/HttpUtils.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 c920f5b12..f57baf0fc 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 @@ -30,6 +30,17 @@ public class HttpUtils { private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + /** + * 向指定 URL 发送GET方法的请求 + * + * @param url 发送请求的 URL + * @return 所代表远程资源的响应结果 + */ + public static String sendGet(String url) + { + return sendGet(url, StringUtils.EMPTY); + } + /** * 向指定 URL 发送GET方法的请求 * From 4e817a11092343ff0bac1e80cbbb486e189075fe Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 10 Nov 2021 11:14:50 +0800 Subject: [PATCH 029/111] =?UTF-8?q?=E5=8D=87=E7=BA=A7axios=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC0.24.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 034e0642d..fd8630ddc 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@riophae/vue-treeselect": "0.4.0", - "axios": "0.21.0", + "axios": "0.24.0", "clipboard": "2.0.6", "core-js": "3.8.1", "echarts": "4.9.0", From b00171366ff27099133675f8bd66464b5e037867 Mon Sep 17 00:00:00 2001 From: XTvLi <948038320@qq.com> Date: Wed, 10 Nov 2021 18:17:43 +0800 Subject: [PATCH 030/111] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=86=85=E5=AE=B9,=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E4=B8=B4=E6=97=B6=E8=B0=83=E7=94=A8=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/common/CaptchaController.java | 7 ++----- .../java/com/ruoyi/common/config/RuoYiConfig.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) 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 649fd115e..955c78436 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 @@ -6,8 +6,8 @@ import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; +import com.ruoyi.common.config.RuoYiConfig; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.util.FastByteArrayOutputStream; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @@ -36,10 +36,6 @@ public class CaptchaController @Autowired private RedisCache redisCache; - // 验证码类型 - @Value("${ruoyi.captchaType}") - private String captchaType; - @Autowired private ISysConfigService configService; /** @@ -64,6 +60,7 @@ public class CaptchaController BufferedImage image = null; // 生成验证码 + String captchaType = RuoYiConfig.getCaptchaType(); if ("math".equals(captchaType)) { String capText = captchaProducerMath.createText(); 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 843b91912..84c0029db 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 @@ -30,6 +30,9 @@ public class RuoYiConfig /** 获取地址开关 */ private static boolean addressEnabled; + /** 验证码类型 */ + private static String captchaType; + public String getName() { return name; @@ -90,6 +93,14 @@ public class RuoYiConfig RuoYiConfig.addressEnabled = addressEnabled; } + public static String getCaptchaType() { + return captchaType; + } + + public void setCaptchaType(String captchaType) { + RuoYiConfig.captchaType = captchaType; + } + /** * 获取导入上传路径 */ From d2ec3e7d9ab484563e208d761888a17a7d3675bc 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, 10 Nov 2021 14:10:25 +0000 Subject: [PATCH 031/111] =?UTF-8?q?update=20=E7=A7=BB=E9=99=A4=20sql=20?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=20quartz=20=E7=9B=B8=E5=85=B3=E8=A1=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/sql/ry_20210908.sql | 60 ++------------------------------------ 1 file changed, 2 insertions(+), 58 deletions(-) diff --git a/script/sql/ry_20210908.sql b/script/sql/ry_20210908.sql index ec61edfe3..2e0f2ec74 100644 --- a/script/sql/ry_20210908.sql +++ b/script/sql/ry_20210908.sql @@ -248,13 +248,6 @@ insert into sys_menu values('1045', '日志导出', '501', '3', '#', '', '', 1, insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', sysdate(), '', null, ''); insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, ''); insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, ''); --- 定时任务按钮 -# insert into sys_menu values('1049', '任务查询', '110', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', sysdate(), '', null, ''); -# insert into sys_menu values('1050', '任务新增', '110', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', sysdate(), '', null, ''); -# insert into sys_menu values('1051', '任务修改', '110', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', sysdate(), '', null, ''); -# insert into sys_menu values('1052', '任务删除', '110', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', sysdate(), '', null, ''); -# insert into sys_menu values('1053', '状态修改', '110', '5', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', sysdate(), '', null, ''); -# insert into sys_menu values('1054', '任务导出', '110', '7', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', sysdate(), '', null, ''); -- 代码生成按钮 insert into sys_menu values('1055', '生成查询', '115', '1', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', sysdate(), '', null, ''); insert into sys_menu values('1056', '生成修改', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', sysdate(), '', null, ''); @@ -373,12 +366,6 @@ insert into sys_role_menu values ('2', '1045'); insert into sys_role_menu values ('2', '1046'); insert into sys_role_menu values ('2', '1047'); insert into sys_role_menu values ('2', '1048'); -insert into sys_role_menu values ('2', '1049'); -insert into sys_role_menu values ('2', '1050'); -insert into sys_role_menu values ('2', '1051'); -insert into sys_role_menu values ('2', '1052'); -insert into sys_role_menu values ('2', '1053'); -insert into sys_role_menu values ('2', '1054'); insert into sys_role_menu values ('2', '1055'); insert into sys_role_menu values ('2', '1056'); insert into sys_role_menu values ('2', '1057'); @@ -575,49 +562,6 @@ create table sys_logininfor ( ) engine=innodb auto_increment=100 comment = '系统访问记录'; --- ---------------------------- --- 15、定时任务调度表 --- ---------------------------- -drop table if exists sys_job; -create table sys_job ( - job_id bigint(20) not null auto_increment comment '任务ID', - job_name varchar(64) default '' comment '任务名称', - job_group varchar(64) default 'DEFAULT' comment '任务组名', - invoke_target varchar(500) not null comment '调用目标字符串', - cron_expression varchar(255) default '' comment 'cron执行表达式', - misfire_policy varchar(20) default '3' comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)', - concurrent char(1) default '1' comment '是否并发执行(0允许 1禁止)', - status char(1) default '0' comment '状态(0正常 1暂停)', - create_by varchar(64) default '' comment '创建者', - create_time datetime comment '创建时间', - update_by varchar(64) default '' comment '更新者', - update_time datetime comment '更新时间', - remark varchar(500) default '' comment '备注信息', - primary key (job_id, job_name, job_group) -) engine=innodb auto_increment=100 comment = '定时任务调度表'; - -insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); -insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); -insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); - - --- ---------------------------- --- 16、定时任务调度日志表 --- ---------------------------- -drop table if exists sys_job_log; -create table sys_job_log ( - job_log_id bigint(20) not null auto_increment comment '任务日志ID', - job_name varchar(64) not null comment '任务名称', - job_group varchar(64) not null comment '任务组名', - invoke_target varchar(500) not null comment '调用目标字符串', - job_message varchar(500) comment '日志信息', - status char(1) default '0' comment '执行状态(0正常 1失败)', - exception_info varchar(2000) default '' comment '异常信息', - create_time datetime comment '创建时间', - primary key (job_log_id) -) engine=innodb comment = '定时任务调度日志表'; - - -- ---------------------------- -- 17、通知公告表 -- ---------------------------- @@ -639,8 +583,8 @@ create table sys_notice ( -- ---------------------------- -- 初始化-公告信息表数据 -- ---------------------------- -insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员'); -insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容', '0', 'admin', sysdate(), '', null, '管理员'); +insert into sys_notice values('1', '温馨提醒:2018-07-01 新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员'); +insert into sys_notice values('2', '维护通知:2018-07-01 系统凌晨维护', '1', '维护内容', '0', 'admin', sysdate(), '', null, '管理员'); -- ---------------------------- From 223ff4ebffa9f611444d9634f09aa70fb20bd654 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, 11 Nov 2021 12:47:26 +0800 Subject: [PATCH 032/111] =?UTF-8?q?fix=20=E5=88=86=E9=A1=B5=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=20=E6=8E=92=E5=BA=8F=E5=AD=97=E6=AE=B5=20null=20?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/PageUtils.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 b358e3be7..abc42ddd2 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 @@ -1,5 +1,6 @@ package com.ruoyi.common.utils; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.HttpStatus; import com.baomidou.mybatisplus.core.metadata.OrderItem; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -63,7 +64,9 @@ public class PageUtils { } PagePlus page = new PagePlus<>(pageNum, pageSize); OrderItem orderItem = buildOrderItem(orderByColumn, isAsc); - page.addOrder(orderItem); + if (ObjectUtil.isNotNull(orderItem)) { + page.addOrder(orderItem); + } return page; } @@ -87,7 +90,9 @@ public class PageUtils { } Page page = new Page<>(pageNum, pageSize); OrderItem orderItem = buildOrderItem(orderByColumn, isAsc); - page.addOrder(orderItem); + if (ObjectUtil.isNotNull(orderItem)) { + page.addOrder(orderItem); + } return page; } From 6904f38ea2ccccfddee9541e1d78ff744250793b 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, 11 Nov 2021 15:31:49 +0800 Subject: [PATCH 033/111] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E6=A0=BC=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/config/SecurityConfig.java | 65 +++++++++---------- 1 file changed, 30 insertions(+), 35 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index bb8b7f231..450eccd45 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -21,18 +21,17 @@ import org.springframework.web.filter.CorsFilter; /** * spring security配置 - * + * * @author ruoyi */ @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) -public class SecurityConfig extends WebSecurityConfigurerAdapter -{ +public class SecurityConfig extends WebSecurityConfigurerAdapter { /** * 自定义用户认证逻辑 */ @Autowired private UserDetailsService userDetailsService; - + /** * 认证失败处理类 */ @@ -50,7 +49,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter */ @Autowired private JwtAuthenticationTokenFilter authenticationTokenFilter; - + /** * 跨域过滤器 */ @@ -68,8 +67,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter */ @Bean @Override - public AuthenticationManager authenticationManagerBean() throws Exception - { + public AuthenticationManager authenticationManagerBean() throws Exception { return super.authenticationManagerBean(); } @@ -89,31 +87,30 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter * authenticated | 用户登录后可访问 */ @Override - protected void configure(HttpSecurity httpSecurity) throws Exception - { + protected void configure(HttpSecurity httpSecurity) throws Exception { httpSecurity - // CSRF禁用,因为不使用session - .csrf().disable() - // 认证失败处理类 - .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() - // 基于token,所以不需要session - .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() - // 过滤请求 - .authorizeRequests() - .antMatchers( - HttpMethod.GET, - "/", - "/*.html", - "/**/*.html", - "/**/*.css", - "/**/*.js" - ).permitAll() - .antMatchers(securityProperties.getAnonymous()).anonymous() - .antMatchers(securityProperties.getPermitAll()).permitAll() - // 除上面外的所有请求全部需要鉴权认证 - .anyRequest().authenticated() - .and() - .headers().frameOptions().disable(); + // CSRF禁用,因为不使用session + .csrf().disable() + // 认证失败处理类 + .exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() + // 基于token,所以不需要session + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() + // 过滤请求 + .authorizeRequests() + .antMatchers( + HttpMethod.GET, + "/", + "/*.html", + "/**/*.html", + "/**/*.css", + "/**/*.js" + ).permitAll() + .antMatchers(securityProperties.getAnonymous()).anonymous() + .antMatchers(securityProperties.getPermitAll()).permitAll() + // 除上面外的所有请求全部需要鉴权认证 + .anyRequest().authenticated() + .and() + .headers().frameOptions().disable(); httpSecurity.logout().logoutUrl(securityProperties.getLogoutUrl()).logoutSuccessHandler(logoutSuccessHandler); // 添加JWT filter httpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class); @@ -126,8 +123,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter * 强散列哈希加密实现 */ @Bean - public BCryptPasswordEncoder bCryptPasswordEncoder() - { + public BCryptPasswordEncoder bCryptPasswordEncoder() { return new BCryptPasswordEncoder(); } @@ -135,8 +131,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter * 身份认证接口 */ @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception - { + protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); } } From 53cb0826bc9979c7ec4bbf4a9f4312e945a05ac3 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, 12 Nov 2021 13:15:32 +0800 Subject: [PATCH 034/111] =?UTF-8?q?update=20=E5=8D=87=E7=BA=A7=20swagger?= =?UTF-8?q?=20=E9=85=8D=E7=BD=AE=20=E4=BD=BF=E7=94=A8=20knife4j=20?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 3 +++ ruoyi-admin/src/main/resources/application.yml | 16 ++++++++++++++++ .../ruoyi/framework/config/SwaggerConfig.java | 5 +++++ 3 files changed, 24 insertions(+) diff --git a/pom.xml b/pom.xml index f4c8c06c2..cb876d0ab 100644 --- a/pom.xml +++ b/pom.xml @@ -350,6 +350,7 @@ local debug + false '*' @@ -359,6 +360,7 @@ dev debug + false '*' @@ -371,6 +373,7 @@ prod warn + true health, info, logfile diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index cd53e4a37..89cda7c9a 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -214,6 +214,22 @@ swagger: - name: 3.代码生成模块 basePackage: com.ruoyi.generator +knife4j: + # 是否开启Knife4j增强模式 + enable: true + # 是否开启生产环境保护策略 + production: @knife4j.production@ + # 前端Ui的个性化配置属性 + setting: + # 默认语言 + language: zh-CN + # 是否显示Footer + enableFooter: false + # 是否开启动态参数调试功能 + enableDynamicParameter: true + # 是否在每个Debug调试栏后显示刷新变量按钮 + enableReloadCacheParameter: true + # 防止XSS攻击 xss: # 过滤开关 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java index 4da3b9949..bf6bc8f9f 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java @@ -1,6 +1,7 @@ package com.ruoyi.framework.config; import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; import com.ruoyi.common.properties.TokenProperties; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; @@ -35,6 +36,9 @@ public class SwaggerConfig { @Autowired private TokenProperties tokenProperties; + @Autowired + private OpenApiExtensionResolver openApiExtensionResolver; + /** * 创建API */ @@ -59,6 +63,7 @@ public class SwaggerConfig { // 设置安全模式,swagger可以设置访问token .securitySchemes(securitySchemes()) .securityContexts(securityContexts()) + .extensions(openApiExtensionResolver.buildExtensions(group.getName())) .pathMapping(swaggerProperties.getPathMapping()); String beanName = StringUtils.substringAfterLast(basePackage, ".") + "Docket"; SpringUtils.registerBean(beanName, docket); From 874cf18566e3071a335250a716858c3da9180463 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, 12 Nov 2021 19:43:49 +0800 Subject: [PATCH 035/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=BA=94=E7=94=A8=E5=89=8D=E7=BC=80=E8=B7=AF=E5=BE=84?= =?UTF-8?q?=E4=B9=A6=E5=86=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/.env.development | 4 ++-- ruoyi-ui/.env.production | 4 ++-- ruoyi-ui/.env.staging | 4 ++-- ruoyi-ui/src/layout/components/Navbar.vue | 2 +- ruoyi-ui/src/utils/request.js | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development index 4addbcd8d..232d9077b 100644 --- a/ruoyi-ui/.env.development +++ b/ruoyi-ui/.env.development @@ -7,8 +7,8 @@ ENV = 'development' # 若依管理系统/开发环境 VUE_APP_BASE_API = '/dev-api' -# 应用访问路径 例如使用前缀 /admin/index -VUE_APP_CONTEXT_PATH = '/index' +# 应用访问路径 例如使用前缀 /admin/ +VUE_APP_CONTEXT_PATH = '/' # 监控地址 VUE_APP_MONITRO_ADMIN = 'http://localhost:9090/admin/login' diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production index 45f4ad1ef..928000bda 100644 --- a/ruoyi-ui/.env.production +++ b/ruoyi-ui/.env.production @@ -4,8 +4,8 @@ VUE_APP_TITLE = RuoYi-Vue-Plus后台管理系统 # 生产环境配置 ENV = 'production' -# 应用访问路径 例如使用前缀 /admin/index -VUE_APP_CONTEXT_PATH = '/index' +# 应用访问路径 例如使用前缀 /admin/ +VUE_APP_CONTEXT_PATH = '/' # 监控地址 VUE_APP_MONITRO_ADMIN = '/admin/login' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging index ed147ca48..903abe658 100644 --- a/ruoyi-ui/.env.staging +++ b/ruoyi-ui/.env.staging @@ -6,8 +6,8 @@ NODE_ENV = production # 测试环境配置 ENV = 'staging' -# 应用访问路径 例如使用前缀 /admin/index -VUE_APP_CONTEXT_PATH = '/index' +# 应用访问路径 例如使用前缀 /admin/ +VUE_APP_CONTEXT_PATH = '/' # 监控地址 VUE_APP_MONITRO_ADMIN = '/admin/login' diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue index 8f73e7cab..9de102c16 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(() => { - location.href = process.env.VUE_APP_CONTEXT_PATH; + location.href = process.env.VUE_APP_CONTEXT_PATH + "index"; }) }).catch(() => {}); } diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 5ce0d0063..31944e2a2 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 = process.env.VUE_APP_CONTEXT_PATH; + location.href = process.env.VUE_APP_CONTEXT_PATH + "index"; }) }).catch(() => {}); return Promise.reject('无效的会话,或者会话已过期,请重新登录。') From a610c5c8c6f0bdc179dd1c37c8384b33a34ce9c0 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, 12 Nov 2021 20:38:49 +0800 Subject: [PATCH 036/111] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E6=A1=A3=20=E6=BC=94=E7=A4=BA=E7=8E=AF=E5=A2=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a5cae9332..bd1422148 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,9 @@ [![JDK-11](https://img.shields.io/badge/JDK-11-green.svg)]() [![JDK-17](https://img.shields.io/badge/JDK-17-green.svg)]() -RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼容原框架) +> RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼容原框架) + +> 系统演示: [传送门](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/系统演示?sort_id=4836388) | 功能介绍 | 使用技术 | 文档地址 | 特性注意事项 | |---|---|---|---| @@ -61,8 +63,7 @@ RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 `分布式集群` 场景升级(不兼 ## 软件架构图 -![Plus部署架构图](https://images.gitee.com/uploads/images/2021/0729/112230_4295e5ce_1766278.png "Plus部署架构图.png") - +![Plus部署架构图](https://images.gitee.com/uploads/images/2021/1112/202137_673ac5d2_1766278.png "Plus部署架构图.png") ## 贡献代码 欢迎各路英雄豪杰 `PR` 代码 请提交到 `dev` 开发分支 统一测试发版 From 5389663b7278225cdc0bdcbbe931dcd154f7ef07 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, 12 Nov 2021 21:16:45 +0800 Subject: [PATCH 037/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=B8=B4?= =?UTF-8?q?=E6=97=B6=E6=96=87=E4=BB=B6=E5=AD=98=E5=82=A8=E4=BD=8D=E7=BD=AE?= =?UTF-8?q?=20=E7=9B=B8=E5=AF=B9=E8=B7=AF=E5=BE=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-prod.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 4f024f450..1d680d7de 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -3,7 +3,7 @@ spring: servlet: multipart: # 临时文件存储位置 避免临时文件被系统清理报错 - location: ./temp + location: /ruoyi/server/temp --- # 监控配置 spring: From 149b136e0bb0968f4ff75567c4d9327c9ad9c012 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, 14 Nov 2021 22:27:36 +0800 Subject: [PATCH 038/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=AF=BC=E5=85=A5=E5=AD=97=E5=85=B8=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/system/domain/vo/SysUserImportVo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 16932ad68..d461332f2 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 @@ -67,7 +67,7 @@ public class SysUserImportVo implements Serializable { * 帐号状态(0正常 1停用) */ @ExcelProperty(value = "帐号状态", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "sys_common_status") + @ExcelDictFormat(dictType = "sys_normal_disable") private String status; } From b374ff4d6d3a426d26bf9a526e0b73a0aae0a0da 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, 15 Nov 2021 16:54:34 +0800 Subject: [PATCH 039/111] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E5=B7=A5=E5=85=B7=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/DictUtils.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) 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 f24d0e8b4..a52a68185 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 @@ -36,9 +36,8 @@ public class DictUtils { * @return dictDatas 字典数据列表 */ public static List getDictCache(String key) { - Object cacheObj = RedisUtils.getCacheObject(getCacheKey(key)); - if (StringUtils.isNotNull(cacheObj)) { - List dictDatas = (List) cacheObj; + List dictDatas = RedisUtils.getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(dictDatas)) { return dictDatas; } return null; From cb9c0e79ebadd5d219f60a2830e36e50868354cb Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 16 Nov 2021 14:15:17 +0800 Subject: [PATCH 040/111] =?UTF-8?q?=E5=8D=87=E7=BA=A7core-js=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC3.19.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index fd8630ddc..45f5508e6 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -39,7 +39,7 @@ "@riophae/vue-treeselect": "0.4.0", "axios": "0.24.0", "clipboard": "2.0.6", - "core-js": "3.8.1", + "core-js": "3.19.1", "echarts": "4.9.0", "element-ui": "2.15.6", "file-saver": "2.0.5", From 2ab96587ef8a2fab5e22ed786ff11953d2f2b0e2 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Tue, 16 Nov 2021 16:05:15 +0800 Subject: [PATCH 041/111] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=BF=BD=E7=95=A5=E5=8F=8C=E5=BC=95=E5=8F=B7=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E9=80=97=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 5519c672f..4cde0ec44 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 @@ -110,7 +110,7 @@ public class JobInvokeUtil { return null; } - String[] methodParams = methodStr.split(","); + String[] methodParams = methodStr.split(",(?=(?:[^\']*\"[^\']*\')*[^\']*$)"); List classs = new LinkedList<>(); for (int i = 0; i < methodParams.length; i++) { From ead6da476029dc51bf654c74be36d82319a1ef0e 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, 16 Nov 2021 18:54:53 +0800 Subject: [PATCH 042/111] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E4=B8=8E=E6=96=87=E6=A1=A3=E9=A1=B9=E7=9B=AE=E4=BB=8B?= =?UTF-8?q?=E7=BB=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - ruoyi-ui/src/views/index.vue | 36 ++++++++++++++++++++++-------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index bd1422148..63dd1fef0 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,6 @@ | 数据库框架 | p6spy | [p6spy官网](https://p6spy.readthedocs.io/) | 更强劲的 SQL 分析 | | 多数据源框架 | dynamic-datasource | [dynamic-ds文档](https://www.kancloud.cn/tracy5546/dynamic-datasource/content) | 支持主从与多种类数据库异构 | | 序列化框架 | Jackson | [Jackson官网](https://github.com/FasterXML/jackson) | 统一使用 jackson 高效可靠 | -| 网络框架 | Feign、OkHttp3 | [Feign官网](https://github.com/OpenFeign/feign) | 接口化管理 HTTP 请求 | | Redis客户端 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 支持单机、集群配置 | | 分布式限流 | Redisson | [Redisson文档](https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95) | 全局、请求IP、集群ID 多种限流 | | 分布式锁 | Lock4j | [Lock4j官网](https://gitee.com/baomidou/lock4j) | 注解锁、工具锁 多种多样 | diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 97671273a..37e6ff425 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -4,26 +4,34 @@

RuoYi-Vue-Plus后台管理框架

- 基于 RuoYi-Vue 集成 Mybatis-Plus Lombok Hutool 等便捷开发工具 适配重写相关业务 便于开发 定期与 RuoYi-Vue 同步 + RuoYi-Vue-Plus 是基于 RuoYi-Vue 针对 分布式集群 场景升级(不兼容原框架)
* 前端开发框架 Vue、Element UI
- * 后端开发框架 Spring Boot、Redis
+ * 后端开发框架 Spring Boot
* 容器框架 Undertow 基于 Netty 的高性能容器
- * 权限认证框架 Spring Security、Jwt,支持多终端认证系统
- * 关系数据库 MySQL 适配 8.X
- * 缓存数据库 Redis 适配 6.X
- * 数据库开发框架 Mybatis-Plus 快速 CRUD 增加开发效率 插件化支持各类需求
- * 网络框架 Feign、OkHttp3 接口化管理 HTTP 请求
- * 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性
- * 监控框架 spring-boot-admin 全方位服务监控
- * 校验框架 validation 增强接口安全性 严谨性
- * 文档框架 knife4j 美化接口文档
- * 代码生成器 一键生成前后端代码
+ * 权限认证框架 Spring Security、Jwt 支持多终端认证系统
+ * 关系数据库 MySQL 适配 8.X 最低 5.7
+ * 缓存数据库 Redis 适配 6.X 最低 4.X
+ * 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率
+ * 数据库框架 p6spy 更强劲的 SQL 分析
* 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构
- * Redis客户端 采用 Redisson 性能更强
+ * 序列化框架 Jackson 统一使用 jackson 高效可靠
+ * Redis客户端 Redisson 性能强劲、API丰富
+ * 分布式限流 Redisson 全局、请求IP、集群ID 多种限流
* 分布式锁 Lock4j 注解锁、工具锁 多种多样
+ * 分布式幂等 Lock4j 基于分布式锁实现
+ * 分布式日志 TLog 支持跟踪链路日志记录、性能分析、链路排查
+ * 分布式任务调度 Xxl-Job 高性能 高可靠 易扩展
+ * 文件存储 Minio 本地存储
+ * 文件存储 七牛、阿里、腾讯 云存储
+ * 监控框架 SpringBoot-Admin 全方位服务监控
+ * 校验框架 Validation 增强接口安全性 严谨性
+ * Excel框架 Alibaba EasyExcel 性能优异 扩展性强
+ * 文档框架 knife4j 美化接口文档
+ * 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性
+ * 代码生成器 适配MP、Knife4j规范化代码 一键生成前后端代码
* 部署方式 Docker 容器编排 一键部署业务集群
- * 文件存储 OSS 对象存储模块 支持(Minio、七牛、阿里、腾讯)
+ * 国际化 SpringMessage Spring标准国际化方案

当前版本: v{{ version }} From 984098abcea78bd603520c12eb5f1ce8c92d5b81 Mon Sep 17 00:00:00 2001 From: phanes <5411232+phanes@user.noreply.gitee.com> Date: Tue, 16 Nov 2021 20:29:36 +0800 Subject: [PATCH 043/111] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E5=8F=82=E6=95=B0=E7=9A=84=E6=95=B0=E6=8D=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java | 2 +- .../main/java/com/ruoyi/system/service/ISysMenuService.java | 2 +- .../com/ruoyi/system/service/impl/SysMenuServiceImpl.java | 2 +- .../src/main/resources/mapper/system/SysMenuMapper.xml | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) 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 8b5dcd6b1..f1a018ff6 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 @@ -58,6 +58,6 @@ public interface SysMenuMapper extends BaseMapperPlus { * @param menuCheckStrictly 菜单树选择项是否关联显示 * @return 选中菜单列表 */ - 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/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java index bc4c960af..9424052d6 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 @@ -54,7 +54,7 @@ public interface ISysMenuService extends IService { * @param roleId 角色ID * @return 选中菜单列表 */ - List selectMenuListByRoleId(Long roleId); + List selectMenuListByRoleId(Long roleId); /** * 构建前端路由所需要的菜单 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 c8f193af1..9c3bfeb77 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 @@ -114,7 +114,7 @@ public class SysMenuServiceImpl extends ServicePlusImpl selectMenuListByRoleId(Long roleId) { + public List selectMenuListByRoleId(Long roleId) { SysRole role = roleMapper.selectById(roleId); return baseMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); } diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml index 756eb53f7..bfb543673 100644 --- a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -117,7 +117,7 @@ order by m.parent_id, m.order_num - select m.menu_id from sys_menu m left join sys_role_menu rm on m.menu_id = rm.menu_id @@ -147,4 +147,4 @@ and ur.user_id = #{userId} - \ No newline at end of file + From 1c8d44b3094b0f0bae18abeb5fffc8b59c50f9b7 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, 17 Nov 2021 10:45:32 +0800 Subject: [PATCH 044/111] =?UTF-8?q?update=20=E7=9B=91=E6=8E=A7=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=20=E9=9B=86=E6=88=90=E7=9B=91=E6=8E=A7=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=20=E5=AE=9E=E7=8E=B0=E8=87=AA=E7=9B=91?= =?UTF-8?q?=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-extend/ruoyi-monitor-admin/pom.xml | 6 ++++++ .../monitor/admin/config/SecurityConfig.java | 2 ++ .../src/main/resources/application-dev.yml | 14 +++++++++++++ .../src/main/resources/application-prod.yml | 14 +++++++++++++ .../src/main/resources/application.yml | 20 +++++++++++++++++++ 5 files changed, 56 insertions(+) create mode 100644 ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml create mode 100644 ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml index 33a78516d..fc321bd58 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml +++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml @@ -28,6 +28,12 @@ de.codecentric spring-boot-admin-starter-server + + + de.codecentric + spring-boot-admin-starter-client + + 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 ca9072c78..7335e2f25 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 @@ -34,6 +34,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { //授予对所有静态资产和登录页面的公共访问权限。 .antMatchers(adminContextPath + "/assets/**").permitAll() .antMatchers(adminContextPath + "/login").permitAll() + .antMatchers("/actuator").anonymous() + .antMatchers("/actuator/**").anonymous() //必须对每个其他请求进行身份验证 .anyRequest().authenticated().and() //配置登录和注销 diff --git a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml new file mode 100644 index 000000000..829314b41 --- /dev/null +++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-dev.yml @@ -0,0 +1,14 @@ +--- # 监控配置 +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-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml new file mode 100644 index 000000000..e8cac1369 --- /dev/null +++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod.yml @@ -0,0 +1,14 @@ +--- # 监控配置 +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-monitor-admin/src/main/resources/application.yml b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml index 631f3e772..bf0db5620 100644 --- a/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml +++ b/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application.yml @@ -1,6 +1,12 @@ server: port: 9090 +spring: + application: + name: ruoyi-monitor-admin + profiles: + active: @profiles.active@ +--- # 监控中心服务端配置 spring: security: user: @@ -9,3 +15,17 @@ spring: boot: admin: context-path: /admin + +--- # Actuator 监控端点的配置项 +management: + endpoints: + web: + # Actuator 提供的 API 接口的根目录。默认为 /actuator + base-path: /actuator + exposure: + # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + # 生产环境不建议放开所有 根据项目需求放开即可 + include: @endpoints.include@ + endpoint: + logfile: + external-file: ./logs/ruoyi-monitor-admin.log From caba6fb01ec237fd071dd0d4cb01dac0dc8deb1f 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, 17 Nov 2021 10:45:58 +0800 Subject: [PATCH 045/111] =?UTF-8?q?update=20=E8=B0=83=E5=BA=A6=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=20=E9=9B=86=E6=88=90=E7=9B=91=E6=8E=A7=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF=20=E6=B3=A8=E5=86=8C=E5=88=B0=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-extend/ruoyi-xxl-job-admin/pom.xml | 5 +++++ .../src/main/resources/application-dev.yml | 15 +++++++++++++++ .../src/main/resources/application-prod.yml | 15 +++++++++++++++ .../src/main/resources/application.yml | 17 ++++++++++++++--- 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml index a2b198fc9..26892d424 100644 --- a/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml +++ b/ruoyi-extend/ruoyi-xxl-job-admin/pom.xml @@ -71,6 +71,11 @@ ${mysql-connector-java.version} + + de.codecentric + spring-boot-admin-starter-client + + com.xuxueli 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 index 065b34262..540a3237a 100644 --- 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 @@ -1,3 +1,18 @@ +--- # 监控配置 +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 + --- # 数据库配置 spring: datasource: 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 index 2994909ac..bcec9d82e 100644 --- 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 @@ -1,3 +1,18 @@ +--- # 监控配置 +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 + --- # 数据库配置 spring: datasource: 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 edafdb01b..202272087 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,6 +4,8 @@ server: servlet: context-path: /xxl-job-admin spring: + application: + name: ruoyi-xxl-job-admin profiles: active: @profiles.active@ mvc: @@ -28,13 +30,22 @@ spring: suffix: .ftl templateLoaderPath: classpath:/templates/ ---- # 监控配置 +--- # Actuator 监控端点的配置项 management: health: mail: enabled: false - server: - base-path: /actuator + endpoints: + web: + # Actuator 提供的 API 接口的根目录。默认为 /actuator + base-path: /actuator + exposure: + # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + # 生产环境不建议放开所有 根据项目需求放开即可 + include: @endpoints.include@ + endpoint: + logfile: + external-file: ./logs/ruoyi-xxl-job-admin.log --- # xxljob系统配置 xxl: From cedd2d1daf444c0f74ca2a7844e769d524877279 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Wed, 17 Nov 2021 11:57:17 +0800 Subject: [PATCH 046/111] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor/SysLogininforController.java | 8 ++- .../monitor/SysOperlogController.java | 8 ++- .../system/SysConfigController.java | 9 ++- .../system/SysDictDataController.java | 7 +- .../system/SysDictTypeController.java | 7 +- .../controller/system/SysPostController.java | 7 +- .../controller/system/SysRoleController.java | 7 +- .../controller/system/SysUserController.java | 13 ++-- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 17 +++-- .../main/resources/vm/java/controller.java.vm | 7 +- .../src/main/resources/vm/vue/index.vue.vm | 16 ++--- .../quartz/controller/SysJobController.java | 7 +- .../controller/SysJobLogController.java | 8 ++- ruoyi-ui/src/api/monitor/job.js | 9 --- ruoyi-ui/src/api/monitor/jobLog.js | 9 --- ruoyi-ui/src/api/monitor/logininfor.js | 9 --- ruoyi-ui/src/api/monitor/operlog.js | 9 --- ruoyi-ui/src/api/system/config.js | 9 --- ruoyi-ui/src/api/system/dict/data.js | 9 --- ruoyi-ui/src/api/system/dict/type.js | 9 --- ruoyi-ui/src/api/system/post.js | 9 --- ruoyi-ui/src/api/system/role.js | 9 --- ruoyi-ui/src/api/system/user.js | 17 ----- ruoyi-ui/src/main.js | 2 + ruoyi-ui/src/plugins/download.js | 18 ++--- ruoyi-ui/src/utils/request.js | 68 ++++++++++++------- ruoyi-ui/src/utils/ruoyi.js | 37 ++++++++++ ruoyi-ui/src/views/monitor/job/index.vue | 16 ++--- ruoyi-ui/src/views/monitor/job/log.vue | 16 ++--- .../src/views/monitor/logininfor/index.vue | 16 ++--- ruoyi-ui/src/views/monitor/operlog/index.vue | 16 ++--- ruoyi-ui/src/views/system/config/index.vue | 16 ++--- ruoyi-ui/src/views/system/dict/data.vue | 16 ++--- ruoyi-ui/src/views/system/dict/index.vue | 16 ++--- ruoyi-ui/src/views/system/post/index.vue | 16 ++--- ruoyi-ui/src/views/system/role/index.vue | 16 ++--- ruoyi-ui/src/views/system/user/index.vue | 22 ++---- 37 files changed, 192 insertions(+), 318 deletions(-) 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 14f57fdaf..5bd40baed 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 @@ -1,11 +1,13 @@ package com.ruoyi.web.controller.monitor; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; 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.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; @@ -40,12 +42,12 @@ public class SysLogininforController extends BaseController @Log(title = "登录日志", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") - @GetMapping("/export") - public AjaxResult export(SysLogininfor logininfor) + @PostMapping("/export") + public void export(HttpServletResponse response, SysLogininfor logininfor) { List list = logininforService.selectLogininforList(logininfor); ExcelUtil util = new ExcelUtil(SysLogininfor.class); - return util.exportExcel(list, "登录日志"); + util.exportExcel(response, list, "登录日志"); } @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") 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 75bf12682..4ce126a54 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 @@ -1,11 +1,13 @@ package com.ruoyi.web.controller.monitor; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; 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.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.ruoyi.common.annotation.Log; @@ -40,12 +42,12 @@ public class SysOperlogController extends BaseController @Log(title = "操作日志", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") - @GetMapping("/export") - public AjaxResult export(SysOperLog operLog) + @PostMapping("/export") + public void export(HttpServletResponse response, SysOperLog operLog) { List list = operLogService.selectOperLogList(operLog); ExcelUtil util = new ExcelUtil(SysOperLog.class); - return util.exportExcel(list, "操作日志"); + util.exportExcel(response, list, "操作日志"); } @Log(title = "操作日志", businessType = BusinessType.DELETE) 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 dc2532fbc..04f71629a 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 @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.system; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -13,7 +14,6 @@ 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.annotation.RepeatSubmit; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; @@ -49,12 +49,12 @@ public class SysConfigController extends BaseController @Log(title = "参数管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:config:export')") - @GetMapping("/export") - public AjaxResult export(SysConfig config) + @PostMapping("/export") + public void export(HttpServletResponse response, SysConfig config) { List list = configService.selectConfigList(config); ExcelUtil util = new ExcelUtil(SysConfig.class); - return util.exportExcel(list, "参数数据"); + util.exportExcel(response, list, "参数数据"); } /** @@ -82,7 +82,6 @@ public class SysConfigController extends BaseController @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))) 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 b9e3dc3b1..eea89fd0d 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 @@ -2,6 +2,7 @@ package com.ruoyi.web.controller.system; import java.util.ArrayList; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -50,12 +51,12 @@ public class SysDictDataController extends BaseController @Log(title = "字典数据", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:dict:export')") - @GetMapping("/export") - public AjaxResult export(SysDictData dictData) + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictData dictData) { List list = dictDataService.selectDictDataList(dictData); ExcelUtil util = new ExcelUtil(SysDictData.class); - return util.exportExcel(list, "字典数据"); + util.exportExcel(response, list, "字典数据"); } /** 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 acad00e26..0dd3474cf 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 @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.system; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -45,12 +46,12 @@ public class SysDictTypeController extends BaseController @Log(title = "字典类型", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:dict:export')") - @GetMapping("/export") - public AjaxResult export(SysDictType dictType) + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictType dictType) { List list = dictTypeService.selectDictTypeList(dictType); ExcelUtil util = new ExcelUtil(SysDictType.class); - return util.exportExcel(list, "字典类型"); + util.exportExcel(response, list, "字典类型"); } /** 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 30a87616c..1a2b408ed 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 @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.system; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -48,12 +49,12 @@ public class SysPostController extends BaseController @Log(title = "岗位管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:post:export')") - @GetMapping("/export") - public AjaxResult export(SysPost post) + @PostMapping("/export") + public void export(HttpServletResponse response, SysPost post) { List list = postService.selectPostList(post); ExcelUtil util = new ExcelUtil(SysPost.class); - return util.exportExcel(list, "岗位数据"); + util.exportExcel(response, list, "岗位数据"); } /** 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 d73749086..d70fa8158 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 @@ -1,6 +1,7 @@ package com.ruoyi.web.controller.system; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; @@ -61,12 +62,12 @@ public class SysRoleController extends BaseController @Log(title = "角色管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:role:export')") - @GetMapping("/export") - public AjaxResult export(SysRole role) + @PostMapping("/export") + public void export(HttpServletResponse response, SysRole role) { List list = roleService.selectRoleList(role); ExcelUtil util = new ExcelUtil(SysRole.class); - return util.exportExcel(list, "角色数据"); + util.exportExcel(response, list, "角色数据"); } /** 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 6cfbfb8d7..9aacc3be0 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 @@ -2,6 +2,7 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.stream.Collectors; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -62,12 +63,12 @@ public class SysUserController extends BaseController @Log(title = "用户管理", businessType = BusinessType.EXPORT) @PreAuthorize("@ss.hasPermi('system:user:export')") - @GetMapping("/export") - public AjaxResult export(SysUser user) + @PostMapping("/export") + public void export(HttpServletResponse response, SysUser user) { List list = userService.selectUserList(user); ExcelUtil util = new ExcelUtil(SysUser.class); - return util.exportExcel(list, "用户数据"); + util.exportExcel(response, list, "用户数据"); } @Log(title = "用户管理", businessType = BusinessType.IMPORT) @@ -82,11 +83,11 @@ public class SysUserController extends BaseController return AjaxResult.success(message); } - @GetMapping("/importTemplate") - public AjaxResult importTemplate() + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { ExcelUtil util = new ExcelUtil(SysUser.class); - return util.importTemplateExcel("用户数据"); + util.importTemplateExcel(response, "用户数据"); } /** 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 4169360a1..93a19e870 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 @@ -431,7 +431,7 @@ public class ExcelUtil * @return 结果 * @throws IOException */ - public void exportExcel(HttpServletResponse response, List list, String sheetName)throws IOException + public void exportExcel(HttpServletResponse response, List list, String sheetName) { exportExcel(response, list, sheetName, StringUtils.EMPTY); } @@ -446,12 +446,12 @@ public class ExcelUtil * @return 结果 * @throws IOException */ - public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) throws IOException + public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); this.init(list, sheetName, title, Type.EXPORT); - exportExcel(response.getOutputStream()); + exportExcel(response); } /** @@ -484,7 +484,7 @@ public class ExcelUtil * @param sheetName 工作表的名称 * @return 结果 */ - public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException + public void importTemplateExcel(HttpServletResponse response, String sheetName) { importTemplateExcel(response, sheetName, StringUtils.EMPTY); } @@ -496,12 +496,12 @@ public class ExcelUtil * @param title 标题 * @return 结果 */ - public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) throws IOException + public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) { response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); this.init(null, sheetName, title, Type.IMPORT); - exportExcel(response.getOutputStream()); + exportExcel(response); } /** @@ -509,12 +509,12 @@ public class ExcelUtil * * @return 结果 */ - public void exportExcel(OutputStream out) + public void exportExcel(HttpServletResponse response) { try { writeSheet(); - wb.write(out); + wb.write(response.getOutputStream()); } catch (Exception e) { @@ -523,7 +523,6 @@ public class ExcelUtil finally { IOUtils.closeQuietly(wb); - IOUtils.closeQuietly(out); } } diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm index 56ff5e66a..ab19cf51f 100644 --- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -1,6 +1,7 @@ package ${packageName}.controller; import java.util.List; +import javax.servlet.http.HttpServletResponse; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -61,12 +62,12 @@ public class ${ClassName}Controller extends BaseController */ @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") @Log(title = "${functionName}", businessType = BusinessType.EXPORT) - @GetMapping("/export") - public AjaxResult export(${ClassName} ${className}) + @PostMapping("/export") + public void export(HttpServletResponse response, ${ClassName} ${className}) { List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); - return util.exportExcel(list, "${functionName}数据"); + util.exportExcel(response, list, "${functionName}数据"); } /** diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm index 867225aba..729a9dafe 100644 --- a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -108,7 +108,6 @@ plain icon="el-icon-download" size="mini" - :loading="exportLoading" @click="handleExport" v-hasPermi="['${moduleName}:${businessName}:export']" >导出 @@ -313,7 +312,7 @@ diff --git a/ruoyi-ui/src/views/monitor/job/log.vue b/ruoyi-ui/src/views/monitor/job/log.vue deleted file mode 100644 index 35b778829..000000000 --- a/ruoyi-ui/src/views/monitor/job/log.vue +++ /dev/null @@ -1,299 +0,0 @@ - - - From 40c9559d9ef591264179069027221bf33daed2f3 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, 17 Nov 2021 20:11:56 +0800 Subject: [PATCH 051/111] update springboot-admin 2.5.3 => 2.5.4 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cb876d0ab..8d8df6b85 100644 --- a/pom.xml +++ b/pom.xml @@ -30,7 +30,7 @@ 3.9.1 5.7.16 4.9.2 - 2.5.3 + 2.5.4 3.16.4 2.2.1 3.4.1 From f8487f581be226c3def30676055e0e32a5ac341a 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, 18 Nov 2021 17:01:23 +0800 Subject: [PATCH 052/111] =?UTF-8?q?update=20=E8=A1=A5=E5=85=A8=E6=89=80?= =?UTF-8?q?=E6=9C=89=E6=8E=A5=E5=8F=A3=20=E5=8D=95=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/SysConfigController.java | 7 +- .../controller/system/SysDeptController.java | 9 +- .../system/SysDictDataController.java | 7 +- .../system/SysDictTypeController.java | 5 +- .../controller/system/SysMenuController.java | 7 +- .../system/SysNoticeController.java | 5 +- .../system/SysOssConfigController.java | 7 +- .../controller/system/SysOssController.java | 14 +- .../controller/system/SysPostController.java | 5 +- .../system/SysProfileController.java | 6 +- .../controller/system/SysRoleController.java | 15 +- .../controller/system/SysUserController.java | 15 +- .../demo/controller/RedisCacheController.java | 134 +++++++++--------- .../demo/controller/RedisLockController.java | 104 +++++++------- .../controller/RedisPubSubController.java | 33 ++--- .../RedisRateLimiterController.java | 60 ++++---- .../controller/Swagger3DemoController.java | 26 ++-- .../demo/controller/TestBatchController.java | 54 +++---- .../demo/controller/TestDemoController.java | 37 ++--- .../demo/controller/TestI18nController.java | 3 +- .../demo/controller/TestTreeController.java | 15 +- .../main/resources/vm/java/controller.java.vm | 7 +- 22 files changed, 303 insertions(+), 272 deletions(-) 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 c8f9f4596..e2b397d0e 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 @@ -11,6 +11,7 @@ import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.service.ISysConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -59,7 +60,7 @@ public class SysConfigController extends BaseController { @ApiOperation("根据参数编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:config:query')") @GetMapping(value = "/{configId}") - public AjaxResult getInfo(@PathVariable Long configId) { + public AjaxResult getInfo(@ApiParam("参数ID") @PathVariable Long configId) { return AjaxResult.success(configService.selectConfigById(configId)); } @@ -68,7 +69,7 @@ public class SysConfigController extends BaseController { */ @ApiOperation("根据参数键名查询参数值") @GetMapping(value = "/configKey/{configKey}") - public AjaxResult getConfigKey(@PathVariable String configKey) { + public AjaxResult getConfigKey(@ApiParam("参数Key") @PathVariable String configKey) { return AjaxResult.success(configService.selectConfigByKey(configKey)); } @@ -107,7 +108,7 @@ public class SysConfigController extends BaseController { @PreAuthorize("@ss.hasPermi('system:config:remove')") @Log(title = "参数管理", businessType = BusinessType.DELETE) @DeleteMapping("/{configIds}") - public AjaxResult remove(@PathVariable Long[] configIds) { + public AjaxResult remove(@ApiParam("参数ID串") @PathVariable Long[] configIds) { configService.deleteConfigByIds(configIds); return 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 8a467060d..e47b1e885 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 @@ -12,6 +12,7 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysDeptService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -53,7 +54,7 @@ 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(@ApiParam("部门ID") @PathVariable(value = "deptId", required = false) Long deptId) { List depts = deptService.selectDeptList(new SysDept()); depts.removeIf(d -> d.getDeptId().equals(deptId) || ArrayUtil.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); @@ -66,7 +67,7 @@ public class SysDeptController extends BaseController { @ApiOperation("根据部门编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:dept:query')") @GetMapping(value = "/{deptId}") - public AjaxResult getInfo(@PathVariable Long deptId) { + public AjaxResult getInfo(@ApiParam("部门ID") @PathVariable Long deptId) { deptService.checkDeptDataScope(deptId); return AjaxResult.success(deptService.selectDeptById(deptId)); } @@ -86,7 +87,7 @@ public class SysDeptController extends BaseController { */ @ApiOperation("加载对应角色部门列表树") @GetMapping(value = "/roleDeptTreeselect/{roleId}") - public AjaxResult> roleDeptTreeselect(@PathVariable("roleId") Long roleId) { + public AjaxResult> roleDeptTreeselect(@ApiParam("角色ID") @PathVariable("roleId") Long roleId) { List depts = deptService.selectDeptList(new SysDept()); Map ajax = new HashMap<>(); ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); @@ -134,7 +135,7 @@ public class SysDeptController extends BaseController { @PreAuthorize("@ss.hasPermi('system:dept:remove')") @Log(title = "部门管理", businessType = BusinessType.DELETE) @DeleteMapping("/{deptId}") - public AjaxResult remove(@PathVariable Long deptId) { + public AjaxResult remove(@ApiParam("部门ID串") @PathVariable Long deptId) { if (deptService.hasChildByDeptId(deptId)) { return AjaxResult.error("存在下级部门,不允许删除"); } 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 82b05cf3f..0a54db315 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 @@ -12,6 +12,7 @@ import com.ruoyi.system.service.ISysDictDataService; import com.ruoyi.system.service.ISysDictTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -59,7 +60,7 @@ public class SysDictDataController extends BaseController { @ApiOperation("查询字典数据详细") @PreAuthorize("@ss.hasPermi('system:dict:query')") @GetMapping(value = "/{dictCode}") - public AjaxResult getInfo(@PathVariable Long dictCode) { + public AjaxResult getInfo(@ApiParam("字典code") @PathVariable Long dictCode) { return AjaxResult.success(dictDataService.selectDictDataById(dictCode)); } @@ -68,7 +69,7 @@ public class SysDictDataController extends BaseController { */ @ApiOperation("根据字典类型查询字典数据信息") @GetMapping(value = "/type/{dictType}") - public AjaxResult> dictType(@PathVariable String dictType) { + public AjaxResult> dictType(@ApiParam("字典类型") @PathVariable String dictType) { List data = dictTypeService.selectDictDataByType(dictType); if (StringUtils.isNull(data)) { data = new ArrayList<>(); @@ -105,7 +106,7 @@ public class SysDictDataController extends BaseController { @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.DELETE) @DeleteMapping("/{dictCodes}") - public AjaxResult remove(@PathVariable Long[] dictCodes) { + public AjaxResult remove(@ApiParam("字典code串") @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 eb3ae00b6..37e9d8c63 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 @@ -11,6 +11,7 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.service.ISysDictTypeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -56,7 +57,7 @@ public class SysDictTypeController extends BaseController { @ApiOperation("查询字典类型详细") @PreAuthorize("@ss.hasPermi('system:dict:query')") @GetMapping(value = "/{dictId}") - public AjaxResult getInfo(@PathVariable Long dictId) { + public AjaxResult getInfo(@ApiParam("字典ID") @PathVariable Long dictId) { return AjaxResult.success(dictTypeService.selectDictTypeById(dictId)); } @@ -95,7 +96,7 @@ public class SysDictTypeController extends BaseController { @PreAuthorize("@ss.hasPermi('system:dict:remove')") @Log(title = "字典类型", businessType = BusinessType.DELETE) @DeleteMapping("/{dictIds}") - public AjaxResult remove(@PathVariable Long[] dictIds) { + public AjaxResult remove(@ApiParam("字典ID串") @PathVariable Long[] dictIds) { dictTypeService.deleteDictTypeByIds(dictIds); return success(); } 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 11371f843..a525ac422 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 @@ -11,6 +11,7 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysMenuService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -52,7 +53,7 @@ public class SysMenuController extends BaseController { @ApiOperation("根据菜单编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:menu:query')") @GetMapping(value = "/{menuId}") - public AjaxResult getInfo(@PathVariable Long menuId) { + public AjaxResult getInfo(@ApiParam("菜单ID") @PathVariable Long menuId) { return AjaxResult.success(menuService.selectMenuById(menuId)); } @@ -71,7 +72,7 @@ public class SysMenuController extends BaseController { */ @ApiOperation("加载对应角色菜单列表树") @GetMapping(value = "/roleMenuTreeselect/{roleId}") - public AjaxResult> roleMenuTreeselect(@PathVariable("roleId") Long roleId) { + public AjaxResult> roleMenuTreeselect(@ApiParam("角色ID") @PathVariable("roleId") Long roleId) { List menus = menuService.selectMenuList(getUserId()); Map ajax = new HashMap<>(); ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); @@ -120,7 +121,7 @@ public class SysMenuController extends BaseController { @PreAuthorize("@ss.hasPermi('system:menu:remove')") @Log(title = "菜单管理", businessType = BusinessType.DELETE) @DeleteMapping("/{menuId}") - public AjaxResult remove(@PathVariable("menuId") Long menuId) { + public AjaxResult remove(@ApiParam("菜单ID") @PathVariable("menuId") Long menuId) { if (menuService.hasChildByMenuId(menuId)) { return AjaxResult.error("存在子菜单,不允许删除"); } 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 6841bef4c..bafb720b5 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 @@ -9,6 +9,7 @@ import com.ruoyi.system.domain.SysNotice; import com.ruoyi.system.service.ISysNoticeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -45,7 +46,7 @@ public class SysNoticeController extends BaseController { @ApiOperation("根据通知公告编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:notice:query')") @GetMapping(value = "/{noticeId}") - public AjaxResult getInfo(@PathVariable Long noticeId) { + public AjaxResult getInfo(@ApiParam("公告ID") @PathVariable Long noticeId) { return AjaxResult.success(noticeService.selectNoticeById(noticeId)); } @@ -78,7 +79,7 @@ public class SysNoticeController extends BaseController { @PreAuthorize("@ss.hasPermi('system:notice:remove')") @Log(title = "通知公告", businessType = BusinessType.DELETE) @DeleteMapping("/{noticeIds}") - public AjaxResult remove(@PathVariable Long[] noticeIds) { + public AjaxResult remove(@ApiParam("公告ID串") @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 1756ce7a8..db6ce7e33 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 @@ -14,6 +14,7 @@ import com.ruoyi.system.domain.vo.SysOssConfigVo; import com.ruoyi.system.service.ISysOssConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -56,7 +57,8 @@ public class SysOssConfigController extends BaseController { @ApiOperation("获取对象存储配置详细信息") @PreAuthorize("@ss.hasPermi('system:oss:query')") @GetMapping("/{ossConfigId}") - public AjaxResult getInfo(@NotNull(message = "主键不能为空") + public AjaxResult getInfo(@ApiParam("OSS配置ID") + @NotNull(message = "主键不能为空") @PathVariable("ossConfigId") Integer ossConfigId) { return AjaxResult.success(iSysOssConfigService.queryById(ossConfigId)); } @@ -92,7 +94,8 @@ public class SysOssConfigController extends BaseController { @PreAuthorize("@ss.hasPermi('system:oss:remove')") @Log(title = "对象存储配置", businessType = BusinessType.DELETE) @DeleteMapping("/{ossConfigIds}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") + public AjaxResult remove(@ApiParam("OSS配置ID串") + @NotEmpty(message = "主键不能为空") @PathVariable Long[] ossConfigIds) { return toAjax(iSysOssConfigService.deleteWithValidByIds(Arrays.asList(ossConfigIds), true) ? 1 : 0); } 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 62f3c44c0..bf5ae8bf6 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 @@ -23,10 +23,7 @@ import com.ruoyi.system.domain.bo.SysOssBo; import com.ruoyi.system.domain.vo.SysOssVo; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.system.service.ISysOssService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; @@ -72,7 +69,7 @@ public class SysOssController extends BaseController { */ @ApiOperation("上传OSS对象存储") @ApiImplicitParams({ - @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), + @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), }) @PreAuthorize("@ss.hasPermi('system:oss:upload')") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) @@ -92,7 +89,7 @@ public class SysOssController extends BaseController { @ApiOperation("下载OSS对象存储") @PreAuthorize("@ss.hasPermi('system:oss:download')") @GetMapping("/download/{ossId}") - public void download(@PathVariable Long ossId, HttpServletResponse response) throws IOException { + public void download(@ApiParam("OSS对象ID") @PathVariable Long ossId, HttpServletResponse response) throws IOException { SysOss sysOss = iSysOssService.getById(ossId); if (ObjectUtil.isNull(sysOss)) { throw new ServiceException("文件数据不存在!"); @@ -120,7 +117,8 @@ public class SysOssController extends BaseController { @PreAuthorize("@ss.hasPermi('system:oss:remove')") @Log(title = "OSS对象存储", businessType = BusinessType.DELETE) @DeleteMapping("/{ossIds}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") + public AjaxResult remove(@ApiParam("OSS对象ID串") + @NotEmpty(message = "主键不能为空") @PathVariable Long[] ossIds) { return toAjax(iSysOssService.deleteWithValidByIds(Arrays.asList(ossIds), true) ? 1 : 0); } @@ -135,7 +133,7 @@ public class SysOssController extends BaseController { 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)); + .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 0ccb313b6..d115619fa 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 @@ -11,6 +11,7 @@ import com.ruoyi.system.domain.SysPost; import com.ruoyi.system.service.ISysPostService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -59,7 +60,7 @@ public class SysPostController extends BaseController { @ApiOperation("根据岗位编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:post:query')") @GetMapping(value = "/{postId}") - public AjaxResult getInfo(@PathVariable Long postId) { + public AjaxResult getInfo(@ApiParam("岗位ID") @PathVariable Long postId) { return AjaxResult.success(postService.selectPostById(postId)); } @@ -102,7 +103,7 @@ public class SysPostController extends BaseController { @PreAuthorize("@ss.hasPermi('system:post:remove')") @Log(title = "岗位管理", businessType = BusinessType.DELETE) @DeleteMapping("/{postIds}") - public AjaxResult remove(@PathVariable Long[] postIds) { + public AjaxResult remove(@ApiParam("岗位ID串") @PathVariable Long[] postIds) { return toAjax(postService.deletePostByIds(postIds)); } 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 d037e7951..b4534ad7f 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 @@ -89,6 +89,10 @@ public class SysProfileController extends BaseController { * 重置密码 */ @ApiOperation("重置密码") + @ApiImplicitParams({ + @ApiImplicitParam(name = "oldPassword", value = "旧密码", paramType = "query"), + @ApiImplicitParam(name = "newPassword", value = "新密码", paramType = "query") + }) @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping("/updatePwd") public AjaxResult updatePwd(String oldPassword, String newPassword) { @@ -115,7 +119,7 @@ public class SysProfileController extends BaseController { */ @ApiOperation("头像上传") @ApiImplicitParams({ - @ApiImplicitParam(name = "file", value = "用户头像", dataType = "java.io.File", required = true), + @ApiImplicitParam(name = "avatarfile", value = "用户头像", dataType = "java.io.File", required = true), }) @Log(title = "用户头像", businessType = BusinessType.UPDATE) @PostMapping("/avatar") 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 c1b9baa3c..2dd31047f 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 @@ -16,8 +16,7 @@ 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 io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -66,7 +65,7 @@ public class SysRoleController extends BaseController { @ApiOperation("根据角色编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:role:query')") @GetMapping(value = "/{roleId}") - public AjaxResult getInfo(@PathVariable Long roleId) { + public AjaxResult getInfo(@ApiParam("角色ID") @PathVariable Long roleId) { roleService.checkRoleDataScope(roleId); return AjaxResult.success(roleService.selectRoleById(roleId)); } @@ -147,7 +146,7 @@ public class SysRoleController extends BaseController { @PreAuthorize("@ss.hasPermi('system:role:remove')") @Log(title = "角色管理", businessType = BusinessType.DELETE) @DeleteMapping("/{roleIds}") - public AjaxResult remove(@PathVariable Long[] roleIds) { + public AjaxResult remove(@ApiParam("岗位ID串") @PathVariable Long[] roleIds) { return toAjax(roleService.deleteRoleByIds(roleIds)); } @@ -196,6 +195,10 @@ public class SysRoleController extends BaseController { * 批量取消授权用户 */ @ApiOperation("批量取消授权用户") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query"), + @ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query") + }) @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) @PutMapping("/authUser/cancelAll") @@ -207,6 +210,10 @@ public class SysRoleController extends BaseController { * 批量选择用户授权 */ @ApiOperation("批量选择用户授权") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query"), + @ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query") + }) @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) @PutMapping("/authUser/selectAll") 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 b86922130..a57fb15db 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,10 +20,7 @@ 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 io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -109,7 +106,7 @@ public class SysUserController extends BaseController { @ApiOperation("根据用户编号获取详细信息") @PreAuthorize("@ss.hasPermi('system:user:query')") @GetMapping(value = {"/", "/{userId}"}) - public AjaxResult> getInfo(@PathVariable(value = "userId", required = false) Long userId) { + public AjaxResult> getInfo(@ApiParam("用户ID") @PathVariable(value = "userId", required = false) Long userId) { userService.checkUserDataScope(userId); Map ajax = new HashMap<>(); List roles = roleService.selectRoleAll(); @@ -170,7 +167,7 @@ public class SysUserController extends BaseController { @PreAuthorize("@ss.hasPermi('system:user:remove')") @Log(title = "用户管理", businessType = BusinessType.DELETE) @DeleteMapping("/{userIds}") - public AjaxResult remove(@PathVariable Long[] userIds) { + public AjaxResult remove(@ApiParam("角色ID串") @PathVariable Long[] userIds) { if (ArrayUtil.contains(userIds, getUserId())) { return error("当前用户不能删除"); } @@ -208,7 +205,7 @@ 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(@ApiParam("用户ID") @PathVariable("userId") Long userId) { SysUser user = userService.selectUserById(userId); List roles = roleService.selectRolesByUserId(userId); Map ajax = new HashMap<>(); @@ -221,6 +218,10 @@ public class SysUserController extends BaseController { * 用户授权角色 */ @ApiOperation("用户授权角色") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "用户Id", paramType = "query"), + @ApiImplicitParam(name = "roleIds", value = "角色ID串", paramType = "query") + }) @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.GRANT) @PutMapping("/authRole") 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 903b982b1..e01b542e0 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 @@ -28,75 +28,75 @@ import java.util.concurrent.TimeUnit; @RequestMapping("/demo/cache") public class RedisCacheController { - /** - * 测试 @Cacheable - * - * 表示这个方法有了缓存的功能,方法的返回值会被缓存下来 - * 下一次调用该方法前,会去检查是否缓存中已经有值 - * 如果有就直接返回,不调用方法 - * 如果没有,就调用方法,然后把结果缓存起来 - * 这个注解「一般用在查询方法上」 - * - * 重点说明: 缓存注解严谨与其他筛选数据功能一起使用 - * 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题 - * - * cacheNames 为配置文件内 groupId - */ - @ApiOperation("测试 @Cacheable") - @Cacheable(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null") - @GetMapping("/test1") - public AjaxResult test1(String key, String value){ - return AjaxResult.success("操作成功", value); - } + /** + * 测试 @Cacheable + *

+ * 表示这个方法有了缓存的功能,方法的返回值会被缓存下来 + * 下一次调用该方法前,会去检查是否缓存中已经有值 + * 如果有就直接返回,不调用方法 + * 如果没有,就调用方法,然后把结果缓存起来 + * 这个注解「一般用在查询方法上」 + *

+ * 重点说明: 缓存注解严谨与其他筛选数据功能一起使用 + * 例如: 数据权限注解 会造成 缓存击穿 与 数据不一致问题 + *

+ * cacheNames 为配置文件内 groupId + */ + @ApiOperation("测试 @Cacheable") + @Cacheable(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null") + @GetMapping("/test1") + public AjaxResult test1(String key, String value) { + return AjaxResult.success("操作成功", value); + } - /** - * 测试 @CachePut - * - * 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用 - * 它「通常用在新增方法上」 - * - * cacheNames 为 配置文件内 groupId - */ - @ApiOperation("测试 @CachePut") - @CachePut(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null") - @GetMapping("/test2") - public AjaxResult test2(String key, String value){ - return AjaxResult.success("操作成功", value); - } + /** + * 测试 @CachePut + *

+ * 加了@CachePut注解的方法,会把方法的返回值put到缓存里面缓存起来,供其它地方使用 + * 它「通常用在新增方法上」 + *

+ * cacheNames 为 配置文件内 groupId + */ + @ApiOperation("测试 @CachePut") + @CachePut(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null") + @GetMapping("/test2") + public AjaxResult test2(String key, String value) { + return AjaxResult.success("操作成功", value); + } - /** - * 测试 @CacheEvict - * - * 使用了CacheEvict注解的方法,会清空指定缓存 - * 「一般用在更新或者删除的方法上」 - * - * cacheNames 为 配置文件内 groupId - */ - @ApiOperation("测试 @CacheEvict") - @CacheEvict(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null") - @GetMapping("/test3") - public AjaxResult test3(String key, String value){ - return AjaxResult.success("操作成功", value); - } + /** + * 测试 @CacheEvict + *

+ * 使用了CacheEvict注解的方法,会清空指定缓存 + * 「一般用在更新或者删除的方法上」 + *

+ * cacheNames 为 配置文件内 groupId + */ + @ApiOperation("测试 @CacheEvict") + @CacheEvict(cacheNames = "redissonCacheMap", key = "#key", condition = "#key != null") + @GetMapping("/test3") + public AjaxResult test3(String key, String value) { + 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)); - } + /** + * 测试设置过期时间 + * 手动设置过期时间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)); + } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java index a72024663..b2d66f5bb 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisLockController.java @@ -28,59 +28,59 @@ import java.time.LocalTime; @RequestMapping("/demo/redisLock") public class RedisLockController { - @Autowired - private LockTemplate lockTemplate; + @Autowired + private LockTemplate lockTemplate; - /** - * 测试lock4j 注解 - */ - @ApiOperation("测试lock4j 注解") - @Lock4j(keys = {"#key"}) - @GetMapping("/testLock4j") - public AjaxResult testLock4j(String key,String value){ - System.out.println("start:"+key+",time:"+ LocalTime.now().toString()); - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("end :"+key+",time:"+LocalTime.now().toString()); - return AjaxResult.success("操作成功",value); - } + /** + * 测试lock4j 注解 + */ + @ApiOperation("测试lock4j 注解") + @Lock4j(keys = {"#key"}) + @GetMapping("/testLock4j") + public AjaxResult testLock4j(String key, String value) { + System.out.println("start:" + key + ",time:" + LocalTime.now().toString()); + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + System.out.println("end :" + key + ",time:" + LocalTime.now().toString()); + return AjaxResult.success("操作成功", value); + } - /** - * 测试lock4j 工具 - */ - @ApiOperation("测试lock4j 工具") - @GetMapping("/testLock4jLockTemaplate") - public AjaxResult testLock4jLockTemaplate(String key,String value){ - final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class); - if (null == lockInfo) { - throw new RuntimeException("业务处理中,请稍后再试"); - } - // 获取锁成功,处理业务 - try { - try { - Thread.sleep(8000); - } catch (InterruptedException e) { - // - } - System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName()); - } finally { - //释放锁 - lockTemplate.releaseLock(lockInfo); - } - //结束 - return AjaxResult.success("操作成功",value); - } + /** + * 测试lock4j 工具 + */ + @ApiOperation("测试lock4j 工具") + @GetMapping("/testLock4jLockTemaplate") + public AjaxResult testLock4jLockTemaplate(String key, String value) { + final LockInfo lockInfo = lockTemplate.lock(key, 30000L, 5000L, RedissonLockExecutor.class); + if (null == lockInfo) { + throw new RuntimeException("业务处理中,请稍后再试"); + } + // 获取锁成功,处理业务 + try { + try { + Thread.sleep(8000); + } catch (InterruptedException e) { + // + } + System.out.println("执行简单方法1 , 当前线程:" + Thread.currentThread().getName()); + } finally { + //释放锁 + lockTemplate.releaseLock(lockInfo); + } + //结束 + return AjaxResult.success("操作成功", value); + } - /** - * 测试spring-cache注解 - */ - @ApiOperation("测试spring-cache注解") - @Cacheable(value = "test", key = "#key") - @GetMapping("/testCache") - public AjaxResult testCache(String key) { - return AjaxResult.success("操作成功", key); - } + /** + * 测试spring-cache注解 + */ + @ApiOperation("测试spring-cache注解") + @Cacheable(value = "test", key = "#key") + @GetMapping("/testCache") + public AjaxResult testCache(String key) { + return AjaxResult.success("操作成功", key); + } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java index 810b307dc..619a69028 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisPubSubController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.RedisUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -21,22 +22,22 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/demo/redis/pubsub") public class RedisPubSubController { - @ApiOperation("发布消息") - @GetMapping("/pub") - public AjaxResult pub(String key, String value){ - RedisUtils.publish(key, value, consumer -> { - System.out.println("发布通道 => " + key + ", 发送值 => " + value); - }); - return AjaxResult.success("操作成功"); - } + @ApiOperation("发布消息") + @GetMapping("/pub") + public AjaxResult pub(@ApiParam("通道Key") String key, @ApiParam("发送内容") String value) { + RedisUtils.publish(key, value, consumer -> { + System.out.println("发布通道 => " + key + ", 发送值 => " + value); + }); + return AjaxResult.success("操作成功"); + } - @ApiOperation("订阅消息") - @GetMapping("/sub") - public AjaxResult sub(String key){ - RedisUtils.subscribe(key, String.class, msg -> { - System.out.println("订阅通道 => " + key + ", 接收值 => " + msg); - }); - return AjaxResult.success("操作成功"); - } + @ApiOperation("订阅消息") + @GetMapping("/sub") + public AjaxResult sub(@ApiParam("通道Key") String key) { + RedisUtils.subscribe(key, String.class, msg -> { + System.out.println("订阅通道 => " + key + ", 接收值 => " + msg); + }); + return AjaxResult.success("操作成功"); + } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java index 33d75093b..1eeab6114 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/RedisRateLimiterController.java @@ -22,37 +22,37 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/demo/rateLimiter") public class RedisRateLimiterController { - /** - * 测试全局限流 - * 全局影响 - */ - @ApiOperation("测试全局限流") - @RateLimiter(count = 2, time = 10) - @GetMapping("/test") - public AjaxResult test(String value){ - return AjaxResult.success("操作成功",value); - } + /** + * 测试全局限流 + * 全局影响 + */ + @ApiOperation("测试全局限流") + @RateLimiter(count = 2, time = 10) + @GetMapping("/test") + public AjaxResult test(String value) { + return AjaxResult.success("操作成功", value); + } - /** - * 测试请求IP限流 - * 同一IP请求受影响 - */ - @ApiOperation("测试请求IP限流") - @RateLimiter(count = 2, time = 10, limitType = LimitType.IP) - @GetMapping("/testip") - public AjaxResult testip(String value){ - return AjaxResult.success("操作成功",value); - } + /** + * 测试请求IP限流 + * 同一IP请求受影响 + */ + @ApiOperation("测试请求IP限流") + @RateLimiter(count = 2, time = 10, limitType = LimitType.IP) + @GetMapping("/testip") + public AjaxResult testip(String value) { + return AjaxResult.success("操作成功", value); + } - /** - * 测试集群实例限流 - * 启动两个后端服务互不影响 - */ - @ApiOperation("测试集群实例限流") - @RateLimiter(count = 2, time = 10, limitType = LimitType.CLUSTER) - @GetMapping("/testcluster") - public AjaxResult testcluster(String value){ - return AjaxResult.success("操作成功",value); - } + /** + * 测试集群实例限流 + * 启动两个后端服务互不影响 + */ + @ApiOperation("测试集群实例限流") + @RateLimiter(count = 2, time = 10, limitType = LimitType.CLUSTER) + @GetMapping("/testcluster") + public AjaxResult testcluster(String value) { + return AjaxResult.success("操作成功", value); + } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java index a8efb64e4..6b73d64a8 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/Swagger3DemoController.java @@ -21,18 +21,18 @@ import org.springframework.web.multipart.MultipartFile; @RequestMapping("/swagger/demo") public class Swagger3DemoController { - /** - * 上传请求 - * 必须使用 @RequestPart 注解标注为文件 - * dataType 必须为 "java.io.File" - */ - @ApiOperation(value = "通用上传请求") - @ApiImplicitParams({ - @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), - }) - @PostMapping(value = "/upload") - public AjaxResult upload(@RequestPart("file") MultipartFile file) { - return AjaxResult.success("操作成功", file.getOriginalFilename()); - } + /** + * 上传请求 + * 必须使用 @RequestPart 注解标注为文件 + * dataType 必须为 "java.io.File" + */ + @ApiOperation(value = "通用上传请求") + @ApiImplicitParams({ + @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), + }) + @PostMapping(value = "/upload") + public AjaxResult upload(@RequestPart("file") MultipartFile file) { + return AjaxResult.success("操作成功", file.getOriginalFilename()); + } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java index ef117a11c..d6e691dbb 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestBatchController.java @@ -34,48 +34,48 @@ public class TestBatchController extends BaseController { /** * 新增批量方法 可完美替代 saveBatch 秒级插入上万数据 (对mysql负荷较大) */ - @ApiOperation(value = "新增批量方法") + @ApiOperation(value = "新增批量方法") @PostMapping("/add") // @DataSource(DataSourceType.SLAVE) public AjaxResult add() { - List list = new ArrayList<>(); - for (int i = 0; i < 1000; i++) { - list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增")); - } + List list = new ArrayList<>(); + for (int i = 0; i < 1000; i++) { + list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增")); + } return toAjax(iTestDemoService.saveAll(list) ? 1 : 0); } - /** - * 新增或更新 可完美替代 saveOrUpdateBatch 高性能 - */ - @ApiOperation(value = "新增或更新批量方法") - @PostMapping("/addOrUpdate") + /** + * 新增或更新 可完美替代 saveOrUpdateBatch 高性能 + */ + @ApiOperation(value = "新增或更新批量方法") + @PostMapping("/addOrUpdate") // @DataSource(DataSourceType.SLAVE) - public AjaxResult addOrUpdate() { - List list = new ArrayList<>(); - for (int i = 0; i < 1000; i++) { - list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增")); - } - iTestDemoService.saveAll(list); - for (int i = 0; i < list.size(); i++) { - TestDemo testDemo = list.get(i); - testDemo.setTestKey("批量新增或修改").setValue("批量新增或修改"); - if (i % 2 == 0) { - testDemo.setId(null); - } - } - return toAjax(iTestDemoService.saveOrUpdateAll(list) ? 1 : 0); - } + public AjaxResult addOrUpdate() { + List list = new ArrayList<>(); + for (int i = 0; i < 1000; i++) { + list.add(new TestDemo().setOrderNum(-1L).setTestKey("批量新增").setValue("测试新增")); + } + iTestDemoService.saveAll(list); + for (int i = 0; i < list.size(); i++) { + TestDemo testDemo = list.get(i); + testDemo.setTestKey("批量新增或修改").setValue("批量新增或修改"); + if (i % 2 == 0) { + testDemo.setId(null); + } + } + return toAjax(iTestDemoService.saveOrUpdateAll(list) ? 1 : 0); + } /** * 删除批量方法 */ - @ApiOperation(value = "删除批量方法") + @ApiOperation(value = "删除批量方法") @DeleteMapping() // @DataSource(DataSourceType.SLAVE) public AjaxResult remove() { return toAjax(iTestDemoService.remove(new LambdaQueryWrapper() - .eq(TestDemo::getOrderNum, -1L)) ? 1 : 0); + .eq(TestDemo::getOrderNum, -1L)) ? 1 : 0); } } 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 692b56798..7b7036030 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 @@ -16,6 +16,7 @@ import com.ruoyi.demo.domain.vo.TestDemoVo; import com.ruoyi.demo.service.ITestDemoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -54,17 +55,17 @@ public class TestDemoController extends BaseController { return iTestDemoService.queryPageList(bo); } - /** - * 自定义分页查询 - */ - @ApiOperation("自定义分页查询") - @PreAuthorize("@ss.hasPermi('demo:demo:list')") - @GetMapping("/page") - public TableDataInfo page(@Validated(QueryGroup.class) TestDemoBo bo) { - return iTestDemoService.customPageList(bo); - } + /** + * 自定义分页查询 + */ + @ApiOperation("自定义分页查询") + @PreAuthorize("@ss.hasPermi('demo:demo:list')") + @GetMapping("/page") + public TableDataInfo page(@Validated(QueryGroup.class) TestDemoBo bo) { + return iTestDemoService.customPageList(bo); + } - /** + /** * 导出测试单表列表 */ @ApiOperation("导出测试单表列表") @@ -73,11 +74,11 @@ public class TestDemoController extends BaseController { @PostMapping("/export") public void export(@Validated TestDemoBo bo, HttpServletResponse response) { List list = iTestDemoService.queryList(bo); - // 测试雪花id导出 + // 测试雪花id导出 // for (TestDemoVo vo : list) { // vo.setId(1234567891234567893L); // } - ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response); + ExcelUtil.exportExcel(list, "测试单表", TestDemoVo.class, response); } /** @@ -86,8 +87,9 @@ public class TestDemoController extends BaseController { @ApiOperation("获取测试单表详细信息") @PreAuthorize("@ss.hasPermi('demo:demo:query')") @GetMapping("/{id}") - public AjaxResult getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { + public AjaxResult getInfo(@ApiParam("测试ID") + @NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { return AjaxResult.success(iTestDemoService.queryById(id)); } @@ -123,10 +125,11 @@ public class TestDemoController extends BaseController { */ @ApiOperation("删除测试单表") @PreAuthorize("@ss.hasPermi('demo:demo:remove')") - @Log(title = "测试单表" , businessType = BusinessType.DELETE) + @Log(title = "测试单表", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { + public AjaxResult remove(@ApiParam("测试ID串") + @NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { return toAjax(iTestDemoService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java index bb0695f78..c2ab0310b 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestI18nController.java @@ -4,6 +4,7 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.utils.MessageUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -27,7 +28,7 @@ public class TestI18nController { */ @ApiOperation("通过code获取国际化内容") @GetMapping() - public AjaxResult get(String code) { + public AjaxResult get(@ApiParam("国际化code") String code) { return AjaxResult.success(MessageUtils.message(code)); } } diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java index c34c77c4b..463ea3bf6 100644 --- a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java +++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestTreeController.java @@ -14,6 +14,7 @@ import com.ruoyi.demo.domain.vo.TestTreeVo; import com.ruoyi.demo.service.ITestTreeService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -61,7 +62,7 @@ public class TestTreeController extends BaseController { @GetMapping("/export") public void export(@Validated TestTreeBo bo, HttpServletResponse response) { List list = iTestTreeService.queryList(bo); - ExcelUtil.exportExcel(list, "测试树表", TestTreeVo.class, response); + ExcelUtil.exportExcel(list, "测试树表", TestTreeVo.class, response); } /** @@ -70,8 +71,9 @@ public class TestTreeController extends BaseController { @ApiOperation("获取测试树表详细信息") @PreAuthorize("@ss.hasPermi('demo:tree:query')") @GetMapping("/{id}") - public AjaxResult getInfo(@NotNull(message = "主键不能为空") - @PathVariable("id") Long id) { + public AjaxResult getInfo(@ApiParam("测试树ID") + @NotNull(message = "主键不能为空") + @PathVariable("id") Long id) { return AjaxResult.success(iTestTreeService.queryById(id)); } @@ -104,10 +106,11 @@ public class TestTreeController extends BaseController { */ @ApiOperation("删除测试树表") @PreAuthorize("@ss.hasPermi('demo:tree:remove')") - @Log(title = "测试树表" , businessType = BusinessType.DELETE) + @Log(title = "测试树表", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { + public AjaxResult remove(@ApiParam("测试树ID串") + @NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { return toAjax(iTestTreeService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0); } } diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm index 2c8caa41b..ae6f81876 100644 --- a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -28,6 +28,7 @@ import com.ruoyi.common.core.page.TableDataInfo; #elseif($table.tree) #end import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; import io.swagger.annotations.ApiOperation; /** @@ -80,7 +81,8 @@ public class ${ClassName}Controller extends BaseController { @ApiOperation("获取${functionName}详细信息") @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") @GetMapping("/{${pkColumn.javaField}}") - public AjaxResult<${ClassName}Vo> getInfo(@NotNull(message = "主键不能为空") + public AjaxResult<${ClassName}Vo> getInfo(@ApiParam("主键") + @NotNull(message = "主键不能为空") @PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) { return AjaxResult.success(i${ClassName}Service.queryById(${pkColumn.javaField})); } @@ -116,7 +118,8 @@ public class ${ClassName}Controller extends BaseController { @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") @Log(title = "${functionName}" , businessType = BusinessType.DELETE) @DeleteMapping("/{${pkColumn.javaField}s}") - public AjaxResult remove(@NotEmpty(message = "主键不能为空") + public AjaxResult remove(@ApiParam("主键串") + @NotEmpty(message = "主键不能为空") @PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) { return toAjax(i${ClassName}Service.deleteWithValidByIds(Arrays.asList(${pkColumn.javaField}s), true) ? 1 : 0); } From fcf606acde83e67d050bc0758cce5960892f3904 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Thu, 18 Nov 2021 17:50:49 +0800 Subject: [PATCH 053/111] =?UTF-8?q?=E5=8D=87=E7=BA=A7jsencrypt=E5=88=B0?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E7=89=88=E6=9C=AC3.2.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-ui/package.json | 2 +- ruoyi-ui/src/utils/request.js | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json index 45f5508e6..a52059488 100644 --- a/ruoyi-ui/package.json +++ b/ruoyi-ui/package.json @@ -47,7 +47,7 @@ "highlight.js": "9.18.5", "js-beautify": "1.13.0", "js-cookie": "2.2.1", - "jsencrypt": "3.0.0-rc.1", + "jsencrypt": "3.2.1", "nprogress": "0.2.0", "quill": "1.3.7", "screenfull": "5.0.2", diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js index 78a20a2f1..1acd94168 100644 --- a/ruoyi-ui/src/utils/request.js +++ b/ruoyi-ui/src/utils/request.js @@ -48,19 +48,16 @@ service.interceptors.response.use(res => { return res.data } if (code === 401) { - let doms = document.getElementsByClassName('el-message-box')[0] - if(doms === undefined){ - MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { + MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' } - ).then(() => { - store.dispatch('LogOut').then(() => { - location.href = '/index'; - }) - }).catch(() => {}); - } + ).then(() => { + store.dispatch('LogOut').then(() => { + location.href = '/index'; + }) + }).catch(() => {}); return Promise.reject('无效的会话,或者会话已过期,请重新登录。') } else if (code === 500) { Message({ From 2dd0add3e7ef145990e019d0474e1027a0274266 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, 18 Nov 2021 18:49:10 +0800 Subject: [PATCH 054/111] =?UTF-8?q?remove=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E6=97=A5=E5=BF=97=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/logback.xml | 30 ++++--------------- .../framework/manager/ShutdownManager.java | 2 +- 2 files changed, 7 insertions(+), 25 deletions(-) diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml index 33a169725..6e3280fb3 100644 --- a/ruoyi-admin/src/main/resources/logback.xml +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -31,7 +31,7 @@ INFO - + ${log.path}/sys-info.log @@ -54,7 +54,7 @@ DENY - + ${log.path}/sys-error.log @@ -76,21 +76,7 @@ DENY - - - - ${log.path}/sys-user.log - - - ${log.path}/sys-user.%d{yyyy-MM-dd}.log - - 60 - - - ${log.pattern} - - - + @@ -99,16 +85,12 @@ - + - - - - - - \ No newline at end of file + + diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java index 4ed536690..ef77a219a 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java @@ -14,7 +14,7 @@ import java.util.concurrent.ScheduledExecutorService; * * @author Lion Li */ -@Slf4j(topic = "sys-user") +@Slf4j @Component public class ShutdownManager { From e24a79f87b11989455a840cff596824630e5c9a4 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, 18 Nov 2021 18:54:54 +0800 Subject: [PATCH 055/111] =?UTF-8?q?update=20=E8=B0=83=E6=95=B4=20bat=20?= =?UTF-8?q?=E8=84=9A=E6=9C=AC=20=E7=BC=96=E7=A0=81=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/bin/ry.bat | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/script/bin/ry.bat b/script/bin/ry.bat index fd33a7210..ae2494044 100644 --- a/script/bin/ry.bat +++ b/script/bin/ry.bat @@ -1,21 +1,21 @@ @echo off -rem jarƽ��Ŀ¼ +rem jarƽĿ¼ set AppName=ruoyi-admin.jar -rem JVM���� +rem JVM 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. [1] ����%AppName% - ECHO. [2] �ر�%AppName% - ECHO. [3] ����%AppName% - ECHO. [4] ����״̬ %AppName% - ECHO. [5] �� �� + ECHO. [1] %AppName% + ECHO. [2] ر%AppName% + ECHO. [3] %AppName% + ECHO. [4] ״̬ %AppName% + ECHO. [5] ECHO. -ECHO.������ѡ����Ŀ�����: +ECHO.ѡĿ: set /p ID= IF "%id%"=="1" GOTO start IF "%id%"=="2" GOTO stop @@ -35,11 +35,11 @@ PAUSE start javaw %JAVA_OPTS% -jar %AppName% -echo starting���� +echo starting echo Start %AppName% success... goto:eof -rem ����stopͨ��jps�������pid���������� +rem stopͨjpspid :stop for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( set pid=%%a @@ -48,7 +48,7 @@ rem ����stopͨ��jps�������pid�������� if not defined pid (echo process %AppName% does not exists) else ( echo prepare to kill %image_name% echo start kill %pid% ... - rem ���ݽ���ID��kill���� + rem ݽIDkill taskkill /f /pid %pid% ) goto:eof From 321bb010cbf6be68ee938f3819d6d18cf7bb1e4d 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, 18 Nov 2021 19:28:39 +0800 Subject: [PATCH 056/111] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E6=B3=A8?= =?UTF-8?q?=E8=A7=A3=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B=20=E5=8E=BB?= =?UTF-8?q?=E9=99=A4=E5=A4=9A=E4=BD=99=E8=AD=A6=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/web/controller/system/SysOssController.java | 3 ++- .../ruoyi/web/controller/system/SysProfileController.java | 7 ++++--- .../ruoyi/web/controller/system/SysRoleController.java | 8 ++++---- .../ruoyi/web/controller/system/SysUserController.java | 4 ++-- 4 files changed, 12 insertions(+), 10 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 bf5ae8bf6..6369115bb 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 @@ -34,6 +34,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.NotEmpty; +import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.HashMap; @@ -69,7 +70,7 @@ public class SysOssController extends BaseController { */ @ApiOperation("上传OSS对象存储") @ApiImplicitParams({ - @ApiImplicitParam(name = "file", value = "文件", dataType = "java.io.File", required = true), + @ApiImplicitParam(name = "file", value = "文件", dataTypeClass = File.class, required = true), }) @PreAuthorize("@ss.hasPermi('system:oss:upload')") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) 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 b4534ad7f..d3b18f1e6 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 @@ -20,6 +20,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.util.HashMap; import java.util.Map; @@ -90,8 +91,8 @@ public class SysProfileController extends BaseController { */ @ApiOperation("重置密码") @ApiImplicitParams({ - @ApiImplicitParam(name = "oldPassword", value = "旧密码", paramType = "query"), - @ApiImplicitParam(name = "newPassword", value = "新密码", paramType = "query") + @ApiImplicitParam(name = "oldPassword", value = "旧密码", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "newPassword", value = "新密码", paramType = "query", dataTypeClass = String.class) }) @Log(title = "个人信息", businessType = BusinessType.UPDATE) @PutMapping("/updatePwd") @@ -119,7 +120,7 @@ public class SysProfileController extends BaseController { */ @ApiOperation("头像上传") @ApiImplicitParams({ - @ApiImplicitParam(name = "avatarfile", value = "用户头像", dataType = "java.io.File", required = true), + @ApiImplicitParam(name = "avatarfile", value = "用户头像", dataTypeClass = File.class, required = true), }) @Log(title = "用户头像", businessType = BusinessType.UPDATE) @PostMapping("/avatar") 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 2dd31047f..39b828d94 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 @@ -196,8 +196,8 @@ public class SysRoleController extends BaseController { */ @ApiOperation("批量取消授权用户") @ApiImplicitParams({ - @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query"), - @ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query") + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query", dataTypeClass = String.class) }) @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) @@ -211,8 +211,8 @@ public class SysRoleController extends BaseController { */ @ApiOperation("批量选择用户授权") @ApiImplicitParams({ - @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query"), - @ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query") + @ApiImplicitParam(name = "roleId", value = "角色ID", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "userIds", value = "用户ID串", paramType = "query", dataTypeClass = String.class) }) @PreAuthorize("@ss.hasPermi('system:role:edit')") @Log(title = "角色管理", businessType = BusinessType.GRANT) 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 a57fb15db..51027f100 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 @@ -219,8 +219,8 @@ public class SysUserController extends BaseController { */ @ApiOperation("用户授权角色") @ApiImplicitParams({ - @ApiImplicitParam(name = "userId", value = "用户Id", paramType = "query"), - @ApiImplicitParam(name = "roleIds", value = "角色ID串", paramType = "query") + @ApiImplicitParam(name = "userId", value = "用户Id", paramType = "query", dataTypeClass = String.class), + @ApiImplicitParam(name = "roleIds", value = "角色ID串", paramType = "query", dataTypeClass = String.class) }) @PreAuthorize("@ss.hasPermi('system:user:edit')") @Log(title = "用户管理", businessType = BusinessType.GRANT) From 9a7bb81cd00526287b3f0efd8e78ae440e21906f 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, 19 Nov 2021 13:01:30 +0800 Subject: [PATCH 057/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E5=85=B3?= =?UTF-8?q?=E9=97=AD=20xss=20=E5=8A=9F=E8=83=BD=E5=AF=BC=E8=87=B4=E5=8F=AF?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=AF=BB=20RepeatableFilter=20=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/framework/config/FilterConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java index ab12e4164..610807a86 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java @@ -18,7 +18,6 @@ import com.ruoyi.common.utils.StringUtils; * @author ruoyi */ @Configuration -@ConditionalOnProperty(value = "xss.enabled", havingValue = "true") public class FilterConfig { @Value("${xss.excludes}") @@ -29,6 +28,7 @@ public class FilterConfig @SuppressWarnings({ "rawtypes", "unchecked" }) @Bean + @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") public FilterRegistrationBean xssFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); From 5e1d4f215de63903645f7c3f4fd85c13b4f9cdb8 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, 19 Nov 2021 13:06:51 +0800 Subject: [PATCH 058/111] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=E5=85=B3?= =?UTF-8?q?=E9=97=AD=20xss=20=E5=8A=9F=E8=83=BD=E5=AF=BC=E8=87=B4=E5=8F=AF?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E8=AF=BB=20RepeatableFilter=20=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/framework/config/FilterConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java index 459020d87..6f3b099ab 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java @@ -20,7 +20,6 @@ import java.util.Map; * @author Lion Li */ @Configuration -@ConditionalOnProperty(value = "xss.enabled", havingValue = "true") public class FilterConfig { @Autowired @@ -28,6 +27,7 @@ public class FilterConfig { @SuppressWarnings({"rawtypes", "unchecked"}) @Bean + @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") public FilterRegistrationBean xssFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setDispatcherTypes(DispatcherType.REQUEST); From d1eacc1d1c7ba17735ba5c0a59db9700ebabecc0 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 19 Nov 2021 14:53:40 +0800 Subject: [PATCH 059/111] =?UTF-8?q?=E6=96=B0=E5=A2=9Etab=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E7=AE=80=E5=8C=96=E9=A1=B5=E7=AD=BE=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/layout/components/TagsView/index.vue | 19 ++---- ruoyi-ui/src/plugins/index.js | 3 + ruoyi-ui/src/plugins/tab.js | 68 +++++++++++++++++++ ruoyi-ui/src/store/modules/tagsView.js | 2 +- ruoyi-ui/src/views/monitor/job/log.vue | 4 +- ruoyi-ui/src/views/system/dict/data.vue | 14 ++++ ruoyi-ui/src/views/system/role/authUser.vue | 4 +- ruoyi-ui/src/views/system/user/authRole.vue | 4 +- .../views/system/user/profile/resetPwd.vue | 3 +- .../views/system/user/profile/userInfo.vue | 3 +- ruoyi-ui/src/views/tool/gen/editTable.vue | 4 +- 11 files changed, 102 insertions(+), 26 deletions(-) create mode 100644 ruoyi-ui/src/plugins/tab.js diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue index e43aa2e4a..2381d2e09 100644 --- a/ruoyi-ui/src/layout/components/TagsView/index.vue +++ b/ruoyi-ui/src/layout/components/TagsView/index.vue @@ -152,31 +152,24 @@ export default { }) }, refreshSelectedTag(view) { - this.$store.dispatch('tagsView/delCachedView', view).then(() => { - const { fullPath } = view - this.$nextTick(() => { - this.$router.replace({ - path: '/redirect' + fullPath - }) - }) - }) + this.$tab.refreshPage(view); }, closeSelectedTag(view) { - this.$store.dispatch('tagsView/delView', view).then(({ visitedViews }) => { + this.$tab.closePage(view).then(({ visitedViews }) => { if (this.isActive(view)) { this.toLastView(visitedViews, view) } }) }, closeRightTags() { - this.$store.dispatch('tagsView/delRightTags', this.selectedTag).then(visitedViews => { + this.$tab.closeRightPage(this.selectedTag).then(visitedViews => { if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { this.toLastView(visitedViews) } }) }, closeLeftTags() { - this.$store.dispatch('tagsView/delLeftTags', this.selectedTag).then(visitedViews => { + this.$tab.closeLeftPage(this.selectedTag).then(visitedViews => { if (!visitedViews.find(i => i.fullPath === this.$route.fullPath)) { this.toLastView(visitedViews) } @@ -184,12 +177,12 @@ export default { }, closeOthersTags() { this.$router.push(this.selectedTag).catch(()=>{}); - this.$store.dispatch('tagsView/delOthersViews', this.selectedTag).then(() => { + this.$tab.closeOtherPage(this.selectedTag).then(() => { this.moveToCurrentTag() }) }, closeAllTags(view) { - this.$store.dispatch('tagsView/delAllViews').then(({ visitedViews }) => { + this.$tab.closeAllPage().then(({ visitedViews }) => { if (this.affixTags.some(tag => tag.path === this.$route.path)) { return } diff --git a/ruoyi-ui/src/plugins/index.js b/ruoyi-ui/src/plugins/index.js index 7cc83a4c8..9bc6eacd3 100644 --- a/ruoyi-ui/src/plugins/index.js +++ b/ruoyi-ui/src/plugins/index.js @@ -1,3 +1,4 @@ +import tab from './tab' import auth from './auth' import cache from './cache' import modal from './modal' @@ -5,6 +6,8 @@ import download from './download' export default { install(Vue) { + // 页签操作 + Vue.prototype.$tab = tab // 认证对象 Vue.prototype.$auth = auth // 缓存对象 diff --git a/ruoyi-ui/src/plugins/tab.js b/ruoyi-ui/src/plugins/tab.js new file mode 100644 index 000000000..f2d7b22b8 --- /dev/null +++ b/ruoyi-ui/src/plugins/tab.js @@ -0,0 +1,68 @@ +import store from '@/store' +import router from '@/router'; + +export default { + // 刷新当前tab页签 + refreshPage(obj) { + const { path, matched } = router.currentRoute; + if (obj === undefined) { + matched.forEach((m) => { + if (m.components && m.components.default && m.components.default.name) { + if (!['Layout', 'ParentView'].includes(m.components.default.name)) { + obj = { name: m.components.default.name, path: path }; + } + } + }); + } + return store.dispatch('tagsView/delCachedView', obj).then(() => { + const { path } = obj + router.replace({ + path: '/redirect' + path + }) + }) + + + }, + // 关闭当前tab页签,打开新页签 + closeOpenPage(obj) { + store.dispatch("tagsView/delView", router.currentRoute); + if (obj !== undefined) { + return router.push(obj); + } + }, + // 关闭指定tab页签 + closePage(obj) { + if (obj === undefined) { + return store.dispatch('tagsView/delView', router.currentRoute).then(({ lastPath }) => { + return router.push(lastPath || '/'); + }); + } + return store.dispatch('tagsView/delView', obj); + }, + // 关闭所有tab页签 + closeAllPage() { + return store.dispatch('tagsView/delAllViews'); + }, + // 关闭左侧tab页签 + closeLeftPage(obj) { + return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute); + }, + // 关闭右侧tab页签 + closeRightPage(obj) { + return store.dispatch('tagsView/delRightTags', obj || router.currentRoute); + }, + // 关闭其他tab页签 + closeOtherPage(obj) { + return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute); + }, + // 添加tab页签 + addPage(title, url) { + var obj = { path: url, meta: { title: title } } + store.dispatch('tagsView/addView', obj); + return router.push(url); + }, + // 修改tab页签 + updatePage(obj) { + return store.dispatch('tagsView/updateVisitedView', obj); + } +} diff --git a/ruoyi-ui/src/store/modules/tagsView.js b/ruoyi-ui/src/store/modules/tagsView.js index 93d44040d..9acf5dc54 100644 --- a/ruoyi-ui/src/store/modules/tagsView.js +++ b/ruoyi-ui/src/store/modules/tagsView.js @@ -14,7 +14,7 @@ const mutations = { }, ADD_CACHED_VIEW: (state, view) => { if (state.cachedViews.includes(view.name)) return - if (!view.meta.noCache) { + if (view.meta && !view.meta.noCache) { state.cachedViews.push(view.name) } }, diff --git a/ruoyi-ui/src/views/monitor/job/log.vue b/ruoyi-ui/src/views/monitor/job/log.vue index 35b778829..98b9ab3d5 100644 --- a/ruoyi-ui/src/views/monitor/job/log.vue +++ b/ruoyi-ui/src/views/monitor/job/log.vue @@ -245,8 +245,8 @@ export default { }, // 返回按钮 handleClose() { - this.$store.dispatch("tagsView/delView", this.$route); - this.$router.push({ path: "/monitor/job" }); + const obj = { path: "/monitor/job" }; + this.$tab.closeOpenPage(obj); }, /** 搜索按钮操作 */ handleQuery() { diff --git a/ruoyi-ui/src/views/system/dict/data.vue b/ruoyi-ui/src/views/system/dict/data.vue index 45327c026..aa878bdd8 100644 --- a/ruoyi-ui/src/views/system/dict/data.vue +++ b/ruoyi-ui/src/views/system/dict/data.vue @@ -79,6 +79,15 @@ v-hasPermi="['system:dict:export']" >导出 + + 关闭 + @@ -316,6 +325,11 @@ export default { this.queryParams.pageNum = 1; this.getList(); }, + // 返回按钮 + handleClose() { + const obj = { path: "/system/dict" }; + this.$tab.closeOpenPage(obj); + }, /** 重置按钮操作 */ resetQuery() { this.resetForm("queryForm"); diff --git a/ruoyi-ui/src/views/system/role/authUser.vue b/ruoyi-ui/src/views/system/role/authUser.vue index e18ea8b31..dd1881252 100644 --- a/ruoyi-ui/src/views/system/role/authUser.vue +++ b/ruoyi-ui/src/views/system/role/authUser.vue @@ -153,8 +153,8 @@ export default { }, // 返回按钮 handleClose() { - this.$store.dispatch("tagsView/delView", this.$route); - this.$router.push({ path: "/system/role" }); + const obj = { path: "/system/role" }; + this.$tab.closeOpenPage(obj); }, /** 搜索按钮操作 */ handleQuery() { diff --git a/ruoyi-ui/src/views/system/user/authRole.vue b/ruoyi-ui/src/views/system/user/authRole.vue index a4bcbe3f4..b184de252 100644 --- a/ruoyi-ui/src/views/system/user/authRole.vue +++ b/ruoyi-ui/src/views/system/user/authRole.vue @@ -109,8 +109,8 @@ export default { }, /** 关闭按钮 */ close() { - this.$store.dispatch("tagsView/delView", this.$route); - this.$router.push({ path: "/system/user" }); + const obj = { path: "/system/user" }; + this.$tab.closeOpenPage(obj); }, }, }; diff --git a/ruoyi-ui/src/views/system/user/profile/resetPwd.vue b/ruoyi-ui/src/views/system/user/profile/resetPwd.vue index e01926846..3437abca1 100644 --- a/ruoyi-ui/src/views/system/user/profile/resetPwd.vue +++ b/ruoyi-ui/src/views/system/user/profile/resetPwd.vue @@ -64,8 +64,7 @@ export default { }); }, close() { - this.$store.dispatch("tagsView/delView", this.$route); - this.$router.push({ path: "/index" }); + this.$tab.closePage(); } } }; diff --git a/ruoyi-ui/src/views/system/user/profile/userInfo.vue b/ruoyi-ui/src/views/system/user/profile/userInfo.vue index 978cddf45..ac7c44a65 100644 --- a/ruoyi-ui/src/views/system/user/profile/userInfo.vue +++ b/ruoyi-ui/src/views/system/user/profile/userInfo.vue @@ -68,8 +68,7 @@ export default { }); }, close() { - this.$store.dispatch("tagsView/delView", this.$route); - this.$router.push({ path: "/index" }); + this.$tab.closePage(); } } }; diff --git a/ruoyi-ui/src/views/tool/gen/editTable.vue b/ruoyi-ui/src/views/tool/gen/editTable.vue index a013cbbb0..b8f386e75 100644 --- a/ruoyi-ui/src/views/tool/gen/editTable.vue +++ b/ruoyi-ui/src/views/tool/gen/editTable.vue @@ -211,8 +211,8 @@ export default { }, /** 关闭按钮 */ close() { - this.$store.dispatch("tagsView/delView", this.$route); - this.$router.push({ path: "/tool/gen", query: { t: Date.now(), pageNum: this.$route.query.pageNum } }) + const obj = { path: "/tool/gen", query: { t: Date.now(), pageNum: this.$route.query.pageNum } }; + this.$tab.closeOpenPage(obj); } }, mounted() { From 91ad85aec126ffabfd89afc410ef7049430742ca Mon Sep 17 00:00:00 2001 From: RuoYi Date: Fri, 19 Nov 2021 15:20:54 +0800 Subject: [PATCH 060/111] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=BE=A4?= =?UTF-8?q?=E5=8F=B7=EF=BC=9A264312783?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- ruoyi-ui/src/views/index.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0c10287a4..166974171 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,4 @@ ## 若依前后端分离交流群 -QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) 点击按钮入群。 \ No newline at end of file +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=lgBcot4o) 点击按钮入群。 \ No newline at end of file diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 4609c136e..19e035f0a 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -121,8 +121,8 @@ QQ群:满937441 满887144332 满180251782 满104180207 满186866453 满201396349 满101456076 - - 101539465 + 264312783

From 421593c0bac570b757ffa3eaf372928ebc5a73e1 Mon Sep 17 00:00:00 2001 From: RuoYi Date: Sat, 20 Nov 2021 12:09:53 +0800 Subject: [PATCH 061/111] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=BE=A4?= =?UTF-8?q?=E5=8F=B7=EF=BC=9A101539465?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- ruoyi-ui/src/views/index.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 166974171..0c10287a4 100644 --- a/README.md +++ b/README.md @@ -82,4 +82,4 @@ ## 若依前后端分离交流群 -QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/264312783-blue.svg)](https://jq.qq.com/?_wv=1027&k=lgBcot4o) 点击按钮入群。 \ No newline at end of file +QQ群: [![加入QQ群](https://img.shields.io/badge/已满-937441-blue.svg)](https://jq.qq.com/?_wv=1027&k=5bVB1og) [![加入QQ群](https://img.shields.io/badge/已满-887144332-blue.svg)](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [![加入QQ群](https://img.shields.io/badge/已满-180251782-blue.svg)](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [![加入QQ群](https://img.shields.io/badge/已满-104180207-blue.svg)](https://jq.qq.com/?_wv=1027&k=51G72yr) [![加入QQ群](https://img.shields.io/badge/已满-186866453-blue.svg)](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [![加入QQ群](https://img.shields.io/badge/已满-201396349-blue.svg)](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [![加入QQ群](https://img.shields.io/badge/已满-101456076-blue.svg)](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [![加入QQ群](https://img.shields.io/badge/101539465-blue.svg)](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) 点击按钮入群。 \ No newline at end of file diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 19e035f0a..4609c136e 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -121,8 +121,8 @@ QQ群:满937441 满887144332 满180251782 满104180207 满186866453 满201396349 满101456076 - - 264312783 + 101539465

From 019526fbe921a574f76e629ad7b3079f933a630a 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, 21 Nov 2021 01:39:43 +0800 Subject: [PATCH 062/111] =?UTF-8?q?update=20=E8=A7=A3=E8=80=A6=20LoginUser?= =?UTF-8?q?=20=E4=B8=8E=20SysUser=20=E5=BC=BA=E5=85=B3=E8=81=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../monitor/SysUserOnlineController.java | 2 +- .../controller/system/SysLoginController.java | 4 ++- .../system/SysProfileController.java | 15 ++-------- .../controller/system/SysRoleController.java | 6 ++-- .../common/core/domain/model/LoginUser.java | 24 ++++++++++------ .../common/core/service/UserService.java | 28 +++++++++++++++++++ .../framework/aspectj/DataScopeAspect.java | 6 ++-- .../ruoyi/system/service/ISysUserService.java | 5 +++- .../system/service/PermissionService.java | 17 +++++++++-- .../impl/SysUserOnlineServiceImpl.java | 13 +++++++-- .../service/impl/SysUserServiceImpl.java | 3 +- .../service/impl/UserDetailsServiceImpl.java | 2 +- 12 files changed, 88 insertions(+), 37 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/UserService.java 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 728bfd078..013748376 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 @@ -53,7 +53,7 @@ public class SysUserOnlineController extends BaseController { if (StringUtils.equals(ipaddr, user.getIpaddr())) { userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); } - } else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) { + } else if (StringUtils.isNotEmpty(userName)) { if (StringUtils.equals(userName, user.getUsername())) { userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); } 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 d73ebc20d..9e518234d 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 @@ -8,6 +8,7 @@ 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.ISysUserService; import com.ruoyi.system.service.SysLoginService; import com.ruoyi.system.service.SysPermissionService; import io.swagger.annotations.Api; @@ -38,6 +39,7 @@ public class SysLoginController { private final SysLoginService loginService; private final ISysMenuService menuService; + private final ISysUserService userService; private final SysPermissionService permissionService; /** @@ -65,7 +67,7 @@ public class SysLoginController { @ApiOperation("获取用户信息") @GetMapping("getInfo") public AjaxResult> getInfo() { - SysUser user = SecurityUtils.getLoginUser().getUser(); + SysUser user = userService.selectUserById(SecurityUtils.getUserId()); // 角色集合 Set roles = permissionService.getRolePermission(user); // 权限集合 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 d3b18f1e6..440eebb7e 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 @@ -47,7 +47,7 @@ public class SysProfileController extends BaseController { @GetMapping public AjaxResult> profile() { LoginUser loginUser = getLoginUser(); - SysUser user = loginUser.getUser(); + SysUser user = userService.selectUserById(loginUser.getUserId()); Map ajax = new HashMap<>(); ajax.put("user", user); ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); @@ -71,16 +71,10 @@ public class SysProfileController extends BaseController { return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); } LoginUser loginUser = getLoginUser(); - SysUser sysUser = loginUser.getUser(); + SysUser sysUser = userService.selectUserById(loginUser.getUserId()); user.setUserId(sysUser.getUserId()); user.setPassword(null); if (userService.updateUserProfile(user) > 0) { - // 更新缓存用户信息 - sysUser.setNickName(user.getNickName()); - sysUser.setPhonenumber(user.getPhonenumber()); - sysUser.setEmail(user.getEmail()); - sysUser.setSex(user.getSex()); - tokenService.setLoginUser(loginUser); return AjaxResult.success(); } return AjaxResult.error("修改个人信息异常,请联系管理员"); @@ -108,7 +102,7 @@ public class SysProfileController extends BaseController { } if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) { // 更新缓存用户密码 - loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword)); + loginUser.setPassword(SecurityUtils.encryptPassword(newPassword)); tokenService.setLoginUser(loginUser); return AjaxResult.success(); } @@ -132,9 +126,6 @@ public class SysProfileController extends BaseController { String avatar = oss.getUrl(); if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) { ajax.put("imgUrl", avatar); - // 更新缓存用户头像 - loginUser.getUser().setAvatar(avatar); - tokenService.setLoginUser(loginUser); return AjaxResult.success(ajax); } } 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 39b828d94..19cda5e45 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 @@ -105,9 +105,9 @@ public class SysRoleController extends BaseController { if (roleService.updateRole(role) > 0) { // 更新缓存用户权限 LoginUser loginUser = getLoginUser(); - if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) { - loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); - loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); + SysUser sysUser = userService.selectUserById(loginUser.getUserId()); + if (StringUtils.isNotNull(sysUser) && !sysUser.isAdmin()) { + loginUser.setPermissions(permissionService.getMenuPermission(sysUser)); tokenService.setLoginUser(loginUser); } return AjaxResult.success(); 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 9f7727abb..b138c529a 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 @@ -1,7 +1,6 @@ package com.ruoyi.common.core.domain.model; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.ruoyi.common.core.domain.entity.SysUser; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.Accessors; @@ -75,31 +74,38 @@ public class LoginUser implements UserDetails { private Set permissions; /** - * 用户信息 + * 用户名 */ - private SysUser user; + private String username; - public LoginUser(SysUser user, Set permissions) { - this.user = user; + /** + * 密码 + */ + private String password; + + public LoginUser(String username, String password, Set permissions) { + this.username = username; + this.password = password; this.permissions = permissions; } - public LoginUser(Long userId, Long deptId, SysUser user, Set permissions) { + public LoginUser(Long userId, Long deptId, String username, String password, Set permissions) { this.userId = userId; this.deptId = deptId; - this.user = user; + this.username = username; + this.password = password; this.permissions = permissions; } @JsonIgnore @Override public String getPassword() { - return user.getPassword(); + return password; } @Override public String getUsername() { - return user.getUserName(); + return username; } /** diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/UserService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/UserService.java new file mode 100644 index 000000000..e637f4731 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/UserService.java @@ -0,0 +1,28 @@ +package com.ruoyi.common.core.service; + +import com.ruoyi.common.core.domain.entity.SysUser; + +/** + * 通用 用户业务 + * + * @author Lion Li + */ +public interface UserService { + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * @return 用户对象信息 + */ + SysUser selectUserByUserName(String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * @return 用户对象信息 + */ + SysUser selectUserById(Long userId); + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java index e4a6cdcdb..40cedcaff 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -5,9 +5,11 @@ import com.ruoyi.common.core.domain.BaseEntity; 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.service.UserService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.reflect.ReflectUtils; +import com.ruoyi.common.utils.spring.SpringUtils; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; @@ -64,8 +66,8 @@ public class DataScopeAspect { // 获取当前的用户 LoginUser loginUser = SecurityUtils.getLoginUser(); if (StringUtils.isNotNull(loginUser)) { - SysUser currentUser = loginUser.getUser(); - // 如果是超级管理员,则不过滤数据 + SysUser currentUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId()); + // 如果是超级管理员,则不过滤数据 if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) { dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), controllerDataScope.userAlias(), controllerDataScope.isUser()); 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 d6e8d9d3d..a901e0abe 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 @@ -3,6 +3,7 @@ package com.ruoyi.system.service; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.service.UserService; import java.util.List; @@ -11,7 +12,7 @@ import java.util.List; * * @author Lion Li */ -public interface ISysUserService extends IService { +public interface ISysUserService extends IService, UserService { TableDataInfo selectPageUserList(SysUser user); @@ -46,6 +47,7 @@ public interface ISysUserService extends IService { * @param userName 用户名 * @return 用户对象信息 */ + @Override SysUser selectUserByUserName(String userName); /** @@ -54,6 +56,7 @@ public interface ISysUserService extends IService { * @param userId 用户ID * @return 用户对象信息 */ + @Override SysUser selectUserById(Long userId); /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java index ce9af68dd..e41333391 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java @@ -1,9 +1,12 @@ package com.ruoyi.system.service; 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.service.UserService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -91,10 +94,14 @@ public class PermissionService { return false; } LoginUser loginUser = SecurityUtils.getLoginUser(); - if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) { + if (StringUtils.isNull(loginUser)) { return false; } - for (SysRole sysRole : loginUser.getUser().getRoles()) { + SysUser sysUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId()); + if (CollectionUtils.isEmpty(sysUser.getRoles())) { + return false; + } + for (SysRole sysRole : sysUser.getRoles()) { String roleKey = sysRole.getRoleKey(); if (SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role))) { return true; @@ -124,7 +131,11 @@ public class PermissionService { return false; } LoginUser loginUser = SecurityUtils.getLoginUser(); - if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) { + if (StringUtils.isNull(loginUser)) { + return false; + } + SysUser sysUser = SpringUtils.getBean(UserService.class).selectUserById(loginUser.getUserId()); + if (CollectionUtils.isEmpty(sysUser.getRoles())) { return false; } for (String role : roles.split(ROLE_DELIMETER)) { 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 cf5afc54c..874f76ccd 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 @@ -1,9 +1,12 @@ package com.ruoyi.system.service.impl; +import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysUserOnline; import com.ruoyi.system.service.ISysUserOnlineService; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** @@ -14,6 +17,9 @@ import org.springframework.stereotype.Service; @Service public class SysUserOnlineServiceImpl implements ISysUserOnlineService { + @Autowired + private ISysUserService userService; + /** * 通过登录地址查询信息 * @@ -68,9 +74,10 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService { */ @Override public SysUserOnline loginUserToUserOnline(LoginUser user) { - if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) { + if (StringUtils.isNull(user)) { return null; } + SysUser sysUser = userService.selectUserById(user.getUserId()); SysUserOnline sysUserOnline = new SysUserOnline(); sysUserOnline.setTokenId(user.getToken()); sysUserOnline.setUserName(user.getUsername()); @@ -79,8 +86,8 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService { sysUserOnline.setBrowser(user.getBrowser()); sysUserOnline.setOs(user.getOs()); sysUserOnline.setLoginTime(user.getLoginTime()); - if (StringUtils.isNotNull(user.getUser().getDept())) { - sysUserOnline.setDeptName(user.getUser().getDept().getDeptName()); + if (StringUtils.isNotNull(sysUser.getDept())) { + sysUserOnline.setDeptName(sysUser.getDept().getDeptName()); } return sysUserOnline; } 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 08724cbb7..62d497d45 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 @@ -8,6 +8,7 @@ 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.service.UserService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.SecurityUtils; @@ -35,7 +36,7 @@ import java.util.List; */ @Slf4j @Service -public class SysUserServiceImpl extends ServicePlusImpl implements ISysUserService { +public class SysUserServiceImpl extends ServicePlusImpl implements ISysUserService, UserService { @Autowired private SysRoleMapper roleMapper; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java index 6b1c1e0f8..14801e9dc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java @@ -47,6 +47,6 @@ public class UserDetailsServiceImpl implements UserDetailsService { } public UserDetails createLoginUser(SysUser user) { - return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); + return new LoginUser(user.getUserId(), user.getDeptId(), user.getUserName(), user.getPassword(), permissionService.getMenuPermission(user)); } } From ef0b07d5c4734149fbe8a920553afc12507516d2 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, 22 Nov 2021 00:57:49 +0800 Subject: [PATCH 063/111] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=20RepeatSub?= =?UTF-8?q?mit=20=E6=B3=A8=E8=A7=A3=20aop=20=E5=A4=84=E7=90=86=20=E9=92=88?= =?UTF-8?q?=E5=AF=B9=E7=89=B9=E6=AE=8A=E5=8F=82=E6=95=B0=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/aspectj/RepeatSubmitAspect.java | 55 ++++++++++++++++++- 1 file changed, 53 insertions(+), 2 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java index 41116d880..71d438c00 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java @@ -1,6 +1,5 @@ package com.ruoyi.framework.aspectj; -import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; import com.baomidou.lock.LockInfo; import com.baomidou.lock.LockTemplate; @@ -8,6 +7,7 @@ import com.ruoyi.common.annotation.RepeatSubmit; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.properties.TokenProperties; +import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.config.properties.RepeatSubmitProperties; @@ -18,8 +18,13 @@ import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Collection; +import java.util.Map; /** * 防止重复提交 @@ -47,7 +52,7 @@ public class RepeatSubmitAspect { throw new ServiceException("重复提交间隔时间不能小于'1'秒"); } HttpServletRequest request = ServletUtils.getRequest(); - String nowParams = StrUtil.join(",", point.getArgs()); + String nowParams = argsArrayToString(point.getArgs()); // 请求地址(作为存放cache的key值) String url = request.getRequestURI(); @@ -66,4 +71,50 @@ public class RepeatSubmitAspect { } } + /** + * 参数拼装 + */ + private String argsArrayToString(Object[] paramsArray) { + StringBuilder params = new StringBuilder(); + if (paramsArray != null && paramsArray.length > 0) { + for (Object o : paramsArray) { + if (StringUtils.isNotNull(o) && !isFilterObject(o)) { + try { + params.append(JsonUtils.toJsonString(o)).append(" "); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + return params.toString().trim(); + } + + /** + * 判断是否需要过滤的对象。 + * + * @param o 对象信息。 + * @return 如果是需要过滤的对象,则返回true;否则返回false。 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) { + Class clazz = o.getClass(); + if (clazz.isArray()) { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } else if (Collection.class.isAssignableFrom(clazz)) { + Collection collection = (Collection) o; + for (Object value : collection) { + return value instanceof MultipartFile; + } + } else if (Map.class.isAssignableFrom(clazz)) { + Map map = (Map) o; + for (Object value : map.entrySet()) { + Map.Entry entry = (Map.Entry) value; + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } + } From e30fa57ab45b5baaab4518c5bd1b8abf81469bdf 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, 22 Nov 2021 02:42:14 +0800 Subject: [PATCH 064/111] =?UTF-8?q?update=20DictUtils=20=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB=20=E6=A0=87=E8=AE=B0=E8=BF=87?= =?UTF-8?q?=E6=9C=9F=203.5.0=20=E7=89=88=E6=9C=AC=E7=A7=BB=E9=99=A4=20?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20DictService=20=E4=BB=A3=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/ruoyi/common/utils/DictUtils.java | 2 ++ 1 file changed, 2 insertions(+) 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 a52a68185..3309da14e 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 @@ -11,7 +11,9 @@ import java.util.List; * 字典工具类 * * @author ruoyi + * @deprecated 3.5.0 版本删除 迁移至 {@link com.ruoyi.common.core.service.DictService} */ +@Deprecated public class DictUtils { /** From 20e782eb216d2743d3cb4f4e06a93f60c73018cd 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, 22 Nov 2021 02:42:59 +0800 Subject: [PATCH 065/111] =?UTF-8?q?update=20=E6=8A=BD=E8=B1=A1=20ConfigSer?= =?UTF-8?q?vice=20=E9=80=9A=E7=94=A8=20=E5=8F=82=E6=95=B0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/service/ConfigService.java | 18 ++++++++++++++ .../service/impl/SysConfigServiceImpl.java | 24 +++++++++++++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/ConfigService.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/ConfigService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/ConfigService.java new file mode 100644 index 000000000..c6badf65c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/ConfigService.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.core.service; + +/** + * 通用 参数配置服务 + * + * @author Lion Li + */ +public interface ConfigService { + + /** + * 根据参数 key 获取参数值 + * + * @param configKey 参数 key + * @return 参数值 + */ + String getConfigValue(String configKey); + +} 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 a01bcd141..fde1d6ab7 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 @@ -3,10 +3,12 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.service.ConfigService; import com.ruoyi.common.enums.DataSourceType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.PageUtils; @@ -15,6 +17,7 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; @@ -29,13 +32,19 @@ import java.util.Map; * @author Lion Li */ @Service -public class SysConfigServiceImpl extends ServicePlusImpl implements ISysConfigService { +public class SysConfigServiceImpl extends ServicePlusImpl implements ISysConfigService, ConfigService { + + @Autowired + private RuoYiConfig ruoyiConfig; /** * 项目启动时,初始化参数到缓存 */ @PostConstruct public void init() { + if (ruoyiConfig.isCacheLazy()){ + return; + } loadingConfigCache(); } @@ -75,7 +84,7 @@ public class SysConfigServiceImpl extends ServicePlusImpl Date: Mon, 22 Nov 2021 02:43:22 +0800 Subject: [PATCH 066/111] =?UTF-8?q?update=20=E6=8A=BD=E8=B1=A1=20DictServi?= =?UTF-8?q?ce=20=E9=80=9A=E7=94=A8=20=E5=AD=97=E5=85=B8=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/service/DictService.java | 57 ++++++++++ .../service/impl/SysDictDataServiceImpl.java | 19 +++- .../service/impl/SysDictTypeServiceImpl.java | 104 ++++++++++++++++-- 3 files changed, 166 insertions(+), 14 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java new file mode 100644 index 000000000..b334c82af --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/DictService.java @@ -0,0 +1,57 @@ +package com.ruoyi.common.core.service; + +/** + * 通用 字典服务 + * + * @author Lion Li + */ +public interface DictService { + + /** + * 分隔符 + */ + String SEPARATOR = ","; + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @return 字典标签 + */ + default String getDictLabel(String dictType, String dictValue) { + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @return 字典值 + */ + default String getDictValue(String dictType, String dictLabel) { + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 根据字典类型和字典值获取字典标签 + * + * @param dictType 字典类型 + * @param dictValue 字典值 + * @param separator 分隔符 + * @return 字典标签 + */ + String getDictLabel(String dictType, String dictValue, String separator); + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + String getDictValue(String dictType, String dictLabel, String separator); + +} 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 35908e3b1..d2ac2a02e 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,11 +1,12 @@ package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.constant.Constants; 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.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.service.ISysDictDataService; @@ -85,7 +86,7 @@ public class SysDictDataServiceImpl extends ServicePlusImpl dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas); } } @@ -100,7 +101,7 @@ public class SysDictDataServiceImpl extends ServicePlusImpl 0) { List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas); } return row; } @@ -116,8 +117,18 @@ public class SysDictDataServiceImpl extends ServicePlusImpl 0) { List dictDatas = baseMapper.selectDictDataByType(data.getDictType()); - DictUtils.setDictCache(data.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(data.getDictType()), dictDatas); } return row; } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + String getCacheKey(String configKey) { + return Constants.SYS_DICT_KEY + configKey; + } } 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 0cdce84c1..c554abb43 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 @@ -3,14 +3,17 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysDictData; import com.ruoyi.common.core.domain.entity.SysDictType; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.service.DictService; import com.ruoyi.common.exception.ServiceException; -import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDictDataMapper; import com.ruoyi.system.mapper.SysDictTypeMapper; @@ -21,6 +24,7 @@ import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; @@ -30,16 +34,21 @@ import java.util.Map; * @author Lion Li */ @Service -public class SysDictTypeServiceImpl extends ServicePlusImpl implements ISysDictTypeService { +public class SysDictTypeServiceImpl extends ServicePlusImpl implements ISysDictTypeService, DictService { @Autowired private SysDictDataMapper dictDataMapper; + @Autowired + private RuoYiConfig ruoyiConfig; /** * 项目启动时,初始化字典到缓存 */ @PostConstruct public void init() { + if (ruoyiConfig.isCacheLazy()){ + return; + } loadingDictCache(); } @@ -98,13 +107,13 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl selectDictDataByType(String dictType) { - List dictDatas = DictUtils.getDictCache(dictType); - if (CollUtil.isNotEmpty(dictDatas)) { + List dictDatas = RedisUtils.getCacheObject(getCacheKey(dictType)); + if (StringUtils.isNotEmpty(dictDatas)) { return dictDatas; } dictDatas = dictDataMapper.selectDictDataByType(dictType); if (CollUtil.isNotEmpty(dictDatas)) { - DictUtils.setDictCache(dictType, dictDatas); + RedisUtils.setCacheObject(getCacheKey(dictType), dictDatas); return dictDatas; } return null; @@ -146,7 +155,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl 0) { throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); } - DictUtils.removeDictCache(dictType.getDictType()); + RedisUtils.deleteObject(getCacheKey(dictType.getDictType())); } baseMapper.deleteBatchIds(Arrays.asList(dictIds)); } @@ -159,7 +168,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl dictTypeList = list(); for (SysDictType dictType : dictTypeList) { List dictDatas = dictDataMapper.selectDictDataByType(dictType.getDictType()); - DictUtils.setDictCache(dictType.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(dictType.getDictType()), dictDatas); } } @@ -168,7 +177,8 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl keys = RedisUtils.keys(Constants.SYS_DICT_KEY + "*"); + RedisUtils.deleteObject(keys); } /** @@ -190,7 +200,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl 0) { - DictUtils.setDictCache(dict.getDictType(), null); + RedisUtils.setCacheObject(getCacheKey(dict.getDictType()), null); } return row; } @@ -211,7 +221,7 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl 0) { List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); - DictUtils.setDictCache(dict.getDictType(), dictDatas); + RedisUtils.setCacheObject(getCacheKey(dict.getDictType()), dictDatas); } return row; } @@ -233,4 +243,78 @@ public class SysDictTypeServiceImpl extends ServicePlusImpl datas = selectDictDataByType(dictType); + + 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())) { + return dict.getDictLabel(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 根据字典类型和字典标签获取字典值 + * + * @param dictType 字典类型 + * @param dictLabel 字典标签 + * @param separator 分隔符 + * @return 字典值 + */ + @Override + public String getDictValue(String dictType, String dictLabel, String separator) { + StringBuilder propertyString = new StringBuilder(); + List datas = selectDictDataByType(dictType); + + 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())) { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * @return 缓存键key + */ + String getCacheKey(String configKey) { + return Constants.SYS_DICT_KEY + configKey; + } } From 20eea9914ec4e2839c75497b9f27c5e2a6288579 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, 22 Nov 2021 02:44:46 +0800 Subject: [PATCH 067/111] =?UTF-8?q?update=20=E5=9F=BA=E4=BA=8E=20DictServi?= =?UTF-8?q?ce=20=E9=87=8D=E6=9E=84=20Excel=20=E5=86=85=E5=AD=97=E5=85=B8?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/convert/ExcelDictConvert.java | 6 +++-- .../com/ruoyi/common/utils/poi/ExcelUtil.java | 25 ------------------- 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java index 58560d0b1..7c4d63124 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/convert/ExcelDictConvert.java @@ -8,8 +8,10 @@ import com.alibaba.excel.metadata.CellData; import com.alibaba.excel.metadata.GlobalConfiguration; import com.alibaba.excel.metadata.property.ExcelContentProperty; import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.core.service.DictService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.spring.SpringUtils; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Field; @@ -41,7 +43,7 @@ public class ExcelDictConvert implements Converter { if (StringUtils.isBlank(type)) { value = ExcelUtil.reverseByExp(label, anno.readConverterExp(), anno.separator()); } else { - value = ExcelUtil.reverseDictByExp(label, type, anno.separator()); + value = SpringUtils.getBean(DictService.class).getDictValue(type, label, anno.separator()); } return Convert.convert(contentProperty.getField().getType(), value); } @@ -58,7 +60,7 @@ public class ExcelDictConvert implements Converter { if (StringUtils.isBlank(type)) { label = ExcelUtil.convertByExp(value, anno.readConverterExp(), anno.separator()); } else { - label = ExcelUtil.convertDictByExp(value, type, anno.separator()); + label = SpringUtils.getBean(DictService.class).getDictLabel(type, value, anno.separator()); } return new CellData<>(label); } 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 813fc979e..0775ce57c 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 @@ -4,7 +4,6 @@ import cn.hutool.core.util.IdUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.ruoyi.common.convert.ExcelBigNumberConvert; -import com.ruoyi.common.utils.DictUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUtils; @@ -115,30 +114,6 @@ public class ExcelUtil { return StringUtils.stripEnd(propertyString.toString(), separator); } - /** - * 解析字典值 - * - * @param dictValue 字典值 - * @param dictType 字典类型 - * @param separator 分隔符 - * @return 字典标签 - */ - public static String convertDictByExp(String dictValue, String dictType, String separator) { - return DictUtils.getDictLabel(dictType, dictValue, separator); - } - - /** - * 反向解析值字典值 - * - * @param dictLabel 字典标签 - * @param dictType 字典类型 - * @param separator 分隔符 - * @return 字典值 - */ - public static String reverseDictByExp(String dictLabel, String dictType, String separator) { - return DictUtils.getDictValue(dictType, dictLabel, separator); - } - /** * 编码文件名 */ From 6c053b626659311c7fc03ff47fc6da61e55e3830 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, 22 Nov 2021 02:45:50 +0800 Subject: [PATCH 068/111] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20RedisUtil?= =?UTF-8?q?s.getCacheObject=20=E7=9A=84=E8=BF=94=E5=9B=9E=E5=80=BC?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java index b5de00145..b99ae0a63 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java @@ -1,6 +1,5 @@ package com.ruoyi.oss.factory; -import cn.hutool.core.convert.Convert; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; @@ -45,7 +44,7 @@ public class OssFactory { */ public static ICloudStorageStrategy instance() { // 获取redis 默认类型 - String type = Convert.toStr(RedisUtils.getCacheObject(CloudConstant.CACHE_CONFIG_KEY)); + String type = RedisUtils.getCacheObject(CloudConstant.CACHE_CONFIG_KEY); if (StringUtils.isEmpty(type)) { throw new OssException("文件存储服务类型无法找到!"); } From 2cdea69719181b6c652d315a233d19ccf4d0663e 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, 22 Nov 2021 02:46:13 +0800 Subject: [PATCH 069/111] =?UTF-8?q?add=20=E5=A2=9E=E5=8A=A0=20=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=87=92=E5=8A=A0=E8=BD=BD=20=E5=BC=80=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application.yml | 2 ++ .../src/main/java/com/ruoyi/common/config/RuoYiConfig.java | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 89cda7c9a..f7ef6339d 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -10,6 +10,8 @@ ruoyi: demoEnabled: true # 获取ip地址开关 addressEnabled: true + # 缓存懒加载 + cacheLazy: true captcha: # 页面 <参数设置> 可开启关闭 验证码校验 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 9343a4a08..bcfc677bd 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 @@ -38,6 +38,11 @@ public class RuoYiConfig { */ private boolean demoEnabled; + /** + * 缓存懒加载 + */ + private boolean cacheLazy; + /** * 获取地址开关 */ From 18cbd962807db4f6849e0fa8973516debb2f61be 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, 22 Nov 2021 09:29:58 +0800 Subject: [PATCH 070/111] =?UTF-8?q?update=20satoken=20=E6=A0=87=E8=AE=B0?= =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=8F=AF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63dd1fef0..c8f917653 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ | 功能介绍 | 使用技术 | 文档地址 | 特性注意事项 | |---|---|---|---| | 当前框架 | RuoYi-Vue-Plus | [RuoYi-Vue-Plus文档](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/wikis/pages) | 重写RuoYi-Vue全方位升级(不兼容原框架) | -| satoken分支 | RuoYi-Vue-Plus-satoken | [satoken分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/satoken/) | 使用satoken重构权限鉴权(仅供学习不推荐上生产) | +| satoken分支 | RuoYi-Vue-Plus-satoken | [satoken分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/satoken/) | 使用satoken重构权限鉴权 | | 单体分支 | RuoYi-Vue-Plus-fast | [fast分支地址](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/tree/fast/) | 单体应用结构 | | 原框架 | RuoYi-Vue | [RuoYi-Vue官网](http://ruoyi.vip/) | 定期同步需要的功能 | | 前端开发框架 | Vue、Element UI | [Element UI官网](https://element.eleme.cn/#/zh-CN) | | From 7ab51b89601b95ac8e91385a9003f040d20e0222 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, 22 Nov 2021 09:34:26 +0800 Subject: [PATCH 071/111] =?UTF-8?q?update=20=E8=A7=84=E8=8C=83=20ICloudSto?= =?UTF-8?q?rageStrategy=20=E6=8E=A5=E5=8F=A3=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/oss/service/ICloudStorageStrategy.java | 10 ---------- .../abstractd/AbstractCloudStorageStrategy.java | 2 -- 2 files changed, 12 deletions(-) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java index 96ea53992..39286110d 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java @@ -18,15 +18,6 @@ public interface ICloudStorageStrategy { */ String getServiceType(); - /** - * 文件路径 - * - * @param prefix 前缀 - * @param suffix 后缀 - * @return 返回上传路径 - */ - String getPath(String prefix, String suffix); - /** * 文件上传 * @@ -70,5 +61,4 @@ public interface ICloudStorageStrategy { */ UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType); - String getEndpointLink(); } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java index 8f5e9625d..8fc55fbf0 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java @@ -27,7 +27,6 @@ public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrat @Override public abstract String getServiceType(); - @Override public String getPath(String prefix, String suffix) { // 生成uuid String uuid = IdUtil.fastSimpleUUID(); @@ -57,6 +56,5 @@ public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrat @Override public abstract UploadResult uploadSuffix(InputStream inputStream, String suffix, String contentType); - @Override public abstract String getEndpointLink(); } From 4cfbd8a9d2ca743842f8d47ac18c5c7cea5a04cd 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, 22 Nov 2021 09:45:46 +0800 Subject: [PATCH 072/111] =?UTF-8?q?update=20OSS=20=E6=A8=A1=E5=9D=97=20?= =?UTF-8?q?=E6=95=B4=E4=BD=93=E9=87=8D=E5=91=BD=E5=90=8D=20=E6=B6=88?= =?UTF-8?q?=E9=99=A4=E6=AD=A7=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{CloudConstant.java => OssConstant.java} | 6 ++-- .../{CloudServiceEnumd.java => OssEnumd.java} | 22 +++++++------- .../com/ruoyi/oss/factory/OssFactory.java | 30 +++++++++---------- ...rageProperties.java => OssProperties.java} | 2 +- ...StorageStrategy.java => IOssStrategy.java} | 2 +- ...Strategy.java => AbstractOssStrategy.java} | 10 +++---- ...geStrategy.java => AliyunOssStrategy.java} | 12 ++++---- ...ageStrategy.java => MinioOssStrategy.java} | 12 ++++---- ...geStrategy.java => QcloudOssStrategy.java} | 12 ++++---- ...ageStrategy.java => QiniuOssStrategy.java} | 12 ++++---- .../service/impl/SysOssConfigServiceImpl.java | 12 ++++---- .../service/impl/SysOssServiceImpl.java | 6 ++-- 12 files changed, 69 insertions(+), 69 deletions(-) rename ruoyi-oss/src/main/java/com/ruoyi/oss/constant/{CloudConstant.java => OssConstant.java} (73%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/{CloudServiceEnumd.java => OssEnumd.java} (56%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/properties/{CloudStorageProperties.java => OssProperties.java} (93%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/service/{ICloudStorageStrategy.java => IOssStrategy.java} (96%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/{AbstractCloudStorageStrategy.java => AbstractOssStrategy.java} (81%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/{AliyunCloudStorageStrategy.java => AliyunOssStrategy.java} (90%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/{MinioCloudStorageStrategy.java => MinioOssStrategy.java} (94%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/{QcloudCloudStorageStrategy.java => QcloudOssStrategy.java} (91%) rename ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/{QiniuCloudStorageStrategy.java => QiniuOssStrategy.java} (90%) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java similarity index 73% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java index 7bba1f4db..b5236bfe7 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/CloudConstant.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/constant/OssConstant.java @@ -8,7 +8,7 @@ import java.util.List; * * @author Lion Li */ -public class CloudConstant { +public class OssConstant { /** * OSS模块KEY @@ -18,12 +18,12 @@ public class CloudConstant { /** * 对象存储配置KEY */ - public static final String CLOUD_STORAGE_CONFIG_KEY = "CloudStorageConfig"; + public static final String OSS_CONFIG_KEY = "OssConfig"; /** * 缓存配置KEY */ - public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + CLOUD_STORAGE_CONFIG_KEY; + public static final String CACHE_CONFIG_KEY = SYS_OSS_KEY + OSS_CONFIG_KEY; /** * 预览列表资源开关Key diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java similarity index 56% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java index ac8ad8184..4defca40e 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/CloudServiceEnumd.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/enumd/OssEnumd.java @@ -1,10 +1,10 @@ package com.ruoyi.oss.enumd; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.oss.service.impl.AliyunCloudStorageStrategy; -import com.ruoyi.oss.service.impl.MinioCloudStorageStrategy; -import com.ruoyi.oss.service.impl.QcloudCloudStorageStrategy; -import com.ruoyi.oss.service.impl.QiniuCloudStorageStrategy; +import com.ruoyi.oss.service.impl.AliyunOssStrategy; +import com.ruoyi.oss.service.impl.MinioOssStrategy; +import com.ruoyi.oss.service.impl.QcloudOssStrategy; +import com.ruoyi.oss.service.impl.QiniuOssStrategy; import lombok.AllArgsConstructor; import lombok.Getter; @@ -15,34 +15,34 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum CloudServiceEnumd { +public enum OssEnumd { /** * 七牛云 */ - QINIU("qiniu", QiniuCloudStorageStrategy.class), + QINIU("qiniu", QiniuOssStrategy.class), /** * 阿里云 */ - ALIYUN("aliyun", AliyunCloudStorageStrategy.class), + ALIYUN("aliyun", AliyunOssStrategy.class), /** * 腾讯云 */ - QCLOUD("qcloud", QcloudCloudStorageStrategy.class), + QCLOUD("qcloud", QcloudOssStrategy.class), /** * minio */ - MINIO("minio", MinioCloudStorageStrategy.class); + MINIO("minio", MinioOssStrategy.class); private final String value; private final Class serviceClass; public static Class getServiceClass(String value) { - for (CloudServiceEnumd clazz : values()) { + for (OssEnumd clazz : values()) { if (clazz.getValue().equals(value)) { return clazz.getServiceClass(); } @@ -51,7 +51,7 @@ public enum CloudServiceEnumd { } public static String getServiceName(String value) { - for (CloudServiceEnumd clazz : values()) { + for (OssEnumd clazz : values()) { if (clazz.getValue().equals(value)) { return StringUtils.uncapitalize(clazz.getServiceClass().getSimpleName()); } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java index b99ae0a63..56ea52225 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/factory/OssFactory.java @@ -4,12 +4,12 @@ import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.reflect.ReflectUtils; -import com.ruoyi.oss.constant.CloudConstant; -import com.ruoyi.oss.enumd.CloudServiceEnumd; +import com.ruoyi.oss.constant.OssConstant; +import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; -import com.ruoyi.oss.properties.CloudStorageProperties; -import com.ruoyi.oss.service.ICloudStorageStrategy; -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy; +import com.ruoyi.oss.properties.OssProperties; +import com.ruoyi.oss.service.IOssStrategy; +import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import lombok.extern.slf4j.Slf4j; import java.util.Map; @@ -26,14 +26,14 @@ public class OssFactory { /** * 服务实例缓存 */ - private static final Map SERVICES = new ConcurrentHashMap<>(); + private static final Map SERVICES = new ConcurrentHashMap<>(); /** * 初始化工厂 */ public static void init() { log.info("初始化OSS工厂"); - RedisUtils.subscribe(CloudConstant.CACHE_CONFIG_KEY, String.class, msg -> { + RedisUtils.subscribe(OssConstant.CACHE_CONFIG_KEY, String.class, msg -> { refreshService(msg); log.info("订阅刷新OSS配置 => " + msg); }); @@ -42,9 +42,9 @@ public class OssFactory { /** * 获取默认实例 */ - public static ICloudStorageStrategy instance() { + public static IOssStrategy instance() { // 获取redis 默认类型 - String type = RedisUtils.getCacheObject(CloudConstant.CACHE_CONFIG_KEY); + String type = RedisUtils.getCacheObject(OssConstant.CACHE_CONFIG_KEY); if (StringUtils.isEmpty(type)) { throw new OssException("文件存储服务类型无法找到!"); } @@ -54,8 +54,8 @@ public class OssFactory { /** * 根据类型获取实例 */ - public static ICloudStorageStrategy instance(String type) { - ICloudStorageStrategy service = SERVICES.get(type); + public static IOssStrategy instance(String type) { + IOssStrategy service = SERVICES.get(type); if (service == null) { refreshService(type); service = SERVICES.get(type); @@ -64,14 +64,14 @@ public class OssFactory { } private static void refreshService(String type) { - Object json = RedisUtils.getCacheObject(CloudConstant.SYS_OSS_KEY + type); - CloudStorageProperties properties = JsonUtils.parseObject(json.toString(), CloudStorageProperties.class); + Object json = RedisUtils.getCacheObject(OssConstant.SYS_OSS_KEY + type); + OssProperties properties = JsonUtils.parseObject(json.toString(), OssProperties.class); if (properties == null) { throw new OssException("系统异常, '" + type + "'配置信息不存在!"); } // 获取redis配置信息 创建对象 并缓存 - ICloudStorageStrategy service = (ICloudStorageStrategy) ReflectUtils.newInstance(CloudServiceEnumd.getServiceClass(type)); - ((AbstractCloudStorageStrategy)service).init(properties); + IOssStrategy service = (IOssStrategy) ReflectUtils.newInstance(OssEnumd.getServiceClass(type)); + ((AbstractOssStrategy)service).init(properties); SERVICES.put(type, service); } diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java similarity index 93% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java index 9d3f15afb..22b31c45d 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/CloudStorageProperties.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java @@ -10,7 +10,7 @@ import java.util.Date; * @author Lion Li */ @Data -public class CloudStorageProperties { +public class OssProperties { /** * 域名 diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java similarity index 96% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java index 39286110d..34d25e477 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/ICloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/IOssStrategy.java @@ -9,7 +9,7 @@ import java.io.InputStream; * * @author Lion Li */ -public interface ICloudStorageStrategy { +public interface IOssStrategy { void createBucket(); diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java similarity index 81% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java index 8fc55fbf0..9fa52acb4 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/abstractd/AbstractOssStrategy.java @@ -5,8 +5,8 @@ import cn.hutool.core.util.IdUtil; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; -import com.ruoyi.oss.properties.CloudStorageProperties; -import com.ruoyi.oss.service.ICloudStorageStrategy; +import com.ruoyi.oss.properties.OssProperties; +import com.ruoyi.oss.service.IOssStrategy; import java.io.InputStream; @@ -15,11 +15,11 @@ import java.io.InputStream; * * @author Lion Li */ -public abstract class AbstractCloudStorageStrategy implements ICloudStorageStrategy { +public abstract class AbstractOssStrategy implements IOssStrategy { - protected CloudStorageProperties properties; + protected OssProperties properties; - public abstract void init(CloudStorageProperties properties); + public abstract void init(OssProperties properties); @Override public abstract void createBucket(); diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java similarity index 90% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java index 04ee67500..db9ad910e 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/AliyunOssStrategy.java @@ -9,10 +9,10 @@ import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; -import com.ruoyi.oss.enumd.CloudServiceEnumd; +import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; -import com.ruoyi.oss.properties.CloudStorageProperties; -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy; +import com.ruoyi.oss.properties.OssProperties; +import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -22,12 +22,12 @@ import java.io.InputStream; * * @author Lion Li */ -public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy { +public class AliyunOssStrategy extends AbstractOssStrategy { private OSSClient client; @Override - public void init(CloudStorageProperties cloudStorageProperties) { + public void init(OssProperties cloudStorageProperties) { properties = cloudStorageProperties; try { ClientConfiguration configuration = new ClientConfiguration(); @@ -57,7 +57,7 @@ public class AliyunCloudStorageStrategy extends AbstractCloudStorageStrategy { @Override public String getServiceType() { - return CloudServiceEnumd.ALIYUN.getValue(); + return OssEnumd.ALIYUN.getValue(); } @Override diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java similarity index 94% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java index 3bbf187c9..0423dcc8a 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/MinioOssStrategy.java @@ -2,11 +2,11 @@ package com.ruoyi.oss.service.impl; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; -import com.ruoyi.oss.enumd.CloudServiceEnumd; +import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.enumd.PolicyType; import com.ruoyi.oss.exception.OssException; -import com.ruoyi.oss.properties.CloudStorageProperties; -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy; +import com.ruoyi.oss.properties.OssProperties; +import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import io.minio.*; import org.springframework.http.MediaType; @@ -18,12 +18,12 @@ import java.io.InputStream; * * @author Lion Li */ -public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy { +public class MinioOssStrategy extends AbstractOssStrategy { private MinioClient minioClient; @Override - public void init(CloudStorageProperties cloudStorageProperties) { + public void init(OssProperties cloudStorageProperties) { properties = cloudStorageProperties; try { minioClient = MinioClient.builder() @@ -57,7 +57,7 @@ public class MinioCloudStorageStrategy extends AbstractCloudStorageStrategy { @Override public String getServiceType() { - return CloudServiceEnumd.MINIO.getValue(); + return OssEnumd.MINIO.getValue(); } @Override diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java similarity index 91% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java index 9bd366e0d..156eb24c5 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QcloudOssStrategy.java @@ -9,10 +9,10 @@ import com.qcloud.cos.model.*; import com.qcloud.cos.region.Region; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; -import com.ruoyi.oss.enumd.CloudServiceEnumd; +import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; -import com.ruoyi.oss.properties.CloudStorageProperties; -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy; +import com.ruoyi.oss.properties.OssProperties; +import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import java.io.ByteArrayInputStream; import java.io.InputStream; @@ -22,12 +22,12 @@ import java.io.InputStream; * * @author Lion Li */ -public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy { +public class QcloudOssStrategy extends AbstractOssStrategy { private COSClient client; @Override - public void init(CloudStorageProperties cloudStorageProperties) { + public void init(OssProperties cloudStorageProperties) { properties = cloudStorageProperties; try { COSCredentials credentials = new BasicCOSCredentials( @@ -65,7 +65,7 @@ public class QcloudCloudStorageStrategy extends AbstractCloudStorageStrategy { @Override public String getServiceType() { - return CloudServiceEnumd.QCLOUD.getValue(); + return OssEnumd.QCLOUD.getValue(); } @Override diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java similarity index 90% rename from ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java rename to ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java index 0c23e7612..bf90aa824 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuCloudStorageStrategy.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/service/impl/QiniuOssStrategy.java @@ -8,10 +8,10 @@ import com.qiniu.storage.Region; import com.qiniu.storage.UploadManager; import com.qiniu.util.Auth; import com.ruoyi.oss.entity.UploadResult; -import com.ruoyi.oss.enumd.CloudServiceEnumd; +import com.ruoyi.oss.enumd.OssEnumd; import com.ruoyi.oss.exception.OssException; -import com.ruoyi.oss.properties.CloudStorageProperties; -import com.ruoyi.oss.service.abstractd.AbstractCloudStorageStrategy; +import com.ruoyi.oss.properties.OssProperties; +import com.ruoyi.oss.service.abstractd.AbstractOssStrategy; import java.io.InputStream; @@ -20,14 +20,14 @@ import java.io.InputStream; * * @author Lion Li */ -public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy { +public class QiniuOssStrategy extends AbstractOssStrategy { private UploadManager uploadManager; private BucketManager bucketManager; private Auth auth; @Override - public void init(CloudStorageProperties cloudStorageProperties) { + public void init(OssProperties cloudStorageProperties) { properties = cloudStorageProperties; try { Configuration config = new Configuration(getRegion(properties.getRegion())); @@ -62,7 +62,7 @@ public class QiniuCloudStorageStrategy extends AbstractCloudStorageStrategy { @Override public String getServiceType() { - return CloudServiceEnumd.QINIU.getValue(); + return OssEnumd.QINIU.getValue(); } @Override 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 ddbf421ee..697aa414c 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 @@ -15,7 +15,7 @@ import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.oss.constant.CloudConstant; +import com.ruoyi.oss.constant.OssConstant; import com.ruoyi.oss.factory.OssFactory; import com.ruoyi.system.domain.SysOssConfig; import com.ruoyi.system.domain.bo.SysOssConfigBo; @@ -54,7 +54,7 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl ids, Boolean isValid) { if (isValid) { - if (CollUtil.containsAny(ids, CloudConstant.SYSTEM_DATA_IDS)) { + if (CollUtil.containsAny(ids, OssConstant.SYSTEM_DATA_IDS)) { throw new ServiceException("系统内置, 不可删除!"); } } @@ -157,7 +157,7 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl 0) { - RedisUtils.setCacheObject(CloudConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey()); + RedisUtils.setCacheObject(OssConstant.CACHE_CONFIG_KEY, sysOssConfig.getConfigKey()); } return row; } @@ -169,7 +169,7 @@ public class SysOssConfigServiceImpl extends ServicePlusImpl { + RedisUtils.publish(OssConstant.CACHE_CONFIG_KEY, config.getConfigKey(), msg -> { log.info("发布刷新OSS配置 => " + msg); }); } 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 b703ff690..c20cc4b76 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 @@ -10,7 +10,7 @@ import com.ruoyi.common.utils.PageUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.oss.entity.UploadResult; import com.ruoyi.oss.factory.OssFactory; -import com.ruoyi.oss.service.ICloudStorageStrategy; +import com.ruoyi.oss.service.IOssStrategy; import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.domain.bo.SysOssBo; import com.ruoyi.system.domain.vo.SysOssVo; @@ -56,7 +56,7 @@ public class SysOssServiceImpl extends ServicePlusImpl list = listByIds(ids); for (SysOss sysOss : list) { - ICloudStorageStrategy storage = OssFactory.instance(sysOss.getService()); + IOssStrategy storage = OssFactory.instance(sysOss.getService()); storage.delete(sysOss.getUrl()); } return removeByIds(ids); From 486e4f8dd35dcd4e176c0fc724365858fd31a6ca 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, 22 Nov 2021 09:46:45 +0800 Subject: [PATCH 073/111] =?UTF-8?q?update=20=E5=88=A0=E9=99=A4=E6=97=A0?= =?UTF-8?q?=E7=94=A8=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ruoyi/oss/properties/OssProperties.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java index 22b31c45d..48a478b7a 100644 --- a/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java +++ b/ruoyi-oss/src/main/java/com/ruoyi/oss/properties/OssProperties.java @@ -2,8 +2,6 @@ package com.ruoyi.oss.properties; import lombok.Data; -import java.util.Date; - /** * OSS对象存储 配置属性 * @@ -47,9 +45,4 @@ public class OssProperties { */ private String isHttps; - /** - * 更新时间 - */ - private Date updateTime; - } From 65a1245a0330ef9908307ea70b1341702ed8842b 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, 22 Nov 2021 09:48:22 +0800 Subject: [PATCH 074/111] =?UTF-8?q?update=20OSS=20=E6=A8=A1=E5=9D=97=20?= =?UTF-8?q?=E6=95=B4=E4=BD=93=E9=87=8D=E5=91=BD=E5=90=8D=20=E6=B6=88?= =?UTF-8?q?=E9=99=A4=E6=AD=A7=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/web/controller/system/SysOssController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 6369115bb..013f319f0 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 @@ -16,7 +16,7 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.file.FileUtils; -import com.ruoyi.oss.constant.CloudConstant; +import com.ruoyi.oss.constant.OssConstant; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.domain.bo.SysOssBo; @@ -134,7 +134,7 @@ public class SysOssController extends BaseController { 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)); + .eq(SysConfig::getConfigKey, OssConstant.PEREVIEW_LIST_RESOURCE_KEY)); config.setConfigValue(map.get("previewListResource").toString()); return toAjax(iSysConfigService.updateConfig(config)); } From ef4bfde4a8d43e012ade7c3e8946f4c121fc578d Mon Sep 17 00:00:00 2001 From: RuoYi Date: Mon, 22 Nov 2021 18:06:44 +0800 Subject: [PATCH 075/111] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8F=90=E7=A4=BA?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ruoyi/quartz/config/ScheduleConfig.java | 2 +- ruoyi-ui/src/api/monitor/server.js | 2 +- .../src/components/RightToolbar/index.vue | 2 +- ruoyi-ui/src/plugins/tab.js | 4 +-- ruoyi-ui/src/views/login.vue | 8 +++-- .../src/views/monitor/logininfor/index.vue | 4 +-- ruoyi-ui/src/views/monitor/operlog/index.vue | 4 +-- ruoyi-ui/src/views/system/dept/index.vue | 6 ++-- ruoyi-ui/src/views/system/dict/data.vue | 2 +- ruoyi-ui/src/views/system/menu/index.vue | 35 ++++++++++--------- ruoyi-ui/src/views/system/role/index.vue | 3 +- ruoyi-ui/src/views/system/role/selectUser.vue | 4 +++ ruoyi-ui/src/views/system/user/index.vue | 3 +- .../views/system/user/profile/resetPwd.vue | 9 ++--- .../views/system/user/profile/userAvatar.vue | 4 +-- 15 files changed, 46 insertions(+), 46 deletions(-) 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 e466ed057..e35eb26e4 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 @@ -7,7 +7,7 @@ import javax.sql.DataSource; import java.util.Properties; /** - * 定时任务配置 + * 定时任务配置(单机部署建议删除此类和qrtz数据库表,默认走内存会最高效) * * @author ruoyi */ diff --git a/ruoyi-ui/src/api/monitor/server.js b/ruoyi-ui/src/api/monitor/server.js index 4991a4416..cac77916e 100644 --- a/ruoyi-ui/src/api/monitor/server.js +++ b/ruoyi-ui/src/api/monitor/server.js @@ -1,6 +1,6 @@ import request from '@/utils/request' -// 查询服务器详细 +// 获取服务信息 export function getServer() { return request({ url: '/monitor/server', diff --git a/ruoyi-ui/src/components/RightToolbar/index.vue b/ruoyi-ui/src/components/RightToolbar/index.vue index c7ab139d7..976974e4a 100644 --- a/ruoyi-ui/src/components/RightToolbar/index.vue +++ b/ruoyi-ui/src/components/RightToolbar/index.vue @@ -62,7 +62,7 @@ export default { }, // 右侧列表元素变化 dataChange(data) { - for (var item in this.columns) { + for (let item in this.columns) { const key = this.columns[item].key; this.columns[item].visible = !data.includes(key); } diff --git a/ruoyi-ui/src/plugins/tab.js b/ruoyi-ui/src/plugins/tab.js index f2d7b22b8..95a3848b6 100644 --- a/ruoyi-ui/src/plugins/tab.js +++ b/ruoyi-ui/src/plugins/tab.js @@ -20,8 +20,6 @@ export default { path: '/redirect' + path }) }) - - }, // 关闭当前tab页签,打开新页签 closeOpenPage(obj) { @@ -56,7 +54,7 @@ export default { return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute); }, // 添加tab页签 - addPage(title, url) { + openPage(title, url) { var obj = { path: url, meta: { title: title } } store.dispatch('tagsView/addView', obj); return router.push(url); diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue index 255eafca0..3baaf2432 100644 --- a/ruoyi-ui/src/views/login.vue +++ b/ruoyi-ui/src/views/login.vue @@ -3,7 +3,12 @@