FormatQueryService.java 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698
  1. package cn.cslg.pas.service.query;
  2. import cn.cslg.pas.common.model.cronModel.GroupConfig;
  3. import cn.cslg.pas.common.model.cronModel.OrderConfig;
  4. import cn.cslg.pas.common.model.cronModel.SqlObject;
  5. import cn.cslg.pas.common.model.request.MapRequest;
  6. import cn.cslg.pas.common.model.request.OrderDTO;
  7. import cn.cslg.pas.common.model.request.QueryRequest;
  8. import cn.cslg.pas.common.model.request.StringRequest;
  9. import cn.cslg.pas.common.utils.StringUtils;
  10. import cn.cslg.pas.common.utils.parseQueryToTree.*;
  11. import cn.cslg.pas.common.vo.EsConfigVO;
  12. import cn.cslg.pas.exception.ConditionException;
  13. import cn.cslg.pas.exception.ExceptionEnum;
  14. import cn.cslg.pas.exception.XiaoShiException;
  15. import cn.cslg.pas.factorys.EsBuilderFactory.EsBuilderFactory;
  16. import cn.cslg.pas.factorys.EsBuilderFactory.IQueryBuilder;
  17. import cn.cslg.pas.factorys.WebQueryFactory.FormWebQueryFieldImp;
  18. import cn.cslg.pas.factorys.WebQueryFactory.GetWebQueryFactory;
  19. import cn.cslg.pas.factorys.WebQueryFactory.WebQueryConfigVO;
  20. import cn.cslg.pas.factorys.getOrderFactory.GetOrderFactory;
  21. import cn.cslg.pas.factorys.getOrderFactory.GetOrderObject;
  22. import cn.cslg.pas.factorys.getSqlFactorys.GetSqlFactory;
  23. import cn.cslg.pas.factorys.getSqlFactorys.GetSqlObject;
  24. import cn.cslg.pas.factorys.getSqlFactorys.GetWebQuerySql;
  25. import cn.cslg.pas.service.business.CommonService;
  26. import co.elastic.clients.elasticsearch._types.query_dsl.QueryBuilders;
  27. import com.alibaba.fastjson.JSON;
  28. import com.fasterxml.jackson.databind.node.ValueNode;
  29. import com.google.gson.Gson;
  30. import lombok.RequiredArgsConstructor;
  31. import lombok.extern.slf4j.Slf4j;
  32. import org.springframework.beans.BeanUtils;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.context.annotation.Lazy;
  35. import org.springframework.stereotype.Service;
  36. import co.elastic.clients.elasticsearch._types.query_dsl.Query;
  37. import org.springframework.util.CollectionUtils;
  38. import java.io.*;
  39. import java.text.ParseException;
  40. import java.util.*;
  41. /**
  42. * 格式化检索式类
  43. */
  44. @Service
  45. @Slf4j
  46. public class FormatQueryService {
  47. @Autowired
  48. private GetSqlFactory getSqlFactory;
  49. @Autowired
  50. private GetOrderFactory getOrderFactory;
  51. @Autowired
  52. private EsBuilderFactory esBuilderFactory;
  53. @Autowired
  54. private GetWebQueryFactory getWebQueryFactory;
  55. public String getText(String text) throws Exception {
  56. treeNode tree = expressManager.getInstance().Parse(text, false);
  57. System.out.print(this.ToString((operateNode) tree));
  58. return "";
  59. }
  60. /**
  61. * 二叉树转检索式
  62. *
  63. * @param node
  64. * @return
  65. */
  66. public String ToString(operateNode node) {
  67. operate operate1 = node.getoperate();
  68. treeNode Left = node.getLeft();
  69. treeNode Right = node.getRight();
  70. String strCode = "";
  71. String optionName = "";
  72. if ((operate1.getShowName() != null)) {
  73. strCode = operate1.getShowName();
  74. optionName = operate1.getShowName();
  75. } else {
  76. strCode = operate1.getCode();
  77. optionName = operate1.getCode();
  78. }
  79. GetSqlObject getSqlObject = null;
  80. if (Left != null) {
  81. if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
  82. strCode = "(" + this.ToString((operateNode) Left) + ") " + strCode;
  83. } else { //获得栏位名称
  84. String field = Left.ToString();
  85. strCode = Left.ToString() + " " + strCode;
  86. //判断 参数类型
  87. String json = CommonService.readJsonFile("event.json");
  88. List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
  89. SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field)).findFirst().orElse(null);
  90. if (sqlObject != null) {
  91. getSqlObject = getSqlFactory.getClass(sqlObject.getSqlClass());
  92. sqlObject.setOption(optionName);
  93. getSqlObject.setSqlObject(sqlObject);
  94. }
  95. }
  96. }
  97. if (Right != null) {
  98. String rightValue = "";
  99. if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
  100. rightValue = this.ToString((operateNode) Right);
  101. strCode = strCode + " (" + rightValue + ") ";
  102. } else {
  103. rightValue = Right.ToString();
  104. strCode = strCode + " " + Right.ToString();
  105. }
  106. if (getSqlObject != null) {
  107. if (optionName.equals(" LIKE ")) {
  108. rightValue = "'%" + rightValue + "%'";
  109. }
  110. strCode = getSqlObject.getSql(rightValue);
  111. }
  112. }
  113. return strCode;
  114. }
  115. /**
  116. * 排序转sql排序语句
  117. *
  118. * @param dtos
  119. * @return
  120. */
  121. public String orderToString(List<OrderDTO> dtos, String tableName) {
  122. //读取排序配置类
  123. String json = CommonService.readJsonFile(tableName + ".json");
  124. List<OrderConfig> configs = JSON.parseArray(json, OrderConfig.class);
  125. String re = "order by ";
  126. List<String> orders = new ArrayList<>();
  127. dtos.forEach(item -> {
  128. OrderConfig orderConfig = configs.stream().filter(tem -> tem.getField().equals(item.getOrderBy())).findFirst().orElse(null);
  129. GetOrderObject getOrderObject = getOrderFactory.getClass(orderConfig.getOrderClass());
  130. String order = getOrderObject.getOrderString(orderConfig.getSqlField(), item.getOrderType());
  131. if (order != "") {
  132. orders.add(order);
  133. }
  134. });
  135. if (orders.size() == 0) {
  136. return "";
  137. }
  138. String orderStr = StringUtils.join(orders, ",");
  139. re += orderStr;
  140. return re;
  141. }
  142. /**
  143. * 二叉树转检索式
  144. *
  145. * @param node
  146. * @return
  147. */
  148. public String ToString2(operateNode node, GetSqlObject getSqlObject, String tableName) {
  149. operate operate1 = node.getoperate();
  150. treeNode Left = node.getLeft();
  151. treeNode Right = node.getRight();
  152. String strCode = "";
  153. String optionName = "";
  154. if ((operate1.getShowName() != null)) {
  155. strCode = operate1.getShowName();
  156. optionName = operate1.getShowName();
  157. } else {
  158. strCode = operate1.getCode();
  159. optionName = operate1.getCode();
  160. }
  161. GetSqlObject getSqlObjectLocal = null;
  162. if (Left != null) {
  163. if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
  164. strCode = "(" + this.ToString2((operateNode) Left, getSqlObject, tableName) + ") " + strCode + " ";
  165. } else { //获得栏位名称
  166. String field = Left.ToString();
  167. if (getSqlObject != null) {
  168. strCode = getSqlObject.getSql(field) + strCode + " ";
  169. } else {
  170. strCode = Left.ToString() + " " + strCode;
  171. //判断 参数类型
  172. String json = CommonService.readJsonFile(tableName + ".json");
  173. List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
  174. SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field) && item.getIfAsCondition() != null && item.getIfAsCondition().equals(true)).findFirst().orElse(null);
  175. if (sqlObject != null) {
  176. getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
  177. sqlObject.setOption(optionName);
  178. getSqlObjectLocal.setSqlObject(sqlObject);
  179. getSqlObject = getSqlObjectLocal;
  180. }
  181. }
  182. }
  183. }
  184. if (Right != null) {
  185. String rightValue = "";
  186. if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
  187. rightValue = this.ToString2((operateNode) Right, getSqlObject, tableName);
  188. if (getSqlObject != null) {
  189. return rightValue;
  190. }
  191. strCode = strCode + " (" + rightValue + ") ";
  192. } else {
  193. if (getSqlObjectLocal != null) {
  194. rightValue = Right.ToString();
  195. strCode = getSqlObject.getSql(rightValue);
  196. } else if (getSqlObject != null) {
  197. rightValue = Right.ToString();
  198. strCode = strCode + getSqlObject.getSql(rightValue);
  199. }
  200. }
  201. }
  202. return strCode;
  203. }
  204. /**
  205. * 返回sql列表
  206. *
  207. * @param queryRequest
  208. * @return
  209. */
  210. public List<String> reSqls(QueryRequest queryRequest, String tableName) {
  211. List<String> sqls = new ArrayList<>();
  212. String sql1 = "";
  213. String sql2 = "";
  214. String sql3 = "";
  215. //合成检索式
  216. StringRequest stringRequest = null;
  217. if (queryRequest instanceof MapRequest) {
  218. } else {
  219. stringRequest = (StringRequest) queryRequest;
  220. }
  221. String condition = stringRequest.getSearchQuery();
  222. if (queryRequest.getGroupField() != null) {
  223. String value ="";
  224. if(queryRequest.getGroupFieldValue()==null||queryRequest.getGroupFieldValue().equals("未知")){
  225. value = queryRequest.getGroupField() + "=" +"null";
  226. }
  227. else {
  228. value =queryRequest.getGroupField() + "=" + queryRequest.getGroupFieldValue();
  229. }
  230. if (condition != null && condition != "") {
  231. condition += " AND " + value;
  232. } else {
  233. condition = value;
  234. }
  235. }
  236. if (queryRequest.getProjectId() != null) {
  237. if (condition != null && condition != "") {
  238. condition += " AND " + "project_id" + "=" + queryRequest.getProjectId();
  239. } else {
  240. condition = "project_id" + "=" + queryRequest.getProjectId();
  241. }
  242. }
  243. //检索式格式化
  244. if (condition != null && condition != "") {
  245. try {
  246. //将检索式转换为二叉树
  247. treeNode tree = expressManager.getInstance().Parse(condition, false);
  248. //格式化检索式
  249. sql1 = this.ToString2((operateNode) tree, null, tableName);
  250. } catch (Exception e) {
  251. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "检索式错误");
  252. }
  253. }
  254. //格式化排序
  255. if (queryRequest.getOrderDTOList() != null && queryRequest.getOrderDTOList().size() != 0) {
  256. String orderSql = this.orderToString(queryRequest.getOrderDTOList(), tableName);
  257. sql2 = orderSql;
  258. }
  259. //格式化 分页信息
  260. if (queryRequest.getSize() != null && queryRequest.getCurrent() != null) {
  261. Long size = queryRequest.getSize();
  262. Long current = queryRequest.getCurrent();
  263. String page = " limit " + ((current - 1) * size) + "," + size;
  264. sql3 = page;
  265. }
  266. //格式化分组信息
  267. sqls.add(sql1);
  268. sqls.add(sql2);
  269. sqls.add(sql3);
  270. return sqls;
  271. }
  272. /**
  273. * 返回查新报告sql列表
  274. *
  275. * @param queryRequest
  276. * @return
  277. */
  278. public List<String> formatSqls(QueryRequest queryRequest, String tableName) {
  279. List<String> sqls = new ArrayList<>();
  280. String sql1 = "";
  281. String sql2 = "";
  282. String sql3 = "";
  283. //合成检索式
  284. StringRequest stringRequest = null;
  285. if (queryRequest instanceof MapRequest) {
  286. } else {
  287. stringRequest = (StringRequest) queryRequest;
  288. }
  289. String condition = stringRequest.getSearchQuery();
  290. if (queryRequest.getGroupField() != null) {
  291. String value ="";
  292. if(queryRequest.getGroupFieldValue()==null||queryRequest.getGroupFieldValue().equals("未知")){
  293. value = queryRequest.getGroupField() + "=" +"null";
  294. }
  295. else {
  296. value =queryRequest.getGroupField() + "=" + queryRequest.getGroupFieldValue();
  297. }
  298. if (condition != null && condition != "") {
  299. condition += " AND " + value;
  300. } else {
  301. condition = value;
  302. }
  303. }
  304. if (queryRequest.getProjectId() != null) {
  305. if (condition != null && condition != "") {
  306. condition += " AND " + "projectId" + "=" + queryRequest.getProjectId();
  307. } else {
  308. condition = "projectId" + "=" + queryRequest.getProjectId();
  309. }
  310. }
  311. //检索式格式化
  312. if (StringUtils.isNotEmpty(condition)) {
  313. try {
  314. //将检索式转换为二叉树
  315. treeNode tree = expressManager.getInstance().Parse(condition, false);
  316. //格式化检索式
  317. sql1 = this.ToString2((operateNode) tree, null, tableName);
  318. } catch (Exception e) {
  319. throw new ConditionException("检索式错误");
  320. }
  321. }
  322. //格式化排序
  323. if (!CollectionUtils.isEmpty(queryRequest.getOrderDTOList())) {
  324. String orderSql = this.orderToString(queryRequest.getOrderDTOList(), tableName);
  325. sql2 = orderSql;
  326. } else {
  327. sql2 = "order by p.create_time desc";
  328. }
  329. //格式化 分页信息
  330. if (queryRequest.getSize() != null && queryRequest.getCurrent() != null) {
  331. Long size = queryRequest.getSize();
  332. Long current = queryRequest.getCurrent();
  333. String page = " limit " + ((current - 1) * size) + "," + size;
  334. sql3 = page;
  335. }
  336. //格式化分组信息
  337. sqls.add(sql1);
  338. sqls.add(sql2);
  339. sqls.add(sql3);
  340. return sqls;
  341. }
  342. /**
  343. * 网站检索式格式化
  344. *
  345. * @param node
  346. * @param getSqlObject
  347. * @param tableName
  348. * @return
  349. */
  350. public String webQueryToString(operateNode node, GetSqlObject getSqlObject, String tableName) {
  351. operate operate1 = node.getoperate();
  352. treeNode Left = node.getLeft();
  353. treeNode Right = node.getRight();
  354. String strCode = "";
  355. String optionName = "";
  356. if ((operate1.getShowName() != null)) {
  357. if (operate1.getShowName().equals("AND")) {
  358. strCode="*";
  359. optionName="*";
  360. } else if (operate1.getShowName().equals("OR")) {
  361. strCode="+";
  362. optionName="+";
  363. } else if (operate1.getShowName().equals("NOT")) {
  364. strCode="-";
  365. optionName="-";
  366. }
  367. else {
  368. strCode=operate1.getShowName();
  369. optionName=operate1.getShowName();
  370. }
  371. } else {
  372. if (operate1.getCode().equals("AND")) {
  373. strCode="*";
  374. optionName="*";
  375. } else if (operate1.getCode().equals("OR")) {
  376. strCode="+";
  377. optionName="+";
  378. } else if (operate1.getCode().equals("NOT")) {
  379. strCode="-";
  380. optionName="-";
  381. }
  382. else {
  383. strCode=operate1.getShowName();
  384. optionName=operate1.getShowName();
  385. }
  386. }
  387. GetSqlObject getSqlObjectLocal = null;
  388. if (Left != null) {
  389. if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
  390. strCode = "(" + this.webQueryToString((operateNode) Left, getSqlObject, tableName) + ")" + strCode;
  391. } else { //获得栏位名称
  392. String field = Left.ToString();
  393. if (getSqlObject != null) {
  394. strCode = getSqlObject.getSql(field) + strCode;
  395. } else {
  396. strCode = Left.ToString() + strCode;
  397. //判断 参数类型
  398. String json = CommonService.readJsonFile(tableName + ".json");
  399. List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
  400. SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getField().equals(field)).findFirst().orElse(null);
  401. if (sqlObject != null) {
  402. getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
  403. sqlObject.setOption(optionName);
  404. getSqlObjectLocal.setSqlObject(sqlObject);
  405. getSqlObject = getSqlObjectLocal;
  406. }
  407. }
  408. }
  409. }
  410. if (Right != null) {
  411. String rightValue = "";
  412. if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
  413. if (((operateNode) Right).getoperate().getCode().equals("~")) {
  414. rightValue = this.webQueryToString((operateNode) Right, null, tableName);
  415. strCode = getSqlObject.getSql(rightValue);
  416. } else {
  417. rightValue = this.webQueryToString((operateNode) Right, getSqlObject, tableName);
  418. if (getSqlObject != null) {
  419. return rightValue;
  420. }
  421. strCode = strCode + "(" + rightValue + ")";
  422. }
  423. } else {
  424. if (getSqlObjectLocal != null) {
  425. rightValue = Right.ToString();
  426. strCode = getSqlObject.getSql(rightValue);
  427. } else if (getSqlObject != null) {
  428. rightValue = Right.ToString();
  429. strCode = strCode + getSqlObject.getSql(rightValue);
  430. } else if (!(Left instanceof operateNode)) {
  431. rightValue = Right.ToString();
  432. strCode += rightValue;
  433. }
  434. }
  435. }
  436. return strCode;
  437. }
  438. public String reQuery(String query, String configName) {
  439. //将检索式转换为二叉树
  440. treeNode tree = null;
  441. try {
  442. tree = expressManager.getInstance().Parse(query, false);
  443. } catch (Exception e) {
  444. e.printStackTrace();
  445. }
  446. //格式化检索式
  447. String reQuery = this.webQueryToString2( tree, configName);
  448. reQuery = "F XX (" + reQuery + ")";
  449. return reQuery;
  450. }
  451. /**
  452. * Es检索
  453. *
  454. * @param node
  455. * @param configName
  456. * @return
  457. * @throws ParseException
  458. */
  459. public Query EsQueryToQuery(treeNode node, String configName, Integer projectId) throws ParseException {
  460. if (node == null) {
  461. return null;
  462. } else {
  463. if (node instanceof operateNode) {
  464. operate operate1 = ((operateNode) node).getoperate();
  465. treeNode Left = node.getLeft();
  466. treeNode Right = node.getRight();
  467. //如果and or 则递归本身
  468. if (operate1.gettype().equals(enuType.Logic)) {
  469. Query q1 = this.EsQueryToQuery((operateNode) Left, configName,projectId);
  470. Query q2 = this.EsQueryToQuery((operateNode) Right, configName,projectId);
  471. switch (operate1.getShowName()) {
  472. case "AND":
  473. return QueryBuilders.bool(i -> i.must(q1, q2));
  474. case "OR":
  475. return QueryBuilders.bool(i -> i.should(q1, q2));
  476. case "NOT":
  477. Query temQ = (q1 == null) ? q2 : q1;
  478. return QueryBuilders.bool(i -> i.mustNot(temQ));
  479. case "TO":
  480. return QueryBuilders.bool(i -> i.must(q1, q2));
  481. case "*":
  482. return QueryBuilders.bool(i -> i.must(q1, q2));
  483. default:
  484. return null;
  485. }
  486. } else {
  487. if (operate1.gettype().equals(enuType.Assignment)) {
  488. return HandleValueNode(((valueNode) Left).getvalue(), operate1.getCode(), Right, configName, "", "",projectId);
  489. } else {
  490. return null;
  491. }
  492. }
  493. } else {
  494. return null;
  495. }
  496. }
  497. }
  498. public Query HandleValueNode(String field, String operate, treeNode valeNode, String configName,String op,String dp,Integer projectId) throws ParseException {
  499. if (valeNode == null) {
  500. return null;
  501. } else {
  502. if (valeNode instanceof operateNode) {
  503. operate operate1 = ((operateNode) valeNode).getoperate();
  504. if (operate1.getShowName().equals("TO")) {
  505. op = ">=";
  506. dp = "<=";
  507. }
  508. if (operate1.gettype().equals(enuType.Logic)) {
  509. Query q1 = this.HandleValueNode(field, operate, ((treeNode) valeNode).getLeft(), configName,op,"",projectId);
  510. Query q2 = this.HandleValueNode(field, operate, (treeNode) valeNode.getRight(), configName,"",dp,projectId);
  511. switch (operate1.getShowName()) {
  512. case "AND":
  513. return QueryBuilders.bool(i -> i.must(q1, q2));
  514. case "OR":
  515. return QueryBuilders.bool(i -> i.should(q1, q2));
  516. case "NOT":
  517. Query temQ = (q1 == null) ? q2 : q1;
  518. return QueryBuilders.bool(i -> i.mustNot(temQ));
  519. case "TO":
  520. return QueryBuilders.bool(i -> i.must(q1, q2));
  521. case "*":
  522. return QueryBuilders.bool(i -> i.must(q1, q2));
  523. default:
  524. return null;
  525. }
  526. } else {
  527. return null;
  528. }
  529. } else {
  530. if (StringUtils.isNotEmpty(op)) {
  531. operate = op;
  532. } else if (StringUtils.isNotEmpty(dp))
  533. operate = dp;
  534. //比较运算符
  535. IQueryBuilder iQueryBuilder = null;
  536. String json = CommonService.readJsonFile(configName + ".json");
  537. List<EsConfigVO> esConfigVOS = JSON.parseArray(json, EsConfigVO.class);
  538. EsConfigVO esConfigVO = esConfigVOS.stream().filter(item -> item.getField().equals(field)).findFirst().orElse(null);
  539. if (esConfigVO != null) {
  540. iQueryBuilder = esBuilderFactory.getClass(esConfigVO.getEsClass());
  541. iQueryBuilder.setField(esConfigVO.getEsField());
  542. if (iQueryBuilder.getField().contains(".")) {
  543. String path = iQueryBuilder.getField().substring(0, iQueryBuilder.getField().indexOf("."));
  544. iQueryBuilder.setPath(path);
  545. }
  546. iQueryBuilder.setOperator(operate);
  547. iQueryBuilder.setValue(((valueNode) valeNode).getvalue());
  548. iQueryBuilder.setProjectId(projectId);
  549. return iQueryBuilder.creteQuery();
  550. } else {
  551. return null;
  552. }
  553. }
  554. }
  555. }
  556. public String webQueryToString2(treeNode treenode, String tableName) {
  557. operateNode node =(operateNode)treenode;
  558. treeNode Left = node.getLeft();
  559. treeNode Right = node.getRight();
  560. operate operate1 = node.getoperate();
  561. if(operate1.gettype() == enuType.Assignment)
  562. {
  563. if(!(Left instanceof valueNode)) {
  564. throw new XiaoShiException("检索式错误");
  565. }
  566. valueNode leftValue = (valueNode) Left;
  567. return this.getQueryValue(Right,tableName,leftValue.getvalue(),this.getNodeStrCode(operate1));
  568. }
  569. else if(operate1.gettype()==enuType.Logic&&operate1.getoperateValue()==1)
  570. {
  571. return "("+"/TI"+this.getNodeStrCode(operate1)+this.webQueryToString2(Right,tableName)+")";
  572. }
  573. else if(operate1.gettype()==enuType.Logic)
  574. {
  575. return "("+ this.webQueryToString2(Left,tableName)+this.getNodeStrCode(operate1)+this.webQueryToString2(Right,tableName)+")";
  576. }
  577. return null;
  578. }
  579. public String getQueryValue(treeNode node, String tableName,String field,String option){
  580. if(node instanceof valueNode){
  581. valueNode valuenode =(valueNode) node;
  582. String json = CommonService.readJsonFile(tableName + ".json");
  583. List<WebQueryConfigVO> webQueryConfigVOS = JSON.parseArray(json, WebQueryConfigVO.class);
  584. WebQueryConfigVO webQueryConfigVO = webQueryConfigVOS.stream().filter(item -> item.getField().equals(field)).findFirst().orElse(null);
  585. webQueryConfigVO.setOption(option);
  586. FormWebQueryFieldImp formWebQueryFieldImp =getWebQueryFactory.getClass(webQueryConfigVO.getSqlClass());
  587. webQueryConfigVO.setValue(valuenode.getvalue());
  588. return formWebQueryFieldImp.getWebQuery(webQueryConfigVO);
  589. }
  590. else {
  591. operateNode operatenode =(operateNode)node;
  592. treeNode Left = operatenode.getLeft();
  593. treeNode Right = operatenode.getRight();
  594. operate operate1 = operatenode.getoperate();
  595. if(operate1.getoperateValue()==1){
  596. return "("+"/TI"+this.getNodeStrCode(operate1)+this.getQueryValue(Right,tableName,field,option)+")";
  597. }
  598. return "("+this.getQueryValue(Left,tableName,field,option)+this.getNodeStrCode(operate1)+this.getQueryValue(Right,tableName,field,option)+")";
  599. }
  600. }
  601. public String getNodeStrCode(operate operate1){
  602. String strCode = "";
  603. String optionName = "";
  604. if ((operate1.getShowName() != null)) {
  605. if (operate1.getShowName().equals("AND")) {
  606. strCode="*";
  607. optionName="*";
  608. } else if (operate1.getShowName().equals("OR")) {
  609. strCode="+";
  610. optionName="+";
  611. } else if (operate1.getShowName().equals("NOT")) {
  612. strCode="-";
  613. optionName="-";
  614. }
  615. else {
  616. strCode=operate1.getShowName();
  617. optionName=operate1.getShowName();
  618. }
  619. } else {
  620. if (operate1.getCode().equals("AND")) {
  621. strCode="*";
  622. optionName="*";
  623. } else if (operate1.getCode().equals("OR")) {
  624. strCode="+";
  625. optionName="+";
  626. } else if (operate1.getCode().equals("NOT")) {
  627. strCode="-";
  628. optionName="-";
  629. }
  630. else {
  631. strCode=operate1.getShowName();
  632. optionName=operate1.getShowName();
  633. }
  634. }
  635. return strCode;
  636. }
  637. }