From d50c0a1d8fc34a980bb7bf1f7152d362452ea75a Mon Sep 17 00:00:00 2001 From: junjun Date: Thu, 15 Sep 2022 17:45:47 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=95=B0=E6=8D=AE=E9=9B=86=E4=BA=A4=E4=BA=92=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/DataSetTableController.java | 30 ++++-- .../dataset/DataSetTableTaskController.java | 10 +- .../service/dataset/DataSetTableService.java | 97 +++++++++++++++++-- 3 files changed, 119 insertions(+), 18 deletions(-) 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 b01b6bea37..aca169acb0 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableController.java @@ -70,11 +70,11 @@ public class DataSetTableController { @ApiOperation("修改") @PostMapping("alter") @DeLog( - operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, - sourcetype = SysLogConstants.SOURCE_TYPE.DATASET, - value = "id", - positionIndex = 0, - positionKey = "sceneId" + operatetype = SysLogConstants.OPERATE_TYPE.MODIFY, + sourcetype = SysLogConstants.SOURCE_TYPE.DATASET, + value = "id", + positionIndex = 0, + positionKey = "sceneId" ) public void alter(@RequestBody DataSetTableRequest request) throws Exception { dataSetTableService.alter(request); @@ -135,6 +135,16 @@ public class DataSetTableController { return dataSetTableService.getPreviewData(dataSetTableRequest, page, pageSize, null); } + @ApiOperation("db数据库表预览数据") + @PostMapping("dbPreview") + @DePermissions(value = { + @DePermission(type = DePermissionType.DATASET, value = "id", level = ResourceAuthLevel.DATASET_LEVEL_USE), + @DePermission(type = DePermissionType.DATASOURCE, value = "dataSourceId", level = ResourceAuthLevel.DATASOURCE_LEVEL_USE) + }, logical = Logical.AND) + public Map getDBPreview(@RequestBody DataSetTableRequest dataSetTableRequest) throws Exception { + return dataSetTableService.getDBPreview(dataSetTableRequest); + } + @ApiOperation("根据sql查询预览数据") @PostMapping("sqlPreview") @DePermissions(value = { @@ -212,7 +222,13 @@ public class DataSetTableController { @ApiOperation("根据仪表板视图ID查询数据集变量") @PostMapping("/paramsWithIds/{type}") - List paramsWithIds(@PathVariable String type, @RequestBody List viewIds){ + List paramsWithIds(@PathVariable String type, @RequestBody List viewIds) { return dataSetTableService.paramsWithIds(type, viewIds); - }; + } + + @ApiOperation("根据数据集文件夹ID查询数据集名称") + @PostMapping("/getDatasetNameFromGroup/{sceneId}") + public List getDatasetNameFromGroup(@PathVariable String sceneId) { + return dataSetTableService.getDatasetNameFromGroup(sceneId); + } } diff --git a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java index 14944e9f4e..00910fd834 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableTaskController.java @@ -4,7 +4,6 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.auth.annotation.DePermission; -import io.dataease.plugins.common.base.domain.DatasetTableTask; import io.dataease.commons.constants.DePermissionType; import io.dataease.commons.constants.ResourceAuthLevel; import io.dataease.commons.utils.PageUtils; @@ -12,6 +11,7 @@ import io.dataease.commons.utils.Pager; import io.dataease.controller.request.dataset.DataSetTaskRequest; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.dto.dataset.DataSetTaskDTO; +import io.dataease.plugins.common.base.domain.DatasetTableTask; import io.dataease.service.dataset.DataSetTableTaskLogService; import io.dataease.service.dataset.DataSetTableTaskService; import io.swagger.annotations.Api; @@ -62,6 +62,14 @@ public class DataSetTableTaskController { return dataSetTableTaskService.list(datasetTableTask); } + @DePermission(type = DePermissionType.DATASET, value = "tableId", level = ResourceAuthLevel.DATASET_LEVEL_MANAGE) + @ApiOperation("分页查询") + @PostMapping("list/{goPage}/{pageSize}") + public Pager> list(@RequestBody DatasetTableTask datasetTableTask, @PathVariable int goPage, @PathVariable int pageSize) { + Page page = PageHelper.startPage(goPage, pageSize, true); + return PageUtils.setPageInfo(page, dataSetTableTaskService.list(datasetTableTask)); + } + @ApiOperation("分页查询") @PostMapping("/pageList/{goPage}/{pageSize}") public Pager> taskList(@PathVariable int goPage, @PathVariable int pageSize, @RequestBody BaseGridRequest request) { 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 ebc68f3e43..b0503f299c 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -153,6 +153,8 @@ public class DataSetTableService { @DeCleaner(value = DePermissionType.DATASET, key = "sceneId") public void batchInsert(List datasetTable) throws Exception { + // 保存之前校验table名称 + checkNames(datasetTable); for (DataSetTableRequest table : datasetTable) { save(table); // 清理权限缓存 @@ -382,6 +384,13 @@ public class DataSetTableService { } } + public List getDatasetNameFromGroup(String sceneId) { + DatasetTableExample example = new DatasetTableExample(); + example.createCriteria().andSceneIdEqualTo(sceneId); + List datasetTables = datasetTableMapper.selectByExample(example); + return datasetTables.stream().map(DatasetTable::getName).collect(Collectors.toList()); + } + public List list(DataSetTableRequest dataSetTableRequest) { dataSetTableRequest.setUserId(String.valueOf(AuthUtils.getUser().getUserId())); dataSetTableRequest.setTypeFilter(dataSetTableRequest.getTypeFilter()); @@ -936,7 +945,7 @@ public class DataSetTableService { return new ArrayList<>(); } - if(!Arrays.asList("DATE", "TEXT", "NUM").contains(type)){ + if (!Arrays.asList("DATE", "TEXT", "NUM").contains(type)) { return new ArrayList<>(); } ChartViewExample chartViewExample = new ChartViewExample(); @@ -965,24 +974,28 @@ public class DataSetTableService { } } } - switch (type){ + switch (type) { case "DATE": - sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("DATETIME")).collect(Collectors.toList()); + sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("DATETIME")).collect(Collectors.toList()); sqlVariableDetails.forEach(item -> { - if(item.getType().size()> 1){ + if (item.getType().size() > 1) { item.setAlias(item.getVariableName() + "[" + item.getType().get(1) + "]"); - }else { + } else { item.setAlias(item.getVariableName()); } }); break; case "TEXT": - sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("TEXT")).collect(Collectors.toList()); - sqlVariableDetails.forEach(item -> {item.setAlias(item.getVariableName());}); + sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("TEXT")).collect(Collectors.toList()); + sqlVariableDetails.forEach(item -> { + item.setAlias(item.getVariableName()); + }); break; case "NUM": - sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("LONG") || item.getType().get(0).contains("DOUBLE")).collect(Collectors.toList()); - sqlVariableDetails.forEach(item -> {item.setAlias(item.getVariableName());}); + sqlVariableDetails = sqlVariableDetails.stream().filter(item -> item.getType().get(0).contains("LONG") || item.getType().get(0).contains("DOUBLE")).collect(Collectors.toList()); + sqlVariableDetails.forEach(item -> { + item.setAlias(item.getVariableName()); + }); break; } return sqlVariableDetails; @@ -1072,7 +1085,7 @@ public class DataSetTableService { return handleWith(plainSelect, select); } - private String handleWith(PlainSelect plainSelect, Select select)throws Exception{ + private String handleWith(PlainSelect plainSelect, Select select) throws Exception { StringBuilder builder = new StringBuilder(); if (CollectionUtils.isNotEmpty(select.getWithItemsList())) { builder.append("WITH"); @@ -1089,6 +1102,45 @@ public class DataSetTableService { builder.append(" " + plainSelect); return builder.toString(); } + + public Map getDBPreview(DataSetTableRequest dataSetTableRequest) throws Exception { + Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); + if (ds == null) { + throw new Exception(Translator.get("i18n_invalid_ds")); + } + Provider datasourceProvider = ProviderFactory.getProvider(ds.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(ds); + DataTableInfoDTO dataTableInfo = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class); + String sql = "SELECT * FROM " + dataTableInfo.getTable(); + QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); + String sqlAsTable = qp.createSQLPreview(sql, null); + datasourceRequest.setQuery(sqlAsTable); + Map result = datasourceProvider.fetchResultAndField(datasourceRequest); + List data = result.get("dataList"); + List fields = result.get("fieldList"); + String[] fieldArray = fields.stream().map(TableField::getFieldName).toArray(String[]::new); + if (checkIsRepeat(fieldArray)) { + DataEaseException.throwException(Translator.get("i18n_excel_field_repeat")); + } + List> jsonArray = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(data)) { + jsonArray = data.stream().map(ele -> { + Map map = new HashMap<>(); + for (int i = 0; i < ele.length; i++) { + map.put(fieldArray[i], ele[i]); + } + return map; + }).collect(Collectors.toList()); + } + + Map map = new HashMap<>(); + map.put("fields", fields); + map.put("data", jsonArray); + + return map; + } + public Map getSQLPreview(DataSetTableRequest dataSetTableRequest) throws Exception { Datasource ds = datasourceMapper.selectByPrimaryKey(dataSetTableRequest.getDataSourceId()); if (ds == null) { @@ -2090,6 +2142,31 @@ public class DataSetTableService { } } + private void checkNames(List datasetTable) { + if (CollectionUtils.isEmpty(datasetTable)) { + return; + } + Set nameSet = new HashSet<>(); + for (DataSetTableRequest table : datasetTable) { + nameSet.add(table.getName()); + } + if (nameSet.size() != datasetTable.size()) { + throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group")); + } + DatasetTableExample datasetTableExample = new DatasetTableExample(); + DatasetTableExample.Criteria criteria = datasetTableExample.createCriteria(); + if (StringUtils.isNotEmpty(datasetTable.get(0).getSceneId())) { + criteria.andSceneIdEqualTo(datasetTable.get(0).getSceneId()); + } + if (CollectionUtils.isNotEmpty(nameSet)) { + criteria.andNameIn(new ArrayList<>(nameSet)); + } + List list = datasetTableMapper.selectByExample(datasetTableExample); + if (list.size() > 0) { + throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group")); + } + } + public DataSetDetail getDatasetDetail(String id) { DataSetDetail dataSetDetail = new DataSetDetail(); DatasetTable table = datasetTableMapper.selectByPrimaryKey(id);