diff --git a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java index 75d6cf1f00..05c436197a 100644 --- a/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/oracle/OracleQueryProvider.java @@ -1,5 +1,6 @@ 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(" "); - } else { - stringBuilder.append(" ").append(x.getOriginName()).append(" AS _").append(x.getOriginName()).append(" "); - } - } else { - if (x.getDeType() == 1) { - 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.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() == TIME) { + String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); + 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("\" "); + } } 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 xAxis, List yAxis, List customFilter, List 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 yAxis, List customFilter, List 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"; } diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index f65e9ec07a..7f233d6fa5 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -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); /** * 直连不实用缓存