From f42fa15487e5b618dc24d3ec12c5f63fd6dd9f60 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 30 Apr 2025 11:47:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81jpa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/core-backend/pom.xml | 4 + .../dataset/manage/DatasetDataManage.java | 6 +- .../dataset/manage/DatasetGroupManage.java | 19 +- .../dataset/manage/DatasetSQLManage.java | 7 +- .../dao/auto/entity/CoreDatasource.java | 237 ------------------ .../dao/auto/mapper/CoreDatasourceMapper.java | 18 -- .../dao/auto/mapper/CoreDriverJarMapper.java | 18 -- .../dao/auto/mapper/CoreDriverMapper.java | 18 -- .../datasource/manage/DataSourceManage.java | 95 +++---- .../manage/DatasourceSyncManage.java | 27 +- .../datasource/manage/EngineManage.java | 22 +- .../datasource/provider/CalciteProvider.java | 11 +- .../server/DatasourceDriverServer.java | 170 ------------- .../datasource/server/DatasourceServer.java | 48 ++-- .../server/DatasourceTaskServer.java | 18 +- .../server/DataVisualizationServer.java | 8 +- .../main/resources/application-standalone.yml | 14 +- .../java/io/dataease/initSql/SqlBlock.java | 7 + .../java/io/dataease/initSql/Version.java | 45 ++++ 19 files changed, 172 insertions(+), 620 deletions(-) delete mode 100644 core/core-backend/src/main/java/io/dataease/datasource/dao/auto/entity/CoreDatasource.java delete mode 100644 core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDatasourceMapper.java delete mode 100644 core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverJarMapper.java delete mode 100644 core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverMapper.java delete mode 100644 core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceDriverServer.java create mode 100644 sdk/common/src/main/java/io/dataease/initSql/SqlBlock.java create mode 100644 sdk/common/src/main/java/io/dataease/initSql/Version.java diff --git a/core/core-backend/pom.xml b/core/core-backend/pom.xml index 34caa1e919..152db96a62 100644 --- a/core/core-backend/pom.xml +++ b/core/core-backend/pom.xml @@ -78,6 +78,10 @@ org.springframework.boot spring-boot-starter-websocket + + org.springframework.boot + spring-boot-starter-data-jpa + com.fit2cloud quartz-spring-boot-starter diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java index c44e3d0e9a..8ebcfe7980 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetDataManage.java @@ -19,7 +19,7 @@ import io.dataease.dataset.utils.FieldUtils; import io.dataease.dataset.utils.SqlUtils; import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.manage.DataSourceManage; import io.dataease.datasource.manage.EngineManage; import io.dataease.datasource.utils.DatasourceUtils; @@ -68,8 +68,8 @@ import static io.dataease.chart.manage.ChartDataManage.START_END_SEPARATOR; public class DatasetDataManage { @Resource private DatasetSQLManage datasetSQLManage; - @Resource - private CoreDatasourceMapper coreDatasourceMapper; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Resource private DatasetTableFieldManage datasetTableFieldManage; @Resource 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 596cb489ca..3450c55342 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 @@ -17,8 +17,7 @@ import io.dataease.dataset.dto.DataSetNodeBO; import io.dataease.dataset.utils.DatasetUtils; import io.dataease.dataset.utils.FieldUtils; import io.dataease.dataset.utils.TableUtils; -import io.dataease.datasource.dao.auto.entity.CoreDatasource; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.engine.constant.ExtFieldConstant; import io.dataease.exception.DEException; import io.dataease.extensions.datasource.dto.DatasetTableDTO; @@ -68,19 +67,14 @@ public class DatasetGroupManage { private CoreDataSetExtMapper coreDataSetExtMapper; @Resource private CoreDatasetTableMapper coreDatasetTableMapper; - @Resource - private CoreDatasourceMapper coreDatasourceMapper; - - @Resource private CoreUserManage coreUserManage; - @Resource private CoreOptRecentManage coreOptRecentManage; - @Autowired(required = false) private RelationApi relationManage; - + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; private static final String leafType = "dataset"; private Lock lock = new ReentrantLock(); @@ -270,15 +264,12 @@ public class DatasetGroupManage { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("dataset_group_id", datasetId); List coreDatasetTables = coreDatasetTableMapper.selectList(wrapper); - Set ids = new LinkedHashSet(); + List ids = new ArrayList<>(); coreDatasetTables.forEach(ele -> ids.add(ele.getDatasourceId())); if (CollectionUtils.isEmpty(ids)) { DEException.throwException(Translator.get("i18n_dataset_create_error")); } - - QueryWrapper datasourceQueryWrapper = new QueryWrapper<>(); - datasourceQueryWrapper.in("id", ids); - List datasourceDTOList = coreDatasourceMapper.selectList(datasourceQueryWrapper).stream().map(ele -> { + List datasourceDTOList = coreDatasourceRepository.findInIds(ids).stream().map(ele -> { DatasourceDTO dto = new DatasourceDTO(); BeanUtils.copyBean(dto, ele); dto.setConfiguration(null); 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 7baca9a16c..7d8a72dc60 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 @@ -13,7 +13,7 @@ import io.dataease.dataset.utils.DatasetTableTypeConstants; import io.dataease.dataset.utils.SqlUtils; import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.manage.DataSourceManage; import io.dataease.datasource.manage.EngineManage; import io.dataease.engine.constant.ExtFieldConstant; @@ -56,15 +56,10 @@ import java.util.stream.Collectors; */ @Component public class DatasetSQLManage { - - @Resource - private CoreDatasourceMapper coreDatasourceMapper; @Resource private EngineManage engineManage; - @Resource private CorePermissionManage corePermissionManage; - @Autowired(required = false) private PluginManageApi pluginManage; @Autowired(required = false) diff --git a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/entity/CoreDatasource.java b/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/entity/CoreDatasource.java deleted file mode 100644 index ddf6d34292..0000000000 --- a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/entity/CoreDatasource.java +++ /dev/null @@ -1,237 +0,0 @@ -package io.dataease.datasource.dao.auto.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; - -/** - *

- * 数据源表 - *

- * - * @author fit2cloud - * @since 2024-07-09 - */ -@TableName("core_datasource") -public class CoreDatasource implements Serializable { - - private static final long serialVersionUID = 1L; - - /** - * 主键 - */ - @TableId(value = "id", type = IdType.AUTO) - private Long id; - - /** - * 名称 - */ - private String name; - - /** - * 描述 - */ - private String description; - - /** - * 类型 - */ - private String type; - - /** - * 父级ID - */ - private Long pid; - - /** - * 更新方式:0:替换;1:追加 - */ - private String editType; - - /** - * 详细信息 - */ - private String configuration; - - /** - * 创建时间 - */ - private Long createTime; - - /** - * 更新时间 - */ - private Long updateTime; - - /** - * 变更人 - */ - private Long updateBy; - - /** - * 创建人ID - */ - private String createBy; - - /** - * 状态 - */ - private String status; - - /** - * 状态 - */ - private String qrtzInstance; - - /** - * 任务状态 - */ - private String taskStatus; - - /** - * 开启数据填报 - */ - private Boolean enableDataFill; - - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public Long getPid() { - return pid; - } - - public void setPid(Long pid) { - this.pid = pid; - } - - public String getEditType() { - return editType; - } - - public void setEditType(String editType) { - this.editType = editType; - } - - public String getConfiguration() { - return configuration; - } - - public void setConfiguration(String configuration) { - this.configuration = configuration; - } - - public Long getCreateTime() { - return createTime; - } - - public void setCreateTime(Long createTime) { - this.createTime = createTime; - } - - public Long getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Long updateTime) { - this.updateTime = updateTime; - } - - public Long getUpdateBy() { - return updateBy; - } - - public void setUpdateBy(Long updateBy) { - this.updateBy = updateBy; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getQrtzInstance() { - return qrtzInstance; - } - - public void setQrtzInstance(String qrtzInstance) { - this.qrtzInstance = qrtzInstance; - } - - public String getTaskStatus() { - return taskStatus; - } - - public void setTaskStatus(String taskStatus) { - this.taskStatus = taskStatus; - } - - public Boolean getEnableDataFill() { - return enableDataFill; - } - - public void setEnableDataFill(Boolean enableDataFill) { - this.enableDataFill = enableDataFill; - } - - @Override - public String toString() { - return "CoreDatasource{" + - "id = " + id + - ", name = " + name + - ", description = " + description + - ", type = " + type + - ", pid = " + pid + - ", editType = " + editType + - ", configuration = " + configuration + - ", createTime = " + createTime + - ", updateTime = " + updateTime + - ", updateBy = " + updateBy + - ", createBy = " + createBy + - ", status = " + status + - ", qrtzInstance = " + qrtzInstance + - ", taskStatus = " + taskStatus + - ", enableDataFill = " + enableDataFill + - "}"; - } -} diff --git a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDatasourceMapper.java b/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDatasourceMapper.java deleted file mode 100644 index a27bc9ad36..0000000000 --- a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDatasourceMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.dataease.datasource.dao.auto.mapper; - -import io.dataease.datasource.dao.auto.entity.CoreDatasource; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - *

- * 数据源表 Mapper 接口 - *

- * - * @author fit2cloud - * @since 2024-07-09 - */ -@Mapper -public interface CoreDatasourceMapper extends BaseMapper { - -} diff --git a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverJarMapper.java b/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverJarMapper.java deleted file mode 100644 index c08a13a870..0000000000 --- a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverJarMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.dataease.datasource.dao.auto.mapper; - -import io.dataease.datasource.dao.auto.entity.CoreDriverJar; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - *

- * 驱动详情 Mapper 接口 - *

- * - * @author fit2cloud - * @since 2023-04-17 - */ -@Mapper -public interface CoreDriverJarMapper extends BaseMapper { - -} diff --git a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverMapper.java b/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverMapper.java deleted file mode 100644 index 4fd312c63b..0000000000 --- a/core/core-backend/src/main/java/io/dataease/datasource/dao/auto/mapper/CoreDriverMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package io.dataease.datasource.dao.auto.mapper; - -import io.dataease.datasource.dao.auto.entity.CoreDriver; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import org.apache.ibatis.annotations.Mapper; - -/** - *

- * 驱动 Mapper 接口 - *

- * - * @author fit2cloud - * @since 2023-04-18 - */ -@Mapper -public interface CoreDriverMapper extends BaseMapper { - -} 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 85bb7af0d6..a59f58f1cf 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 @@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import io.dataease.commons.constants.OptConstants; import io.dataease.commons.constants.TaskStatus; import io.dataease.datasource.dao.auto.entity.CoreDatasource; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.dao.ext.mapper.CoreDatasourceExtMapper; import io.dataease.datasource.dao.ext.mapper.DataSourceExtMapper; import io.dataease.datasource.dao.ext.po.DataSourceNodePO; @@ -22,19 +22,19 @@ import io.dataease.license.utils.LicenseUtil; import io.dataease.model.BusiNodeRequest; import io.dataease.model.BusiNodeVO; import io.dataease.operation.manage.CoreOptRecentManage; -import io.dataease.utils.AuthUtils; -import io.dataease.utils.BeanUtils; -import io.dataease.utils.CommunityUtils; -import io.dataease.utils.TreeUtils; +import io.dataease.utils.*; import jakarta.annotation.Resource; +import jakarta.persistence.criteria.Predicate; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.Stack; @Component @@ -42,10 +42,8 @@ public class DataSourceManage { @Resource private DataSourceExtMapper dataSourceExtMapper; - - @Resource - private CoreDatasourceMapper coreDatasourceMapper; - + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Resource private CoreOptRecentManage coreOptRecentManage; @@ -117,7 +115,7 @@ public class DataSourceManage { coreDatasource.setTaskStatus(TaskStatus.WaitingForExecution.name()); BeanUtils.copyBean(coreDatasource, dataSourceDTO); checkName(dataSourceDTO); - coreDatasourceMapper.insert(coreDatasource); + coreDatasourceRepository.saveAndFlush(coreDatasource); coreOptRecentManage.saveOpt(coreDatasource.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASOURCE, OptConstants.OPT_TYPE.NEW); } @@ -125,29 +123,32 @@ public class DataSourceManage { if (StringUtils.isEmpty(dto.getName()) || StringUtils.isEmpty(dto.getName().trim())) { DEException.throwException(Translator.get("i18n_df_name_can_not_empty")); } - QueryWrapper wrapper = new QueryWrapper<>(); - if (ObjectUtils.isNotEmpty(dto.getPid())) { - if (LicenseUtil.licenseValid() && dto.getPid().equals(0L)) { - wrapper.eq("pid", -100L); - } else { - wrapper.eq("pid", dto.getPid()); + Specification spec = (root, query, criteriaBuilder) -> { + List predicates = new ArrayList<>(); + if (ObjectUtils.isNotEmpty(dto.getPid())) { + if (LicenseUtil.licenseValid() && dto.getPid().equals(0L)) { + predicates.add(criteriaBuilder.equal(root.get("pid"), -100L)); + } else { + predicates.add(criteriaBuilder.equal(root.get("pid"), dto.getPid())); + } } - } - if (StringUtils.isNotEmpty(dto.getName())) { - wrapper.eq("name", dto.getName()); - } - if (ObjectUtils.isNotEmpty(dto.getId())) { - wrapper.ne("id", dto.getId()); - } - if (ObjectUtils.isNotEmpty(dto.getNodeType())) { - if (dto.getNodeType().equalsIgnoreCase("folder")) { - wrapper.eq("type", dto.getType()); - } else { - wrapper.ne("type", "folder"); + if (StringUtils.isNotEmpty(dto.getName())) { + predicates.add(criteriaBuilder.equal(root.get("name"), dto.getName())); } + if (ObjectUtils.isNotEmpty(dto.getId())) { + predicates.add(criteriaBuilder.notEqual(root.get("id"), dto.getId())); + } + if (ObjectUtils.isNotEmpty(dto.getNodeType())) { + if (dto.getNodeType().equalsIgnoreCase("folder")) { + predicates.add(criteriaBuilder.equal(root.get("type"), dto.getType())); + } else { + predicates.add(criteriaBuilder.notEqual(root.get("type"), "folder")); + } + } + return criteriaBuilder.and(predicates.toArray(new Predicate[0])); + }; - } - List list = coreDatasourceMapper.selectList(wrapper); + List list = coreDatasourceRepository.findAll(spec); if (list.size() > 0) { DEException.throwException(Translator.get("i18n_ds_name_exists")); } @@ -161,24 +162,20 @@ public class DataSourceManage { @XpackInteract(value = "datasourceResourceTree", before = false) public void innerEdit(CoreDatasource coreDatasource) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", coreDatasource.getId()); coreDatasource.setUpdateTime(System.currentTimeMillis()); coreDatasource.setUpdateBy(AuthUtils.getUser().getUserId()); coreDatasource.setTaskStatus(TaskStatus.WaitingForExecution.name()); - coreDatasourceMapper.update(coreDatasource, updateWrapper); + coreDatasourceRepository.save(coreDatasource); coreOptRecentManage.saveOpt(coreDatasource.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASOURCE, OptConstants.OPT_TYPE.UPDATE); } @XpackInteract(value = "datasourceResourceTree", before = false) public void innerEditName(CoreDatasource coreDatasource) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", coreDatasource.getId()); - coreDatasource.setTaskStatus(TaskStatus.WaitingForExecution.name()); - coreDatasource.setUpdateTime(System.currentTimeMillis()); - coreDatasource.setUpdateBy(AuthUtils.getUser().getUserId()); - coreDatasourceMapper.update(coreDatasource, updateWrapper); + Optional optionalCoreDatasource = coreDatasourceRepository.findById(coreDatasource.getId()); + if (optionalCoreDatasource.isPresent()) { + coreDatasourceRepository.move(coreDatasource.getId(), System.currentTimeMillis(), coreDatasource.getPid(), coreDatasource.getName(), AuthUtils.getUser().getUserId()); + } coreOptRecentManage.saveOpt(coreDatasource.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASOURCE, OptConstants.OPT_TYPE.UPDATE); } @@ -187,7 +184,7 @@ public class DataSourceManage { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("id", coreDatasource.getId()); updateWrapper.set("status", coreDatasource.getStatus()); - coreDatasourceMapper.update(null, updateWrapper); + coreDatasourceRepository.updateStatusById(coreDatasource.getStatus(), coreDatasource.getId()); } @@ -199,31 +196,21 @@ public class DataSourceManage { DEException.throwException("resource not exist"); } checkName(dataSourceDTO); - - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", id); - updateWrapper.set("update_time", System.currentTimeMillis()); - updateWrapper.set("pid", dataSourceDTO.getPid()); - updateWrapper.set("name", dataSourceDTO.getName()); - updateWrapper.set("update_by", AuthUtils.getUser().getUserId()); - coreDatasourceMapper.update(null, updateWrapper); - + coreDatasourceRepository.move(id, System.currentTimeMillis(), dataSourceDTO.getPid(), dataSourceDTO.getName(), AuthUtils.getUser().getUserId()); coreOptRecentManage.saveOpt(sourceData.getId(), OptConstants.OPT_RESOURCE_TYPE.DATASOURCE, OptConstants.OPT_TYPE.UPDATE); } public void encryptDsConfig() { - coreDatasourceMapper.selectList(null).forEach(dataSource -> { - coreDatasourceMapper.updateById(dataSource); - }); + coreDatasourceRepository.saveAll(coreDatasourceRepository.findAll()); } - @XpackInteract(value = "datasourceResourceTree", before = false) public CoreDatasource getCoreDatasource(Long id) { if (id == -1L) { return engineManage.getDeEngine(); } - return coreDatasourceMapper.selectById(id); + return coreDatasourceRepository.findById(id).get(); + } public List getPidList(Long pid) { diff --git a/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java b/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java index f04fd1ed65..01035eaa0d 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/manage/DatasourceSyncManage.java @@ -7,7 +7,7 @@ import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.entity.CoreDatasourceTask; import io.dataease.datasource.dao.auto.entity.CoreDatasourceTaskLog; import io.dataease.datasource.dao.auto.entity.CoreDeEngine; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.provider.*; import io.dataease.datasource.request.EngineRequest; import io.dataease.datasource.server.DatasourceServer; @@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils; import org.quartz.JobExecutionContext; import org.quartz.JobKey; import org.quartz.TriggerKey; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.*; @@ -38,8 +39,8 @@ import static io.dataease.datasource.server.DatasourceTaskServer.ScheduleType.MA @Component public class DatasourceSyncManage { - @Resource - private CoreDatasourceMapper datasourceMapper; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Resource private EngineManage engineManage; @Resource @@ -101,7 +102,7 @@ public class DatasourceSyncManage { public void extractData(Long datasourceId, Long taskId, JobExecutionContext context) { LicenseUtil.validate(); - CoreDatasource coreDatasource = datasourceMapper.selectById(datasourceId); + CoreDatasource coreDatasource = coreDatasourceRepository.findById(datasourceId).orElse(null); if (coreDatasource == null) { LogUtil.error("Can not find datasource: " + datasourceId); return; @@ -123,11 +124,7 @@ public class DatasourceSyncManage { try { DatasourceServer.UpdateType updateType = DatasourceServer.UpdateType.valueOf(coreDatasourceTask.getUpdateType()); if (context != null) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", datasourceId); - CoreDatasource record = new CoreDatasource(); - record.setQrtzInstance(context.getFireInstanceId()); - datasourceMapper.update(record, updateWrapper); + coreDatasourceRepository.updateQrtzInstanceById(context.getFireInstanceId(), datasourceId); } if (coreDatasource.getType().equalsIgnoreCase("ExcelRemote")) { extractedExcelData(taskId, coreDatasource, updateType, coreDatasourceTask.getSyncRate()); @@ -138,7 +135,7 @@ public class DatasourceSyncManage { LogUtil.error(e); } finally { datasourceTaskServer.updateTaskStatus(coreDatasourceTask); - updateDsTaskStatus(datasourceId); + coreDatasourceRepository.updateTaskStatusByIds(Arrays.asList(datasourceId), TaskStatus.WaitingForExecution.name()); } } @@ -219,17 +216,9 @@ public class DatasourceSyncManage { } } - private void updateDsTaskStatus(Long datasourceId) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", datasourceId); - CoreDatasource record = new CoreDatasource(); - record.setTaskStatus(TaskStatus.WaitingForExecution.name()); - datasourceMapper.update(record, updateWrapper); - } - public void extractDataForTable(Long datasourceId, String name, String tableName, String type) { DatasourceServer.UpdateType updateType = DatasourceServer.UpdateType.valueOf(type); - CoreDatasource coreDatasource = datasourceMapper.selectById(datasourceId); + CoreDatasource coreDatasource = coreDatasourceRepository.findById(datasourceId).orElse(null); if (coreDatasource == null) { LogUtil.error("Can not find datasource: " + datasourceId); return; diff --git a/core/core-backend/src/main/java/io/dataease/datasource/manage/EngineManage.java b/core/core-backend/src/main/java/io/dataease/datasource/manage/EngineManage.java index 42db5102cb..f8fa3c7803 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/manage/EngineManage.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/manage/EngineManage.java @@ -3,8 +3,8 @@ package io.dataease.datasource.manage; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.entity.CoreDeEngine; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; import io.dataease.datasource.dao.auto.mapper.CoreDeEngineMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.type.H2; import io.dataease.datasource.type.Mysql; import io.dataease.exception.DEException; @@ -19,8 +19,10 @@ import io.dataease.utils.JsonUtil; import io.dataease.utils.ModelUtils; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; +import org.springframework.data.domain.Example; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -40,9 +42,8 @@ public class EngineManage { private Environment env; @Resource private CoreDeEngineMapper deEngineMapper; - - @Resource - private CoreDatasourceMapper datasourceMapper; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Value("${dataease.path.engine:jdbc:h2:/opt/dataease2.0/desktop_data;AUTO_SERVER=TRUE;AUTO_RECONNECT=TRUE;MODE=MySQL;CASE_INSENSITIVE_IDENTIFIERS=TRUE;DATABASE_TO_UPPER=FALSE}") private String engineUrl; @@ -167,13 +168,14 @@ public class EngineManage { } public void initLocalDataSource() { - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("id", 985188400292302848L); - queryWrapper.ne("create_time", 1715053684176L); + CoreDatasource coreDatasource = new CoreDatasource(); + coreDatasource.setId(985188400292302848L); + coreDatasource.setCreateTime(1715053684176L); + Example example = Example.of(coreDatasource); // 版本检查 QueryWrapper queryVersionWrapper = new QueryWrapper<>(); queryVersionWrapper.eq("version", "985188400292302848"); - if (!datasourceMapper.exists(queryWrapper) && !deTemplateVersionMapper.exists(queryVersionWrapper) && !ModelUtils.isDesktop()) { + if (!coreDatasourceRepository.exists(example) && !deTemplateVersionMapper.exists(queryVersionWrapper) && !ModelUtils.isDesktop()) { Pattern WITH_SQL_FRAGMENT = Pattern.compile("jdbc:mysql://(.*):(\\d+)/(.*)\\?(.*)"); Matcher matcher = WITH_SQL_FRAGMENT.matcher(env.getProperty("spring.datasource.url")); if (!matcher.find()) { @@ -199,8 +201,8 @@ public class EngineManage { initDatasource.setUpdateBy(1L); initDatasource.setStatus("success"); initDatasource.setTaskStatus("WaitingForExecution"); - datasourceMapper.deleteById(985188400292302848L); - datasourceMapper.insert(initDatasource); + coreDatasourceRepository.deleteById(985188400292302848L); + coreDatasourceRepository.saveAndFlush(initDatasource); DeTemplateVersion version = new DeTemplateVersion(); version.setVersion("985188400292302848"); 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 abf64233be..47f05e3cb0 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 @@ -1,12 +1,11 @@ package io.dataease.datasource.provider; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.jcraft.jsch.Session; import io.dataease.constant.SQLConstants; import io.dataease.dataset.utils.FieldUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.entity.CoreDriver; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.manage.EngineManage; import io.dataease.datasource.request.EngineRequest; import io.dataease.datasource.type.*; @@ -33,6 +32,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.dbcp2.BasicDataSource; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @@ -52,8 +52,8 @@ import java.util.stream.Collectors; @Component("calciteProvider") public class CalciteProvider extends Provider { - @Resource - protected CoreDatasourceMapper coreDatasourceMapper; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Resource private EngineManage engineManage; protected ExtendedJdbcClassLoader extendedJdbcClassLoader; @@ -1587,8 +1587,7 @@ public class CalciteProvider extends Provider { public void initConnectionPool() { LogUtil.info("Begin to init datasource pool..."); - QueryWrapper datasourceQueryWrapper = new QueryWrapper(); - List coreDatasources = coreDatasourceMapper.selectList(datasourceQueryWrapper).stream().filter(coreDatasource -> !Arrays.asList("folder", "API", "Excel", "ExcelRemote").contains(coreDatasource.getType())).collect(Collectors.toList()); + List coreDatasources = coreDatasourceRepository.findAll().stream().filter(coreDatasource -> !Arrays.asList("folder", "API", "Excel", "ExcelRemote").contains(coreDatasource.getType())).collect(Collectors.toList()); CoreDatasource engine = engineManage.deEngine(); if (engine != null) { coreDatasources.add(engine); 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 deleted file mode 100644 index 29bea0516c..0000000000 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceDriverServer.java +++ /dev/null @@ -1,170 +0,0 @@ -package io.dataease.datasource.server; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import io.dataease.api.ds.DatasourceDriverApi; -import io.dataease.api.ds.vo.DriveDTO; -import io.dataease.api.ds.vo.DriveJarDTO; -import io.dataease.datasource.dao.auto.entity.CoreDriver; -import io.dataease.datasource.dao.auto.entity.CoreDriverJar; -import io.dataease.datasource.dao.auto.mapper.CoreDriverJarMapper; -import io.dataease.datasource.dao.auto.mapper.CoreDriverMapper; -import io.dataease.extensions.datasource.dto.DatasourceDTO; -import io.dataease.utils.BeanUtils; -import io.dataease.utils.FileUtils; -import io.dataease.utils.Md5Utils; -import jakarta.annotation.Resource; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; - -import java.io.File; -import java.io.FileOutputStream; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Transactional(rollbackFor = Exception.class) -@RestController -@RequestMapping("/datasourceDriver") -public class DatasourceDriverServer implements DatasourceDriverApi { - - @Value("${dataease.path.custom-drivers:/opt/dataease2.0/custom-drivers/}") - private String DRIVER_PATH; - - @Resource - private CoreDriverMapper coreDriverMapper; - - @Resource - private CoreDriverJarMapper coreDriverJarMapper; - - @Override - public List query(String keyWord) { - return null; - } - - @Override - public List list() { - List driveDTOS = new ArrayList<>(); - List coreDrivers = coreDriverMapper.selectList(null); - coreDrivers.forEach(coreDriver -> { - DriveDTO datasourceDrive = new DriveDTO(); - BeanUtils.copyBean(datasourceDrive, coreDriver); - datasourceDrive.setTypeDesc(""); //TODO 设置数据源类型desc - }); - return driveDTOS; - } - - @Override - public List listByDsType(String dsType) { - List driveDTOS = new ArrayList<>(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("type", dsType); - List coreDrivers = coreDriverMapper.selectList(queryWrapper); - coreDrivers.forEach(coreDriver -> { - DriveDTO datasourceDrive = new DriveDTO(); - BeanUtils.copyBean(datasourceDrive, coreDriver); - }); - return driveDTOS; - } - - @Override - public DriveDTO save(DriveDTO datasourceDrive) { - CoreDriver coreDriver = new CoreDriver(); - BeanUtils.copyBean(coreDriver, datasourceDrive); - coreDriverMapper.insert(coreDriver); - return datasourceDrive; - } - - @Override - public DriveDTO update(DriveDTO datasourceDrive) { - CoreDriver coreDriver = new CoreDriver(); - BeanUtils.copyBean(coreDriver, datasourceDrive); - coreDriverMapper.updateById(coreDriver); - return datasourceDrive; - } - - @Override - public void delete(String driverId) { - coreDriverMapper.deleteById(driverId); - Map map = new HashMap<>(); - map.put("deDriverId", driverId); - coreDriverJarMapper.deleteByMap(map); - } - - - @Override - public List listDriverJar(String driverId) { - List driveJarDTOS = new ArrayList<>(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("deDriverId", driverId); - coreDriverJarMapper.selectList(queryWrapper).forEach(coreDriverJar -> { - DriveJarDTO driveJarDTO = new DriveJarDTO(); - BeanUtils.copyBean(driveJarDTO, coreDriverJar); - driveJarDTOS.add(driveJarDTO); - }); - return driveJarDTOS; - } - - @Override - public void deleteDriverJar(String jarId) { - CoreDriverJar driverJar = coreDriverJarMapper.selectById(jarId); - coreDriverJarMapper.deleteById(jarId); - CoreDriver driver = coreDriverMapper.selectById(driverJar.getDeDriverId()); - FileUtils.deleteFile(DRIVER_PATH + driverJar.getDeDriverId() + "/" + driverJar.getTransName()); - //TODO 更新classloader - } - - @Override - public DriveJarDTO uploadJar(@RequestParam("deDriverId") String deDriverId, @RequestParam("jarFile") MultipartFile jarFile) throws Exception { - CoreDriver coreDriver = coreDriverMapper.selectById(deDriverId); - if (coreDriver == null) { - throw new RuntimeException("DRIVER_NOT_FOUND"); - } - String filename = jarFile.getOriginalFilename(); - if (!filename.endsWith(".jar")) { - throw new RuntimeException("NOT_JAR"); - } - - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("fileName", filename); - if (!CollectionUtils.isEmpty(coreDriverJarMapper.selectList(queryWrapper))) { - throw new Exception("A file with the same name already exists:" + filename); - } - - String dirPath = DRIVER_PATH + deDriverId + "/"; - String filePath = dirPath + Md5Utils.md5(filename) + ".jar"; - saveJarFile(jarFile, dirPath, filePath); - - CoreDriverJar coreDriverJar = new CoreDriverJar(); - coreDriverJar.setDeDriverId(deDriverId); - coreDriverJar.setVersion(""); - coreDriverJar.setFileName(filename); - coreDriverJar.setDriverClass(String.join(",", new ArrayList<>())); - coreDriverJar.setIsTransName(true); - coreDriverJar.setTransName(Md5Utils.md5(filename) + ".jar"); - coreDriverJarMapper.insert(coreDriverJar); - //TODO 并更新classloader - - DriveJarDTO driveJarDTO = new DriveJarDTO(); - BeanUtils.copyBean(driveJarDTO, coreDriverJar); - return driveJarDTO; - } - - private String saveJarFile(MultipartFile file, String dirPath, String filePath) throws Exception { - File p = new File(dirPath); - if (!p.exists()) { - p.mkdirs(); - } - File f = new File(filePath); - FileOutputStream fileOutputStream = new FileOutputStream(f); - fileOutputStream.write(file.getBytes()); - fileOutputStream.flush(); - fileOutputStream.close(); - return filePath; - } -} 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 b51a9a8a0f..9f5d2b4c09 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 @@ -18,9 +18,9 @@ import io.dataease.constant.SQLConstants; import io.dataease.dataset.manage.DatasetDataManage; import io.dataease.dataset.utils.TableUtils; import io.dataease.datasource.dao.auto.entity.*; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; import io.dataease.datasource.dao.auto.mapper.CoreDsFinishPageMapper; import io.dataease.datasource.dao.auto.mapper.QrtzSchedulerStateMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.dao.ext.mapper.DataSourceExtMapper; import io.dataease.datasource.dao.ext.mapper.TaskLogExtMapper; import io.dataease.datasource.manage.DataSourceManage; @@ -54,6 +54,8 @@ import org.quartz.JobDataMap; import org.quartz.JobKey; import org.quartz.TriggerKey; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Sort; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -61,6 +63,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; +import java.awt.print.Pageable; import java.io.*; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -74,8 +77,6 @@ import static io.dataease.datasource.server.DatasourceTaskServer.ScheduleType.RI @RestController @RequestMapping("/datasource") public class DatasourceServer implements DatasourceApi { - @Resource - private CoreDatasourceMapper datasourceMapper; @Resource private EngineManage engineManage; @Resource @@ -105,6 +106,9 @@ public class DatasourceServer implements DatasourceApi { private PluginManageApi pluginManage; @Autowired(required = false) private RelationApi relationManage; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; + public enum UpdateType { all_scope, add_scope @@ -138,10 +142,8 @@ public class DatasourceServer implements DatasourceApi { if (CollectionUtils.isEmpty(ids)) { return false; } - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.in("id", ids); - List datasources = datasourceMapper.selectList(wrapper); + List datasources = coreDatasourceRepository.findInIds(ids); if (CollectionUtils.isEmpty(datasources)) { return false; } @@ -566,11 +568,13 @@ public class DatasourceServer implements DatasourceApi { public List innerList(List ids, List types) throws DEException { List list = new ArrayList<>(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + List dsList = new ArrayList<>(); if (ids != null) { if (ids.isEmpty()) { return list; } else { queryWrapper.in(CoreDatasource::getId, ids); + dsList = coreDatasourceRepository.findInIds(ids); } } if (types != null) { @@ -578,9 +582,9 @@ public class DatasourceServer implements DatasourceApi { return list; } else { queryWrapper.in(CoreDatasource::getType, types); + dsList = coreDatasourceRepository.findInTypes(types); } } - List dsList = datasourceMapper.selectList(queryWrapper); for (CoreDatasource datasource : dsList) { DatasourceDTO datasourceDTO = new DatasourceDTO(); @@ -684,15 +688,13 @@ public class DatasourceServer implements DatasourceApi { datasourceTaskServer.deleteByDSId(datasourceId); } - datasourceMapper.deleteById(datasourceId); + coreDatasourceRepository.deleteById(datasourceId); if (notFullDs.stream().allMatch(e -> !coreDatasource.getType().contains(e))) { calciteProvider.delete(coreDatasource); } if (coreDatasource.getType().equals(DatasourceConfiguration.DatasourceType.folder.name())) { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.eq("pid", datasourceId); - List coreDatasources = datasourceMapper.selectList(wrapper); + List coreDatasources = coreDatasourceRepository.findByPid(datasourceId); if (ObjectUtils.isNotEmpty(coreDatasources)) { for (CoreDatasource record : coreDatasources) { delete(record.getId()); @@ -1101,11 +1103,10 @@ public class DatasourceServer implements DatasourceApi { @Override public List latestUse() { List types = new ArrayList<>(); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("create_by", AuthUtils.getUser().getUserId()); - queryWrapper.orderByDesc("create_time"); - queryWrapper.last(" limit 5"); - List coreDatasources = datasourceMapper.selectList(queryWrapper); + Sort sort = Sort.by(Sort.Direction.DESC, "createTime"); + org.springframework.data.domain.Pageable pageableWithSort = PageRequest.of(0, 5, sort); + + List coreDatasources = coreDatasourceRepository.findCoreDatasourcesByCreateBy(AuthUtils.getUser().getUserId(), pageableWithSort); if (CollectionUtils.isEmpty(coreDatasources)) { return types; } @@ -1144,9 +1145,7 @@ public class DatasourceServer implements DatasourceApi { public void updateDatasourceStatus() { - QueryWrapper wrapper = new QueryWrapper<>(); - wrapper.notIn("type", Arrays.asList("Excel", "folder")); - List datasources = datasourceMapper.selectList(wrapper); + List datasources = coreDatasourceRepository.findTypeNotIn(Arrays.asList("Excel", "folder")); datasources.forEach(datasource -> { if (!syncDsIds.contains(datasource.getId())) { syncDsIds.add(datasource.getId()); @@ -1183,9 +1182,7 @@ public class DatasourceServer implements DatasourceApi { List qrtzSchedulerStates = qrtzSchedulerStateMapper.selectList(null); List activeQrtzInstances = qrtzSchedulerStates.stream().filter(qrtzSchedulerState -> qrtzSchedulerState.getLastCheckinTime() + qrtzSchedulerState.getCheckinInterval() + 1000 > dataSourceExtMapper.selectTimestamp().getCurrentTimestamp() * 1000).map(QrtzSchedulerState::getInstanceName).collect(Collectors.toList()); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("task_status", TaskStatus.UnderExecution.name()); - List datasources = datasourceMapper.selectList(queryWrapper); + List datasources = coreDatasourceRepository.findByTaskStatus(TaskStatus.UnderExecution.name()); List syncCoreDatasources = new ArrayList<>(); List jobStoppedCoreDatasources = new ArrayList<>(); @@ -1200,12 +1197,7 @@ public class DatasourceServer implements DatasourceApi { if (CollectionUtils.isEmpty(jobStoppedCoreDatasources)) { return; } - - queryWrapper.clear(); - queryWrapper.in("id", jobStoppedCoreDatasources.stream().map(CoreDatasource::getId).collect(Collectors.toList())); - CoreDatasource record = new CoreDatasource(); - record.setTaskStatus(TaskStatus.WaitingForExecution.name()); - datasourceMapper.update(record, queryWrapper); + coreDatasourceRepository.updateTaskStatusByIds(jobStoppedCoreDatasources.stream().map(CoreDatasource::getId).collect(Collectors.toList()), TaskStatus.WaitingForExecution.name()); //Task datasourceTaskServer.updateByDsIds(jobStoppedCoreDatasources.stream().map(CoreDatasource::getId).collect(Collectors.toList())); } diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceTaskServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceTaskServer.java index 1a75e80019..4252f67417 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceTaskServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceTaskServer.java @@ -6,15 +6,17 @@ import io.dataease.commons.constants.TaskStatus; import io.dataease.datasource.dao.auto.entity.CoreDatasource; import io.dataease.datasource.dao.auto.entity.CoreDatasourceTask; import io.dataease.datasource.dao.auto.entity.CoreDatasourceTaskLog; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; import io.dataease.datasource.dao.auto.mapper.CoreDatasourceTaskLogMapper; import io.dataease.datasource.dao.auto.mapper.CoreDatasourceTaskMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.dto.CoreDatasourceTaskDTO; import io.dataease.datasource.dao.ext.mapper.ExtDatasourceTaskMapper; import io.dataease.datasource.manage.DatasourceSyncManage; import io.dataease.utils.IDUtils; import jakarta.annotation.Resource; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Example; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -26,8 +28,8 @@ public class DatasourceTaskServer { @Resource private CoreDatasourceTaskMapper datasourceTaskMapper; - @Resource - private CoreDatasourceMapper coreDatasourceMapper; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Resource private ExtDatasourceTaskMapper extDatasourceTaskMapper; @Resource @@ -131,15 +133,15 @@ public class DatasourceTaskServer { } public synchronized boolean existUnderExecutionTask(Long datasourceId, Long taskId) { - UpdateWrapper updateWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", datasourceId); - updateWrapper.ne("task_status", TaskStatus.UnderExecution.name()); CoreDatasource coreDatasource = new CoreDatasource(); + coreDatasource.setId(datasourceId); coreDatasource.setTaskStatus(TaskStatus.UnderExecution.name()); - Boolean existSyncTask = coreDatasourceMapper.update(coreDatasource, updateWrapper) == 0; + Example example = Example.of(coreDatasource); + + boolean existSyncTask = coreDatasourceRepository.exists(example); if (!existSyncTask) { UpdateWrapper updateTaskWrapper = new UpdateWrapper<>(); - updateWrapper.eq("id", taskId); + updateTaskWrapper.eq("id", taskId); CoreDatasourceTask record = new CoreDatasourceTask(); record.setTaskStatus(TaskStatus.UnderExecution.name()); record.setLastExecTime(System.currentTimeMillis()); diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java index 8e76d60336..033e5ca210 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/DataVisualizationServer.java @@ -34,7 +34,7 @@ import io.dataease.dataset.manage.DatasetGroupManage; import io.dataease.dataset.manage.DatasetSQLManage; import io.dataease.dataset.utils.DatasetUtils; import io.dataease.datasource.dao.auto.entity.CoreDatasource; -import io.dataease.datasource.dao.auto.mapper.CoreDatasourceMapper; +import io.dataease.datasource.dao.auto.repository.CoreDatasourceRepository; import io.dataease.datasource.provider.ExcelUtils; import io.dataease.datasource.server.DatasourceServer; import io.dataease.exception.DEException; @@ -140,8 +140,8 @@ public class DataVisualizationServer implements DataVisualizationApi { @Resource private CoreDatasetTableFieldMapper coreDatasetTableFieldMapper; - @Resource - private CoreDatasourceMapper coreDatasourceMapper; + @Autowired + private CoreDatasourceRepository coreDatasourceRepository; @Resource private CoreBusiManage coreBusiManage; @@ -277,7 +277,7 @@ public class DataVisualizationServer implements DataVisualizationApi { } }); - List systemDatasource = coreDatasourceMapper.selectBatchIds(newDatasourceId); + List systemDatasource = coreDatasourceRepository.findInIds(newDatasourceId); systemDatasource.forEach(datasourceNew -> { // Excel 数据表明映射 if (StringUtils.isNotEmpty(datasourceNew.getConfiguration())) { diff --git a/core/core-backend/src/main/resources/application-standalone.yml b/core/core-backend/src/main/resources/application-standalone.yml index dc736ca3a7..e2df6e91b3 100644 --- a/core/core-backend/src/main/resources/application-standalone.yml +++ b/core/core-backend/src/main/resources/application-standalone.yml @@ -5,14 +5,14 @@ spring: password: 123456 messages: basename: i18n/lic,i18n/core,i18n/permissions,i18n/xpack,i18n/sync - flyway: - enabled: true - table: de_standalone_version - validate-on-migrate: false - locations: classpath:db/migration - baseline-on-migrate: true - out-of-order: true + jpa: + properties: + hibernate: + dialect: org.hibernate.dialect.MySQLDialect + hibernate: + ddl-auto: update + show-sql: true mybatis-plus: mapper-locations: classpath:mybatis/*.xml diff --git a/sdk/common/src/main/java/io/dataease/initSql/SqlBlock.java b/sdk/common/src/main/java/io/dataease/initSql/SqlBlock.java new file mode 100644 index 0000000000..d1beb9502f --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/initSql/SqlBlock.java @@ -0,0 +1,7 @@ +package io.dataease.initSql; + +public interface SqlBlock { + Version getVersion(); + void execute(); + String getVersionGroup(); +} diff --git a/sdk/common/src/main/java/io/dataease/initSql/Version.java b/sdk/common/src/main/java/io/dataease/initSql/Version.java new file mode 100644 index 0000000000..9aff5e0e4a --- /dev/null +++ b/sdk/common/src/main/java/io/dataease/initSql/Version.java @@ -0,0 +1,45 @@ +package io.dataease.initSql; + +import lombok.Data; + +import java.util.Arrays; +import java.util.List; + +@Data +public class Version implements Comparable { + private final String version; + private final List parts; + + public Version(String version) { + this.version = version; + this.parts = parseVersionString(version); + } + + private List parseVersionString(String version) { + return Arrays.asList(version.split("\\.")); + } + + @Override + public int compareTo(Version other) { + int i = 0; + while (i < parts.size() || i < other.parts.size()) { + if (i < parts.size() && i < other.parts.size()) { + int thisPart = Integer.parseInt(parts.get(i)); + int otherPart = Integer.parseInt(other.parts.get(i)); + if (thisPart != otherPart) { + return thisPart - otherPart; + } + } else if (i < parts.size()) { + if (Integer.parseInt(parts.get(i)) != 0) { + return 1; + } + } else { + if (Integer.parseInt(other.parts.get(i)) != 0) { + return -1; + } + } + i++; + } + return 0; + } +}