From 764830a60b31c52a1f11d399fec4090f3cef0a6f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?REBUILD=20=E4=BC=81=E4=B8=9A=E7=AE=A1=E7=90=86=E7=B3=BB?=
=?UTF-8?q?=E7=BB=9F?= <42044143+getrebuild@users.noreply.github.com>
Date: Mon, 22 Jul 2024 21:11:25 +0800
Subject: [PATCH] Fix 3.7.5 (#786)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* fix: 记录转换
* be: if nav unshare
* be: db AppBuild
* bump netty
---
pom.xml | 19 +++++---
.../java/com/rebuild/core/Application.java | 12 ++----
.../core/configuration/NavBuilder.java | 12 +++++-
.../general/AutoFillinManager.java | 4 +-
.../core/metadata/impl/Entity2Schema.java | 2 +-
.../rebuild/core/privileges/UserService.java | 2 +-
.../service/general/ObservableService.java | 2 +-
.../general/transform/RecordTransfomer37.java | 43 ++++++++++++-------
.../transform/TransformerPreview37.java | 14 +-----
.../core/support/integration/SMSender.java | 2 +-
.../core/support/setup/DatabaseFixer.java | 2 +-
.../rebuild/core/support/setup/Installer.java | 5 ++-
.../robot/trigger/TriggerAdminController.java | 2 +-
.../web/user/signup/LoginController.java | 2 +-
14 files changed, 69 insertions(+), 54 deletions(-)
diff --git a/pom.xml b/pom.xml
index 5c05c77f1..d79c062eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
com.rebuild
rebuild
- 3.7.4
+ 3.7.5
rebuild
Building your business-systems freely!
https://getrebuild.com/
@@ -548,15 +548,20 @@
woodstox-core
6.6.1
-
- io.netty
- netty-handler
- 4.1.108.Final
-
com.google.guava
guava
- 33.1.0-jre
+ 33.2.1-jre
+
+
+ io.netty
+ netty-handler
+ 4.1.112.Final
+
+
+ io.netty
+ netty-resolver-dns
+ 4.1.112.Final
diff --git a/src/main/java/com/rebuild/core/Application.java b/src/main/java/com/rebuild/core/Application.java
index 09f6c00d3..ad9f40c82 100644
--- a/src/main/java/com/rebuild/core/Application.java
+++ b/src/main/java/com/rebuild/core/Application.java
@@ -15,7 +15,6 @@ import cn.devezhao.persist4j.Query;
import cn.devezhao.persist4j.engine.ID;
import cn.devezhao.persist4j.engine.StandardRecord;
import cn.devezhao.persist4j.query.QueryedRecord;
-import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
@@ -75,11 +74,11 @@ public class Application implements ApplicationListener
/**
* Rebuild Version
*/
- public static final String VER = "3.7.4";
+ public static final String VER = "3.7.5";
/**
* Rebuild Build [MAJOR]{1}[MINOR]{2}[PATCH]{2}[BUILD]{2}
*/
- public static final int BUILD = 3070410;
+ public static final int BUILD = 3070511;
static {
// Driver for DB
@@ -210,16 +209,13 @@ public class Application implements ApplicationListener
return false;
}
- // H2 no filters
- if (Installer.isUseH2()) _CONTEXT.getBean(DruidDataSource.class).clearFilters();
-
// 升级数据库
new UpgradeDatabase().upgradeQuietly();
// 版本升级会清除缓存
int lastBuild = ObjectUtils.toInt(RebuildConfiguration.get(ConfigurationItem.AppBuild, true), 0);
- if (lastBuild > 0 && lastBuild != BUILD) {
- log.warn("Clean up the cache once when upgrading : {}", BUILD);
+ if (lastBuild != BUILD) {
+ log.warn("Clean up the cache once when upgrading : {} from {}", BUILD, lastBuild);
Installer.clearAllCache();
RebuildConfiguration.set(ConfigurationItem.AppBuild, BUILD);
}
diff --git a/src/main/java/com/rebuild/core/configuration/NavBuilder.java b/src/main/java/com/rebuild/core/configuration/NavBuilder.java
index de9d7561e..af53b9b20 100644
--- a/src/main/java/com/rebuild/core/configuration/NavBuilder.java
+++ b/src/main/java/com/rebuild/core/configuration/NavBuilder.java
@@ -100,7 +100,15 @@ public class NavBuilder extends NavManager {
ID useNavId;
if ((useNavId = MetadataHelper.checkSpecEntityId(useNav, EntityHelper.LayoutConfig)) != null) {
Object[][] cached = getAllConfig(null, TYPE_NAV);
- config = findConfigBean(cached, useNavId);
+ // fix: 3.7.5 原本可见现在不可见了
+ for (Object[] c : cached) {
+ if (c[0].equals(useNavId)) {
+ if (!isShareTo((String) c[1], user)) useNavId = null;
+ break;
+ }
+ }
+
+ if (useNavId != null) config = findConfigBean(cached, useNavId);
}
}
@@ -343,7 +351,7 @@ public class NavBuilder extends NavManager {
ID user = AppUtils.getRequestUser(request);
String useNav = ServletUtils.readCookie(request, "AppHome.Nav");
- JSONArray navs = License.isCommercial()
+ JSONArray navs = License.isRbvAttached()
? NavBuilder.instance.getUserNav(user, useNav)
: NavBuilder.instance.getUserNav(user);
diff --git a/src/main/java/com/rebuild/core/configuration/general/AutoFillinManager.java b/src/main/java/com/rebuild/core/configuration/general/AutoFillinManager.java
index 999ed8792..7f1f47831 100644
--- a/src/main/java/com/rebuild/core/configuration/general/AutoFillinManager.java
+++ b/src/main/java/com/rebuild/core/configuration/general/AutoFillinManager.java
@@ -170,7 +170,7 @@ public class AutoFillinManager implements ConfigManager {
// v3.7 附加过滤条件
if (value instanceof ID && tfEasy.getDisplayType() == DisplayType.REFERENCE) {
if (!FieldValueHelper.checkRefDataFilter(tfEasy, (ID) value)) {
- log.info("Mismatch `referenceDataFilter`, ignored : {}", value);
+ log.info("Not meeting the `referenceDataFilter`, ignored : {}", value);
continue;
}
} else if (value instanceof JSONArray && tfEasy.getDisplayType() == DisplayType.N2NREFERENCE) {
@@ -181,7 +181,7 @@ public class AutoFillinManager implements ConfigManager {
if (FieldValueHelper.checkRefDataFilter(tfEasy, ID.valueOf(id))) {
value2.add(item);
} else {
- log.info("Mismatch `referenceDataFilter`, ignored : {}", value);
+ log.info("Not meeting the `referenceDataFilter`, ignored : {}", value);
}
}
value = value2.isEmpty() ? null : value2;
diff --git a/src/main/java/com/rebuild/core/metadata/impl/Entity2Schema.java b/src/main/java/com/rebuild/core/metadata/impl/Entity2Schema.java
index 4463cbf5a..bf14d531e 100644
--- a/src/main/java/com/rebuild/core/metadata/impl/Entity2Schema.java
+++ b/src/main/java/com/rebuild/core/metadata/impl/Entity2Schema.java
@@ -67,7 +67,7 @@ public class Entity2Schema extends Field2Schema {
* @return Returns 实体名称
*/
public String createEntity(String entityName, String entityLabel, String comments, String mainEntity, boolean haveNameField, boolean haveSeriesField) {
- if (!License.isCommercial() && MetadataHelper.getEntities().length >= 100) {
+ if (!License.isRbvAttached() && MetadataHelper.getEntities().length >= 100) {
throw new NeedRbvException(Language.L("实体数量超出免费版限制"));
}
diff --git a/src/main/java/com/rebuild/core/privileges/UserService.java b/src/main/java/com/rebuild/core/privileges/UserService.java
index 0ee204185..e7428e956 100644
--- a/src/main/java/com/rebuild/core/privileges/UserService.java
+++ b/src/main/java/com/rebuild/core/privileges/UserService.java
@@ -81,7 +81,7 @@ public class UserService extends BaseService {
* @return
*/
private Record create(Record record, boolean notifyUser) {
- if (!License.isCommercial() && Application.getUserStore().getAllUsers().length >= 100) {
+ if (!License.isRbvAttached() && Application.getUserStore().getAllUsers().length >= 100) {
throw new NeedRbvException(Language.L("用户数量超出免费版限制"));
}
diff --git a/src/main/java/com/rebuild/core/service/general/ObservableService.java b/src/main/java/com/rebuild/core/service/general/ObservableService.java
index 2f64673d4..1934a9f88 100644
--- a/src/main/java/com/rebuild/core/service/general/ObservableService.java
+++ b/src/main/java/com/rebuild/core/service/general/ObservableService.java
@@ -50,7 +50,7 @@ public abstract class ObservableService extends SafeObservable implements Servic
@Override
public void addObserver(SafeObserver o) {
- log.info("Add observer : {} for [ {} ] ", o, getEntityCode());
+ log.info("Add observer : {} for [ {} ] ", o, getEntityCode() == 0 ? "*" : getEntityCode());
super.addObserver(o);
}
diff --git a/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer37.java b/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer37.java
index 702e5a49c..611f55445 100644
--- a/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer37.java
+++ b/src/main/java/com/rebuild/core/service/general/transform/RecordTransfomer37.java
@@ -70,23 +70,11 @@ public class RecordTransfomer37 extends RecordTransfomer {
Entity dTargetEntity = fmdEntity[0];
Entity dSourceEntity = fmdEntity[1];
- // 明细 > 明细
- String sql = String.format(
- "select %s from %s where %s = '%s' and (1=1) order by autoId asc",
- dSourceEntity.getPrimaryField().getName(), dSourceEntity.getName(),
- MetadataHelper.getDetailToMainField(dSourceEntity).getName(), sourceRecordId);
- // 明细 > 主+明细
- if (dSourceEntity.getEntityCode().equals(sourceRecordId.getEntityCode())) {
- sql = String.format(
- "select %s from %s where %s = '%s' and (1=1) order by autoId asc",
- dSourceEntity.getPrimaryField().getName(), dSourceEntity.getName(),
- dSourceEntity.getPrimaryField().getName(), sourceRecordId);
- }
-
+ String querySourceSql = buildDetailsSourceSql(dSourceEntity, sourceRecordId);
String filter = appendFilter(fmd);
- if (filter != null) sql = sql.replace("(1=1)", filter);
+ if (filter != null) querySourceSql = querySourceSql.replace("(1=1)", filter);
- Object[][] dArray = Application.createQueryNoFilter(sql).array();
+ Object[][] dArray = Application.createQueryNoFilter(querySourceSql).array();
for (Object[] d : dArray) {
detailsList.add(transformRecord(
dSourceEntity, dTargetEntity, fmd, (ID) d[0], null, false, false, checkNullable));
@@ -151,4 +139,29 @@ public class RecordTransfomer37 extends RecordTransfomer {
}
return null;
}
+
+ /**
+ * @param sourceEntity
+ * @param sourceId
+ * @return
+ */
+ protected static String buildDetailsSourceSql(Entity sourceEntity, ID sourceId) {
+ String querySourceSql = null;
+ if (sourceEntity.getMainEntity() != null) {
+ querySourceSql = String.format(
+ "select %s from %s where %s = '%s' and (1=1) order by autoId asc",
+ sourceEntity.getPrimaryField().getName(), sourceEntity.getName(),
+ MetadataHelper.getDetailToMainField(sourceEntity).getName(), sourceId);
+ }
+
+ // 明细 > 主+明细
+ if (querySourceSql == null || sourceEntity.getEntityCode().equals(sourceId.getEntityCode())) {
+ querySourceSql = String.format(
+ "select %s from %s where %s = '%s' and (1=1) order by autoId asc",
+ sourceEntity.getPrimaryField().getName(), sourceEntity.getName(),
+ sourceEntity.getPrimaryField().getName(), sourceId);
+ }
+
+ return querySourceSql;
+ }
}
diff --git a/src/main/java/com/rebuild/core/service/general/transform/TransformerPreview37.java b/src/main/java/com/rebuild/core/service/general/transform/TransformerPreview37.java
index b7f6e8d83..81a7d23a1 100644
--- a/src/main/java/com/rebuild/core/service/general/transform/TransformerPreview37.java
+++ b/src/main/java/com/rebuild/core/service/general/transform/TransformerPreview37.java
@@ -63,6 +63,7 @@ public class TransformerPreview37 extends TransformerPreview {
JSONArray detailModels = new JSONArray();
+ // 明细
for (Object o : fieldsMappingDetails) {
JSONObject fmd = (JSONObject) o;
Entity[] fmdEntity = RecordTransfomer37.checkEntity(fmd);
@@ -74,18 +75,7 @@ public class TransformerPreview37 extends TransformerPreview {
// ND 指定明细的
if (!detailName.equalsIgnoreCase(dTargetEntity.getName())) continue;
- String querySourceSql = "select %s from %s where %s = '%s' and (1=1) order by autoId asc";
- // 源=明细 && 目标=主
- if (dSourceEntity.getMainEntity() != null && dTargetEntity.getDetailEntity() != null) {
- querySourceSql = String.format(querySourceSql,
- dSourceEntity.getPrimaryField().getName(), dSourceEntity.getName(),
- MetadataHelper.getDetailToMainField(dSourceEntity).getName(), sourceId);
- } else {
- querySourceSql = String.format(querySourceSql,
- dSourceEntity.getPrimaryField().getName(), dSourceEntity.getName(),
- dSourceEntity.getPrimaryField().getName(), sourceId);
- }
-
+ String querySourceSql = RecordTransfomer37.buildDetailsSourceSql(dSourceEntity, sourceId);
String filter = RecordTransfomer37.appendFilter(fmd);
if (filter != null) querySourceSql = querySourceSql.replace("(1=1)", filter);
diff --git a/src/main/java/com/rebuild/core/support/integration/SMSender.java b/src/main/java/com/rebuild/core/support/integration/SMSender.java
index 9e5ae0711..e283dde2d 100644
--- a/src/main/java/com/rebuild/core/support/integration/SMSender.java
+++ b/src/main/java/com/rebuild/core/support/integration/SMSender.java
@@ -138,7 +138,7 @@ public class SMSender {
htmlContent = htmlContent.replace("%TIME%", CalendarUtils.getUTCDateTimeFormat().format(CalendarUtils.now()));
htmlContent = htmlContent.replace("%APPURL%", RebuildConfiguration.getHomeUrl());
htmlContent = htmlContent.replace("%APPLOGO%", RebuildConfiguration.getHomeUrl("commons/theme/use-logo"));
- if (License.isCommercial()) {
+ if (License.isRbvAttached()) {
htmlContent = htmlContent.replace("%APPNAME%", RebuildConfiguration.get(ConfigurationItem.AppName));
} else {
htmlContent = htmlContent.replace("%APPNAME%", "REBUILD");
diff --git a/src/main/java/com/rebuild/core/support/setup/DatabaseFixer.java b/src/main/java/com/rebuild/core/support/setup/DatabaseFixer.java
index 463e69c88..87d587f75 100644
--- a/src/main/java/com/rebuild/core/support/setup/DatabaseFixer.java
+++ b/src/main/java/com/rebuild/core/support/setup/DatabaseFixer.java
@@ -48,7 +48,7 @@ public class DatabaseFixer {
// 最新升级过的
final int dbVer = RebuildConfiguration.getInt(ConfigurationItem.DBVer);
- if (dbVer == 41 && !BooleanUtils.toBoolean(KVStorage.getCustomValue(KEY_41))) {
+ if (dbVer <= 41 && !BooleanUtils.toBoolean(KVStorage.getCustomValue(KEY_41))) {
log.info("Database fixing `#41` ...");
ThreadPool.exec(() -> {
try {
diff --git a/src/main/java/com/rebuild/core/support/setup/Installer.java b/src/main/java/com/rebuild/core/support/setup/Installer.java
index 6cc01d6ad..8a2a6e3b2 100644
--- a/src/main/java/com/rebuild/core/support/setup/Installer.java
+++ b/src/main/java/com/rebuild/core/support/setup/Installer.java
@@ -60,7 +60,9 @@ import java.util.Map;
import java.util.Properties;
import java.util.TimeZone;
-import static com.rebuild.core.support.ConfigurationItem.*;
+import static com.rebuild.core.support.ConfigurationItem.CacheHost;
+import static com.rebuild.core.support.ConfigurationItem.CachePassword;
+import static com.rebuild.core.support.ConfigurationItem.CachePort;
/**
* 系统安装
@@ -211,6 +213,7 @@ public class Installer implements InstallState {
License.siteApiNoCache("api/authority/query");
}
+ // 初始化
Application.init();
System.setProperty("SN", StringUtils.EMPTY);
diff --git a/src/main/java/com/rebuild/web/robot/trigger/TriggerAdminController.java b/src/main/java/com/rebuild/web/robot/trigger/TriggerAdminController.java
index a1e295ea5..c912bc916 100644
--- a/src/main/java/com/rebuild/web/robot/trigger/TriggerAdminController.java
+++ b/src/main/java/com/rebuild/web/robot/trigger/TriggerAdminController.java
@@ -67,7 +67,7 @@ public class TriggerAdminController extends BaseController {
Entity sourceEntity = MetadataHelper.getEntity((String) config[0]);
ActionType actionType = ActionType.valueOf((String) config[1]);
- if (!License.isCommercial() && actionType.getActionClass().contains(".rbv.")) {
+ if (!License.isRbvAttached() && actionType.getActionClass().contains(".rbv.")) {
response.sendError(404,
Language.L("免费版不支持此功能 [(查看详情)](https://getrebuild.com/docs/rbv-features)"));
return null;
diff --git a/src/main/java/com/rebuild/web/user/signup/LoginController.java b/src/main/java/com/rebuild/web/user/signup/LoginController.java
index 7d42b5033..2c7fe5c1c 100644
--- a/src/main/java/com/rebuild/web/user/signup/LoginController.java
+++ b/src/main/java/com/rebuild/web/user/signup/LoginController.java
@@ -123,7 +123,7 @@ public class LoginController extends LoginAction {
mv.getModel().put("mobileUrl", RebuildConfiguration.getHomeUrl("h5app-download"));
}
- if (License.isCommercial()) {
+ if (License.isRbvAttached()) {
// DingTalk
mv.getModel().put("ssoDingtalk", RebuildConfiguration.get(ConfigurationItem.DingtalkAppkey));
// WxWork