diff --git a/.gitignore b/.gitignore index 677be40..ef2dbaf 100644 --- a/.gitignore +++ b/.gitignore @@ -57,5 +57,6 @@ pnpm-debug.log* package-lock.json +../conf/data/ehcache +../data -conf/data/ehcache \ No newline at end of file diff --git a/backend/src/main/java/com/ipsos/datasource/controller/DatasourceController.java b/backend/src/main/java/com/ipsos/datasource/controller/DatasourceController.java index b539835..ac61d7b 100644 --- a/backend/src/main/java/com/ipsos/datasource/controller/DatasourceController.java +++ b/backend/src/main/java/com/ipsos/datasource/controller/DatasourceController.java @@ -4,6 +4,7 @@ import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.ipsos.base.domain.Datasource; +import com.ipsos.datasource.dto.TableFiled; import com.ipsos.dto.DatasourceDTO; import com.ipsos.commons.utils.AuthUtils; import com.ipsos.commons.utils.PageUtils; @@ -20,6 +21,7 @@ import springfox.documentation.annotations.ApiIgnore; import javax.annotation.Resource; import java.util.List; +import java.util.Map; @Api(tags = "数据源:数据源管理") @ApiSupport(order = 30) @@ -83,6 +85,18 @@ public class DatasourceController { return datasourceService.getTables(datasource); } + @ApiOperation("查询表字段") + @PostMapping("/getFields/{tableName}") + public List getFields(@RequestBody Datasource datasource, @PathVariable String tableName) throws Exception { + return datasourceService.getFields(datasource, tableName); + } + + @ApiOperation("查询表字段") + @PostMapping("/getData/{tableName}/{fetchSize}") + public Map getData(@RequestBody Datasource datasource, @PathVariable String tableName, @PathVariable Integer fetchSize) throws Exception { + return datasourceService.getDataByDatasource(datasource, tableName, fetchSize); + } + @ApiIgnore @PostMapping("/getSchema") public List getSchema(@RequestBody Datasource datasource) throws Exception { diff --git a/backend/src/main/java/com/ipsos/datasource/service/DatasourceService.java b/backend/src/main/java/com/ipsos/datasource/service/DatasourceService.java index 18752a9..ee298dd 100644 --- a/backend/src/main/java/com/ipsos/datasource/service/DatasourceService.java +++ b/backend/src/main/java/com/ipsos/datasource/service/DatasourceService.java @@ -30,6 +30,7 @@ import com.ipsos.datasource.dto.*; import com.ipsos.datasource.request.DatasourceRequest; import com.ipsos.exception.DataEaseException; import com.ipsos.i18n.Translator; +import com.ipsos.provider.QueryProvider; import com.ipsos.service.dataset.DataSetGroupService; import com.ipsos.service.message.DeMsgutil; @@ -96,30 +97,31 @@ public class DatasourceService { List datasourceDTOS = extDataSourceMapper.queryUnion(request); datasourceDTOS.forEach(datasourceDTO -> { DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceDTO.getType()); - try{ + try { switch (datasourceType) { case mysql: case mariadb: case de_doris: case ds_doris: - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfiguration.class)) ); + datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfiguration.class))); break; case sqlServer: - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), SqlServerConfiguration.class)) ); + datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), SqlServerConfiguration.class))); break; case oracle: - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), OracleConfiguration.class)) ); + datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), OracleConfiguration.class))); break; case pg: - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), PgConfiguration.class)) ); + datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), PgConfiguration.class))); break; case ck: - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), CHConfiguration.class)) ); + datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), CHConfiguration.class))); break; default: break; } - }catch (Exception ignore){} + } catch (Exception ignore) { + } }); return datasourceDTOS; @@ -143,8 +145,8 @@ public class DatasourceService { DatasetTableExample example = new DatasetTableExample(); example.createCriteria().andDataSourceIdEqualTo(datasourceId); List datasetTables = datasetTableMapper.selectByExample(example); - if(CollectionUtils.isNotEmpty(datasetTables)){ - DataEaseException.throwException(datasetTables.size() + Translator.get("i18n_datasource_not_allow_delete_msg")); + if (CollectionUtils.isNotEmpty(datasetTables)) { + DataEaseException.throwException(datasetTables.size() + Translator.get("i18n_datasource_not_allow_delete_msg")); } Datasource datasource = datasourceMapper.selectByPrimaryKey(datasourceId); datasourceMapper.deleteByPrimaryKey(datasourceId); @@ -166,8 +168,8 @@ public class DatasourceService { DatasourceRequest datasourceRequest = new DatasourceRequest(); datasourceRequest.setDatasource(datasource); datasourceProvider.checkStatus(datasourceRequest); - return ResultHolder.success("Success"); - }catch (Exception e){ + return ResultHolder.success(datasourceProvider.getTables(datasourceRequest)); + } catch (Exception e) { return ResultHolder.error("Datasource is invalid: " + e.getMessage()); } @@ -175,8 +177,8 @@ public class DatasourceService { public ResultHolder validate(String datasourceId) { Datasource datasource = datasourceMapper.selectByPrimaryKey(datasourceId); - if(datasource == null){ - return ResultHolder.error("Can not find datasource: "+ datasourceId); + if (datasource == null) { + return ResultHolder.error("Can not find datasource: " + datasourceId); } try { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); @@ -184,11 +186,11 @@ public class DatasourceService { datasourceRequest.setDatasource(datasource); datasourceProvider.checkStatus(datasourceRequest); datasource.setStatus("Success"); - return ResultHolder.success("Success"); - }catch (Exception e){ + return ResultHolder.success(datasourceProvider.getTables(datasourceRequest)); + } catch (Exception e) { datasource.setStatus("Error"); return ResultHolder.error("Datasource is invalid: " + e.getMessage()); - }finally { + } finally { datasourceMapper.updateByPrimaryKey(datasource); } } @@ -200,6 +202,14 @@ public class DatasourceService { return datasourceProvider.getSchema(datasourceRequest); } + public ResultHolder getTablesByDS(Datasource datasource) throws Exception { + DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(datasource); + datasourceProvider.checkStatus(datasourceRequest); + return ResultHolder.success(datasourceProvider.getTables(datasourceRequest)); + } + public List getTables(Datasource datasource) throws Exception { Datasource ds = datasourceMapper.selectByPrimaryKey(datasource.getId()); DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType()); @@ -244,6 +254,27 @@ public class DatasourceService { return datasourceMapper.selectByPrimaryKey(id); } + public List getFields(Datasource datasource, String tableName) throws Exception { + DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(datasource); + QueryProvider qp = ProviderFactory.getQueryProvider(datasource.getType()); + datasourceRequest.setQuery(qp.convertTableToSql(tableName, datasource)); + return datasourceProvider.fetchResultField(datasourceRequest); + } + + public Map getDataByDatasource(Datasource datasource, String tableName, Integer fetchSize) throws Exception { + DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); + DatasourceRequest datasourceRequest = new DatasourceRequest(); + datasourceRequest.setDatasource(datasource); + QueryProvider qp = ProviderFactory.getQueryProvider(datasource.getType()); + datasourceRequest.setQuery(qp.convertTableToSql(tableName, datasource)); + datasourceRequest.setFetchSize(fetchSize); + datasourceRequest.setPageable(true); + datasourceRequest.setPreviewData(true); + return datasourceProvider.fetchResultAndField(datasourceRequest); + } + public void initAllDataSourceConnectionPool() { List datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample()); datasources.forEach(datasource -> { @@ -267,7 +298,7 @@ public class DatasourceService { } } - public void updateDatasourceStatus(){ + public void updateDatasourceStatus() { List datasources = datasourceMapper.selectByExampleWithBLOBs(new DatasourceExample()); datasources.forEach(datasource -> { // checkAndUpdateDatasourceStatus(datasource); @@ -275,7 +306,7 @@ public class DatasourceService { }); } - private void checkAndUpdateDatasourceStatus(Datasource datasource){ + private void checkAndUpdateDatasourceStatus(Datasource datasource) { try { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); @@ -287,7 +318,7 @@ public class DatasourceService { } } - private void checkAndUpdateDatasourceStatus(Datasource datasource, Boolean withMsg){ + private void checkAndUpdateDatasourceStatus(Datasource datasource, Boolean withMsg) { try { DatasourceProvider datasourceProvider = ProviderFactory.getProvider(datasource.getType()); DatasourceRequest datasourceRequest = new DatasourceRequest(); @@ -301,14 +332,14 @@ public class DatasourceService { if (!StringUtils.equals(temp.getStatus(), "Error")) { sendWebMsg(datasource); datasourceMapper.updateByPrimaryKeySelective(datasource); - } - + } + } } private void sendWebMsg(Datasource datasource) { - + String id = datasource.getId(); AuthURD authURD = AuthUtils.authURDR(id); Set userIds = AuthUtils.userIdsByURD(authURD); @@ -318,10 +349,10 @@ public class DatasourceService { Map param = new HashMap<>(); param.put("id", id); param.put("name", datasource.getName()); - - + + String content = "数据源【" + datasource.getName() + "】无效"; - + DeMsgutil.sendMsg(userId, typeId, 1L, content, gson.toJson(param)); }); } diff --git a/backend/src/main/java/com/ipsos/dto/DatasourceDTO.java b/backend/src/main/java/com/ipsos/dto/DatasourceDTO.java index fd04324..0ac0292 100644 --- a/backend/src/main/java/com/ipsos/dto/DatasourceDTO.java +++ b/backend/src/main/java/com/ipsos/dto/DatasourceDTO.java @@ -4,6 +4,8 @@ import com.ipsos.base.domain.Datasource; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import java.util.List; + /** * Author: wangjiahao * Date: 2021-05-18 @@ -15,4 +17,6 @@ public class DatasourceDTO extends Datasource { @ApiModelProperty("权限") private String privileges; + private List tables; + } diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties index ee5b2e2..c9ac912 100644 --- a/backend/src/main/resources/application.properties +++ b/backend/src/main/resources/application.properties @@ -36,8 +36,10 @@ knife4j.setting.enableAfterScript=false app.version=@project.version@ + logging.file.path=conf/logs/${spring.application.name} + # view spring.resources.static-locations=classpath:/templates/,classpath:/static/ diff --git a/backend/src/main/resources/ehcache/ehcache.xml b/backend/src/main/resources/ehcache/ehcache.xml index fcc8043..ced8631 100644 --- a/backend/src/main/resources/ehcache/ehcache.xml +++ b/backend/src/main/resources/ehcache/ehcache.xml @@ -8,6 +8,7 @@ java.io.tmpdir - 默认临时文件路径 --> +