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

feat: 支持oracle

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