From 201cc6f4a65e574cb5c2e0a3ab6f6e07d4d070d0 Mon Sep 17 00:00:00 2001 From: junjie Date: Thu, 25 Feb 2021 18:15:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=95=B0=E6=8D=AE=E9=9B=86):=20=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E7=B1=BB=E5=9E=8B=E6=8A=BD=E8=B1=A1=E8=BD=AC=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/domain/DatasetTableField.java | 2 + .../base/domain/DatasetTableFieldExample.java | 60 +++++++++++++++++++ .../base/mapper/DatasetTableFieldMapper.xml | 26 ++++++-- .../service/dataset/DataSetGroupService.java | 19 ++++++ .../service/dataset/DataSetTableService.java | 46 ++++++++++++++ .../db/migration/V9__dataset_tables.sql | 6 +- .../components/dataset/data/ViewTable.vue | 19 +++++- frontend/src/i18n/en-US.js | 5 +- frontend/src/i18n/zh-CN.js | 23 +++---- frontend/src/i18n/zh-TW.js | 5 +- 10 files changed, 190 insertions(+), 21 deletions(-) diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java index 99f3a2741b..6e7288c65e 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java @@ -21,5 +21,7 @@ public class DatasetTableField implements Serializable { private Long lastSyncTime; + private Integer deType; + private static final long serialVersionUID = 1L; } \ No newline at end of file diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java index 43156b884e..4b4a354d34 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableFieldExample.java @@ -633,6 +633,66 @@ public class DatasetTableFieldExample { addCriterion("last_sync_time not between", value1, value2, "lastSyncTime"); return (Criteria) this; } + + public Criteria andDeTypeIsNull() { + addCriterion("de_type is null"); + return (Criteria) this; + } + + public Criteria andDeTypeIsNotNull() { + addCriterion("de_type is not null"); + return (Criteria) this; + } + + public Criteria andDeTypeEqualTo(Integer value) { + addCriterion("de_type =", value, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeNotEqualTo(Integer value) { + addCriterion("de_type <>", value, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeGreaterThan(Integer value) { + addCriterion("de_type >", value, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeGreaterThanOrEqualTo(Integer value) { + addCriterion("de_type >=", value, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeLessThan(Integer value) { + addCriterion("de_type <", value, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeLessThanOrEqualTo(Integer value) { + addCriterion("de_type <=", value, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeIn(List values) { + addCriterion("de_type in", values, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeNotIn(List values) { + addCriterion("de_type not in", values, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeBetween(Integer value1, Integer value2) { + addCriterion("de_type between", value1, value2, "deType"); + return (Criteria) this; + } + + public Criteria andDeTypeNotBetween(Integer value1, Integer value2) { + addCriterion("de_type not between", value1, value2, "deType"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml b/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml index d8704dc80c..7902706f17 100644 --- a/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/DatasetTableFieldMapper.xml @@ -10,6 +10,7 @@ + @@ -70,7 +71,8 @@ - id, table_id, origin_name, `name`, `type`, `checked`, column_index, last_sync_time + id, table_id, origin_name, `name`, `type`, `checked`, column_index, last_sync_time, + de_type @@ -198,6 +206,9 @@ last_sync_time = #{record.lastSyncTime,jdbcType=BIGINT}, + + de_type = #{record.deType,jdbcType=INTEGER}, + @@ -212,7 +223,8 @@ `type` = #{record.type,jdbcType=VARCHAR}, `checked` = #{record.checked,jdbcType=BIT}, column_index = #{record.columnIndex,jdbcType=INTEGER}, - last_sync_time = #{record.lastSyncTime,jdbcType=BIGINT} + last_sync_time = #{record.lastSyncTime,jdbcType=BIGINT}, + de_type = #{record.deType,jdbcType=INTEGER} @@ -241,6 +253,9 @@ last_sync_time = #{lastSyncTime,jdbcType=BIGINT}, + + de_type = #{deType,jdbcType=INTEGER}, + where id = #{id,jdbcType=VARCHAR} @@ -252,7 +267,8 @@ `type` = #{type,jdbcType=VARCHAR}, `checked` = #{checked,jdbcType=BIT}, column_index = #{columnIndex,jdbcType=INTEGER}, - last_sync_time = #{lastSyncTime,jdbcType=BIGINT} + last_sync_time = #{lastSyncTime,jdbcType=BIGINT}, + de_type = #{deType,jdbcType=INTEGER} where id = #{id,jdbcType=VARCHAR} \ No newline at end of file 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 ea0d4abc91..68fd71d64b 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetGroupService.java @@ -2,9 +2,11 @@ package io.dataease.service.dataset; import io.dataease.base.domain.DatasetGroup; import io.dataease.base.domain.DatasetGroupExample; +import io.dataease.base.domain.DatasetTable; import io.dataease.base.mapper.DatasetGroupMapper; import io.dataease.commons.utils.BeanUtils; import io.dataease.controller.request.dataset.DataSetGroupRequest; +import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.dto.dataset.DataSetGroupDTO; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -24,6 +26,8 @@ import java.util.stream.Collectors; public class DataSetGroupService { @Resource private DatasetGroupMapper datasetGroupMapper; + @Resource + private DataSetTableService dataSetTableService; public DataSetGroupDTO save(DatasetGroup datasetGroup) { if (StringUtils.isEmpty(datasetGroup.getId())) { @@ -48,6 +52,21 @@ public class DataSetGroupService { DatasetGroupExample datasetGroupExample = new DatasetGroupExample(); datasetGroupExample.createCriteria().andIdIn(ids); datasetGroupMapper.deleteByExample(datasetGroupExample); + // 获取type为scene的id,删除场景下的表和字段 + deleteTableAndField(tree.stream().filter(ele -> { + return StringUtils.equalsIgnoreCase(ele.getType(), "scene"); + }).map(DatasetGroup::getId).collect(Collectors.toList())); + } + + public void deleteTableAndField(List sceneIds) { + for (String sceneId : sceneIds) { + DataSetTableRequest dataSetTableRequest = new DataSetTableRequest(); + dataSetTableRequest.setSceneId(sceneId); + List list = dataSetTableService.list(dataSetTableRequest); + for (DatasetTable table : list) { + dataSetTableService.delete(table.getId()); + } + } } public List tree(DataSetGroupRequest datasetGroup) { 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 e25776bcb4..aa2e9879d0 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -19,6 +19,7 @@ import io.dataease.dto.dataset.DataTableInfoDTO; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; + import javax.annotation.Resource; import java.text.MessageFormat; import java.util.*; @@ -161,6 +162,7 @@ public class DataSetTableService { } public void saveTableField(DatasetTable datasetTable) throws Exception { + Datasource ds = datasourceMapper.selectByPrimaryKey(datasetTable.getDataSourceId()); DataSetTableRequest dataSetTableRequest = new DataSetTableRequest(); BeanUtils.copyBean(dataSetTableRequest, datasetTable); List fields = getFields(dataSetTableRequest); @@ -173,6 +175,7 @@ public class DataSetTableService { datasetTableField.setOriginName(filed.getFieldName()); datasetTableField.setName(filed.getRemarks()); datasetTableField.setType(filed.getFieldType()); + datasetTableField.setDeType(transFieldType(ds.getType(), filed.getFieldType())); datasetTableField.setChecked(true); datasetTableField.setColumnIndex(i); datasetTableField.setLastSyncTime(syncTime); @@ -192,4 +195,47 @@ public class DataSetTableService { return MessageFormat.format("SELECT {0} FROM {1}", StringUtils.join(fields, ","), table); } } + + public Integer transFieldType(String type, String field) { + DatasourceTypes datasourceType = DatasourceTypes.valueOf(type); + switch (datasourceType) { + case mysql: + return transMysqlField(field); + case sqlServer: + default: + return 0; + } + } + + public Integer transMysqlField(String field) { + switch (field) { + case "CHAR": + case "VARCHAR": + case "TEXT": + case "TINYTEXT": + case "MEDIUMTEXT": + case "LONGTEXT": + case "ENUM": + return 0;// 文本 + case "DATE": + case "TIME": + case "YEAR": + case "DATETIME": + case "TIMESTAMP": + return 1;// 时间 + case "INT": + case "BIT": + case "TINYINT": + case "SMALLINT": + case "MEDIUMINT": + case "INTEGER": + case "BIGINT": + case "FLOAT": + case "DOUBLE": + case "DECIMAL": + return 2;// 数值 + default: + return 0; + } + } } diff --git a/backend/src/main/resources/db/migration/V9__dataset_tables.sql b/backend/src/main/resources/db/migration/V9__dataset_tables.sql index 42a58909cc..22f2793539 100644 --- a/backend/src/main/resources/db/migration/V9__dataset_tables.sql +++ b/backend/src/main/resources/db/migration/V9__dataset_tables.sql @@ -18,12 +18,14 @@ CREATE TABLE IF NOT EXISTS `dataset_table_field` `table_id` varchar(50) NOT NULL COMMENT '表ID', `origin_name` varchar(255) NOT NULL COMMENT '原始名', `name` varchar(255) NOT NULL COMMENT '字段名', - `type` varchar(50) NOT NULL COMMENT '字段类型', + `type` varchar(50) NOT NULL COMMENT '原始字段类型', + `de_type` int(10) NOT NULL COMMENT 'dataease字段类型:0-文本,1-时间,2-数值...', `checked` tinyint(1) NOT NULL DEFAULT true COMMENT '是否选中', `column_index` int(10) NOT NULL COMMENT '列位置', `last_sync_time` bigint(13) COMMENT '同步时间', PRIMARY KEY (`id`), - KEY `IDX_TABLE_ID` (`table_id`) + KEY `IDX_TABLE_ID` (`table_id`), + KEY `IDX_DE_TYPE` (`de_type`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4; diff --git a/frontend/src/business/components/dataset/data/ViewTable.vue b/frontend/src/business/components/dataset/data/ViewTable.vue index 8a131a9fbe..7bfd42a6d1 100644 --- a/frontend/src/business/components/dataset/data/ViewTable.vue +++ b/frontend/src/business/components/dataset/data/ViewTable.vue @@ -10,7 +10,7 @@ {{$t('dataset.edit')}} - + {{$t('dataset.create_view')}} @@ -38,6 +38,11 @@ +