From 00a3da756e2a1671f7e1f5a30f76defd30c337bc Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 12 Jun 2023 17:36:51 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E6=A0=A1=E9=AA=8C=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/io/dataease/provider/datasource/JdbcProvider.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index c0e1cb202e..5b5fc031f3 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -781,7 +781,7 @@ public class JdbcProvider extends DefaultJdbcProvider { case StarRocks: MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasource.getConfiguration(), MysqlConfiguration.class); mysqlConfiguration.getJdbc(); - if(!mysqlConfiguration.getDataBase().matches("^[0-9a-zA-Z_]{1,}$")){ + if(!mysqlConfiguration.getDataBase().matches("^[0-9a-zA-Z_-]{1,}$")){ throw new Exception("Invalid database name"); } break; From f16cb738d16f463ed9c0bc1ece0c1fa1630f76e9 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 12 Jun 2023 17:38:38 +0800 Subject: [PATCH 2/3] =?UTF-8?q?perf:=20=E5=AF=BC=E5=87=BAExcel=E6=97=B6?= =?UTF-8?q?=EF=BC=8CXSSFWorkbook=20->=20SXSSFWorkbook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/dataease/commons/utils/ExcelUtils.java | 3 ++- .../io/dataease/commons/utils/ExcelXlsReader.java | 1 + .../service/dataset/DataSetTableService.java | 3 ++- .../dataease/service/panel/PanelGroupService.java | 3 ++- .../io/dataease/service/sys/log/LogService.java | 15 +++++++-------- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/backend/src/main/java/io/dataease/commons/utils/ExcelUtils.java b/backend/src/main/java/io/dataease/commons/utils/ExcelUtils.java index 69ed9f81ac..9042a20b01 100644 --- a/backend/src/main/java/io/dataease/commons/utils/ExcelUtils.java +++ b/backend/src/main/java/io/dataease/commons/utils/ExcelUtils.java @@ -15,6 +15,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -24,7 +25,7 @@ public class ExcelUtils { public static File exportExcel(List sheets, String fileName, String folderId) throws Exception { AtomicReference realFileName = new AtomicReference<>(fileName); - Workbook wb = new XSSFWorkbook(); + Workbook wb = new SXSSFWorkbook(); sheets.forEach(sheet -> { diff --git a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsReader.java b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsReader.java index 59744d8384..6b0a0dfd22 100644 --- a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsReader.java +++ b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsReader.java @@ -7,6 +7,7 @@ import org.apache.poi.hssf.eventusermodel.*; import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord; import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord; import org.apache.poi.hssf.record.*; +import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.usermodel.HSSFDataFormatter; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index e62a5088c3..169b47dd2e 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -67,6 +67,7 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.ss.usermodel.*; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -2964,7 +2965,7 @@ public class DataSetTableService { details.add(row); } // 操作Excel - Workbook wb = new XSSFWorkbook(); + Workbook wb = new SXSSFWorkbook(); // Sheet Sheet detailsSheet = wb.createSheet("数据"); //给单元格设置样式 diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 964155492b..7d55dc3d2e 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -45,6 +45,7 @@ import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.pentaho.di.core.util.UUIDUtil; import org.slf4j.Logger; @@ -660,7 +661,7 @@ public class PanelGroupService { Integer[] excelTypes = request.getExcelTypes(); details.add(0, request.getHeader()); - Workbook wb = new XSSFWorkbook(); + Workbook wb = new SXSSFWorkbook(); //明细sheet Sheet detailsSheet = wb.createSheet("数据"); diff --git a/backend/src/main/java/io/dataease/service/sys/log/LogService.java b/backend/src/main/java/io/dataease/service/sys/log/LogService.java index 913f1991fa..be27c7a28f 100644 --- a/backend/src/main/java/io/dataease/service/sys/log/LogService.java +++ b/backend/src/main/java/io/dataease/service/sys/log/LogService.java @@ -27,9 +27,8 @@ import io.dataease.service.system.SystemParameterService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; -import org.apache.poi.xssf.usermodel.*; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -384,13 +383,13 @@ public class LogService { details.add(0, headArr); - XSSFWorkbook wb = new XSSFWorkbook(); + Workbook wb = new SXSSFWorkbook(); //明细sheet - XSSFSheet detailsSheet = wb.createSheet("数据"); + Sheet detailsSheet = wb.createSheet("数据"); //给单元格设置样式 - XSSFCellStyle cellStyle = wb.createCellStyle(); - XSSFFont font = wb.createFont(); + CellStyle cellStyle = wb.createCellStyle(); + Font font = wb.createFont(); //设置字体大小 font.setFontHeightInPoints((short) 12); //设置字体加粗 @@ -404,11 +403,11 @@ public class LogService { if (CollectionUtils.isNotEmpty(details)) { for (int i = 0; i < details.size(); i++) { - XSSFRow row = detailsSheet.createRow(i); + Row row = detailsSheet.createRow(i); String[] rowData = details.get(i); if (rowData != null) { for (int j = 0; j < rowData.length; j++) { - XSSFCell cell = row.createCell(j); + Cell cell = row.createCell(j); cell.setCellValue(rowData[j]); if (i == 0) {// 头部 cell.setCellStyle(cellStyle); From ad2ce8cd8824d74487847e9015c0ce3b982b1cf6 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 12 Jun 2023 17:39:23 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E3=80=81=E6=97=B6=E9=97=B4=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 19 +++++++++++++++---- .../engine/mysql/MysqlQueryProvider.java | 16 ++++++++++++++-- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index 3a9582c031..8e769bb1e1 100644 --- a/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -8,7 +8,9 @@ import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.common.base.mapper.DatasetTableFieldMapper; import io.dataease.plugins.common.constants.DeTypeConstants; import io.dataease.plugins.common.constants.datasource.DorisConstants; +import io.dataease.plugins.common.constants.datasource.MySQLConstants; import io.dataease.plugins.common.constants.datasource.SQLConstants; +import io.dataease.plugins.common.constants.engine.MysqlConstants; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; @@ -1074,11 +1076,20 @@ public class DorisQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { - whereName = String.format(DorisConstants.DATE_FORMAT, originName, format); + String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT); + if(request.getOperator().equals("between")){ + whereName = date; + }else { + whereName = String.format(MySQLConstants.DATE_FORMAT, date, format); + } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(DorisConstants.CAST, originName, DorisConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(DorisConstants.FROM_UNIXTIME, cast, format); + if(request.getOperator().equals("between")){ + whereName = originName; + }else { + String cast = String.format(MySQLConstants.CAST, originName, MySQLConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(DorisConstants.FROM_UNIXTIME, cast, format); + } } } else if (field.getDeType() == 0) { whereName = String.format(DorisConstants.CAST, originName, DorisConstants.VARCHAR); @@ -1115,7 +1126,7 @@ public class DorisQueryProvider extends QueryProvider { whereName = "upper(" + whereName + ")"; } else if (StringUtils.containsIgnoreCase(request.getOperator(), "between")) { if (request.getDatasetTableField().getDeType() == 1) { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); String startTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(0)))); String endTime = simpleDateFormat.format(new Date(Long.parseLong(value.get(1)))); whereValue = String.format(DorisConstants.WHERE_BETWEEN, startTime, endTime); diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java index 3caac20d8f..3f1b4df0c4 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java @@ -7,6 +7,8 @@ import io.dataease.plugins.common.base.domain.DatasetTableFieldExample; import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.common.base.mapper.DatasetTableFieldMapper; import io.dataease.plugins.common.constants.DeTypeConstants; +import io.dataease.plugins.common.constants.datasource.DorisConstants; +import io.dataease.plugins.common.constants.datasource.MySQLConstants; import io.dataease.plugins.common.constants.datasource.SQLConstants; import io.dataease.plugins.common.constants.engine.MysqlConstants; import io.dataease.plugins.common.dto.chart.ChartCustomFilterItemDTO; @@ -1061,10 +1063,20 @@ public class MysqlQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { - whereName = String.format(MysqlConstants.DATE_FORMAT, originName, format); + String date = String.format(MySQLConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : MysqlConstants.DEFAULT_DATE_FORMAT); + if(request.getOperator().equals("between")){ + whereName = date; + }else { + whereName = String.format(MySQLConstants.DATE_FORMAT, date, format); + } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - whereName = originName; + if(request.getOperator().equals("between")){ + whereName = originName; + }else { + String cast = String.format(MySQLConstants.CAST, originName, MySQLConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(DorisConstants.FROM_UNIXTIME, cast, format); + } } } else if (field.getDeType() == 0 && field.getDeExtractType() == 0) { whereName = String.format(MysqlConstants.CAST, originName, MysqlConstants.CHAR);