diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java index c627cde1af..3399e41112 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelAppTemplateApplyRequest.java @@ -33,5 +33,13 @@ public class PanelAppTemplateApplyRequest { private String datasourceHistoryId; + private String linkJumps; + + private String linkJumpInfos; + + private String linkages; + + private String linkageFields; + private List datasourceList; } diff --git a/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java b/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java index c8061ef634..d663b77687 100644 --- a/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java +++ b/backend/src/main/java/io/dataease/dto/panel/PanelExport2App.java @@ -37,6 +37,14 @@ public class PanelExport2App { private String datasourceInfo; + private String linkJumps; + + private String linkJumpInfos; + + private String linkages; + + private String linkageFields; + public PanelExport2App() { } @@ -45,7 +53,11 @@ public class PanelExport2App { this.checkMes = checkMes; } - public PanelExport2App(List chartViewsInfo, List chartViewFieldsInfo, List datasetTablesInfo, List datasetTableFieldsInfo, List datasetTasksInfo, List datasourceInfo, List panelViewsInfo) { + public PanelExport2App(List chartViewsInfo, List chartViewFieldsInfo, + List datasetTablesInfo, List datasetTableFieldsInfo, + List datasetTasksInfo, List datasourceInfo, + List panelViewsInfo,List linkJumps,List linkJumpInfos, + List linkages, List linkageFields) { List empty = new ArrayList(); this.checkStatus = true; this.checkMes = "success"; @@ -56,5 +68,9 @@ public class PanelExport2App { this.datasetTasksInfo = JSON.toJSONString(datasetTasksInfo!=null?datasetTasksInfo:empty); this.datasourceInfo = JSON.toJSONString(datasourceInfo!=null?datasourceInfo:empty); this.panelViewsInfo = JSON.toJSONString(panelViewsInfo!=null?panelViewsInfo:empty); + this.linkJumps = JSON.toJSONString(linkJumps!=null?linkJumps:empty); + this.linkJumpInfos = JSON.toJSONString(linkJumpInfos!=null?linkJumpInfos:empty); + this.linkages = JSON.toJSONString(linkages!=null?linkages:empty); + this.linkageFields = JSON.toJSONString(linkJumpInfos!=null?linkageFields:empty); } } diff --git a/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.java b/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.java index e030e1f52a..e969e51137 100644 --- a/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.java @@ -2,6 +2,8 @@ package io.dataease.ext; import io.dataease.dto.panel.linkJump.PanelLinkJumpBaseRequest; import io.dataease.dto.panel.linkJump.PanelLinkJumpDTO; +import io.dataease.plugins.common.base.domain.PanelLinkJump; +import io.dataease.plugins.common.base.domain.PanelLinkJumpInfo; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -30,4 +32,7 @@ public interface ExtPanelLinkJumpMapper { void copyLinkJumpInfo(@Param("copyId")String copyId); void copyLinkJumpTarget(@Param("copyId")String copyId); + + List findLinkJumpWithPanelId(@Param("panelId")String panelId); + List findLinkJumpInfoWithPanelId(@Param("panelId")String panelId); } diff --git a/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.xml b/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.xml index a0e492ad34..978e9fe38f 100644 --- a/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtPanelLinkJumpMapper.xml @@ -269,4 +269,29 @@ WHERE copy_id = #{copyId}) plji_copy ON panel_link_jump_target_view_info.link_jump_info_id = plji_copy.s_id + + + + diff --git a/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.java b/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.java index 053e0fa03a..41ee8b1441 100644 --- a/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.java +++ b/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.java @@ -3,6 +3,8 @@ package io.dataease.ext; import io.dataease.dto.LinkageInfoDTO; import io.dataease.dto.PanelViewLinkageDTO; import io.dataease.plugins.common.base.domain.DatasetTableField; +import io.dataease.plugins.common.base.domain.PanelViewLinkage; +import io.dataease.plugins.common.base.domain.PanelViewLinkageField; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -24,4 +26,8 @@ public interface ExtPanelViewLinkageMapper { void copyViewLinkage(@Param("copyId") String copyId); void copyViewLinkageField(@Param("copyId") String copyId); + + List findLinkageWithPanelId(@Param("panelId") String panelId); + + List findLinkageFieldWithPanelId(@Param("panelId") String panelId); } diff --git a/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.xml b/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.xml index 84f727954c..55772f2697 100644 --- a/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.xml +++ b/backend/src/main/java/io/dataease/ext/ExtPanelViewLinkageMapper.xml @@ -195,4 +195,18 @@ ) pvlf_copy ON panel_view_linkage_field.linkage_id = pvlf_copy.s_id + + + + + diff --git a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java index 8311ea5a7d..9799a6b54d 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelAppTemplateService.java @@ -14,7 +14,7 @@ import io.dataease.controller.request.panel.PanelGroupRequest; import io.dataease.dto.DatasourceDTO; import io.dataease.ext.ExtPanelAppTemplateMapper; import io.dataease.plugins.common.base.domain.*; -import io.dataease.plugins.common.base.mapper.PanelAppTemplateMapper; +import io.dataease.plugins.common.base.mapper.*; import io.dataease.plugins.common.constants.DatasetType; import io.dataease.service.chart.ChartViewFieldService; import io.dataease.service.chart.ChartViewService; @@ -72,6 +72,14 @@ public class PanelAppTemplateService { private StaticResourceService staticResourceService; @Resource private ExtractDataService extractDataService; + @Resource + private PanelLinkJumpMapper panelLinkJumpMapper; + @Resource + private PanelLinkJumpInfoMapper panelLinkJumpInfoMapper; + @Resource + private PanelViewLinkageMapper panelViewLinkageMapper; + @Resource + private PanelViewLinkageFieldMapper panelViewLinkageFieldMapper; public List list(PanelAppTemplateRequest request) { return extPanelAppTemplateMapper.queryBaseInfo(request.getNodeType(), request.getPid()); @@ -411,4 +419,67 @@ public class PanelAppTemplateService { } } + + @Transactional(rollbackFor = Exception.class) + public Map applyLinkJumps(List linkJumps, Map chartViewsRealMap, String newPanelId) { + Map linkJumpIdMap = new HashMap<>(); + if(!CollectionUtils.isEmpty(linkJumps)){ + for(PanelLinkJump linkJump :linkJumps){ + String newLinkJumpId = UUIDUtil.getUUIDAsString(); + linkJumpIdMap.put(linkJump.getId(),newLinkJumpId); + linkJump.setId(newLinkJumpId); + linkJump.setSourcePanelId(newPanelId); + linkJump.setSourceViewId(chartViewsRealMap.get(linkJump.getSourceViewId())); + panelLinkJumpMapper.insertSelective(linkJump); + } + } + return linkJumpIdMap; + } + + @Transactional(rollbackFor = Exception.class) + public void applyLinkJumpInfos(List linkJumpInfos, Map linkJumpIdMap, Map datasetFieldsRealMap) { + if(!CollectionUtils.isEmpty(linkJumpInfos)){ + for(PanelLinkJumpInfo linkJumpInfo :linkJumpInfos){ + String newLinkJumpInfoId = UUIDUtil.getUUIDAsString(); + linkJumpInfo.setId(newLinkJumpInfoId); + linkJumpInfo.setLinkJumpId(linkJumpIdMap.get(linkJumpInfo.getLinkJumpId())); + linkJumpInfo.setSourceFieldId(datasetFieldsRealMap.get(linkJumpInfo.getSourceFieldId())); + datasetFieldsRealMap.forEach((k, v) -> { + linkJumpInfo.setContent(linkJumpInfo.getContent().replaceAll(k, v)); + }); + panelLinkJumpInfoMapper.insertSelective(linkJumpInfo); + } + } + } + + @Transactional(rollbackFor = Exception.class) + public Map applyLinkages(List linkages, Map chartViewsRealMap, String newPanelId) { + Map linkageIdMap = new HashMap<>(); + if(!CollectionUtils.isEmpty(linkages)){ + for(PanelViewLinkage linkage :linkages){ + String newId = UUIDUtil.getUUIDAsString(); + linkageIdMap.put(linkage.getId(),newId); + linkage.setId(newId); + linkage.setPanelId(newPanelId); + linkage.setSourceViewId(chartViewsRealMap.get(linkage.getSourceViewId())); + linkage.setTargetViewId(chartViewsRealMap.get(linkage.getTargetViewId())); + panelViewLinkageMapper.insertSelective(linkage); + } + } + return linkageIdMap; + } + + @Transactional(rollbackFor = Exception.class) + public void applyLinkageFields(List linkageFields, Map linkageIdMap, Map datasetFieldsRealMap) { + if(!CollectionUtils.isEmpty(linkageFields)){ + for(PanelViewLinkageField linkageField :linkageFields){ + String newId = UUIDUtil.getUUIDAsString(); + linkageField.setId(newId); + linkageField.setLinkageId(linkageIdMap.get(linkageField.getLinkageId())); + linkageField.setSourceField(datasetFieldsRealMap.get(linkageField.getSourceField())); + linkageField.setTargetField(datasetFieldsRealMap.get(linkageField.getTargetField())); + panelViewLinkageFieldMapper.insertSelective(linkageField); + } + } + } } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java index 52f8af9321..4d54ff13cd 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelGroupService.java @@ -964,6 +964,14 @@ public class PanelGroupService { List datasourceDTOS = extDataSourceMapper.findByTableIds(allTableIds); List panelViews = panelViewService.findPanelViewsByPanelId(panelId); + //获取所有跳转信息 + List linkJumps = extPanelLinkJumpMapper.findLinkJumpWithPanelId(panelId); + //获取所有跳转关联信息 + List linkJumpInfos = extPanelLinkJumpMapper.findLinkJumpInfoWithPanelId(panelId); + //获取所有联动信息 + List linkages = extPanelViewLinkageMapper.findLinkageWithPanelId(panelId); + //获取所有联动关联信息 + List LinkageFields = extPanelViewLinkageMapper.findLinkageFieldWithPanelId(panelId); //校验标准 1.存在视图且所有视图的数据来源必须是dataset 2.存在数据集且没有excel数据集 3.存在数据源且是单数据源 //1.view check @@ -979,7 +987,8 @@ public class PanelGroupService { } else if (datasourceDTOS.size() > 1) { return new PanelExport2App(Translator.get("I18N_APP_ONE_DATASOURCE_TIPS")); } - return new PanelExport2App(chartViewsInfo, chartViewFieldsInfo, datasetTablesInfo, datasetTableFieldsInfo, dataSetTasksInfo, datasourceDTOS, panelViews); + return new PanelExport2App(chartViewsInfo, chartViewFieldsInfo, datasetTablesInfo, datasetTableFieldsInfo, + dataSetTasksInfo, datasourceDTOS, panelViews, linkJumps, linkJumpInfos, linkages, LinkageFields); } @Transactional(rollbackFor = Exception.class) @@ -1016,11 +1025,32 @@ public class PanelGroupService { //6.获取所有数据源信息 List oldDatasourceInfo = gson.fromJson(appInfo.getDatasourceInfo(), new TypeToken>() { }.getType()); - //获取仪表板信息 + //7.获取仪表板信息 PanelGroupRequest panelInfo = gson.fromJson(appInfo.getPanelInfo(), PanelGroupRequest.class); - //获取仪表板视图信息 + //8.获取仪表板视图信息 List panelViewsInfo = gson.fromJson(appInfo.getPanelViewsInfo(), new TypeToken>() { }.getType()); + //9.获取跳转信息 + List linkJumps = null; + if(StringUtils.isNotEmpty(appInfo.getLinkJumps())){ + linkJumps = gson.fromJson(appInfo.getLinkJumps(), new TypeToken>() {}.getType()); + } + //10.获取跳转关联信息 + List linkJumpInfos = null; + if(StringUtils.isNotEmpty(appInfo.getLinkJumpInfos())){ + linkJumpInfos = gson.fromJson(appInfo.getLinkJumpInfos(), new TypeToken>() {}.getType()); + } + //11.获取联动信息 + List linkages = null; + if(StringUtils.isNotEmpty(appInfo.getLinkages())){ + linkages = gson.fromJson(appInfo.getLinkages(), new TypeToken>() {}.getType()); + } + + //12.获取联动关联信息 + List linkageFields = null; + if(StringUtils.isNotEmpty(appInfo.getLinkageFields())){ + linkageFields = gson.fromJson(appInfo.getLinkageFields(), new TypeToken>() {}.getType()); + } Map datasourceRealMap = panelAppTemplateService.applyDatasource(oldDatasourceInfo, request); @@ -1044,8 +1074,15 @@ public class PanelGroupService { panelAppTemplateService.applyPanelView(panelViewsInfo, chartViewsRealMap, newPanelId); - String newDatasourceId = datasourceRealMap.entrySet().stream().findFirst().get().getValue(); + Map linkageIdMap = panelAppTemplateService.applyLinkages(linkages,chartViewsRealMap,newPanelId); + panelAppTemplateService.applyLinkageFields(linkageFields,linkageIdMap,datasetFieldsRealMap); + + Map linkJumpIdMap = panelAppTemplateService.applyLinkJumps(linkJumps,chartViewsRealMap,newPanelId); + + panelAppTemplateService.applyLinkJumpInfos(linkJumpInfos,linkJumpIdMap,datasetFieldsRealMap); + + String newDatasourceId = datasourceRealMap.entrySet().stream().findFirst().get().getValue(); PanelAppTemplateLog templateLog = new PanelAppTemplateLog(); templateLog.setPanelId(newPanelId); diff --git a/backend/src/main/resources/db/migration/V52__1.18.5.sql b/backend/src/main/resources/db/migration/V52__1.18.5.sql index b44d1a9529..747a7fcbd8 100644 --- a/backend/src/main/resources/db/migration/V52__1.18.5.sql +++ b/backend/src/main/resources/db/migration/V52__1.18.5.sql @@ -54,4 +54,10 @@ END ;; delimiter ; -INSERT INTO `system_parameter` (`param_key`, `param_value`, `type`, `sort`) VALUES ('loginlimit.multiLogin', '0', 'text', '3'); \ No newline at end of file +INSERT INTO `system_parameter` (`param_key`, `param_value`, `type`, `sort`) VALUES ('loginlimit.multiLogin', '0', 'text', '3'); + +ALTER TABLE `panel_app_template` + ADD COLUMN `link_jumps` longtext NULL AFTER `datasource_info`, +ADD COLUMN `link_jump_infos` longtext NULL AFTER `link_jumps`, +ADD COLUMN `linkages` longtext NULL AFTER `link_jump_infos`, +ADD COLUMN `linkage_fields` longtext NULL AFTER `linkages`; \ No newline at end of file