diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java index 898701a..4787110 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwConsts.java @@ -7,6 +7,8 @@ public interface SwConsts { class SysParam { //系统启动完成 public static boolean SYS_STARTED = false; + //运行的项目,多个用半角逗号分隔 + public static String RUN_PROJECTS = "bpm"; } //开发调试模式 boolean SYS_DEBUG = true; diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelDatabaseCache.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelDatabaseCache.java index 4029d60..8e5a382 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelDatabaseCache.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelDatabaseCache.java @@ -3,9 +3,13 @@ package cc.smtweb.framework.core.db.cache; import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwConsts; import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.EntityDao; import cc.smtweb.framework.core.db.vo.ModelDatabase; +import cc.smtweb.framework.core.db.vo.ModelProject; +import cc.smtweb.framework.core.util.CommUtil; +import org.apache.commons.lang3.StringUtils; import java.util.List; @@ -32,7 +36,9 @@ public class ModelDatabaseCache extends AbstractCache { @Override protected List loadAll() { EntityDao dao = DbEngine.getInstance().findDao(ModelDatabase.class); - return dao.query(); + if (StringUtils.isEmpty(SwConsts.SysParam.RUN_PROJECTS)) + return dao.query(); + return dao.queryEx(" inner join " + ModelProject.ENTITY_NAME + " on db_prj_id=prj_id where prj_module in (" + CommUtil.getSqlInStrs(SwConsts.SysParam.RUN_PROJECTS.split(",")) + ")"); } public final ModelDatabase getByName(String key) { @@ -41,6 +47,6 @@ public class ModelDatabaseCache extends AbstractCache { public final String getName(long id) { ModelDatabase db = get(id); - return db != null ? db.getName() : ""; + return db != null ? db.getName(): ""; } } diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelTableCache.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelTableCache.java index 703e606..5730790 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelTableCache.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/cache/ModelTableCache.java @@ -3,9 +3,13 @@ package cc.smtweb.framework.core.db.cache; import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.CacheManager; +import cc.smtweb.framework.core.common.SwConsts; import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.vo.ModelField; +import cc.smtweb.framework.core.db.vo.ModelProject; import cc.smtweb.framework.core.db.vo.ModelTable; +import cc.smtweb.framework.core.util.CommUtil; +import org.apache.commons.lang3.StringUtils; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.ResultSetExtractor; @@ -48,6 +52,10 @@ public class ModelTableCache extends AbstractCache { @Override protected List loadAll() { + String sql; + if (!StringUtils.isEmpty(SwConsts.SysParam.RUN_PROJECTS)) { + sql = " inner join " + ModelProject.ENTITY_NAME + " on tb_prj_id=prj_id where prj_module in (" + CommUtil.getSqlInStrs(SwConsts.SysParam.RUN_PROJECTS.split(",")) + ")"; + } else sql = ""; return DbEngine.getInstance().query("SELECT\n" + "t.tb_id,\n" + "t.tb_prj_id,\n" + @@ -64,7 +72,7 @@ public class ModelTableCache extends AbstractCache { "t.tb_update_uid,\n" + "t.tb_create_at,\n" + "t.tb_update_at\n" + - "from asp_model_table t\n", new ResultSetExtractor>() { + "from asp_model_table t\n" + sql, new ResultSetExtractor>() { @Override public List extractData(ResultSet rs) throws SQLException, DataAccessException { List list = new ArrayList<>(); diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DatabaseUtil.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DatabaseUtil.java index 3ca277f..7169f29 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DatabaseUtil.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DatabaseUtil.java @@ -2,6 +2,7 @@ package cc.smtweb.framework.core.db.impl; import cc.smtweb.framework.core.common.SwEnum; import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.db.EntityHelper; import cc.smtweb.framework.core.db.cache.ModelTableCache; import cc.smtweb.framework.core.db.vo.ModelField; import cc.smtweb.framework.core.db.vo.ModelIndex; @@ -76,7 +77,7 @@ public class DatabaseUtil { ModelTable entity = ModelTableIter.next(); String entMessage = "(" + timer.timeSinceLast() + "ms) Checking #" + curEnt + "/" + totalEnt + " Entity " + entity.getName(); log.info(entMessage, MODULE); - String k = entity.getName(); //表名 + String k = entity.getSchemaTableName().toUpperCase(); //表名 // -make sure all entities have a corresponding table if (tableNames.containsKey(k)) { IDatabaseInfo.TableCheckInfo table = tableNames.remove(k); @@ -88,7 +89,7 @@ public class DatabaseUtil { ModelField field = entity.getFields().get(fnum); fieldColNames.put(field.getName().toUpperCase(), field); // XML读出来是小写,数据库读取来是大写. } - List colList = colInfo.get(entity.getName()); + List colList = colInfo.get(k); int numCols = 0; if (colList != null) { for (; numCols < colList.size(); numCols++) { @@ -227,7 +228,8 @@ public class DatabaseUtil { if (entity.getIndexes().isEmpty()) continue; // get existing index map for this table - Map> exists_indexes = tableIndexListMap.get(entity.getName()); + String k = entity.getSchemaTableName().toUpperCase(); //表名 + Map> exists_indexes = tableIndexListMap.get(k); Set setEnabled = new HashSet<>();//有效的索引 for (ModelIndex mi: entity.getIndexes()) { if (SwEnum.IndexType.PK.value.equalsIgnoreCase(mi.getType())) continue; diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DefaultDatabaseInfoImpl.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DefaultDatabaseInfoImpl.java index d4b35e7..29332a4 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DefaultDatabaseInfoImpl.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/impl/DefaultDatabaseInfoImpl.java @@ -170,7 +170,7 @@ public class DefaultDatabaseInfoImpl implements IDatabaseInfo { if (StringUtils.isNotEmpty(s)) { table.pk = s.substring(1); } - tables.put(tableName, table); + tables.put(catalog.toUpperCase() + "." + tableName, table); } } } catch (SQLException sqle) { @@ -249,7 +249,8 @@ public class DefaultDatabaseInfoImpl implements IDatabaseInfo { // ccInfo.tableName = lookupSchemaName + "." + ccInfo.tableName; //} // ignore the column info if the table name is not in the list we are concerned with - if (!dbTables.containsKey(ccInfo.tableName)) { + String k = catalog.toUpperCase() + "." + ccInfo.tableName; + if (!dbTables.containsKey(k)) { continue; } ccInfo.columnName = rsCols.getString("COLUMN_NAME"); @@ -262,11 +263,8 @@ public class DefaultDatabaseInfoImpl implements IDatabaseInfo { ccInfo.decimalDigits = rsCols.getInt("DECIMAL_DIGITS"); // NOTE: this may need a toUpperCase in some cases, keep an eye on it ccInfo.isNullable = rsCols.getString("IS_NULLABLE"); - List tableColInfo = colInfo.get(ccInfo.tableName); - if (tableColInfo == null) { - tableColInfo = new ArrayList<>(); - colInfo.put(ccInfo.tableName, tableColInfo); - } + List tableColInfo = colInfo.computeIfAbsent(k, k1->new ArrayList<>()); + tableColInfo.add(ccInfo); } } catch (SQLException sqle) { @@ -286,7 +284,8 @@ public class DefaultDatabaseInfoImpl implements IDatabaseInfo { final Map>> indexInfo = new HashMap<>(); if (!tableNames.isEmpty()) { for (TableCheckInfo c : tableNames) { - indexInfo.put(c.tableName, new HashMap<>()); + String k = c.catalog.toUpperCase() + "." + c.tableName; + indexInfo.put(k, new HashMap<>()); } dbEngine.doConn(connection -> { try { @@ -333,17 +332,14 @@ public class DefaultDatabaseInfoImpl implements IDatabaseInfo { // 不取nouniqune的, if (!unique) continue; } - String tableName = rsCols.getString("TABLE_NAME"); - if (needsUpperCase && tableName != null) { - tableName = tableName.toUpperCase(); - } + String k = curTableName.catalog.toUpperCase() + "." + curTableName.tableName; String indexName = rsCols.getString("INDEX_NAME"); if (needsUpperCase && indexName != null) { indexName = indexName.toUpperCase(); } - Map> tableIndexList = indexInfo.computeIfAbsent(tableName, k -> new HashMap<>()); - Set set = tableIndexList.computeIfAbsent(indexName, k -> new LinkedHashSet<>()); + Map> tableIndexList = indexInfo.computeIfAbsent(k, k1 -> new HashMap<>()); + Set set = tableIndexList.computeIfAbsent(indexName, k1 -> new LinkedHashSet<>()); // totalIndices++; set.add(rsCols.getString("COLUMN_NAME")); } diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/vo/ModelTable.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/vo/ModelTable.java index 0300314..d37c5f8 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/vo/ModelTable.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/db/vo/ModelTable.java @@ -286,7 +286,7 @@ public class ModelTable extends DefaultEntity { public String getSchemaTableName() { String dbName = getDbName(); - if (StringUtils.isEmpty(dbName) || dbName.equals(SwConsts.DEF_DB_NAME)) return getName(); + if (StringUtils.isEmpty(dbName) || dbName.equals(SwConsts.DEF_DB_NAME)) return DbEngine.getInstance().getDbSchema() + "." + getName(); return DbEngine.getInstance().getDbSchema() + "_" + dbName + "." + getName(); } } diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/CommUtil.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/CommUtil.java index fce20cc..2803d0d 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/CommUtil.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/CommUtil.java @@ -4,6 +4,7 @@ import cc.smtweb.framework.core.db.impl.BaseBean; import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.util.kryo.KryoTool; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import java.io.Serializable; import java.lang.reflect.ParameterizedType; @@ -104,12 +105,40 @@ public class CommUtil { StringBuilder s = new StringBuilder(128); Set set = new HashSet<>(); for (Long id : ids) { + if (id <= 0L) continue; if (set.contains(id)) continue; set.add(id); - if (id <= 0) continue; s.append(id).append(","); } if (s.length() == 0) return ""; return s.substring(0, s.length() - 1); } + + public static String getSqlInStrs(Collection ids) { + if (null == ids || ids.isEmpty()) return ""; + StringBuilder s = new StringBuilder(128); + Set set = new HashSet<>(); + for (String id : ids) { + if (StringUtils.isEmpty(id)) continue; + if (set.contains(id)) continue; + set.add(id); + s.append("'").append(id).append("',"); + } + if (s.length() == 0) return ""; + return s.substring(0, s.length() - 1); + } + + public static String getSqlInStrs(String[] ids) { + if (null == ids || ids.length == 0) return ""; + StringBuilder s = new StringBuilder(128); + Set set = new HashSet<>(); + for (String id : ids) { + if (StringUtils.isEmpty(id)) continue; + if (set.contains(id)) continue; + set.add(id); + s.append("'").append(id).append("',"); + } + if (s.length() == 0) return ""; + return s.substring(0, s.length() - 1); + } }