diff --git a/backend/src/main/java/io/dataease/controller/engine/KettleController.java b/backend/src/main/java/io/dataease/controller/engine/KettleController.java index b33b62747d..bbf67c7a7f 100644 --- a/backend/src/main/java/io/dataease/controller/engine/KettleController.java +++ b/backend/src/main/java/io/dataease/controller/engine/KettleController.java @@ -43,8 +43,8 @@ public class KettleController { @ApiIgnore @PostMapping("validate") - public void validate(@RequestBody KettleDTO kettleDTO) throws Exception{ - kettleService.validate(kettleDTO); + public ResultHolder validate(@RequestBody KettleDTO kettleDTO) throws Exception{ + return kettleService.validate(kettleDTO); } @RequiresPermissions("sysparam:read") diff --git a/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java b/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java index 8918c488b8..d3170c606b 100644 --- a/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java +++ b/backend/src/main/java/io/dataease/listener/DataSourceInitStartListener.java @@ -19,8 +19,7 @@ public class DataSourceInitStartListener implements ApplicationListener qrtzSchedulerState.getLastCheckinTime() + qrtzSchedulerState.getCheckinInterval() + 1000 > utilMapper.currentTimestamp()) .map(QrtzSchedulerStateKey::getInstanceName).collect(Collectors.toList()); - List jobStoppeddDatasetTables = new ArrayList<>(); DatasetTableExample example = new DatasetTableExample(); example.createCriteria().andSyncStatusEqualTo(JobStatus.Underway.name()); + List jobStoppeddDatasetTables = new ArrayList<>(); + datasetTableMapper.selectByExample(example).forEach(datasetTable -> { if (StringUtils.isEmpty(datasetTable.getQrtzInstance()) || !activeQrtzInstances.contains( datasetTable.getQrtzInstance().substring(0, datasetTable.getQrtzInstance().length() - 13))) { @@ -2235,21 +2236,25 @@ public class DataSetTableService { return; } + //Task + DatasetTableTaskExample datasetTableTaskExample = new DatasetTableTaskExample(); + DatasetTableTaskExample.Criteria criteria = datasetTableTaskExample.createCriteria(); + criteria.andTableIdIn(jobStoppeddDatasetTables.stream().map(DatasetTable::getId).collect(Collectors.toList())).andLastExecStatusEqualTo(JobStatus.Underway.name()); + List datasetTableTasks = dataSetTableTaskService.list(datasetTableTaskExample); + if (CollectionUtils.isEmpty(datasetTableTasks)) { + return; + } + + dataSetTableTaskService.updateTaskStatus(datasetTableTasks, JobStatus.Error); + //DatasetTable DatasetTable record = new DatasetTable(); record.setSyncStatus(JobStatus.Error.name()); example.clear(); example.createCriteria().andSyncStatusEqualTo(JobStatus.Underway.name()) - .andIdIn(jobStoppeddDatasetTables.stream().map(DatasetTable::getId).collect(Collectors.toList())); + .andIdIn(datasetTableTasks.stream().map(DatasetTableTask::getTableId).collect(Collectors.toList())); datasetTableMapper.updateByExampleSelective(record, example); - //Task - DatasetTableTaskExample datasetTableTaskExample = new DatasetTableTaskExample(); - DatasetTableTaskExample.Criteria criteria = datasetTableTaskExample.createCriteria(); - criteria.andTableIdIn(jobStoppeddDatasetTables.stream().map(DatasetTable::getId).collect(Collectors.toList())).andStatusEqualTo(JobStatus.Underway.name()); - List datasetTableTasks = dataSetTableTaskService.list(datasetTableTaskExample); - dataSetTableTaskService.updateTaskStatus(datasetTableTasks, JobStatus.Error); - //TaskLog DatasetTableTaskLog datasetTableTaskLog = new DatasetTableTaskLog(); datasetTableTaskLog.setStatus(JobStatus.Error.name()); @@ -2257,13 +2262,13 @@ public class DataSetTableService { DatasetTableTaskLogExample datasetTableTaskLogExample = new DatasetTableTaskLogExample(); datasetTableTaskLogExample.createCriteria().andStatusEqualTo(JobStatus.Underway.name()) - .andTableIdIn(jobStoppeddDatasetTables.stream().map(DatasetTable::getId).collect(Collectors.toList())); + .andTableIdIn(datasetTableTasks.stream().map(DatasetTableTask::getTableId).collect(Collectors.toList())); datasetTableTaskLogMapper.updateByExampleSelective(datasetTableTaskLog, datasetTableTaskLogExample); - for (DatasetTable jobStoppeddDatasetTable : jobStoppeddDatasetTables) { - extractDataService.deleteFile("all_scope", jobStoppeddDatasetTable.getId()); - extractDataService.deleteFile("incremental_add", jobStoppeddDatasetTable.getId()); - extractDataService.deleteFile("incremental_delete", jobStoppeddDatasetTable.getId()); + for (DatasetTableTask datasetTableTask : datasetTableTasks) { + extractDataService.deleteFile("all_scope", datasetTableTask.getTableId()); + extractDataService.deleteFile("incremental_add", datasetTableTask.getTableId()); + extractDataService.deleteFile("incremental_delete", datasetTableTask.getTableId()); } } diff --git a/backend/src/main/java/io/dataease/service/kettle/KettleService.java b/backend/src/main/java/io/dataease/service/kettle/KettleService.java index aff3dc667f..960783fb34 100644 --- a/backend/src/main/java/io/dataease/service/kettle/KettleService.java +++ b/backend/src/main/java/io/dataease/service/kettle/KettleService.java @@ -60,12 +60,18 @@ public class KettleService { deEngineMapper.deleteByPrimaryKey(id); } - public void validate(KettleDTO kettleDTO) throws Exception { + public ResultHolder validate(KettleDTO kettleDTO) throws Exception { HttpClientConfig httpClientConfig = new HttpClientConfig(); String authValue = "Basic " + Base64.getUrlEncoder().encodeToString((kettleDTO.getUser() + ":" + kettleDTO.getPasswd()).getBytes()); httpClientConfig.addHeader("Authorization", authValue); - String response = HttpClientUtil.get("http://" + kettleDTO.getCarte() + ":" + kettleDTO.getPort() + "/kettle/status/", httpClientConfig); + try { + String response = HttpClientUtil.get("http://" + kettleDTO.getCarte() + ":" + kettleDTO.getPort() + "/kettle/status/", httpClientConfig); + + return ResultHolder.error("Kettle is valid."); + }catch (Exception e){ + return ResultHolder.error("Kettle is invalid: " + e.getMessage()); + } } public ResultHolder validate(String id) { @@ -116,7 +122,7 @@ public class KettleService { remoteSlaveServer.setHostname(kettleDTO.getCarte()); remoteSlaveServer.setPort(kettleDTO.getPort()); remoteSlaveServer.setUsername(kettleDTO.getUser()); - remoteSlaveServer.setPort(kettleDTO.getPasswd()); + remoteSlaveServer.setPassword(kettleDTO.getPasswd()); } return remoteSlaveServer; } diff --git a/frontend/src/api/system/kettle.js b/frontend/src/api/system/kettle.js index dc8ceea939..213ef62de7 100644 --- a/frontend/src/api/system/kettle.js +++ b/frontend/src/api/system/kettle.js @@ -31,7 +31,7 @@ export function save(data) { export function deleteKettle(id) { return request({ - url: '/delete/' + id, + url: '/kettle/delete/' + id, method: 'delete', loading: true }) diff --git a/frontend/src/views/system/SysParam/ClusterModeSetting.vue b/frontend/src/views/system/SysParam/ClusterModeSetting.vue index 55497e578a..9e3b62bff1 100644 --- a/frontend/src/views/system/SysParam/ClusterModeSetting.vue +++ b/frontend/src/views/system/SysParam/ClusterModeSetting.vue @@ -46,7 +46,7 @@ - + @@ -156,6 +156,13 @@ export default { trigger: ['change', 'blur'] } ], + 'configuration.httpPort': [ + { + required: true, + message: this.$t('datasource.please_input_port'), + trigger: ['change', 'blur'] + } + ], 'configuration.dataBase': [ { required: true, @@ -212,7 +219,7 @@ export default { this.show = false }, save() { - if (this.form.configuration.dataSourceType === 'jdbc' && this.form.configuration.port <= 0) { + if (this.form.configuration.dataSourceType === 'jdbc' && (this.form.configuration.port <= 0 || this.form.configuration.httpPort <= 0)) { this.$message.error(i18n.t('datasource.port_no_less_then_0')) return } @@ -256,7 +263,7 @@ export default { this.$message.error(i18n.t('datasource.please_choose_schema')) return } - if (this.form.configuration.dataSourceType === 'jdbc' && this.form.configuration.port <= 0) { + if (this.form.configuration.dataSourceType === 'jdbc' && (this.form.configuration.port <= 0 || this.form.configuration.httpPort <= 0)) { this.$message.error(i18n.t('datasource.port_no_less_then_0')) return } diff --git a/frontend/src/views/system/SysParam/KettleSetting.vue b/frontend/src/views/system/SysParam/KettleSetting.vue index 4a43f68110..fa4f9acdf0 100644 --- a/frontend/src/views/system/SysParam/KettleSetting.vue +++ b/frontend/src/views/system/SysParam/KettleSetting.vue @@ -118,7 +118,7 @@ export default { }], 'configuration.passwd': [{ required: true, - message: this.$t('dcommons.required'), + message: this.$t('commons.required'), trigger: 'blur' }] }