From 41a3bdf73dc7fdbbbe69a9b943ff6f8552a463e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E8=BE=9E=E6=9C=AA=E5=AF=92?= <545073804@qq.com> Date: Thu, 2 Jan 2025 07:34:40 +0000 Subject: [PATCH 01/10] =?UTF-8?q?!629=20update=20=E4=BC=98=E5=8C=96jdk21?= =?UTF-8?q?=E7=8E=AF=E5=A2=83=E5=BC=80=E5=90=AF=E8=99=9A=E6=8B=9F=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=97=B6=E7=9A=84=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=B1=A0=20*=20update=20=E4=BC=98=E5=8C=96jdk21=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=BC=80=E5=90=AF=E8=99=9A=E6=8B=9F=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/config/ThreadPoolConfig.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java index b4d452817..7040330be 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java @@ -4,6 +4,7 @@ import jakarta.annotation.PreDestroy; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.dromara.common.core.config.properties.ThreadPoolProperties; +import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.Threads; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -13,6 +14,7 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; /** @@ -49,8 +51,23 @@ public class ThreadPoolConfig { */ @Bean(name = "scheduledExecutorService") protected ScheduledExecutorService scheduledExecutorService() { + ThreadFactory threadFactory; + // 是否启用虚拟线程 + if (SpringUtils.isVirtual()) { + // 虚拟线程必须为守护线程,即 daemon 只能是 true + threadFactory = new BasicThreadFactory.Builder() + .daemon(true) + .namingPattern("virtual-schedule-pool-%d") + .wrappedFactory(Thread.ofVirtual().factory()) + .build(); + } else { + threadFactory = new BasicThreadFactory.Builder() + .daemon(true) + .namingPattern("schedule-pool-%d") + .build(); + } ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(core, - new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + threadFactory, new ThreadPoolExecutor.CallerRunsPolicy()) { @Override protected void afterExecute(Runnable r, Throwable t) { From a46c798e017a0f6ce0ded81b6970bc9084d11957 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, 2 Jan 2025 15:42:24 +0800 Subject: [PATCH 02/10] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=E7=BA=BF=E7=A8=8B=E6=B1=A0=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E7=BA=BF=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/config/ThreadPoolConfig.java | 20 ++++++------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java index 7040330be..2630485a4 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/config/ThreadPoolConfig.java @@ -10,11 +10,11 @@ import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; +import org.springframework.core.task.VirtualThreadTaskExecutor; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; /** @@ -51,23 +51,15 @@ public class ThreadPoolConfig { */ @Bean(name = "scheduledExecutorService") protected ScheduledExecutorService scheduledExecutorService() { - ThreadFactory threadFactory; - // 是否启用虚拟线程 + // daemon 必须为 true + BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder().daemon(true); if (SpringUtils.isVirtual()) { - // 虚拟线程必须为守护线程,即 daemon 只能是 true - threadFactory = new BasicThreadFactory.Builder() - .daemon(true) - .namingPattern("virtual-schedule-pool-%d") - .wrappedFactory(Thread.ofVirtual().factory()) - .build(); + builder.namingPattern("virtual-schedule-pool-%d").wrappedFactory(new VirtualThreadTaskExecutor().getVirtualThreadFactory()); } else { - threadFactory = new BasicThreadFactory.Builder() - .daemon(true) - .namingPattern("schedule-pool-%d") - .build(); + builder.namingPattern("schedule-pool-%d"); } ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(core, - threadFactory, + builder.build(), new ThreadPoolExecutor.CallerRunsPolicy()) { @Override protected void afterExecute(Runnable r, Throwable t) { From ec5ca0a08faaf6e69f83d292b3ec909294a7dc39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=8B=E8=BE=9E=E6=9C=AA=E5=AF=92?= <545073804@qq.com> Date: Fri, 3 Jan 2025 01:44:39 +0000 Subject: [PATCH 03/10] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20redisson?= =?UTF-8?q?=E5=8F=91=E5=8F=B7=E5=99=A8=E6=9C=AA=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E5=8F=91=E5=8F=B7=E5=99=A8=E6=AD=A5=E9=95=BF=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=E6=97=B6=E9=97=B4=E6=9C=AA=E7=94=9F=E6=95=88?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 秋辞未寒 <545073804@qq.com> --- .../java/org/dromara/common/redis/utils/SequenceUtils.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java index 3c2f70329..e28c84e89 100644 --- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java +++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/utils/SequenceUtils.java @@ -59,10 +59,10 @@ public class SequenceUtils { stepValue = DEFAULT_STEP_VALUE; } RIdGenerator idGenerator = REDISSON_CLIENT.getIdGenerator(key); - // 设置过期时间 - idGenerator.expire(expireTime); // 设置初始值和步长 idGenerator.tryInit(initValue, stepValue); + // 设置过期时间 + idGenerator.expire(expireTime); return idGenerator; } From d023510f7e4dc71de2f5c0832409471f9cf087d4 Mon Sep 17 00:00:00 2001 From: dhb52 Date: Fri, 3 Jan 2025 07:13:22 +0000 Subject: [PATCH 04/10] !632 update snailjob 1.2.0 => 1.3.0-beta1 * update snailjob 1.2.0 => 1.3.0-beta1 --- README.md | 4 +- pom.xml | 2 +- .../src/main/resources/application-dev.yml | 6 ++- .../src/main/resources/application-prod.yml | 6 ++- .../src/main/resources/application-dev.yml | 7 ++- .../src/main/resources/application-prod.yml | 7 ++- script/sql/oracle/oracle_ry_job.sql | 18 +++++--- script/sql/postgres/postgres_ry_job.sql | 18 +++++--- script/sql/ry_job.sql | 10 +++-- script/sql/sqlserver/sqlserver_ry_job.sql | 45 ++++++++++++++++--- 10 files changed, 92 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 7a8864116..96708e355 100644 --- a/README.md +++ b/README.md @@ -169,8 +169,8 @@ CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow
| ![输入图片说明](https://foruda.gitee.com/images/1680078779416197879/75e3ed02_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078802329118061/77e10915_1766278.png "屏幕截图") | | ![输入图片说明](https://foruda.gitee.com/images/1680078893627848351/34a1c342_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078928175016986/f126ec4a_1766278.png "屏幕截图") | | ![输入图片说明](https://foruda.gitee.com/images/1680078941718318363/b68a0f72_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680078963175518631/3bb769a1_1766278.png "屏幕截图") | -| ![输入图片说明](https://foruda.gitee.com/images/1680078982294090567/b31c343d_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079000642440444/77ca82a9_1766278.png "屏幕截图") | -| ![输入图片说明](https://foruda.gitee.com/images/1680079020995074177/03b7d52e_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079039367822173/76811806_1766278.png "屏幕截图") | +| ![输入图片说明](https://foruda.gitee.com/images/1735829153637063344/3c21fd4c_1419627.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1735829181303499815/4522cefa_1419627.png "屏幕截图") | +| ![输入图片说明](https://foruda.gitee.com/images/1735829377205259767/76a705d7_1419627.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1722959592856812900/e2d0d342_1419627.png "屏幕截图") | | ![输入图片说明](https://foruda.gitee.com/images/1680079274333484664/4dfdc7c0_1766278.png "屏幕截图") | ![输入图片说明](https://foruda.gitee.com/images/1680079290467458224/d6715fcf_1766278.png "屏幕截图") | diff --git a/pom.xml b/pom.xml index ebf2814ed..63b9d0226 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ 3.39.0 2.2.7 4.3.1 - 1.2.0 + 1.3.0-beta1 1.4.5 0.2.0 1.18.34 diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index e4f6086cc..685708316 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -16,17 +16,19 @@ snail-job: enabled: true # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 group: "ruoyi_group" - # SnailJob 接入验证令牌 详见 script/sql/snail_job.sql `sj_group_config` 表 + # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config` 表 token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" server: host: 127.0.0.1 port: 17888 - # 详见 script/sql/snail_job.sql `sj_namespace` 表 + # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 namespace: ${spring.profiles.active} # 随主应用端口飘逸 port: 2${server.port} # 客户端ip指定 host: + # RPC类型: netty, grpc + rpc-type: grpc --- # 数据源配置 spring: diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 2002e9eee..a8c54bcb6 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -19,17 +19,19 @@ snail-job: enabled: true # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 group: "ruoyi_group" - # SnailJob 接入验证令牌 详见 script/sql/snail_job.sql `sj_group_config` 表 + # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config`表 token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" server: host: 127.0.0.1 port: 17888 - # 详见 script/sql/snail_job.sql `sj_namespace` 表 + # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 namespace: ${spring.profiles.active} # 随主应用端口飘逸 port: 2${server.port} # 客户端ip指定 host: + # RPC类型: netty, grpc + rpc-type: grpc --- # 数据源配置 spring: diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml index 579f376db..44f298aba 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml +++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml @@ -20,8 +20,8 @@ snail-job: retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小 job-pull-page-size: 1000 - # 服务端netty端口 - netty-port: 17888 + # 服务器端口 + server-port: 17888 # 一个客户端每秒最多接收的重试数量指令 limiter: 1000 # 号段模式下步长配置 @@ -34,7 +34,10 @@ snail-job: max-count: 288 #间隔时间 trigger-interval: 900 + # 重试每次拉取的次数 retry-max-pull-count: 10 + # RPC通讯类型: netty,grpc + rpc-type: grpc --- # 监控中心配置 spring.boot.admin.client: diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml index dffe05777..44f298aba 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml +++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-prod.yml @@ -20,8 +20,8 @@ snail-job: retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小 job-pull-page-size: 1000 - # 服务端 netty 端口 - netty-port: 17888 + # 服务器端口 + server-port: 17888 # 一个客户端每秒最多接收的重试数量指令 limiter: 1000 # 号段模式下步长配置 @@ -34,7 +34,10 @@ snail-job: max-count: 288 #间隔时间 trigger-interval: 900 + # 重试每次拉取的次数 retry-max-pull-count: 10 + # RPC通讯类型: netty,grpc + rpc-type: grpc --- # 监控中心配置 spring.boot.admin.client: diff --git a/script/sql/oracle/oracle_ry_job.sql b/script/sql/oracle/oracle_ry_job.sql index da65dbbf6..c2dbbfa52 100644 --- a/script/sql/oracle/oracle_ry_job.sql +++ b/script/sql/oracle/oracle_ry_job.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : Oracle - Date: 2024-07-06 12:49:36 + Date: 2024-12-27 22:22:15 */ @@ -82,7 +82,7 @@ CREATE TABLE sj_notify_config id number GENERATED ALWAYS AS IDENTITY, namespace_id varchar2(64) DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' NULL, group_name varchar2(64) NULL, - business_id varchar2(64) NULL, + notify_name varchar2(64) DEFAULT '' NULL, system_task_type smallint DEFAULT 3 NOT NULL, notify_status smallint DEFAULT 0 NOT NULL, recipient_ids varchar2(128) NULL, @@ -98,12 +98,12 @@ CREATE TABLE sj_notify_config ALTER TABLE sj_notify_config ADD CONSTRAINT pk_sj_notify_config PRIMARY KEY (id); -CREATE INDEX idx_sj_notify_config_01 ON sj_notify_config (namespace_id, group_name, business_id); +CREATE INDEX idx_sj_notify_config_01 ON sj_notify_config (namespace_id, group_name); COMMENT ON COLUMN sj_notify_config.id IS '主键'; COMMENT ON COLUMN sj_notify_config.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_notify_config.group_name IS '组名称'; -COMMENT ON COLUMN sj_notify_config.business_id IS '业务id ( job_id或workflow_id或scene_name ) '; +COMMENT ON COLUMN sj_notify_config.notify_name IS '通知名称'; COMMENT ON COLUMN sj_notify_config.system_task_type IS '任务类型 1. 重试任务 2. 重试回调 3、JOB任务 4、WORKFLOW任务'; COMMENT ON COLUMN sj_notify_config.notify_status IS '通知状态 0、未启用 1、启用'; COMMENT ON COLUMN sj_notify_config.recipient_ids IS '接收人id列表'; @@ -321,6 +321,7 @@ CREATE TABLE sj_retry_scene_config max_retry_count number DEFAULT 5 NOT NULL, back_off smallint DEFAULT 1 NOT NULL, trigger_interval varchar2(16) DEFAULT '' NULL, + notify_ids varchar2(128) DEFAULT '' NULL, deadline_request number DEFAULT 60000 NOT NULL, executor_timeout number DEFAULT 5 NOT NULL, route_key smallint DEFAULT 4 NOT NULL, @@ -342,6 +343,7 @@ COMMENT ON COLUMN sj_retry_scene_config.scene_status IS '组状态 0、未启用 COMMENT ON COLUMN sj_retry_scene_config.max_retry_count IS '最大重试次数'; COMMENT ON COLUMN sj_retry_scene_config.back_off IS '1、默认等级 2、固定间隔时间 3、CRON 表达式'; COMMENT ON COLUMN sj_retry_scene_config.trigger_interval IS '间隔时长'; +COMMENT ON COLUMN sj_retry_scene_config.notify_ids IS '通知告警场景配置id列表'; COMMENT ON COLUMN sj_retry_scene_config.deadline_request IS 'Deadline Request 调用链超时 单位毫秒'; COMMENT ON COLUMN sj_retry_scene_config.executor_timeout IS '任务执行超时时间,单位秒'; COMMENT ON COLUMN sj_retry_scene_config.route_key IS '路由策略'; @@ -506,6 +508,8 @@ CREATE TABLE sj_job retry_interval number DEFAULT 0 NOT NULL, bucket_index number DEFAULT 0 NOT NULL, resident smallint DEFAULT 0 NOT NULL, + notify_ids varchar2(128) DEFAULT '' NULL, + owner_id number NULL, description varchar2(256) DEFAULT '' NULL, ext_attrs varchar2(256) DEFAULT '' NULL, deleted smallint DEFAULT 0 NOT NULL, @@ -541,6 +545,8 @@ COMMENT ON COLUMN sj_job.parallel_num IS '并行数'; COMMENT ON COLUMN sj_job.retry_interval IS '重试间隔 ( s ) '; COMMENT ON COLUMN sj_job.bucket_index IS 'bucket'; COMMENT ON COLUMN sj_job.resident IS '是否是常驻任务'; +COMMENT ON COLUMN sj_job.notify_ids IS '通知告警场景配置id列表'; +COMMENT ON COLUMN sj_job.owner_id IS '负责人id'; COMMENT ON COLUMN sj_job.description IS '描述'; COMMENT ON COLUMN sj_job.ext_attrs IS '扩展字段'; COMMENT ON COLUMN sj_job.deleted IS '逻辑删除 1、删除'; @@ -548,7 +554,7 @@ COMMENT ON COLUMN sj_job.create_dt IS '创建时间'; COMMENT ON COLUMN sj_job.update_dt IS '修改时间'; COMMENT ON TABLE sj_job IS '任务信息'; -INSERT INTO sj_job(namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy,executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, description, ext_attrs, deleted, create_dt, update_dt) VALUES ('dev', 'ruoyi_group', 'demo-job', NULL, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', 0, sysdate, sysdate); +INSERT INTO sj_job(namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy,executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, notify_ids, owner_id, description, ext_attrs, deleted, create_dt, update_dt) VALUES ('dev', 'ruoyi_group', 'demo-job', NULL, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', 1,'', '', 0, sysdate, sysdate); -- sj_job_log_message CREATE TABLE sj_job_log_message @@ -781,6 +787,7 @@ CREATE TABLE sj_workflow description varchar2(256) DEFAULT '' NULL, flow_info clob DEFAULT NULL NULL, wf_context clob DEFAULT NULL NULL, + notify_ids varchar2(128) DEFAULT '' NULL, bucket_index number DEFAULT 0 NOT NULL, version number NOT NULL, ext_attrs varchar2(256) DEFAULT '' NULL, @@ -808,6 +815,7 @@ COMMENT ON COLUMN sj_workflow.executor_timeout IS '任务执行超时时间, COMMENT ON COLUMN sj_workflow.description IS '描述'; COMMENT ON COLUMN sj_workflow.flow_info IS '流程信息'; COMMENT ON COLUMN sj_workflow.wf_context IS '上下文'; +COMMENT ON COLUMN sj_workflow.notify_ids IS '通知告警场景配置id列表'; COMMENT ON COLUMN sj_workflow.bucket_index IS 'bucket'; COMMENT ON COLUMN sj_workflow.version IS '版本号'; COMMENT ON COLUMN sj_workflow.ext_attrs IS '扩展字段'; diff --git a/script/sql/postgres/postgres_ry_job.sql b/script/sql/postgres/postgres_ry_job.sql index 546db3cc8..1a08a9990 100644 --- a/script/sql/postgres/postgres_ry_job.sql +++ b/script/sql/postgres/postgres_ry_job.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : PostgreSQL - Date: 2024-07-06 11:45:40 + Date: 2024-12-27 22:13:49 */ @@ -76,7 +76,7 @@ CREATE TABLE sj_notify_config id bigserial PRIMARY KEY, namespace_id varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name varchar(64) NOT NULL, - business_id varchar(64) NOT NULL, + notify_name varchar(64) NOT NULL DEFAULT '', system_task_type smallint NOT NULL DEFAULT 3, notify_status smallint NOT NULL DEFAULT 0, recipient_ids varchar(128) NOT NULL, @@ -89,12 +89,12 @@ CREATE TABLE sj_notify_config update_dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ); -CREATE INDEX idx_sj_notify_config_01 ON sj_notify_config (namespace_id, group_name, business_id); +CREATE INDEX idx_sj_notify_config_01 ON sj_notify_config (namespace_id, group_name); COMMENT ON COLUMN sj_notify_config.id IS '主键'; COMMENT ON COLUMN sj_notify_config.namespace_id IS '命名空间id'; COMMENT ON COLUMN sj_notify_config.group_name IS '组名称'; -COMMENT ON COLUMN sj_notify_config.business_id IS '业务id ( job_id或workflow_id或scene_name ) '; +COMMENT ON COLUMN sj_notify_config.notify_name IS '通知名称'; COMMENT ON COLUMN sj_notify_config.system_task_type IS '任务类型 1. 重试任务 2. 重试回调 3、JOB任务 4、WORKFLOW任务'; COMMENT ON COLUMN sj_notify_config.notify_status IS '通知状态 0、未启用 1、启用'; COMMENT ON COLUMN sj_notify_config.recipient_ids IS '接收人id列表'; @@ -297,6 +297,7 @@ CREATE TABLE sj_retry_scene_config max_retry_count int NOT NULL DEFAULT 5, back_off smallint NOT NULL DEFAULT 1, trigger_interval varchar(16) NOT NULL DEFAULT '', + notify_ids varchar(128) NOT NULL DEFAULT '', deadline_request bigint NOT NULL DEFAULT 60000, executor_timeout int NOT NULL DEFAULT 5, route_key smallint NOT NULL DEFAULT 4, @@ -315,6 +316,7 @@ COMMENT ON COLUMN sj_retry_scene_config.scene_status IS '组状态 0、未启用 COMMENT ON COLUMN sj_retry_scene_config.max_retry_count IS '最大重试次数'; COMMENT ON COLUMN sj_retry_scene_config.back_off IS '1、默认等级 2、固定间隔时间 3、CRON 表达式'; COMMENT ON COLUMN sj_retry_scene_config.trigger_interval IS '间隔时长'; +COMMENT ON COLUMN sj_retry_scene_config.notify_ids IS '通知告警场景配置id列表'; COMMENT ON COLUMN sj_retry_scene_config.deadline_request IS 'Deadline Request 调用链超时 单位毫秒'; COMMENT ON COLUMN sj_retry_scene_config.executor_timeout IS '任务执行超时时间,单位秒'; COMMENT ON COLUMN sj_retry_scene_config.route_key IS '路由策略'; @@ -464,6 +466,8 @@ CREATE TABLE sj_job retry_interval int NOT NULL DEFAULT 0, bucket_index int NOT NULL DEFAULT 0, resident smallint NOT NULL DEFAULT 0, + notify_ids varchar(128) NOT NULL DEFAULT '', + owner_id bigint NULL, description varchar(256) NOT NULL DEFAULT '', ext_attrs varchar(256) NULL DEFAULT '', deleted smallint NOT NULL DEFAULT 0, @@ -496,6 +500,8 @@ COMMENT ON COLUMN sj_job.parallel_num IS '并行数'; COMMENT ON COLUMN sj_job.retry_interval IS '重试间隔 ( s ) '; COMMENT ON COLUMN sj_job.bucket_index IS 'bucket'; COMMENT ON COLUMN sj_job.resident IS '是否是常驻任务'; +COMMENT ON COLUMN sj_job.notify_ids IS '通知告警场景配置id列表'; +COMMENT ON COLUMN sj_job.owner_id IS '负责人id'; COMMENT ON COLUMN sj_job.description IS '描述'; COMMENT ON COLUMN sj_job.ext_attrs IS '扩展字段'; COMMENT ON COLUMN sj_job.deleted IS '逻辑删除 1、删除'; @@ -503,7 +509,7 @@ COMMENT ON COLUMN sj_job.create_dt IS '创建时间'; COMMENT ON COLUMN sj_job.update_dt IS '修改时间'; COMMENT ON TABLE sj_job IS '任务信息'; -INSERT INTO sj_job VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', 0, now(), now()); +INSERT INTO sj_job VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', 1, '', '', 0, now(), now()); -- sj_job_log_message CREATE TABLE sj_job_log_message @@ -721,6 +727,7 @@ CREATE TABLE sj_workflow description varchar(256) NOT NULL DEFAULT '', flow_info text NULL DEFAULT NULL, wf_context text NULL DEFAULT NULL, + notify_ids varchar(128) NOT NULL DEFAULT '', bucket_index int NOT NULL DEFAULT 0, version int NOT NULL, ext_attrs varchar(256) NULL DEFAULT '', @@ -745,6 +752,7 @@ COMMENT ON COLUMN sj_workflow.executor_timeout IS '任务执行超时时间, COMMENT ON COLUMN sj_workflow.description IS '描述'; COMMENT ON COLUMN sj_workflow.flow_info IS '流程信息'; COMMENT ON COLUMN sj_workflow.wf_context IS '上下文'; +COMMENT ON COLUMN sj_workflow.notify_ids IS '通知告警场景配置id列表'; COMMENT ON COLUMN sj_workflow.bucket_index IS 'bucket'; COMMENT ON COLUMN sj_workflow.version IS '版本号'; COMMENT ON COLUMN sj_workflow.ext_attrs IS '扩展字段'; diff --git a/script/sql/ry_job.sql b/script/sql/ry_job.sql index 396798ee0..c6ec01b45 100644 --- a/script/sql/ry_job.sql +++ b/script/sql/ry_job.sql @@ -47,7 +47,7 @@ CREATE TABLE `sj_notify_config` `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', - `business_id` varchar(64) NOT NULL COMMENT '业务id (job_id或workflow_id或scene_name)', + `notify_name` varchar(64) NOT NULL DEFAULT '' COMMENT '通知名称', `system_task_type` tinyint(4) NOT NULL DEFAULT 3 COMMENT '任务类型 1. 重试任务 2. 重试回调 3、JOB任务 4、WORKFLOW任务', `notify_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '通知状态 0、未启用 1、启用', `recipient_ids` varchar(128) NOT NULL COMMENT '接收人id列表', @@ -59,7 +59,7 @@ CREATE TABLE `sj_notify_config` `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), - KEY `idx_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`, `business_id`) + KEY `idx_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`) ) ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='通知配置'; @@ -188,6 +188,7 @@ CREATE TABLE `sj_retry_scene_config` `max_retry_count` int(11) NOT NULL DEFAULT 5 COMMENT '最大重试次数', `back_off` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1、默认等级 2、固定间隔时间 3、CRON 表达式', `trigger_interval` varchar(16) NOT NULL DEFAULT '' COMMENT '间隔时长', + `notify_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '通知告警场景配置id列表', `deadline_request` bigint(20) unsigned NOT NULL DEFAULT 60000 COMMENT 'Deadline Request 调用链超时 单位毫秒', `executor_timeout` int(11) unsigned NOT NULL DEFAULT 5 COMMENT '任务执行超时时间,单位秒', `route_key` tinyint(4) NOT NULL DEFAULT 4 COMMENT '路由策略', @@ -300,6 +301,8 @@ CREATE TABLE `sj_job` `retry_interval` int(11) NOT NULL DEFAULT 0 COMMENT '重试间隔(s)', `bucket_index` int(11) NOT NULL DEFAULT 0 COMMENT 'bucket', `resident` tinyint(4) NOT NULL DEFAULT 0 COMMENT '是否是常驻任务', + `notify_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '通知告警场景配置id列表', + `owner_id` bigint(20) NULL COMMENT '负责人id', `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述', `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段', `deleted` tinyint(4) NOT NULL DEFAULT 0 COMMENT '逻辑删除 1、删除', @@ -313,7 +316,7 @@ CREATE TABLE `sj_job` AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='任务信息'; -INSERT INTO `sj_job` VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', '', 0 , now(), now()); +INSERT INTO `sj_job` VALUES (1, 'dev', 'ruoyi_group', 'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, 'testJobExecutor', 2, '60', 1, 60, 3, 1, 1, 116, 0, '', 1, '', '', 0 , now(), now()); CREATE TABLE `sj_job_log_message` ( @@ -451,6 +454,7 @@ CREATE TABLE `sj_workflow` `description` varchar(256) NOT NULL DEFAULT '' COMMENT '描述', `flow_info` text DEFAULT NULL COMMENT '流程信息', `wf_context` text DEFAULT NULL COMMENT '上下文', + `notify_ids` varchar(128) NOT NULL DEFAULT '' COMMENT '通知告警场景配置id列表', `bucket_index` int(11) NOT NULL DEFAULT 0 COMMENT 'bucket', `version` int(11) NOT NULL COMMENT '版本号', `ext_attrs` varchar(256) NULL DEFAULT '' COMMENT '扩展字段', diff --git a/script/sql/sqlserver/sqlserver_ry_job.sql b/script/sql/sqlserver/sqlserver_ry_job.sql index bcf87f668..97addc3aa 100644 --- a/script/sql/sqlserver/sqlserver_ry_job.sql +++ b/script/sql/sqlserver/sqlserver_ry_job.sql @@ -2,7 +2,7 @@ SnailJob Database Transfer Tool Source Server Type : MySQL Target Server Type : Microsoft SQL Server - Date: 2024-07-06 12:55:47 + Date: 2024-12-27 22:24:37 */ @@ -212,7 +212,7 @@ CREATE TABLE sj_notify_config id bigint NOT NULL PRIMARY KEY IDENTITY, namespace_id nvarchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a', group_name nvarchar(64) NOT NULL, - business_id nvarchar(64) NOT NULL, + notify_name nvarchar(64) NOT NULL DEFAULT '', system_task_type tinyint NOT NULL DEFAULT 3, notify_status tinyint NOT NULL DEFAULT 0, recipient_ids nvarchar(128) NOT NULL, @@ -226,7 +226,7 @@ CREATE TABLE sj_notify_config ) GO -CREATE INDEX idx_sj_notify_config_01 ON sj_notify_config (namespace_id, group_name, business_id) +CREATE INDEX idx_sj_notify_config_01 ON sj_notify_config (namespace_id, group_name) GO EXEC sp_addextendedproperty @@ -251,10 +251,10 @@ EXEC sp_addextendedproperty GO EXEC sp_addextendedproperty - 'MS_Description', N'业务id ( job_id或workflow_id或scene_name ) ', + 'MS_Description', N'通知名称', 'SCHEMA', N'dbo', 'TABLE', N'sj_notify_config', - 'COLUMN', N'business_id' + 'COLUMN', N'notify_name' GO EXEC sp_addextendedproperty @@ -917,6 +917,7 @@ CREATE TABLE sj_retry_scene_config max_retry_count int NOT NULL DEFAULT 5, back_off tinyint NOT NULL DEFAULT 1, trigger_interval nvarchar(16) NOT NULL DEFAULT '', + notify_ids nvarchar(128) NOT NULL DEFAULT '', deadline_request bigint NOT NULL DEFAULT 60000, executor_timeout int NOT NULL DEFAULT 5, route_key tinyint NOT NULL DEFAULT 4, @@ -985,6 +986,13 @@ EXEC sp_addextendedproperty 'COLUMN', N'trigger_interval' GO +EXEC sp_addextendedproperty + 'MS_Description', N'通知告警场景配置id列表', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_retry_scene_config', + 'COLUMN', N'notify_ids' +GO + EXEC sp_addextendedproperty 'MS_Description', N'Deadline Request 调用链超时 单位毫秒', 'SCHEMA', N'dbo', @@ -1415,6 +1423,8 @@ CREATE TABLE sj_job retry_interval int NOT NULL DEFAULT 0, bucket_index int NOT NULL DEFAULT 0, resident tinyint NOT NULL DEFAULT 0, + notify_ids nvarchar(128) NOT NULL DEFAULT '', + owner_id bigint NULL, description nvarchar(256) NOT NULL DEFAULT '', ext_attrs nvarchar(256) NULL DEFAULT '', deleted tinyint NOT NULL DEFAULT 0, @@ -1577,6 +1587,20 @@ EXEC sp_addextendedproperty 'COLUMN', N'resident' GO +EXEC sp_addextendedproperty + 'MS_Description', N'通知告警场景配置id列表', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_job', + 'COLUMN', N'notify_ids' +GO + +EXEC sp_addextendedproperty + 'MS_Description', N'负责人id', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_job', + 'COLUMN', N'owner_id' +GO + EXEC sp_addextendedproperty 'MS_Description', N'描述', 'SCHEMA', N'dbo', @@ -1618,7 +1642,7 @@ EXEC sp_addextendedproperty 'TABLE', N'sj_job' GO -INSERT INTO sj_job (namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy,executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, description, ext_attrs, deleted, create_dt, update_dt) VALUES (N'dev', N'ruoyi_group', N'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, N'testJobExecutor', 2, N'60', 1, 60, 3, 1, 1, 116, 0, N'', N'', 0, getdate(), getdate()) +INSERT INTO sj_job (namespace_id, group_name, job_name, args_str, args_type, next_trigger_at, job_status, task_type, route_key, executor_type, executor_info, trigger_type, trigger_interval, block_strategy,executor_timeout, max_retry_times, parallel_num, retry_interval, bucket_index, resident, notify_ids, owner_id, description, ext_attrs, deleted, create_dt, update_dt) VALUES (N'dev', N'ruoyi_group', N'demo-job', null, 1, 1710344035622, 1, 1, 4, 1, N'testJobExecutor', 2, N'60', 1, 60, 3, 1, 1, 116, 0, N'', 1, N'', N'', 0, getdate(), getdate()) GO -- sj_job_log_message @@ -2308,6 +2332,7 @@ CREATE TABLE sj_workflow description nvarchar(256) NOT NULL DEFAULT '', flow_info nvarchar(max) NULL DEFAULT NULL, wf_context nvarchar(max) NULL DEFAULT NULL, + notify_ids nvarchar(128) NOT NULL DEFAULT '', bucket_index int NOT NULL DEFAULT 0, version int NOT NULL, ext_attrs nvarchar(256) NULL DEFAULT '', @@ -2413,6 +2438,13 @@ EXEC sp_addextendedproperty 'COLUMN', N'wf_context' GO +EXEC sp_addextendedproperty + 'MS_Description', N'通知告警场景配置id列表', + 'SCHEMA', N'dbo', + 'TABLE', N'sj_workflow', + 'COLUMN', N'notify_ids' +GO + EXEC sp_addextendedproperty 'MS_Description', N'bucket', 'SCHEMA', N'dbo', @@ -2744,4 +2776,3 @@ EXEC sp_addextendedproperty 'SCHEMA', N'dbo', 'TABLE', N'sj_workflow_task_batch' GO - From 8bd2e27653dd3d1304166edb24d82c818608b052 Mon Sep 17 00:00:00 2001 From: dap <15891557205@163.com> Date: Sat, 4 Jan 2025 16:08:57 +0800 Subject: [PATCH 05/10] =?UTF-8?q?update:=20=E5=A2=9E=E5=8A=A0=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E9=80=89=E6=8B=A9=E6=8B=93=E5=B1=95=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/system/service/impl/SysMenuServiceImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java index 354d4b4d9..40643e13d 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysMenuServiceImpl.java @@ -242,11 +242,14 @@ public class SysMenuServiceImpl implements ISysMenuService { if (CollUtil.isEmpty(menus)) { return CollUtil.newArrayList(); } - return TreeBuildUtils.build(menus, (menu, tree) -> - tree.setId(menu.getMenuId()) + return TreeBuildUtils.build(menus, (menu, tree) -> { + Tree menuTree = tree.setId(menu.getMenuId()) .setParentId(menu.getParentId()) .setName(menu.getMenuName()) - .setWeight(menu.getOrderNum())); + .setWeight(menu.getOrderNum()); + menuTree.put("menuType", menu.getMenuType()); + menuTree.put("icon", menu.getIcon()); + }); } /** From 08e40b611b2bdc97361d4a6d753b788b83818623 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, 5 Jan 2025 23:00:56 +0800 Subject: [PATCH 06/10] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=9D=83=E9=99=90=20=E5=A4=9A=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E5=A4=9A=E6=B3=A8=E8=A7=A3=E5=8C=85=E5=90=AB=E5=BF=BD=E7=95=A5?= =?UTF-8?q?=E6=9D=83=E9=99=90=E6=A0=87=E8=AF=86=E7=AC=A6=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=B8=8D=E6=AD=A3=E7=A1=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/PlusDataPermissionHandler.java | 48 +++++++++++-------- 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java index 783d3526e..07baedb39 100644 --- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java +++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/PlusDataPermissionHandler.java @@ -135,6 +135,27 @@ public class PlusDataPermissionHandler { context.setBeanResolver(beanResolver); DataPermissionHelper.getContext().forEach(context::setVariable); Set conditions = new HashSet<>(); + // 优先设置变量 + List keys = new ArrayList<>(); + Map ignoreMap = new HashMap<>(); + for (DataColumn dataColumn : dataPermission.value()) { + if (dataColumn.key().length != dataColumn.value().length) { + throw new ServiceException("角色数据范围异常 => key与value长度不匹配"); + } + // 包含权限标识符 这直接跳过 + if (StringUtils.isNotBlank(dataColumn.permission()) && + CollUtil.contains(user.getMenuPermission(), dataColumn.permission()) + ) { + ignoreMap.put(dataColumn, Boolean.TRUE); + continue; + } + // 设置注解变量 key 为表达式变量 value 为变量值 + for (int i = 0; i < dataColumn.key().length; i++) { + context.setVariable(dataColumn.key()[i], dataColumn.value()[i]); + } + keys.addAll(Arrays.stream(dataColumn.key()).map(key -> "#" + key).toList()); + } + for (RoleDTO role : user.getRoles()) { user.setRoleId(role.getRoleId()); // 获取角色权限泛型 @@ -144,34 +165,21 @@ public class PlusDataPermissionHandler { } // 全部数据权限直接返回 if (type == DataScopeType.ALL) { - return ""; + return StringUtils.EMPTY; } boolean isSuccess = false; - List keys = new ArrayList<>(); for (DataColumn dataColumn : dataPermission.value()) { - if (dataColumn.key().length != dataColumn.value().length) { - throw new ServiceException("角色数据范围异常 => key与value长度不匹配"); - } - // 设置注解变量 key 为表达式变量 value 为变量值 - for (int i = 0; i < dataColumn.key().length; i++) { - context.setVariable(dataColumn.key()[i], dataColumn.value()[i]); - } - keys.addAll(Arrays.stream(dataColumn.key()).map(key -> "#" + key).toList()); - } - for (DataColumn dataColumn : dataPermission.value()) { - // 不包含 key 变量 则不处理 - if (!StringUtils.containsAny(type.getSqlTemplate(), keys.toArray(String[]::new))) { - continue; - } // 包含权限标识符 这直接跳过 - if (StringUtils.isNotBlank(dataColumn.permission()) && - CollUtil.contains(user.getMenuPermission(), dataColumn.permission()) - ) { + if (ignoreMap.containsKey(dataColumn)) { // 修复多角色与权限标识符共用问题 https://gitee.com/dromara/RuoYi-Vue-Plus/issues/IB4CS4 conditions.add(joinStr + " 1 = 1 "); isSuccess = true; continue; } + // 不包含 key 变量 则不处理 + if (!StringUtils.containsAny(type.getSqlTemplate(), keys.toArray(String[]::new))) { + continue; + } // 忽略数据权限 防止spel表达式内有其他sql查询导致死循环调用 String sql = DataPermissionHelper.ignore(() -> @@ -191,7 +199,7 @@ public class PlusDataPermissionHandler { String sql = StreamUtils.join(conditions, Function.identity(), ""); return sql.substring(joinStr.length()); } - return ""; + return StringUtils.EMPTY; } /** From 4de9fa33b7261081a47d8b3bc4ae437a026c9716 Mon Sep 17 00:00:00 2001 From: AprilWind <2100166581@qq.com> Date: Tue, 7 Jan 2025 05:23:27 +0800 Subject: [PATCH 07/10] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E9=83=A8=E9=97=A8=E4=BF=A1=E6=81=AF=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E4=BA=8B=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/system/service/impl/SysDeptServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 0199ec719..ca062bee6 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -31,6 +31,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Arrays; @@ -301,6 +302,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { @CacheEvict(cacheNames = CacheNames.SYS_DEPT_AND_CHILD, allEntries = true) }) @Override + @Transactional(rollbackFor = Exception.class) public int updateDept(SysDeptBo bo) { SysDept dept = MapstructUtils.convert(bo, SysDept.class); SysDept oldDept = baseMapper.selectById(dept.getDeptId()); From ad53965626f393e418a06b264a11550539419807 Mon Sep 17 00:00:00 2001 From: CoderKK Date: Tue, 7 Jan 2025 03:59:34 +0000 Subject: [PATCH 08/10] =?UTF-8?q?!634=20docs:=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E6=B3=A8=E9=87=8A=E9=94=99=E5=88=AB=E5=AD=97=20*=20do?= =?UTF-8?q?cs:=20=E4=BF=AE=E6=94=B9=E5=BA=94=E7=94=A8=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=AD=E7=9A=84=E6=B3=A8=E9=87=8A=E9=94=99?= =?UTF-8?q?=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/src/main/resources/application-dev.yml | 2 +- ruoyi-admin/src/main/resources/application-prod.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 685708316..6a804a947 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -23,7 +23,7 @@ snail-job: port: 17888 # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 namespace: ${spring.profiles.active} - # 随主应用端口飘逸 + # 随主应用端口漂移 port: 2${server.port} # 客户端ip指定 host: diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index a8c54bcb6..15f2c5243 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -26,7 +26,7 @@ snail-job: port: 17888 # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 namespace: ${spring.profiles.active} - # 随主应用端口飘逸 + # 随主应用端口漂移 port: 2${server.port} # 客户端ip指定 host: From 254e61ab019e7c6826b5811024b387dd495c2299 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, 7 Jan 2025 13:52:21 +0800 Subject: [PATCH 09/10] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20postgresql?= =?UTF-8?q?=E7=9A=84=E8=A1=A8=E5=85=83=E6=95=B0=E6=8D=AE=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=97=B6=E9=97=B4=E8=BF=99=E4=B8=AA=E4=B8=9C?= =?UTF-8?q?=E8=A5=BF(=E5=A5=BD=E5=A5=87=E8=91=A9)=20=E5=8F=AA=E8=83=BDnew?= =?UTF-8?q?=20Date=E4=BB=A3=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/generator/service/GenTableServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java index 7eb99eb59..acf5bf820 100644 --- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java +++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java @@ -162,7 +162,8 @@ public class GenTableServiceImpl implements IGenTableService { GenTable gen = new GenTable(); gen.setTableName(x.getName()); gen.setTableComment(x.getComment()); - gen.setCreateTime(x.getCreateTime()); + // postgresql的表元数据没有创建时间这个东西(好奇葩) 只能new Date代替 + gen.setCreateTime(ObjectUtil.defaultIfNull(x.getCreateTime(), new Date())); gen.setUpdateTime(x.getUpdateTime()); return gen; }).sorted(Comparator.comparing(GenTable::getCreateTime).reversed()) From 820db87604a8a21db5a84ed3fc9334c0c2a41f5a 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, 8 Jan 2025 10:57:14 +0800 Subject: [PATCH 10/10] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BD=BF?= =?UTF-8?q?=E7=94=A8request=E5=AD=98=E5=82=A8=E5=8A=A8=E6=80=81=E7=A7=9F?= =?UTF-8?q?=E6=88=B7=20=E9=81=BF=E5=85=8D=E5=8D=95=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E5=A4=9A=E6=AC=A1=E6=9F=A5=E8=AF=A2redis=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/common/tenant/helper/TenantHelper.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java index 1a5ea1a76..74c31107d 100644 --- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java +++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/helper/TenantHelper.java @@ -5,10 +5,12 @@ import cn.hutool.core.convert.Convert; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.plugins.IgnoreStrategy; import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper; +import jakarta.servlet.http.HttpServletRequest; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.GlobalConstants; +import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.reflect.ReflectUtils; @@ -135,6 +137,7 @@ public class TenantHelper { } String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); RedisUtils.setCacheObject(cacheKey, tenantId); + ServletUtils.getRequest().setAttribute(cacheKey, tenantId); } /** @@ -154,8 +157,15 @@ public class TenantHelper { if (StringUtils.isNotBlank(tenantId)) { return tenantId; } + HttpServletRequest request = ServletUtils.getRequest(); String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); + tenantId = (String) request.getAttribute(cacheKey); + // 如果为 -1 说明已经查过redis并且不存在值 则直接返回null + if (StringUtils.isNotBlank(tenantId)) { + return tenantId.equals("-1") ? null : tenantId; + } tenantId = RedisUtils.getCacheObject(cacheKey); + request.setAttribute(cacheKey, StringUtils.isBlank(tenantId) ? "-1" : tenantId); return tenantId; } @@ -173,6 +183,7 @@ public class TenantHelper { TEMP_DYNAMIC_TENANT.remove(); String cacheKey = DYNAMIC_TENANT_KEY + ":" + LoginHelper.getUserId(); RedisUtils.deleteObject(cacheKey); + ServletUtils.getRequest().removeAttribute(cacheKey); } /**