diff --git a/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java b/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java index 049a9d4120..811dad6223 100644 --- a/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java +++ b/backend/src/main/java/io/dataease/controller/datasource/DriverMgmController.java @@ -45,7 +45,7 @@ public class DriverMgmController { value = "id" ) public void delete(@RequestBody DeDriver deDriver) throws Exception{ - driverService.delete(deDriver.getId()); + driverService.delete(deDriver); } @RequiresPermissions("datasource:read") diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index 949be78b86..93bc11b59d 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -449,6 +449,9 @@ public class JdbcProvider extends DefaultJdbcProvider { driverClassName = defaultDriver; jdbcClassLoader = extendedJdbcClassLoader; } else { + if(deDriver == null){ + deDriver = deDriverMapper.selectByPrimaryKey(customDriver); + } driverClassName = deDriver.getDriverClass(); jdbcClassLoader = getCustomJdbcClassLoader(deDriver); } diff --git a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java index f096eed2b9..0ee5240517 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DatasourceService.java @@ -406,6 +406,12 @@ public class DatasourceService { return ApiProvider.checkApiDefinition(apiDefinition, response); } + public List listByType(String type){ + DatasourceExample example = new DatasourceExample(); + example.createCriteria().andTypeEqualTo(type); + return datasourceMapper.selectByExampleWithBLOBs(example); + } + private void checkAndUpdateDatasourceStatus(Datasource datasource){ try { Provider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); diff --git a/backend/src/main/java/io/dataease/service/datasource/DriverService.java b/backend/src/main/java/io/dataease/service/datasource/DriverService.java index 7f70748040..2dc42bfd5b 100644 --- a/backend/src/main/java/io/dataease/service/datasource/DriverService.java +++ b/backend/src/main/java/io/dataease/service/datasource/DriverService.java @@ -1,14 +1,20 @@ package io.dataease.service.datasource; +import com.google.gson.Gson; import io.dataease.commons.utils.BeanUtils; import io.dataease.commons.utils.DeFileUtils; import io.dataease.dto.DriverDTO; +import io.dataease.dto.datasource.SqlServerConfiguration; +import io.dataease.i18n.Translator; +import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.common.base.domain.DeDriver; import io.dataease.plugins.common.base.domain.DeDriverDetails; import io.dataease.plugins.common.base.domain.DeDriverDetailsExample; import io.dataease.plugins.common.base.mapper.DeDriverDetailsMapper; import io.dataease.plugins.common.base.mapper.DeDriverMapper; +import io.dataease.plugins.datasource.entity.JdbcConfiguration; import io.dataease.plugins.datasource.provider.ExtendedJdbcClassLoader; +import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -55,13 +61,18 @@ public class DriverService { return driverDTOS; } - public void delete(String driverId) { - deDriverMapper.deleteByPrimaryKey(driverId); - + public void delete(DeDriver deDriver) { + for (Datasource datasource : datasourceService.listByType(deDriver.getType())) { + JdbcConfiguration configuration = new Gson().fromJson(datasource.getConfiguration(), JdbcConfiguration.class); + if(StringUtils.isNotEmpty(configuration.getCustomDriver()) && configuration.getCustomDriver().equalsIgnoreCase(deDriver.getId())){ + throw new RuntimeException(Translator.get("I18N_DRIVER_NOT_DELETE")); + } + } + deDriverMapper.deleteByPrimaryKey(deDriver.getId()); DeDriverDetailsExample example = new DeDriverDetailsExample(); - example.createCriteria().andDeDriverIdEqualTo(driverId); + example.createCriteria().andDeDriverIdEqualTo(deDriver.getId()); deDriverDetailsMapper.deleteByExample(example); - DeFileUtils.deleteFile(DRIVER_PATH + driverId + "/"); + DeFileUtils.deleteFile(DRIVER_PATH + deDriver.getId() + "/"); } public DeDriver save(DeDriver deDriver) { diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index cd97a61f7a..ec209cb48c 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -149,3 +149,5 @@ SOURCE_TYPE_VIEW=VIEW SOURCE_TYPE_USER=USER SOURCE_TYPE_DEPT=ORG SOURCE_TYPE_ROLE=ROLE + +I18N_DRIVER_NOT_DELETE=Drivers in use cannot be deleted \ 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 adf3cf2567..6dc9adb6e2 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -152,3 +152,5 @@ I18N_OPERATE_TYPE=操作类型 I18N_DETAIL=操作详情 I18N_USER=操作人 I18N_TIME=操作时间 + +I18N_DRIVER_NOT_DELETE=使用中的驱动不允许删除 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 4baaeb4359..de9f4c2b44 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -148,3 +148,5 @@ SOURCE_TYPE_VIEW=視圖 SOURCE_TYPE_USER=用戶 SOURCE_TYPE_DEPT=組織 SOURCE_TYPE_ROLE=角色 + +I18N_DRIVER_NOT_DELETE=使用中的驅動不允許删除 \ No newline at end of file diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 48f589bf53..22db357987 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1337,7 +1337,8 @@ export default { modify: 'Modify', show_info: 'Driver info', file_name: 'File name', - version: 'version' + version: 'version', + please_set_driverClass: 'Please specify driver class' }, datasource: { auth_method: 'Auth method', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index b93f7f1f10..3a20d4bab6 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1337,7 +1337,8 @@ export default { modify: '修改', show_info: '驅動信息', file_name: '文件名', - version: '版本' + version: '版本', + please_set_driverClass: '請指定驅動類' }, datasource: { auth_method: '認證方式', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 29e7e200fe..836830284b 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1339,7 +1339,8 @@ export default { modify: '修改', show_info: '驱动信息', file_name: '文件名', - version: '版本' + version: '版本', + please_set_driverClass: '请指定驱动类', }, datasource: { auth_method: '认证方式', diff --git a/frontend/src/views/system/datasource/DriverForm.vue b/frontend/src/views/system/datasource/DriverForm.vue index 8d4784cb51..9b5c2fdd4b 100644 --- a/frontend/src/views/system/datasource/DriverForm.vue +++ b/frontend/src/views/system/datasource/DriverForm.vue @@ -26,7 +26,7 @@ - + @@ -62,7 +62,7 @@ - + @@ -90,7 +90,7 @@ - + @@ -151,7 +151,8 @@ export default { {min: 2, max: 50, message: i18n.t('datasource.input_limit_2_25', [2, 25]), trigger: 'blur'}], desc: [{required: true, message: i18n.t('datasource.input_name'), trigger: 'blur'}, {min: 2, max: 200, message: i18n.t('datasource.input_limit_2_25', [2, 25]), trigger: 'blur'}], - type: [{required: true, message: i18n.t('datasource.please_choose_type'), trigger: 'blur'}] + type: [{required: true, message: i18n.t('datasource.please_choose_type'), trigger: 'blur'}], + driverClass: [{required: true, message: i18n.t('driver.please_set_driverClass'), trigger: 'blur'}] }, canEdit: false, driverFiles: [], @@ -231,9 +232,14 @@ export default { this.disabled = this.params && this.params.id && this.params.showModel && this.params.showModel === 'show' && !this.canEdit }, save(){ - updateDriver(this.driverForm).then(res => { - this.$success(i18n.t('commons.success')) - this.canEdit = false + this.$refs.driverForm.validate(valid => { + if (!valid) { + return false + } + updateDriver(this.driverForm).then(res => { + this.$success(i18n.t('commons.success')) + this.canEdit = false + }) }) }, reset() { diff --git a/frontend/src/views/system/datasource/DsForm.vue b/frontend/src/views/system/datasource/DsForm.vue index 402483c11c..693bcfa323 100644 --- a/frontend/src/views/system/datasource/DsForm.vue +++ b/frontend/src/views/system/datasource/DsForm.vue @@ -137,7 +137,7 @@ export default { acquireIncrement: 5, idleConnectionTestPeriod: 5, connectTimeout: 5, - customDriver: '' + customDriver: 'default' }, apiConfiguration: [] }, @@ -286,7 +286,7 @@ export default { acquireIncrement: 5, idleConnectionTestPeriod: 5, connectTimeout: 5, - customDriver: '' + customDriver: 'default' } }, @@ -525,7 +525,7 @@ export default { if (this.dsTypes[i].type === this.form.type) { if(this.form.type !== 'api' && !init){ this.form.configuration.extraParams = this.dsTypes[i].extraParams - this.form.configuration.customDriver = '' + this.form.configuration.customDriver = 'default' } this.datasourceType = this.dsTypes[i] if(this.datasourceType.isJdbc){ diff --git a/frontend/src/views/system/datasource/DsTree.vue b/frontend/src/views/system/datasource/DsTree.vue index fb7b9f66cf..aa0b557a72 100644 --- a/frontend/src/views/system/datasource/DsTree.vue +++ b/frontend/src/views/system/datasource/DsTree.vue @@ -111,7 +111,7 @@ - + @@ -123,7 +123,7 @@ filterable > { this.dsTypes = res.data + this.dsTypes.forEach(item => { + if(item.isJdbc){ + this.dsTypesForDriver.push(item) + } + }) }) }, refreshType(datasource) {