diff --git a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java index d381e754c7..dda075e2c7 100644 --- a/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java +++ b/backend/src/main/java/io/dataease/commons/utils/ExcelXlsxReader.java @@ -100,6 +100,8 @@ public class ExcelXlsxReader extends DefaultHandler { */ private String formatString; + + //定义前一个元素和当前元素的位置,用来计算其中空的单元格数量,如A6和A8等 private String preRef = null, ref = null; diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java index 940cb645e9..e3ed90b204 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -172,7 +172,7 @@ public class DataSetTableController { @ApiOperation("检测doris") @PostMapping("checkDorisTableIsExists/{id}") public Boolean checkDorisTableIsExists(@PathVariable String id) throws Exception { - return dataSetTableService.checkDorisTableIsExists(id); + return dataSetTableService.checkEngineTableIsExists(id); } @ApiOperation("搜索") diff --git a/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java b/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java index ada0dd0294..f90781fcb3 100644 --- a/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java +++ b/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java @@ -39,9 +39,9 @@ public class DDLProviderImpl extends DDLProvider { Integer realSize = page * pageNumber < dataList.size() ? page * pageNumber : dataList.size(); for (String[] strings : dataList.subList((page - 1) * pageNumber, realSize)) { - values.append("(").append(Md5Utils.md5(String.join(",", Arrays.asList(strings)))) - .append("," ).append(String.join(",", Arrays.asList(strings))) - .append("),"); + values.append("('").append(Md5Utils.md5(String.join(",", Arrays.asList(strings)))) + .append("','" ).append(String.join("','", Arrays.asList(strings))) + .append("'),"); } return insertSql + values.substring(0, values.length() - 1); } 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 d135676871..2a98a6c683 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -395,6 +395,7 @@ public class JdbcProvider extends DatasourceProvider { dataSource = jdbcConnection.get(datasourceRequest.getDatasource().getId()); if (dataSource != null) { dataSource.close(); + jdbcConnection.remove(datasourceRequest.getDatasource().getId()); } break; default: @@ -426,6 +427,7 @@ public class JdbcProvider extends DatasourceProvider { case mysql: case mariadb: case engine_doris: + case engine_mysql: case ds_doris: MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfiguration.class); username = mysqlConfiguration.getUsername(); @@ -529,6 +531,7 @@ public class JdbcProvider extends DatasourceProvider { switch (datasourceType) { case mysql: case mariadb: + case engine_mysql: case engine_doris: case ds_doris: MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfiguration.class); @@ -604,6 +607,7 @@ public class JdbcProvider extends DatasourceProvider { DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType()); switch (datasourceType) { case mysql: + case engine_mysql: case mariadb: JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class); return String.format("SELECT TABLE_NAME,TABLE_COMMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '%s' ;", jdbcConfiguration.getDataBase()); @@ -657,6 +661,7 @@ public class JdbcProvider extends DatasourceProvider { case mysql: case mariadb: case engine_doris: + case engine_mysql: case ds_doris: case ck: return null; diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlConstants.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlConstants.java index d2590b85f8..e75a357da7 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlConstants.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlConstants.java @@ -25,7 +25,7 @@ public class MysqlConstants extends SQLConstants { public static final String DEFAULT_DATE_FORMAT = "%Y-%m-%d %H:%i:%S"; - public static final String DEFAULT_INT_FORMAT = "BIGINT"; + public static final String DEFAULT_INT_FORMAT = "DECIMAL(20,0)"; public static final String DEFAULT_FLOAT_FORMAT = "DECIMAL(20,2)"; diff --git a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java index 61e7168d26..91ba3ccf97 100644 --- a/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java +++ b/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java @@ -1,15 +1,24 @@ package io.dataease.provider.engine.mysql; +import io.dataease.base.domain.DatasetTableField; import io.dataease.commons.utils.TableUtils; import io.dataease.provider.DDLProviderImpl; import org.springframework.stereotype.Service; +import java.util.List; + /** * @Author gin * @Date 2021/5/17 4:27 下午 */ @Service("mysqlEngineDDL") public class MysqlDDLProvider extends DDLProviderImpl { + + private static final String creatTableSql = + "CREATE TABLE IF NOT EXISTS `TABLE_NAME`" + + "Column_Fields;" ; + + @Override public String createView(String name, String viewSQL) { return "CREATE VIEW IF NOT EXISTS " + name + " AS (" + viewSQL + ")"; @@ -27,9 +36,60 @@ public class MysqlDDLProvider extends DDLProviderImpl { @Override public String replaceTable(String name){ - String replaceTableSql = "rename table FROM_TABLE to FROM_TABLE_tmp, TO_TABLE to FROM_TABLE, FROM_TABLE_tmp to TO_TABLE; " + String replaceTableSql = "rename table FROM_TABLE to FROM_TABLE_tmp, TO_TABLE to FROM_TABLE, FROM_TABLE_tmp to TO_TABLE" .replace("FROM_TABLE", name).replace("TO_TABLE", TableUtils.tmpName(name)); String dropTableSql = "DROP TABLE IF EXISTS " + TableUtils.tmpName(name); return replaceTableSql + ";" + dropTableSql; } + + @Override + public String createTableSql(String tableName, List datasetTableFields) { + String dorisTableColumnSql = createDorisTableColumnSql(datasetTableFields); + return creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql); + } + + private String createDorisTableColumnSql(final List datasetTableFields) { + StringBuilder Column_Fields = new StringBuilder("dataease_uuid varchar(50), `"); + for (DatasetTableField datasetTableField : datasetTableFields) { + Column_Fields.append(datasetTableField.getDataeaseName()).append("` "); + Integer size = datasetTableField.getSize() * 4; + switch (datasetTableField.getDeExtractType()) { + case 0: + if (size < 65533) { + Column_Fields.append("varchar(length)".replace("length", String.valueOf(datasetTableField.getSize()))).append(",`"); + }else { + Column_Fields.append("longtext").append(",`"); + } + break; + case 1: + size = size < 50? 50 : size; + if (size < 65533) { + Column_Fields.append("varchar(length)".replace("length", String.valueOf(datasetTableField.getSize()))).append(",`"); + }else { + Column_Fields.append("longtext").append(",`"); + } + break; + case 2: + Column_Fields.append("varchar(100)").append(",`"); + break; + case 3: + Column_Fields.append("varchar(100)").append(",`"); + break; + case 4: + Column_Fields.append("TINYINT(length)".replace("length", String.valueOf(datasetTableField.getSize()))).append(",`"); + break; + default: + if (size < 65533) { + Column_Fields.append("varchar(length)".replace("length", String.valueOf(datasetTableField.getSize()))).append(",`"); + }else { + Column_Fields.append("longtext").append(",`"); + } + break; + } + } + + Column_Fields = new StringBuilder(Column_Fields.substring(0, Column_Fields.length() - 1)).append("PRIMARY KEY(dataease_uuid)"); + Column_Fields = new StringBuilder("(" + Column_Fields + ")\n"); + return Column_Fields.toString(); + } } 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 a776aaff94..108fa07a17 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -30,6 +30,7 @@ import io.dataease.listener.util.CacheUtils; import io.dataease.provider.ProviderFactory; import io.dataease.provider.datasource.DatasourceProvider; import io.dataease.provider.QueryProvider; +import io.dataease.service.chart.util.ChartDataBuild; import io.dataease.service.dataset.DataSetTableFieldsService; import io.dataease.service.dataset.DataSetTableService; import io.dataease.service.dataset.DataSetTableUnionService; @@ -98,7 +99,7 @@ public class ChartViewService { Optional.ofNullable(chartView.getId()).ifPresent(id -> { CacheUtils.remove(JdbcConstants.VIEW_CACHE_KEY, id); }); - return getOne(chartView.getId(),"panel_edit"); + return getOne(chartView.getId(), "panel_edit"); } @@ -233,16 +234,16 @@ public class ChartViewService { } @Transactional - public ChartViewDTO getOne(String id,String queryFrom){ + public ChartViewDTO getOne(String id, String queryFrom) { ChartViewDTO result; //仪表板编辑页面 从缓存表中取数据 缓存表中没有数据则进行插入 - if(CommonConstants.VIEW_QUERY_FROM.PANEL_EDIT.equals(queryFrom)){ - result= extChartViewMapper.searchOneFromCache(id); - if(result == null){ + if (CommonConstants.VIEW_QUERY_FROM.PANEL_EDIT.equals(queryFrom)) { + result = extChartViewMapper.searchOneFromCache(id); + if (result == null) { extChartViewMapper.copyToCache(id); result = extChartViewMapper.searchOneFromCache(id); } - }else{ + } else { result = extChartViewMapper.searchOne(id); } return result; @@ -361,6 +362,13 @@ public class ChartViewService { } switch (view.getType()) { + case "label": + xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + yAxis = new ArrayList<>(); + if (CollectionUtils.isEmpty(xAxis)) { + return emptyChartViewDTO(view); + } + break; case "text": case "gauge": case "liquid": @@ -679,42 +687,46 @@ public class ChartViewService { Map mapChart = new HashMap<>(); if (StringUtils.equalsIgnoreCase(view.getRender(), "echarts")) { if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { - mapChart = transStackChartData(xAxis, yAxis, view, data, extStack, isDrill); + mapChart = ChartDataBuild.transStackChartData(xAxis, yAxis, view, data, extStack, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - mapChart = transScatterData(xAxis, yAxis, view, data, extBubble, isDrill); + mapChart = ChartDataBuild.transScatterData(xAxis, yAxis, view, data, extBubble, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "radar")) { - mapChart = transRadarChartData(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transRadarChartData(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "text") || StringUtils.containsIgnoreCase(view.getType(), "gauge") || StringUtils.equalsIgnoreCase("liquid", view.getType())) { - mapChart = transNormalChartData(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transNormalChartData(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "chart-mix")) { - mapChart = transMixChartData(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transMixChartData(xAxis, yAxis, view, data, isDrill); + } else if (StringUtils.containsIgnoreCase(view.getType(), "label")) { + mapChart = ChartDataBuild.transLabelChartData(xAxis, yAxis, view, data, isDrill); } else { - mapChart = transChartData(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transChartData(xAxis, yAxis, view, data, isDrill); } } else if (StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { if (StringUtils.containsIgnoreCase(view.getType(), "bar-stack")) { - mapChart = transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); + mapChart = ChartDataBuild.transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "line-stack")) { - mapChart = transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); + mapChart = ChartDataBuild.transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "scatter")) { - mapChart = transScatterDataAntV(xAxis, yAxis, view, data, extBubble, isDrill); + mapChart = ChartDataBuild.transScatterDataAntV(xAxis, yAxis, view, data, extBubble, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "radar")) { - mapChart = transRadarChartDataAntV(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transRadarChartDataAntV(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "text") || StringUtils.containsIgnoreCase(view.getType(), "gauge") || StringUtils.equalsIgnoreCase("liquid", view.getType())) { - mapChart = transNormalChartData(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transNormalChartData(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "chart-mix")) { - mapChart = transMixChartDataAntV(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transMixChartDataAntV(xAxis, yAxis, view, data, isDrill); + } else if (StringUtils.containsIgnoreCase(view.getType(), "label")) { + mapChart = ChartDataBuild.transLabelChartData(xAxis, yAxis, view, data, isDrill); } else { - mapChart = transChartDataAntV(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transChartDataAntV(xAxis, yAxis, view, data, isDrill); } } // table组件,明细表,也用于导出数据 - Map mapTableNormal = transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList); + Map mapTableNormal = ChartDataBuild.transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList); map.putAll(mapChart); map.putAll(mapTableNormal); @@ -884,852 +896,6 @@ public class ChartViewService { return result; } - // AntV - private Map transChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List datas = new ArrayList<>(); - for (int i1 = 0; i1 < data.size(); i1++) { - String[] row = data.get(i1); - - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(row[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(row[i]); - } else { - a.append(row[i]).append("\n"); - } - } - } - - if (StringUtils.containsIgnoreCase(view.getType(), "table")) { - for (int i = 0; i < xAxis.size() + yAxis.size(); i++) { - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - axisChartDataDTO.setField(a.toString()); - axisChartDataDTO.setName(a.toString()); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(row[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - if (j > -1) { - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - axisChartDataDTO.setCategory(yAxis.get(j).getName()); - } - datas.add(axisChartDataDTO); - } - } else { - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - axisChartDataDTO.setField(a.toString()); - axisChartDataDTO.setName(a.toString()); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(row[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - axisChartDataDTO.setCategory(yAxis.get(j).getName()); - datas.add(axisChartDataDTO); - } - } - } - map.put("datas", datas); - return map; - } - - // AntV柱状堆叠图 - private Map transStackChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, boolean isDrill) { - Map map = new HashMap<>(); - - List datas = new ArrayList<>(); - - if (CollectionUtils.isNotEmpty(extStack)) { - for (int i1 = 0; i1 < data.size(); i1++) { - String[] row = data.get(i1); - - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(row[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(row[i]); - } else { - a.append(row[i]).append("\n"); - } - } - } - axisChartDataDTO.setField(a.toString()); - axisChartDataDTO.setCategory(row[xAxis.size()]); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int k = 0; k < xAxis.size(); k++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(k).getId()); - chartDimensionDTO.setValue(row[k]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - if (CollectionUtils.isNotEmpty(yAxis)) { - int valueIndex = xAxis.size() + extStack.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(0).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(row[valueIndex]) ? null : new BigDecimal(row[valueIndex])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - } else { - axisChartDataDTO.setQuotaList(quotaList); - axisChartDataDTO.setValue(new BigDecimal(0)); - } - datas.add(axisChartDataDTO); - } - } else { - for (int i1 = 0; i1 < data.size(); i1++) { - String[] row = data.get(i1); - - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(row[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(row[i]); - } else { - a.append(row[i]).append("\n"); - } - } - } - - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - axisChartDataDTO.setField(a.toString()); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(row[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - axisChartDataDTO.setCategory(yAxis.get(j).getName()); - datas.add(axisChartDataDTO); - } - } - } - map.put("datas", datas); - return map; - } - - //AntV scatter - private Map transScatterDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extBubble, boolean isDrill) { - Map map = new HashMap<>(); - - List datas = new ArrayList<>(); - for (int i1 = 0; i1 < data.size(); i1++) { - String[] row = data.get(i1); - - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(row[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(row[i]); - } else { - a.append(row[i]).append("\n"); - } - } - } - - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - axisChartDataDTO.setField(a.toString()); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(row[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - axisChartDataDTO.setCategory(yAxis.get(j).getName()); - // pop - if (CollectionUtils.isNotEmpty(extBubble)) { - try { - axisChartDataDTO.setPopSize(StringUtils.isEmpty(row[xAxis.size() + yAxis.size()]) ? null : new BigDecimal(row[xAxis.size() + yAxis.size()])); - } catch (Exception e) { - axisChartDataDTO.setPopSize(new BigDecimal(0)); - } - } - datas.add(axisChartDataDTO); - } - } - map.put("datas", datas); - return map; - } - - // antv radar - private Map transRadarChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List datas = new ArrayList<>(); - for (int i1 = 0; i1 < data.size(); i1++) { - String[] row = data.get(i1); - - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(row[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(row[i]); - } else { - a.append(row[i]).append("\n"); - } - } - } - - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - axisChartDataDTO.setField(a.toString()); - axisChartDataDTO.setName(a.toString()); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(row[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - axisChartDataDTO.setCategory(yAxis.get(j).getName()); - datas.add(axisChartDataDTO); - } - } - map.put("datas", datas); - return map; - } - - // antV组合图形 - private Map transMixChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List series = new ArrayList<>(); - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(y.getChartType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (int i1 = 0; i1 < data.size(); i1++) { - String[] d = data.get(i1); - - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); - - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int ii = 0; ii < xAxis.size(); ii++) { - if (ii == xAxis.size() - 1) { - a.append(d[ii]); - } else { - a.append(d[ii]).append("\n"); - } - } - } - axisChartDataDTO.setName(a.toString()); - axisChartDataDTO.setField(a.toString()); - - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(d[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - series.get(j).getData().add(axisChartDataDTO); - } - } - - map.put("datas", series); - return map; - } - - // 基础图形 - private Map transChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List x = new ArrayList<>(); - List series = new ArrayList<>(); - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(view.getType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (int i1 = 0; i1 < data.size(); i1++) { - String[] d = data.get(i1); - - StringBuilder a = new StringBuilder(); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(d[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - series.get(j).getData().add(axisChartDataDTO); - } - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - } - - map.put("x", x); - map.put("series", series); - return map; - } - - // 组合图形 - private Map transMixChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List x = new ArrayList<>(); - List series = new ArrayList<>(); - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(y.getChartType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (int i1 = 0; i1 < data.size(); i1++) { - String[] d = data.get(i1); - - StringBuilder a = new StringBuilder(); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(d[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - series.get(j).getData().add(axisChartDataDTO); - } - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - } - - map.put("x", x); - map.put("series", series); - return map; - } - - // 常规图形 - private Map transNormalChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List x = new ArrayList<>(); - List series = new ArrayList<>(); - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(view.getType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (String[] d : data) { - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - int j = i - xAxis.size(); - try { - series.get(j).getData().add(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); - } catch (Exception e) { - series.get(j).getData().add(new BigDecimal(0)); - } - } - } - - map.put("x", x); - map.put("series", series); - return map; - } - - // radar图 - private Map transRadarChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { - Map map = new HashMap<>(); - - List x = new ArrayList<>(); - List series = new ArrayList<>(); - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(view.getType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (String[] d : data) { - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - int j = i - xAxis.size(); - try { - series.get(j).getData().add(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); - } catch (Exception e) { - series.get(j).getData().add(new BigDecimal(0)); - } - } - } - - map.put("x", x); - map.put("series", series); - return map; - } - - // 堆叠图 - private Map transStackChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, boolean isDrill) { - Map map = new HashMap<>(); - - List x = new ArrayList<>(); - List stack = new ArrayList<>(); - List series = new ArrayList<>(); - - if (CollectionUtils.isNotEmpty(extStack)) { - AxisChartDataDTO defaultAxisChartDataDTO = new AxisChartDataDTO(); - BigDecimal defaultValue = StringUtils.containsIgnoreCase(view.getType(), "line") ? new BigDecimal(0) : null; - defaultAxisChartDataDTO.setValue(defaultValue); - // 构建横轴 - for (String[] d : data) { - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - } - x = x.stream().distinct().collect(Collectors.toList()); - // 构建堆叠 - for (String[] d : data) { - stack.add(d[xAxis.size()]); - } - stack = stack.stream().distinct().collect(Collectors.toList()); - for (String s : stack) { - Series series1 = new Series(); - series1.setName(s); - series1.setType(view.getType()); - List list = new ArrayList<>(); - for (int i = 0; i < x.size(); i++) { - list.add(defaultAxisChartDataDTO); - } - series1.setData(list); - series.add(series1); - } - for (Series ss : series) { - for (int i = 0; i < x.size(); i++) { - for (String[] row : data) { - String stackColumn = row[xAxis.size()]; - if (StringUtils.equals(ss.getName(), stackColumn)) { - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(row[xAxis.size() - 1]); - } else { - for (int j = 0; j < xAxis.size(); j++) { - if (j == xAxis.size() - 1) { - a.append(row[j]); - } else { - a.append(row[j]).append("\n"); - } - } - } - if (StringUtils.equals(a.toString(), x.get(i))) { - if (row.length > xAxis.size() + extStack.size()) { - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); - - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(0).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - - for (int k = 0; k < xAxis.size(); k++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(k).getId()); - chartDimensionDTO.setValue(row[k]); - dimensionList.add(chartDimensionDTO); - } - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(extStack.get(0).getId()); - chartDimensionDTO.setValue(row[xAxis.size()]); - dimensionList.add(chartDimensionDTO); - axisChartDataDTO.setDimensionList(dimensionList); - - String s = row[xAxis.size() + extStack.size()]; - if (StringUtils.isNotEmpty(s)) { - axisChartDataDTO.setValue(new BigDecimal(s)); - ss.getData().set(i, axisChartDataDTO); - } - } - break; - } - } - } - } - } - } else { - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(view.getType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (int i1 = 0; i1 < data.size(); i1++) { - String[] d = data.get(i1); - - StringBuilder a = new StringBuilder(); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(d[j]); - dimensionList.add(chartDimensionDTO); - } - axisChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - axisChartDataDTO.setQuotaList(quotaList); - try { - axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); - } catch (Exception e) { - axisChartDataDTO.setValue(new BigDecimal(0)); - } - series.get(j).getData().add(axisChartDataDTO); - } - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - } - } - - map.put("x", x); - map.put("series", series); - return map; - } - - // 散点图 - private Map transScatterData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extBubble, boolean isDrill) { - Map map = new HashMap<>(); - - List x = new ArrayList<>(); - List series = new ArrayList<>(); - for (ChartViewFieldDTO y : yAxis) { - Series series1 = new Series(); - series1.setName(y.getName()); - series1.setType(view.getType()); - series1.setData(new ArrayList<>()); - series.add(series1); - } - for (int i1 = 0; i1 < data.size(); i1++) { - String[] d = data.get(i1); - - StringBuilder a = new StringBuilder(); - if (isDrill) { - a.append(d[xAxis.size() - 1]); - } else { - for (int i = 0; i < xAxis.size(); i++) { - if (i == xAxis.size() - 1) { - a.append(d[i]); - } else { - a.append(d[i]).append("\n"); - } - } - } - x.add(a.toString()); - for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { - List dimensionList = new ArrayList<>(); - List quotaList = new ArrayList<>(); - ScatterChartDataDTO scatterChartDataDTO = new ScatterChartDataDTO(); - - for (int j = 0; j < xAxis.size(); j++) { - ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); - chartDimensionDTO.setId(xAxis.get(j).getId()); - chartDimensionDTO.setValue(d[j]); - dimensionList.add(chartDimensionDTO); - } - scatterChartDataDTO.setDimensionList(dimensionList); - - int j = i - xAxis.size(); - ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); - chartQuotaDTO.setId(yAxis.get(j).getId()); - quotaList.add(chartQuotaDTO); - scatterChartDataDTO.setQuotaList(quotaList); - - if (CollectionUtils.isNotEmpty(extBubble) && extBubble.size() > 0) { - try { - scatterChartDataDTO.setValue(new Object[]{ - a.toString(), - StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i]), - StringUtils.isEmpty(d[xAxis.size() + yAxis.size()]) ? null : new BigDecimal(d[xAxis.size() + yAxis.size()]) - }); - } catch (Exception e) { - scatterChartDataDTO.setValue(new Object[]{a.toString(), new BigDecimal(0), new BigDecimal(0)}); - } - } else { - try { - scatterChartDataDTO.setValue(new Object[]{ - a.toString(), - StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i]) - }); - } catch (Exception e) { - scatterChartDataDTO.setValue(new Object[]{a.toString(), new BigDecimal(0)}); - } - } - series.get(j).getData().add(scatterChartDataDTO); - } - } - - map.put("x", x); - map.put("series", series); - return map; - } - - // 表格 - private Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, List desensitizationList) { - Map map = new TreeMap<>(); - List fields = new ArrayList<>(); - List> tableRow = new ArrayList<>(); - if (ObjectUtils.isNotEmpty(xAxis)) { - fields.addAll(xAxis); - } - if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { - if (ObjectUtils.isNotEmpty(extStack)) { - fields.addAll(extStack); - } - } - fields.addAll(yAxis); - data.forEach(ele -> { - Map d = new HashMap<>(); - for (int i = 0; i < fields.size(); i++) { - if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(fields.get(i).getDataeaseName())) { - d.put(fields.get(i).getDataeaseName(), ColumnPermissionConstants.Desensitization_desc); - continue; - } - - ChartViewFieldDTO chartViewFieldDTO = fields.get(i); - if (chartViewFieldDTO.getDeType() == 0 || chartViewFieldDTO.getDeType() == 1) { - d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? "" : ele[i]); - } else if (chartViewFieldDTO.getDeType() == 2 || chartViewFieldDTO.getDeType() == 3) { - d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? null : new BigDecimal(ele[i]).setScale(2, RoundingMode.HALF_UP)); - } - } - tableRow.add(d); - }); - map.put("fields", fields); - map.put("tableRow", tableRow); - return map; - } - private void checkName(ChartViewWithBLOBs chartView) { ChartViewExample chartViewExample = new ChartViewExample(); ChartViewExample.Criteria criteria = chartViewExample.createCriteria(); @@ -1786,7 +952,7 @@ public class ChartViewService { } // check permission - private void checkPermission(String needPermission, DataSetTableDTO table, Long userId) { + private void checkPermission(String needPermission, DataSetTableDTO table, Long userId) { if (ObjectUtils.isEmpty(table)) { throw new RuntimeException(Translator.get("i18n_dataset_delete")); } @@ -1799,11 +965,11 @@ public class ChartViewService { } } - public void initViewCache(String panelId){ + public void initViewCache(String panelId) { extChartViewMapper.deleteCacheWithPanel(panelId); } - public void resetViewCache (String viewId){ + public void resetViewCache(String viewId) { extChartViewMapper.deleteViewCache(viewId); extChartViewMapper.copyToCache(viewId); diff --git a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java new file mode 100644 index 0000000000..18d36bde28 --- /dev/null +++ b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -0,0 +1,894 @@ +package io.dataease.service.chart.util; + +import io.dataease.base.domain.ChartViewWithBLOBs; +import io.dataease.commons.constants.ColumnPermissionConstants; +import io.dataease.dto.chart.*; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.stream.Collectors; + +public class ChartDataBuild { + // AntV + public static Map transChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List datas = new ArrayList<>(); + for (int i1 = 0; i1 < data.size(); i1++) { + String[] row = data.get(i1); + + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(row[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(row[i]); + } else { + a.append(row[i]).append("\n"); + } + } + } + + if (StringUtils.containsIgnoreCase(view.getType(), "table")) { + for (int i = 0; i < xAxis.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + axisChartDataDTO.setField(a.toString()); + axisChartDataDTO.setName(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(row[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + if (j > -1) { + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + axisChartDataDTO.setCategory(yAxis.get(j).getName()); + } + datas.add(axisChartDataDTO); + } + } else { + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + axisChartDataDTO.setField(a.toString()); + axisChartDataDTO.setName(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(row[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + axisChartDataDTO.setCategory(yAxis.get(j).getName()); + datas.add(axisChartDataDTO); + } + } + } + map.put("datas", datas); + return map; + } + + // AntV柱状堆叠图 + public static Map transStackChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, boolean isDrill) { + Map map = new HashMap<>(); + + List datas = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(extStack)) { + for (int i1 = 0; i1 < data.size(); i1++) { + String[] row = data.get(i1); + + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(row[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(row[i]); + } else { + a.append(row[i]).append("\n"); + } + } + } + axisChartDataDTO.setField(a.toString()); + axisChartDataDTO.setCategory(row[xAxis.size()]); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int k = 0; k < xAxis.size(); k++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(k).getId()); + chartDimensionDTO.setValue(row[k]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + if (CollectionUtils.isNotEmpty(yAxis)) { + int valueIndex = xAxis.size() + extStack.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(0).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[valueIndex]) ? null : new BigDecimal(row[valueIndex])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + } else { + axisChartDataDTO.setQuotaList(quotaList); + axisChartDataDTO.setValue(new BigDecimal(0)); + } + datas.add(axisChartDataDTO); + } + } else { + for (int i1 = 0; i1 < data.size(); i1++) { + String[] row = data.get(i1); + + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(row[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(row[i]); + } else { + a.append(row[i]).append("\n"); + } + } + } + + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + axisChartDataDTO.setField(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(row[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + axisChartDataDTO.setCategory(yAxis.get(j).getName()); + datas.add(axisChartDataDTO); + } + } + } + map.put("datas", datas); + return map; + } + + //AntV scatter + public static Map transScatterDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extBubble, boolean isDrill) { + Map map = new HashMap<>(); + + List datas = new ArrayList<>(); + for (int i1 = 0; i1 < data.size(); i1++) { + String[] row = data.get(i1); + + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(row[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(row[i]); + } else { + a.append(row[i]).append("\n"); + } + } + } + + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + axisChartDataDTO.setField(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(row[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + axisChartDataDTO.setCategory(yAxis.get(j).getName()); + // pop + if (CollectionUtils.isNotEmpty(extBubble)) { + try { + axisChartDataDTO.setPopSize(StringUtils.isEmpty(row[xAxis.size() + yAxis.size()]) ? null : new BigDecimal(row[xAxis.size() + yAxis.size()])); + } catch (Exception e) { + axisChartDataDTO.setPopSize(new BigDecimal(0)); + } + } + datas.add(axisChartDataDTO); + } + } + map.put("datas", datas); + return map; + } + + // antv radar + public static Map transRadarChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List datas = new ArrayList<>(); + for (int i1 = 0; i1 < data.size(); i1++) { + String[] row = data.get(i1); + + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(row[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(row[i]); + } else { + a.append(row[i]).append("\n"); + } + } + } + + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + axisChartDataDTO.setField(a.toString()); + axisChartDataDTO.setName(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(row[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(row[i]) ? null : new BigDecimal(row[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + axisChartDataDTO.setCategory(yAxis.get(j).getName()); + datas.add(axisChartDataDTO); + } + } + map.put("datas", datas); + return map; + } + + // antV组合图形 + public static Map transMixChartDataAntV(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(y.getChartType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); + + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int ii = 0; ii < xAxis.size(); ii++) { + if (ii == xAxis.size() - 1) { + a.append(d[ii]); + } else { + a.append(d[ii]).append("\n"); + } + } + } + axisChartDataDTO.setName(a.toString()); + axisChartDataDTO.setField(a.toString()); + + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + series.get(j).getData().add(axisChartDataDTO); + } + } + + map.put("datas", series); + return map; + } + + // 基础图形 + public static Map transChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + StringBuilder a = new StringBuilder(); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + series.get(j).getData().add(axisChartDataDTO); + } + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // 组合图形 + public static Map transMixChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(y.getChartType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + StringBuilder a = new StringBuilder(); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + series.get(j).getData().add(axisChartDataDTO); + } + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // 文本卡图形 + public static Map transLabelChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List series = new ArrayList<>(); + Series series1 = new Series(); + series1.setName(xAxis.get(0).getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + for (String[] d : data) { + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + series.get(0).getData().add(a.toString()); + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // 常规图形 + public static Map transNormalChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (String[] d : data) { + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + int j = i - xAxis.size(); + try { + series.get(j).getData().add(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); + } catch (Exception e) { + series.get(j).getData().add(new BigDecimal(0)); + } + } + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // radar图 + public static Map transRadarChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (String[] d : data) { + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + int j = i - xAxis.size(); + try { + series.get(j).getData().add(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); + } catch (Exception e) { + series.get(j).getData().add(new BigDecimal(0)); + } + } + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // 堆叠图 + public static Map transStackChartData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List stack = new ArrayList<>(); + List series = new ArrayList<>(); + + if (CollectionUtils.isNotEmpty(extStack)) { + AxisChartDataDTO defaultAxisChartDataDTO = new AxisChartDataDTO(); + BigDecimal defaultValue = StringUtils.containsIgnoreCase(view.getType(), "line") ? new BigDecimal(0) : null; + defaultAxisChartDataDTO.setValue(defaultValue); + // 构建横轴 + for (String[] d : data) { + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + } + x = x.stream().distinct().collect(Collectors.toList()); + // 构建堆叠 + for (String[] d : data) { + stack.add(d[xAxis.size()]); + } + stack = stack.stream().distinct().collect(Collectors.toList()); + for (String s : stack) { + Series series1 = new Series(); + series1.setName(s); + series1.setType(view.getType()); + List list = new ArrayList<>(); + for (int i = 0; i < x.size(); i++) { + list.add(defaultAxisChartDataDTO); + } + series1.setData(list); + series.add(series1); + } + for (Series ss : series) { + for (int i = 0; i < x.size(); i++) { + for (String[] row : data) { + String stackColumn = row[xAxis.size()]; + if (StringUtils.equals(ss.getName(), stackColumn)) { + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(row[xAxis.size() - 1]); + } else { + for (int j = 0; j < xAxis.size(); j++) { + if (j == xAxis.size() - 1) { + a.append(row[j]); + } else { + a.append(row[j]).append("\n"); + } + } + } + if (StringUtils.equals(a.toString(), x.get(i))) { + if (row.length > xAxis.size() + extStack.size()) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(0).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + + for (int k = 0; k < xAxis.size(); k++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(k).getId()); + chartDimensionDTO.setValue(row[k]); + dimensionList.add(chartDimensionDTO); + } + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(extStack.get(0).getId()); + chartDimensionDTO.setValue(row[xAxis.size()]); + dimensionList.add(chartDimensionDTO); + axisChartDataDTO.setDimensionList(dimensionList); + + String s = row[xAxis.size() + extStack.size()]; + if (StringUtils.isNotEmpty(s)) { + axisChartDataDTO.setValue(new BigDecimal(s)); + ss.getData().set(i, axisChartDataDTO); + } + } + break; + } + } + } + } + } + } else { + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + StringBuilder a = new StringBuilder(); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + AxisChartDataDTO axisChartDataDTO = new AxisChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + axisChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + axisChartDataDTO.setQuotaList(quotaList); + try { + axisChartDataDTO.setValue(StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i])); + } catch (Exception e) { + axisChartDataDTO.setValue(new BigDecimal(0)); + } + series.get(j).getData().add(axisChartDataDTO); + } + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + } + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // 散点图 + public static Map transScatterData(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extBubble, boolean isDrill) { + Map map = new HashMap<>(); + + List x = new ArrayList<>(); + List series = new ArrayList<>(); + for (ChartViewFieldDTO y : yAxis) { + Series series1 = new Series(); + series1.setName(y.getName()); + series1.setType(view.getType()); + series1.setData(new ArrayList<>()); + series.add(series1); + } + for (int i1 = 0; i1 < data.size(); i1++) { + String[] d = data.get(i1); + + StringBuilder a = new StringBuilder(); + if (isDrill) { + a.append(d[xAxis.size() - 1]); + } else { + for (int i = 0; i < xAxis.size(); i++) { + if (i == xAxis.size() - 1) { + a.append(d[i]); + } else { + a.append(d[i]).append("\n"); + } + } + } + x.add(a.toString()); + for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) { + List dimensionList = new ArrayList<>(); + List quotaList = new ArrayList<>(); + ScatterChartDataDTO scatterChartDataDTO = new ScatterChartDataDTO(); + + for (int j = 0; j < xAxis.size(); j++) { + ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO(); + chartDimensionDTO.setId(xAxis.get(j).getId()); + chartDimensionDTO.setValue(d[j]); + dimensionList.add(chartDimensionDTO); + } + scatterChartDataDTO.setDimensionList(dimensionList); + + int j = i - xAxis.size(); + ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO(); + chartQuotaDTO.setId(yAxis.get(j).getId()); + quotaList.add(chartQuotaDTO); + scatterChartDataDTO.setQuotaList(quotaList); + + if (CollectionUtils.isNotEmpty(extBubble) && extBubble.size() > 0) { + try { + scatterChartDataDTO.setValue(new Object[]{ + a.toString(), + StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i]), + StringUtils.isEmpty(d[xAxis.size() + yAxis.size()]) ? null : new BigDecimal(d[xAxis.size() + yAxis.size()]) + }); + } catch (Exception e) { + scatterChartDataDTO.setValue(new Object[]{a.toString(), new BigDecimal(0), new BigDecimal(0)}); + } + } else { + try { + scatterChartDataDTO.setValue(new Object[]{ + a.toString(), + StringUtils.isEmpty(d[i]) ? null : new BigDecimal(d[i]) + }); + } catch (Exception e) { + scatterChartDataDTO.setValue(new Object[]{a.toString(), new BigDecimal(0)}); + } + } + series.get(j).getData().add(scatterChartDataDTO); + } + } + + map.put("x", x); + map.put("series", series); + return map; + } + + // 表格 + public static Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, List desensitizationList) { + Map map = new TreeMap<>(); + List fields = new ArrayList<>(); + List> tableRow = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(xAxis)) { + fields.addAll(xAxis); + } + if (StringUtils.containsIgnoreCase(view.getType(), "stack")) { + if (ObjectUtils.isNotEmpty(extStack)) { + fields.addAll(extStack); + } + } + fields.addAll(yAxis); + data.forEach(ele -> { + Map d = new HashMap<>(); + for (int i = 0; i < fields.size(); i++) { + if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(fields.get(i).getDataeaseName())) { + d.put(fields.get(i).getDataeaseName(), ColumnPermissionConstants.Desensitization_desc); + continue; + } + + ChartViewFieldDTO chartViewFieldDTO = fields.get(i); + if (chartViewFieldDTO.getDeType() == 0 || chartViewFieldDTO.getDeType() == 1) { + d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? "" : ele[i]); + } else if (chartViewFieldDTO.getDeType() == 2 || chartViewFieldDTO.getDeType() == 3) { + d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? null : new BigDecimal(ele[i]).setScale(2, RoundingMode.HALF_UP)); + } + } + tableRow.add(d); + }); + map.put("fields", fields); + map.put("tableRow", tableRow); + return map; + } +} 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 64ade01908..67b2d1be13 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -551,7 +551,7 @@ public class DataSetTableService { } } else { // check doris table - if (!checkDorisTableIsExists(dataSetTableRequest.getId())) { + if (!checkEngineTableIsExists(dataSetTableRequest.getId())) { throw new RuntimeException(Translator.get("i18n_data_not_sync")); } Datasource ds = engineService.getDeEngine(); @@ -620,7 +620,7 @@ public class DataSetTableService { } } else { // check doris table - if (!checkDorisTableIsExists(dataSetTableRequest.getId())) { + if (!checkEngineTableIsExists(dataSetTableRequest.getId())) { throw new RuntimeException(Translator.get("i18n_data_not_sync")); } Datasource ds = engineService.getDeEngine(); @@ -648,7 +648,7 @@ public class DataSetTableService { } } } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) { - if (!checkDorisTableIsExists(dataSetTableRequest.getId())) { + if (!checkEngineTableIsExists(dataSetTableRequest.getId())) { throw new RuntimeException(Translator.get("i18n_data_not_sync")); } @@ -2167,12 +2167,12 @@ public class DataSetTableService { return filePath; } - public Boolean checkDorisTableIsExists(String id) throws Exception { - Datasource dorisDatasource = engineService.getDeEngine(); + public Boolean checkEngineTableIsExists(String id) throws Exception { + Datasource engine = engineService.getDeEngine(); JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); DatasourceRequest datasourceRequest = new DatasourceRequest(); - datasourceRequest.setDatasource(dorisDatasource); - QueryProvider qp = ProviderFactory.getQueryProvider(dorisDatasource.getType()); + datasourceRequest.setDatasource(engine); + QueryProvider qp = ProviderFactory.getQueryProvider(engine.getType()); datasourceRequest.setQuery(qp.searchTable(TableUtils.tableName(id))); List data = jdbcProvider.getData(datasourceRequest); return CollectionUtils.isNotEmpty(data); diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 9795f86261..e91982aa8d 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -445,6 +445,7 @@ public class ExtractDataService { List dataList = result.get("dataList"); if (engineService.isSimpleMode()) { extractDataForSimpleMode(extractType, datasetTable.getId(), dataList); + return; } Datasource engine = engineService.getDeEngine(); @@ -712,7 +713,9 @@ public class ExtractDataService { for (ExcelSheetData sheet : excelXlsxReader.totalSheets) { if (sheet.getExcelLable().equalsIgnoreCase(excelSheetData.getExcelLable())) { for (List dataItem : sheet.getData()) { - data.add(dataItem.toArray(new String[dataItem.size()])); + if(dataItem.size()>0){ + data.add(dataItem.toArray(new String[dataItem.size()])); + } } } } diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index 0f3b597bcc..73e91e0ae1 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -323,7 +323,6 @@ public class DatasourceService { List datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample()); datasources.forEach(datasource -> { commonThreadPool.addTask(()->{ - System.out.println(System.currentTimeMillis()); try { handleConnectionPool(datasource, "add"); } catch (Exception e) { diff --git a/backend/src/main/java/io/dataease/service/engine/EngineService.java b/backend/src/main/java/io/dataease/service/engine/EngineService.java index 627c67e311..181d1acc6b 100644 --- a/backend/src/main/java/io/dataease/service/engine/EngineService.java +++ b/backend/src/main/java/io/dataease/service/engine/EngineService.java @@ -31,7 +31,7 @@ public class EngineService { private DeEngineMapper deEngineMapper; @Resource private DatasourceService datasource; - static private Datasource ds = new Datasource(); + static private Datasource ds = null; public Boolean isLocalMode(){ @@ -59,6 +59,9 @@ public class EngineService { } public ResultHolder validate(DatasourceDTO datasource) throws Exception { + if(StringUtils.isEmpty(datasource.getType()) || StringUtils.isEmpty(datasource.getConfiguration())){ + throw new Exception("未完整设置数据引擎"); + } try { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); @@ -78,13 +81,22 @@ public class EngineService { deEngineMapper.updateByPrimaryKeyWithBLOBs(engine); } datasource.handleConnectionPool(this.ds, "delete"); - BeanUtils.copyBean(this.ds, engine); + setDs(engine); datasource.handleConnectionPool(this.ds, "add"); return ResultHolder.success(engine); } + private void setDs(DeEngine engine){ + if(this.ds == null){ + this.ds = new Datasource(); + BeanUtils.copyBean(this.ds, engine); + }else { + BeanUtils.copyBean(this.ds, engine); + } + } + public Datasource getDeEngine() throws Exception{ - if (this.ds != null || StringUtils.isNotEmpty(ds.getType())) { + if (this.ds != null) { return this.ds; } if(isLocalMode()){ @@ -97,21 +109,23 @@ public class EngineService { jsonObject.put("port", env.getProperty("doris.port", "9030")); jsonObject.put("httpPort", env.getProperty("doris.httpPort", "8030")); - Datasource datasource = new Datasource(); - datasource.setId("doris"); - datasource.setName("doris"); - datasource.setDesc("doris"); - datasource.setType("engine_doris"); - datasource.setConfiguration(jsonObject.toJSONString()); - this.ds = datasource; - } - if(isSimpleMode()){ + DeEngine engine = new DeEngine(); + engine.setId("doris"); + engine.setName("doris"); + engine.setDesc("doris"); + engine.setType("engine_doris"); + engine.setConfiguration(jsonObject.toJSONString()); + setDs(engine); + }else { List deEngines = deEngineMapper.selectByExampleWithBLOBs(new DeEngineExample()); if(CollectionUtils.isEmpty(deEngines)){ throw new Exception("未设置数据引擎"); } - BeanUtils.copyBean(this.ds, deEngines.get(0)); + setDs(deEngines.get(0)); } +// if(isSimpleMode()){ +// +// } //TODO cluster mode return this.ds; diff --git a/frontend/src/views/chart/components/normal/LabelNormalText.vue b/frontend/src/views/chart/components/normal/LabelNormalText.vue index cd4eb3e6d1..9ee8d1b7dd 100644 --- a/frontend/src/views/chart/components/normal/LabelNormalText.vue +++ b/frontend/src/views/chart/components/normal/LabelNormalText.vue @@ -2,13 +2,13 @@

{{ chart.title }}

-

- {{ chart.data.datas[0].name }} +

+ {{ chart.data.series[0].data[0] }}

diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index 000ad09c5c..5da8ba600b 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -1,7 +1,13 @@