|
@@ -20,6 +20,7 @@ import cn.cslg.pas.factorys.getSqlFactorys.GetSqlObject;
|
|
import cn.cslg.pas.service.business.CommonService;
|
|
import cn.cslg.pas.service.business.CommonService;
|
|
import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
|
|
import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
+import com.fasterxml.jackson.databind.node.ValueNode;
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.Gson;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -178,7 +179,7 @@ public class FormatQueryService {
|
|
//判断 参数类型
|
|
//判断 参数类型
|
|
String json = CommonService.readJsonFile(tableName + ".json");
|
|
String json = CommonService.readJsonFile(tableName + ".json");
|
|
List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
|
|
List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
|
|
- SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) &&item.getIfAsCondition()!=null&& item.getIfAsCondition().equals(true)).findFirst().orElse(null);
|
|
|
|
|
|
+ SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) && item.getIfAsCondition() != null && item.getIfAsCondition().equals(true)).findFirst().orElse(null);
|
|
if (sqlObject != null) {
|
|
if (sqlObject != null) {
|
|
getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
|
|
getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
|
|
sqlObject.setOption(optionName);
|
|
sqlObject.setOption(optionName);
|
|
@@ -279,6 +280,7 @@ public class FormatQueryService {
|
|
|
|
|
|
/**
|
|
/**
|
|
* 网站检索式格式化
|
|
* 网站检索式格式化
|
|
|
|
+ *
|
|
* @param node
|
|
* @param node
|
|
* @param getSqlObject
|
|
* @param getSqlObject
|
|
* @param tableName
|
|
* @param tableName
|
|
@@ -377,58 +379,99 @@ public class FormatQueryService {
|
|
}
|
|
}
|
|
//格式化检索式
|
|
//格式化检索式
|
|
String reQuery = this.webQueryToString((operateNode) tree, null, configName);
|
|
String reQuery = this.webQueryToString((operateNode) tree, null, configName);
|
|
- reQuery="F XX ("+reQuery+")";
|
|
|
|
|
|
+ reQuery = "F XX (" + reQuery + ")";
|
|
return reQuery;
|
|
return reQuery;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
* Es检索
|
|
* Es检索
|
|
|
|
+ *
|
|
* @param node
|
|
* @param node
|
|
* @param configName
|
|
* @param configName
|
|
* @return
|
|
* @return
|
|
* @throws ParseException
|
|
* @throws ParseException
|
|
*/
|
|
*/
|
|
- public Query EsQueryToQuery(operateNode node, String configName) throws ParseException {
|
|
|
|
- Query query = null;
|
|
|
|
- operate operate1 = node.getoperate();
|
|
|
|
- treeNode Left = node.getLeft();
|
|
|
|
- treeNode Right = node.getRight();
|
|
|
|
- //如果and or 则递归本身
|
|
|
|
- if (operate1.gettype().equals(enuType.Logic)) {
|
|
|
|
- Query q1 = this.EsQueryToQuery((operateNode) Left, configName);
|
|
|
|
- Query q2 = this.EsQueryToQuery((operateNode) Right, configName);
|
|
|
|
- switch (operate1.getShowName()) {
|
|
|
|
- case "AND":
|
|
|
|
- query = QueryBuilders.bool(i -> i.must(q1, q2));
|
|
|
|
- break;
|
|
|
|
- case "OR":
|
|
|
|
- query = QueryBuilders.bool(i -> i.should(q1, q2));
|
|
|
|
- break;
|
|
|
|
- case "NOT":
|
|
|
|
- query = QueryBuilders.bool(i -> i.must(q1).mustNot(q2));
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- } else if (operate1.gettype().equals(enuType.Assignment)) {
|
|
|
|
- //比较运算符
|
|
|
|
- IQueryBuilder iQueryBuilder = null;
|
|
|
|
- String field = Left.ToString();
|
|
|
|
- String value = Right.ToString();
|
|
|
|
- String json = CommonService.readJsonFile(configName + ".json");
|
|
|
|
- List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
|
|
|
|
- EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getValue().equals(field)).findFirst().orElse(null);
|
|
|
|
- if (esConfigVO != null) {
|
|
|
|
- iQueryBuilder = esBuilderFactory.getClass(esConfigVO.getEsClass());
|
|
|
|
- iQueryBuilder.setField(esConfigVO.getEsField());
|
|
|
|
- if (iQueryBuilder.getField().contains(".")) {
|
|
|
|
- String path = iQueryBuilder.getField().substring(0, iQueryBuilder.getField().indexOf("."));
|
|
|
|
- iQueryBuilder.setPath(path);
|
|
|
|
|
|
+ public Query EsQueryToQuery(treeNode node, String configName) throws ParseException {
|
|
|
|
+ if (node == null) {
|
|
|
|
+ return null;
|
|
|
|
+ } else {
|
|
|
|
+ if (node instanceof operateNode) {
|
|
|
|
+ operate operate1 = ((operateNode) node).getoperate();
|
|
|
|
+ treeNode Left = node.getLeft();
|
|
|
|
+ treeNode Right = node.getRight();
|
|
|
|
+ //如果and or 则递归本身
|
|
|
|
+ if (operate1.gettype().equals(enuType.Logic)) {
|
|
|
|
+ Query q1 = this.EsQueryToQuery((operateNode) Left, configName);
|
|
|
|
+ Query q2 = this.EsQueryToQuery((operateNode) Right, configName);
|
|
|
|
+ switch (operate1.getShowName()) {
|
|
|
|
+ case "AND":
|
|
|
|
+ return QueryBuilders.bool(i -> i.must(q1, q2));
|
|
|
|
+ case "OR":
|
|
|
|
+ return QueryBuilders.bool(i -> i.should(q1, q2));
|
|
|
|
+ case "NOT":
|
|
|
|
+ Query temQ = (q1 == null) ? q2 : q1;
|
|
|
|
+ return QueryBuilders.bool(i -> i.mustNot(temQ));
|
|
|
|
+ default:
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else {
|
|
|
|
+ if (operate1.gettype().equals(enuType.Assignment)) {
|
|
|
|
+ return HandleValueNode(((valueNode) Left).getvalue(), operate1.getCode(), Right, configName);
|
|
|
|
+ } else {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- iQueryBuilder.setOperator(operate1.getShowName());
|
|
|
|
- iQueryBuilder.setValue(value);
|
|
|
|
- query = iQueryBuilder.creteQuery();
|
|
|
|
|
|
+ } else {
|
|
|
|
+ return null;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public Query HandleValueNode(String field, String operate, treeNode valeNode, String configName) throws ParseException {
|
|
|
|
+ if (valeNode == null) {
|
|
|
|
+ return null;
|
|
|
|
+ } else {
|
|
|
|
+ if (valeNode instanceof operateNode) {
|
|
|
|
+ operate operate1 = ((operateNode) valeNode).getoperate();
|
|
|
|
+ if (operate1.gettype().equals(enuType.Logic)) {
|
|
|
|
+ Query q1 = this.HandleValueNode(field, operate, ((treeNode) valeNode).getLeft(), configName);
|
|
|
|
+ Query q2 = this.HandleValueNode(field, operate, (treeNode) valeNode.getRight(), configName);
|
|
|
|
+ switch (operate1.getShowName()) {
|
|
|
|
+ case "AND":
|
|
|
|
+ return QueryBuilders.bool(i -> i.must(q1, q2));
|
|
|
|
+ case "OR":
|
|
|
|
+ return QueryBuilders.bool(i -> i.should(q1, q2));
|
|
|
|
+ case "NOT":
|
|
|
|
+ Query temQ = (q1 == null) ? q2 : q1;
|
|
|
|
+ return QueryBuilders.bool(i -> i.mustNot(temQ));
|
|
|
|
+ default:
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //比较运算符
|
|
|
|
+ IQueryBuilder iQueryBuilder = null;
|
|
|
|
+ String json = CommonService.readJsonFile(configName + ".json");
|
|
|
|
+ List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
|
|
|
|
+ EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getValue().equals(field)).findFirst().orElse(null);
|
|
|
|
+ if (esConfigVO != null) {
|
|
|
|
+ iQueryBuilder = esBuilderFactory.getClass(esConfigVO.getEsClass());
|
|
|
|
+ iQueryBuilder.setField(esConfigVO.getEsField());
|
|
|
|
+ if (iQueryBuilder.getField().contains(".")) {
|
|
|
|
+ String path = iQueryBuilder.getField().substring(0, iQueryBuilder.getField().indexOf("."));
|
|
|
|
+ iQueryBuilder.setPath(path);
|
|
|
|
+ }
|
|
|
|
+ iQueryBuilder.setOperator(operate);
|
|
|
|
+ iQueryBuilder.setValue(((valueNode) valeNode).getvalue());
|
|
|
|
+ return iQueryBuilder.creteQuery();
|
|
|
|
+ } else {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- return query;
|
|
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|