diff --git a/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java b/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java index 235a6ad6be..ffc480018c 100644 --- a/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java +++ b/core/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.auth0.jwt.JWT; import com.auth0.jwt.interfaces.DecodedJWT; import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import com.google.gson.Gson; import io.dataease.auth.annotation.DePermission; import io.dataease.auth.annotation.DePermissions; import io.dataease.auth.filter.F2CLinkFilter; @@ -12,6 +13,7 @@ import io.dataease.commons.constants.ResourceAuthLevel; import io.dataease.controller.request.dataset.DataSetTableRequest; import io.dataease.controller.request.dataset.MultFieldValuesRequest; import io.dataease.controller.response.DatasetTableField4Type; +import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.dto.dataset.DatasetTableFieldDTO; import io.dataease.i18n.Translator; import io.dataease.plugins.common.base.domain.DatasetTable; @@ -108,6 +110,8 @@ public class DataSetTableFieldController { DatasetTableField datasetTableField = DatasetTableField.builder().build(); datasetTableField.setTableId(tableId); datasetTableField.setGroupType("d"); + DatasetTable datasetTable = dataSetTableService.get(tableId); + DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); List dimensionList = new ArrayList<>(); dataSetTableFieldsService.list(datasetTableField).forEach(o -> { DatasetTableFieldDTO datasetTableFieldDTO = new DatasetTableFieldDTO(); @@ -118,6 +122,9 @@ public class DataSetTableFieldController { deTypeCascader.add(datasetTableFieldDTO.getDateFormatType()); } datasetTableFieldDTO.setDeTypeCascader(deTypeCascader); + if (dataTableInfoDTO.isSetKey() && dataTableInfoDTO.getKeys().contains(datasetTableFieldDTO.getOriginName())){ + datasetTableFieldDTO.setKey(true); + } dimensionList.add(datasetTableFieldDTO); }); @@ -133,6 +140,9 @@ public class DataSetTableFieldController { deTypeCascader.add(datasetTableFieldDTO.getDateFormatType()); } datasetTableFieldDTO.setDeTypeCascader(deTypeCascader); + if (dataTableInfoDTO.isSetKey() && dataTableInfoDTO.getKeys().contains(datasetTableFieldDTO.getOriginName())){ + datasetTableFieldDTO.setKey(true); + } quotaList.add(datasetTableFieldDTO); }); @@ -187,6 +197,16 @@ public class DataSetTableFieldController { return dataSetTableFieldsService.save(datasetTableField); } + @DePermission(type = DePermissionType.DATASET, value = "tableId", level = ResourceAuthLevel.DATASET_LEVEL_MANAGE) + @ApiOperation("设置主键") + @PostMapping("saveKey") + public void saveKey(@RequestBody DatasetTableFieldDTO datasetTableField) throws Exception { + DatasetTable datasetTable = dataSetTableService.get(datasetTableField.getTableId()); + if (datasetTable.getMode() == 1) { + dataSetTableService.saveKey(datasetTable, datasetTableField); + } + } + @DePermissions(value = { @DePermission(type = DePermissionType.DATASET, level = ResourceAuthLevel.DATASET_LEVEL_MANAGE, paramIndex = 1) }) diff --git a/core/backend/src/main/java/io/dataease/dto/dataset/DataTableInfoDTO.java b/core/backend/src/main/java/io/dataease/dto/dataset/DataTableInfoDTO.java index e78e0cd0c7..aa7f526cbc 100644 --- a/core/backend/src/main/java/io/dataease/dto/dataset/DataTableInfoDTO.java +++ b/core/backend/src/main/java/io/dataease/dto/dataset/DataTableInfoDTO.java @@ -4,6 +4,7 @@ import io.dataease.dto.dataset.union.UnionDTO; import lombok.Getter; import lombok.Setter; +import java.util.ArrayList; import java.util.List; /** @@ -14,6 +15,8 @@ import java.util.List; @Getter public class DataTableInfoDTO { private String table; + private boolean setKey = false; + private List keys = new ArrayList<>(); private String sql; private boolean isBase64Encryption = false; private List excelSheetDataList; diff --git a/core/backend/src/main/java/io/dataease/dto/dataset/DatasetTableFieldDTO.java b/core/backend/src/main/java/io/dataease/dto/dataset/DatasetTableFieldDTO.java index f1455ae21d..6ab3bba14a 100644 --- a/core/backend/src/main/java/io/dataease/dto/dataset/DatasetTableFieldDTO.java +++ b/core/backend/src/main/java/io/dataease/dto/dataset/DatasetTableFieldDTO.java @@ -9,4 +9,5 @@ import java.util.List; public class DatasetTableFieldDTO extends DatasetTableField { private String jsonPath; private List deTypeCascader; + private boolean isKey; } diff --git a/core/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java b/core/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java index 3412cbdcc9..bffa3e39e8 100644 --- a/core/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java +++ b/core/backend/src/main/java/io/dataease/dto/dataset/ExcelSheetData.java @@ -3,6 +3,8 @@ package io.dataease.dto.dataset; import io.dataease.plugins.common.dto.datasource.TableField; import io.swagger.annotations.ApiModelProperty; import lombok.Data; + +import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -31,4 +33,6 @@ public class ExcelSheetData { @ApiModelProperty("字段变更") private Boolean changeFiled = false; private Boolean effectExtField = false; + private boolean setKey = false; + private List keys = new ArrayList<>(); } diff --git a/core/backend/src/main/java/io/dataease/provider/DDLProvider.java b/core/backend/src/main/java/io/dataease/provider/DDLProvider.java index 84190d5106..d72cd5f477 100644 --- a/core/backend/src/main/java/io/dataease/provider/DDLProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/DDLProvider.java @@ -1,5 +1,6 @@ package io.dataease.provider; +import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.Datasource; @@ -18,7 +19,7 @@ public abstract class DDLProvider { public abstract String replaceTable(String name); - public abstract String createTableSql(String name, List datasetTableFields, Datasource engine, String version); + public abstract String createTableSql(DataTableInfoDTO dataTableInfoDTO, String name, List datasetTableFields, Datasource engine, String version); public abstract String insertSql(String name, List dataList, int page, int pageNumber); } diff --git a/core/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java b/core/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java index 4c42a3ce7b..306a185b32 100644 --- a/core/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java +++ b/core/backend/src/main/java/io/dataease/provider/DDLProviderImpl.java @@ -1,5 +1,6 @@ package io.dataease.provider; +import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.Datasource; import org.apache.commons.lang3.StringUtils; @@ -30,7 +31,7 @@ public class DDLProviderImpl extends DDLProvider { } @Override - public String createTableSql(String name, List datasetTableFields, Datasource engine, String version) { + public String createTableSql(DataTableInfoDTO dataTableInfoDTO, String name, List datasetTableFields, Datasource engine, String version) { return null; } diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java index 3fd4ca4802..2a20305978 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisDDLProvider.java @@ -1,11 +1,13 @@ package io.dataease.provider.engine.doris; import com.google.gson.Gson; +import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.commons.utils.TableUtils; import io.dataease.dto.datasource.DorisConfiguration; import io.dataease.provider.DDLProviderImpl; +import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; import java.util.List; @@ -44,12 +46,16 @@ public class DorisDDLProvider extends DDLProviderImpl { } @Override - public String createTableSql(String tableName, List datasetTableFields, Datasource engine, String version) { + public String createTableSql(DataTableInfoDTO dataTableInfoDTO, String tableName, List datasetTableFields, Datasource engine, String version) { DorisConfiguration dorisConfiguration = new Gson().fromJson(engine.getConfiguration(), DorisConfiguration.class); String dorisTableColumnSql = createDorisTableColumnSql(datasetTableFields, version); - return creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql) + String sql = creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql) .replace("BUCKETS_NUM", dorisConfiguration.getBucketNum().toString()) .replace("ReplicationNum", dorisConfiguration.getReplicationNum().toString()); + if(dataTableInfoDTO.isSetKey() && CollectionUtils.isNotEmpty(dataTableInfoDTO.getKeys())){ + sql = sql.replace("dataease_uuid", "`" + String.join("`, `", dataTableInfoDTO.getKeys()) + "`"); + } + return sql; } private String createDorisTableColumnSql(final List datasetTableFields, String version) { diff --git a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java index f1418aa5c4..cc116db231 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlDDLProvider.java @@ -1,5 +1,6 @@ package io.dataease.provider.engine.mysql; +import io.dataease.dto.dataset.DataTableInfoDTO; import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.commons.utils.TableUtils; @@ -71,7 +72,7 @@ public class MysqlDDLProvider extends DDLProviderImpl { } @Override - public String createTableSql(String tableName, List datasetTableFields, Datasource engine, String version) { + public String createTableSql(DataTableInfoDTO dataTableInfoDTO, String tableName, List datasetTableFields, Datasource engine, String version) { String dorisTableColumnSql = createDorisTableColumnSql(datasetTableFields); return creatTableSql.replace("TABLE_NAME", tableName).replace("Column_Fields", dorisTableColumnSql); } diff --git a/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 2a04280eb9..b09e68a9f9 100644 --- a/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/core/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -179,6 +179,20 @@ public class DataSetTableService { return list; } + public void saveKey(DatasetTable datasetTable, DatasetTableFieldDTO datasetTableField) { + DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); + if (datasetTableField.isKey()) { + dt.getKeys().add(datasetTableField.getOriginName()); + } else { + dt.getKeys().remove(datasetTableField.getOriginName()); + } + DatasetTable record = new DatasetTable(); + record.setInfo(new Gson().toJson(dt)); + DatasetTableExample example = new DatasetTableExample(); + example.createCriteria().andIdEqualTo(datasetTable.getId()); + datasetTableMapper.updateByExampleSelective(record, example); + } + private void extractData(DataSetTableRequest datasetTable) throws Exception { if (datasetTable.getMode() == 1 && StringUtils.isNotEmpty(datasetTable.getSyncType()) && datasetTable.getSyncType().equalsIgnoreCase("sync_now")) { DataSetTaskRequest dataSetTaskRequest = new DataSetTaskRequest(); @@ -234,6 +248,8 @@ public class DataSetTableService { }); DataTableInfoDTO info = new DataTableInfoDTO(); info.setExcelSheetDataList(excelSheetDataList); + info.setKeys(excelSheetDataList.get(0).getKeys()); + info.setSetKey(excelSheetDataList.get(0).isSetKey()); sheetTable.setInfo(new Gson().toJson(info)); datasetTableMapper.insert(sheetTable); sysAuthService.copyAuth(sheetTable.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASET); @@ -263,6 +279,8 @@ public class DataSetTableService { excelSheetDataList.add(sheet); DataTableInfoDTO info = new DataTableInfoDTO(); info.setExcelSheetDataList(excelSheetDataList); + info.setKeys(sheet.getKeys()); + info.setSetKey(sheet.isSetKey()); sheetTable.setInfo(new Gson().toJson(info)); datasetTableMapper.insert(sheetTable); sysAuthService.copyAuth(sheetTable.getId(), SysAuthConstants.AUTH_SOURCE_TYPE_DATASET); @@ -296,6 +314,8 @@ public class DataSetTableService { excelSheetDataList.add(sheet); } DataTableInfoDTO info = new DataTableInfoDTO(); + info.setKeys(datasetTable.getSheets().get(0).getKeys()); + info.setSetKey(datasetTable.getSheets().get(0).isSetKey()); info.setExcelSheetDataList(excelSheetDataList); datasetTable.setInfo(new Gson().toJson(info)); datasetTableMapper.updateByPrimaryKeySelective(datasetTable); diff --git a/core/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/core/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 6568f9d859..1f14d2ea0b 100644 --- a/core/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/core/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -191,8 +191,8 @@ public class ExtractDataService { switch (updateType) { case all_scope: // 全量更新 try { - createEngineTable(TableUtils.tableName(datasetTableId), datasetTableFields); - createEngineTable(TableUtils.tmpName(TableUtils.tableName(datasetTableId)), datasetTableFields); + createEngineTable(datasetTable.getInfo(), TableUtils.tableName(datasetTableId), datasetTableFields); + createEngineTable(datasetTable.getInfo(), TableUtils.tmpName(TableUtils.tableName(datasetTableId)), datasetTableFields); Long execTime = System.currentTimeMillis(); if (!engineService.isSimpleMode()) { generateTransFile("all_scope", datasetTable, datasource, datasetTableFields, null); @@ -318,8 +318,8 @@ public class ExtractDataService { switch (updateType) { case all_scope: // 全量更新 try { - createEngineTable(TableUtils.tableName(datasetTableId), datasetTableFields); - createEngineTable(TableUtils.tmpName(TableUtils.tableName(datasetTableId)), datasetTableFields); + createEngineTable(datasetTable.getInfo(), TableUtils.tableName(datasetTableId), datasetTableFields); + createEngineTable(datasetTable.getInfo(), TableUtils.tmpName(TableUtils.tableName(datasetTableId)), datasetTableFields); execTime = System.currentTimeMillis(); extractData(datasetTable, datasource, datasetTableFields, "all_scope", null); replaceTable(TableUtils.tableName(datasetTableId)); @@ -641,7 +641,8 @@ public class ExtractDataService { dataSetTableTaskLogService.save(datasetTableTaskLog, hasTask); } - public void createEngineTable(String tableName, List datasetTableFields) throws Exception { + public void createEngineTable(String datasetTableInfo, String tableName, List datasetTableFields) throws Exception { + DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(datasetTableInfo, DataTableInfoDTO.class); Datasource engine = engineService.getDeEngine(); JdbcProvider jdbcProvider = CommonBeanFactory.getBean(JdbcProvider.class); DatasourceRequest datasourceRequest = new DatasourceRequest(); @@ -649,7 +650,7 @@ public class ExtractDataService { datasourceRequest.setQuery("SELECT VERSION()"); String version = jdbcProvider.getData(datasourceRequest).get(0)[0]; DDLProvider ddlProvider = ProviderFactory.getDDLProvider(engine.getType()); - datasourceRequest.setQuery(ddlProvider.createTableSql(tableName, datasetTableFields, engine, version)); + datasourceRequest.setQuery(ddlProvider.createTableSql(dataTableInfoDTO, tableName, datasetTableFields, engine, version)); jdbcProvider.exec(datasourceRequest); } @@ -1323,7 +1324,7 @@ public class ExtractDataService { String handleMysqlBIGINTUNSIGNEDStr = ""; if (datasourceType.equals(DatasourceTypes.mysql)) { for (DatasetTableField datasetTableField : datasetTableFields) { - if(datasetTableField.getType().equalsIgnoreCase("BIGINT UNSIGNED")){ + if (datasetTableField.getType().equalsIgnoreCase("BIGINT UNSIGNED")) { handleMysqlBIGINTUNSIGNEDStr = handleMysqlBIGINTUNSIGNEDStr + handleMysqlBIGINTUNSIGNED.replace("BIGINTUNSIGNEDFIELD", datasetTableField.getDataeaseName()) + "; \n"; } } diff --git a/core/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java b/core/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java index 64fa7895b8..aa583a57fe 100644 --- a/core/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java +++ b/core/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java @@ -281,7 +281,7 @@ public class PanelAppTemplateService { for (DatasetTable datasetTable : datasetTablesInfo) { if (1 == datasetTable.getMode() && !(DatasetType.CUSTOM.name().equalsIgnoreCase(datasetTable.getType()) || DatasetType.UNION.name().equalsIgnoreCase(datasetTable.getType()))) { List fields = extractDataService.getDatasetTableFields(datasetTable.getId()); - extractDataService.createEngineTable(TableUtils.tableName(datasetTable.getId()), fields); + extractDataService.createEngineTable(datasetTable.getInfo(), TableUtils.tableName(datasetTable.getId()), fields); } } } diff --git a/core/frontend/src/lang/en.js b/core/frontend/src/lang/en.js index d5b09590f6..3fafcb8897 100644 --- a/core/frontend/src/lang/en.js +++ b/core/frontend/src/lang/en.js @@ -1874,7 +1874,11 @@ export default { tip6: 'Use the functions supported by the database type corresponding to the dataset. The syntax is the same as that of the corresponding database', tip7: 'For example, date format: MySQL uses DATE_ FORMAT(date,format); Oracle uses TO_ DATE(X,[,fmt])', tip8: 'Non direct connection mode data set, use Doris database functions, refer to Doris official website' - } + }, + set_key: 'Set Primary Key', + change_to_key: 'Set as primary key', + selecet_key: 'Select primary key', + no_set_key: 'No primary key set' }, driver: { driver: 'Driver', diff --git a/core/frontend/src/lang/tw.js b/core/frontend/src/lang/tw.js index dc821f49a1..00d4b916e5 100644 --- a/core/frontend/src/lang/tw.js +++ b/core/frontend/src/lang/tw.js @@ -1866,7 +1866,11 @@ export default { tip6: '使用數據集對應數據庫類型所支持的函數,語法同對應數據庫', tip7: '如日期格式化:MySQL使用DATE_FORMAT(date,format);Oracle使用TO_DATE(X,[,fmt])', tip8: '非直連模式數據集,使用Doris數據庫函數,可參考Doris官網' - } + }, + set_key: '設定主鍵', + change_to_key: '設定為主鍵', + selecet_key: '選擇主鍵', + no_set_key: '未設定主鍵' }, driver: { driver: '驅動', diff --git a/core/frontend/src/lang/zh.js b/core/frontend/src/lang/zh.js index 85eac6ce96..fbd84cf222 100644 --- a/core/frontend/src/lang/zh.js +++ b/core/frontend/src/lang/zh.js @@ -1866,7 +1866,11 @@ export default { tip6: '使用数据集对应数据库类型所支持的函数,语法同对应数据库', tip7: '如日期格式化:MySQL使用DATE_FORMAT(date,format);Oracle使用TO_DATE(X,[,fmt])', tip8: '非直连模式数据集,使用Doris数据库函数,可参考Doris官网' - } + }, + set_key: '设置主键', + change_to_key: '设置为主键', + selecet_key: '选择主键', + no_set_key: '未设置主键' }, driver: { driver: '驱动', diff --git a/core/frontend/src/views/dataset/add/AddApi.vue b/core/frontend/src/views/dataset/add/AddApi.vue index 7239e0b377..75ca84e062 100644 --- a/core/frontend/src/views/dataset/add/AddApi.vue +++ b/core/frontend/src/views/dataset/add/AddApi.vue @@ -159,6 +159,24 @@ > {{ $t('deDataset.already_exists') }} + {{ $t('dataset.set_key') }} + + + +
{ - const datasetName = this.tables.find( - (ele) => ele.name === name - ).datasetName + + for (let i = 0; i < this.checkTableList.length; i++) { + const table = this.tables.find( + (ele) => ele.name === this.checkTableList[i] + ) + if(table.setKey && table.keys.length === 0 ){ + this.openMessageSuccess(this.checkTableList[i] + this.$t('dataset.no_set_key') , 'error') + return + } tables.push({ - name: datasetName, + name: table.datasetName, sceneId: sceneId, dataSourceId: dataSourceId, type: 'api', syncType: syncType, mode: parseInt(mode), - info: JSON.stringify({ table: name }) + info: JSON.stringify({ table: this.checkTableList[i], setKey: table.setKey, keys: table.keys}) }) - }) + } post('/dataset/table/batchAdd', tables) .then((response) => { this.openMessageSuccess('deDataset.set_saved_successfully') @@ -610,6 +633,10 @@ export default { width: 420px; margin-left: 12px; } + + .el-checkbox{ + margin-left: 12px; + } } .data { diff --git a/core/frontend/src/views/dataset/add/AddDB.vue b/core/frontend/src/views/dataset/add/AddDB.vue index 120ca46ef8..687e06899f 100644 --- a/core/frontend/src/views/dataset/add/AddDB.vue +++ b/core/frontend/src/views/dataset/add/AddDB.vue @@ -166,6 +166,26 @@ > {{ $t('deDataset.already_exists') }}
+ + {{ $t('dataset.set_key') }} + + + + +
{ this.$set(ele, 'datasetName', dsName + '_' + ele.name) this.$set(ele, 'nameExist', false) + this.$set(ele, 'setKey', false) + this.$set(ele, 'keys', []) }) this.tableData = [...this.tables] this.avilibelTable = !this.tableData.some((ele) => ele.enableCheck) @@ -436,27 +458,33 @@ export default { this.openMessageSuccess('deDataset.cannot_be_duplicate', 'error') return } + if (this.loading) return - this.loading = true const sceneId = this.param.id const dataSourceId = this.dataSource const tables = [] const mode = this.mode const syncType = this.syncType - this.checkTableList.forEach((name) => { - const datasetName = this.tables.find( - (ele) => ele.name === name - ).datasetName + for (let i = 0; i < this.checkTableList.length; i++) { + const table = this.tables.find( + (ele) => ele.name === this.checkTableList[i] + ) + if(table.setKey && table.keys.length === 0 ){ + this.openMessageSuccess(this.checkTableList[i] + this.$t('dataset.no_set_key') , 'error') + return + } tables.push({ - name: datasetName, + name: table.datasetName, sceneId: sceneId, dataSourceId: dataSourceId, type: 'db', syncType: syncType, mode: parseInt(mode), - info: JSON.stringify({ table: name }) + info: JSON.stringify({ table: this.checkTableList[i], setKey: table.setKey, keys: table.keys}) }) - }) + } + + this.loading = true post('/dataset/table/batchAdd', tables) .then((response) => { this.openMessageSuccess('deDataset.set_saved_successfully') @@ -632,6 +660,15 @@ export default { width: 420px; margin-left: 12px; } + + .el-select { + width: 420px; + margin-left: 12px; + } + + .el-checkbox{ + margin-left: 12px; + } } .data { diff --git a/core/frontend/src/views/dataset/add/AddExcel.vue b/core/frontend/src/views/dataset/add/AddExcel.vue index 54112684f7..bebe0ad3b4 100644 --- a/core/frontend/src/views/dataset/add/AddExcel.vue +++ b/core/frontend/src/views/dataset/add/AddExcel.vue @@ -138,6 +138,23 @@ ) }}
+ {{ $t('dataset.set_key') }} + + +
@@ -771,6 +788,10 @@ export default { width: 420px; margin-left: 12px; } + + .el-checkbox{ + margin-left: 12px; + } } .data { diff --git a/core/frontend/src/views/dataset/add/AddSQL.vue b/core/frontend/src/views/dataset/add/AddSQL.vue index a9f8f87ae3..ff3029e0d5 100644 --- a/core/frontend/src/views/dataset/add/AddSQL.vue +++ b/core/frontend/src/views/dataset/add/AddSQL.vue @@ -61,6 +61,25 @@ value="sync_latter" /> + {{ $t('dataset.set_key') }} + + + + + + + + + + + { + this.engineMode = res.data + }) + }, mounted() { window.addEventListener('resize', this.calcHeight) this.calcHeight() @@ -826,6 +864,12 @@ export default { this.dateformats = children }) }, + getKeyFields(item) { + return [ + { label: this.$t('commons.yes'), value: true }, + { label: this.$t('commons.no'), value: false } + ] + }, getFields(item) { if (item.deExtractType === 0) { const children = this.dateformats @@ -850,6 +894,19 @@ export default { ] } }, + + saveKey(item ) { + post('/dataset/field/saveKey', item) + .then((response) => { + this.initField() + localStorage.setItem('reloadDsData', 'true') + }) + .catch((res) => { + this.initField() + localStorage.setItem('reloadDsData', 'true') + }) + }, + saveEdit(item, checkExp = true) { if (item.name && item.name.length > 50) { this.$message.error(this.$t('dataset.field_name_less_50')) diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasetTableKey.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasetTableKey.java new file mode 100644 index 0000000000..abbb8438c8 --- /dev/null +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasetTableKey.java @@ -0,0 +1,15 @@ +package io.dataease.plugins.common.base.domain; + +import java.io.Serializable; +import lombok.Data; + +@Data +public class DatasetTableKey implements Serializable { + private String id; + + private String tableId; + + private String tableFieldId; + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasetTableKeyExample.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasetTableKeyExample.java new file mode 100644 index 0000000000..27514aff8f --- /dev/null +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/domain/DatasetTableKeyExample.java @@ -0,0 +1,410 @@ +package io.dataease.plugins.common.base.domain; + +import java.util.ArrayList; +import java.util.List; + +public class DatasetTableKeyExample { + protected String orderByClause; + + protected boolean distinct; + + protected List oredCriteria; + + public DatasetTableKeyExample() { + oredCriteria = new ArrayList(); + } + + public void setOrderByClause(String orderByClause) { + this.orderByClause = orderByClause; + } + + public String getOrderByClause() { + return orderByClause; + } + + public void setDistinct(boolean distinct) { + this.distinct = distinct; + } + + public boolean isDistinct() { + return distinct; + } + + public List getOredCriteria() { + return oredCriteria; + } + + public void or(Criteria criteria) { + oredCriteria.add(criteria); + } + + public Criteria or() { + Criteria criteria = createCriteriaInternal(); + oredCriteria.add(criteria); + return criteria; + } + + public Criteria createCriteria() { + Criteria criteria = createCriteriaInternal(); + if (oredCriteria.size() == 0) { + oredCriteria.add(criteria); + } + return criteria; + } + + protected Criteria createCriteriaInternal() { + Criteria criteria = new Criteria(); + return criteria; + } + + public void clear() { + oredCriteria.clear(); + orderByClause = null; + distinct = false; + } + + protected abstract static class GeneratedCriteria { + protected List criteria; + + protected GeneratedCriteria() { + super(); + criteria = new ArrayList(); + } + + public boolean isValid() { + return criteria.size() > 0; + } + + public List getAllCriteria() { + return criteria; + } + + public List getCriteria() { + return criteria; + } + + protected void addCriterion(String condition) { + if (condition == null) { + throw new RuntimeException("Value for condition cannot be null"); + } + criteria.add(new Criterion(condition)); + } + + protected void addCriterion(String condition, Object value, String property) { + if (value == null) { + throw new RuntimeException("Value for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value)); + } + + protected void addCriterion(String condition, Object value1, Object value2, String property) { + if (value1 == null || value2 == null) { + throw new RuntimeException("Between values for " + property + " cannot be null"); + } + criteria.add(new Criterion(condition, value1, value2)); + } + + public Criteria andIdIsNull() { + addCriterion("id is null"); + return (Criteria) this; + } + + public Criteria andIdIsNotNull() { + addCriterion("id is not null"); + return (Criteria) this; + } + + public Criteria andIdEqualTo(String value) { + addCriterion("id =", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotEqualTo(String value) { + addCriterion("id <>", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThan(String value) { + addCriterion("id >", value, "id"); + return (Criteria) this; + } + + public Criteria andIdGreaterThanOrEqualTo(String value) { + addCriterion("id >=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThan(String value) { + addCriterion("id <", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLessThanOrEqualTo(String value) { + addCriterion("id <=", value, "id"); + return (Criteria) this; + } + + public Criteria andIdLike(String value) { + addCriterion("id like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdNotLike(String value) { + addCriterion("id not like", value, "id"); + return (Criteria) this; + } + + public Criteria andIdIn(List values) { + addCriterion("id in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdNotIn(List values) { + addCriterion("id not in", values, "id"); + return (Criteria) this; + } + + public Criteria andIdBetween(String value1, String value2) { + addCriterion("id between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andIdNotBetween(String value1, String value2) { + addCriterion("id not between", value1, value2, "id"); + return (Criteria) this; + } + + public Criteria andTableIdIsNull() { + addCriterion("table_id is null"); + return (Criteria) this; + } + + public Criteria andTableIdIsNotNull() { + addCriterion("table_id is not null"); + return (Criteria) this; + } + + public Criteria andTableIdEqualTo(String value) { + addCriterion("table_id =", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdNotEqualTo(String value) { + addCriterion("table_id <>", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdGreaterThan(String value) { + addCriterion("table_id >", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdGreaterThanOrEqualTo(String value) { + addCriterion("table_id >=", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdLessThan(String value) { + addCriterion("table_id <", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdLessThanOrEqualTo(String value) { + addCriterion("table_id <=", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdLike(String value) { + addCriterion("table_id like", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdNotLike(String value) { + addCriterion("table_id not like", value, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdIn(List values) { + addCriterion("table_id in", values, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdNotIn(List values) { + addCriterion("table_id not in", values, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdBetween(String value1, String value2) { + addCriterion("table_id between", value1, value2, "tableId"); + return (Criteria) this; + } + + public Criteria andTableIdNotBetween(String value1, String value2) { + addCriterion("table_id not between", value1, value2, "tableId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdIsNull() { + addCriterion("table_field_id is null"); + return (Criteria) this; + } + + public Criteria andTableFieldIdIsNotNull() { + addCriterion("table_field_id is not null"); + return (Criteria) this; + } + + public Criteria andTableFieldIdEqualTo(String value) { + addCriterion("table_field_id =", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdNotEqualTo(String value) { + addCriterion("table_field_id <>", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdGreaterThan(String value) { + addCriterion("table_field_id >", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdGreaterThanOrEqualTo(String value) { + addCriterion("table_field_id >=", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdLessThan(String value) { + addCriterion("table_field_id <", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdLessThanOrEqualTo(String value) { + addCriterion("table_field_id <=", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdLike(String value) { + addCriterion("table_field_id like", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdNotLike(String value) { + addCriterion("table_field_id not like", value, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdIn(List values) { + addCriterion("table_field_id in", values, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdNotIn(List values) { + addCriterion("table_field_id not in", values, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdBetween(String value1, String value2) { + addCriterion("table_field_id between", value1, value2, "tableFieldId"); + return (Criteria) this; + } + + public Criteria andTableFieldIdNotBetween(String value1, String value2) { + addCriterion("table_field_id not between", value1, value2, "tableFieldId"); + return (Criteria) this; + } + } + + public static class Criteria extends GeneratedCriteria { + + protected Criteria() { + super(); + } + } + + public static class Criterion { + private String condition; + + private Object value; + + private Object secondValue; + + private boolean noValue; + + private boolean singleValue; + + private boolean betweenValue; + + private boolean listValue; + + private String typeHandler; + + public String getCondition() { + return condition; + } + + public Object getValue() { + return value; + } + + public Object getSecondValue() { + return secondValue; + } + + public boolean isNoValue() { + return noValue; + } + + public boolean isSingleValue() { + return singleValue; + } + + public boolean isBetweenValue() { + return betweenValue; + } + + public boolean isListValue() { + return listValue; + } + + public String getTypeHandler() { + return typeHandler; + } + + protected Criterion(String condition) { + super(); + this.condition = condition; + this.typeHandler = null; + this.noValue = true; + } + + protected Criterion(String condition, Object value, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.typeHandler = typeHandler; + if (value instanceof List) { + this.listValue = true; + } else { + this.singleValue = true; + } + } + + protected Criterion(String condition, Object value) { + this(condition, value, null); + } + + protected Criterion(String condition, Object value, Object secondValue, String typeHandler) { + super(); + this.condition = condition; + this.value = value; + this.secondValue = secondValue; + this.typeHandler = typeHandler; + this.betweenValue = true; + } + + protected Criterion(String condition, Object value, Object secondValue) { + this(condition, value, secondValue, null); + } + } +} \ No newline at end of file diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasetTableKeyMapper.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasetTableKeyMapper.java new file mode 100644 index 0000000000..fc1f9cc209 --- /dev/null +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/base/mapper/DatasetTableKeyMapper.java @@ -0,0 +1,30 @@ +package io.dataease.plugins.common.base.mapper; + +import io.dataease.plugins.common.base.domain.DatasetTableKey; +import io.dataease.plugins.common.base.domain.DatasetTableKeyExample; +import java.util.List; +import org.apache.ibatis.annotations.Param; + +public interface DatasetTableKeyMapper { + long countByExample(DatasetTableKeyExample example); + + int deleteByExample(DatasetTableKeyExample example); + + int deleteByPrimaryKey(String id); + + int insert(DatasetTableKey record); + + int insertSelective(DatasetTableKey record); + + List selectByExample(DatasetTableKeyExample example); + + DatasetTableKey selectByPrimaryKey(String id); + + int updateByExampleSelective(@Param("record") DatasetTableKey record, @Param("example") DatasetTableKeyExample example); + + int updateByExample(@Param("record") DatasetTableKey record, @Param("example") DatasetTableKeyExample example); + + int updateByPrimaryKeySelective(DatasetTableKey record); + + int updateByPrimaryKey(DatasetTableKey record); +} \ No newline at end of file