From 1619edb8a113bc0a6351eb4e9485faf71735a319 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, 27 Jul 2024 14:00:35 +0800
Subject: [PATCH 01/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20sse=20?=
=?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=A3=85=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/common/sse/config/SseAutoConfiguration.java | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/config/SseAutoConfiguration.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/config/SseAutoConfiguration.java
index de5afa9a7..0cf8054ed 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/config/SseAutoConfiguration.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/config/SseAutoConfiguration.java
@@ -1,5 +1,6 @@
package org.dromara.common.sse.config;
+import org.dromara.common.sse.controller.SseController;
import org.dromara.common.sse.core.SseEmitterManager;
import org.dromara.common.sse.listener.SseTopicListener;
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -8,6 +9,8 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.context.annotation.Bean;
/**
+ * SSE 自动装配
+ *
* @author Lion Li
*/
@AutoConfiguration
@@ -25,4 +28,9 @@ public class SseAutoConfiguration {
return new SseTopicListener();
}
+ @Bean
+ public SseController sseController(SseEmitterManager sseEmitterManager) {
+ return new SseController(sseEmitterManager);
+ }
+
}
From b6d939a9ffe48c1abd131cd85e5e6ae13838cbd3 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, 27 Jul 2024 14:00:50 +0800
Subject: [PATCH 02/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=20=E8=A1=A8=E7=BB=93=E6=9E=84?=
=?UTF-8?q?=E7=BC=93=E5=AD=98=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/generator/service/GenTableServiceImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index cf9d2d0e8..ba9568c7f 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -17,6 +17,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.anyline.metadata.Column;
import org.anyline.metadata.Table;
+import org.anyline.proxy.CacheProxy;
import org.anyline.proxy.ServiceProxy;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
From 19fd562c24d84cdcd1f9b30eae070d0a511955fd 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, 27 Jul 2024 14:20:20 +0800
Subject: [PATCH 03/28] update snailjob 1.1.0 => 1.1.1
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 9a39bb8ce..b8796d725 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@
2.2.7
4.3.1
2.14.4
- 1.1.0
+ 1.1.1
1.3.6
0.2.0
1.18.32
From 9825f349ac69fa3a6c27060174bc7a5a26c6fb05 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, 27 Jul 2024 14:22:57 +0800
Subject: [PATCH 04/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=20=E8=A1=A8=E7=BB=93=E6=9E=84?=
=?UTF-8?q?=E7=BC=93=E5=AD=98=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/generator/service/GenTableServiceImpl.java | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index ba9568c7f..4d16f713b 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -186,7 +186,7 @@ public class GenTableServiceImpl implements IGenTableService {
@Override
public List selectDbTableListByNames(String[] tableNames, String dataName) {
Set tableNameSet = new HashSet<>(List.of(tableNames));
- LinkedHashMap> tablesMap = ServiceProxy.metadata().tables();
+ LinkedHashMap> tablesMap = ServiceProxy.service(dataName).metadata().tables();
if (CollUtil.isEmpty(tablesMap)) {
return new ArrayList<>();
@@ -294,11 +294,9 @@ public class GenTableServiceImpl implements IGenTableService {
*/
@DS("#dataName")
private List selectDbTableColumnsByName(String tableName, String dataName) {
- Table> table = ServiceProxy.metadata().table(tableName);
- if (Objects.isNull(table)) {
- return new ArrayList<>();
- }
- LinkedHashMap columns = table.getColumns();
+ // 清理anyline缓存
+ CacheProxy.clear();
+ LinkedHashMap columns = ServiceProxy.metadata().columns(tableName);
List tableColumns = new ArrayList<>();
columns.forEach((columnName, column) -> {
GenTableColumn tableColumn = new GenTableColumn();
From 86acb14f0553060171a5bfaede43fde5375d8906 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, 27 Jul 2024 15:09:33 +0800
Subject: [PATCH 05/28] update anyline 8.7.2-20240726
---
pom.xml | 2 +-
.../config/MyBatisDataSourceMonitor.java | 81 +++++++++++++++++++
.../service/GenTableServiceImpl.java | 2 +-
3 files changed, 83 insertions(+), 2 deletions(-)
create mode 100644 ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
diff --git a/pom.xml b/pom.xml
index b8796d725..8c1e35a6a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
1.2.83
- 8.7.2-20240722
+ 8.7.2-20240726
7.0.1
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
new file mode 100644
index 000000000..906733b08
--- /dev/null
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
@@ -0,0 +1,81 @@
+package org.dromara.generator.config;
+
+import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import lombok.extern.slf4j.Slf4j;
+import org.anyline.data.datasource.DataSourceMonitor;
+import org.anyline.util.ConfigTable;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.util.HashMap;
+import java.util.Map;
+
+@Slf4j
+@Component
+public class MyBatisDataSourceMonitor implements DataSourceMonitor {
+
+ public MyBatisDataSourceMonitor() {
+ // 调整执行模式为自定义
+ ConfigTable.KEEP_ADAPTER = 2;
+ }
+
+ private final Map features = new HashMap<>();
+
+ /**
+ * 数据源特征 用来定准 adapter 包含数据库或JDBC协议关键字
+ * 一般会通过 产品名_url 合成 如果返回null 上层方法会通过driver_产品名_url合成
+ *
+ * @param datasource 数据源
+ * @return String 返回null由上层自动提取
+ */
+ @Override
+ public String feature(Object datasource) {
+ String feature = null;
+ if (datasource instanceof JdbcTemplate jdbc) {
+ DataSource ds = jdbc.getDataSource();
+ if (ds instanceof DynamicRoutingDataSource) {
+ String key = DynamicDataSourceContextHolder.peek();
+ feature = features.get(key);
+ if (null == feature) {
+ Connection con = null;
+ try {
+ con = DataSourceUtils.getConnection(ds);
+ DatabaseMetaData meta = con.getMetaData();
+ String url = meta.getURL();
+ feature = meta.getDatabaseProductName().toLowerCase().replace(" ", "") + "_" + url;
+ features.put(key, feature);
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
+ } finally {
+ if (null != con && !DataSourceUtils.isConnectionTransactional(con, ds)) {
+ DataSourceUtils.releaseConnection(con, ds);
+ }
+ }
+ }
+ }
+ }
+ return feature;
+ }
+
+ /**
+ * ConfigTable.KEEP_ADAPTER=2 : 根据当前接口判断是否保持同一个数据源绑定同一个adapter
+ * DynamicRoutingDataSource类型的返回false,因为同一个DynamicRoutingDataSource可能对应多类数据库, 如果项目中只有一种数据库 应该直接返回true
+ *
+ * @param datasource 数据源
+ * @return boolean
+ */
+ @Override
+ public boolean keepAdapter(Object datasource) {
+ if (datasource instanceof JdbcTemplate jdbc) {
+ DataSource ds = jdbc.getDataSource();
+ return !(ds instanceof DynamicRoutingDataSource);
+ }
+ return true;
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index 4d16f713b..23eb88986 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -186,7 +186,7 @@ public class GenTableServiceImpl implements IGenTableService {
@Override
public List selectDbTableListByNames(String[] tableNames, String dataName) {
Set tableNameSet = new HashSet<>(List.of(tableNames));
- LinkedHashMap> tablesMap = ServiceProxy.service(dataName).metadata().tables();
+ LinkedHashMap> tablesMap = ServiceProxy.metadata().tables();
if (CollUtil.isEmpty(tablesMap)) {
return new ArrayList<>();
From bd872f624a043b00af1124607929e04230dbd212 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, 27 Jul 2024 23:57:13 +0800
Subject: [PATCH 06/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=20=E6=95=B0=E6=8D=AE=E6=BA=90?=
=?UTF-8?q?=E5=88=87=E6=8D=A2=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../java/org/anyline/proxy/CacheProxy.java | 349 ++++++++++++++++++
.../config/MyBatisDataSourceMonitor.java | 7 +
.../service/GenTableServiceImpl.java | 11 +-
.../generator/service/IGenTableService.java | 9 +
5 files changed, 371 insertions(+), 7 deletions(-)
create mode 100644 ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java
diff --git a/pom.xml b/pom.xml
index 8c1e35a6a..0764a758a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
1.2.83
- 8.7.2-20240726
+ 8.7.2-20240727
7.0.1
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java
new file mode 100644
index 000000000..b264fc951
--- /dev/null
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java
@@ -0,0 +1,349 @@
+/*
+ * Copyright 2006-2023 www.anyline.org
+ *
+ * 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 org.anyline.proxy;
+
+import org.anyline.cache.CacheProvider;
+import org.anyline.data.param.ConfigStore;
+import org.anyline.data.runtime.DataRuntime;
+import org.anyline.entity.OriginRow;
+import org.anyline.metadata.*;
+import org.anyline.metadata.graph.EdgeTable;
+import org.anyline.metadata.graph.VertexTable;
+import org.anyline.util.ConfigTable;
+import org.anyline.util.encrypt.MD5Util;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+
+public class CacheProxy {
+
+ private static final ThreadLocal thread_caches = new ThreadLocal<>();
+ private static final ThreadLocal thread_names = new ThreadLocal<>();
+ private static OriginRow application_caches = new OriginRow();
+ private static OriginRow application_names = new OriginRow();
+ public static CacheProvider provider;
+ public CacheProxy() {}
+ public static void init(CacheProvider provider) {
+ CacheProxy.provider = provider;
+ }
+ private static OriginRow caches(){
+ OriginRow result = new OriginRow();
+ if(ConfigTable.METADATA_CACHE_SCOPE == 1){
+ result = thread_caches.get();
+ if(null == result){
+ result = new OriginRow();
+ thread_caches.set(result);
+ }
+ }else if(ConfigTable.METADATA_CACHE_SCOPE == 9){
+ if(application_caches.isExpire(ConfigTable.METADATA_CACHE_SECOND*1000)){
+ application_caches = new OriginRow();
+ }
+ result = application_caches;
+ }
+ return result;
+ }
+ private static OriginRow names(){
+ OriginRow result = new OriginRow();
+ if(ConfigTable.METADATA_CACHE_SCOPE == 1){
+ result = thread_names.get();
+ if(null == result){
+ result = new OriginRow();
+ thread_names.set(result);
+ }
+ }else if(ConfigTable.METADATA_CACHE_SCOPE == 9){
+ if(application_names.isExpire(ConfigTable.METADATA_CACHE_SECOND*1000)){
+ application_names = new OriginRow();
+ }
+ result = application_names;
+ }
+ return result;
+ }
+/*
+
+ private static Map cache_columns = new HashMap<>();
+ private static Map> cache_names = new HashMap<>();
+ private static Map cache_table_maps = new HashMap<>();
+ private static Map cache_view_maps = new HashMap<>();
+*/
+
+
+ public static String key(DataRuntime runtime, String flag, boolean greedy, Catalog catalog, Schema schema, String pattern, int types, ConfigStore configs){
+ StringBuilder key = new StringBuilder();
+ key.append(runtime.datasource()).append("_").append(flag).append("_").append(greedy).append("_");
+ if(null != catalog){
+ key.append(catalog.getName());
+ }
+ key.append("_");
+ if(null != schema){
+ key.append(schema.getName());
+ }
+ key.append("_").append(pattern).append("_").append(types);
+ if(null != configs){
+ key.append(MD5Util.crypto(configs.json()));;
+ }
+ return key.toString().toUpperCase();
+ }
+ public static String key(DataRuntime runtime, String flag, boolean greedy, Table table){
+ StringBuilder key = new StringBuilder();
+ key.append(runtime.datasource()).append("_").append(flag).append("_").append(greedy).append("_");
+ String name = table.getName();
+ String catalog = table.getCatalogName();
+ String schema = table.getSchemaName();
+ if(null != catalog){
+ key.append(catalog);
+ }
+ key.append("_");
+ if(null != schema){
+ key.append(schema);
+ }
+ key.append("_").append(name);
+ return key.toString().toUpperCase();
+ }
+ public static String key(DataRuntime runtime, String flag, boolean greedy, Catalog catalog, Schema schema, String pattern){
+ StringBuilder key = new StringBuilder();
+ key.append(runtime.datasource()).append("_").append(flag).append("_").append(greedy).append("_");
+ if(null != catalog){
+ key.append(catalog.getName());
+ }
+ key.append("_");
+ if(null != schema){
+ key.append(schema.getName());
+ }
+ key.append("_").append(pattern);
+ return key.toString().toUpperCase();
+ }
+ public static String name(String key) {
+ return names().getString(key.toUpperCase());
+ }
+ public static void name(String key, String origin) {
+ names().put(key.toUpperCase(), origin);
+ }
+ public static List tables(String cache){
+ List tables = (List)caches().get(cache);
+ return tables;
+ }
+ public static List masterTables(String cache){
+ List tables = (List)caches().get(cache);
+ return tables;
+ }
+ public static List edgeTables(String cache){
+ List tables = (List)caches().get(cache);
+ return tables;
+ }
+ public static List vertexTables(String cache){
+ List tables = (List)caches().get(cache);
+ return tables;
+ }
+ public static void tables(String cache, List tables){
+ caches().put(cache, tables);
+ }
+
+ public static List views(String cache){
+ List view = (List)caches().get(cache);
+ return view;
+ }
+ public static void views(String cache, List view){
+ caches().put(cache, view);
+ }
+
+ public static void cache(String cache, Object value){
+ caches().put(cache, value);
+ }
+
+/*
+ public static void name(DriverAdapter adapter, List tables) {
+ if(null != tables) {
+ for (Table table : tables) {
+ name(adapter, table.getCatalog(), table.getSchema(), table.getName(), table.getName());
+ }
+ }
+ }*/
+/*
+ private static String key(DriverAdapter adapter, Catalog catalog, Schema schema) {
+ String key = null;
+ String catalog_name = null;
+ String schema_name = null;
+ if(null != catalog && adapter.supportCatalog()) {
+ catalog_name = catalog.getName();
+ }
+ if(null != schema && adapter.supportSchema()) {
+ schema_name = schema.getName();
+ }
+ if(null != catalog_name) {
+ key = catalog_name;
+ }
+ if(null != schema_name) {
+ if(null != key) {
+ key += "_" + schema_name;
+ }else{
+ key = schema_name;
+ }
+ }
+ if(null != key) {
+ key = key.toUpperCase();
+ }else{
+ key = "ALL";
+ }
+ return key;
+ }
+ private static String key(DriverAdapter adapter, Catalog catalog, Schema schema, Table table) {
+ String table_name = null;
+ if(null != table) {
+ table_name = table.getName();
+ }
+ String key = key(adapter, catalog, schema);
+ if(null != table_name) {
+ if(null != key) {
+ key += ":" + table_name;
+ }else{
+ key = table_name;
+ }
+ }
+ if(null != key) {
+ key = key.toUpperCase();
+ }
+ return key;
+ }*//*
+ public static void name(DriverAdapter adapter, Catalog catalog, Schema schema, String name, String origin) {
+ String group_key = key(adapter, catalog, schema);
+ Map maps = cache_names.get(group_key);
+ if(null == maps) {
+ maps = new HashMap<>();
+ cache_names.put(group_key, maps);
+ }
+ String name_key = (group_key + ":" + name).toUpperCase();
+ maps.put(name_key, origin);
+ }
+ public static Map names(DriverAdapter adapter, Catalog catalog, Schema schema) {
+ return cache_names.get(key(adapter, catalog, schema));
+ }
+ public static String name(DriverAdapter adapter, boolean greedy, Catalog catalog, Schema schema, String name) {
+ if(null == name) {
+ return null;
+ }
+ String group_key = key(adapter, catalog, schema);
+ Map maps = cache_names.get(group_key);
+ if(null != maps) {
+ String name_key = (group_key + ":" + name).toUpperCase();
+ String origin = maps.get(name_key);
+ if(null != origin) {
+ return origin;
+ }
+ }
+ if(greedy) {
+ for (Map names : cache_names.values()) {
+ for(String item:names.keySet()) {
+ if(item.endsWith((":"+name).toUpperCase())) {
+ return names.get(item);
+ }
+ }
+ }
+ }
+ return null;
+ }*/
+ /*public static String datasource(String datasource) {
+ if(null == datasource || "common".equalsIgnoreCase(datasource)) {
+ //datasource = DataSourceHolder.curDataSource();
+ }
+ if(null == datasource) {
+ datasource = "default";
+ }
+ return datasource.toUpperCase();
+ }
+*//*
+ public static String tableName(String datasource, String name) {
+ DataRow row = cache_table_maps.get(datasource(datasource));
+ if(null != row) {
+ return row.getString(name);
+ }
+ return name;
+ }
+ public static String viewName(String datasource, String name) {
+ DataRow row = cache_view_maps.get(datasource(datasource));
+ if(null != row) {
+ return row.getString(name);
+ }
+ return name;
+ }
+ public static void setTableMaps(String datasource, DataRow maps) {
+ cache_table_maps.put(datasource(datasource), maps);
+ }
+ public static void setViewMaps(String datasource, DataRow maps) {
+ cache_view_maps.put(datasource(datasource), maps);
+ }*/
+
+
+ /* public static DataRow getTableMaps(String datasource) {
+ DataRow row = cache_table_maps.get(datasource(datasource));
+ if(null == row) {
+ row = new DataRow();
+ cache_table_maps.put(datasource(datasource), row);
+ }
+ return row;
+ }*/
+
+ /* public static DataRow getViewMaps(String datasource) {
+ DataRow row = cache_view_maps.get(datasource(datasource));
+ if(null == row) {
+ row = new DataRow();
+ cache_view_maps.put(datasource(datasource), row);
+ }
+ return row;
+ }*/
+
+
+ public static LinkedHashMap columns(String key) {
+ return (LinkedHashMap) caches().get(key);
+ }
+ public static LinkedHashMap tags(String key) {
+ return (LinkedHashMap) caches().get(key);
+ }
+
+
+ /* public static void columns(DriverAdapter adapter, String datasource, Table table, LinkedHashMap columns) {
+ if(null == table) {
+ return;
+ }
+ String cache = ConfigTable.getString("METADATA_CACHE_KEY");
+ String key = datasource(datasource) + "_COLUMNS_" + key(adapter, table.getCatalog(), table.getSchema(), table);
+ key = key.toUpperCase();
+ if(null != provider && BasicUtil.isNotEmpty(cache) && !ConfigTable.IS_CACHE_DISABLED) {
+ provider.put(cache, key, columns);
+ }else{
+ DataRow static_cache = new DataRow();
+ static_cache.put("keys", columns);
+ cache_columns.put(key, static_cache);
+ }
+ } */
+
+ public static void clear() {/*
+ if(null != provider && !ConfigTable.IS_CACHE_DISABLED) {
+ String cache = ConfigTable.METADATA_CACHE_KEY;
+ if(BasicUtil.isNotEmpty(cache)) {
+ provider.clear(cache);
+ }
+ }else{
+ cache_columns.clear();
+ }*/
+
+ caches().clear();
+ names().clear();
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
index 906733b08..bb0760621 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
@@ -15,6 +15,11 @@ import java.sql.DatabaseMetaData;
import java.util.HashMap;
import java.util.Map;
+/**
+ * anyline 适配 动态数据源改造
+ *
+ * @author Lion Li
+ */
@Slf4j
@Component
public class MyBatisDataSourceMonitor implements DataSourceMonitor {
@@ -22,6 +27,8 @@ public class MyBatisDataSourceMonitor implements DataSourceMonitor {
public MyBatisDataSourceMonitor() {
// 调整执行模式为自定义
ConfigTable.KEEP_ADAPTER = 2;
+ // 禁用缓存
+ ConfigTable.METADATA_CACHE_SCOPE = 0;
}
private final Map features = new HashMap<>();
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index 23eb88986..b4abc90c0 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -17,13 +17,13 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.anyline.metadata.Column;
import org.anyline.metadata.Table;
-import org.anyline.proxy.CacheProxy;
import org.anyline.proxy.ServiceProxy;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileUtils;
@@ -269,7 +269,7 @@ public class GenTableServiceImpl implements IGenTableService {
int row = baseMapper.insert(table);
if (row > 0) {
// 保存列信息
- List genTableColumns = selectDbTableColumnsByName(tableName, dataName);
+ List genTableColumns = SpringUtils.getAopProxy(this).selectDbTableColumnsByName(tableName, dataName);
List saveColumns = new ArrayList<>();
for (GenTableColumn column : genTableColumns) {
GenUtils.initColumnField(column, table);
@@ -293,9 +293,8 @@ public class GenTableServiceImpl implements IGenTableService {
* @return 列信息
*/
@DS("#dataName")
- private List selectDbTableColumnsByName(String tableName, String dataName) {
- // 清理anyline缓存
- CacheProxy.clear();
+ @Override
+ public List selectDbTableColumnsByName(String tableName, String dataName) {
LinkedHashMap columns = ServiceProxy.metadata().columns(tableName);
List tableColumns = new ArrayList<>();
columns.forEach((columnName, column) -> {
@@ -407,7 +406,7 @@ public class GenTableServiceImpl implements IGenTableService {
List tableColumns = table.getColumns();
Map tableColumnMap = StreamUtils.toIdentityMap(tableColumns, GenTableColumn::getColumnName);
- List dbTableColumns = selectDbTableColumnsByName(table.getTableName(), table.getDataName());
+ List dbTableColumns = SpringUtils.getAopProxy(this).selectDbTableColumnsByName(table.getTableName(), table.getDataName());
if (CollUtil.isEmpty(dbTableColumns)) {
throw new ServiceException("同步数据失败,原表结构不存在");
}
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/IGenTableService.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/IGenTableService.java
index 2a2fb8228..b2c20c57d 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/IGenTableService.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/IGenTableService.java
@@ -85,6 +85,15 @@ public interface IGenTableService {
*/
void importGenTable(List tableList, String dataName);
+ /**
+ * 根据表名称查询列信息
+ *
+ * @param tableName 表名称
+ * @param dataName 数据源名称
+ * @return 列信息
+ */
+ List selectDbTableColumnsByName(String tableName, String dataName);
+
/**
* 预览代码
*
From 7297053dd63273fbb0eb68686c7e90f72945345b 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, 29 Jul 2024 12:27:51 +0800
Subject: [PATCH 07/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=99=BB?=
=?UTF-8?q?=E5=87=BA=E5=90=8E=E9=87=8D=E6=96=B0=E7=99=BB=E5=BD=95=20sse?=
=?UTF-8?q?=E6=8E=A8=E9=80=81=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/common/sse/controller/SseController.java | 2 ++
.../java/org/dromara/common/sse/core/SseEmitterManager.java | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
index 57c7c1e82..a28c1fdcc 100644
--- a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
+++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/controller/SseController.java
@@ -1,5 +1,6 @@
package org.dromara.common.sse.controller;
+import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.R;
@@ -26,6 +27,7 @@ public class SseController {
return sseEmitterManager.connect(userId, tokenValue);
}
+ @SaIgnore
@GetMapping(value = "${sse.path}/close")
public R close() {
String tokenValue = StpUtil.getTokenValue();
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 276df102d..0f096fac5 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
@@ -73,7 +73,6 @@ public class SseEmitterManager {
try {
entry.getValue().send(SseEmitter.event()
.name("message")
- .reconnectTime(-1L)
.data(message));
} catch (Exception e) {
emitters.remove(entry.getKey());
From 239d59c864af365d2b61dc99b2cfa21bf813896b 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, 29 Jul 2024 12:44:45 +0800
Subject: [PATCH 08/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20sse?=
=?UTF-8?q?=E5=8F=91=E9=80=81=E6=B6=88=E6=81=AF=20=E5=A2=9E=E5=8A=A0token?=
=?UTF-8?q?=E6=9C=89=E6=95=88=E6=9C=9F=E5=88=A4=E6=96=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/common/sse/core/SseEmitterManager.java | 6 ++++++
1 file changed, 6 insertions(+)
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 0f096fac5..91dd71dbb 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
@@ -1,5 +1,6 @@
package org.dromara.common.sse.core;
+import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.redis.utils.RedisUtils;
@@ -71,6 +72,11 @@ public class SseEmitterManager {
if (emitters != null) {
for (Map.Entry entry : emitters.entrySet()) {
try {
+ // token 无效或已过期
+ if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(entry.getKey()) < -1) {
+ emitters.remove(entry.getKey());
+ continue;
+ }
entry.getValue().send(SseEmitter.event()
.name("message")
.data(message));
From 857a0b10065bab56152dcc60ce0c92106cb2550f 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, 29 Jul 2024 14:33:54 +0800
Subject: [PATCH 09/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96oss=E6=9F=A5?=
=?UTF-8?q?=E8=AF=A2=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../org/dromara/system/service/impl/SysOssServiceImpl.java | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
index d167e8dcc..186653182 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysOssServiceImpl.java
@@ -77,8 +77,9 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
@Override
public List listByIds(Collection ossIds) {
List list = new ArrayList<>();
+ SysOssServiceImpl ossService = SpringUtils.getAopProxy(this);
for (Long id : ossIds) {
- SysOssVo vo = SpringUtils.getAopProxy(this).getById(id);
+ SysOssVo vo = ossService.getById(id);
if (ObjectUtil.isNotNull(vo)) {
try {
list.add(this.matchingUrl(vo));
@@ -100,8 +101,9 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
@Override
public String selectUrlByIds(String ossIds) {
List list = new ArrayList<>();
+ SysOssServiceImpl ossService = SpringUtils.getAopProxy(this);
for (Long id : StringUtils.splitTo(ossIds, Convert::toLong)) {
- SysOssVo vo = SpringUtils.getAopProxy(this).getById(id);
+ SysOssVo vo = ossService.getById(id);
if (ObjectUtil.isNotNull(vo)) {
try {
list.add(this.matchingUrl(vo).getUrl());
From 08fece39d8fa6c9bf562f8d1d8cf951bf1cad3cc 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, 29 Jul 2024 15:04:54 +0800
Subject: [PATCH 10/28] =?UTF-8?q?add=20=E6=96=B0=E5=A2=9E=20=E6=9B=B4?=
=?UTF-8?q?=E5=A4=9A=E8=84=B1=E6=95=8F=E7=AD=96=E7=95=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../sensitive/core/SensitiveStrategy.java | 47 ++++++++++++++++++-
1 file changed, 46 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java
index 9d1978a14..6de52c0e0 100644
--- a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java
+++ b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java
@@ -37,7 +37,52 @@ public enum SensitiveStrategy {
/**
* 银行卡
*/
- BANK_CARD(DesensitizedUtil::bankCard);
+ BANK_CARD(DesensitizedUtil::bankCard),
+
+ /**
+ * 中文名
+ */
+ CHINESE_NAME(DesensitizedUtil::chineseName),
+
+ /**
+ * 固定电话
+ */
+ FIXED_PHONE(DesensitizedUtil::fixedPhone),
+
+ /**
+ * 用户ID
+ */
+ user_ID(s -> String.valueOf(DesensitizedUtil.userId())),
+
+ /**
+ * ipv4
+ */
+ IPV4(DesensitizedUtil::ipv4),
+
+ /**
+ * ipv6
+ */
+ IPV6(DesensitizedUtil::ipv6),
+
+ /**
+ * 中国大陆车牌,包含普通车辆、新能源车辆
+ */
+ CAR_LICENSE(DesensitizedUtil::carLicense),
+
+ /**
+ * 只显示第一个字符
+ */
+ FIRST_MASK(DesensitizedUtil::firstMask),
+
+ /**
+ * 清空为null
+ */
+ CLEAR(s -> DesensitizedUtil.clear()),
+
+ /**
+ * 清空为""
+ */
+ CLEAR_TO_NULL(s -> DesensitizedUtil.clearToNull());
//可自行添加其他脱敏策略
From 508d7a37e31c6c306c882f3ef11528df27885e8c 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, 29 Jul 2024 15:18:23 +0800
Subject: [PATCH 11/28] =?UTF-8?q?update=20=E8=84=B1=E6=95=8F=E7=AD=96?=
=?UTF-8?q?=E7=95=A5=E4=BC=98=E5=8C=96=E5=A2=9E=E5=8A=A0=E5=AF=86=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/common/sensitive/core/SensitiveStrategy.java | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java
index 6de52c0e0..995dcbd96 100644
--- a/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java
+++ b/ruoyi-common/ruoyi-common-sensitive/src/main/java/org/dromara/common/sensitive/core/SensitiveStrategy.java
@@ -52,7 +52,12 @@ public enum SensitiveStrategy {
/**
* 用户ID
*/
- user_ID(s -> String.valueOf(DesensitizedUtil.userId())),
+ USER_ID(s -> String.valueOf(DesensitizedUtil.userId())),
+
+ /**
+ * 密码
+ */
+ PASSWORD(DesensitizedUtil::password),
/**
* ipv4
From 2a340d4d835bc30a6b57f0a49fadb005299181b0 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, 29 Jul 2024 17:47:01 +0800
Subject: [PATCH 12/28] update anyline 8.7.2-20240728
---
pom.xml | 2 +-
.../java/org/anyline/proxy/CacheProxy.java | 349 ------------------
2 files changed, 1 insertion(+), 350 deletions(-)
delete mode 100644 ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java
diff --git a/pom.xml b/pom.xml
index 0764a758a..1dc79cf0d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -51,7 +51,7 @@
1.2.83
- 8.7.2-20240727
+ 8.7.2-20240728
7.0.1
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java
deleted file mode 100644
index b264fc951..000000000
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/anyline/proxy/CacheProxy.java
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * Copyright 2006-2023 www.anyline.org
- *
- * 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 org.anyline.proxy;
-
-import org.anyline.cache.CacheProvider;
-import org.anyline.data.param.ConfigStore;
-import org.anyline.data.runtime.DataRuntime;
-import org.anyline.entity.OriginRow;
-import org.anyline.metadata.*;
-import org.anyline.metadata.graph.EdgeTable;
-import org.anyline.metadata.graph.VertexTable;
-import org.anyline.util.ConfigTable;
-import org.anyline.util.encrypt.MD5Util;
-
-import java.util.LinkedHashMap;
-import java.util.List;
-
-public class CacheProxy {
-
- private static final ThreadLocal thread_caches = new ThreadLocal<>();
- private static final ThreadLocal thread_names = new ThreadLocal<>();
- private static OriginRow application_caches = new OriginRow();
- private static OriginRow application_names = new OriginRow();
- public static CacheProvider provider;
- public CacheProxy() {}
- public static void init(CacheProvider provider) {
- CacheProxy.provider = provider;
- }
- private static OriginRow caches(){
- OriginRow result = new OriginRow();
- if(ConfigTable.METADATA_CACHE_SCOPE == 1){
- result = thread_caches.get();
- if(null == result){
- result = new OriginRow();
- thread_caches.set(result);
- }
- }else if(ConfigTable.METADATA_CACHE_SCOPE == 9){
- if(application_caches.isExpire(ConfigTable.METADATA_CACHE_SECOND*1000)){
- application_caches = new OriginRow();
- }
- result = application_caches;
- }
- return result;
- }
- private static OriginRow names(){
- OriginRow result = new OriginRow();
- if(ConfigTable.METADATA_CACHE_SCOPE == 1){
- result = thread_names.get();
- if(null == result){
- result = new OriginRow();
- thread_names.set(result);
- }
- }else if(ConfigTable.METADATA_CACHE_SCOPE == 9){
- if(application_names.isExpire(ConfigTable.METADATA_CACHE_SECOND*1000)){
- application_names = new OriginRow();
- }
- result = application_names;
- }
- return result;
- }
-/*
-
- private static Map cache_columns = new HashMap<>();
- private static Map> cache_names = new HashMap<>();
- private static Map cache_table_maps = new HashMap<>();
- private static Map cache_view_maps = new HashMap<>();
-*/
-
-
- public static String key(DataRuntime runtime, String flag, boolean greedy, Catalog catalog, Schema schema, String pattern, int types, ConfigStore configs){
- StringBuilder key = new StringBuilder();
- key.append(runtime.datasource()).append("_").append(flag).append("_").append(greedy).append("_");
- if(null != catalog){
- key.append(catalog.getName());
- }
- key.append("_");
- if(null != schema){
- key.append(schema.getName());
- }
- key.append("_").append(pattern).append("_").append(types);
- if(null != configs){
- key.append(MD5Util.crypto(configs.json()));;
- }
- return key.toString().toUpperCase();
- }
- public static String key(DataRuntime runtime, String flag, boolean greedy, Table table){
- StringBuilder key = new StringBuilder();
- key.append(runtime.datasource()).append("_").append(flag).append("_").append(greedy).append("_");
- String name = table.getName();
- String catalog = table.getCatalogName();
- String schema = table.getSchemaName();
- if(null != catalog){
- key.append(catalog);
- }
- key.append("_");
- if(null != schema){
- key.append(schema);
- }
- key.append("_").append(name);
- return key.toString().toUpperCase();
- }
- public static String key(DataRuntime runtime, String flag, boolean greedy, Catalog catalog, Schema schema, String pattern){
- StringBuilder key = new StringBuilder();
- key.append(runtime.datasource()).append("_").append(flag).append("_").append(greedy).append("_");
- if(null != catalog){
- key.append(catalog.getName());
- }
- key.append("_");
- if(null != schema){
- key.append(schema.getName());
- }
- key.append("_").append(pattern);
- return key.toString().toUpperCase();
- }
- public static String name(String key) {
- return names().getString(key.toUpperCase());
- }
- public static void name(String key, String origin) {
- names().put(key.toUpperCase(), origin);
- }
- public static List tables(String cache){
- List tables = (List)caches().get(cache);
- return tables;
- }
- public static List masterTables(String cache){
- List tables = (List)caches().get(cache);
- return tables;
- }
- public static List edgeTables(String cache){
- List tables = (List)caches().get(cache);
- return tables;
- }
- public static List vertexTables(String cache){
- List tables = (List)caches().get(cache);
- return tables;
- }
- public static void tables(String cache, List tables){
- caches().put(cache, tables);
- }
-
- public static List views(String cache){
- List view = (List)caches().get(cache);
- return view;
- }
- public static void views(String cache, List view){
- caches().put(cache, view);
- }
-
- public static void cache(String cache, Object value){
- caches().put(cache, value);
- }
-
-/*
- public static void name(DriverAdapter adapter, List tables) {
- if(null != tables) {
- for (Table table : tables) {
- name(adapter, table.getCatalog(), table.getSchema(), table.getName(), table.getName());
- }
- }
- }*/
-/*
- private static String key(DriverAdapter adapter, Catalog catalog, Schema schema) {
- String key = null;
- String catalog_name = null;
- String schema_name = null;
- if(null != catalog && adapter.supportCatalog()) {
- catalog_name = catalog.getName();
- }
- if(null != schema && adapter.supportSchema()) {
- schema_name = schema.getName();
- }
- if(null != catalog_name) {
- key = catalog_name;
- }
- if(null != schema_name) {
- if(null != key) {
- key += "_" + schema_name;
- }else{
- key = schema_name;
- }
- }
- if(null != key) {
- key = key.toUpperCase();
- }else{
- key = "ALL";
- }
- return key;
- }
- private static String key(DriverAdapter adapter, Catalog catalog, Schema schema, Table table) {
- String table_name = null;
- if(null != table) {
- table_name = table.getName();
- }
- String key = key(adapter, catalog, schema);
- if(null != table_name) {
- if(null != key) {
- key += ":" + table_name;
- }else{
- key = table_name;
- }
- }
- if(null != key) {
- key = key.toUpperCase();
- }
- return key;
- }*//*
- public static void name(DriverAdapter adapter, Catalog catalog, Schema schema, String name, String origin) {
- String group_key = key(adapter, catalog, schema);
- Map maps = cache_names.get(group_key);
- if(null == maps) {
- maps = new HashMap<>();
- cache_names.put(group_key, maps);
- }
- String name_key = (group_key + ":" + name).toUpperCase();
- maps.put(name_key, origin);
- }
- public static Map names(DriverAdapter adapter, Catalog catalog, Schema schema) {
- return cache_names.get(key(adapter, catalog, schema));
- }
- public static String name(DriverAdapter adapter, boolean greedy, Catalog catalog, Schema schema, String name) {
- if(null == name) {
- return null;
- }
- String group_key = key(adapter, catalog, schema);
- Map maps = cache_names.get(group_key);
- if(null != maps) {
- String name_key = (group_key + ":" + name).toUpperCase();
- String origin = maps.get(name_key);
- if(null != origin) {
- return origin;
- }
- }
- if(greedy) {
- for (Map names : cache_names.values()) {
- for(String item:names.keySet()) {
- if(item.endsWith((":"+name).toUpperCase())) {
- return names.get(item);
- }
- }
- }
- }
- return null;
- }*/
- /*public static String datasource(String datasource) {
- if(null == datasource || "common".equalsIgnoreCase(datasource)) {
- //datasource = DataSourceHolder.curDataSource();
- }
- if(null == datasource) {
- datasource = "default";
- }
- return datasource.toUpperCase();
- }
-*//*
- public static String tableName(String datasource, String name) {
- DataRow row = cache_table_maps.get(datasource(datasource));
- if(null != row) {
- return row.getString(name);
- }
- return name;
- }
- public static String viewName(String datasource, String name) {
- DataRow row = cache_view_maps.get(datasource(datasource));
- if(null != row) {
- return row.getString(name);
- }
- return name;
- }
- public static void setTableMaps(String datasource, DataRow maps) {
- cache_table_maps.put(datasource(datasource), maps);
- }
- public static void setViewMaps(String datasource, DataRow maps) {
- cache_view_maps.put(datasource(datasource), maps);
- }*/
-
-
- /* public static DataRow getTableMaps(String datasource) {
- DataRow row = cache_table_maps.get(datasource(datasource));
- if(null == row) {
- row = new DataRow();
- cache_table_maps.put(datasource(datasource), row);
- }
- return row;
- }*/
-
- /* public static DataRow getViewMaps(String datasource) {
- DataRow row = cache_view_maps.get(datasource(datasource));
- if(null == row) {
- row = new DataRow();
- cache_view_maps.put(datasource(datasource), row);
- }
- return row;
- }*/
-
-
- public static LinkedHashMap columns(String key) {
- return (LinkedHashMap) caches().get(key);
- }
- public static LinkedHashMap tags(String key) {
- return (LinkedHashMap) caches().get(key);
- }
-
-
- /* public static void columns(DriverAdapter adapter, String datasource, Table table, LinkedHashMap columns) {
- if(null == table) {
- return;
- }
- String cache = ConfigTable.getString("METADATA_CACHE_KEY");
- String key = datasource(datasource) + "_COLUMNS_" + key(adapter, table.getCatalog(), table.getSchema(), table);
- key = key.toUpperCase();
- if(null != provider && BasicUtil.isNotEmpty(cache) && !ConfigTable.IS_CACHE_DISABLED) {
- provider.put(cache, key, columns);
- }else{
- DataRow static_cache = new DataRow();
- static_cache.put("keys", columns);
- cache_columns.put(key, static_cache);
- }
- } */
-
- public static void clear() {/*
- if(null != provider && !ConfigTable.IS_CACHE_DISABLED) {
- String cache = ConfigTable.METADATA_CACHE_KEY;
- if(BasicUtil.isNotEmpty(cache)) {
- provider.clear(cache);
- }
- }else{
- cache_columns.clear();
- }*/
-
- caches().clear();
- names().clear();
- }
-
-}
From fcf8516f0d9c50237ab3ebb47a6ae17f639ce3ad 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, 31 Jul 2024 09:48:05 +0800
Subject: [PATCH 13/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E9=80=82?=
=?UTF-8?q?=E9=85=8D=20anyline=20=E6=96=B0=E6=94=B9=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../config/MyBatisDataSourceMonitor.java | 21 +++++++++++++++++--
1 file changed, 19 insertions(+), 2 deletions(-)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
index bb0760621..8c0f352fa 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/config/MyBatisDataSourceMonitor.java
@@ -4,6 +4,7 @@ import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.anyline.data.datasource.DataSourceMonitor;
+import org.anyline.data.runtime.DataRuntime;
import org.anyline.util.ConfigTable;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DataSourceUtils;
@@ -41,7 +42,7 @@ public class MyBatisDataSourceMonitor implements DataSourceMonitor {
* @return String 返回null由上层自动提取
*/
@Override
- public String feature(Object datasource) {
+ public String feature(DataRuntime runtime, Object datasource) {
String feature = null;
if (datasource instanceof JdbcTemplate jdbc) {
DataSource ds = jdbc.getDataSource();
@@ -69,6 +70,22 @@ public class MyBatisDataSourceMonitor implements DataSourceMonitor {
return feature;
}
+ /**
+ * 数据源唯一标识 如果不实现则默认feature
+ * @param datasource 数据源
+ * @return String 返回null由上层自动提取
+ */
+ @Override
+ public String key(DataRuntime runtime, Object datasource) {
+ if(datasource instanceof JdbcTemplate jdbc){
+ DataSource ds = jdbc.getDataSource();
+ if(ds instanceof DynamicRoutingDataSource){
+ return DynamicDataSourceContextHolder.peek();
+ }
+ }
+ return runtime.getKey();
+ }
+
/**
* ConfigTable.KEEP_ADAPTER=2 : 根据当前接口判断是否保持同一个数据源绑定同一个adapter
* DynamicRoutingDataSource类型的返回false,因为同一个DynamicRoutingDataSource可能对应多类数据库, 如果项目中只有一种数据库 应该直接返回true
@@ -77,7 +94,7 @@ public class MyBatisDataSourceMonitor implements DataSourceMonitor {
* @return boolean
*/
@Override
- public boolean keepAdapter(Object datasource) {
+ public boolean keepAdapter(DataRuntime runtime, Object datasource) {
if (datasource instanceof JdbcTemplate jdbc) {
DataSource ds = jdbc.getDataSource();
return !(ds instanceof DynamicRoutingDataSource);
From 5aa346327f26008f103740cf2a3754079feaae34 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, 31 Jul 2024 13:02:33 +0800
Subject: [PATCH 14/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=BB=A3?=
=?UTF-8?q?=E7=A0=81=E7=94=9F=E6=88=90=20=E9=94=99=E8=AF=AF=E5=8C=B9?=
=?UTF-8?q?=E9=85=8D=E8=A1=A8=E5=90=8D=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/org/dromara/generator/service/GenTableServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
index b4abc90c0..e1e340ff1 100644
--- a/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
+++ b/ruoyi-modules/ruoyi-generator/src/main/java/org/dromara/generator/service/GenTableServiceImpl.java
@@ -143,7 +143,7 @@ public class GenTableServiceImpl implements IGenTableService {
if (CollUtil.isEmpty(tableNames)) {
return true;
}
- return !StringUtils.containsAnyIgnoreCase(x.getName(), tableArrays);
+ return !StringUtils.equalsAnyIgnoreCase(x.getName(), tableArrays);
})
.filter(x -> {
boolean nameMatches = true;
From 6b14bce25e87ca7e9ccee096e73f7c8816205913 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, 31 Jul 2024 17:09:16 +0800
Subject: [PATCH 15/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E7=9B=91?=
=?UTF-8?q?=E6=8E=A7=E4=BD=BF=E7=94=A8=E7=8B=AC=E7=AB=8Bweb=E4=BE=9D?=
=?UTF-8?q?=E8=B5=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-extend/ruoyi-monitor-admin/pom.xml | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/ruoyi-extend/ruoyi-monitor-admin/pom.xml b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
index 91194c61b..77c9eb71a 100644
--- a/ruoyi-extend/ruoyi-monitor-admin/pom.xml
+++ b/ruoyi-extend/ruoyi-monitor-admin/pom.xml
@@ -12,10 +12,21 @@
ruoyi-monitor-admin
-
+
org.springframework.boot
spring-boot-starter-web
+
+
+ spring-boot-starter-tomcat
+ org.springframework.boot
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-undertow
From 2869d590e6ffeb6ab7ff66611e4b74fdddfa0ba7 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, 1 Aug 2024 14:55:43 +0800
Subject: [PATCH 16/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20sse=20?=
=?UTF-8?q?=E5=85=B3=E9=97=AD=E8=BF=9E=E6=8E=A5=E5=90=84=E7=A7=8D=E5=BC=82?=
=?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?=
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 91dd71dbb..aa7960c24 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
@@ -46,7 +46,7 @@ public class SseEmitterManager {
if (emitters != null) {
try {
emitters.get(token).send(SseEmitter.event().comment("disconnected"));
- } catch (IOException ignore) {
+ } catch (Exception ignore) {
}
emitters.remove(token);
}
From 588a47897abd7da0cf2860fb4da9e9ddddc55880 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, 1 Aug 2024 15:15:54 +0800
Subject: [PATCH 17/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E8=BD=AC?=
=?UTF-8?q?=E6=8D=A2=E6=A8=A1=E5=9E=8B=E7=BC=BA=E5=B0=91=E5=88=86=E7=B1=BB?=
=?UTF-8?q?=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../workflow/service/impl/ActProcessDefinitionServiceImpl.java | 1 +
1 file changed, 1 insertion(+)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java
index 2680db8ef..e3c2ed67a 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java
@@ -288,6 +288,7 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionSer
Model modelData = repositoryService.newModel();
modelData.setKey(pd.getKey());
modelData.setName(pd.getName());
+ modelData.setCategory(pd.getCategory());
modelData.setTenantId(pd.getTenantId());
repositoryService.saveModel(modelData);
repositoryService.addModelEditorSource(modelData.getId(), IoUtil.readBytes(inputStream));
From b886f3a04b5b3b109cb0b1a8989f8c71e5f73d89 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, 1 Aug 2024 23:20:29 +0800
Subject: [PATCH 18/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=99=BB?=
=?UTF-8?q?=E5=BD=95=E9=94=99=E8=AF=AF=E9=94=81=E5=AE=9A=E4=B8=8D=E5=8C=BA?=
=?UTF-8?q?=E5=88=86=E7=A7=9F=E6=88=B7=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/web/service/SysLoginService.java | 20 +++++------
.../web/service/impl/EmailAuthStrategy.java | 36 +++++++++----------
.../service/impl/PasswordAuthStrategy.java | 33 +++++++++--------
.../web/service/impl/SmsAuthStrategy.java | 36 +++++++++----------
.../web/service/impl/SocialAuthStrategy.java | 32 ++++++++---------
.../common/core/constant/CacheConstants.java | 5 +++
.../common/core/constant/GlobalConstants.java | 5 ---
.../monitor/SysLogininforController.java | 8 ++---
8 files changed, 80 insertions(+), 95 deletions(-)
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
index af6e7f557..52803663c 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -4,13 +4,14 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.Opt;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.lock.annotation.Lock4j;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthUser;
+import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.domain.dto.RoleDTO;
import org.dromara.common.core.domain.model.LoginUser;
@@ -155,16 +156,11 @@ public class SysLoginService {
loginUser.setUserType(user.getUserType());
loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId()));
loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId()));
- TenantHelper.dynamic(user.getTenantId(), () -> {
- SysDeptVo dept = null;
- if (ObjectUtil.isNotNull(user.getDeptId())) {
- dept = deptService.selectDeptById(user.getDeptId());
- }
- loginUser.setDeptName(ObjectUtil.isNull(dept) ? "" : dept.getDeptName());
- loginUser.setDeptCategory(ObjectUtil.isNull(dept) ? "" : dept.getDeptCategory());
- List roles = roleService.selectRolesByUserId(user.getUserId());
- loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
- });
+ Opt deptOpt = Opt.of(user.getDeptId()).map(deptService::selectDeptById);
+ loginUser.setDeptName(deptOpt.map(SysDeptVo::getDeptName).orElse(StringUtils.EMPTY));
+ loginUser.setDeptCategory(deptOpt.map(SysDeptVo::getDeptCategory).orElse(StringUtils.EMPTY));
+ List roles = roleService.selectRolesByUserId(user.getUserId());
+ loginUser.setRoles(BeanUtil.copyToList(roles, RoleDTO.class));
return loginUser;
}
@@ -186,7 +182,7 @@ public class SysLoginService {
* 登录校验
*/
public void checkLogin(LoginType loginType, String tenantId, String username, Supplier supplier) {
- String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username;
+ String errorKey = CacheConstants.PWD_ERR_CNT_KEY + username;
String loginFail = Constants.LOGIN_FAIL;
// 获取用户登录错误次数,默认为0 (可自定义限制策略 例如: key + username + ip)
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java
index 38fdc448b..b5a24976e 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java
@@ -21,7 +21,6 @@ import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
-import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysClientVo;
import org.dromara.system.domain.vo.SysUserVo;
@@ -51,13 +50,12 @@ public class EmailAuthStrategy implements IAuthStrategy {
String tenantId = loginBody.getTenantId();
String email = loginBody.getEmail();
String emailCode = loginBody.getEmailCode();
-
- // 通过邮箱查找用户
- SysUserVo user = loadUserByEmail(tenantId, email);
-
- loginService.checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode));
- // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
- LoginUser loginUser = loginService.buildLoginUser(user);
+ LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
+ SysUserVo user = loadUserByEmail(email);
+ loginService.checkLogin(LoginType.EMAIL, tenantId, user.getUserName(), () -> !validateEmailCode(tenantId, email, emailCode));
+ // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
+ return loginService.buildLoginUser(user);
+ });
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
@@ -89,18 +87,16 @@ public class EmailAuthStrategy implements IAuthStrategy {
return code.equals(emailCode);
}
- private SysUserVo loadUserByEmail(String tenantId, String email) {
- return TenantHelper.dynamic(tenantId, () -> {
- SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getEmail, email));
- if (ObjectUtil.isNull(user)) {
- log.info("登录用户:{} 不存在.", email);
- throw new UserException("user.not.exists", email);
- } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
- log.info("登录用户:{} 已被停用.", email);
- throw new UserException("user.blocked", email);
- }
- return user;
- });
+ private SysUserVo loadUserByEmail(String email) {
+ SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getEmail, email));
+ if (ObjectUtil.isNull(user)) {
+ log.info("登录用户:{} 不存在.", email);
+ throw new UserException("user.not.exists", email);
+ } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+ log.info("登录用户:{} 已被停用.", email);
+ throw new UserException("user.blocked", email);
+ }
+ return user;
}
}
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
index 5d3ebd755..f28024f35 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
@@ -62,11 +62,12 @@ public class PasswordAuthStrategy implements IAuthStrategy {
if (captchaEnabled) {
validateCaptcha(tenantId, username, code, uuid);
}
-
- SysUserVo user = loadUserByUsername(tenantId, username);
- loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
- // 此处可根据登录用户的数据不同 自行创建 loginUser
- LoginUser loginUser = loginService.buildLoginUser(user);
+ LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
+ SysUserVo user = loadUserByUsername(username);
+ loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
+ // 此处可根据登录用户的数据不同 自行创建 loginUser
+ return loginService.buildLoginUser(user);
+ });
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
@@ -107,18 +108,16 @@ public class PasswordAuthStrategy implements IAuthStrategy {
}
}
- private SysUserVo loadUserByUsername(String tenantId, String username) {
- return TenantHelper.dynamic(tenantId, () -> {
- SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getUserName, username));
- if (ObjectUtil.isNull(user)) {
- log.info("登录用户:{} 不存在.", username);
- throw new UserException("user.not.exists", username);
- } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
- log.info("登录用户:{} 已被停用.", username);
- throw new UserException("user.blocked", username);
- }
- return user;
- });
+ private SysUserVo loadUserByUsername(String username) {
+ SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getUserName, username));
+ if (ObjectUtil.isNull(user)) {
+ log.info("登录用户:{} 不存在.", username);
+ throw new UserException("user.not.exists", username);
+ } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+ log.info("登录用户:{} 已被停用.", username);
+ throw new UserException("user.blocked", username);
+ }
+ return user;
}
}
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java
index f883632f9..89f846244 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java
@@ -21,7 +21,6 @@ import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
-import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysClientVo;
import org.dromara.system.domain.vo.SysUserVo;
@@ -51,13 +50,12 @@ public class SmsAuthStrategy implements IAuthStrategy {
String tenantId = loginBody.getTenantId();
String phonenumber = loginBody.getPhonenumber();
String smsCode = loginBody.getSmsCode();
-
- // 通过手机号查找用户
- SysUserVo user = loadUserByPhonenumber(tenantId, phonenumber);
-
- loginService.checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode));
- // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
- LoginUser loginUser = loginService.buildLoginUser(user);
+ LoginUser loginUser = TenantHelper.dynamic(tenantId, () -> {
+ SysUserVo user = loadUserByPhonenumber(phonenumber);
+ loginService.checkLogin(LoginType.SMS, tenantId, user.getUserName(), () -> !validateSmsCode(tenantId, phonenumber, smsCode));
+ // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
+ return loginService.buildLoginUser(user);
+ });
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
@@ -89,18 +87,16 @@ public class SmsAuthStrategy implements IAuthStrategy {
return code.equals(smsCode);
}
- private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) {
- return TenantHelper.dynamic(tenantId, () -> {
- SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getPhonenumber, phonenumber));
- if (ObjectUtil.isNull(user)) {
- log.info("登录用户:{} 不存在.", phonenumber);
- throw new UserException("user.not.exists", phonenumber);
- } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
- log.info("登录用户:{} 已被停用.", phonenumber);
- throw new UserException("user.blocked", phonenumber);
- }
- return user;
- });
+ private SysUserVo loadUserByPhonenumber(String phonenumber) {
+ SysUserVo user = userMapper.selectVoOne(new LambdaQueryWrapper().eq(SysUser::getPhonenumber, phonenumber));
+ if (ObjectUtil.isNull(user)) {
+ log.info("登录用户:{} 不存在.", phonenumber);
+ throw new UserException("user.not.exists", phonenumber);
+ } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+ log.info("登录用户:{} 已被停用.", phonenumber);
+ throw new UserException("user.blocked", phonenumber);
+ }
+ return user;
}
}
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
index 01db20027..84630260f 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
@@ -92,11 +92,11 @@ public class SocialAuthStrategy implements IAuthStrategy {
} else {
social = list.get(0);
}
- // 查找用户
- SysUserVo user = loadUser(social.getTenantId(), social.getUserId());
-
- // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
- LoginUser loginUser = loginService.buildLoginUser(user);
+ LoginUser loginUser = TenantHelper.dynamic(social.getTenantId(), () -> {
+ SysUserVo user = loadUser(social.getUserId());
+ // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
+ return loginService.buildLoginUser(user);
+ });
loginUser.setClientKey(client.getClientKey());
loginUser.setDeviceType(client.getDeviceType());
SaLoginModel model = new SaLoginModel();
@@ -116,18 +116,16 @@ public class SocialAuthStrategy implements IAuthStrategy {
return loginVo;
}
- private SysUserVo loadUser(String tenantId, Long userId) {
- return TenantHelper.dynamic(tenantId, () -> {
- SysUserVo user = userMapper.selectVoById(userId);
- if (ObjectUtil.isNull(user)) {
- log.info("登录用户:{} 不存在.", "");
- throw new UserException("user.not.exists", "");
- } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
- log.info("登录用户:{} 已被停用.", "");
- throw new UserException("user.blocked", "");
- }
- return user;
- });
+ private SysUserVo loadUser(Long userId) {
+ SysUserVo user = userMapper.selectVoById(userId);
+ if (ObjectUtil.isNull(user)) {
+ log.info("登录用户:{} 不存在.", "");
+ throw new UserException("user.not.exists", "");
+ } else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
+ log.info("登录用户:{} 已被停用.", "");
+ throw new UserException("user.blocked", "");
+ }
+ return user;
}
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java
index 67bc8e4c2..ceb837044 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/CacheConstants.java
@@ -22,4 +22,9 @@ public interface CacheConstants {
*/
String SYS_DICT_KEY = "sys_dict:";
+ /**
+ * 登录账户密码错误次数 redis key
+ */
+ String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
+
}
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java
index ae9bc2e62..5352b118f 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/GlobalConstants.java
@@ -27,11 +27,6 @@ public interface GlobalConstants {
*/
String RATE_LIMIT_KEY = GLOBAL_REDIS_KEY + "rate_limit:";
- /**
- * 登录账户密码错误次数 redis key
- */
- String PWD_ERR_CNT_KEY = GLOBAL_REDIS_KEY + "pwd_err_cnt:";
-
/**
* 三方认证 redis key
*/
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLogininforController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLogininforController.java
index 18e32d8c6..98ac2d58f 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLogininforController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/monitor/SysLogininforController.java
@@ -1,7 +1,9 @@
package org.dromara.system.controller.monitor;
import cn.dev33.satoken.annotation.SaCheckPermission;
-import org.dromara.common.core.constant.GlobalConstants;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.dromara.common.core.constant.CacheConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.log.annotation.Log;
@@ -13,8 +15,6 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.bo.SysLogininforBo;
import org.dromara.system.domain.vo.SysLogininforVo;
import org.dromara.system.service.ISysLogininforService;
-import jakarta.servlet.http.HttpServletResponse;
-import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -79,7 +79,7 @@ public class SysLogininforController extends BaseController {
@Log(title = "账户解锁", businessType = BusinessType.OTHER)
@GetMapping("/unlock/{userName}")
public R unlock(@PathVariable("userName") String userName) {
- String loginName = GlobalConstants.PWD_ERR_CNT_KEY + userName;
+ String loginName = CacheConstants.PWD_ERR_CNT_KEY + userName;
if (RedisUtils.hasKey(loginName)) {
RedisUtils.deleteObject(loginName);
}
From 615ad918ca83328bbec94841747bb70a7ba07a46 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, 2 Aug 2024 00:55:11 +0800
Subject: [PATCH 19/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20sse=20?=
=?UTF-8?q?=E6=8B=A6=E6=88=AA=E7=BD=91=E7=BB=9C=E4=B8=AD=E6=96=ADio?=
=?UTF-8?q?=E5=BC=82=E5=B8=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/sse/core/SseEmitterManager.java | 6 ------
.../web/handler/GlobalExceptionHandler.java | 17 +++++++++++++++++
2 files changed, 17 insertions(+), 6 deletions(-)
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 aa7960c24..039e17f4e 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
@@ -1,6 +1,5 @@
package org.dromara.common.sse.core;
-import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.collection.CollUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.redis.utils.RedisUtils;
@@ -72,11 +71,6 @@ public class SseEmitterManager {
if (emitters != null) {
for (Map.Entry entry : emitters.entrySet()) {
try {
- // token 无效或已过期
- if (StpUtil.stpLogic.getTokenActiveTimeoutByToken(entry.getKey()) < -1) {
- emitters.remove(entry.getKey());
- continue;
- }
entry.getValue().send(SseEmitter.event()
.name("message")
.data(message));
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java
index bd47c189d..061d3aa45 100644
--- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java
+++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/handler/GlobalExceptionHandler.java
@@ -16,10 +16,13 @@ import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.MissingPathVariableException;
import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.servlet.NoHandlerFoundException;
+import java.io.IOException;
+
/**
* 全局异常处理器
*
@@ -89,6 +92,20 @@ public class GlobalExceptionHandler {
return R.fail(HttpStatus.HTTP_NOT_FOUND, e.getMessage());
}
+ /**
+ * 拦截未知的运行时异常
+ */
+ @ResponseStatus(org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR)
+ @ExceptionHandler(IOException.class)
+ public void handleRuntimeException(IOException e, HttpServletRequest request) {
+ String requestURI = request.getRequestURI();
+ if (requestURI.contains("sse")) {
+ // sse 经常性连接中断 例如关闭浏览器 直接屏蔽
+ return;
+ }
+ log.error("请求地址'{}',连接中断", requestURI, e);
+ }
+
/**
* 拦截未知的运行时异常
*/
From 85403e975f86a2697d8dab152ecbb3461a01ec2d 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, 2 Aug 2024 00:55:42 +0800
Subject: [PATCH 20/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E7=99=BB?=
=?UTF-8?q?=E5=87=BA=E6=97=A0=E6=B3=95=E6=AD=A3=E7=A1=AE=E5=88=A0=E9=99=A4?=
=?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E7=A7=9F=E6=88=B7=E6=95=B0=E6=8D=AE?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../web/listener/UserActionListener.java | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java b/ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java
index a4724043b..07595e092 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java
@@ -3,6 +3,8 @@ package org.dromara.web.listener;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.listener.SaTokenListener;
import cn.dev33.satoken.stp.SaLoginModel;
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.convert.Convert;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import lombok.RequiredArgsConstructor;
@@ -81,7 +83,10 @@ public class UserActionListener implements SaTokenListener {
*/
@Override
public void doLogout(String loginType, Object loginId, String tokenValue) {
- RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+ String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
+ TenantHelper.dynamic(tenantId, () -> {
+ RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+ });
log.info("user doLogout, userId:{}, token:{}", loginId, tokenValue);
}
@@ -90,7 +95,10 @@ public class UserActionListener implements SaTokenListener {
*/
@Override
public void doKickout(String loginType, Object loginId, String tokenValue) {
- RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+ String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
+ TenantHelper.dynamic(tenantId, () -> {
+ RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+ });
log.info("user doKickout, userId:{}, token:{}", loginId, tokenValue);
}
@@ -99,7 +107,10 @@ public class UserActionListener implements SaTokenListener {
*/
@Override
public void doReplaced(String loginType, Object loginId, String tokenValue) {
- RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+ String tenantId = Convert.toStr(StpUtil.getExtra(tokenValue, LoginHelper.TENANT_KEY));
+ TenantHelper.dynamic(tenantId, () -> {
+ RedisUtils.deleteObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue);
+ });
log.info("user doReplaced, userId:{}, token:{}", loginId, tokenValue);
}
From b615a3b088b0e0b14937b010941b5bdf2791edb0 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, 2 Aug 2024 10:03:17 +0800
Subject: [PATCH 21/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20id=E5=AD=97?=
=?UTF-8?q?=E7=AC=A6=E4=B8=B2=E6=A0=BC=E5=BC=8F=E8=BD=AC=E6=8D=A2=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
index 32e6aec08..c44a02ade 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -260,7 +260,7 @@ public class ActTaskServiceImpl implements IActTaskService {
String userId = String.valueOf(LoginHelper.getUserId());
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId());
- String ids = StreamUtils.join(roleIds, x -> "'" + x + "'");
+ String ids = StreamUtils.join(roleIds, x -> x);
queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN ({1}) ) ))", userId, ids)));
if (StringUtils.isNotBlank(taskBo.getName())) {
queryWrapper.like("t.name_", taskBo.getName());
From 2b0efd1f93f20063c7df0d8d0c5824cc81f42e67 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, 2 Aug 2024 10:07:47 +0800
Subject: [PATCH 22/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E5=88=A0=E9=99=A4=E6=A0=87=E5=BF=97=E4=BD=8D=E5=B8=B8?=
=?UTF-8?q?=E9=87=8F=E4=BC=98=E5=8C=96=E6=9F=A5=E8=AF=A2=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../dromara/common/core/constant/UserConstants.java | 10 ++++++++++
.../system/service/impl/SysDeptServiceImpl.java | 2 +-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java
index 6f3b0b96b..76f6dd4ad 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/UserConstants.java
@@ -67,6 +67,16 @@ public interface UserConstants {
*/
String DICT_NORMAL = "0";
+ /**
+ * 通用存在标志
+ */
+ String DEL_FLAG_NORMAL = "0";
+
+ /**
+ * 通用删除标志
+ */
+ String DEL_FLAG_REMOVED = "2";
+
/**
* 是否为系统默认(是)
*/
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 505403642..160238df3 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
@@ -78,7 +78,7 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService {
private LambdaQueryWrapper buildQueryWrapper(SysDeptBo bo) {
LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
- lqw.eq(SysDept::getDelFlag, "0");
+ lqw.eq(SysDept::getDelFlag, UserConstants.DEL_FLAG_NORMAL);
lqw.eq(ObjectUtil.isNotNull(bo.getDeptId()), SysDept::getDeptId, bo.getDeptId());
lqw.eq(ObjectUtil.isNotNull(bo.getParentId()), SysDept::getParentId, bo.getParentId());
lqw.like(StringUtils.isNotBlank(bo.getDeptName()), SysDept::getDeptName, bo.getDeptName());
From 7393a61305c7e45a72a95b09e37e1895a76fa6b0 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, 2 Aug 2024 10:36:34 +0800
Subject: [PATCH 23/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20id=E5=AD=97?=
=?UTF-8?q?=E7=AC=A6=E4=B8=B2=E6=A0=BC=E5=BC=8F=E8=BD=AC=E6=8D=A2=E9=94=99?=
=?UTF-8?q?=E8=AF=AF=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../org/dromara/workflow/service/impl/ActTaskServiceImpl.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
index c44a02ade..b6ae67ebf 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java
@@ -260,8 +260,8 @@ public class ActTaskServiceImpl implements IActTaskService {
String userId = String.valueOf(LoginHelper.getUserId());
queryWrapper.eq("t.business_status_", BusinessStatusEnum.WAITING.getStatus());
queryWrapper.eq(TenantHelper.isEnable(), "t.tenant_id_", TenantHelper.getTenantId());
- String ids = StreamUtils.join(roleIds, x -> x);
- queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN ({1}) ) ))", userId, ids)));
+ String ids = StreamUtils.join(roleIds, x -> "'" + x + "'");
+ queryWrapper.and(w1 -> w1.eq("t.assignee_", userId).or(w2 -> w2.isNull("t.assignee_").apply("exists ( select LINK.ID_ from ACT_RU_IDENTITYLINK LINK where LINK.TASK_ID_ = t.ID_ and LINK.TYPE_ = 'candidate' and (LINK.USER_ID_ = {0} or ( LINK.GROUP_ID_ IN (" + ids + ") ) ))", userId)));
if (StringUtils.isNotBlank(taskBo.getName())) {
queryWrapper.like("t.name_", taskBo.getName());
}
From f32d0266eee6cf2fe4bd8b5063f9c4a098c70c05 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, 2 Aug 2024 11:37:21 +0800
Subject: [PATCH 24/28] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=20readme?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 ++
1 file changed, 2 insertions(+)
diff --git a/README.md b/README.md
index ad9c2cee7..71895dc3f 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,7 @@ CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow
| 数据库连接池 | 采用 HikariCP Spring官方内置连接池 配置简单 以性能与稳定性闻名天下 | 采用 druid bug众多 社区维护差 活跃度低 配置众多繁琐性能一般 |
| 数据库主键 | 采用 雪花ID 基于时间戳的 有序增长 唯一ID 再也不用为分库分表 数据合并主键冲突重复而发愁 | 采用 数据库自增ID 支持数据量有限 不支持多数据源主键唯一 |
| WebSocket协议 | 基于 Spring 封装的 WebSocket 协议 扩展了Token鉴权与分布式会话同步 不再只是基于单机的废物 | 无 |
+| SSE推送 | 采用 Spring SSE 实现 扩展了Token鉴权与分布式会话同步 | 无 |
| 序列化 | 采用 Jackson Spring官方内置序列化 靠谱!!! | 采用 fastjson bugjson 远近闻名 |
| 分布式幂等 | 参考美团GTIS防重系统简化实现(细节可看文档) | 手动编写注解基于aop实现 |
| 分布式锁 | 采用 Lock4j 底层基于 Redisson | 无 |
@@ -72,6 +73,7 @@ CCFlow 驰聘低代码-流程-表单 - https://gitee.com/opencc/RuoYi-JFlow
| 接口文档 | 采用 SpringDoc、javadoc 无注解零入侵基于java注释
只需把注释写好 无需再写一大堆的文档注解了 | 采用 Springfox 已停止维护 需要编写大量的注解来支持文档生成 |
| 校验框架 | 采用 Validation 支持注解与工具类校验 注解支持国际化 | 仅支持注解 且注解不支持国际化 |
| Excel框架 | 采用 Alibaba EasyExcel 基于插件化
框架对其增加了很多功能 例如 自动合并相同内容 自动排列布局 字典翻译等 | 基于 POI 手写实现 功能有限 复杂 扩展性差 |
+| 工作流支持 | 支持各种复杂审批 转办 委派 加减签 会签 或签 票签 等功能 | 无 |
| 工具类框架 | 采用 Hutool、Lombok 上百种工具覆盖90%的使用需求 基于注解自动生成 get set 等简化框架大量代码 | 手写工具稳定性差易出问题 工具数量有限 代码臃肿需自己手写 get set 等 |
| 监控框架 | 采用 SpringBoot-Admin 基于SpringBoot官方 actuator 探针机制
实时监控服务状态 框架还为其扩展了在线日志查看监控 | 无 |
| 链路追踪 | 采用 Apache SkyWalking 还在为请求不知道去哪了 到哪出了问题而烦恼吗
用了它即可实时查看请求经过的每一处每一个节点 | 无 |
From ecfaa9ad5c83be221e9baabfe2e5c8647899b7d5 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, 2 Aug 2024 17:09:46 +0800
Subject: [PATCH 25/28] =?UTF-8?q?update=20=E4=BC=98=E5=8C=96=20=E8=A7=92?=
=?UTF-8?q?=E8=89=B2=E6=9D=83=E9=99=90=E5=88=A4=E6=96=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../service/impl/SysUserServiceImpl.java | 20 +++++++------------
1 file changed, 7 insertions(+), 13 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
index c38d0d055..6fbeab56d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java
@@ -26,10 +26,7 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.helper.DataBaseHelper;
import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.system.domain.SysDept;
-import org.dromara.system.domain.SysUser;
-import org.dromara.system.domain.SysUserPost;
-import org.dromara.system.domain.SysUserRole;
+import org.dromara.system.domain.*;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysPostVo;
import org.dromara.system.domain.vo.SysRoleVo;
@@ -473,17 +470,14 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
*/
private void insertUserRole(Long userId, Long[] roleIds, boolean clear) {
if (ArrayUtil.isNotEmpty(roleIds)) {
- // 判断是否具有此角色的操作权限
- List roles = roleMapper.selectRoleList(new LambdaQueryWrapper<>());
- if (CollUtil.isEmpty(roles)) {
- throw new ServiceException("没有权限访问角色的数据");
- }
- List roleList = StreamUtils.toList(roles, SysRoleVo::getRoleId);
+ List roleList = new ArrayList<>(List.of(roleIds));
if (!LoginHelper.isSuperAdmin(userId)) {
roleList.remove(UserConstants.SUPER_ADMIN_ID);
}
- List canDoRoleList = StreamUtils.filter(List.of(roleIds), roleList::contains);
- if (CollUtil.isEmpty(canDoRoleList)) {
+ // 判断是否具有此角色的操作权限
+ List roles = roleMapper.selectRoleList(
+ new QueryWrapper().in("r.role_id", roleList));
+ if (CollUtil.isEmpty(roles)) {
throw new ServiceException("没有权限访问角色的数据");
}
if (clear) {
@@ -491,7 +485,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
userRoleMapper.delete(new LambdaQueryWrapper().eq(SysUserRole::getUserId, userId));
}
// 新增用户与角色管理
- List list = StreamUtils.toList(canDoRoleList, roleId -> {
+ List list = StreamUtils.toList(roleList, roleId -> {
SysUserRole ur = new SysUserRole();
ur.setUserId(userId);
ur.setRoleId(roleId);
From f119d082cf061c892a7d4fe987ea34a43ad297d9 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, 4 Aug 2024 10:40:12 +0800
Subject: [PATCH 26/28] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=B8=80?=
=?UTF-8?q?=E7=BA=A7=E7=BC=93=E5=AD=98key=E6=9C=AA=E5=8C=BA=E5=88=86?=
=?UTF-8?q?=E7=A7=9F=E6=88=B7=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../common/redis/manager/CaffeineCacheDecorator.java | 8 +++++---
.../common/redis/manager/PlusSpringCacheManager.java | 4 ++--
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java
index ee1d405f2..793e21f5c 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java
@@ -15,15 +15,17 @@ public class CaffeineCacheDecorator implements Cache {
private static final com.github.benmanes.caffeine.cache.Cache