diff --git a/.gitignore b/.gitignore index a28af86e43..0c403a5842 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ core/core-frontend/src/assets/fsSvg.html /sdk/dataease-plugin-filter/ /sdk/dataease-plugin-interface/ /sdk/dataease-plugin-view/ +/extensions/ +.vite/ diff --git a/Dockerfile b/Dockerfile index 5e7123a861..f5118e68fd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,9 +2,9 @@ FROM registry.cn-qingdao.aliyuncs.com/dataease/alpine-openjdk17-jre ARG IMAGE_TAG -RUN mkdir -p /opt/apps/config /opt/dataease/drivers/ /opt/dataease2.0/cache/ /opt/dataease2.0/data/map /opt/dataease2.0/data/static-resource/ +RUN mkdir -p /opt/apps/config /opt/dataease2.0/drivers/ /opt/dataease2.0/cache/ /opt/dataease2.0/data/map /opt/dataease2.0/data/static-resource/ -ADD drivers/* /opt/dataease/drivers/ +ADD drivers/* /opt/dataease2.0/drivers/ ADD mapFiles/ /opt/dataease2.0/data/map/ ADD staticResource/ /opt/dataease2.0/data/static-resource/ diff --git a/README.md b/README.md index 0fa9021e03..26307e9f7b 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,9 @@ DataEase 是开源的数据可视化分析工具,帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。DataEase 支持丰富的数据源连接,能够通过拖拉拽方式快速制作图表,并可以方便的与他人分享。 -![DataEase 概览图](https://github.com/dataease/dataease/assets/41712985/ef020c86-68e0-43a3-8054-f51463eae361) +![DataEase 概览图](https://github.com/dataease/dataease/assets/41712985/52ca92d0-955c-42f1-bb79-d9bb19913649) + + **DataEase 的优势:** @@ -52,11 +54,8 @@ DataEase 是开源的数据可视化分析工具,帮助用户快速分析数 ## DataEase 快速入门 -- [安装部署教程](https://dataease.io/docs/installation/installation_mode/) -- [快速入门视频](https://www.bilibili.com/video/BV1qG4y1F7uc/) -- [完整在线文档](https://dataease.io/docs/) -- [中文社区论坛](https://bbs.fit2cloud.com/c/de/6) -- [模板应用市场](https://dataease.io/templates/) +- [在线文档](https://dataease.io/docs/) +- [社区论坛](https://bbs.fit2cloud.com/c/de/6) ## License diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index d74064398a..a99cde6dcf 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -1,14 +1,12 @@ package io.dataease.chart.manage; import cn.hutool.core.collection.CollectionUtil; -import com.fasterxml.jackson.core.type.TypeReference; import io.dataease.api.chart.dto.*; import io.dataease.api.chart.request.ChartDrillRequest; import io.dataease.api.chart.request.ChartExtRequest; import io.dataease.api.dataset.dto.SqlVariableDetails; import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.api.dataset.union.model.SQLMeta; -import io.dataease.api.permissions.auth.api.InteractiveAuthApi; import io.dataease.api.permissions.auth.dto.BusiPerCheckDTO; import io.dataease.api.permissions.dataset.dto.DataSetRowPermissionsTreeDTO; import io.dataease.chart.constant.ChartConstants; @@ -30,6 +28,7 @@ import io.dataease.engine.utils.Utils; import io.dataease.exception.DEException; import io.dataease.i18n.Translator; import io.dataease.result.ResultCode; +import io.dataease.system.manage.CorePermissionManage; import io.dataease.utils.BeanUtils; import io.dataease.utils.JsonUtil; import jakarta.annotation.Resource; @@ -37,7 +36,6 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -65,8 +63,9 @@ public class ChartDataManage { private ChartViewManege chartViewManege; @Resource private PermissionManage permissionManage; - @Autowired(required = false) - private InteractiveAuthApi interactiveAuthApi; + + @Resource + private CorePermissionManage corePermissionManage; private static Logger logger = LoggerFactory.getLogger(ChartDataManage.class); @@ -140,11 +139,12 @@ public class ChartDataManage { DEException.throwException(ResultCode.DATA_IS_WRONG.code(), Translator.get("i18n_no_ds")); } // check permission - if (interactiveAuthApi != null) { - BusiPerCheckDTO dto = new BusiPerCheckDTO(); - dto.setId(table.getId()); - dto.setAuthEnum(AuthEnum.READ); - interactiveAuthApi.checkAuth(dto); + BusiPerCheckDTO dto = new BusiPerCheckDTO(); + dto.setId(table.getId()); + dto.setAuthEnum(AuthEnum.READ); + boolean checked = corePermissionManage.checkAuth(dto); + if (!checked) { + DEException.throwException(Translator.get("i18n_no_datasource_permission")); } // column permission diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java index 6be80e7fa5..ae5d7e6628 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetGroupManage.java @@ -9,8 +9,6 @@ import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.api.dataset.union.UnionDTO; import io.dataease.api.dataset.vo.DataSetBarVO; import io.dataease.api.ds.vo.DatasourceDTO; -import io.dataease.api.permissions.user.api.UserApi; -import io.dataease.api.permissions.user.vo.UserFormVO; import io.dataease.commons.constants.OptConstants; import io.dataease.dataset.dao.auto.entity.CoreDatasetGroup; import io.dataease.dataset.dao.auto.entity.CoreDatasetTable; @@ -31,11 +29,11 @@ import io.dataease.license.config.XpackInteract; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; import io.dataease.operation.manage.CoreOptRecentManage; +import io.dataease.system.manage.CoreUserManage; import io.dataease.utils.*; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -68,8 +66,10 @@ public class DatasetGroupManage { private CoreDatasetTableMapper coreDatasetTableMapper; @Resource private CoreDatasourceMapper coreDatasourceMapper; - @Autowired(required = false) - private UserApi userApi; + + + @Resource + private CoreUserManage coreUserManage; @Resource private CoreOptRecentManage coreOptRecentManage; @@ -88,13 +88,9 @@ public class DatasetGroupManage { CoreDatasetGroup coreDatasetGroup = coreDatasetGroupMapper.selectById(datasetGroupInfoDTO.getId()); datasetGroupInfoDTO.setPid(coreDatasetGroup.getPid()); } - if (userApi == null) { - checkName(datasetGroupInfoDTO); - } - if (userApi != null) { - datasetGroupInfoDTO.setUpdateBy(userApi.info().getId() + ""); - datasetGroupInfoDTO.setLastUpdateTime(System.currentTimeMillis()); - } + checkName(datasetGroupInfoDTO); + datasetGroupInfoDTO.setUpdateBy(AuthUtils.getUser().getUserId() + ""); + datasetGroupInfoDTO.setLastUpdateTime(System.currentTimeMillis()); if (StringUtils.equalsIgnoreCase(datasetGroupInfoDTO.getNodeType(), leafType)) { if (!rename && ObjectUtils.isEmpty(datasetGroupInfoDTO.getAllFields())) { DEException.throwException(Translator.get("i18n_no_fields")); @@ -112,10 +108,8 @@ public class DatasetGroupManage { if (ObjectUtils.isEmpty(datasetGroupInfoDTO.getId())) { isCreate = true; datasetGroupInfoDTO.setId(IDUtils.snowID()); - if (userApi != null) { - datasetGroupInfoDTO.setCreateBy(userApi.info().getId() + ""); - datasetGroupInfoDTO.setUpdateBy(userApi.info().getId() + ""); - } + datasetGroupInfoDTO.setCreateBy(AuthUtils.getUser().getUserId() + ""); + datasetGroupInfoDTO.setUpdateBy(AuthUtils.getUser().getUserId() + ""); datasetGroupInfoDTO.setCreateTime(time); datasetGroupInfoDTO.setLastUpdateTime(time); datasetGroupInfoDTO.setPid(datasetGroupInfoDTO.getPid() == null ? 0L : datasetGroupInfoDTO.getPid()); @@ -152,21 +146,19 @@ public class DatasetGroupManage { CoreDatasetGroup coreDatasetGroup = BeanUtils.copyBean(new CoreDatasetGroup(), datasetGroupInfoDTO); coreDatasetGroup.setLastUpdateTime(System.currentTimeMillis()); coreDatasetGroupMapper.updateById(coreDatasetGroup); - coreOptRecentManage.saveOpt(datasetGroupInfoDTO.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET,OptConstants.OPT_TYPE.UPDATE); + coreOptRecentManage.saveOpt(datasetGroupInfoDTO.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET, OptConstants.OPT_TYPE.UPDATE); } @XpackInteract(value = "authResourceTree", before = false) public void innerSave(DatasetGroupInfoDTO datasetGroupInfoDTO) { CoreDatasetGroup coreDatasetGroup = BeanUtils.copyBean(new CoreDatasetGroup(), datasetGroupInfoDTO); coreDatasetGroupMapper.insert(coreDatasetGroup); - coreOptRecentManage.saveOpt(coreDatasetGroup.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET,OptConstants.OPT_TYPE.NEW); + coreOptRecentManage.saveOpt(coreDatasetGroup.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET, OptConstants.OPT_TYPE.NEW); } @XpackInteract(value = "authResourceTree", before = false) public DatasetGroupInfoDTO move(DatasetGroupInfoDTO datasetGroupInfoDTO) { - if (userApi == null) { - checkName(datasetGroupInfoDTO); - } + checkName(datasetGroupInfoDTO); if (datasetGroupInfoDTO.getPid() != 0) { checkMove(datasetGroupInfoDTO); } @@ -174,12 +166,10 @@ public class DatasetGroupManage { long time = System.currentTimeMillis(); CoreDatasetGroup coreDatasetGroup = new CoreDatasetGroup(); BeanUtils.copyBean(coreDatasetGroup, datasetGroupInfoDTO); - if (userApi != null) { - datasetGroupInfoDTO.setUpdateBy(userApi.info().getId() + ""); - } + datasetGroupInfoDTO.setUpdateBy(AuthUtils.getUser().getUserId() + ""); coreDatasetGroup.setLastUpdateTime(time); coreDatasetGroupMapper.updateById(coreDatasetGroup); - coreOptRecentManage.saveOpt(coreDatasetGroup.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET,OptConstants.OPT_TYPE.UPDATE); + coreOptRecentManage.saveOpt(coreDatasetGroup.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET, OptConstants.OPT_TYPE.UPDATE); return datasetGroupInfoDTO; } @@ -190,7 +180,7 @@ public class DatasetGroupManage { DEException.throwException("resource not exist"); } Objects.requireNonNull(CommonBeanFactory.getBean(this.getClass())).recursionDel(id); - coreOptRecentManage.saveOpt(coreDatasetGroup.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET,OptConstants.OPT_TYPE.DELETE); + coreOptRecentManage.saveOpt(coreDatasetGroup.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASET, OptConstants.OPT_TYPE.DELETE); } public void recursionDel(Long id) { @@ -231,15 +221,13 @@ public class DatasetGroupManage { public DataSetBarVO queryBarInfo(Long id) { DataSetBarVO dataSetBarVO = coreDataSetExtMapper.queryBarInfo(id); // get creator - if (userApi != null) { - UserFormVO userFormVO = userApi.queryById(Long.valueOf(dataSetBarVO.getCreateBy())); - if (userFormVO != null) { - dataSetBarVO.setCreator(userFormVO.getName()); - } - UserFormVO userFormVOUpdateBy = userApi.queryById(Long.valueOf(dataSetBarVO.getUpdateBy())); - if (userFormVOUpdateBy != null) { - dataSetBarVO.setUpdater(userFormVOUpdateBy.getName()); - } + String userName = coreUserManage.getUserName(Long.valueOf(dataSetBarVO.getCreateBy())); + if (StringUtils.isNotBlank(userName)) { + dataSetBarVO.setCreator(userName); + } + String updateUserName = coreUserManage.getUserName(Long.valueOf(dataSetBarVO.getUpdateBy())); + if (StringUtils.isNotBlank(updateUserName)) { + dataSetBarVO.setUpdater(updateUserName); } dataSetBarVO.setDatasourceDTOList(getDatasource(id)); return dataSetBarVO; @@ -254,13 +242,13 @@ public class DatasetGroupManage { QueryWrapper datasourceQueryWrapper = new QueryWrapper<>(); datasourceQueryWrapper.in("id", ids); - List datasourceDTOList = coreDatasourceMapper.selectList(datasourceQueryWrapper).stream().map(ele -> { + List datasourceDTOList = coreDatasourceMapper.selectList(datasourceQueryWrapper).stream().map(ele -> { DatasourceDTO dto = new DatasourceDTO(); BeanUtils.copyBean(dto, ele); dto.setConfiguration(null); return dto; }).collect(Collectors.toList()); - if(ids.size() != datasourceDTOList.size()){ + if (ids.size() != datasourceDTOList.size()) { DEException.throwException("由于数据集所用的数据源已被删除,无法显示数据集"); } return datasourceDTOList; @@ -366,15 +354,13 @@ public class DatasetGroupManage { DatasetGroupInfoDTO dto = new DatasetGroupInfoDTO(); BeanUtils.copyBean(dto, coreDatasetGroup); // get creator - if (userApi != null) { - UserFormVO userFormVO = userApi.queryById(Long.valueOf(dto.getCreateBy())); - if (userFormVO != null) { - dto.setCreator(userFormVO.getName()); - } - UserFormVO userFormVOUpdateBy = userApi.queryById(Long.valueOf(dto.getUpdateBy())); - if (userFormVOUpdateBy != null) { - dto.setUpdater(userFormVOUpdateBy.getName()); - } + String userName = coreUserManage.getUserName(Long.valueOf(dto.getCreateBy())); + if (StringUtils.isNotBlank(userName)) { + dto.setCreator(userName); + } + String updateUserName = coreUserManage.getUserName(Long.valueOf(dto.getUpdateBy())); + if (StringUtils.isNotBlank(updateUserName)) { + dto.setUpdater(updateUserName); } dto.setUnionSql(null); if (StringUtils.equalsIgnoreCase(dto.getNodeType(), "dataset")) { @@ -440,8 +426,8 @@ public class DatasetGroupManage { for (CoreDatasetTable datasetTable : datasetTables) { if (StringUtils.isNotEmpty(datasetTable.getSqlVariableDetails())) { List defaultsSqlVariableDetails = JsonUtil.parseList(datasetTable.getSqlVariableDetails(), listTypeReference); - if(CollectionUtil.isNotEmpty(defaultsSqlVariableDetails)){ - List fullName = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(defaultsSqlVariableDetails)) { + List fullName = new ArrayList<>(); geFullName(id, fullName); List finalFullName = CollectionUtil.reverse(fullName); defaultsSqlVariableDetails.forEach(sqlVariableDetails -> { diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java index 9b892bc21a..67762b324c 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java @@ -6,12 +6,10 @@ import io.dataease.api.dataset.dto.DatasetTableDTO; import io.dataease.api.dataset.dto.SqlVariableDetails; import io.dataease.api.dataset.union.*; import io.dataease.api.dataset.union.model.SQLObj; -import io.dataease.api.permissions.auth.api.InteractiveAuthApi; import io.dataease.api.permissions.auth.dto.BusiPerCheckDTO; import io.dataease.commons.utils.SqlparserUtils; import io.dataease.constant.AuthEnum; import io.dataease.dataset.constant.DatasetTableType; -import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableMapper; import io.dataease.dataset.dto.DatasourceSchemaDTO; import io.dataease.dataset.utils.DatasetTableTypeConstants; import io.dataease.dataset.utils.SqlUtils; @@ -24,6 +22,7 @@ import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.engine.constant.SQLConstants; import io.dataease.exception.DEException; import io.dataease.i18n.Translator; +import io.dataease.system.manage.CorePermissionManage; import io.dataease.utils.BeanUtils; import io.dataease.utils.JsonUtil; import jakarta.annotation.Resource; @@ -31,7 +30,6 @@ import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -44,16 +42,14 @@ import java.util.stream.Collectors; */ @Component public class DatasetSQLManage { - @Resource - private CoreDatasetTableMapper coreDatasetTableMapper; - @Resource - private DatasetTableFieldManage datasetTableFieldManage; + @Resource private CoreDatasourceMapper coreDatasourceMapper; @Resource private EngineServer engineServer; - @Autowired(required = false) - private InteractiveAuthApi interactiveAuthApi; + + @Resource + private CorePermissionManage corePermissionManage; private static Logger logger = LoggerFactory.getLogger(DatasetSQLManage.class); @@ -328,17 +324,15 @@ public class DatasetSQLManage { private String putObj2Map(Map dsMap, DatasetTableDTO ds) throws Exception { // 通过datasource id校验数据源权限 - if (interactiveAuthApi != null) { - BusiPerCheckDTO dto = new BusiPerCheckDTO(); - dto.setId(ds.getDatasourceId()); - dto.setAuthEnum(AuthEnum.READ); - try { - interactiveAuthApi.checkAuth(dto); - } catch (Exception e) { - DEException.throwException(Translator.get("i18n_no_datasource_permission")); - } + BusiPerCheckDTO dto = new BusiPerCheckDTO(); + dto.setId(ds.getDatasourceId()); + dto.setAuthEnum(AuthEnum.READ); + boolean checked = corePermissionManage.checkAuth(dto); + if (!checked) { + DEException.throwException(Translator.get("i18n_no_datasource_permission")); } + String schemaAlias; if (StringUtils.equalsIgnoreCase(ds.getType(), DatasetTableType.DB) || StringUtils.equalsIgnoreCase(ds.getType(), DatasetTableType.SQL)) { CoreDatasource coreDatasource = coreDatasourceMapper.selectById(ds.getDatasourceId()); diff --git a/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java b/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java index 6ebd3a95d7..a26fe93b95 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/manage/DataSourceManage.java @@ -87,6 +87,13 @@ public class DataSourceManage { coreOptRecentManage.saveOpt(coreDatasource.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASOURCE,OptConstants.OPT_TYPE.UPDATE); } + @XpackInteract(value = "datasourceResourceTree", before = false) + public void innerEditStatus(CoreDatasource coreDatasource) { + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", coreDatasource.getId()); + coreDatasourceMapper.update(coreDatasource, updateWrapper); + } + @XpackInteract(value = "datasourceResourceTree", before = false) public void move(DatasourceDTO dataSourceDTO) { Long id = dataSourceDTO.getId(); diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java index 6d3bcb0781..3dbc242a17 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/ApiUtils.java @@ -319,7 +319,7 @@ public class ApiUtils { } } for (JsonNode node : jsonArray) { - handleStr(apiDefinition, node.toString(), childrenField, rootPath + "." + fieldName + "[*]"); + handleStr(apiDefinition, node.toString(), childrenField, rootPath + "." + String.format(path, fieldName) + "[*]"); } o.put("children", childrenField); o.put("childrenDataType", "LIST"); diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java index 070e3c0e6c..15c1e4a30d 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/CalciteProvider.java @@ -47,15 +47,14 @@ import java.util.stream.Collectors; @Component("calciteProvider") public class CalciteProvider { - //TODO mongo impala es hive @Resource protected CoreDatasourceMapper coreDatasourceMapper; @Resource private EngineServer engineServer; protected ExtendedJdbcClassLoader extendedJdbcClassLoader; private Map customJdbcClassLoaders = new HashMap<>(); - private final String FILE_PATH = "/opt/dataease/drivers"; - private final String CUSTOM_PATH = "/opt/dataease/custom-drivers/"; + private final String FILE_PATH = "/opt/dataease2.0/drivers"; + private final String CUSTOM_PATH = "/opt/dataease2.0/custom-drivers/"; private static String split = "DE"; @Resource @@ -93,7 +92,7 @@ public class CalciteProvider { schemas.add(resultSet.getString(1)); } } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return schemas; } @@ -107,7 +106,7 @@ public class CalciteProvider { tables.add(getTableDesc(datasourceRequest, resultSet)); } } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } } return tables; @@ -145,15 +144,11 @@ public class CalciteProvider { String querySql = getTablesSql(datasourceRequest).get(0); try (Connection con = getConnection(datasourceRequest.getDatasource()); Statement statement = getStatement(con, 30); ResultSet resultSet = statement.executeQuery(querySql)) { } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return "Success"; } - public List getTableFields(DatasourceRequest datasourceRequest) throws Exception { - return null; - } - public Map fetchResultField(DatasourceRequest datasourceRequest) throws DEException { List datasetTableFields = new ArrayList<>(); List list = new LinkedList<>(); @@ -242,7 +237,7 @@ public class CalciteProvider { Class.forName("org.apache.calcite.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:calcite:", info); } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return connection; } @@ -433,7 +428,7 @@ public class CalciteProvider { list.add(row); } } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return list; } @@ -573,7 +568,7 @@ public class CalciteProvider { Driver driverClass = (Driver) jdbcClassLoader.loadClass(driverClassName).newInstance(); conn = driverClass.connect(configuration.getJdbc(), props); } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return conn; } @@ -587,7 +582,7 @@ public class CalciteProvider { stat = connection.createStatement(); stat.setQueryTimeout(queryTimeout); } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return stat; } @@ -640,7 +635,7 @@ public class CalciteProvider { customJdbcClassLoaders.put(coreDriver.getId(), customJdbcClassLoader); return customJdbcClassLoader; } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } return null; } @@ -691,7 +686,7 @@ public class CalciteProvider { SchemaPlus rootSchema = buildSchema(datasourceRequest, calciteConnection); addCustomFunctions(rootSchema); } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } } @@ -709,7 +704,7 @@ public class CalciteProvider { rootSchema.removeSubSchema(datasourceSchemaDTO.getSchemaAlias()); } } catch (Exception e) { - DEException.throwException(e); + DEException.throwException(e.getMessage()); } } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java b/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java index b4c3059602..9fa6b85ca0 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/provider/ExcelUtils.java @@ -35,7 +35,7 @@ import java.util.stream.Collectors; public class ExcelUtils { public static final String UFEFF = "\uFEFF"; - private static String path = "/opt/dataease/data/excel/"; + private static String path = "/opt/dataease2.0/data/excel/"; private static ObjectMapper objectMapper = new ObjectMapper(); private static TypeReference> TableFieldListTypeReference = new TypeReference>() { diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceDriverServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceDriverServer.java index 52e6f48ae1..8e8cc6499d 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceDriverServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceDriverServer.java @@ -31,7 +31,7 @@ import java.util.*; @RequestMapping("/datasourceDriver") public class DatasourceDriverServer implements DatasourceDriverApi { - private final static String DRIVER_PATH = "/opt/dataease/custom-drivers/"; + private final static String DRIVER_PATH = "/opt/dataease2.0/custom-drivers/"; @Resource private CoreDriverMapper coreDriverMapper; diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index b66e6e2ae8..d6550acdba 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -12,10 +12,6 @@ import io.dataease.api.dataset.dto.DatasetTableDTO; import io.dataease.api.dataset.dto.PreviewSqlDTO; import io.dataease.api.ds.DatasourceApi; import io.dataease.api.ds.vo.*; -import io.dataease.api.permissions.auth.api.InteractiveAuthApi; -import io.dataease.api.permissions.auth.dto.BusiResourceEditor; -import io.dataease.api.permissions.user.api.UserApi; -import io.dataease.api.permissions.user.vo.UserFormVO; import io.dataease.commons.constants.TaskStatus; import io.dataease.commons.utils.CommonThreadPool; import io.dataease.constant.DataSourceType; @@ -34,18 +30,17 @@ import io.dataease.datasource.provider.ApiUtils; import io.dataease.datasource.provider.CalciteProvider; import io.dataease.datasource.provider.ExcelUtils; import io.dataease.datasource.request.DatasourceRequest; -import io.dataease.datasource.type.Pg; import io.dataease.engine.constant.SQLConstants; import io.dataease.exception.DEException; import io.dataease.i18n.Translator; import io.dataease.license.config.XpackInteract; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; +import io.dataease.system.manage.CoreUserManage; import io.dataease.utils.*; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -89,10 +84,10 @@ public class DatasourceServer implements DatasourceApi { private CoreDsFinishPageMapper coreDsFinishPageMapper; @Resource private DatasetDataManage datasetDataManage; - @Autowired(required = false) - private UserApi userApi; - @Autowired(required = false) - private InteractiveAuthApi interactiveAuthApi; + + + @Resource + private CoreUserManage coreUserManage; @Override public List query(String keyWord) { @@ -125,10 +120,12 @@ public class DatasourceServer implements DatasourceApi { if (Objects.equals(dataSourceDTO.getId(), dataSourceDTO.getPid())) { DEException.throwException(Translator.get("i18n_pid_not_eq_id")); } - List ids = new ArrayList<>(); - getParents(dataSourceDTO.getPid(), ids); - if (ids.contains(dataSourceDTO.getId())) { - DEException.throwException(Translator.get("i18n_pid_not_eq_id")); + if (dataSourceDTO.getPid() != 0) { + List ids = new ArrayList<>(); + getParents(dataSourceDTO.getPid(), ids); + if (ids.contains(dataSourceDTO.getId())) { + DEException.throwException(Translator.get("i18n_pid_not_eq_id")); + } } dataSourceManage.move(dataSourceDTO); } @@ -309,16 +306,16 @@ public class DatasourceServer implements DatasourceApi { private static void checkParams(String configurationStr) { DatasourceConfiguration configuration = JsonUtil.parseObject(configurationStr, DatasourceConfiguration.class); - if(configuration.getInitialPoolSize() < configuration.getMinPoolSize()){ + if (configuration.getInitialPoolSize() < configuration.getMinPoolSize()) { DEException.throwException("初始连接数不能小于最小连接数!"); } - if(configuration.getInitialPoolSize() > configuration.getMaxPoolSize()){ + if (configuration.getInitialPoolSize() > configuration.getMaxPoolSize()) { DEException.throwException("初始连接数不能大于最大连接数!"); } - if(configuration.getMaxPoolSize() < configuration.getMinPoolSize()){ + if (configuration.getMaxPoolSize() < configuration.getMinPoolSize()) { DEException.throwException("最大连接数不能小于最小连接数!"); } - if(configuration.getQueryTimeout() < 0){ + if (configuration.getQueryTimeout() < 0) { DEException.throwException("查询超时不能小于0!"); } } @@ -538,12 +535,8 @@ public class DatasourceServer implements DatasourceApi { } datasourceDTO.setConfiguration(new String(Base64.getEncoder().encode(datasourceDTO.getConfiguration().getBytes()))); - if (userApi != null) { - UserFormVO userFormVO = userApi.queryById(Long.valueOf(datasourceDTO.getCreateBy())); - if (userFormVO != null) { - datasourceDTO.setCreator(userFormVO.getName()); - } - } + datasourceDTO.setCreator(coreUserManage.getUserName(Long.valueOf(datasourceDTO.getCreateBy()))); + return datasourceDTO; } @@ -620,14 +613,12 @@ public class DatasourceServer implements DatasourceApi { record.setStatus(coreDatasource.getStatus()); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("id", coreDatasource.getId()); - datasourceMapper.update(record, wrapper); - if (interactiveAuthApi != null) { - BusiResourceEditor editor = new BusiResourceEditor(); - editor.setId((long) coreDatasource.getId()); - editor.setName(coreDatasource.getName()); - editor.setExtraFlag(getExtraFlag(coreDatasource.getType(), coreDatasource.getStatus())); - interactiveAuthApi.editResource(editor); + CoreDatasource originData = datasourceMapper.selectById(coreDatasource.getId()); + String originStatus = originData.getStatus(); + if (StringUtils.equals(coreDatasource.getStatus(), originStatus)) { + return datasourceDTO; } + dataSourceManage.innerEditStatus(coreDatasource); return datasourceDTO; } @@ -880,7 +871,7 @@ public class DatasourceServer implements DatasourceApi { List datasetTableDTOS = ApiUtils.getTables(datasourceRequest); for (int i = 0; i < pager.getRecords().size(); i++) { for (int i1 = 0; i1 < datasetTableDTOS.size(); i1++) { - if(pager.getRecords().get(i).getTableName().equalsIgnoreCase(datasetTableDTOS.get(i1).getTableName())){ + if (pager.getRecords().get(i).getTableName().equalsIgnoreCase(datasetTableDTOS.get(i1).getTableName())) { pager.getRecords().get(i).setName(datasetTableDTOS.get(i1).getName()); } } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/type/Mysql.java b/core/core-backend/src/main/java/io/dataease/datasource/type/Mysql.java index aa4290a444..fad120d167 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/type/Mysql.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/type/Mysql.java @@ -1,6 +1,7 @@ package io.dataease.datasource.type; import io.dataease.api.ds.vo.DatasourceConfiguration; +import io.dataease.exception.DEException; import lombok.Data; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; @@ -25,7 +26,7 @@ public class Mysql extends DatasourceConfiguration { } else { for (String illegalParameter : illegalParameters) { if (getExtraParams().toLowerCase().contains(illegalParameter.toLowerCase())) { - throw new RuntimeException("Illegal parameter: " + illegalParameter); + DEException.throwException("Illegal parameter: " + illegalParameter); } } diff --git a/core/core-backend/src/main/java/io/dataease/system/manage/CorePermissionManage.java b/core/core-backend/src/main/java/io/dataease/system/manage/CorePermissionManage.java new file mode 100644 index 0000000000..e01e24a0d5 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/system/manage/CorePermissionManage.java @@ -0,0 +1,14 @@ +package io.dataease.system.manage; + +import io.dataease.api.permissions.auth.dto.BusiPerCheckDTO; +import io.dataease.license.config.XpackInteract; +import org.springframework.stereotype.Component; + +@Component +public class CorePermissionManage { + + @XpackInteract(value = "corePermissionManage", replace = true) + public boolean checkAuth(BusiPerCheckDTO dto) { + return true; + } +} diff --git a/core/core-backend/src/main/java/io/dataease/system/manage/CoreUserManage.java b/core/core-backend/src/main/java/io/dataease/system/manage/CoreUserManage.java new file mode 100644 index 0000000000..1c4e7273d1 --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/system/manage/CoreUserManage.java @@ -0,0 +1,14 @@ +package io.dataease.system.manage; + +import io.dataease.license.config.XpackInteract; +import org.springframework.stereotype.Component; + +@Component +public class CoreUserManage { + + + @XpackInteract(value = "coreUserManage", replace = true) + public String getUserName(Long uid) { + return "管理员"; + } +} diff --git a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties index 6ff9d226b4..36a4670dde 100644 --- a/core/core-backend/src/main/resources/i18n/core_zh_CN.properties +++ b/core/core-backend/src/main/resources/i18n/core_zh_CN.properties @@ -53,3 +53,4 @@ i18n_schema_is_empty=schema \u4E3A\u7A7A\uFF01 i18n_table_name_repeat=\u540D\u79F0\u91CD\u590D: i18n_sql_not_empty=sql \u4E0D\u80FD\u4E3A\u7A7A i18n_menu.parameter=\u7CFB\u7EDF\u53C2\u6570 +i18n_user_old_pwd_error=\u539F\u59CB\u5BC6\u7801\u9519\u8BEF diff --git a/core/core-frontend/src/assets/svg/icon_file-add_outlined.svg b/core/core-frontend/src/assets/svg/icon_file-add_outlined.svg new file mode 100644 index 0000000000..669ede9080 --- /dev/null +++ b/core/core-frontend/src/assets/svg/icon_file-add_outlined.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/core/core-frontend/src/components/data-visualization/DvToolbar.vue b/core/core-frontend/src/components/data-visualization/DvToolbar.vue index f34babd585..d81e98b940 100644 --- a/core/core-frontend/src/components/data-visualization/DvToolbar.vue +++ b/core/core-frontend/src/components/data-visualization/DvToolbar.vue @@ -152,8 +152,8 @@ eventBus.on('clearCanvas', clearCanvas)
-