123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- package cn.cslg.pas.service.query;
- import cn.cslg.pas.common.model.cronModel.GroupConfig;
- import cn.cslg.pas.common.model.cronModel.OrderConfig;
- import cn.cslg.pas.common.model.cronModel.SqlObject;
- import cn.cslg.pas.common.model.request.MapRequest;
- import cn.cslg.pas.common.model.request.OrderDTO;
- import cn.cslg.pas.common.model.request.QueryRequest;
- import cn.cslg.pas.common.model.request.StringRequest;
- import cn.cslg.pas.common.utils.StringUtils;
- import cn.cslg.pas.common.utils.parseQueryToTree.*;
- import cn.cslg.pas.exception.ConditionException;
- import cn.cslg.pas.factorys.getOrderFactory.GetOrderFactory;
- import cn.cslg.pas.factorys.getOrderFactory.GetOrderObject;
- import cn.cslg.pas.factorys.getSqlFactorys.GetSqlFactory;
- import cn.cslg.pas.factorys.getSqlFactorys.GetSqlObject;
- import cn.cslg.pas.service.business.CommonService;
- import com.alibaba.fastjson.JSON;
- import com.google.gson.Gson;
- import lombok.RequiredArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.context.annotation.Lazy;
- import org.springframework.stereotype.Service;
- import java.io.*;
- import java.util.*;
- /**
- * 格式化检索式类
- */
- @Service
- @Slf4j
- public class FormatQueryService {
- @Autowired
- private GetSqlFactory getSqlFactory;
- @Autowired
- private GetOrderFactory getOrderFactory;
- public String getText(String text) throws Exception {
- treeNode tree = expressManager.getInstance().Parse(text, false);
- System.out.print(this.ToString((operateNode) tree));
- return "";
- }
- /**
- * 二叉树转检索式
- *
- * @param node
- * @return
- */
- public String ToString(operateNode node) {
- operate operate1 = node.getoperate();
- treeNode Left = node.getLeft();
- treeNode Right = node.getRight();
- String strCode = "";
- String optionName = "";
- if ((operate1.getShowName() != null)) {
- strCode = operate1.getShowName();
- optionName = operate1.getShowName();
- } else {
- strCode = operate1.getCode();
- optionName = operate1.getCode();
- }
- GetSqlObject getSqlObject = null;
- if (Left != null) {
- if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
- strCode = "(" + this.ToString((operateNode) Left) + ") " + strCode;
- } else { //获得栏位名称
- String field = Left.ToString();
- strCode = Left.ToString() + " " + strCode;
- //判断 参数类型
- String json = CommonService.readJsonFile("event.json");
- List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
- SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field)).findFirst().orElse(null);
- if (sqlObject != null) {
- getSqlObject = getSqlFactory.getClass(sqlObject.getSqlClass());
- sqlObject.setOption(optionName);
- getSqlObject.setSqlObject(sqlObject);
- }
- }
- }
- if (Right != null) {
- String rightValue = "";
- if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
- rightValue = this.ToString((operateNode) Right);
- strCode = strCode + " (" + rightValue + ") ";
- } else {
- rightValue = Right.ToString();
- strCode = strCode + " " + Right.ToString();
- }
- if (getSqlObject != null) {
- if (optionName.equals(" LIKE ")) {
- rightValue = "'%" + rightValue + "%'";
- }
- strCode = getSqlObject.getSql(rightValue);
- }
- }
- return strCode;
- }
- /**
- * 排序转sql排序语句
- *
- * @param dtos
- * @return
- */
- public String orderToString(List<OrderDTO> dtos,String tableName) {
- //读取排序配置类
- String json = CommonService.readJsonFile(tableName+".json");
- List<OrderConfig> configs = JSON.parseArray(json, OrderConfig.class);
- String re = "order by ";
- List<String> orders = new ArrayList<>();
- dtos.forEach(item -> {
- OrderConfig orderConfig = configs.stream().filter(tem -> tem.getField().equals(item.getOrderBy())).findFirst().orElse(null);
- GetOrderObject getOrderObject = getOrderFactory.getClass(orderConfig.getOrderClass());
- String order = getOrderObject.getOrderString(orderConfig.getSqlField(), item.getOrderType());
- if (order != "") {
- orders.add(order);
- }
- });
- if(orders.size()==0){
- return "";
- }
- String orderStr = StringUtils.join(orders, ",");
- re += orderStr;
- return re;
- }
- /**
- * 二叉树转检索式
- *
- * @param node
- * @return
- */
- public String ToString2(operateNode node, GetSqlObject getSqlObject,String tableName) {
- operate operate1 = node.getoperate();
- treeNode Left = node.getLeft();
- treeNode Right = node.getRight();
- String strCode = "";
- String optionName = "";
- if ((operate1.getShowName() != null)) {
- strCode = operate1.getShowName();
- optionName = operate1.getShowName();
- } else {
- strCode = operate1.getCode();
- optionName = operate1.getCode();
- }
- GetSqlObject getSqlObjectLocal = null;
- if (Left != null) {
- if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Left instanceof operateNode)) {
- strCode = "(" + this.ToString2((operateNode) Left, getSqlObject,tableName) + ") " + strCode + " ";
- } else { //获得栏位名称
- String field = Left.ToString();
- if (getSqlObject != null) {
- strCode = getSqlObject.getSql(field) + strCode + " ";
- } else {
- strCode = Left.ToString() + " " + strCode;
- //判断 参数类型
- String json = CommonService.readJsonFile(tableName+".json");
- List<SqlObject> sqlObjects = JSON.parseArray(json, SqlObject.class);
- SqlObject sqlObject = sqlObjects.stream().filter(item -> item.getValue().equals(field)).findFirst().orElse(null);
- if (sqlObject != null) {
- getSqlObjectLocal = getSqlFactory.getClass(sqlObject.getSqlClass());
- sqlObject.setOption(optionName);
- getSqlObjectLocal.setSqlObject(sqlObject);
- getSqlObject = getSqlObjectLocal;
- }
- }
- }
- }
- if (Right != null) {
- String rightValue = "";
- if ((operate1.gettype() == enuType.Logic || operate1.gettype() == enuType.Assignment) && (Right instanceof operateNode)) {
- rightValue = this.ToString2((operateNode) Right, getSqlObject,tableName);
- if (getSqlObject != null) {
- return rightValue;
- }
- strCode = strCode + " (" + rightValue + ") ";
- } else {
- if (getSqlObjectLocal != null) {
- rightValue = Right.ToString();
- strCode = getSqlObject.getSql(rightValue);
- } else if (getSqlObject != null) {
- rightValue = Right.ToString();
- strCode = strCode + getSqlObject.getSql(rightValue);
- }
- }
- }
- return strCode;
- }
- /**
- * 格式化分组
- *
- * @param groupBy
- * @return
- */
- public String groupToString(String groupBy) {
- String json = CommonService.readJsonFile("event.json");
- List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
- GroupConfig groupConfig = groupConfigs.stream().filter(item -> item.getField().equals(groupBy)).findFirst().orElse(null);
- if (groupConfig != null) {
- return " group by " + groupConfig.getSqlField() + " ";
- }
- return "";
- }
- /**
- * 返回sql列表
- *
- * @param queryRequest
- * @return
- */
- public List<String> reSqls(QueryRequest queryRequest,String tableName) {
- List<String> sqls = new ArrayList<>();
- String sql1 = "";
- String sql2 = "";
- String sql3 = "";
- //合成检索式
- StringRequest stringRequest = null;
- if (queryRequest instanceof MapRequest) {
- } else {
- stringRequest = (StringRequest) queryRequest;
- }
- String condition = stringRequest.getSearchQuery();
- if(queryRequest.getGroupField()!=null){
- if(condition!=null&&condition!="") {
- condition += " AND " + queryRequest.getGroupField() + "=" + queryRequest.getGroupFieldValue();
- }
- else {
- condition = queryRequest.getGroupField() + "=" + queryRequest.getGroupFieldValue();
- }
- }
- //检索式格式化
- if (condition != null && condition != "") {
- try {
- //将检索式转换为二叉树
- treeNode tree = expressManager.getInstance().Parse(condition, false);
- //格式化检索式
- sql1 = this.ToString2((operateNode) tree, null,tableName);
- } catch (Exception e) {
- throw new ConditionException("检索式错误");
- }
- }
- //格式化排序
- if (queryRequest.getOrderDTOList() != null && queryRequest.getOrderDTOList().size() != 0) {
- String orderSql = this.orderToString(queryRequest.getOrderDTOList(),tableName);
- sql2 = orderSql;
- }
- //格式化 分页信息
- if (queryRequest.getSize() != null && queryRequest.getCurrent() != null) {
- Long size = queryRequest.getSize();
- Long current = queryRequest.getCurrent();
- String page = " limit " + ((current - 1) * size) + "," + size;
- sql3 = page;
- }
- //格式化分组信息
- sqls.add(sql1);
- sqls.add(sql2);
- sqls.add(sql3);
- return sqls;
- }
- }
|