From f7ef95278b2dc6a26543e9c5deb99307d4477595 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 17 Jul 2024 23:25:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF=E3=80=81?= =?UTF-8?q?=E5=A4=A7=E5=B1=8F):=20=E6=94=AF=E6=8C=81=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E3=80=81=E5=BA=94=E7=94=A8=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataset/manage/DatasetGroupManage.java | 1 + .../auto/entity/VisualizationTemplate.java | 2 +- .../mapper/VisualizationTemplateMapper.java | 2 +- .../server/DataVisualizationServer.java | 104 +++++++++- .../data-visualization/DvToolbar.vue | 42 +++- .../modules/data-visualization/dvMain.ts | 13 +- core/core-frontend/src/utils/canvasUtils.ts | 12 +- .../editor/dataset-select/DatasetSelect.vue | 23 ++- .../src/views/common/DeAppApply.vue | 183 +++++++++++++++--- .../src/views/data-visualization/index.vue | 5 +- .../visualization/DataVisualizationApi.java | 2 +- .../request/DataVisualizationBaseRequest.java | 14 ++ .../visualization/vo/AppCoreDatasourceVO.java | 5 + .../vo/VisualizationExport2AppVO.java | 46 +++-- 14 files changed, 381 insertions(+), 73 deletions(-) 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 2fb6c13528..024d821ff2 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 @@ -80,6 +80,7 @@ public class DatasetGroupManage { private Lock lock = new ReentrantLock(); + @Transactional public DatasetGroupInfoDTO save(DatasetGroupInfoDTO datasetGroupInfoDTO, boolean rename) throws Exception { lock.lock(); try { diff --git a/core/core-backend/src/main/java/io/dataease/template/dao/auto/entity/VisualizationTemplate.java b/core/core-backend/src/main/java/io/dataease/template/dao/auto/entity/VisualizationTemplate.java index 5a4ced5f44..31d386df96 100644 --- a/core/core-backend/src/main/java/io/dataease/template/dao/auto/entity/VisualizationTemplate.java +++ b/core/core-backend/src/main/java/io/dataease/template/dao/auto/entity/VisualizationTemplate.java @@ -9,7 +9,7 @@ import java.io.Serializable; *

* * @author fit2cloud - * @since 2024-07-16 + * @since 2024-07-17 */ @TableName("visualization_template") public class VisualizationTemplate implements Serializable { diff --git a/core/core-backend/src/main/java/io/dataease/template/dao/auto/mapper/VisualizationTemplateMapper.java b/core/core-backend/src/main/java/io/dataease/template/dao/auto/mapper/VisualizationTemplateMapper.java index 28f93143c7..c4ef398bb9 100644 --- a/core/core-backend/src/main/java/io/dataease/template/dao/auto/mapper/VisualizationTemplateMapper.java +++ b/core/core-backend/src/main/java/io/dataease/template/dao/auto/mapper/VisualizationTemplateMapper.java @@ -10,7 +10,7 @@ import org.apache.ibatis.annotations.Mapper; *

* * @author fit2cloud - * @since 2024-07-16 + * @since 2024-07-17 */ @Mapper public interface VisualizationTemplateMapper extends BaseMapper { 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 1c647fe4fb..1400bfdd28 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 @@ -2,8 +2,16 @@ package io.dataease.visualization.server; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.google.gson.Gson; +import io.dataease.api.dataset.union.DatasetGroupInfoDTO; import io.dataease.api.visualization.request.VisualizationAppExportRequest; import io.dataease.api.visualization.vo.*; +import io.dataease.dataset.dao.auto.entity.CoreDatasetGroup; +import io.dataease.dataset.dao.auto.entity.CoreDatasetTable; +import io.dataease.dataset.dao.auto.entity.CoreDatasetTableField; +import io.dataease.dataset.dao.auto.mapper.CoreDatasetGroupMapper; +import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableFieldMapper; +import io.dataease.dataset.dao.auto.mapper.CoreDatasetTableMapper; import io.dataease.dataset.manage.DatasetDataManage; import io.dataease.dataset.manage.DatasetGroupManage; import io.dataease.extensions.datasource.dto.DatasetTableDTO; @@ -37,6 +45,7 @@ import io.dataease.template.dao.auto.mapper.VisualizationTemplateMapper; import io.dataease.template.dao.ext.ExtVisualizationTemplateMapper; import io.dataease.template.manage.TemplateCenterManage; import io.dataease.utils.*; +import io.dataease.visualization.dao.auto.entity.CoreStore; import io.dataease.visualization.dao.auto.entity.DataVisualizationInfo; import io.dataease.visualization.dao.auto.entity.VisualizationWatermark; import io.dataease.visualization.dao.auto.mapper.DataVisualizationInfoMapper; @@ -45,6 +54,7 @@ import io.dataease.visualization.dao.ext.mapper.ExtDataVisualizationMapper; import io.dataease.visualization.manage.CoreVisualizationManage; import jakarta.annotation.Resource; import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.RequestBody; @@ -104,6 +114,15 @@ public class DataVisualizationServer implements DataVisualizationApi { @Resource private ExtVisualizationTemplateMapper appTemplateMapper; + @Resource + private CoreDatasetGroupMapper coreDatasetGroupMapper; + + @Resource + private CoreDatasetTableMapper coreDatasetTableMapper; + + @Resource + private CoreDatasetTableFieldMapper coreDatasetTableFieldMapper; + @Override public DataVisualizationVO findCopyResource(Long dvId, String busiFlag) { DataVisualizationVO result = findById(new DataVisualizationBaseRequest(dvId, busiFlag)); @@ -152,7 +171,84 @@ public class DataVisualizationServer implements DataVisualizationApi { @DeLog(id = "#p0.id", pid = "#p0.pid", ot = LogOT.CREATE, stExp = "#p0.type") @Override @Transactional - public String saveCanvas(DataVisualizationBaseRequest request) { + public String saveCanvas(DataVisualizationBaseRequest request) throws Exception{ + Long time = System.currentTimeMillis(); + // 如果是应用 则新进行应用校验 数据集名称和 数据源名称校验 + VisualizationExport2AppVO appData = request.getAppData(); + Map dsGroupIdMap = new HashMap<>(); + Map dsTableIdMap = new HashMap<>(); + Map dsTableFieldsIdMap = new HashMap<>(); + if(appData != null){ + try { + Map datasourceIdMap = appData.getDatasourceInfo().stream() + .collect(Collectors.toMap(AppCoreDatasourceVO::getId, AppCoreDatasourceVO::getSystemDatasourceId)); + Long datasetFolderPid = request.getDatasetFolderPid(); + String datasetFolderName = request.getDatasetFolderName(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("name", datasetFolderName); + queryWrapper.eq("pid", datasetFolderPid); + if (coreDatasetGroupMapper.exists(queryWrapper)) { + DEException.throwException("当前数据集分组名称已存在"); + } + //新建数据集分组 + DatasetGroupInfoDTO datasetFolderNewRequest = new DatasetGroupInfoDTO(); + datasetFolderNewRequest.setName(datasetFolderName); + datasetFolderNewRequest.setNodeType("folder"); + datasetFolderNewRequest.setPid(datasetFolderPid); + DatasetGroupInfoDTO datasetFolderNew = datasetGroupManage.save(datasetFolderNewRequest, false); + Long datasetFolderNewId = datasetFolderNew.getId(); + //新建数据集 + appData.getDatasetGroupsInfo().forEach(appDatasetGroup -> { + if ("dataset".equals(appDatasetGroup.getNodeType())) { + Long oldId = appDatasetGroup.getId(); + Long newId = IDUtils.snowID(); + DatasetGroupInfoDTO datasetNewRequest = new DatasetGroupInfoDTO(); + BeanUtils.copyBean(datasetNewRequest, appDatasetGroup); + datasetNewRequest.setId(newId); + datasetNewRequest.setCreateBy(AuthUtils.getUser().getUserId() + ""); + datasetNewRequest.setUpdateBy(AuthUtils.getUser().getUserId() + ""); + datasetNewRequest.setCreateTime(time); + datasetNewRequest.setLastUpdateTime(time); + datasetNewRequest.setPid(datasetFolderNewId); + try { + datasetGroupManage.innerSave(datasetNewRequest); + dsGroupIdMap.put(oldId,newId); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + }); + // 新建数据集表 + appData.getDatasetTablesInfo().forEach(appCoreDatasetTableVO -> { + Long oldId = appCoreDatasetTableVO.getId(); + Long newId = IDUtils.snowID(); + CoreDatasetTable datasetTable = new CoreDatasetTable(); + BeanUtils.copyBean(datasetTable,appCoreDatasetTableVO); + datasetTable.setDatasetGroupId(dsGroupIdMap.get(datasetTable.getDatasetGroupId())); + datasetTable.setId(newId); + datasetTable.setDatasourceId(datasourceIdMap.get(datasetTable.getDatasourceId())); + coreDatasetTableMapper.insert(datasetTable); + dsTableIdMap.put(oldId,newId); + + }); + // 新建数据字段 + appData.getDatasetTableFieldsInfo().forEach( appDsTableFields ->{ + Long oldId = appDsTableFields.getId(); + Long newId = IDUtils.snowID(); + CoreDatasetTableField dsDsField = new CoreDatasetTableField(); + BeanUtils.copyBean(dsDsField,appDsTableFields); + dsDsField.setDatasetGroupId(dsGroupIdMap.get(dsDsField.getDatasetGroupId())); + dsDsField.setDatasetTableId(dsTableIdMap.get(dsDsField.getDatasetTableId())); + dsDsField.setDatasourceId(datasourceIdMap.get(dsDsField.getDatasourceId())); + dsDsField.setId(newId); + coreDatasetTableFieldMapper.insert(dsDsField); + dsTableFieldsIdMap.put(oldId,newId); + }); + }catch (Exception e){ + DEException.throwException("应用创建失败"); + } + } DataVisualizationInfo visualizationInfo = new DataVisualizationInfo(); BeanUtils.copyBean(visualizationInfo, request); visualizationInfo.setNodeType(request.getNodeType() == null ? DataVisualizationConstants.NODE_TYPE.LEAF : request.getNodeType()); @@ -168,6 +264,7 @@ public class DataVisualizationServer implements DataVisualizationApi { } Long newDvId = coreVisualizationManage.innerSave(visualizationInfo); request.setId(newDvId); + // TODO 还原ID信息 //保存图表信息 chartDataManage.saveChartViewFromVisualization(request.getComponentData(), newDvId, request.getCanvasViewInfo()); return newDvId.toString(); @@ -378,6 +475,11 @@ public class DataVisualizationServer implements DataVisualizationApi { VisualizationTemplateExtendDataDTO extendDataDTO = new VisualizationTemplateExtendDataDTO(newDvId, newViewId, originViewData); extendDataInfo.put(newViewId, extendDataDTO); templateData = templateData.replaceAll(originViewId, newViewId.toString()); + if(appData != null){ + Map appDataFormat = JsonUtil.parse(appData,Map.class); + String sourceDvId = (String) appDataFormat.get("id"); + appData = appData.replaceAll(originViewId, newViewId.toString()).replaceAll(sourceDvId, newDvId.toString()); + } canvasViewInfo.put(chartView.getId(), chartView); //插入模板数据 此处预先插入减少数据交互量 VisualizationTemplateExtendData extendData = new VisualizationTemplateExtendData(); diff --git a/core/core-frontend/src/components/data-visualization/DvToolbar.vue b/core/core-frontend/src/components/data-visualization/DvToolbar.vue index 2c175ab540..b0d73c0694 100644 --- a/core/core-frontend/src/components/data-visualization/DvToolbar.vue +++ b/core/core-frontend/src/components/data-visualization/DvToolbar.vue @@ -1,7 +1,7 @@