forked from github/dataease
commit
23f85147d8
@ -68,7 +68,7 @@ public class ExcelReaderUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
String file ="全国现有确诊趋势.xlsx";
|
String file ="下单渠道.xlsx";
|
||||||
ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
|
ExcelReaderUtil.readExcel(file, new FileInputStream("/Users/taojinlong/Desktop/" + file));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,9 @@ package io.dataease.provider.sqlserver;
|
|||||||
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import io.dataease.base.domain.DatasetTableField;
|
import io.dataease.base.domain.DatasetTableField;
|
||||||
|
import io.dataease.base.domain.DatasetTableFieldExample;
|
||||||
import io.dataease.base.domain.Datasource;
|
import io.dataease.base.domain.Datasource;
|
||||||
|
import io.dataease.base.mapper.DatasetTableFieldMapper;
|
||||||
import io.dataease.commons.constants.DeTypeConstants;
|
import io.dataease.commons.constants.DeTypeConstants;
|
||||||
import io.dataease.controller.request.chart.ChartExtFilterRequest;
|
import io.dataease.controller.request.chart.ChartExtFilterRequest;
|
||||||
import io.dataease.datasource.dto.SqlServerConfigration;
|
import io.dataease.datasource.dto.SqlServerConfigration;
|
||||||
@ -11,6 +13,7 @@ import io.dataease.dto.chart.ChartViewFieldDTO;
|
|||||||
import io.dataease.dto.sqlObj.SQLObj;
|
import io.dataease.dto.sqlObj.SQLObj;
|
||||||
import io.dataease.provider.QueryProvider;
|
import io.dataease.provider.QueryProvider;
|
||||||
import io.dataease.provider.SQLConstants;
|
import io.dataease.provider.SQLConstants;
|
||||||
|
import io.dataease.provider.mysql.MySQLConstants;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -19,16 +22,20 @@ import org.stringtemplate.v4.ST;
|
|||||||
import org.stringtemplate.v4.STGroup;
|
import org.stringtemplate.v4.STGroup;
|
||||||
import org.stringtemplate.v4.STGroupFile;
|
import org.stringtemplate.v4.STGroupFile;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
import java.util.regex.Matcher;
|
||||||
import java.util.List;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import static io.dataease.provider.SQLConstants.TABLE_ALIAS_PREFIX;
|
import static io.dataease.provider.SQLConstants.TABLE_ALIAS_PREFIX;
|
||||||
|
|
||||||
@Service("sqlserverQuery")
|
@Service("sqlserverQuery")
|
||||||
public class SqlserverQueryProvider extends QueryProvider {
|
public class SqlserverQueryProvider extends QueryProvider {
|
||||||
|
@Resource
|
||||||
|
private DatasetTableFieldMapper datasetTableFieldMapper;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer transFieldType(String field) {
|
public Integer transFieldType(String field) {
|
||||||
switch (field) {
|
switch (field) {
|
||||||
@ -378,12 +385,116 @@ public class SqlserverQueryProvider extends QueryProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extBubble) {
|
public String getSQLScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extBubble) {
|
||||||
return null;
|
SQLObj tableObj = SQLObj.builder()
|
||||||
|
.tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 0))
|
||||||
|
.build();
|
||||||
|
List<SQLObj> xFields = new ArrayList<>();
|
||||||
|
List<SQLObj> xWheres = new ArrayList<>();
|
||||||
|
List<SQLObj> xOrders = new ArrayList<>();
|
||||||
|
if (CollectionUtils.isNotEmpty(xAxis)) {
|
||||||
|
for (int i = 0; i < xAxis.size(); i++) {
|
||||||
|
ChartViewFieldDTO x = xAxis.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(x.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(x.getExtField()) && x.getExtField() == 1) {
|
||||||
|
originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), x.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, i);
|
||||||
|
// 处理横轴字段
|
||||||
|
xFields.add(getXFields(x, originField, fieldAlias));
|
||||||
|
// 处理横轴过滤
|
||||||
|
// xWheres.addAll(getXWheres(x, originField, fieldAlias));
|
||||||
|
// 处理横轴排序
|
||||||
|
if (StringUtils.isNotEmpty(x.getSort()) && !StringUtils.equalsIgnoreCase(x.getSort(), "none")) {
|
||||||
|
xOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(x.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List<SQLObj> yFields = new ArrayList<>();
|
||||||
|
List<SQLObj> yWheres = new ArrayList<>();
|
||||||
|
List<SQLObj> yOrders = new ArrayList<>();
|
||||||
|
List<ChartViewFieldDTO> yList = new ArrayList<>();
|
||||||
|
yList.addAll(yAxis);
|
||||||
|
yList.addAll(extBubble);
|
||||||
|
if (CollectionUtils.isNotEmpty(yList)) {
|
||||||
|
for (int i = 0; i < yList.size(); i++) {
|
||||||
|
ChartViewFieldDTO y = yList.get(i);
|
||||||
|
String originField;
|
||||||
|
if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == 2) {
|
||||||
|
// 解析origin name中有关联的字段生成sql表达式
|
||||||
|
originField = calcFieldRegex(y.getOriginName(), tableObj);
|
||||||
|
} else if (ObjectUtils.isNotEmpty(y.getExtField()) && y.getExtField() == 1) {
|
||||||
|
originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName());
|
||||||
|
} else {
|
||||||
|
originField = String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), y.getOriginName());
|
||||||
|
}
|
||||||
|
String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_Y_PREFIX, i);
|
||||||
|
// 处理纵轴字段
|
||||||
|
yFields.add(getYFields(y, originField, fieldAlias));
|
||||||
|
// 处理纵轴过滤
|
||||||
|
yWheres.addAll(getYWheres(y, originField, fieldAlias));
|
||||||
|
// 处理纵轴排序
|
||||||
|
if (StringUtils.isNotEmpty(y.getSort()) && !StringUtils.equalsIgnoreCase(y.getSort(), "none")) {
|
||||||
|
yOrders.add(SQLObj.builder()
|
||||||
|
.orderField(originField)
|
||||||
|
.orderAlias(fieldAlias)
|
||||||
|
.orderDirection(y.getSort())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 处理视图中字段过滤
|
||||||
|
List<SQLObj> customWheres = transCustomFilterList(tableObj, customFilter);
|
||||||
|
// 处理仪表板字段过滤
|
||||||
|
List<SQLObj> extWheres = transExtFilterList(tableObj, extFilterRequestList);
|
||||||
|
// 构建sql所有参数
|
||||||
|
List<SQLObj> fields = new ArrayList<>();
|
||||||
|
fields.addAll(xFields);
|
||||||
|
fields.addAll(yFields);
|
||||||
|
List<SQLObj> wheres = new ArrayList<>();
|
||||||
|
wheres.addAll(xWheres);
|
||||||
|
if (customWheres != null) wheres.addAll(customWheres);
|
||||||
|
if (extWheres != null) wheres.addAll(extWheres);
|
||||||
|
List<SQLObj> groups = new ArrayList<>();
|
||||||
|
groups.addAll(xFields);
|
||||||
|
// 外层再次套sql
|
||||||
|
List<SQLObj> orders = new ArrayList<>();
|
||||||
|
orders.addAll(xOrders);
|
||||||
|
orders.addAll(yOrders);
|
||||||
|
List<SQLObj> aggWheres = new ArrayList<>();
|
||||||
|
aggWheres.addAll(yWheres);
|
||||||
|
|
||||||
|
STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE);
|
||||||
|
ST st_sql = stg.getInstanceOf("querySql");
|
||||||
|
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields);
|
||||||
|
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
|
||||||
|
String sql = st_sql.render();
|
||||||
|
|
||||||
|
ST st = stg.getInstanceOf("querySql");
|
||||||
|
SQLObj tableSQL = SQLObj.builder()
|
||||||
|
.tableName(String.format(MySQLConstants.BRACKETS, sql))
|
||||||
|
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
|
||||||
|
.build();
|
||||||
|
if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres);
|
||||||
|
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
|
||||||
|
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
|
||||||
|
return st.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getSQLAsTmpScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extBubble) {
|
public String getSQLAsTmpScatter(String table, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList, List<ChartViewFieldDTO> extBubble) {
|
||||||
return null;
|
return getSQLScatter("(" + sqlFix(table) + ")", xAxis, yAxis, customFilter, extFilterRequestList, extBubble);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -782,5 +893,27 @@ public class SqlserverQueryProvider extends QueryProvider {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String calcFieldRegex(String originField, SQLObj tableObj) {
|
||||||
|
originField = originField.replaceAll("[\\t\\n\\r]]", "");
|
||||||
|
// 正则提取[xxx]
|
||||||
|
String regex = "\\[(.*?)]";
|
||||||
|
Pattern pattern = Pattern.compile(regex);
|
||||||
|
Matcher matcher = pattern.matcher(originField);
|
||||||
|
Set<String> ids = new HashSet<>();
|
||||||
|
while (matcher.find()) {
|
||||||
|
String id = matcher.group(1);
|
||||||
|
ids.add(id);
|
||||||
|
}
|
||||||
|
if (CollectionUtils.isEmpty(ids)) {
|
||||||
|
return originField;
|
||||||
|
}
|
||||||
|
DatasetTableFieldExample datasetTableFieldExample = new DatasetTableFieldExample();
|
||||||
|
datasetTableFieldExample.createCriteria().andIdIn(new ArrayList<>(ids));
|
||||||
|
List<DatasetTableField> calcFields = datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
|
||||||
|
for (DatasetTableField ele : calcFields) {
|
||||||
|
originField = originField.replaceAll("\\[" + ele.getId() + "]",
|
||||||
|
String.format(MySQLConstants.KEYWORD_FIX, tableObj.getTableAlias(), ele.getOriginName()));
|
||||||
|
}
|
||||||
|
return originField;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user