diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.java b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.java index 0c526dd442..ec186c911e 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.java +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.java @@ -4,7 +4,10 @@ import io.dataease.controller.request.dataset.DataSetGroupRequest; import io.dataease.dto.dataset.DataSetGroupDTO; import java.util.List; +import java.util.Map; public interface ExtDataSetGroupMapper { List search(DataSetGroupRequest ChartGroup); + + Map searchIds(String id, String type); } diff --git a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.xml b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.xml index a94956c4f5..5a881f4bf2 100644 --- a/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/ext/ExtDataSetGroupMapper.xml @@ -41,7 +41,9 @@ order by ${sort} + - + diff --git a/backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java b/backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java index ec91fbdce7..d6411e3b96 100644 --- a/backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java +++ b/backend/src/main/java/io/dataease/job/sechedule/ExtractDataJob.java @@ -13,7 +13,6 @@ public class ExtractDataJob extends DeScheduleJob{ extractDataService = (ExtractDataService) CommonBeanFactory.getBean(ExtractDataService.class); } - @Override void businessExecute(JobExecutionContext context) { extractDataService.extractData(datasetTableId, taskId, updateType); diff --git a/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java b/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java index c5dd35107e..94792dec80 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartGroupService.java @@ -3,6 +3,7 @@ package io.dataease.service.chart; import io.dataease.base.domain.*; import io.dataease.base.mapper.ChartGroupMapper; import io.dataease.base.mapper.ext.ExtChartGroupMapper; +import io.dataease.base.mapper.ext.ExtDataSetGroupMapper; import io.dataease.commons.utils.AuthUtils; import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.TreeUtils; @@ -11,12 +12,14 @@ import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.chart.ChartGroupDTO; import io.dataease.i18n.Translator; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @@ -27,9 +30,10 @@ public class ChartGroupService { private ChartGroupMapper chartGroupMapper; @Resource private ChartViewService chartViewService; - @Resource private ExtChartGroupMapper extChartGroupMapper; + @Resource + private ExtDataSetGroupMapper extDataSetGroupMapper; public ChartGroupDTO save(ChartGroup chartGroup) { checkName(chartGroup); @@ -51,9 +55,14 @@ public class ChartGroupService { ChartGroup cg = chartGroupMapper.selectByPrimaryKey(id); ChartGroupRequest ChartGroup = new ChartGroupRequest(); BeanUtils.copyBean(ChartGroup, cg); - List tree = tree(ChartGroup); + Map stringStringMap = extDataSetGroupMapper.searchIds(id, "chart"); + String[] split = stringStringMap.get("ids").split(","); List ids = new ArrayList<>(); - getAllId(tree, ids); + for (String dsId : split) { + if (StringUtils.isNotEmpty(dsId)) { + ids.add(dsId); + } + } ChartGroupExample ChartGroupExample = new ChartGroupExample(); ChartGroupExample.createCriteria().andIdIn(ids); chartGroupMapper.deleteByExample(ChartGroupExample); @@ -104,6 +113,9 @@ public class ChartGroupService { if (StringUtils.isNotEmpty(chartGroup.getId())) { criteria.andIdNotEqualTo(chartGroup.getId()); } + if (ObjectUtils.isNotEmpty(chartGroup.getLevel())) { + criteria.andLevelEqualTo(chartGroup.getLevel()); + } List list = chartGroupMapper.selectByExample(chartGroupExample); if (list.size() > 0) { throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group")); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java index d3b31b2b58..9de794919f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -14,15 +14,13 @@ import io.dataease.dto.dataset.DataSetGroupDTO; import io.dataease.dto.dataset.DataSetTableDTO; import io.dataease.i18n.Translator; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; /** @@ -59,9 +57,14 @@ public class DataSetGroupService { DatasetGroup dg = datasetGroupMapper.selectByPrimaryKey(id); DataSetGroupRequest datasetGroup = new DataSetGroupRequest(); BeanUtils.copyBean(datasetGroup, dg); - List tree = tree(datasetGroup); + Map stringStringMap = extDataSetGroupMapper.searchIds(id, "dataset"); + String[] split = stringStringMap.get("ids").split(","); List ids = new ArrayList<>(); - getAllId(tree, ids); + for (String dsId : split) { + if (StringUtils.isNotEmpty(dsId)) { + ids.add(dsId); + } + } DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); datasetGroupExample.createCriteria().andIdIn(ids); datasetGroupMapper.deleteByExample(datasetGroupExample); @@ -117,6 +120,9 @@ public class DataSetGroupService { if (StringUtils.isNotEmpty(datasetGroup.getId())) { criteria.andIdNotEqualTo(datasetGroup.getId()); } + if (ObjectUtils.isNotEmpty(datasetGroup.getLevel())) { + criteria.andLevelEqualTo(datasetGroup.getLevel()); + } List list = datasetGroupMapper.selectByExample(datasetGroupExample); if (list.size() > 0) { throw new RuntimeException(Translator.get("i18n_name_cant_repeat_same_group")); 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 efe1615205..4283b3aae7 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -7,6 +7,7 @@ import io.dataease.base.mapper.DatasetTableIncrementalConfigMapper; import io.dataease.base.mapper.DatasetTableMapper; import io.dataease.base.mapper.DatasourceMapper; import io.dataease.base.mapper.ext.ExtDataSetTableMapper; +import io.dataease.commons.constants.JobStatus; import io.dataease.commons.utils.*; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.datasource.dto.TableFiled; @@ -71,6 +72,8 @@ public class DataSetTableService { private DatasetTableIncrementalConfigMapper datasetTableIncrementalConfigMapper; @Resource private DataSetTableUnionService dataSetTableUnionService; + @Resource + private DataSetTableTaskLogService dataSetTableTaskLogService; @Value("${upload.file.path}") private String path; @@ -125,7 +128,11 @@ public class DataSetTableService { dataSetTableFieldsService.deleteByTableId(id); // 删除同步任务 dataSetTableTaskService.deleteByTableId(id); - deleteDorisTable(id); + try { + deleteDorisTable(id); + } catch (Exception e) { + + } } private void deleteDorisTable(String datasetId) throws Exception { @@ -256,6 +263,16 @@ public class DataSetTableService { e.printStackTrace(); } } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), "excel")) { + List datasetTableTaskLogs = dataSetTableTaskLogService.getByTableId(datasetTable.getId()); + if (CollectionUtils.isEmpty(datasetTableTaskLogs)) { + throw new Exception("no records"); + } + if (datasetTableTaskLogs.get(0).getStatus().equalsIgnoreCase(JobStatus.Underway.name())) { + throw new Exception(Translator.get("i18n_processing_data")); + } + if (datasetTableTaskLogs.get(0).getStatus().equalsIgnoreCase(JobStatus.Error.name())) { + throw new Exception("Failed to extract data: " + datasetTableTaskLogs.get(0).getInfo()); + } Datasource ds = (Datasource) CommonBeanFactory.getBean("DorisDatasource"); JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); DatasourceRequest datasourceRequest = new DatasourceRequest(); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java index 9f1054db50..b0072fc786 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableTaskLogService.java @@ -49,4 +49,10 @@ public class DataSetTableTaskLogService { datasetTableTaskLogMapper.deleteByExample(datasetTableTaskLogExample); } + public List getByTableId(String datasetId){ + DatasetTableTaskLogExample datasetTableTaskLogExample = new DatasetTableTaskLogExample(); + DatasetTableTaskLogExample.Criteria criteria = datasetTableTaskLogExample.createCriteria(); + criteria.andTableIdEqualTo(datasetId); + return datasetTableTaskLogMapper.selectByExampleWithBLOBs(datasetTableTaskLogExample); + } } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java index 0c27d50439..12a8004b7a 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableUnionService.java @@ -1,10 +1,13 @@ package io.dataease.service.dataset; import io.dataease.base.domain.DatasetTableUnion; +import io.dataease.base.domain.DatasetTableUnionExample; import io.dataease.base.mapper.DatasetTableUnionMapper; import io.dataease.base.mapper.ext.ExtDatasetTableUnionMapper; import io.dataease.commons.utils.AuthUtils; import io.dataease.dto.dataset.DataSetTableUnionDTO; +import io.dataease.i18n.Translator; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -28,6 +31,7 @@ public class DataSetTableUnionService { private ExtDatasetTableUnionMapper extDatasetTableUnionMapper; public DatasetTableUnion save(DatasetTableUnion datasetTableUnion) { + checkUnion(datasetTableUnion); if (StringUtils.isEmpty(datasetTableUnion.getId())) { datasetTableUnion.setId(UUID.randomUUID().toString()); datasetTableUnion.setCreateBy(AuthUtils.getUser().getUsername()); @@ -71,4 +75,30 @@ public class DataSetTableUnionService { sourceList.sort(Comparator.comparing(DatasetTableUnion::getCreateTime)); return sourceList; } + + private void checkUnion(DatasetTableUnion datasetTableUnion) { + DatasetTableUnionExample datasetTableUnionExample = new DatasetTableUnionExample(); + DatasetTableUnionExample.Criteria criteria = datasetTableUnionExample.createCriteria(); + if (StringUtils.isNotEmpty(datasetTableUnion.getId())) { + criteria.andIdNotEqualTo(datasetTableUnion.getId()); + } + criteria.andSourceTableIdEqualTo(datasetTableUnion.getSourceTableId()); + criteria.andSourceTableFieldIdEqualTo(datasetTableUnion.getSourceTableFieldId()); + criteria.andTargetTableIdEqualTo(datasetTableUnion.getTargetTableId()); + criteria.andTargetTableFieldIdEqualTo(datasetTableUnion.getTargetTableFieldId()); + List sourceResult = datasetTableUnionMapper.selectByExample(datasetTableUnionExample); + datasetTableUnionExample.clear(); + criteria = datasetTableUnionExample.createCriteria(); + if (StringUtils.isNotEmpty(datasetTableUnion.getId())) { + criteria.andIdNotEqualTo(datasetTableUnion.getId()); + } + criteria.andSourceTableIdEqualTo(datasetTableUnion.getTargetTableId()); + criteria.andSourceTableFieldIdEqualTo(datasetTableUnion.getTargetTableFieldId()); + criteria.andTargetTableIdEqualTo(datasetTableUnion.getSourceTableId()); + criteria.andTargetTableFieldIdEqualTo(datasetTableUnion.getSourceTableFieldId()); + List targetResult = datasetTableUnionMapper.selectByExample(datasetTableUnionExample); + if (CollectionUtils.isNotEmpty(sourceResult) || CollectionUtils.isNotEmpty(targetResult)) { + throw new RuntimeException(Translator.get("i18n_union_already_exists")); + } + } } diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index 4271da9eb0..bb404ef8ed 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -235,3 +235,5 @@ i18n_cron_expression_error=Cron expression error i18n_same_folder_can_not_repeat=Same Folder Can Not Repeat i18n_default_panel=Default Panel i18n_panel_list=Panel List +i18n_processing_data=Processing data now, Refresh later +i18n_union_already_exists=Union relation already exists \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 2262059625..3d91c59ea5 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -236,3 +236,5 @@ i18n_cron_expression_error=Cron表达式校验错误 i18n_same_folder_can_not_repeat=相同的目录下名称不能重复 i18n_default_panel=默认仪表盘 i18n_panel_list=仪表盘列表 +i18n_processing_data=正在处理数据,稍后刷新 +i18n_union_already_exists=关联关系已存在 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 4b3dea3692..d309238695 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -236,3 +236,5 @@ i18n_cron_expression_error=Cron表達式校驗錯誤 i18n_same_folder_can_not_repeat=相同的目录下名称不能重复 i18n_default_panel=默认仪表盘 i18n_panel_list=仪表盘列表 +i18n_processing_data=正在處理數據,稍後刷新 +i18n_union_already_exists=關聯關系已存在 \ No newline at end of file diff --git a/frontend/src/views/dataset/data/TabDataPreview.vue b/frontend/src/views/dataset/data/TabDataPreview.vue index 6348fe1244..484e140cae 100644 --- a/frontend/src/views/dataset/data/TabDataPreview.vue +++ b/frontend/src/views/dataset/data/TabDataPreview.vue @@ -1,11 +1,12 @@