From 1ab4d41d250b56266164bb24af5abaf6c5aa943a Mon Sep 17 00:00:00 2001 From: taojinlong Date: Tue, 12 Mar 2024 17:53:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A9=B1=E5=8A=A8=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE=E5=86=85?= =?UTF-8?q?=E7=BD=AE=E9=A9=B1=E5=8A=A8=E7=9A=84=E7=89=88=E6=9C=AC=E8=8C=83?= =?UTF-8?q?=E5=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/DriverMgmController.java | 10 ---- .../provider/datasource/JdbcProvider.java | 12 +++-- .../service/datasource/DriverService.java | 54 +++++++++++++++++-- .../system/datasource/DriverFormDetail.vue | 14 +++-- .../src/views/system/datasource/DsTree.vue | 11 +++- .../datasource/dm/provider/DmDsProvider.java | 17 +++--- .../kingbase/provider/KingbaseDsProvider.java | 11 ++-- .../kylin/provider/KylinDsProvider.java | 11 ++-- .../mongo/provider/MongobiDsProvider.java | 11 ++-- .../dm/provider/PrestoDsProvider.java | 11 ++-- .../view/service/ViewPluginService.java | 1 + 11 files changed, 124 insertions(+), 39 deletions(-) diff --git a/core/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java b/core/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java index 4ab71a7fb8..469fc263bc 100644 --- a/core/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java +++ b/core/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java @@ -63,16 +63,6 @@ public class DriverMgmController { @GetMapping("/list/{type}") public List listDeDriver(@PathVariable String type) throws Exception { List driverDTOS = listDeDriver().stream().filter(driverDTO -> driverDTO.getType().equalsIgnoreCase(type)).collect(Collectors.toList()); - DriverDTO driverDTO = new DriverDTO(); - driverDTO.setId("default"); - driverDTO.setName("default"); - driverDTO.setDriverClass("default"); - datasourceService.types().forEach(dataSourceType -> { - if (dataSourceType.getType().equalsIgnoreCase(type)) { - driverDTO.setSurpportVersions(dataSourceType.getSurpportVersions()); - } - }); - driverDTOS.add(driverDTO); driverDTOS.forEach(driverDTO1 -> { if (StringUtils.isEmpty(driverDTO1.getSurpportVersions())) { driverDTO1.setNameAlias(driverDTO1.getName()); diff --git a/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index 144ed5ef08..6a7fd61c5d 100644 --- a/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -581,10 +581,16 @@ public class JdbcProvider extends DefaultJdbcProvider { if (isDefaultClassLoader(customDriver)) { driverClassName = defaultDriver; jdbcClassLoader = extendedJdbcClassLoader; - for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { - if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { - surpportVersions = value.getSurpportVersions(); + + DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType()); + if(driver == null){ + for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { + if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { + surpportVersions = value.getSurpportVersions(); + } } + }else { + surpportVersions = driver.getSurpportVersions(); } } else { if (deDriver == null) { diff --git a/core/backend/src/main/java/io/dataease/service/datasource/DriverService.java b/core/backend/src/main/java/io/dataease/service/datasource/DriverService.java index f9aad2e882..2857235cd2 100644 --- a/core/backend/src/main/java/io/dataease/service/datasource/DriverService.java +++ b/core/backend/src/main/java/io/dataease/service/datasource/DriverService.java @@ -12,6 +12,7 @@ import io.dataease.i18n.Translator; import io.dataease.plugins.common.base.domain.*; import io.dataease.plugins.common.base.mapper.DeDriverDetailsMapper; import io.dataease.plugins.common.base.mapper.DeDriverMapper; +import io.dataease.plugins.common.dto.datasource.DataSourceType; import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.provider.DefaultJdbcProvider; import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader; @@ -30,6 +31,7 @@ import java.lang.reflect.Modifier; import java.util.*; import java.util.jar.JarEntry; import java.util.jar.JarFile; +import java.util.stream.Collectors; @Transactional(rollbackFor = Exception.class) @Service @@ -46,20 +48,54 @@ public class DriverService { public List list() throws Exception { List driverDTOS = new ArrayList<>(); - deDriverMapper.selectByExampleWithBLOBs(null).forEach(deDriver -> { + Collection dataSourceTypes = datasourceService.types(); + List dsTypes = datasourceService.types().stream().map(DataSourceType::getType).collect(Collectors.toList()); + List deDrivers = deDriverMapper.selectByExampleWithBLOBs(null); + List driverTypes = deDrivers.stream().filter(deDriver -> deDriver.getId().contains("default")).map(DeDriver::getType).collect(Collectors.toList()); + deDrivers.forEach(deDriver -> { DriverDTO driverDTO = new DriverDTO(); BeanUtils.copyBean(driverDTO, deDriver); - datasourceService.types().forEach(dataSourceType -> { + dataSourceTypes.forEach(dataSourceType -> { if (dataSourceType.getType().equalsIgnoreCase(deDriver.getType())) { driverDTO.setTypeDesc(dataSourceType.getName()); } - }); driverDTOS.add(driverDTO); }); + for (String dsType : dsTypes) { + if(!driverTypes.contains(dsType)){ + DriverDTO driverDTO = new DriverDTO(); + driverDTO.setId("default-" + dsType); + driverDTO.setName("default"); + driverDTO.setType(dsType); + dataSourceTypes.forEach(dataSourceType -> { + if (dataSourceType.getType().equalsIgnoreCase(dsType)) { + driverDTO.setTypeDesc(dataSourceType.getName()); + driverDTO.setSurpportVersions(dataSourceType.getSurpportVersions()); + } + }); + driverDTOS.add(driverDTO); + } + } return driverDTOS; } + public DeDriver getDefaultDeDriver(String type){ + DeDriver deDriver = deDriverMapper.selectByPrimaryKey("default-" + type); + if(deDriver == null){ + deDriver = new DeDriver(); + deDriver.setId("default-" + type); + deDriver.setName("default"); + deDriver.setType(type); + for (DataSourceType dataSourceType : datasourceService.types()) { + if (dataSourceType.getType().equalsIgnoreCase(type)) { + deDriver.setSurpportVersions(dataSourceType.getSurpportVersions()); + } + } + } + return deDriver; + } + public void delete(DeDriver deDriver) { for (Datasource datasource : datasourceService.listByType(deDriver.getType())) { JdbcConfiguration configuration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class); @@ -90,7 +126,17 @@ public class DriverService { } public DeDriver update(DeDriver deDriver) { - deDriverMapper.updateByPrimaryKeyWithBLOBs(deDriver); + if(StringUtils.isNotEmpty(deDriver.getId()) && deDriver.getId().contains("default")){ + if(deDriverMapper.selectByPrimaryKey(deDriver.getId()) != null){ + deDriverMapper.updateByPrimaryKeyWithBLOBs(deDriver); + }else { + deDriver.setCreateTime(System.currentTimeMillis()); + deDriverMapper.insert(deDriver); + } + }else { + deDriverMapper.updateByPrimaryKeyWithBLOBs(deDriver); + } + return deDriver; } diff --git a/core/frontend/src/views/system/datasource/DriverFormDetail.vue b/core/frontend/src/views/system/datasource/DriverFormDetail.vue index 4d314faeae..89338fef14 100644 --- a/core/frontend/src/views/system/datasource/DriverFormDetail.vue +++ b/core/frontend/src/views/system/datasource/DriverFormDetail.vue @@ -19,7 +19,7 @@ label-width="180px" label-position="right" > - @@ -41,6 +41,7 @@ -

+

{{ $t('datasource.can_be_uploaded') }}

@@ -303,7 +304,14 @@ export default { }, refreshType(form) { this.$emit('refresh-type', form) - } + }, + showItem(id){ + if (id !== '' && id.indexOf("default") !== -1) { + return false + } else { + return true + } + }, } } diff --git a/core/frontend/src/views/system/datasource/DsTree.vue b/core/frontend/src/views/system/datasource/DsTree.vue index 73efaac693..e84a64ee74 100644 --- a/core/frontend/src/views/system/datasource/DsTree.vue +++ b/core/frontend/src/views/system/datasource/DsTree.vue @@ -216,7 +216,7 @@ :label="$t('datasource.driver_name')" prop="name" > - @@ -379,6 +379,7 @@ export default { dialogTitle: '', editDriver: false, driverForm: { + id: '', name: '', desc: '', type: '' @@ -457,6 +458,13 @@ export default { handleClick() { document.querySelector(`.${this.tabActive}`).scrollIntoView() }, + disabledEdit(id){ + if (id !== '' && id.indexOf("default") !== -1) { + return true + } else { + return false + } + }, createDriveOrDs() { if (this.showView === 'Driver') { this.addDriver() @@ -830,6 +838,7 @@ export default { this.$refs['driverForm'].resetFields() this.editDriver = false this.driverForm = { + id: '', name: '', desc: '', type: '' diff --git a/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/DmDsProvider.java b/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/DmDsProvider.java index 2fdff3920e..6b7cc957a8 100644 --- a/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/DmDsProvider.java +++ b/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/DmDsProvider.java @@ -82,10 +82,15 @@ public class DmDsProvider extends DefaultJdbcProvider { if (isDefaultClassLoader(customDriver)) { driverClassName = defaultDriver; jdbcClassLoader = extendedJdbcClassLoader; - for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { - if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ - surpportVersions = value.getSurpportVersions(); + DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType()); + if (driver == null) { + for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { + if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { + surpportVersions = value.getSurpportVersions(); + } } + } else { + surpportVersions = driver.getSurpportVersions(); } } else { if (deDriver == null) { @@ -107,10 +112,10 @@ public class DmDsProvider extends DefaultJdbcProvider { } finally { Thread.currentThread().setContextClassLoader(classLoader); } - if(StringUtils.isNotEmpty(surpportVersions) && surpportVersions.split(",").length > 0){ - if(! Arrays.asList(surpportVersions.split(",")).contains(String.valueOf(conn.getMetaData().getDatabaseMajorVersion()))){ + if (StringUtils.isNotEmpty(surpportVersions) && surpportVersions.split(",").length > 0) { + if (!Arrays.asList(surpportVersions.split(",")).contains(String.valueOf(conn.getMetaData().getDatabaseMajorVersion()))) { DataEaseException.throwException("当前驱动不支持此版本!"); - }; + } } return conn; } diff --git a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/provider/KingbaseDsProvider.java b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/provider/KingbaseDsProvider.java index a7670fe4b2..58b59d2a67 100644 --- a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/provider/KingbaseDsProvider.java +++ b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/provider/KingbaseDsProvider.java @@ -64,10 +64,15 @@ public class KingbaseDsProvider extends DefaultJdbcProvider { if (isDefaultClassLoader(customDriver)) { driverClassName = defaultDriver; jdbcClassLoader = extendedJdbcClassLoader; - for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { - if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ - surpportVersions = value.getSurpportVersions(); + DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType()); + if (driver == null) { + for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { + if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { + surpportVersions = value.getSurpportVersions(); + } } + } else { + surpportVersions = driver.getSurpportVersions(); } } else { if (deDriver == null) { diff --git a/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/provider/KylinDsProvider.java b/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/provider/KylinDsProvider.java index d4a6b4bcc2..d4f85c4f43 100644 --- a/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/provider/KylinDsProvider.java +++ b/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/provider/KylinDsProvider.java @@ -58,10 +58,15 @@ public class KylinDsProvider extends DefaultJdbcProvider { if(isDefaultClassLoader(customDriver)){ driverClassName = defaultDriver; jdbcClassLoader = extendedJdbcClassLoader; - for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { - if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ - surpportVersions = value.getSurpportVersions(); + DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType()); + if (driver == null) { + for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { + if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { + surpportVersions = value.getSurpportVersions(); + } } + } else { + surpportVersions = driver.getSurpportVersions(); } }else { if(deDriver == null){ diff --git a/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/provider/MongobiDsProvider.java b/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/provider/MongobiDsProvider.java index 07b5b52842..0c2fc3c82c 100644 --- a/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/provider/MongobiDsProvider.java +++ b/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/provider/MongobiDsProvider.java @@ -62,10 +62,15 @@ public class MongobiDsProvider extends DefaultJdbcProvider { if(isDefaultClassLoader(customDriver)){ driverClassName = defaultDriver; jdbcClassLoader = extendedJdbcClassLoader; - for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { - if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ - surpportVersions = value.getSurpportVersions(); + DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType()); + if (driver == null) { + for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { + if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { + surpportVersions = value.getSurpportVersions(); + } } + } else { + surpportVersions = driver.getSurpportVersions(); } }else { if(deDriver == null){ diff --git a/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/PrestoDsProvider.java b/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/PrestoDsProvider.java index 0041ebd85b..a06fafc3ce 100644 --- a/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/PrestoDsProvider.java +++ b/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/provider/PrestoDsProvider.java @@ -54,10 +54,15 @@ public class PrestoDsProvider extends DefaultJdbcProvider { ExtendedJdbcClassLoader classLoader; if(isDefaultClassLoader(customDriver)){ classLoader = extendedJdbcClassLoader; - for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { - if(value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())){ - surpportVersions = value.getSurpportVersions(); + DeDriver driver = deDriverMapper.selectByPrimaryKey("default-" + datasourceRequest.getDatasource().getType()); + if (driver == null) { + for (DataSourceType value : SpringContextUtil.getApplicationContext().getBeansOfType(DataSourceType.class).values()) { + if (value.getType().equalsIgnoreCase(datasourceRequest.getDatasource().getType())) { + surpportVersions = value.getSurpportVersions(); + } } + } else { + surpportVersions = driver.getSurpportVersions(); } }else { deDriver = deDriverMapper.selectByPrimaryKey(customDriver); diff --git a/sdk/dataease-plugin-view/src/main/java/io/dataease/plugins/view/service/ViewPluginService.java b/sdk/dataease-plugin-view/src/main/java/io/dataease/plugins/view/service/ViewPluginService.java index d94ebdaf09..06740ec3c4 100644 --- a/sdk/dataease-plugin-view/src/main/java/io/dataease/plugins/view/service/ViewPluginService.java +++ b/sdk/dataease-plugin-view/src/main/java/io/dataease/plugins/view/service/ViewPluginService.java @@ -20,6 +20,7 @@ public abstract class ViewPluginService extends PluginComponentService { private PluginViewRSHandler rsHandler; + public abstract PluginViewType viewType(); public abstract Object format(Object param);