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
|  |  |
|  |  |
|  |  |
-|  |  |
-|  |  |
+|  |  |
+|  |  |
|  |  |
diff --git a/pom.xml b/pom.xml
index cc06308cf..2993af438 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..6a804a947 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..15f2c5243 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-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..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
@@ -4,11 +4,13 @@ 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;
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;
@@ -49,8 +51,15 @@ public class ThreadPoolConfig {
*/
@Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService() {
+ // daemon 必须为 true
+ BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder().daemon(true);
+ if (SpringUtils.isVirtual()) {
+ builder.namingPattern("virtual-schedule-pool-%d").wrappedFactory(new VirtualThreadTaskExecutor().getVirtualThreadFactory());
+ } else {
+ builder.namingPattern("schedule-pool-%d");
+ }
ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(core,
- new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
+ builder.build(),
new ThreadPoolExecutor.CallerRunsPolicy()) {
@Override
protected void afterExecute(Runnable r, Throwable t) {
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;
}
/**
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;
}
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);
}
/**
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/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 c4cdda35a..424dda9d7 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())
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());
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());
+ });
}
/**
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
-