From ac070bd08ba4cb6c1e3bf670db75b6a8e801b84b Mon Sep 17 00:00:00 2001
From: 杜洪波 <1074825718@qq.com>
Date: 星期一, 17 十一月 2025 18:00:30 +0800
Subject: [PATCH] 表单建模树优化
---
src/main/java/com/product/face/entity/FaceListEntity.java | 132 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 131 insertions(+), 1 deletions(-)
diff --git a/src/main/java/com/product/face/entity/FaceListEntity.java b/src/main/java/com/product/face/entity/FaceListEntity.java
index 4040366..a885cac 100644
--- a/src/main/java/com/product/face/entity/FaceListEntity.java
+++ b/src/main/java/com/product/face/entity/FaceListEntity.java
@@ -253,7 +253,6 @@
}
return filter.toString();
}
-
/**
* 鑾峰彇鏉′欢
*
@@ -339,6 +338,93 @@
RedisUtil.set(faceListKey + getUuid(), JSON.parseObject(JSON.toJSONString(this), com.product.admin.entity.FaceListEntity.class));
return maps;
}
+ /**
+ * 鏂扮殑鏂规硶锛屾牴鎹煡璇㈣鍙ョ殑涓殑琛ㄥ埆鍚嶏紝鐢熸垚鏌ヨ鏉′欢
+ *
+ * @param tableAlias 琛ㄥ埆鍚�
+ * @param aliasField 瀛楁鍒悕
+ * @param tableAndField 琛ㄤ腑瀛楁
+ * @return
+ */
+ public Map<String, List<String>> getFilters(Map<String, List<String>> tableAlias, Map<String, List<String>> aliasField,Map<String, List<String>> tableAndField) {
+ DataPoolCacheImpl poolCache = null;
+ //鎵�鏈夊瓧娈甸泦鍚�
+ List<FaceField> faceFields = this.getFaceFields();
+ //鏅�氭ā绯婃煡璇㈠瓧娈甸泦鍚�
+ List<String> fieldNames = Lists.newArrayList();
+ //鍙傜収妯$硦鏌ヨ鏉′欢闆嗗悎
+ List<String> filters = Lists.newArrayList();
+ //杩斿洖鐨勭粨鏋滈泦
+ Map<String, List<String>> maps = Maps.newHashMap();
+ maps.put("fields", fieldNames);
+ maps.put("filter", filters);
+ for (int i = 0; i < faceFields.size(); i++) {
+ FaceField faceField = faceFields.get(i);
+
+ if (!faceField.isSearch()) {
+ continue;
+ }
+ if (StringUtils.isEmpty(faceField.getFieldName()) || StringUtils.isEmpty(faceField.getFieldReference())) {
+ if (poolCache == null) {
+ poolCache = DataPoolCacheImpl.getInstance();
+ }
+ DataTableEntity dt = poolCache.getCacheData("琛ㄥ瓧娈典俊鎭�", new String[]{getTableUuid(), faceField.getFieldName()});
+ if (BaseUtil.dataTableIsEmpty(dt)) {
+ } else {
+ FieldSetEntity f = dt.getFieldSetEntity(0);
+ faceField.setFieldName(f.getString(CmnConst.FIELD_NAME));
+ faceField.setFieldReference(f.getString("field_reference"));
+ }
+ }
+ //瀛楁鍚嶇О
+ String fieldName = faceField.getFieldName();
+ if (!StringUtils.isEmpty(fieldName)) {
+ fieldName.trim();
+ }
+ if (aliasField != null && !StringUtils.isEmpty(fieldName)) {
+ List<String> fieldAlias = aliasField.get(getTableName() + "." + fieldName);
+ if (fieldAlias != null && fieldAlias.size() > 0) {
+ String alias = fieldAlias.get(0);
+ if (!StringUtils.isEmpty(alias)) {
+ fieldName = alias.trim();
+ }
+ }
+ }
+ //鍙傜収澶勭悊
+ String field_reference = faceField.getFieldReference();
+ if (!StringUtils.isEmpty(field_reference)) {
+ if (field_reference.indexOf("銆�") == 0 && field_reference.indexOf("銆�") > 0) {
+ //鏅�氬弬鐓�
+ filters.add(getDictFilter(getFieldName(tableAlias,aliasField, tableAndField, fieldName), field_reference.replace("銆�", "").replace("銆�", "")));
+ continue;
+ } else {
+ if (poolCache == null) {
+ poolCache = DataPoolCacheImpl.getInstance();
+ }
+ //楂樼骇鍙傜収
+ DataTableEntity prompt = poolCache.getCacheData("楂樼骇鍙傜収閰嶇疆淇℃伅", new String[]{field_reference});
+ if (BaseUtil.dataTableIsEmpty(prompt)) {
+ continue;
+ }
+ FieldSetEntity ff = prompt.getFieldSetEntity(0);
+ StringBuilder p = new StringBuilder();
+ p.append(getFieldName(tableAlias,aliasField, tableAndField, fieldName)).append(" in ").append(" ( SELECT ").append(ff.getString("value_field")).append(" FROM ").append(ff.getString("source_table"));
+ p.append(" WHERE ").append(ff.getString("view_fields")).append(" like concat('%','~val~','%') )");
+ filters.add(p.toString());
+ continue;
+ }
+ }
+
+ if (!StringUtils.isEmpty(faceField.getFieldName())) {
+ fieldNames.add(getFieldName(tableAlias,aliasField, tableAndField, fieldName));
+ }
+ }
+ //鑾峰彇redis 璧峰key
+ String faceListKey = SystemFaceService.FACE_LIST_KEY;
+ //閲嶆柊鏀惧叆redis
+ RedisUtil.set(faceListKey + getUuid(), JSON.parseObject(JSON.toJSONString(this), com.product.admin.entity.FaceListEntity.class));
+ return maps;
+ }
private String getFieldName(String tableAlias, String fieldName) {
fieldName = "`" + fieldName + "`";
@@ -347,6 +433,50 @@
}
return fieldName;
}
+ //鏂版柟娉�
+ private String getFieldName(Map<String, List<String>> tableAlias,Map<String, List<String>> aliasField, Map<String, List<String>> tableAndField, String fieldName) {
+ String table=null;
+ boolean b=false;
+ if(tableAndField!=null && !tableAndField.isEmpty()) {
+ for(String key:tableAndField.keySet()) {
+ for(String field:tableAndField.get(key)) {
+ if(fieldName.equals(field)) {
+
+ List<String>alias=tableAlias.get(key);
+ if(alias!=null && !alias.isEmpty()) {
+ table=alias.get(0);//鍙栫涓�涓埆鍚�
+ }
+ b=true;
+ break;
+ }
+ }
+ if(b)break;
+ }
+ }
+ b=false;
+ //鎵惧埌瀛楁鐨勭湡瀹炲悕瀛�
+ for(String f:aliasField.keySet()) {
+ List<String> fs=aliasField.get(f);
+ if(!fs.isEmpty()) {
+ for(String af:fs) {
+ //瀛楁鍒悕鏈夊彲鑳芥槸甯� 琛ㄥ埆鍚�
+ int c=af.indexOf('.');
+ if(c>0)af=af.substring(c+1);
+ if(fieldName.equals(af)) {
+ fieldName=f;
+ b=true;
+ break;
+ }
+ }
+ }
+ if(b)break;
+ }
+
+ if (fieldName.indexOf('.')<0 && !StringUtils.isEmpty(table)) {
+ return "`" + table + "`." + fieldName;
+ }
+ return fieldName;
+ }
/**
* 瀛楁瀹炰綋绫�
--
Gitblit v1.9.2