From a28f05c145fed9c3cfb5e58911a414397d507c07 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: Sat, 31 May 2025 00:08:14 +0800
Subject: [PATCH 01/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=9C=B0?=
=?UTF-8?q?=E5=9D=80=E8=A7=A3=E6=9E=90=E5=B7=A5=E5=85=B7=E7=B1=BB=E6=8A=A5?=
=?UTF-8?q?=E9=94=99#ICBHUQ?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/common/core/utils/NetUtils.java | 84 +++++++++++++++++++
.../common/core/utils/ip/AddressUtils.java | 53 ++++++++++--
2 files changed, 129 insertions(+), 8 deletions(-)
create mode 100644 ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/NetUtils.java
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/NetUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/NetUtils.java
new file mode 100644
index 000000000..72fdf4033
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/NetUtils.java
@@ -0,0 +1,84 @@
+package org.dromara.common.core.utils;
+
+import cn.hutool.core.lang.PatternPool;
+import cn.hutool.core.net.NetUtil;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.utils.regex.RegexUtils;
+
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
+/**
+ * 增强网络相关工具类
+ *
+ * @author 秋辞未寒
+ */
+@Slf4j
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public class NetUtils extends NetUtil {
+
+ /**
+ * 判断是否为IPv6地址
+ *
+ * @param ip IP地址
+ * @return 是否为IPv6地址
+ */
+ public static boolean isIPv6(String ip) {
+ try {
+ // 判断是否为IPv6地址
+ return InetAddress.getByName(ip) instanceof Inet6Address;
+ } catch (UnknownHostException e) {
+ return false;
+ }
+ }
+
+ /**
+ * 判断IPv6地址是否为内网地址
+ *
+ * 以下地址将归类为本地地址,如有业务场景有需要,请根据需求自行处理:
+ *
+ * 通配符地址 0:0:0:0:0:0:0:0
+ * 链路本地地址 fe80::/10
+ * 唯一本地地址 fec0::/10
+ * 环回地址 ::1
+ *
+ *
+ * @param ip IP地址
+ * @return 是否为内网地址
+ */
+ public static boolean isInnerIPv6(String ip) {
+ try {
+ // 判断是否为IPv6地址
+ if (InetAddress.getByName(ip) instanceof Inet6Address inet6Address) {
+ // isAnyLocalAddress 判断是否为通配符地址,通常不会将其视为内网地址,根据业务场景自行处理判断
+ // isLinkLocalAddress 判断是否为链路本地地址,通常不算内网地址,是否划分归属于内网需要根据业务场景自行处理判断
+ // isLoopbackAddress 判断是否为环回地址,与IPv4的 127.0.0.1 同理,用于表示本机
+ // isSiteLocalAddress 判断是否为本地站点地址,IPv6唯一本地地址(Unique Local Addresses,简称ULA)
+ if (inet6Address.isAnyLocalAddress()
+ || inet6Address.isLinkLocalAddress()
+ || inet6Address.isLoopbackAddress()
+ || inet6Address.isSiteLocalAddress()) {
+ return true;
+ }
+ }
+ } catch (UnknownHostException e) {
+ // 注意,isInnerIPv6方法和isIPv6方法的适用范围不同,所以此处不能忽略其异常信息。
+ throw new IllegalArgumentException("Invalid IPv6 address!", e);
+ }
+ return false;
+ }
+
+ /**
+ * 判断是否为IPv4地址
+ *
+ * @param ip IP地址
+ * @return 是否为IPv4地址
+ */
+ public static boolean isIPv4(String ip) {
+ return RegexUtils.isMatch(PatternPool.IPV4, ip);
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ip/AddressUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ip/AddressUtils.java
index 3f7cd57a9..2fe3bd7b6 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ip/AddressUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/ip/AddressUtils.java
@@ -1,11 +1,11 @@
package org.dromara.common.core.utils.ip;
-import cn.hutool.core.net.NetUtil;
import cn.hutool.http.HtmlUtil;
-import org.dromara.common.core.utils.StringUtils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.utils.NetUtils;
+import org.dromara.common.core.utils.StringUtils;
/**
* 获取地址类
@@ -16,18 +16,55 @@ import lombok.extern.slf4j.Slf4j;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class AddressUtils {
+ // 未知IP
+ public static final String UNKNOWN_IP = "XX XX";
+ // 内网地址
+ public static final String LOCAL_ADDRESS = "内网IP";
// 未知地址
- public static final String UNKNOWN = "XX XX";
+ public static final String UNKNOWN_ADDRESS = "未知";
public static String getRealAddressByIP(String ip) {
- if (StringUtils.isBlank(ip)) {
- return UNKNOWN;
+ // 处理空串并过滤HTML标签
+ ip = HtmlUtil.cleanHtmlTag(StringUtils.blankToDefault(ip,""));
+ // 判断是否为IPv4
+ if (NetUtils.isIPv4(ip)) {
+ return resolverIPv4Region(ip);
}
+ // 判断是否为IPv6
+ if (NetUtils.isIPv6(ip)) {
+ return resolverIPv6Region(ip);
+ }
+ // 如果不是IPv4或IPv6,则返回未知IP
+ return UNKNOWN_IP;
+ }
+
+ /**
+ * 根据IPv4地址查询IP归属行政区域
+ * @param ip ipv4地址
+ * @return 归属行政区域
+ */
+ private static String resolverIPv4Region(String ip){
// 内网不查询
- ip = StringUtils.contains(ip, "0:0:0:0:0:0:0:1") ? "127.0.0.1" : HtmlUtil.cleanHtmlTag(ip);
- if (NetUtil.isInnerIP(ip)) {
- return "内网IP";
+ if (NetUtils.isInnerIP(ip)) {
+ return LOCAL_ADDRESS;
}
return RegionUtils.getCityInfo(ip);
}
+
+ /**
+ * 根据IPv6地址查询IP归属行政区域
+ * @param ip ipv6地址
+ * @return 归属行政区域
+ */
+ private static String resolverIPv6Region(String ip){
+ // 内网不查询
+ if (NetUtils.isInnerIPv6(ip)) {
+ return LOCAL_ADDRESS;
+ }
+ log.warn("ip2region不支持IPV6地址解析:{}", ip);
+ // 不支持IPv6,不再进行没有必要的IP地址信息的解析,直接返回
+ // 如有需要,可自行实现IPv6地址信息解析逻辑,并在这里返回
+ return UNKNOWN_ADDRESS;
+ }
+
}
From f0ec0811fde40b714980615e70cf387171a220da 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: Sat, 31 May 2025 00:09:21 +0800
Subject: [PATCH 02/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20demo=E9=9C=80?=
=?UTF-8?q?=E8=A6=81=E4=BC=A0=E9=80=92=20version=20=E5=AD=97=E6=AE=B5?=
=?UTF-8?q?=E6=89=8D=E8=83=BD=E5=90=AF=E7=94=A8=E4=B9=90=E8=A7=82=E9=94=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java | 5 +++++
.../src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java | 5 +++++
2 files changed, 10 insertions(+)
diff --git a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java
index 2896f6c63..56a15ffb0 100644
--- a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java
+++ b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/bo/TestDemoBo.java
@@ -58,4 +58,9 @@ public class TestDemoBo extends BaseEntity {
@NotBlank(message = "值不能为空", groups = {AddGroup.class, EditGroup.class})
private String value;
+ /**
+ * 版本
+ */
+ private Long version;
+
}
diff --git a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java
index c6595b0e2..e757221c3 100644
--- a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java
+++ b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java
@@ -108,4 +108,9 @@ public class TestDemoVo implements Serializable {
@ExcelProperty(value = "更新人账号")
private String updateByName;
+ /**
+ * 版本
+ */
+ private Long version;
+
}
From 66bda000076a6ce873c711fdb964c527f10f797b 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: Sat, 31 May 2025 00:10:57 +0800
Subject: [PATCH 03/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20justauth=20?=
=?UTF-8?q?=E5=AE=98=E6=96=B9=E4=BB=A3=E7=A0=81bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AbstractAuthWeChatEnterpriseRequest.java | 153 ++++++++++++++++++
1 file changed, 153 insertions(+)
create mode 100644 ruoyi-common/ruoyi-common-social/src/main/java/me/zhyd/oauth/request/AbstractAuthWeChatEnterpriseRequest.java
diff --git a/ruoyi-common/ruoyi-common-social/src/main/java/me/zhyd/oauth/request/AbstractAuthWeChatEnterpriseRequest.java b/ruoyi-common/ruoyi-common-social/src/main/java/me/zhyd/oauth/request/AbstractAuthWeChatEnterpriseRequest.java
new file mode 100644
index 000000000..9fd80677a
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-social/src/main/java/me/zhyd/oauth/request/AbstractAuthWeChatEnterpriseRequest.java
@@ -0,0 +1,153 @@
+package me.zhyd.oauth.request;
+
+import com.alibaba.fastjson.JSONObject;
+import me.zhyd.oauth.cache.AuthStateCache;
+import me.zhyd.oauth.config.AuthConfig;
+import me.zhyd.oauth.config.AuthSource;
+import me.zhyd.oauth.enums.AuthResponseStatus;
+import me.zhyd.oauth.enums.AuthUserGender;
+import me.zhyd.oauth.exception.AuthException;
+import me.zhyd.oauth.model.AuthCallback;
+import me.zhyd.oauth.model.AuthToken;
+import me.zhyd.oauth.model.AuthUser;
+import me.zhyd.oauth.utils.HttpUtils;
+import me.zhyd.oauth.utils.StringUtils;
+import me.zhyd.oauth.utils.UrlBuilder;
+
+/**
+ *
+ * 企业微信登录父类
+ *
+ *
+ * @author liguanhua (347826496(a)qq.com)
+ * @since 1.15.9
+ */
+public abstract class AbstractAuthWeChatEnterpriseRequest extends AuthDefaultRequest {
+
+ public AbstractAuthWeChatEnterpriseRequest(AuthConfig config, AuthSource source) {
+ super(config,source);
+ }
+
+
+ public AbstractAuthWeChatEnterpriseRequest(AuthConfig config, AuthSource source, AuthStateCache authStateCache) {
+ super(config, source, authStateCache);
+ }
+
+ @Override
+ public AuthToken getAccessToken(AuthCallback authCallback) {
+ String response = doGetAuthorizationCode(accessTokenUrl(null));
+
+ JSONObject object = this.checkResponse(response);
+
+ return AuthToken.builder()
+ .accessToken(object.getString("access_token"))
+ .expireIn(object.getIntValue("expires_in"))
+ .code(authCallback.getCode())
+ .build();
+ }
+
+ @Override
+ public AuthUser getUserInfo(AuthToken authToken) {
+ String response = doGetUserInfo(authToken);
+ JSONObject object = this.checkResponse(response);
+
+ // 返回 OpenId 或其他,均代表非当前企业用户,不支持
+ if (!object.containsKey("UserId")) {
+ throw new AuthException(AuthResponseStatus.UNIDENTIFIED_PLATFORM, source);
+ }
+ String userId = object.getString("UserId");
+ String userTicket = object.getString("user_ticket");
+ JSONObject userDetail = getUserDetail(authToken.getAccessToken(), userId, userTicket);
+
+ return AuthUser.builder()
+ .rawUserInfo(userDetail)
+ .username(userDetail.getString("name"))
+ .nickname(userDetail.getString("alias"))
+ .avatar(userDetail.getString("avatar"))
+ .location(userDetail.getString("address"))
+ .email(userDetail.getString("email"))
+ .uuid(userId)
+ .gender(AuthUserGender.getWechatRealGender(userDetail.getString("gender")))
+ .token(authToken)
+ .source(source.toString())
+ .build();
+ }
+
+ /**
+ * 校验请求结果
+ *
+ * @param response 请求结果
+ * @return 如果请求结果正常,则返回JSONObject
+ */
+ private JSONObject checkResponse(String response) {
+ JSONObject object = JSONObject.parseObject(response);
+
+ if (object.containsKey("errcode") && object.getIntValue("errcode") != 0) {
+ throw new AuthException(object.getString("errmsg"), source);
+ }
+
+ return object;
+ }
+
+
+ /**
+ * 返回获取accessToken的url
+ *
+ * @param code 授权码
+ * @return 返回获取accessToken的url
+ */
+ @Override
+ protected String accessTokenUrl(String code) {
+ return UrlBuilder.fromBaseUrl(source.accessToken())
+ .queryParam("corpid", config.getClientId())
+ .queryParam("corpsecret", config.getClientSecret())
+ .build();
+ }
+
+ /**
+ * 返回获取userInfo的url
+ *
+ * @param authToken 用户授权后的token
+ * @return 返回获取userInfo的url
+ */
+ @Override
+ protected String userInfoUrl(AuthToken authToken) {
+ return UrlBuilder.fromBaseUrl(source.userInfo())
+ .queryParam("access_token", authToken.getAccessToken())
+ .queryParam("code", authToken.getCode())
+ .build();
+ }
+
+ /**
+ * 用户详情
+ *
+ * @param accessToken accessToken
+ * @param userId 企业内用户id
+ * @param userTicket 成员票据,用于获取用户信息或敏感信息
+ * @return 用户详情
+ */
+ private JSONObject getUserDetail(String accessToken, String userId, String userTicket) {
+ // 用户基础信息
+ String userInfoUrl = UrlBuilder.fromBaseUrl("https://qyapi.weixin.qq.com/cgi-bin/user/get")
+ .queryParam("access_token", accessToken)
+ .queryParam("userid", userId)
+ .build();
+ String userInfoResponse = new HttpUtils(config.getHttpConfig()).get(userInfoUrl).getBody();
+ JSONObject userInfo = checkResponse(userInfoResponse);
+
+ // 用户敏感信息
+ if (StringUtils.isNotEmpty(userTicket)) {
+ String userDetailUrl = UrlBuilder.fromBaseUrl("https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail")
+ .queryParam("access_token", accessToken)
+ .build();
+ JSONObject param = new JSONObject();
+ param.put("user_ticket", userTicket);
+ String userDetailResponse = new HttpUtils(config.getHttpConfig()).post(userDetailUrl, param.toJSONString()).getBody();
+ JSONObject userDetail = checkResponse(userDetailResponse);
+
+ userInfo.putAll(userDetail);
+ }
+ return userInfo;
+ }
+
+}
From 36ab89d582ca72509406aa903a0d1efb367c2ab3 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, 3 Jun 2025 10:12:19 +0800
Subject: [PATCH 04/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20satoken?=
=?UTF-8?q?=E5=BC=82=E6=AD=A5=E8=B0=83=E7=94=A8=E9=9C=80=E8=A6=81=E6=89=8B?=
=?UTF-8?q?=E5=8A=A8=E4=BC=A0=E9=80=92=E4=B8=8A=E4=B8=8B=E6=96=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/auth/controller/TokenController.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
index 3f30c42ad..e337dcfe3 100644
--- a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
@@ -1,6 +1,8 @@
package org.dromara.auth.controller;
+import cn.dev33.satoken.context.mock.SaTokenContextMockUtil;
import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -102,7 +104,10 @@ public class TokenController {
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {
- remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
+ SaTokenContextMockUtil.setMockContext(() -> {
+ StpUtil.setTokenValueToStorage(loginVo.getAccessToken());
+ remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
+ });
}, 3, TimeUnit.SECONDS);
return R.ok(loginVo);
}
From faa9be7e4e34d708508e1c67cb6ba06d933ea9e7 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, 3 Jun 2025 11:17:52 +0800
Subject: [PATCH 05/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E9=83=A8?=
=?UTF-8?q?=E5=88=86=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BD=AC=E7=A7=BB=E7=AC=A6?=
=?UTF-8?q?=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98=E5=AF=BC=E8=87=B4=E8=B7=AF?=
=?UTF-8?q?=E7=94=B1=E4=B8=8D=E7=94=9F=E6=95=88=20=E7=BB=9F=E4=B8=80?=
=?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BD=BF=E7=94=A8=E5=8D=95=E6=96=9C=E6=9D=A0?=
=?UTF-8?q?=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
script/sql/oracle/oracle_ry_cloud.sql | 8 ++++----
script/sql/postgres/postgres_ry_cloud.sql | 8 ++++----
script/sql/ry-cloud.sql | 8 ++++----
script/sql/update/oracle/update_2.3.0-2.4.0.sql | 8 ++++----
script/sql/update/postgres/update_2.3.0-2.4.0.sql | 8 ++++----
script/sql/update/update_2.3.0-2.4.0.sql | 8 ++++----
6 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/script/sql/oracle/oracle_ry_cloud.sql b/script/sql/oracle/oracle_ry_cloud.sql
index 7fd8c3658..c7ba4cbda 100644
--- a/script/sql/oracle/oracle_ry_cloud.sql
+++ b/script/sql/oracle/oracle_ry_cloud.sql
@@ -452,10 +452,10 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen',
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', 1, 0, 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, sysdate, null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', 1, 0, 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, sysdate, null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', 1, 0, 'C', '0', '0', 'system:client:list', 'international', 103, 1, sysdate, null, null, '客户端管理菜单');
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate, null, null, '');
-- springboot-admin监控
diff --git a/script/sql/postgres/postgres_ry_cloud.sql b/script/sql/postgres/postgres_ry_cloud.sql
index 66225bc69..57fef1c62 100644
--- a/script/sql/postgres/postgres_ry_cloud.sql
+++ b/script/sql/postgres/postgres_ry_cloud.sql
@@ -454,10 +454,10 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen',
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', '1', '0', 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, now(), null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', '1', '0', 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, now(), null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', '1', '0', 'C', '0', '0', 'system:client:list', 'international', 103, 1, now(), null, null, '客户端管理菜单');
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\\d+)', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\\d+)', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\\d+)', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\\d+)', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', '1', '1', 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, now(), null, null, '');
-- oss菜单
diff --git a/script/sql/ry-cloud.sql b/script/sql/ry-cloud.sql
index d4e8fe01a..4beb38032 100644
--- a/script/sql/ry-cloud.sql
+++ b/script/sql/ry-cloud.sql
@@ -288,10 +288,10 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen',
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', 1, 0, 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, sysdate(), null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', 1, 0, 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, sysdate(), null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', 1, 0, 'C', '0', '0', 'system:client:list', 'international', 103, 1, sysdate(), null, null, '客户端管理菜单');
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate(), null, null, '');
-- oss菜单
diff --git a/script/sql/update/oracle/update_2.3.0-2.4.0.sql b/script/sql/update/oracle/update_2.3.0-2.4.0.sql
index d0d049932..9ff8ed44f 100644
--- a/script/sql/update/oracle/update_2.3.0-2.4.0.sql
+++ b/script/sql/update/oracle/update_2.3.0-2.4.0.sql
@@ -9,10 +9,10 @@ ALTER TABLE sys_social
MODIFY (access_token VARCHAR2(2000 BYTE))
MODIFY (refresh_token VARCHAR2(2000 BYTE));
-INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
-INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
-INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId(\\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
-INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
INSERT INTO sys_menu VALUES ('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate, null, null, '');
INSERT INTO sys_menu VALUES ('11700', '流程设计', '11616', '5', 'design/index', 'workflow/processDefinition/design', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
INSERT INTO sys_menu VALUES ('11701', '请假申请', '11616', '6', 'leaveEdit/index', 'workflow/leave/leaveEdit', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
diff --git a/script/sql/update/postgres/update_2.3.0-2.4.0.sql b/script/sql/update/postgres/update_2.3.0-2.4.0.sql
index 476229c84..7357de8c5 100644
--- a/script/sql/update/postgres/update_2.3.0-2.4.0.sql
+++ b/script/sql/update/postgres/update_2.3.0-2.4.0.sql
@@ -9,10 +9,10 @@ ALTER TABLE sys_social
ALTER COLUMN access_token TYPE varchar(2000),
ALTER COLUMN refresh_token TYPE varchar(2000);
-INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\\d+)', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
-INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\\d+)', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
-INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId(\\d+)', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
-INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\\d+)', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
INSERT INTO sys_menu VALUES ('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', '1', '1', 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, now(), null, null, '');
INSERT INTO sys_menu VALUES ('11700', '流程设计', '11616', '5', 'design/index', 'workflow/processDefinition/design', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, now(), NULL, NULL, '');
INSERT INTO sys_menu VALUES ('11701', '请假申请', '11616', '6', 'leaveEdit/index', 'workflow/leave/leaveEdit', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, now(), NULL, NULL, '');
diff --git a/script/sql/update/update_2.3.0-2.4.0.sql b/script/sql/update/update_2.3.0-2.4.0.sql
index d5062c31b..55b29ee3c 100644
--- a/script/sql/update/update_2.3.0-2.4.0.sql
+++ b/script/sql/update/update_2.3.0-2.4.0.sql
@@ -12,10 +12,10 @@ ALTER TABLE `sys_social`
ALTER TABLE `sys_social`
MODIFY COLUMN `refresh_token` varchar(2000) DEFAULT NULL COMMENT '刷新令牌,部分平台可能没有' AFTER `expire_in`;
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('11700', '流程设计', '11616', '5', 'design/index', 'workflow/processDefinition/design', '', 1, 1, 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('11701', '请假申请', '11616', '6', 'leaveEdit/index', 'workflow/leave/leaveEdit', '', 1, 1, 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, sysdate(), null, null, '');
From 6d7fb33ae0ec1f7480cce0ec6468cb3517e8617e 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, 3 Jun 2025 16:11:30 +0800
Subject: [PATCH 06/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BC=98?=
=?UTF-8?q?=E5=8C=96dubbo=E8=B0=83=E7=94=A8=E8=B7=9Fsatoken=E6=97=A0?=
=?UTF-8?q?=E5=85=B3=E7=9A=84=E5=9C=BA=E6=99=AF=E4=BC=9A=E6=8A=A5=E9=94=99?=
=?UTF-8?q?=E6=97=A0=E4=B8=8A=E4=B8=8B=E6=96=87=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../auth/controller/TokenController.java | 9 +--
.../filter/SaTokenDubbo3ConsumerFilter.java | 65 +++++++++++++++++++
.../filter/SaTokenDubbo3ContextFilter.java | 2 +-
.../mybatis/helper/DataPermissionHelper.java | 11 ++--
4 files changed, 75 insertions(+), 12 deletions(-)
create mode 100644 ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
index e337dcfe3..416f7a492 100644
--- a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java
@@ -1,8 +1,6 @@
package org.dromara.auth.controller;
-import cn.dev33.satoken.context.mock.SaTokenContextMockUtil;
import cn.dev33.satoken.exception.NotLoginException;
-import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
@@ -104,11 +102,8 @@ public class TokenController {
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {
- SaTokenContextMockUtil.setMockContext(() -> {
- StpUtil.setTokenValueToStorage(loginVo.getAccessToken());
- remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
- });
- }, 3, TimeUnit.SECONDS);
+ remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统");
+ }, 5, TimeUnit.SECONDS);
return R.ok(loginVo);
}
diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
new file mode 100644
index 000000000..6257217c5
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2020-2099 sa-token.cc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package cn.dev33.satoken.context.dubbo3.filter;
+
+import cn.dev33.satoken.SaManager;
+import cn.dev33.satoken.context.SaHolder;
+import cn.dev33.satoken.context.SaTokenContextDefaultImpl;
+import cn.dev33.satoken.same.SaSameUtil;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.util.SaTokenConsts;
+import org.apache.dubbo.common.constants.CommonConstants;
+import org.apache.dubbo.common.extension.Activate;
+import org.apache.dubbo.rpc.*;
+
+/**
+ * Sa-Token 整合 Dubbo3 Consumer 端(调用端)过滤器
+ *
+ * @author click33
+ * @since 1.34.0
+ */
+@Activate(group = {CommonConstants.CONSUMER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
+public class SaTokenDubbo3ConsumerFilter implements Filter {
+
+ @Override
+ public Result invoke(Invoker> invoker, Invocation invocation) {
+
+ // 追加 Same-Token 参数
+ if(SaManager.getConfig().getCheckSameToken()) {
+ RpcContext.getServiceContext().setAttachment(SaSameUtil.SAME_TOKEN,SaSameUtil.getToken());
+ }
+
+ // 无上下文直接跳过下面流程
+ if (!SaHolder.getContext().isValid()) {
+ return invoker.invoke(invocation);
+ }
+
+ // 1. 调用前,向下传递会话Token
+ if(SaManager.getSaTokenContext() != SaTokenContextDefaultImpl.defaultContext) {
+ RpcContext.getServiceContext().setAttachment(SaTokenConsts.JUST_CREATED, StpUtil.getTokenValueNotCut());
+ }
+
+ // 2. 开始调用
+ Result invoke = invoker.invoke(invocation);
+
+ // 3. 调用后,解析回传的Token值
+ StpUtil.setTokenValue(invoke.getAttachment(SaTokenConsts.JUST_CREATED_NOT_PREFIX));
+
+ // note
+ return invoke;
+ }
+
+}
diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
index 3f81b6001..341019cab 100644
--- a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
+++ b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
@@ -34,7 +34,7 @@ public class SaTokenDubbo3ContextFilter implements Filter {
@Override
public Result invoke(Invoker> invoker, Invocation invocation) {
- if(SaHolder.getContext().isValid()) {
+ if (SaHolder.getContext().isValid()) {
return invoker.invoke(invocation);
} else {
try {
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java
index 951f3dfe1..ffb864cfe 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/helper/DataPermissionHelper.java
@@ -87,11 +87,14 @@ public class DataPermissionHelper {
* @throws NullPointerException 如果数据权限上下文类型异常,则抛出NullPointerException
*/
public static Map getContext() {
- SaStorage saStorage = SaHolder.getStorage();
- Object attribute = saStorage.get(DATA_PERMISSION_KEY);
- if (ObjectUtil.isNull(attribute)) {
- saStorage.set(DATA_PERMISSION_KEY, new HashMap<>());
+ Object attribute = new HashMap<>();
+ if (SaHolder.getContext().isValid()) {
+ SaStorage saStorage = SaHolder.getStorage();
attribute = saStorage.get(DATA_PERMISSION_KEY);
+ if (ObjectUtil.isNull(attribute)) {
+ saStorage.set(DATA_PERMISSION_KEY, new HashMap<>());
+ attribute = saStorage.get(DATA_PERMISSION_KEY);
+ }
}
if (attribute instanceof Map map) {
return map;
From 1321a1ec385c12382ef015db8f1bc2f3acdd0122 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, 3 Jun 2025 17:12:24 +0800
Subject: [PATCH 07/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=B0=86de?=
=?UTF-8?q?bian=E6=8D=A2=E4=B8=BA=E6=9B=B4=E6=96=B0=E6=9B=B4=E5=A5=91?=
=?UTF-8?q?=E5=90=88=E7=9A=84rockylinux(centos=E4=BD=9C=E8=80=85=E5=86=99?=
=?UTF-8?q?=E7=9A=84=E7=A8=B3=E5=AE=9A)=20=E5=8D=87=E7=BA=A7jdk=E7=89=88?=
=?UTF-8?q?=E6=9C=AC=E9=81=BF=E5=85=8D=E6=BC=8F=E6=B4=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-auth/Dockerfile | 4 ++--
ruoyi-gateway/Dockerfile | 4 ++--
ruoyi-modules/ruoyi-gen/Dockerfile | 4 ++--
ruoyi-modules/ruoyi-job/Dockerfile | 4 ++--
ruoyi-modules/ruoyi-resource/Dockerfile | 4 ++--
ruoyi-modules/ruoyi-system/Dockerfile | 4 ++--
ruoyi-modules/ruoyi-workflow/Dockerfile | 4 ++--
ruoyi-visual/ruoyi-monitor/Dockerfile | 4 ++--
ruoyi-visual/ruoyi-nacos/Dockerfile | 4 ++--
ruoyi-visual/ruoyi-seata-server/Dockerfile | 4 ++--
ruoyi-visual/ruoyi-sentinel-dashboard/Dockerfile | 4 ++--
ruoyi-visual/ruoyi-snailjob-server/Dockerfile | 4 ++--
12 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/ruoyi-auth/Dockerfile b/ruoyi-auth/Dockerfile
index 8555931b3..c24c9e8a8 100644
--- a/ruoyi-auth/Dockerfile
+++ b/ruoyi-auth/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-gateway/Dockerfile b/ruoyi-gateway/Dockerfile
index 2009e09c0..01eeb0378 100644
--- a/ruoyi-gateway/Dockerfile
+++ b/ruoyi-gateway/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-modules/ruoyi-gen/Dockerfile b/ruoyi-modules/ruoyi-gen/Dockerfile
index f9f8d0611..4427cc226 100644
--- a/ruoyi-modules/ruoyi-gen/Dockerfile
+++ b/ruoyi-modules/ruoyi-gen/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-modules/ruoyi-job/Dockerfile b/ruoyi-modules/ruoyi-job/Dockerfile
index d1d68e3f9..ebb1f9d36 100644
--- a/ruoyi-modules/ruoyi-job/Dockerfile
+++ b/ruoyi-modules/ruoyi-job/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-modules/ruoyi-resource/Dockerfile b/ruoyi-modules/ruoyi-resource/Dockerfile
index f845d5cbe..4708c1a32 100644
--- a/ruoyi-modules/ruoyi-resource/Dockerfile
+++ b/ruoyi-modules/ruoyi-resource/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-modules/ruoyi-system/Dockerfile b/ruoyi-modules/ruoyi-system/Dockerfile
index 7bf60168e..ffc92a6db 100644
--- a/ruoyi-modules/ruoyi-system/Dockerfile
+++ b/ruoyi-modules/ruoyi-system/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-modules/ruoyi-workflow/Dockerfile b/ruoyi-modules/ruoyi-workflow/Dockerfile
index fad7f3c28..f3738cab3 100644
--- a/ruoyi-modules/ruoyi-workflow/Dockerfile
+++ b/ruoyi-modules/ruoyi-workflow/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-visual/ruoyi-monitor/Dockerfile b/ruoyi-visual/ruoyi-monitor/Dockerfile
index db3787344..0b9c718d8 100644
--- a/ruoyi-visual/ruoyi-monitor/Dockerfile
+++ b/ruoyi-visual/ruoyi-monitor/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-visual/ruoyi-nacos/Dockerfile b/ruoyi-visual/ruoyi-nacos/Dockerfile
index 68aac228c..9b14944ec 100644
--- a/ruoyi-visual/ruoyi-nacos/Dockerfile
+++ b/ruoyi-visual/ruoyi-nacos/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-visual/ruoyi-seata-server/Dockerfile b/ruoyi-visual/ruoyi-seata-server/Dockerfile
index ea6f2d38c..3e004a534 100644
--- a/ruoyi-visual/ruoyi-seata-server/Dockerfile
+++ b/ruoyi-visual/ruoyi-seata-server/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-visual/ruoyi-sentinel-dashboard/Dockerfile b/ruoyi-visual/ruoyi-sentinel-dashboard/Dockerfile
index 87967aa27..e5707f9f9 100644
--- a/ruoyi-visual/ruoyi-sentinel-dashboard/Dockerfile
+++ b/ruoyi-visual/ruoyi-sentinel-dashboard/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
diff --git a/ruoyi-visual/ruoyi-snailjob-server/Dockerfile b/ruoyi-visual/ruoyi-snailjob-server/Dockerfile
index 6f4484d33..d134a95bd 100644
--- a/ruoyi-visual/ruoyi-snailjob-server/Dockerfile
+++ b/ruoyi-visual/ruoyi-snailjob-server/Dockerfile
@@ -1,6 +1,6 @@
# 贝尔实验室 Spring 官方推荐镜像 JDK下载地址 https://bell-sw.com/pages/downloads/
-FROM bellsoft/liberica-openjdk-debian:17.0.11-cds
-#FROM bellsoft/liberica-openjdk-debian:21.0.5-cds
+FROM bellsoft/liberica-openjdk-rocky:17.0.15-cds
+#FROM bellsoft/liberica-openjdk-rocky:21.0.7-cds
#FROM findepi/graalvm:java17-native
LABEL maintainer="Lion Li"
From 6d319b13ad524d299f9f134a96187d2dd83513d3 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, 5 Jun 2025 15:12:50 +0800
Subject: [PATCH 08/44] update easy-es 2.1.0 => 3.0.0
---
pom.xml | 2 +-
.../spring/config/EasyEsConfiguration.java | 84 -------------------
.../config/GeneratorConfiguration.java | 27 ------
.../src/main/resources/application.yml | 2 +
4 files changed, 3 insertions(+), 112 deletions(-)
delete mode 100644 ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java
delete mode 100644 ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/starter/config/GeneratorConfiguration.java
diff --git a/pom.xml b/pom.xml
index b221dff1d..fb8b4bb8e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,7 +36,7 @@
1.42.0
1.18.36
7.4
- 2.1.0
+ 3.0.0
9.3.0
1.80
1.4.8
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java b/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java
deleted file mode 100644
index 0a6ecc611..000000000
--- a/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/spring/config/EasyEsConfiguration.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.dromara.easyes.spring.config;
-
-import lombok.Setter;
-import org.dromara.easyes.common.property.EasyEsDynamicProperties;
-import org.dromara.easyes.common.property.EasyEsProperties;
-import org.dromara.easyes.common.strategy.AutoProcessIndexStrategy;
-import org.dromara.easyes.common.utils.RestHighLevelClientUtils;
-import org.dromara.easyes.core.index.AutoProcessIndexNotSmoothlyStrategy;
-import org.dromara.easyes.core.index.AutoProcessIndexSmoothlyStrategy;
-import org.dromara.easyes.spring.factory.IndexStrategyFactory;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.util.Assert;
-
-import java.util.Map;
-
-/**
- * @author MoJie
- * @since 2.0
- */
-@Setter
-@Configuration
-@ConditionalOnProperty(value = "easy-es.enable", havingValue = "true")
-public class EasyEsConfiguration implements InitializingBean {
-
- private EasyEsProperties easyEsProperties;
-
- private EasyEsDynamicProperties easyEsDynamicProperties;
-
- @Autowired
- public EasyEsConfiguration(EasyEsProperties easyEsProperties, EasyEsDynamicProperties easyEsDynamicProperties) {
- this.easyEsProperties = easyEsProperties;
- this.easyEsDynamicProperties = easyEsDynamicProperties;
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
- Assert.notNull(this.easyEsProperties, "easyEsProperties must is A bean. easy-es配置类必须给配置一个bean");
- }
-
- @Bean
- public IndexStrategyFactory indexStrategyFactory() {
- return new IndexStrategyFactory();
- }
-
- @Bean
- public RestHighLevelClientUtils restHighLevelClientUtils() {
- RestHighLevelClientUtils restHighLevelClientUtils = new RestHighLevelClientUtils();
- if (this.easyEsDynamicProperties == null) {
- this.easyEsDynamicProperties = new EasyEsDynamicProperties();
- }
- Map datasourceMap = this.easyEsDynamicProperties.getDatasource();
- if (datasourceMap.isEmpty()) {
- // 设置默认数据源,兼容不使用多数据源配置场景的老用户使用习惯
- datasourceMap.put(RestHighLevelClientUtils.DEFAULT_DS, this.easyEsProperties);
- }
- for (String key : datasourceMap.keySet()) {
- EasyEsProperties easyEsConfigProperties = datasourceMap.get(key);
- RestHighLevelClientUtils.registerRestHighLevelClient(key, RestHighLevelClientUtils
- .restHighLevelClient(easyEsConfigProperties));
- }
- return restHighLevelClientUtils;
- }
-
- /**
- * 索引策略注册
- *
- * @return {@link AutoProcessIndexStrategy}
- * @author MoJie
- */
- @Bean
- public AutoProcessIndexStrategy autoProcessIndexSmoothlyStrategy() {
- return new AutoProcessIndexSmoothlyStrategy();
- }
-
- @Bean
- public AutoProcessIndexStrategy autoProcessIndexNotSmoothlyStrategy() {
- return new AutoProcessIndexNotSmoothlyStrategy();
- }
-
-}
diff --git a/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/starter/config/GeneratorConfiguration.java b/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/starter/config/GeneratorConfiguration.java
deleted file mode 100644
index f5fa560e8..000000000
--- a/ruoyi-common/ruoyi-common-elasticsearch/src/main/java/org/dromara/easyes/starter/config/GeneratorConfiguration.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.dromara.easyes.starter.config;
-
-import org.dromara.easyes.core.config.GeneratorConfig;
-import org.dromara.easyes.core.toolkit.Generator;
-import org.elasticsearch.client.RestHighLevelClient;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Component;
-
-/**
- * 代码生成注册
- * @author MoJie
- * @since 2.0
- */
-@Component
-@ConditionalOnProperty(value = "easy-es.enable", havingValue = "true")
-public class GeneratorConfiguration extends Generator {
-
- @Autowired
- private RestHighLevelClient client;
-
- @Override
- public Boolean generate(GeneratorConfig config) {
- super.generateEntity(config, this.client);
- return Boolean.TRUE;
- }
-}
diff --git a/ruoyi-example/ruoyi-demo/src/main/resources/application.yml b/ruoyi-example/ruoyi-demo/src/main/resources/application.yml
index 711df67da..4313f433d 100644
--- a/ruoyi-example/ruoyi-demo/src/main/resources/application.yml
+++ b/ruoyi-example/ruoyi-demo/src/main/resources/application.yml
@@ -77,6 +77,8 @@ spring:
easy-es:
# 是否开启EE自动配置
enable: false
+ # 兼容模式
+ compatible: true
# es连接地址+端口 格式必须为ip:port,如果是集群则可用逗号隔开
address : localhost:9200
# 默认为http
From ca7c0c94f3e2b8d80a21995fdc647c83abfc5930 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, 5 Jun 2025 16:48:13 +0800
Subject: [PATCH 09/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=BF=BD?=
=?UTF-8?q?=E7=95=A5=E7=A7=9F=E6=88=B7=E8=A1=A8=E5=88=A4=E6=96=AD=E6=94=B9?=
=?UTF-8?q?=E4=B8=BA=E7=B2=BE=E7=A1=AE=E5=8C=B9=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../org/dromara/common/tenant/handle/PlusTenantLineHandler.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/PlusTenantLineHandler.java b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/PlusTenantLineHandler.java
index d518becbc..f6d224bd6 100644
--- a/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/PlusTenantLineHandler.java
+++ b/ruoyi-common/ruoyi-common-tenant/src/main/java/org/dromara/common/tenant/handle/PlusTenantLineHandler.java
@@ -48,7 +48,7 @@ public class PlusTenantLineHandler implements TenantLineHandler {
"gen_table_column"
);
tables.addAll(excludes);
- return StringUtils.containsAnyIgnoreCase(tableName, tables.toArray(new String[0]));
+ return StringUtils.equalsAnyIgnoreCase(tableName, tables.toArray(new String[0]));
}
return true;
}
From d97146de98919929acdfb08f5b25145405155dc2 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, 5 Jun 2025 18:29:12 +0800
Subject: [PATCH 10/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E7=A7=9F?=
=?UTF-8?q?=E6=88=B7=E5=A5=97=E9=A4=90=E8=8F=9C=E5=8D=95=E6=9F=A5=E8=AF=A2?=
=?UTF-8?q?=E8=BF=87=E6=BB=A4=E6=8E=89=20=E7=A7=9F=E6=88=B7=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E7=9B=B8=E5=85=B3=E8=8F=9C=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../system/controller/system/SysMenuController.java | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java
index 8f0eae1f6..29d33601e 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysMenuController.java
@@ -21,6 +21,7 @@ import org.dromara.system.service.ISysMenuService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -111,9 +112,14 @@ public class SysMenuController extends BaseController {
@GetMapping(value = "/tenantPackageMenuTreeselect/{packageId}")
public R tenantPackageMenuTreeselect(@PathVariable("packageId") Long packageId) {
List menus = menuService.selectMenuList(LoginHelper.getUserId());
- MenuTreeSelectVo selectVo = new MenuTreeSelectVo(
- menuService.selectMenuListByPackageId(packageId),
- menuService.buildMenuTreeSelect(menus));
+ List> list = menuService.buildMenuTreeSelect(menus);
+ // 删除租户管理菜单
+ list.removeIf(menu -> menu.getId() == 6L);
+ List ids = new ArrayList<>();
+ if (packageId > 0L) {
+ ids = menuService.selectMenuListByPackageId(packageId);
+ }
+ MenuTreeSelectVo selectVo = new MenuTreeSelectVo(ids, list);
return R.ok(selectVo);
}
From 6738d68fa454a2e5066889821c6b8c09cb237bf4 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, 9 Jun 2025 14:54:46 +0800
Subject: [PATCH 11/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4=E6=AD=A3=E5=88=99=E6=A0=A1=E9=AA=8C=20=E6=97=A0?=
=?UTF-8?q?=E7=94=A8=E9=85=8D=E7=BD=AE=E5=AF=BC=E8=87=B4=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
script/sql/oracle/oracle_ry_cloud.sql | 8 ++++----
script/sql/postgres/postgres_ry_cloud.sql | 8 ++++----
script/sql/ry-cloud.sql | 8 ++++----
script/sql/update/oracle/update_2.3.0-2.4.0.sql | 8 ++++----
script/sql/update/postgres/update_2.3.0-2.4.0.sql | 8 ++++----
script/sql/update/update_2.3.0-2.4.0.sql | 8 ++++----
6 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/script/sql/oracle/oracle_ry_cloud.sql b/script/sql/oracle/oracle_ry_cloud.sql
index c7ba4cbda..0431b24d4 100644
--- a/script/sql/oracle/oracle_ry_cloud.sql
+++ b/script/sql/oracle/oracle_ry_cloud.sql
@@ -452,10 +452,10 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen',
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', 1, 0, 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, sysdate, null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', 1, 0, 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, sysdate, null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', 1, 0, 'C', '0', '0', 'system:client:list', 'international', 103, 1, sysdate, null, null, '客户端管理菜单');
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate, null, null, '');
-- springboot-admin监控
diff --git a/script/sql/postgres/postgres_ry_cloud.sql b/script/sql/postgres/postgres_ry_cloud.sql
index 57fef1c62..98618079d 100644
--- a/script/sql/postgres/postgres_ry_cloud.sql
+++ b/script/sql/postgres/postgres_ry_cloud.sql
@@ -454,10 +454,10 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen',
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', '1', '0', 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, now(), null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', '1', '0', 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, now(), null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', '1', '0', 'C', '0', '0', 'system:client:list', 'international', 103, 1, now(), null, null, '客户端管理菜单');
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', '1', '1', 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, now(), null, null, '');
-- oss菜单
diff --git a/script/sql/ry-cloud.sql b/script/sql/ry-cloud.sql
index 4beb38032..1138c7042 100644
--- a/script/sql/ry-cloud.sql
+++ b/script/sql/ry-cloud.sql
@@ -288,10 +288,10 @@ insert into sys_menu values('115', '代码生成', '3', '2', 'gen',
insert into sys_menu values('121', '租户管理', '6', '1', 'tenant', 'system/tenant/index', '', 1, 0, 'C', '0', '0', 'system:tenant:list', 'list', 103, 1, sysdate(), null, null, '租户管理菜单');
insert into sys_menu values('122', '租户套餐管理', '6', '2', 'tenantPackage', 'system/tenantPackage/index', '', 1, 0, 'C', '0', '0', 'system:tenantPackage:list', 'form', 103, 1, sysdate(), null, null, '租户套餐管理菜单');
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', 1, 0, 'C', '0', '0', 'system:client:list', 'international', 103, 1, sysdate(), null, null, '客户端管理菜单');
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate(), null, null, '');
-- oss菜单
diff --git a/script/sql/update/oracle/update_2.3.0-2.4.0.sql b/script/sql/update/oracle/update_2.3.0-2.4.0.sql
index 9ff8ed44f..3561f4d94 100644
--- a/script/sql/update/oracle/update_2.3.0-2.4.0.sql
+++ b/script/sql/update/oracle/update_2.3.0-2.4.0.sql
@@ -9,10 +9,10 @@ ALTER TABLE sys_social
MODIFY (access_token VARCHAR2(2000 BYTE))
MODIFY (refresh_token VARCHAR2(2000 BYTE));
-INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
-INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
-INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
-INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate, null, null, '');
+INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate, null, null, '');
INSERT INTO sys_menu VALUES ('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate, null, null, '');
INSERT INTO sys_menu VALUES ('11700', '流程设计', '11616', '5', 'design/index', 'workflow/processDefinition/design', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
INSERT INTO sys_menu VALUES ('11701', '请假申请', '11616', '6', 'leaveEdit/index', 'workflow/leave/leaveEdit', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, SYSDATE, NULL, NULL, '');
diff --git a/script/sql/update/postgres/update_2.3.0-2.4.0.sql b/script/sql/update/postgres/update_2.3.0-2.4.0.sql
index 7357de8c5..e0b67e2dc 100644
--- a/script/sql/update/postgres/update_2.3.0-2.4.0.sql
+++ b/script/sql/update/postgres/update_2.3.0-2.4.0.sql
@@ -9,10 +9,10 @@ ALTER TABLE sys_social
ALTER COLUMN access_token TYPE varchar(2000),
ALTER COLUMN refresh_token TYPE varchar(2000);
-INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
-INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
-INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
-INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId', 'tool/gen/editTable', '', '1', '1', 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('130', '分配用户', '1', '2', 'role-auth/user/:roleId', 'system/role/authUser', '', '1', '1', 'C', '1', '0', 'system:role:edit', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('131', '分配角色', '1', '1', 'user-auth/role/:userId', 'system/user/authRole', '', '1', '1', 'C', '1', '0', 'system:user:edit', '#', 103, 1, now(), null, null, '');
+INSERT INTO sys_menu VALUES ('132', '字典数据', '1', '6', 'dict-data/index/:dictId', 'system/dict/data', '', '1', '1', 'C', '1', '0', 'system:dict:list', '#', 103, 1, now(), null, null, '');
INSERT INTO sys_menu VALUES ('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', '1', '1', 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, now(), null, null, '');
INSERT INTO sys_menu VALUES ('11700', '流程设计', '11616', '5', 'design/index', 'workflow/processDefinition/design', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, now(), NULL, NULL, '');
INSERT INTO sys_menu VALUES ('11701', '请假申请', '11616', '6', 'leaveEdit/index', 'workflow/leave/leaveEdit', '', '1', '1', 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, now(), NULL, NULL, '');
diff --git a/script/sql/update/update_2.3.0-2.4.0.sql b/script/sql/update/update_2.3.0-2.4.0.sql
index 55b29ee3c..058f6fcba 100644
--- a/script/sql/update/update_2.3.0-2.4.0.sql
+++ b/script/sql/update/update_2.3.0-2.4.0.sql
@@ -12,10 +12,10 @@ ALTER TABLE `sys_social`
ALTER TABLE `sys_social`
MODIFY COLUMN `refresh_token` varchar(2000) DEFAULT NULL COMMENT '刷新令牌,部分平台可能没有' AFTER `expire_in`;
-insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId(\d+)', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId(\d+)', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId(\d+)', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
-insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId(\d+)', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('116', '修改生成配置', '3', '2', 'gen-edit/index/:tableId', 'tool/gen/editTable', '', 1, 1, 'C', '1', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('130', '分配用户', '1', '2', 'role-auth/user/:roleId', 'system/role/authUser', '', 1, 1, 'C', '1', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('131', '分配角色', '1', '1', 'user-auth/role/:userId', 'system/user/authRole', '', 1, 1, 'C', '1', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, '');
+insert into sys_menu values('132', '字典数据', '1', '6', 'dict-data/index/:dictId', 'system/dict/data', '', 1, 1, 'C', '1', '0', 'system:dict:list', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('133', '文件配置管理', '1', '10', 'oss-config/index', 'system/oss/config', '', 1, 1, 'C', '1', '0', 'system:ossConfig:list', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('11700', '流程设计', '11616', '5', 'design/index', 'workflow/processDefinition/design', '', 1, 1, 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, sysdate(), null, null, '');
insert into sys_menu values('11701', '请假申请', '11616', '6', 'leaveEdit/index', 'workflow/leave/leaveEdit', '', 1, 1, 'C', '1', '0', 'workflow:leave:edit', '#', 103, 1, sysdate(), null, null, '');
From 751e86298ff3fd27c88017569164295a8ca7cbf0 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, 12 Jun 2025 17:40:42 +0800
Subject: [PATCH 12/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4snailjob=E7=9A=84jvm=E5=8F=82=E6=95=B0=20=E9=BB=98?=
=?UTF-8?q?=E8=AE=A4=E4=B8=8D=E9=99=90=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-visual/ruoyi-snailjob-server/Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-visual/ruoyi-snailjob-server/Dockerfile b/ruoyi-visual/ruoyi-snailjob-server/Dockerfile
index d134a95bd..ef85eb2c9 100644
--- a/ruoyi-visual/ruoyi-snailjob-server/Dockerfile
+++ b/ruoyi-visual/ruoyi-snailjob-server/Dockerfile
@@ -9,7 +9,7 @@ RUN mkdir -p /ruoyi/snailjob/logs
WORKDIR /ruoyi/snailjob
-ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS="-Xms512m -Xmx1024m"
+ENV LANG=C.UTF-8 LC_ALL=C.UTF-8 JAVA_OPTS=""
EXPOSE 8800
EXPOSE 17888
From ef013bd653105094f13fed5e05aaf70f9eb71196 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, 13 Jun 2025 14:25:16 +0800
Subject: [PATCH 13/44] =?UTF-8?q?update=20=E5=88=A0=E9=99=A4=E6=97=A0?=
=?UTF-8?q?=E7=94=A8=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../auth/service/impl/SocialAuthStrategy.java | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java
index bcfb45f2f..074f02e3e 100644
--- a/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/service/impl/SocialAuthStrategy.java
@@ -3,9 +3,6 @@ package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.map.MapUtil;
-import cn.hutool.http.HttpUtil;
-import cn.hutool.http.Method;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthResponse;
@@ -66,15 +63,6 @@ public class SocialAuthStrategy implements IAuthStrategy {
throw new ServiceException(response.getMsg());
}
AuthUser authUserData = response.getData();
- if ("GITEE".equals(authUserData.getSource())) {
- // 如用户使用 gitee 登录顺手 star 给作者一点支持 拒绝白嫖
- HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Vue-Plus")
- .formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
- .executeAsync();
- HttpUtil.createRequest(Method.PUT, "https://gitee.com/api/v5/user/starred/dromara/RuoYi-Cloud-Plus")
- .formStr(MapUtil.of("access_token", authUserData.getToken().getAccessToken()))
- .executeAsync();
- }
List list = remoteSocialService.selectByAuthId(authUserData.getSource() + authUserData.getUuid());
if (CollUtil.isEmpty(list)) {
From f26ef3515a037263b9433942992a22c228fe113a 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, 16 Jun 2025 11:28:46 +0800
Subject: [PATCH 14/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20snailjob?=
=?UTF-8?q?=E7=9A=84oracle.sql=E4=B9=A6=E5=86=99=E9=94=99=E8=AF=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
script/sql/oracle/oracle_ry_job.sql | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/script/sql/oracle/oracle_ry_job.sql b/script/sql/oracle/oracle_ry_job.sql
index c00558842..1e5c899cc 100644
--- a/script/sql/oracle/oracle_ry_job.sql
+++ b/script/sql/oracle/oracle_ry_job.sql
@@ -410,7 +410,7 @@ CREATE TABLE sj_distributed_lock
);
ALTER TABLE sj_distributed_lock
- ADD CONSTRAINT pk_sj_distributed_lock PRIMARY KEY (id);
+ ADD CONSTRAINT pk_sj_distributed_lock PRIMARY KEY (name);
COMMENT ON COLUMN sj_distributed_lock.name IS '锁名称';
COMMENT ON COLUMN sj_distributed_lock.lock_until IS '锁定时长';
From d26147fb61a06162ccd5de1bbf5f9ae1cc85013f 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, 17 Jun 2025 09:32:35 +0800
Subject: [PATCH 15/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E6=B5=81=EF=BC=8C=E8=B7=B3=E8=BF=87=E4=BB=A5=20$=20?=
=?UTF-8?q?=E6=88=96=20#=20=E5=BC=80=E5=A4=B4=E7=9A=84=E5=86=85=E7=BD=AE?=
=?UTF-8?q?=E5=8F=98=E9=87=8F=E8=A1=A8=E8=BE=BE=E5=BC=8F=E8=A7=A3=E6=9E=90?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../workflow/service/impl/FlwTaskAssigneeServiceImpl.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java
index 03dcf2d0a..51f730c2f 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java
@@ -238,6 +238,14 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
* @return Pair(TaskAssigneeEnum, Long),如果格式非法返回 null
*/
private Pair parseStorageId(String storageId) {
+ if (StringUtils.isBlank(storageId)) {
+ return null;
+ }
+ // 跳过以 $ 或 # 开头的字符串
+ if (StringUtils.startsWith(storageId, "$") || StringUtils.startsWith(storageId, "#")) {
+ log.debug("跳过 storageId 解析,检测到内置变量表达式:{}", storageId);
+ return null;
+ }
try {
String[] parts = storageId.split(StrUtil.COLON, 2);
if (parts.length < 2) {
From cb545862f4d6e199f0447dbc1a48666f6e817366 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, 17 Jun 2025 11:05:10 +0800
Subject: [PATCH 16/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E6=B5=81=E8=AE=BE=E8=AE=A1=E5=99=A8=E8=8E=B7=E5=8F=96?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C=E4=BA=BA=E9=BB=98=E8=AE=A4?=
=?UTF-8?q?=E6=AD=A3=E5=B8=B8=E7=8A=B6=E6=80=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/system/dubbo/RemoteTaskAssigneeServiceImpl.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteTaskAssigneeServiceImpl.java
index 4011c597f..87d1c6e28 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteTaskAssigneeServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteTaskAssigneeServiceImpl.java
@@ -3,6 +3,7 @@ package org.dromara.system.dubbo;
import cn.hutool.core.convert.Convert;
import lombok.RequiredArgsConstructor;
import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.api.RemoteTaskAssigneeService;
@@ -53,6 +54,7 @@ public class RemoteTaskAssigneeServiceImpl implements RemoteTaskAssigneeService
SysRoleBo bo = new SysRoleBo();
bo.setRoleKey(taskQuery.getHandlerCode());
bo.setRoleName(taskQuery.getHandlerName());
+ bo.setStatus(SystemConstants.NORMAL);
Map params = bo.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
@@ -75,6 +77,7 @@ public class RemoteTaskAssigneeServiceImpl implements RemoteTaskAssigneeService
SysPostBo bo = new SysPostBo();
bo.setPostCategory(taskQuery.getHandlerCode());
bo.setPostName(taskQuery.getHandlerName());
+ bo.setStatus(SystemConstants.NORMAL);
Map params = bo.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
@@ -98,6 +101,7 @@ public class RemoteTaskAssigneeServiceImpl implements RemoteTaskAssigneeService
SysDeptBo bo = new SysDeptBo();
bo.setDeptCategory(taskQuery.getHandlerCode());
bo.setDeptName(taskQuery.getHandlerName());
+ bo.setStatus(SystemConstants.NORMAL);
Map params = bo.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
@@ -109,7 +113,6 @@ public class RemoteTaskAssigneeServiceImpl implements RemoteTaskAssigneeService
return new RemoteTaskAssigneeVo(page.getTotal(), handlers);
}
-
/**
* 查询用户并返回任务指派的列表,支持分页
*
@@ -122,6 +125,7 @@ public class RemoteTaskAssigneeServiceImpl implements RemoteTaskAssigneeService
SysUserBo bo = new SysUserBo();
bo.setUserName(taskQuery.getHandlerCode());
bo.setNickName(taskQuery.getHandlerName());
+ bo.setStatus(SystemConstants.NORMAL);
Map params = bo.getParams();
params.put("beginTime", taskQuery.getBeginTime());
params.put("endTime", taskQuery.getEndTime());
From 1efe1ac78a367755f91b869b3e56994837751f9d 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, 17 Jun 2025 11:08:21 +0800
Subject: [PATCH 17/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8A=A0?=
=?UTF-8?q?=E5=AF=86=E6=A8=A1=E5=9D=97=20=E8=A7=A3=E5=AF=86=E6=8B=A6?=
=?UTF-8?q?=E6=88=AA=E5=99=A8=20=E5=B0=86=E5=8F=82=E6=95=B0=E4=B8=80?=
=?UTF-8?q?=E8=B5=B7=E8=A7=A3=E5=AF=86=E4=BA=86=20=E9=98=B2=E6=AD=A2?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A2=AB=E5=A4=9A=E6=AC=A1=E5=8A=A0=E5=AF=86?=
=?UTF-8?q?=E4=B8=8D=E6=AD=A3=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../interceptor/MybatisDecryptInterceptor.java | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/interceptor/MybatisDecryptInterceptor.java b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/interceptor/MybatisDecryptInterceptor.java
index 460aa360e..d5faae715 100644
--- a/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/interceptor/MybatisDecryptInterceptor.java
+++ b/ruoyi-common/ruoyi-common-encrypt/src/main/java/org/dromara/common/encrypt/interceptor/MybatisDecryptInterceptor.java
@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.*;
import org.dromara.common.core.utils.StringUtils;
@@ -39,12 +40,23 @@ public class MybatisDecryptInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
+ // 开始进行参数解密
+ ResultSetHandler resultSetHandler = (ResultSetHandler) invocation.getTarget();
+ Field parameterHandlerField = resultSetHandler.getClass().getDeclaredField("parameterHandler");
+ parameterHandlerField.setAccessible(true);
+ Object target = parameterHandlerField.get(resultSetHandler);
+ if (target instanceof ParameterHandler parameterHandler) {
+ Object parameterObject = parameterHandler.getParameterObject();
+ if (ObjectUtil.isNotNull(parameterObject) && !(parameterObject instanceof String)) {
+ this.decryptHandler(parameterObject);
+ }
+ }
// 获取执行mysql执行结果
Object result = invocation.proceed();
if (result == null) {
return null;
}
- decryptHandler(result);
+ this.decryptHandler(result);
return result;
}
From a6ab7505082fd37fe4d0b960ee3d81c592789168 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, 20 Jun 2025 09:32:10 +0800
Subject: [PATCH 18/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4=E8=87=AA=E5=8A=A8=E6=B3=A8=E5=85=A5=E6=97=A5=E5=BF=97?=
=?UTF-8?q?=E8=AD=A6=E5=91=8A=E6=94=B9=E4=B8=BA=E9=BB=98=E8=AE=A4=E5=80=BC?=
=?UTF-8?q?=20=E9=81=BF=E5=85=8D=E4=B8=80=E5=A4=A7=E5=A0=86=E4=BA=BA?=
=?UTF-8?q?=E5=8E=BB=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=90=9E=E4=BB=80?=
=?UTF-8?q?=E4=B9=88=E7=99=BB=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../mybatis/handler/InjectionMetaObjectHandler.java | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java
index d13f75d2a..0d0c5d04e 100644
--- a/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java
+++ b/ruoyi-common/ruoyi-common-mybatis/src/main/java/org/dromara/common/mybatis/handler/InjectionMetaObjectHandler.java
@@ -21,6 +21,11 @@ import java.util.Date;
@Slf4j
public class InjectionMetaObjectHandler implements MetaObjectHandler {
+ /**
+ * 如果用户不存在默认注入-1代表无用户
+ */
+ private static final Long DEFAULT_USER_ID = -1L;
+
/**
* 插入填充方法,用于在插入数据时自动填充实体对象中的创建时间、更新时间、创建人、更新人等信息
*
@@ -44,6 +49,11 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
baseEntity.setCreateBy(userId);
baseEntity.setUpdateBy(userId);
baseEntity.setCreateDept(ObjectUtils.notNull(baseEntity.getCreateDept(), loginUser.getDeptId()));
+ } else {
+ // 填充创建人、更新人和创建部门信息
+ baseEntity.setCreateBy(DEFAULT_USER_ID);
+ baseEntity.setUpdateBy(DEFAULT_USER_ID);
+ baseEntity.setCreateDept(ObjectUtils.notNull(baseEntity.getCreateDept(), DEFAULT_USER_ID));
}
}
} else {
@@ -73,6 +83,8 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
Long userId = LoginHelper.getUserId();
if (ObjectUtil.isNotNull(userId)) {
baseEntity.setUpdateBy(userId);
+ } else {
+ baseEntity.setUpdateBy(DEFAULT_USER_ID);
}
} else {
this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
@@ -92,7 +104,6 @@ public class InjectionMetaObjectHandler implements MetaObjectHandler {
try {
loginUser = LoginHelper.getLoginUser();
} catch (Exception e) {
- log.warn("自动注入警告 => 用户未登录");
return null;
}
return loginUser;
From a9f10e4fa43e94ef041ab9a7405f88a52c87f108 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, 20 Jun 2025 10:31:37 +0800
Subject: [PATCH 19/44] update spring-boot 3.4.6 => 3.4.7 update satoken 1.42.0
=> 1.44.0 update hutool 5.8.35 => 5.8.38 update redisson 3.45.1 => 3.50.0
update aws-s3 2.28.22 => 2.31.67 update anyline 8.7.2-20250101 =>
8.7.2-20250603 update maven-compiler-plugin 3.11.0 => 3.14.0 update
maven-surefire-plugin 3.1.2 => 3.5.3
---
pom.xml | 16 ++++++++--------
.../auth/listener/UserActionListener.java | 2 +-
.../dromara/gen/service/GenTableServiceImpl.java | 4 ++--
3 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/pom.xml b/pom.xml
index fb8b4bb8e..d25503074 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
UTF-8
UTF-8
17
- 3.4.6
+ 3.4.7
2024.0.0
3.4.7
3.5.16
@@ -29,11 +29,11 @@
2.8.8
0.15.0
1.2.0
- 5.8.35
- 3.45.1
+ 5.8.38
+ 3.50.0
2.2.7
1.5.0
- 1.42.0
+ 1.44.0
1.18.36
7.4
3.0.0
@@ -48,20 +48,20 @@
1.2.83
- 2.28.22
+ 2.31.67
3.3.4
- 8.7.2-20250101
+ 8.7.2-20250603
1.7.3
2.3.0
- 3.11.0
- 3.1.2
+ 3.14.0
+ 3.5.3
1.3.0
true
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/listener/UserActionListener.java b/ruoyi-auth/src/main/java/org/dromara/auth/listener/UserActionListener.java
index 6e22e1991..471539993 100644
--- a/ruoyi-auth/src/main/java/org/dromara/auth/listener/UserActionListener.java
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/listener/UserActionListener.java
@@ -162,7 +162,7 @@ public class UserActionListener implements SaTokenListener {
* 每次Token续期时触发
*/
@Override
- public void doRenewTimeout(String tokenValue, Object loginId, long timeout) {
+ public void doRenewTimeout(String loginType, Object loginId, String tokenValue, long timeout) {
}
}
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
index d3808ba78..ad4fc487e 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
@@ -302,8 +302,8 @@ public class GenTableServiceImpl implements IGenTableService {
tableColumn.setColumnComment(column.getComment());
tableColumn.setColumnType(column.getOriginType().toLowerCase());
tableColumn.setSort(column.getPosition());
- tableColumn.setIsRequired(column.isNullable() == 0 ? "1" : "0");
- tableColumn.setIsIncrement(column.isAutoIncrement() == -1 ? "0" : "1");
+ tableColumn.setIsRequired(column.isNullable() ? "1" : "0");
+ tableColumn.setIsIncrement(column.isAutoIncrement() ? "0" : "1");
tableColumns.add(tableColumn);
});
return tableColumns;
From 679c83e837dbc508ce6190d56889e49a38a0a7c9 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, 20 Jun 2025 10:43:09 +0800
Subject: [PATCH 20/44] =?UTF-8?q?update=20warm-flow1.7.3=20=3D>=201.7.4=20?=
=?UTF-8?q?=E6=94=AF=E6=8C=81=E6=B5=81=E7=A8=8B=E5=9B=BE=E6=82=AC=E6=B5=AE?=
=?UTF-8?q?=E7=AA=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../system/dubbo/RemoteUserServiceImpl.java | 5 +-
.../common/constant/FlowConstant.java | 5 +
.../impl/CategoryNameTranslationImpl.java | 8 +-
.../service/impl/FlwChartExtServiceImpl.java | 251 ++++++++++++++++++
.../service/impl/FlwInstanceServiceImpl.java | 6 +-
.../impl/FlwTaskAssigneeServiceImpl.java | 5 +-
.../service/impl/FlwTaskServiceImpl.java | 9 +-
.../service/impl/TestLeaveServiceImpl.java | 2 +-
script/sql/ry-workflow.sql | 20 +-
10 files changed, 285 insertions(+), 28 deletions(-)
create mode 100644 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java
diff --git a/pom.xml b/pom.xml
index d25503074..d258993e1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -55,7 +55,7 @@
8.7.2-20250603
- 1.7.3
+ 1.7.4
2.3.0
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
index aad3b1a30..23fd16b44 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/dubbo/RemoteUserServiceImpl.java
@@ -312,7 +312,10 @@ public class RemoteUserServiceImpl implements RemoteUserService {
return new ArrayList<>();
}
List list = userMapper.selectVoList(new LambdaQueryWrapper()
- .select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber)
+ .select(SysUser::getUserId, SysUser::getDeptId, SysUser::getUserName,
+ SysUser::getNickName, SysUser::getUserType, SysUser::getEmail,
+ SysUser::getPhonenumber, SysUser::getSex, SysUser::getStatus,
+ SysUser::getCreateTime)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getUserId, userIds));
return MapstructUtils.convert(list, RemoteUserVo.class);
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java
index f3290b841..aaa640bfb 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java
@@ -73,4 +73,9 @@ public interface FlowConstant {
*/
String MESSAGE_NOTICE = "messageNotice";
+ /**
+ * 任务状态
+ */
+ String WF_TASK_STATUS = "wf_task_status";
+
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/CategoryNameTranslationImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/CategoryNameTranslationImpl.java
index 8c73b59ee..883a967aa 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/CategoryNameTranslationImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/CategoryNameTranslationImpl.java
@@ -26,12 +26,6 @@ public class CategoryNameTranslationImpl implements TranslationInterface
@Override
public String translation(Object key, String other) {
- Long id = null;
- if (key instanceof String categoryId) {
- id = Convert.toLong(categoryId);
- } else if (key instanceof Long categoryId) {
- id = categoryId;
- }
- return flwCategoryService.selectCategoryNameById(id);
+ return flwCategoryService.selectCategoryNameById(Convert.toLong(key));
}
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java
new file mode 100644
index 000000000..ba4319b87
--- /dev/null
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java
@@ -0,0 +1,251 @@
+package org.dromara.workflow.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.service.DictService;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.core.utils.ServletUtils;
+import org.dromara.common.core.utils.StreamUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.system.api.RemoteDeptService;
+import org.dromara.system.api.RemoteUserService;
+import org.dromara.system.api.domain.vo.RemoteUserVo;
+import org.dromara.warm.flow.core.dto.DefJson;
+import org.dromara.warm.flow.core.dto.NodeJson;
+import org.dromara.warm.flow.core.dto.PromptContent;
+import org.dromara.warm.flow.core.enums.NodeType;
+import org.dromara.warm.flow.core.utils.MapUtil;
+import org.dromara.warm.flow.orm.entity.FlowHisTask;
+import org.dromara.warm.flow.orm.mapper.FlowHisTaskMapper;
+import org.dromara.warm.flow.ui.service.ChartExtService;
+import org.dromara.workflow.common.ConditionalOnEnable;
+import org.dromara.workflow.common.constant.FlowConstant;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 流程图提示信息
+ *
+ * @author AprilWind
+ */
+@ConditionalOnEnable
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class FlwChartExtServiceImpl implements ChartExtService {
+
+ private final FlowHisTaskMapper flowHisTaskMapper;
+ private final DictService dictService;
+
+ @DubboReference
+ private RemoteUserService remoteUserService;
+ @DubboReference
+ private RemoteDeptService remoteDeptService;
+
+ /**
+ * 设置流程图提示信息
+ *
+ * @param defJson 流程定义json对象
+ */
+ @Override
+ public void execute(DefJson defJson) {
+ // 临时修复 后续版本将通过defjson获取流程实例ID
+ String[] parts = ServletUtils.getRequest().getRequestURI().split("/");
+ Long instanceId = Convert.toLong(parts[parts.length - 1]);
+
+ // 根据流程实例ID查询所有相关的历史任务列表
+ List flowHisTasks = this.getHisTaskGroupedByNode(instanceId);
+ if (CollUtil.isEmpty(flowHisTasks)) {
+ return;
+ }
+
+ // 按节点编号(nodeCode)对历史任务进行分组
+ Map> groupedByNode = StreamUtils.groupByKey(flowHisTasks, FlowHisTask::getNodeCode);
+
+ // 批量查询所有审批人的用户信息
+ List userDTOList = remoteUserService.selectListByIds(StreamUtils.toList(flowHisTasks, e -> Convert.toLong(e.getApprover())));
+
+ // 将查询到的用户列表转换为以用户ID为key的映射
+ Map userMap = StreamUtils.toIdentityMap(userDTOList, RemoteUserVo::getUserId);
+
+ Map dictType = dictService.getAllDictByDictType(FlowConstant.WF_TASK_STATUS);
+
+ // 遍历流程定义中的每个节点,调用处理方法,将对应节点的任务列表及用户信息传入,生成扩展提示内容
+ for (NodeJson nodeJson : defJson.getNodeList()) {
+ // 获取当前节点对应的历史任务列表,如果没有则返回空列表避免空指针
+ List taskList = groupedByNode.get(nodeJson.getNodeCode());
+ if (CollUtil.isEmpty(taskList)) {
+ continue;
+ }
+ // 处理当前节点的扩展信息,包括构建审批人提示内容等
+ this.processNodeExtInfo(nodeJson, taskList, userMap, dictType);
+ }
+ }
+
+ /**
+ * 初始化流程图提示信息
+ *
+ * @param defJson 流程定义json对象
+ */
+ @Override
+ public void initPromptContent(DefJson defJson) {
+ defJson.setTopText("流程名称: " + defJson.getFlowName());
+ defJson.getNodeList().forEach(nodeJson -> {
+ nodeJson.setPromptContent(
+ new PromptContent()
+ // 提示信息
+ .setInfo(
+ CollUtil.newArrayList(
+ new PromptContent.InfoItem()
+ .setPrefix("任务名称: ")
+ .setContent(nodeJson.getNodeName())
+ .setContentStyle(Map.of(
+ "border", "1px solid #d1e9ff",
+ "backgroundColor", "#e8f4ff",
+ "padding", "4px 8px",
+ "borderRadius", "4px"
+ ))
+ .setRowStyle(Map.of(
+ "fontWeight", "bold",
+ "margin", "0 0 6px 0",
+ "padding", "0 0 8px 0",
+ "borderBottom", "1px solid #ccc"
+ ))
+ )
+ )
+ // 弹窗样式
+ .setDialogStyle(MapUtil.mergeAll(
+ "position", "absolute",
+ "backgroundColor", "#fff",
+ "border", "1px solid #ccc",
+ "borderRadius", "4px",
+ "boxShadow", "0 2px 8px rgba(0, 0, 0, 0.15)",
+ "padding", "8px 12px",
+ "fontSize", "14px",
+ "zIndex", "1000",
+ "maxWidth", "500px",
+ "overflowY", "visible",
+ "overflowX", "hidden",
+ "color", "#333",
+ "pointerEvents", "auto",
+ "scrollbarWidth", "thin"
+ ))
+ );
+ });
+ }
+
+ /**
+ * 处理节点的扩展信息,构建用于流程图悬浮提示的内容
+ *
+ * @param nodeJson 当前节点对象
+ * @param taskList 当前节点对应的历史审批任务列表
+ */
+ private void processNodeExtInfo(NodeJson nodeJson, List taskList, Map userMap, Map dictType) {
+
+ // 获取节点提示内容对象中的 info 列表,用于追加提示项
+ List info = nodeJson.getPromptContent().getInfo();
+
+ // 遍历所有任务记录,构建提示内容
+ for (FlowHisTask task : taskList) {
+ RemoteUserVo userDTO = userMap.get(Convert.toLong(task.getApprover()));
+ if (ObjectUtil.isEmpty(userDTO)) {
+ continue;
+ }
+
+ // 查询用户所属部门名称
+ String deptName = remoteDeptService.selectDeptNameByIds(Convert.toStr(userDTO.getDeptId()));
+
+ // 添加标题项,如:👤 张三(市场部)
+ info.add(new PromptContent.InfoItem()
+ .setPrefix(StringUtils.format("👥 {}({})", userDTO.getNickName(), deptName))
+ .setPrefixStyle(Map.of(
+ "fontWeight", "bold",
+ "fontSize", "15px",
+ "color", "#333"
+ ))
+ .setRowStyle(Map.of(
+ "margin", "8px 0",
+ "borderBottom", "1px dashed #ccc"
+ ))
+ );
+
+ // 添加具体信息项:账号、耗时、时间
+ info.add(buildInfoItem("用户账号", userDTO.getUserName()));
+ info.add(buildInfoItem("审批状态", dictType.get(task.getFlowStatus())));
+ info.add(buildInfoItem("审批耗时", DateUtils.getTimeDifference(task.getUpdateTime(), task.getCreateTime())));
+ info.add(buildInfoItem("办理时间", DateUtils.formatDateTime(task.getUpdateTime())));
+ }
+ }
+
+ /**
+ * 构建单条提示内容对象 InfoItem,用于悬浮窗显示(key: value)
+ *
+ * @param key 字段名(作为前缀)
+ * @param value 字段值
+ * @return 提示项对象
+ */
+ private PromptContent.InfoItem buildInfoItem(String key, String value) {
+ return new PromptContent.InfoItem()
+ // 前缀
+ .setPrefix(key + ": ")
+ // 前缀样式
+ .setPrefixStyle(Map.of(
+ "textAlign", "right",
+ "color", "#444",
+ "userSelect", "none",
+ "display", "inline-block",
+ "width", "100px",
+ "paddingRight", "8px",
+ "fontWeight", "500",
+ "fontSize", "14px",
+ "lineHeight", "24px",
+ "verticalAlign", "middle"
+ ))
+ // 内容
+ .setContent(value)
+ // 内容样式
+ .setContentStyle(Map.of(
+ "backgroundColor", "#f7faff",
+ "color", "#005cbf",
+ "padding", "4px 8px",
+ "fontSize", "14px",
+ "borderRadius", "4px",
+ "whiteSpace", "normal",
+ "border", "1px solid #d0e5ff",
+ "userSelect", "text",
+ "lineHeight", "20px"
+ ))
+ // 行样式
+ .setRowStyle(Map.of(
+ "color", "#222",
+ "alignItems", "center",
+ "display", "flex",
+ "marginBottom", "6px",
+ "fontWeight", "400",
+ "fontSize", "14px"
+ ));
+ }
+
+ /**
+ * 根据流程实例ID获取历史任务列表
+ *
+ * @param instanceId 流程实例ID
+ * @return 历史任务列表
+ */
+ public List getHisTaskGroupedByNode(Long instanceId) {
+ LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
+ wrapper.eq(FlowHisTask::getInstanceId, instanceId)
+ .eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey())
+ .orderByDesc(FlowHisTask::getCreateTime, FlowHisTask::getUpdateTime);
+ return flowHisTaskMapper.selectList(wrapper);
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
index b86d0f36c..0c1f21b7c 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwInstanceServiceImpl.java
@@ -304,9 +304,9 @@ public class FlwInstanceServiceImpl implements IFlwInstanceService {
}
//历史任务
LambdaQueryWrapper wrapper = Wrappers.lambdaQuery();
- wrapper.eq(FlowHisTask::getInstanceId, instanceId);
- wrapper.eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey());
- wrapper.orderByDesc(FlowHisTask::getCreateTime).orderByDesc(FlowHisTask::getUpdateTime);
+ wrapper.eq(FlowHisTask::getInstanceId, instanceId)
+ .eq(FlowHisTask::getNodeType, NodeType.BETWEEN.getKey())
+ .orderByDesc(FlowHisTask::getCreateTime, FlowHisTask::getUpdateTime);
List flowHisTasks = flowHisTaskMapper.selectList(wrapper);
if (CollUtil.isNotEmpty(flowHisTasks)) {
list.addAll(BeanUtil.copyToList(flowHisTasks, FlowHisTaskVo.class));
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java
index 51f730c2f..ccb5106e7 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskAssigneeServiceImpl.java
@@ -2,6 +2,7 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Pair;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
@@ -249,10 +250,10 @@ public class FlwTaskAssigneeServiceImpl implements IFlwTaskAssigneeService, Hand
try {
String[] parts = storageId.split(StrUtil.COLON, 2);
if (parts.length < 2) {
- return Pair.of(TaskAssigneeEnum.USER, Long.valueOf(parts[0]));
+ return Pair.of(TaskAssigneeEnum.USER, Convert.toLong(parts[0]));
} else {
TaskAssigneeEnum type = TaskAssigneeEnum.fromCode(parts[0] + StrUtil.COLON);
- return Pair.of(type, Long.valueOf(parts[1]));
+ return Pair.of(type, Convert.toLong(parts[1]));
}
} catch (Exception e) {
log.warn("解析 storageId 失败,格式非法:{},错误信息:{}", storageId, e.getMessage());
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
index 07db03dde..1e4972def 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
@@ -534,7 +534,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
//构建以下节点数据
List buildNextTaskList = StreamUtils.toList(nextNodeList, node -> taskService.addTask(node, instance, definition, FlowParams.build()));
//办理人变量替换
- ExpressionUtil.evalVariable(buildNextTaskList, mergeVariable);
+ ExpressionUtil.evalVariable(buildNextTaskList,
+ FlowParams.build()
+ .variable(mergeVariable)
+ );
for (FlowNode flowNode : nextFlowNodes) {
buildNextTaskList.stream().filter(t -> t.getNodeCode().equals(flowNode.getNodeCode())).findFirst().ifPresent(t -> {
if (CollUtil.isNotEmpty(t.getPermissionList())) {
@@ -718,7 +721,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
for (Map.Entry> entry : listMap.entrySet()) {
List value = entry.getValue();
if (CollUtil.isNotEmpty(value)) {
- List userDtoList = remoteUserService.selectListByIds(StreamUtils.toList(value, e -> Long.valueOf(e.getProcessedBy())));
+ List userDtoList = remoteUserService.selectListByIds(StreamUtils.toList(value, e -> Convert.toLong(e.getProcessedBy())));
map.put(entry.getKey(), userDtoList);
}
}
@@ -737,7 +740,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
if (CollUtil.isEmpty(userList)) {
return Collections.emptyList();
}
- return remoteUserService.selectListByIds(StreamUtils.toList(userList, e -> Long.valueOf(e.getProcessedBy())));
+ return remoteUserService.selectListByIds(StreamUtils.toList(userList, e -> Convert.toLong(e.getProcessedBy())));
}
/**
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
index 0b227a4de..4cb2f4c4a 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/TestLeaveServiceImpl.java
@@ -147,7 +147,7 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
public void processHandler(ProcessEvent processEvent) {
TenantHelper.dynamic(processEvent.getTenantId(), () -> {
log.info("当前任务执行了{}", processEvent.toString());
- TestLeave testLeave = baseMapper.selectById(Long.valueOf(processEvent.getBusinessId()));
+ TestLeave testLeave = baseMapper.selectById(Convert.toLong(processEvent.getBusinessId()));
testLeave.setStatus(processEvent.getStatus());
// 用于例如审批附件 审批意见等 存储到业务表内 自行根据业务实现存储流程
Map params = processEvent.getParams();
diff --git a/script/sql/ry-workflow.sql b/script/sql/ry-workflow.sql
index 23893ddba..68557aa17 100644
--- a/script/sql/ry-workflow.sql
+++ b/script/sql/ry-workflow.sql
@@ -29,7 +29,7 @@ CREATE TABLE `flow_node`
`definition_id` bigint NOT NULL COMMENT '流程定义id',
`node_code` varchar(100) NOT NULL COMMENT '流程节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '流程节点名称',
- `permission_flag` varchar(200) DEFAULT NULL COMMENT '权限标识(权限类型:权限标识,可以多个,用逗号隔开)',
+ `permission_flag` varchar(200) DEFAULT NULL COMMENT '权限标识(权限类型:权限标识,可以多个,用@@隔开)',
`node_ratio` decimal(6, 3) DEFAULT NULL COMMENT '流程签署比例值',
`coordinate` varchar(100) DEFAULT NULL COMMENT '坐标',
`any_node_skip` varchar(100) DEFAULT NULL COMMENT '任意结点跳转',
@@ -42,7 +42,7 @@ CREATE TABLE `flow_node`
`version` varchar(20) NOT NULL COMMENT '版本',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
- `ext` text COMMENT '扩展属性',
+ `ext` text COMMENT '节点扩展属性',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
`tenant_id` varchar(40) DEFAULT NULL COMMENT '租户id',
PRIMARY KEY (`id`) USING BTREE
@@ -108,25 +108,25 @@ CREATE TABLE `flow_task`
CREATE TABLE `flow_his_task`
(
- `id` bigint(20) NOT NULL COMMENT '主键id',
- `definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
- `instance_id` bigint(20) NOT NULL COMMENT '对应flow_instance表的id',
- `task_id` bigint(20) NOT NULL COMMENT '对应flow_task表的id',
+ `id` bigint(20) NOT NULL COMMENT '主键id',
+ `definition_id` bigint(20) NOT NULL COMMENT '对应flow_definition表的id',
+ `instance_id` bigint(20) NOT NULL COMMENT '对应flow_instance表的id',
+ `task_id` bigint(20) NOT NULL COMMENT '对应flow_task表的id',
`node_code` varchar(100) DEFAULT NULL COMMENT '开始节点编码',
`node_name` varchar(100) DEFAULT NULL COMMENT '开始节点名称',
`node_type` tinyint(1) DEFAULT NULL COMMENT '开始节点类型(0开始节点 1中间节点 2结束节点 3互斥网关 4并行网关)',
`target_node_code` varchar(200) DEFAULT NULL COMMENT '目标节点编码',
`target_node_name` varchar(200) DEFAULT NULL COMMENT '结束节点名称',
`approver` varchar(40) DEFAULT NULL COMMENT '审批者',
- `cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
+ `cooperate_type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '协作方式(1审批 2转办 3委派 4会签 5票签 6加签 7减签)',
`collaborator` varchar(40) DEFAULT NULL COMMENT '协作人',
- `skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
- `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
+ `skip_type` varchar(10) NOT NULL COMMENT '流转类型(PASS通过 REJECT退回 NONE无动作)',
+ `flow_status` varchar(20) NOT NULL COMMENT '流程状态(0待提交 1审批中 2审批通过 4终止 5作废 6撤销 8已完成 9已退回 10失效 11拿回)',
`form_custom` char(1) DEFAULT 'N' COMMENT '审批表单是否自定义(Y是 N否)',
`form_path` varchar(100) DEFAULT NULL COMMENT '审批表单路径',
`message` varchar(500) DEFAULT NULL COMMENT '审批意见',
`variable` TEXT DEFAULT NULL COMMENT '任务变量',
- `ext` varchar(500) DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
+ `ext` TEXT DEFAULT NULL COMMENT '业务详情 存业务表对象json字符串',
`create_time` datetime DEFAULT NULL COMMENT '任务开始时间',
`update_time` datetime DEFAULT NULL COMMENT '审批完成时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志',
From 17c94cdc1a319aa3a64bd67c51ade99b62def853 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, 20 Jun 2025 11:01:28 +0800
Subject: [PATCH 21/44] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E5=B7=A5?=
=?UTF-8?q?=E4=BD=9C=E6=B5=81sql(=E5=B0=8F=E6=94=B9=E5=8A=A8)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
script/sql/oracle/oracle_ry_workflow.sql | 32 +++++++++++++-------
script/sql/postgres/postgres_ry_workflow.sql | 11 +++----
2 files changed, 26 insertions(+), 17 deletions(-)
diff --git a/script/sql/oracle/oracle_ry_workflow.sql b/script/sql/oracle/oracle_ry_workflow.sql
index 08fb357e0..97029ffe3 100644
--- a/script/sql/oracle/oracle_ry_workflow.sql
+++ b/script/sql/oracle/oracle_ry_workflow.sql
@@ -1,3 +1,6 @@
+-- ----------------------------
+-- 0、warm-flow-all.sql,地址:https://gitee.com/dromara/warm-flow/blob/master/sql/oracle/oracle-wram-flow-all.sql
+-- ----------------------------
create table FLOW_DEFINITION
(
ID NUMBER(20) not null,
@@ -18,7 +21,8 @@ create table FLOW_DEFINITION
TENANT_ID VARCHAR2(40)
);
-alter table FLOW_DEFINITION add constraint PK_FLOW_DEFINITION primary key (ID);
+alter table FLOW_DEFINITION
+ add constraint PK_FLOW_DEFINITION primary key (ID);
comment on table FLOW_DEFINITION is '流程定义表';
comment on column FLOW_DEFINITION.ID is '主键id';
@@ -57,13 +61,14 @@ create table FLOW_NODE
VERSION VARCHAR2(20),
CREATE_TIME DATE,
UPDATE_TIME DATE,
- EXT VARCHAR2(500),
+ EXT CLOB,
DEL_FLAG VARCHAR2(1) default '0',
TENANT_ID VARCHAR2(40),
PERMISSION_FLAG VARCHAR2(200)
);
-alter table FLOW_NODE add constraint PK_FLOW_NODE primary key (ID);
+alter table FLOW_NODE
+ add constraint PK_FLOW_NODE primary key (ID);
comment on table FLOW_NODE is '流程节点表';
comment on column FLOW_NODE.ID is '主键id';
@@ -83,10 +88,10 @@ comment on column FLOW_NODE.FORM_PATH is '审批表单路径';
comment on column FLOW_NODE.VERSION is '版本';
comment on column FLOW_NODE.CREATE_TIME is '创建时间';
comment on column FLOW_NODE.UPDATE_TIME is '更新时间';
-comment on column FLOW_NODE.EXT is '扩展属性';
+comment on column FLOW_NODE.EXT is '节点扩展属性';
comment on column FLOW_NODE.DEL_FLAG is '删除标志';
comment on column FLOW_NODE.TENANT_ID is '租户id';
-comment on column FLOW_NODE.PERMISSION_FLAG is '权限标识(权限类型:权限标识,可以多个,用逗号隔开)';
+comment on column FLOW_NODE.PERMISSION_FLAG is '权限标识(权限类型:权限标识,可以多个,用@@隔开)';
create table FLOW_SKIP
(
@@ -106,7 +111,8 @@ create table FLOW_SKIP
TENANT_ID VARCHAR2(40)
);
-alter table FLOW_SKIP add constraint PK_FLOW_SKIP primary key (ID);
+alter table FLOW_SKIP
+ add constraint PK_FLOW_SKIP primary key (ID);
comment on table FLOW_SKIP is '节点跳转关联表';
comment on column FLOW_SKIP.ID is '主键id';
@@ -144,7 +150,8 @@ create table FLOW_INSTANCE
TENANT_ID VARCHAR2(40)
);
-alter table FLOW_INSTANCE add constraint PK_FLOW_INSTANCE primary key (ID);
+alter table FLOW_INSTANCE
+ add constraint PK_FLOW_INSTANCE primary key (ID);
comment on table FLOW_INSTANCE is '流程实例表';
comment on column FLOW_INSTANCE.ID is '主键id';
@@ -181,7 +188,8 @@ create table FLOW_TASK
TENANT_ID VARCHAR2(40)
);
-alter table FLOW_TASK add constraint PK_FLOW_TASK primary key (ID);
+alter table FLOW_TASK
+ add constraint PK_FLOW_TASK primary key (ID);
comment on table FLOW_TASK is '待办任务表';
comment on column FLOW_TASK.ID is '主键id';
@@ -218,7 +226,7 @@ create table FLOW_HIS_TASK
FORM_PATH VARCHAR2(100),
MESSAGE VARCHAR2(500),
VARIABLE CLOB,
- EXT VARCHAR2(500),
+ EXT CLOB,
CREATE_TIME DATE,
UPDATE_TIME DATE,
DEL_FLAG VARCHAR2(1) default '0',
@@ -226,7 +234,8 @@ create table FLOW_HIS_TASK
);
-alter table FLOW_HIS_TASK add constraint PK_FLOW_HIS_TASK primary key (ID);
+alter table FLOW_HIS_TASK
+ add constraint PK_FLOW_HIS_TASK primary key (ID);
comment on table FLOW_HIS_TASK is '历史任务记录表';
comment on column FLOW_HIS_TASK.ID is '主键id';
@@ -266,7 +275,8 @@ create table FLOW_USER
TENANT_ID VARCHAR2(40)
);
-alter table FLOW_USER add constraint PK_FLOW_USER primary key (ID);
+alter table FLOW_USER
+ add constraint PK_FLOW_USER primary key (ID);
comment on table FLOW_USER is '待办任务表';
comment on column FLOW_USER.ID is '主键id';
diff --git a/script/sql/postgres/postgres_ry_workflow.sql b/script/sql/postgres/postgres_ry_workflow.sql
index cc231a31d..9ce6c3f0a 100644
--- a/script/sql/postgres/postgres_ry_workflow.sql
+++ b/script/sql/postgres/postgres_ry_workflow.sql
@@ -47,7 +47,7 @@ CREATE TABLE flow_node
definition_id int8 NOT NULL, -- 流程定义id
node_code varchar(100) NOT NULL, -- 流程节点编码
node_name varchar(100) NULL, -- 流程节点名称
- permission_flag varchar(200) NULL, -- 权限标识(权限类型:权限标识,可以多个,用逗号隔开)
+ permission_flag varchar(200) NULL, -- 权限标识(权限类型:权限标识,可以多个,用@@隔开)
node_ratio numeric(6, 3) NULL, -- 流程签署比例值
coordinate varchar(100) NULL, -- 坐标
any_node_skip varchar(100) NULL, -- 任意结点跳转
@@ -60,7 +60,7 @@ CREATE TABLE flow_node
"version" varchar(20) NOT NULL, -- 版本
create_time timestamp NULL, -- 创建时间
update_time timestamp NULL, -- 更新时间
- ext varchar(500) NULL, -- 扩展属性
+ ext text NULL, -- 扩展属性
del_flag bpchar(1) NULL DEFAULT '0':: character varying, -- 删除标志
tenant_id varchar(40) NULL, -- 租户id
CONSTRAINT flow_node_pkey PRIMARY KEY (id)
@@ -72,7 +72,7 @@ COMMENT ON COLUMN flow_node.node_type IS '节点类型(0开始节点 1中间
COMMENT ON COLUMN flow_node.definition_id IS '流程定义id';
COMMENT ON COLUMN flow_node.node_code IS '流程节点编码';
COMMENT ON COLUMN flow_node.node_name IS '流程节点名称';
-COMMENT ON COLUMN flow_node.permission_flag IS '权限标识(权限类型:权限标识,可以多个,用逗号隔开)';
+COMMENT ON COLUMN flow_node.permission_flag IS '权限标识(权限类型:权限标识,可以多个,用@@隔开)';
COMMENT ON COLUMN flow_node.node_ratio IS '流程签署比例值';
COMMENT ON COLUMN flow_node.coordinate IS '坐标';
COMMENT ON COLUMN flow_node.any_node_skip IS '任意结点跳转';
@@ -85,7 +85,7 @@ COMMENT ON COLUMN flow_node.form_path IS '审批表单路径';
COMMENT ON COLUMN flow_node."version" IS '版本';
COMMENT ON COLUMN flow_node.create_time IS '创建时间';
COMMENT ON COLUMN flow_node.update_time IS '更新时间';
-COMMENT ON COLUMN flow_node.ext IS '扩展属性';
+COMMENT ON COLUMN flow_node.ext IS '节点扩展属性';
COMMENT ON COLUMN flow_node.del_flag IS '删除标志';
COMMENT ON COLUMN flow_node.tenant_id IS '租户id';
@@ -215,7 +215,7 @@ CREATE TABLE flow_his_task
flow_status varchar(20) NOT NULL, -- 流程状态(0待提交 1审批中 2 审批通过 8已完成 9已退回 10失效)
form_custom bpchar(1) NULL DEFAULT 'N':: character varying, -- 审批表单是否自定义(Y是 N否)
form_path varchar(100) NULL, -- 审批表单路径
- ext varchar(500) NULL, -- 扩展字段,预留给业务系统使用
+ ext text NULL, -- 扩展字段,预留给业务系统使用
message varchar(500) NULL, -- 审批意见
variable text NULL, -- 任务变量
create_time timestamp NULL, -- 创建时间
@@ -265,7 +265,6 @@ CREATE TABLE flow_user
);
CREATE INDEX user_processed_type ON flow_user USING btree (processed_by, type);
CREATE INDEX user_associated_idx ON FLOW_USER USING btree (associated);
-
COMMENT ON TABLE flow_user IS '流程用户表';
COMMENT ON COLUMN flow_user.id IS '主键id';
From cf64f2139fa8c09a2a44d47bb38903359efef62f 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, 22 Jun 2025 16:40:49 +0800
Subject: [PATCH 22/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20sse=20?=
=?UTF-8?q?=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E8=AE=BE=E7=BD=AE=E4=B8=BA?=
=?UTF-8?q?=E4=B8=80=E5=A4=A9=20=E9=81=BF=E5=85=8D=E8=BF=9E=E6=8E=A5?=
=?UTF-8?q?=E4=B9=8B=E5=90=8E=E7=9B=B4=E6=8E=A5=E5=85=B3=E9=97=AD=E6=B5=8F?=
=?UTF-8?q?=E8=A7=88=E5=99=A8=E5=AF=BC=E8=87=B4=E8=BF=9E=E6=8E=A5=E5=81=9C?=
=?UTF-8?q?=E6=BB=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/common/sse/core/SseEmitterManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
index cb9442850..1732cc1aa 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
@@ -39,7 +39,7 @@ public class SseEmitterManager {
Map emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userId, k -> new ConcurrentHashMap<>());
// 创建一个新的 SseEmitter 实例,超时时间设置为 0 表示无限制
- SseEmitter emitter = new SseEmitter(0L);
+ SseEmitter emitter = new SseEmitter(86400L);
emitters.put(token, emitter);
From 4263ccef62f4993ffd3390570866c20358ac03f3 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, 23 Jun 2025 14:42:29 +0800
Subject: [PATCH 23/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8D=87?=
=?UTF-8?q?=E7=BA=A7anyline=E8=BF=94=E5=9B=9E=E5=80=BC=E7=B1=BB=E5=9E=8B?=
=?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=AF=BC=E8=87=B4=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/org/dromara/gen/service/GenTableServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
index ad4fc487e..b045fc9ef 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
@@ -297,7 +297,7 @@ public class GenTableServiceImpl implements IGenTableService {
List tableColumns = new ArrayList<>();
columns.forEach((columnName, column) -> {
GenTableColumn tableColumn = new GenTableColumn();
- tableColumn.setIsPk(String.valueOf(column.isPrimaryKey()));
+ tableColumn.setIsPk(column.isPrimaryKey() ? "1" : "0");
tableColumn.setColumnName(column.getName());
tableColumn.setColumnComment(column.getComment());
tableColumn.setColumnType(column.getOriginType().toLowerCase());
From d2f43e7f95f69e47d1b9f1c24d4f9680d7965ded 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, 23 Jun 2025 14:56:17 +0800
Subject: [PATCH 24/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8D=87?=
=?UTF-8?q?=E7=BA=A7anyline=E8=BF=94=E5=9B=9E=E5=80=BC=E7=B1=BB=E5=9E=8B?=
=?UTF-8?q?=E5=8F=98=E6=9B=B4=E5=AF=BC=E8=87=B4=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/org/dromara/gen/service/GenTableServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
index b045fc9ef..569b2683d 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/service/GenTableServiceImpl.java
@@ -303,7 +303,7 @@ public class GenTableServiceImpl implements IGenTableService {
tableColumn.setColumnType(column.getOriginType().toLowerCase());
tableColumn.setSort(column.getPosition());
tableColumn.setIsRequired(column.isNullable() ? "1" : "0");
- tableColumn.setIsIncrement(column.isAutoIncrement() ? "0" : "1");
+ tableColumn.setIsIncrement(column.isAutoIncrement() ? "1" : "0");
tableColumns.add(tableColumn);
});
return tableColumns;
From 84f0bc183201bd04efa949db1e6f14888b37239f 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, 23 Jun 2025 16:58:50 +0800
Subject: [PATCH 25/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=8A=9E?=
=?UTF-8?q?=E7=90=86=E4=BB=BB=E5=8A=A1=E6=97=B6=E6=9C=AA=E4=BC=A0=E5=8F=82?=
=?UTF-8?q?=E6=95=B0=EF=BC=8C=E5=AF=BC=E8=87=B4=E6=89=A7=E8=A1=8C=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96=E5=88=B0=E4=BB=BB?=
=?UTF-8?q?=E5=8A=A1=E5=8F=82=E6=95=B0=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/workflow/domain/bo/CompleteTaskBo.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java
index 5feb8dbcb..360fc3b81 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java
@@ -65,13 +65,13 @@ public class CompleteTaskBo implements Serializable {
/**
* 扩展变量(此处为逗号分隔的ossId)
- * @return
*/
private String ext;
public Map getVariables() {
if (variables == null) {
- return new HashMap<>(16);
+ variables = new HashMap<>(16);
+ return variables;
}
variables.entrySet().removeIf(entry -> Objects.isNull(entry.getValue()));
return variables;
From 1c126dc5d3cc63f6a5b6d30e04bd12500e081b16 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, 24 Jun 2025 11:25:15 +0800
Subject: [PATCH 26/44] =?UTF-8?q?reset=20=E5=9B=9E=E6=BB=9Aaws-s3=E7=89=88?=
=?UTF-8?q?=E6=9C=AC=20=E6=9C=89=E6=9C=AA=E7=9F=A5=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/pom.xml b/pom.xml
index d258993e1..3b8284605 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,10 +46,8 @@
2.7.0
1.2.83
-
- 2.31.67
-
+ 2.28.22
3.3.4
From 249d7bdcdee123c5cef2bc3c4595be6171cfcfec 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, 24 Jun 2025 11:42:50 +0800
Subject: [PATCH 27/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E8=B6=85?=
=?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4=E5=8D=95=E4=BD=8D=E8=AE=BE=E7=BD=AE?=
=?UTF-8?q?=E9=94=99=E8=AF=AF=20=E5=BA=94=E8=AF=A5=E6=98=AF=E6=AF=AB?=
=?UTF-8?q?=E7=A7=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/common/sse/core/SseEmitterManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
index 1732cc1aa..786b65f88 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
@@ -39,7 +39,7 @@ public class SseEmitterManager {
Map emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userId, k -> new ConcurrentHashMap<>());
// 创建一个新的 SseEmitter 实例,超时时间设置为 0 表示无限制
- SseEmitter emitter = new SseEmitter(86400L);
+ SseEmitter emitter = new SseEmitter(86400000L);
emitters.put(token, emitter);
From 0aabd18e1cdc05a18a8c5246f6ff6739b60534d6 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, 24 Jun 2025 11:43:40 +0800
Subject: [PATCH 28/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E8=B6=85?=
=?UTF-8?q?=E6=97=B6=E6=97=B6=E9=97=B4=E5=8D=95=E4=BD=8D=E8=AE=BE=E7=BD=AE?=
=?UTF-8?q?=E9=94=99=E8=AF=AF=20=E5=BA=94=E8=AF=A5=E6=98=AF=E6=AF=AB?=
=?UTF-8?q?=E7=A7=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/common/sse/core/SseEmitterManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
index 786b65f88..bc19460f8 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/core/SseEmitterManager.java
@@ -38,7 +38,7 @@ public class SseEmitterManager {
// 每个用户可以有多个 SSE 连接,通过 token 进行区分
Map emitters = USER_TOKEN_EMITTERS.computeIfAbsent(userId, k -> new ConcurrentHashMap<>());
- // 创建一个新的 SseEmitter 实例,超时时间设置为 0 表示无限制
+ // 创建一个新的 SseEmitter 实例,超时时间设置为一天 避免连接之后直接关闭浏览器导致连接停滞
SseEmitter emitter = new SseEmitter(86400000L);
emitters.put(token, emitter);
From f50d7e85c0503ce96530f765c577f87a93ff07d9 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, 25 Jun 2025 10:16:43 +0800
Subject: [PATCH 29/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=85=A8?=
=?UTF-8?q?=E5=B1=80=E6=97=A5=E6=9C=9F=E6=A0=BC=E5=BC=8F=E8=BD=AC=E6=8D=A2?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=8F=90=E5=8D=87=E6=97=A5=E6=9C=9F?=
=?UTF-8?q?=E5=8F=82=E6=95=B0=E8=A7=A3=E6=9E=90=E5=85=BC=E5=AE=B9=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/web/config/ResourcesConfig.java | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java
index 8803dca7e..8dbb589dc 100644
--- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java
+++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/config/ResourcesConfig.java
@@ -1,12 +1,17 @@
package org.dromara.common.web.config;
+import cn.hutool.core.date.DateUtil;
+import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.web.handler.GlobalExceptionHandler;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.context.annotation.Bean;
+import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import java.util.Date;
+
/**
* 通用配置
*
@@ -20,6 +25,17 @@ public class ResourcesConfig implements WebMvcConfigurer {
}
+ @Override
+ public void addFormatters(FormatterRegistry registry) {
+ // 全局日期格式转换配置
+ registry.addConverter(String.class, Date.class, source -> {
+ if (StringUtils.isBlank(source)) {
+ return null;
+ }
+ return DateUtil.parse(source);
+ });
+ }
+
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
}
From d830a7d5cfc03cf3d9ab7c1cdc4117e8e067abdb 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, 25 Jun 2025 17:12:24 +0800
Subject: [PATCH 30/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E4=BB=8E?=
=?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81api=E6=A8=A1=E5=9D=97=E5=8E=BB?=
=?UTF-8?q?=E9=99=A4bus=E4=BE=9D=E8=B5=96=20=E7=94=B1=E4=BD=BF=E7=94=A8?=
=?UTF-8?q?=E8=80=85=E4=B8=BB=E5=8A=A8=E5=A2=9E=E5=8A=A0=E4=BE=9D=E8=B5=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-api/ruoyi-api-workflow/pom.xml | 4 ----
ruoyi-modules/ruoyi-workflow/pom.xml | 6 ++++++
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/ruoyi-api/ruoyi-api-workflow/pom.xml b/ruoyi-api/ruoyi-api-workflow/pom.xml
index 45c32d066..5e9df7727 100644
--- a/ruoyi-api/ruoyi-api-workflow/pom.xml
+++ b/ruoyi-api/ruoyi-api-workflow/pom.xml
@@ -22,10 +22,6 @@
org.dromara
ruoyi-common-core
-
- org.dromara
- ruoyi-common-bus
-
diff --git a/ruoyi-modules/ruoyi-workflow/pom.xml b/ruoyi-modules/ruoyi-workflow/pom.xml
index 5528ff21e..1fee0bdbb 100644
--- a/ruoyi-modules/ruoyi-workflow/pom.xml
+++ b/ruoyi-modules/ruoyi-workflow/pom.xml
@@ -87,6 +87,12 @@
org.dromara
ruoyi-api-workflow
+
+
+ org.dromara
+ ruoyi-common-bus
+
+
From 72001f721ec24b8f817f22cbef4552ce8f827c48 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, 25 Jun 2025 17:14:15 +0800
Subject: [PATCH 31/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E4=B9=8B=E5=89=8D=E4=B8=B4=E6=97=B6=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?bug=E7=9A=84=E7=B1=BB=20satoken=E5=AE=98=E6=96=B9=E5=B7=B2?=
=?UTF-8?q?=E7=BB=8F=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../filter/SaTokenDubbo3ConsumerFilter.java | 65 -------------------
.../filter/SaTokenDubbo3ContextFilter.java | 49 --------------
2 files changed, 114 deletions(-)
delete mode 100644 ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
delete mode 100644 ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
deleted file mode 100644
index 6257217c5..000000000
--- a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ConsumerFilter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2020-2099 sa-token.cc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package cn.dev33.satoken.context.dubbo3.filter;
-
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.context.SaHolder;
-import cn.dev33.satoken.context.SaTokenContextDefaultImpl;
-import cn.dev33.satoken.same.SaSameUtil;
-import cn.dev33.satoken.stp.StpUtil;
-import cn.dev33.satoken.util.SaTokenConsts;
-import org.apache.dubbo.common.constants.CommonConstants;
-import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.*;
-
-/**
- * Sa-Token 整合 Dubbo3 Consumer 端(调用端)过滤器
- *
- * @author click33
- * @since 1.34.0
- */
-@Activate(group = {CommonConstants.CONSUMER}, order = SaTokenConsts.RPC_PERMISSION_FILTER_ORDER)
-public class SaTokenDubbo3ConsumerFilter implements Filter {
-
- @Override
- public Result invoke(Invoker> invoker, Invocation invocation) {
-
- // 追加 Same-Token 参数
- if(SaManager.getConfig().getCheckSameToken()) {
- RpcContext.getServiceContext().setAttachment(SaSameUtil.SAME_TOKEN,SaSameUtil.getToken());
- }
-
- // 无上下文直接跳过下面流程
- if (!SaHolder.getContext().isValid()) {
- return invoker.invoke(invocation);
- }
-
- // 1. 调用前,向下传递会话Token
- if(SaManager.getSaTokenContext() != SaTokenContextDefaultImpl.defaultContext) {
- RpcContext.getServiceContext().setAttachment(SaTokenConsts.JUST_CREATED, StpUtil.getTokenValueNotCut());
- }
-
- // 2. 开始调用
- Result invoke = invoker.invoke(invocation);
-
- // 3. 调用后,解析回传的Token值
- StpUtil.setTokenValue(invoke.getAttachment(SaTokenConsts.JUST_CREATED_NOT_PREFIX));
-
- // note
- return invoke;
- }
-
-}
diff --git a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java b/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
deleted file mode 100644
index 341019cab..000000000
--- a/ruoyi-common/ruoyi-common-dubbo/src/main/java/cn/dev33/satoken/context/dubbo3/filter/SaTokenDubbo3ContextFilter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright 2020-2099 sa-token.cc
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package cn.dev33.satoken.context.dubbo3.filter;
-
-import cn.dev33.satoken.SaManager;
-import cn.dev33.satoken.context.SaHolder;
-import cn.dev33.satoken.context.dubbo3.util.SaTokenContextDubbo3Util;
-import cn.dev33.satoken.util.SaTokenConsts;
-import org.apache.dubbo.common.constants.CommonConstants;
-import org.apache.dubbo.common.extension.Activate;
-import org.apache.dubbo.rpc.*;
-
-/**
- * Sa-Token 整合 Dubbo3 上下文初始化过滤器
- *
- * @author click33
- * @since 1.42.0
- */
-@Activate(group = {CommonConstants.PROVIDER}, order = SaTokenConsts.RPC_CONTEXT_FILTER_ORDER)
-public class SaTokenDubbo3ContextFilter implements Filter {
-
- @Override
- public Result invoke(Invoker> invoker, Invocation invocation) {
- if (SaHolder.getContext().isValid()) {
- return invoker.invoke(invocation);
- } else {
- try {
- SaTokenContextDubbo3Util.setContext(RpcContext.getServiceContext());
- return invoker.invoke(invocation);
- } finally {
- SaManager.getSaTokenContext().clearContext();
- }
- }
- }
-
-}
From 6e7ecc96cb5566e511c8e138ed6b5c7e4312784d 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, 26 Jun 2025 09:54:48 +0800
Subject: [PATCH 32/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E5=88=A0?=
=?UTF-8?q?=E9=99=A4=E9=94=99=E8=AF=AF=E7=9A=84=E6=B3=A8=E8=A7=A3=E5=AF=BC?=
=?UTF-8?q?=E8=87=B4=E5=89=8D=E7=AB=AF=E6=97=B6=E9=97=B4=E4=B8=8D=E6=98=BE?=
=?UTF-8?q?=E7=A4=BA=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java
index 57777edde..4c9b4e936 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/TestLeaveVo.java
@@ -42,14 +42,12 @@ public class TestLeaveVo implements Serializable {
* 开始时间
*/
@ExcelProperty(value = "开始时间")
- @JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
/**
* 结束时间
*/
@ExcelProperty(value = "结束时间")
- @JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
/**
From ee7450c0e81377a6abdce3d1afd4ca087afa302e 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, 26 Jun 2025 15:15:47 +0800
Subject: [PATCH 33/44] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20excel=20?=
=?UTF-8?q?=E5=A4=87=E6=B3=A8=E4=B8=8E=E5=BF=85=E5=A1=AB=E6=B3=A8=E8=A7=A3?=
=?UTF-8?q?=E6=8C=87=E5=AE=9A=E4=B8=8B=E6=A0=87=E4=BD=8D=E7=BD=AE=E9=97=AE?=
=?UTF-8?q?=E9=A2=98=20=E5=8E=BB=E9=99=A4=E4=B8=8B=E6=A0=87=E8=B7=9F?=
=?UTF-8?q?=E9=9A=8F=E4=B8=BB=E8=A6=81=E6=B3=A8=E8=A7=A3=E9=A1=BA=E5=BA=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../excel/annotation/ExcelNotation.java | 4 --
.../excel/annotation/ExcelRequired.java | 4 --
.../excel/handler/DataWriteHandler.java | 58 ++++++++-----------
.../dromara/demo/domain/vo/TestDemoVo.java | 5 +-
4 files changed, 27 insertions(+), 44 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelNotation.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelNotation.java
index f358afcd6..bcc3afec8 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelNotation.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelNotation.java
@@ -13,10 +13,6 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelNotation {
- /**
- * col index
- */
- int index() default -1;
/**
* 批注内容
*/
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelRequired.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelRequired.java
index 15784e140..fbd31ccef 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelRequired.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/annotation/ExcelRequired.java
@@ -15,10 +15,6 @@ import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
public @interface ExcelRequired {
- /**
- * col index
- */
- int index() default -1;
/**
* 字体颜色
*/
diff --git a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java
index 259f8225b..3770f8032 100644
--- a/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java
+++ b/ruoyi-common/ruoyi-common-excel/src/main/java/org/dromara/common/excel/handler/DataWriteHandler.java
@@ -1,6 +1,7 @@
package org.dromara.common.excel.handler;
import cn.hutool.core.collection.CollUtil;
+import cn.idev.excel.annotation.ExcelProperty;
import cn.idev.excel.metadata.data.DataFormatData;
import cn.idev.excel.metadata.data.WriteCellData;
import cn.idev.excel.util.StyleUtil;
@@ -13,7 +14,6 @@ import cn.idev.excel.write.metadata.style.WriteFont;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFClientAnchor;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
-import org.dromara.common.core.utils.reflect.ReflectUtils;
import org.dromara.common.excel.annotation.ExcelNotation;
import org.dromara.common.excel.annotation.ExcelRequired;
@@ -31,12 +31,12 @@ public class DataWriteHandler implements SheetWriteHandler, CellWriteHandler {
/**
* 批注
*/
- private final Map notationMap;
+ private final Map notationMap;
/**
* 头列字体颜色
*/
- private final Map headColumnMap;
+ private final Map headColumnMap;
public DataWriteHandler(Class> clazz) {
@@ -49,15 +49,16 @@ public class DataWriteHandler implements SheetWriteHandler, CellWriteHandler {
if (CollUtil.isEmpty(notationMap) && CollUtil.isEmpty(headColumnMap)) {
return;
}
+ // 第一行
WriteCellData> cellData = context.getFirstCellData();
+ // 第一个格子
WriteCellStyle writeCellStyle = cellData.getOrCreateStyle();
- DataFormatData dataFormatData = new DataFormatData();
- // 单元格设置为文本格式
- dataFormatData.setIndex((short) 49);
- writeCellStyle.setDataFormatData(dataFormatData);
-
if (context.getHead()) {
+ DataFormatData dataFormatData = new DataFormatData();
+ // 单元格设置为文本格式
+ dataFormatData.setIndex((short) 49);
+ writeCellStyle.setDataFormatData(dataFormatData);
Cell cell = context.getCell();
WriteSheetHolder writeSheetHolder = context.getWriteSheetHolder();
Sheet sheet = writeSheetHolder.getSheet();
@@ -67,17 +68,17 @@ public class DataWriteHandler implements SheetWriteHandler, CellWriteHandler {
WriteFont headWriteFont = new WriteFont();
// 加粗
headWriteFont.setBold(true);
- if (CollUtil.isNotEmpty(headColumnMap) && headColumnMap.containsKey(cell.getColumnIndex())) {
+ if (CollUtil.isNotEmpty(headColumnMap) && headColumnMap.containsKey(cell.getStringCellValue())) {
// 设置字体颜色
- headWriteFont.setColor(headColumnMap.get(cell.getColumnIndex()));
+ headWriteFont.setColor(headColumnMap.get(cell.getStringCellValue()));
}
writeCellStyle.setWriteFont(headWriteFont);
CellStyle cellStyle = StyleUtil.buildCellStyle(workbook, null, writeCellStyle);
cell.setCellStyle(cellStyle);
- if (CollUtil.isNotEmpty(notationMap) && notationMap.containsKey(cell.getColumnIndex())) {
+ if (CollUtil.isNotEmpty(notationMap) && notationMap.containsKey(cell.getStringCellValue())) {
// 批注内容
- String notationContext = notationMap.get(cell.getColumnIndex());
+ String notationContext = notationMap.get(cell.getStringCellValue());
// 创建绘图对象
Comment comment = drawing.createCellComment(new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), 0, (short) 5, 5));
comment.setString(new XSSFRichTextString(notationContext));
@@ -89,23 +90,16 @@ public class DataWriteHandler implements SheetWriteHandler, CellWriteHandler {
/**
* 获取必填列
*/
- private static Map getRequiredMap(Class> clazz) {
- Map requiredMap = new HashMap<>();
+ private static Map getRequiredMap(Class> clazz) {
+ Map requiredMap = new HashMap<>();
Field[] fields = clazz.getDeclaredFields();
- // 检查 fields 数组是否为空
- if (fields.length == 0) {
- return requiredMap;
- }
- Field[] filteredFields = ReflectUtils.getFields(clazz, field -> !"serialVersionUID".equals(field.getName()));
-
- for (int i = 0; i < filteredFields.length; i++) {
- Field field = filteredFields[i];
+ for (Field field : fields) {
if (!field.isAnnotationPresent(ExcelRequired.class)) {
continue;
}
ExcelRequired excelRequired = field.getAnnotation(ExcelRequired.class);
- int columnIndex = excelRequired.index() == -1 ? i : excelRequired.index();
- requiredMap.put(columnIndex, excelRequired.fontColor().getIndex());
+ ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
+ requiredMap.put(excelProperty.value()[0], excelRequired.fontColor().getIndex());
}
return requiredMap;
}
@@ -113,22 +107,16 @@ public class DataWriteHandler implements SheetWriteHandler, CellWriteHandler {
/**
* 获取批注
*/
- private static Map getNotationMap(Class> clazz) {
- Map notationMap = new HashMap<>();
+ private static Map getNotationMap(Class> clazz) {
+ Map notationMap = new HashMap<>();
Field[] fields = clazz.getDeclaredFields();
- // 检查 fields 数组是否为空
- if (fields.length == 0) {
- return notationMap;
- }
- Field[] filteredFields = ReflectUtils.getFields(clazz, field -> !"serialVersionUID".equals(field.getName()));
- for (int i = 0; i < filteredFields.length; i++) {
- Field field = filteredFields[i];
+ for (Field field : fields) {
if (!field.isAnnotationPresent(ExcelNotation.class)) {
continue;
}
ExcelNotation excelNotation = field.getAnnotation(ExcelNotation.class);
- int columnIndex = excelNotation.index() == -1 ? i : excelNotation.index();
- notationMap.put(columnIndex, excelNotation.value());
+ ExcelProperty excelProperty = field.getAnnotation(ExcelProperty.class);
+ notationMap.put(excelProperty.value()[0], excelNotation.value());
}
return notationMap;
}
diff --git a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java
index e757221c3..642e0f746 100644
--- a/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java
+++ b/ruoyi-example/ruoyi-demo/src/main/java/org/dromara/demo/domain/vo/TestDemoVo.java
@@ -2,6 +2,7 @@ package org.dromara.demo.domain.vo;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty;
+import cn.idev.excel.annotation.format.DateTimeFormat;
import org.dromara.common.excel.annotation.ExcelNotation;
import org.dromara.common.excel.annotation.ExcelRequired;
import org.dromara.common.translation.annotation.Translation;
@@ -46,7 +47,7 @@ public class TestDemoVo implements Serializable {
* 用户id
*/
@ExcelRequired
- @ExcelProperty(value = "用户id")
+ @ExcelProperty(value = "用户id", index = 5)
private Long userId;
/**
@@ -73,6 +74,8 @@ public class TestDemoVo implements Serializable {
/**
* 创建时间
*/
+ @ExcelRequired
+ @DateTimeFormat("yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "创建时间")
private Date createTime;
From af04bc74ed7ee712c36a00b830e1c74a126d3027 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, 26 Jun 2025 15:17:47 +0800
Subject: [PATCH 34/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E6=9E=84?=
=?UTF-8?q?=E5=BB=BA=E5=A4=9A=E6=A0=B9=E8=8A=82=E7=82=B9=E7=9A=84=E6=A0=91?=
=?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=88=E6=94=AF=E6=8C=81=E5=A4=9A=E4=B8=AA?=
=?UTF-8?q?=E9=A1=B6=E7=BA=A7=E8=8A=82=E7=82=B9=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/core/utils/TreeBuildUtils.java | 35 +++++++++++++++++++
.../service/impl/SysDeptServiceImpl.java | 28 ++++++---------
.../service/impl/FlwCategoryServiceImpl.java | 31 +++++++---------
3 files changed, 58 insertions(+), 36 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java
index 2ab42cbc1..1f2b99c9c 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TreeBuildUtils.java
@@ -10,6 +10,9 @@ import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.reflect.ReflectUtils;
import java.util.List;
+import java.util.Objects;
+import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -60,6 +63,38 @@ public class TreeBuildUtils extends TreeUtil {
return TreeUtil.build(list, parentId, DEFAULT_CONFIG, nodeParser);
}
+ /**
+ * 构建多根节点的树结构(支持多个顶级节点)
+ *
+ * @param list 原始数据列表
+ * @param getId 获取节点 ID 的方法引用,例如:node -> node.getId()
+ * @param getParentId 获取节点父级 ID 的方法引用,例如:node -> node.getParentId()
+ * @param parser 树节点属性映射器,用于将原始节点 T 转为 Tree 节点
+ * @param 原始数据类型(如实体类、DTO 等)
+ * @param 节点 ID 类型(如 Long、String)
+ * @return 构建完成的树形结构(可能包含多个顶级根节点)
+ */
+ public static List> buildMultiRoot(List list, Function getId, Function getParentId, NodeParser parser) {
+ if (CollUtil.isEmpty(list)) {
+ return CollUtil.newArrayList();
+ }
+
+ // 提取所有节点 ID,用于后续判断哪些节点为根节点(即 parentId 不在其中)
+ Set allIds = StreamUtils.toSet(list, getId);
+
+ // 筛选出所有 parentId 不在 allIds 中的节点,这些节点的 parentId 可认为是根节点
+ Set rootParentIds = list.stream()
+ .map(getParentId)
+ .filter(Objects::nonNull)
+ .filter(pid -> !allIds.contains(pid))
+ .collect(Collectors.toSet());
+
+ // 使用流处理,遍历每个顶级 parentId,构建对应树,并合并为一个列表返回
+ return rootParentIds.stream()
+ .flatMap(rootParentId -> TreeUtil.build(list, rootParentId, parser).stream())
+ .collect(Collectors.toList());
+ }
+
/**
* 获取节点列表中所有节点的叶子节点
*
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 95e07e1ee..7107b4ac2 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
@@ -128,23 +128,17 @@ public class SysDeptServiceImpl implements ISysDeptService {
if (CollUtil.isEmpty(depts)) {
return CollUtil.newArrayList();
}
- // 获取当前列表中每一个节点的parentId,然后在列表中查找是否有id与其parentId对应,若无对应,则表明此时节点列表中,该节点在当前列表中属于顶级节点
- List> treeList = CollUtil.newArrayList();
- for (SysDeptVo d : depts) {
- Long parentId = d.getParentId();
- SysDeptVo sysDeptVo = depts.stream().filter(it -> it.getDeptId().longValue() == parentId).findFirst().orElse(null);
- if (sysDeptVo == null) {
- List> trees = TreeBuildUtils.build(depts, parentId, (dept, tree) ->
- tree.setId(dept.getDeptId())
- .setParentId(dept.getParentId())
- .setName(dept.getDeptName())
- .setWeight(dept.getOrderNum())
- .putExtra("disabled", SystemConstants.DISABLE.equals(dept.getStatus())));
- Tree tree = StreamUtils.findFirst(trees, it -> it.getId().longValue() == d.getDeptId());
- treeList.add(tree);
- }
- }
- return treeList;
+ return TreeBuildUtils.buildMultiRoot(
+ depts,
+ SysDeptVo::getDeptId,
+ SysDeptVo::getParentId,
+ (node, treeNode) -> treeNode
+ .setId(node.getDeptId())
+ .setParentId(node.getParentId())
+ .setName(node.getDeptName())
+ .setWeight(node.getOrderNum())
+ .putExtra("disabled", SystemConstants.DISABLE.equals(node.getStatus()))
+ );
}
/**
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java
index db1b7b7f0..dc8d6c833 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwCategoryServiceImpl.java
@@ -95,27 +95,20 @@ public class FlwCategoryServiceImpl implements IFlwCategoryService {
*/
@Override
public List> selectCategoryTreeList(FlowCategoryBo category) {
- LambdaQueryWrapper lqw = buildQueryWrapper(category);
- List categorys = baseMapper.selectVoList(lqw);
- if (CollUtil.isEmpty(categorys)) {
+ List categoryList = this.queryList(category);
+ if (CollUtil.isEmpty(categoryList)) {
return CollUtil.newArrayList();
}
- // 获取当前列表中每一个节点的parentId,然后在列表中查找是否有id与其parentId对应,若无对应,则表明此时节点列表中,该节点在当前列表中属于顶级节点
- List> treeList = CollUtil.newArrayList();
- for (FlowCategoryVo d : categorys) {
- String parentId = d.getParentId().toString();
- FlowCategoryVo categoryVo = StreamUtils.findFirst(categorys, it -> it.getCategoryId().toString().equals(parentId));
- if (ObjectUtil.isNull(categoryVo)) {
- List> trees = TreeBuildUtils.build(categorys, parentId, (dept, tree) ->
- tree.setId(dept.getCategoryId().toString())
- .setParentId(dept.getParentId().toString())
- .setName(dept.getCategoryName())
- .setWeight(dept.getOrderNum()));
- Tree tree = StreamUtils.findFirst(trees, it -> it.getId().equals(d.getCategoryId().toString()));
- treeList.add(tree);
- }
- }
- return treeList;
+ return TreeBuildUtils.buildMultiRoot(
+ categoryList,
+ node -> String.valueOf(node.getCategoryId()),
+ node -> String.valueOf(node.getParentId()),
+ (node, treeNode) -> treeNode
+ .setId(String.valueOf(node.getCategoryId()))
+ .setParentId(String.valueOf(node.getParentId()))
+ .setName(node.getCategoryName())
+ .setWeight(node.getOrderNum())
+ );
}
/**
From 77dcf4b0d4dbc89191827b92b3f7d324ee979630 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, 27 Jun 2025 10:56:09 +0800
Subject: [PATCH 35/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/gen/controller/GenController.java | 5 +--
.../system/SysConfigController.java | 4 +-
.../system/service/ISysConfigService.java | 2 +-
.../service/impl/SysClientServiceImpl.java | 20 ++--------
.../service/impl/SysConfigServiceImpl.java | 37 +++++++------------
.../impl/FlwDefinitionServiceImpl.java | 6 +--
6 files changed, 25 insertions(+), 49 deletions(-)
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java
index c7daa07d1..160374945 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/controller/GenController.java
@@ -80,11 +80,8 @@ public class GenController extends BaseController {
@SaCheckPermission("tool:gen:list")
@GetMapping(value = "/column/{tableId}")
public TableDataInfo columnList(@PathVariable("tableId") Long tableId) {
- TableDataInfo dataInfo = new TableDataInfo<>();
List list = genTableService.selectGenTableColumnListByTableId(tableId);
- dataInfo.setRows(list);
- dataInfo.setTotal(list.size());
- return dataInfo;
+ return TableDataInfo.build(list);
}
/**
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java
index 1d7878b84..1427833bd 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysConfigController.java
@@ -16,6 +16,8 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import jakarta.servlet.http.HttpServletResponse;
+
+import java.util.Arrays;
import java.util.List;
/**
@@ -120,7 +122,7 @@ public class SysConfigController extends BaseController {
@Log(title = "参数管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{configIds}")
public R remove(@PathVariable Long[] configIds) {
- configService.deleteConfigByIds(configIds);
+ configService.deleteConfigByIds(Arrays.asList(configIds));
return R.ok();
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java
index f7efda7af..60863b8d3 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysConfigService.java
@@ -69,7 +69,7 @@ public interface ISysConfigService {
*
* @param configIds 需要删除的参数ID
*/
- void deleteConfigByIds(Long[] configIds);
+ void deleteConfigByIds(List configIds);
/**
* 重置参数缓存数据
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java
index 98e41d7fe..36390a7ce 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysClientServiceImpl.java
@@ -1,5 +1,6 @@
package org.dromara.system.service.impl;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -42,11 +43,10 @@ public class SysClientServiceImpl implements ISysClientService {
@Override
public SysClientVo queryById(Long id) {
SysClientVo vo = baseMapper.selectVoById(id);
- vo.setGrantTypeList(List.of(vo.getGrantType().split(",")));
+ vo.setGrantTypeList(StringUtils.splitList(vo.getGrantType()));
return vo;
}
-
/**
* 查询客户端管理
*/
@@ -63,7 +63,7 @@ public class SysClientServiceImpl implements ISysClientService {
public TableDataInfo queryPageList(SysClientBo bo, PageQuery pageQuery) {
LambdaQueryWrapper lqw = buildQueryWrapper(bo);
Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
- result.getRecords().forEach(r -> r.setGrantTypeList(List.of(r.getGrantType().split(","))));
+ result.getRecords().forEach(r -> r.setGrantTypeList(StringUtils.splitList(r.getGrantType())));
return TableDataInfo.build(result);
}
@@ -92,8 +92,7 @@ public class SysClientServiceImpl implements ISysClientService {
@Override
public Boolean insertByBo(SysClientBo bo) {
SysClient add = MapstructUtils.convert(bo, SysClient.class);
- validEntityBeforeSave(add);
- add.setGrantType(String.join(",", bo.getGrantTypeList()));
+ add.setGrantType(CollUtil.join(bo.getGrantTypeList(), StringUtils.SEPARATOR));
// 生成clientId
String clientKey = bo.getClientKey();
String clientSecret = bo.getClientSecret();
@@ -112,7 +111,6 @@ public class SysClientServiceImpl implements ISysClientService {
@Override
public Boolean updateByBo(SysClientBo bo) {
SysClient update = MapstructUtils.convert(bo, SysClient.class);
- validEntityBeforeSave(update);
update.setGrantType(String.join(",", bo.getGrantTypeList()));
return baseMapper.updateById(update) > 0;
}
@@ -129,22 +127,12 @@ public class SysClientServiceImpl implements ISysClientService {
.eq(SysClient::getClientId, clientId));
}
- /**
- * 保存前的数据校验
- */
- private void validEntityBeforeSave(SysClient entity) {
- //TODO 做一些数据校验,如唯一约束
- }
-
/**
* 批量删除客户端管理
*/
@CacheEvict(cacheNames = CacheNames.SYS_CLIENT, allEntries = true)
@Override
public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
- if (isValid) {
- //TODO 做一些业务上的校验,判断是否需要校验
- }
return baseMapper.deleteByIds(ids) > 0;
}
}
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java
index 226f4ddc4..04ecd1375 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysConfigServiceImpl.java
@@ -2,7 +2,6 @@ package org.dromara.system.service.impl;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -26,7 +25,6 @@ import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
-import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -55,7 +53,6 @@ public class SysConfigServiceImpl implements ISysConfigService {
* @return 参数配置信息
*/
@Override
- @DS("master")
public SysConfigVo selectConfigById(Long configId) {
return baseMapper.selectVoById(configId);
}
@@ -81,14 +78,10 @@ public class SysConfigServiceImpl implements ISysConfigService {
*/
@Override
public boolean selectRegisterEnabled(String tenantId) {
- SysConfig retConfig = TenantHelper.dynamic(tenantId, () -> {
- return baseMapper.selectOne(new LambdaQueryWrapper()
- .eq(SysConfig::getConfigKey, "sys.account.registerUser"));
- });
- if (ObjectUtil.isNull(retConfig)) {
- return false;
- }
- return Convert.toBool(retConfig.getConfigValue());
+ String configValue = TenantHelper.dynamic(tenantId, () ->
+ this.selectConfigByKey("sys.account.registerUser")
+ );
+ return Convert.toBool(configValue);
}
/**
@@ -166,15 +159,15 @@ public class SysConfigServiceImpl implements ISysConfigService {
* @param configIds 需要删除的参数ID
*/
@Override
- public void deleteConfigByIds(Long[] configIds) {
- for (Long configId : configIds) {
- SysConfig config = baseMapper.selectById(configId);
+ public void deleteConfigByIds(List configIds) {
+ List list = baseMapper.selectByIds(configIds);
+ list.forEach(config -> {
if (StringUtils.equals(SystemConstants.YES, config.getConfigType())) {
- throw new ServiceException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
+ throw new ServiceException(String.format("内置参数【%s】不能删除", config.getConfigKey()));
}
CacheUtils.evict(CacheNames.SYS_CONFIG, config.getConfigKey());
- }
- baseMapper.deleteByIds(Arrays.asList(configIds));
+ });
+ baseMapper.deleteByIds(configIds);
}
/**
@@ -193,12 +186,10 @@ public class SysConfigServiceImpl implements ISysConfigService {
*/
@Override
public boolean checkConfigKeyUnique(SysConfigBo config) {
- long configId = ObjectUtils.notNull(config.getConfigId(), -1L);
- SysConfig info = baseMapper.selectOne(new LambdaQueryWrapper().eq(SysConfig::getConfigKey, config.getConfigKey()));
- if (ObjectUtil.isNotNull(info) && info.getConfigId() != configId) {
- return false;
- }
- return true;
+ boolean exist = baseMapper.exists(new LambdaQueryWrapper()
+ .eq(SysConfig::getConfigKey, config.getConfigKey())
+ .ne(ObjectUtil.isNotNull(config.getConfigId()), SysConfig::getConfigId, config.getConfigId()));
+ return !exist;
}
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java
index 7936210d0..a82b833e7 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwDefinitionServiceImpl.java
@@ -96,10 +96,8 @@ public class FlwDefinitionServiceImpl implements IFlwDefinitionService {
LambdaQueryWrapper wrapper = buildQueryWrapper(flowDefinition);
wrapper.in(FlowDefinition::getIsPublish, Arrays.asList(PublishStatus.UNPUBLISHED.getKey(), PublishStatus.EXPIRED.getKey()));
Page page = flowDefinitionMapper.selectPage(pageQuery.build(), wrapper);
- TableDataInfo build = TableDataInfo.build();
- build.setRows(BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class));
- build.setTotal(page.getTotal());
- return build;
+ List list = BeanUtil.copyToList(page.getRecords(), FlowDefinitionVo.class);
+ return new TableDataInfo<>(list, page.getTotal());
}
private LambdaQueryWrapper buildQueryWrapper(FlowDefinition flowDefinition) {
From 1ab8750cd55a7d457d983cd77647a9cdb5c343c8 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, 27 Jun 2025 10:56:46 +0800
Subject: [PATCH 36/44] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20Redis?=
=?UTF-8?q?=E7=BC=93=E5=AD=98=E7=9B=91=E6=8E=A7=E6=8E=A5=E5=8F=A3=20?=
=?UTF-8?q?=E6=89=8B=E5=8A=A8=E5=BD=92=E8=BF=98=E8=BF=9E=E6=8E=A5=E7=BB=99?=
=?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=B1=A0=20=E6=8F=90=E9=AB=98=E6=95=88?=
=?UTF-8?q?=E7=8E=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../controller/monitor/CacheController.java | 33 +++++++++++--------
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/CacheController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/CacheController.java
index cebba60ac..69fd2ab96 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/CacheController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/CacheController.java
@@ -6,6 +6,7 @@ import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.StringUtils;
import org.redisson.spring.data.connection.RedissonConnectionFactory;
import org.springframework.data.redis.connection.RedisConnection;
+import org.springframework.data.redis.core.RedisConnectionUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -31,21 +32,25 @@ public class CacheController {
@GetMapping()
public R getInfo() throws Exception {
RedisConnection connection = connectionFactory.getConnection();
- Properties commandStats = connection.commands().info("commandstats");
-
- List