提交 043c8a89 authored 作者: taojinlong's avatar taojinlong

feat: 支持oracle

上级 10143222
package io.dataease.provider.oracle;
import com.google.gson.Gson;
import io.dataease.base.domain.DatasetTableField;
import io.dataease.controller.request.chart.ChartExtFilterRequest;
import io.dataease.dto.chart.ChartCustomFilterDTO;
......@@ -23,6 +24,13 @@ import java.util.List;
*/
@Service("oracleQuery")
public class OracleQueryProvider extends QueryProvider {
private static Integer STRING = 0;
private static Integer TIME = 1;
private static Integer INT = 2;
private static Integer FLOAT = 3;
private static Integer BOOLEAN = 4;
@Override
public Integer transFieldType(String field) {
switch (field) {
......@@ -83,8 +91,8 @@ public class OracleQueryProvider extends QueryProvider {
String[] array = fields.stream().map(f -> {
StringBuilder stringBuilder = new StringBuilder();
// 如果原始类型为时间
if (f.getDeExtractType() == 1) {
if (f.getDeType() == 2 || f.getDeType() == 3) {
if (f.getDeExtractType() == TIME) {
if (f.getDeType() == INT || f.getDeType() == FLOAT) { //日期转数值
if(f.getType().equalsIgnoreCase("DATE")){
stringBuilder.append("TO_NUMBER( ").append(f.getOriginName()).append(" - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ").append(f.getDataeaseName());
}else {
......@@ -93,18 +101,18 @@ public class OracleQueryProvider extends QueryProvider {
} else {
stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName());
}
} else if (f.getDeExtractType() == 0) {
if (f.getDeType() == 2) {
} else if (f.getDeExtractType() == STRING) {
if (f.getDeType() == INT) { // 字符串转数值
stringBuilder.append("CAST( ").append(f.getOriginName()).append(" AS DECIMAL(20,0)) AS ").append(f.getDataeaseName());
} else if (f.getDeType() == 3) {
} else if (f.getDeType() == FLOAT) {// 字符串转数值
stringBuilder.append("CAST( ").append(f.getOriginName()).append(" AS DECIMAL(20,2)) AS ").append(f.getDataeaseName());
} else if (f.getDeType() == 1) {
stringBuilder.append("to_date( ").append(f.getOriginName()).append(" ,'yyyy-mm-dd,hh24:mi:ss') AS ").append(f.getDataeaseName());
} else if (f.getDeType() == TIME) {// 字符串转时间
stringBuilder.append("TO_DATE( ").append(f.getOriginName()).append(" ,'yyyy-mm-dd,hh24:mi:ss') AS \"_").append(f.getDataeaseName()).append("\"");
} else {
stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName());
}
} else {
if (f.getDeType() == 1) {
if (f.getDeType() == TIME) { //数值转时间
stringBuilder.append("TO_CHAR( ").append(f.getOriginName()).append(" / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS ").append(f.getDataeaseName());
} else {
stringBuilder.append(" ").append(f.getOriginName()).append(" AS ").append(f.getDataeaseName());
......@@ -168,36 +176,45 @@ public class OracleQueryProvider extends QueryProvider {
.append(")");
}
}
f.append(" AS _").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append(" ");
f.append(" AS \"_").append(y.getSummary()).append("_").append(StringUtils.equalsIgnoreCase(y.getOriginName(), "*") ? "" : y.getOriginName()).append("\" ");
return f.toString();
}).toArray(String[]::new);
String[] groupField = xAxis.stream().map(x -> {
StringBuilder stringBuilder = new StringBuilder();
// 如果原始类型为时间
if (x.getDeExtractType() == 1) {
if (x.getDeType() == 2 || x.getDeType() == 3) {
stringBuilder.append("UNIX_TIMESTAMP( ").append(x.getOriginName()).append(" )*1000 AS _").append(x.getOriginName()).append(" ");
} else if (x.getDeType() == 1) {
if (x.getDeExtractType() == TIME) {
if (x.getDeType() == INT || x.getDeType() == FLOAT) { //时间转数值
if(x.getType().equalsIgnoreCase("DATE")){
stringBuilder.append("TO_NUMBER( ").append(x.getOriginName()).append(" - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS \"_").append(x.getDataeaseName()).append("\" ");
}else {
stringBuilder.append("TO_NUMBER(to_date(to_char( ").append(x.getOriginName()).append(" ,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') - TO_DATE('1970-01-01 8:0:0', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60 * 1000 AS ")
.append(x.getDataeaseName()).append("\" ");
}
} else if (x.getDeType() == TIME) { //格式化显示时间
String format = transDateFormat(x.getDateStyle(), x.getDatePattern());
stringBuilder.append("DATE_FORMAT( ").append(x.getOriginName()).append(" ,'").append(format).append("') AS _").append(x.getOriginName()).append(" ");
if(x.getType().equalsIgnoreCase("DATE")){
stringBuilder.append("to_char( ").append(x.getOriginName()).append(" ,'").append(format).append("') AS \"_").append(x.getOriginName()).append("\" ");
}else {
stringBuilder.append("to_char(to_date(to_char( ").append(x.getOriginName()).append(" ,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" ");
}
} else {
stringBuilder.append(" ").append(x.getOriginName()).append(" AS _").append(x.getOriginName()).append(" ");
}
} else {
if (x.getDeType() == 1) {
if (x.getDeType() == TIME) {
String format = transDateFormat(x.getDateStyle(), x.getDatePattern());
if (x.getDeExtractType() == 0) {
stringBuilder.append("DATE_FORMAT( ").append(x.getOriginName()).append(" ,'").append(format).append("') AS _").append(x.getOriginName()).append(" ");
} else {
stringBuilder.append("DATE_FORMAT(").append("FROM_UNIXTIME(CAST( ").append(x.getOriginName()).append(" AS DECIMAL(20,0))/1000,'%Y-%m-%d %H:%i:%S')").append(",'").append(format).append("') AS _").append(x.getOriginName()).append(" ");
if (x.getDeExtractType() == STRING) { //字符串转时间
stringBuilder.append("to_char(to_date(").append(x.getOriginName()).append(" , 'yyyy-MM-dd hh24:mi:ss'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" ");
} else { //数值转时间
stringBuilder.append("to_char(").append(x.getOriginName()) .append("/ (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH24:MI:SS'), '").append(format).append("') AS \"_").append(x.getOriginName()).append("\" ");
}
} else {
stringBuilder.append(" ").append(x.getOriginName()).append(" AS _").append(x.getOriginName()).append(" ");
stringBuilder.append(" ").append(x.getOriginName()).append(" AS \"_").append(x.getOriginName()).append("\" ");
}
}
return stringBuilder.toString();
}).toArray(String[]::new);
String[] group = xAxis.stream().map(x -> " _" + x.getOriginName() + " ").toArray(String[]::new);
String[] group = xAxis.stream().map(x -> " " + x.getOriginName() + " ").toArray(String[]::new);
String[] xOrder = xAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none"))
.map(f -> " _" + f.getOriginName() + " " + f.getSort()).toArray(String[]::new);
String[] yOrder = yAxis.stream().filter(f -> StringUtils.isNotEmpty(f.getSort()) && !StringUtils.equalsIgnoreCase(f.getSort(), "none"))
......@@ -270,7 +287,7 @@ public class OracleQueryProvider extends QueryProvider {
return sql;
} else {
String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1} ORDER BY {2}",
"(" + sql + ") AS tmp",
"(" + sql + ") tmp",
StringUtils.join(resultFilter, " "),
StringUtils.join(yOrder, ","));
return filterSql;
......@@ -279,7 +296,7 @@ public class OracleQueryProvider extends QueryProvider {
@Override
public String getSQLAsTmp(String sql, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
return getSQL(" (" + sqlFix(sql) + ") AS tmp ", xAxis, yAxis, customFilter, extFilterRequestList);
return getSQL(" (" + sqlFix(sql) + ") tmp ", xAxis, yAxis, customFilter, extFilterRequestList);
}
@Override
......@@ -351,7 +368,7 @@ public class OracleQueryProvider extends QueryProvider {
return sql;
} else {
String filterSql = MessageFormat.format("SELECT * FROM {0} WHERE 1=1 {1} ORDER BY {2}",
"(" + sql + ") AS tmp",
"(" + sql + ") tmp",
StringUtils.join(resultFilter, " "),
StringUtils.join(order, ","));
return filterSql;
......@@ -360,7 +377,7 @@ public class OracleQueryProvider extends QueryProvider {
@Override
public String getSQLSummaryAsTmp(String sql, List<ChartViewFieldDTO> yAxis, List<ChartCustomFilterDTO> customFilter, List<ChartExtFilterRequest> extFilterRequestList) {
return getSQLSummary(" (" + sqlFix(sql) + ") AS tmp ", yAxis, customFilter, extFilterRequestList);
return getSQLSummary(" (" + sqlFix(sql) + ") tmp ", yAxis, customFilter, extFilterRequestList);
}
public String transMysqlFilterTerm(String term) {
......@@ -483,17 +500,17 @@ public class OracleQueryProvider extends QueryProvider {
switch (dateStyle) {
case "y":
return "Y";
return "YYYY";
case "y_M":
return "%Y" + split + "%m";
return "YYYY" + split + "MM";
case "y_M_d":
return "%Y" + split + "%m" + split + "%d";
return "YYYY" + split + "MM" + split + "DD";
case "H_m_s":
return "%H:%i:%S";
return "HH24:MI:SS";
case "y_M_d_H_m":
return "%Y" + split + "%m" + split + "%d" + " %H:%i";
return "YYYY" + split + "MM" + split + "DD" + " HH24:MI";
case "y_M_d_H_m_s":
return "%Y" + split + "%m" + split + "%d" + " %H:%i:%S";
return "YYYY" + split + "MM" + split + "DD" + " HH24:MI:SS";
default:
return "%Y-%m-%d %H:%i:%S";
}
......
......@@ -197,7 +197,6 @@ public class ChartViewService {
datasourceRequest.setQuery(qp.getSQLAsTmp(dataTableInfoDTO.getSql(), xAxis, yAxis, customFilter, extFilterList));
}
}
System.out.println(datasourceRequest.getQuery());
data = datasourceProvider.getData(datasourceRequest);
/**
* 直连不实用缓存
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论