diff --git a/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java b/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java index 07a400d6d1..41b807625e 100644 --- a/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java +++ b/backend/src/main/java/io/dataease/base/domain/DatasetTableField.java @@ -2,11 +2,15 @@ package io.dataease.base.domain; import java.io.Serializable; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; @Data @Builder +@AllArgsConstructor //全参构造函数 +@NoArgsConstructor //无参构造函数 public class DatasetTableField implements Serializable { private String id; @@ -39,4 +43,4 @@ public class DatasetTableField implements Serializable { private Long lastSyncTime; private static final long serialVersionUID = 1L; -} \ No newline at end of file +} diff --git a/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageField.java b/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageField.java index 47b537a9ab..eb9a0ec102 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageField.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageField.java @@ -9,9 +9,9 @@ public class PanelViewLinkageField implements Serializable { private String linkageId; - private String sourceFiled; + private String sourceField; - private String targetFiled; + private String targetField; private Long updateTime; diff --git a/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageFieldExample.java b/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageFieldExample.java index 2f02872bab..5fda7906ed 100644 --- a/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageFieldExample.java +++ b/backend/src/main/java/io/dataease/base/domain/PanelViewLinkageFieldExample.java @@ -244,143 +244,143 @@ public class PanelViewLinkageFieldExample { return (Criteria) this; } - public Criteria andSourceFiledIsNull() { - addCriterion("source_filed is null"); + public Criteria andSourceFieldIsNull() { + addCriterion("source_field is null"); return (Criteria) this; } - public Criteria andSourceFiledIsNotNull() { - addCriterion("source_filed is not null"); + public Criteria andSourceFieldIsNotNull() { + addCriterion("source_field is not null"); return (Criteria) this; } - public Criteria andSourceFiledEqualTo(String value) { - addCriterion("source_filed =", value, "sourceFiled"); + public Criteria andSourceFieldEqualTo(String value) { + addCriterion("source_field =", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledNotEqualTo(String value) { - addCriterion("source_filed <>", value, "sourceFiled"); + public Criteria andSourceFieldNotEqualTo(String value) { + addCriterion("source_field <>", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledGreaterThan(String value) { - addCriterion("source_filed >", value, "sourceFiled"); + public Criteria andSourceFieldGreaterThan(String value) { + addCriterion("source_field >", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledGreaterThanOrEqualTo(String value) { - addCriterion("source_filed >=", value, "sourceFiled"); + public Criteria andSourceFieldGreaterThanOrEqualTo(String value) { + addCriterion("source_field >=", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledLessThan(String value) { - addCriterion("source_filed <", value, "sourceFiled"); + public Criteria andSourceFieldLessThan(String value) { + addCriterion("source_field <", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledLessThanOrEqualTo(String value) { - addCriterion("source_filed <=", value, "sourceFiled"); + public Criteria andSourceFieldLessThanOrEqualTo(String value) { + addCriterion("source_field <=", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledLike(String value) { - addCriterion("source_filed like", value, "sourceFiled"); + public Criteria andSourceFieldLike(String value) { + addCriterion("source_field like", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledNotLike(String value) { - addCriterion("source_filed not like", value, "sourceFiled"); + public Criteria andSourceFieldNotLike(String value) { + addCriterion("source_field not like", value, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledIn(List values) { - addCriterion("source_filed in", values, "sourceFiled"); + public Criteria andSourceFieldIn(List values) { + addCriterion("source_field in", values, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledNotIn(List values) { - addCriterion("source_filed not in", values, "sourceFiled"); + public Criteria andSourceFieldNotIn(List values) { + addCriterion("source_field not in", values, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledBetween(String value1, String value2) { - addCriterion("source_filed between", value1, value2, "sourceFiled"); + public Criteria andSourceFieldBetween(String value1, String value2) { + addCriterion("source_field between", value1, value2, "sourceField"); return (Criteria) this; } - public Criteria andSourceFiledNotBetween(String value1, String value2) { - addCriterion("source_filed not between", value1, value2, "sourceFiled"); + public Criteria andSourceFieldNotBetween(String value1, String value2) { + addCriterion("source_field not between", value1, value2, "sourceField"); return (Criteria) this; } - public Criteria andTargetFiledIsNull() { - addCriterion("target_filed is null"); + public Criteria andTargetFieldIsNull() { + addCriterion("target_field is null"); return (Criteria) this; } - public Criteria andTargetFiledIsNotNull() { - addCriterion("target_filed is not null"); + public Criteria andTargetFieldIsNotNull() { + addCriterion("target_field is not null"); return (Criteria) this; } - public Criteria andTargetFiledEqualTo(String value) { - addCriterion("target_filed =", value, "targetFiled"); + public Criteria andTargetFieldEqualTo(String value) { + addCriterion("target_field =", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledNotEqualTo(String value) { - addCriterion("target_filed <>", value, "targetFiled"); + public Criteria andTargetFieldNotEqualTo(String value) { + addCriterion("target_field <>", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledGreaterThan(String value) { - addCriterion("target_filed >", value, "targetFiled"); + public Criteria andTargetFieldGreaterThan(String value) { + addCriterion("target_field >", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledGreaterThanOrEqualTo(String value) { - addCriterion("target_filed >=", value, "targetFiled"); + public Criteria andTargetFieldGreaterThanOrEqualTo(String value) { + addCriterion("target_field >=", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledLessThan(String value) { - addCriterion("target_filed <", value, "targetFiled"); + public Criteria andTargetFieldLessThan(String value) { + addCriterion("target_field <", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledLessThanOrEqualTo(String value) { - addCriterion("target_filed <=", value, "targetFiled"); + public Criteria andTargetFieldLessThanOrEqualTo(String value) { + addCriterion("target_field <=", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledLike(String value) { - addCriterion("target_filed like", value, "targetFiled"); + public Criteria andTargetFieldLike(String value) { + addCriterion("target_field like", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledNotLike(String value) { - addCriterion("target_filed not like", value, "targetFiled"); + public Criteria andTargetFieldNotLike(String value) { + addCriterion("target_field not like", value, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledIn(List values) { - addCriterion("target_filed in", values, "targetFiled"); + public Criteria andTargetFieldIn(List values) { + addCriterion("target_field in", values, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledNotIn(List values) { - addCriterion("target_filed not in", values, "targetFiled"); + public Criteria andTargetFieldNotIn(List values) { + addCriterion("target_field not in", values, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledBetween(String value1, String value2) { - addCriterion("target_filed between", value1, value2, "targetFiled"); + public Criteria andTargetFieldBetween(String value1, String value2) { + addCriterion("target_field between", value1, value2, "targetField"); return (Criteria) this; } - public Criteria andTargetFiledNotBetween(String value1, String value2) { - addCriterion("target_filed not between", value1, value2, "targetFiled"); + public Criteria andTargetFieldNotBetween(String value1, String value2) { + addCriterion("target_field not between", value1, value2, "targetField"); return (Criteria) this; } diff --git a/backend/src/main/java/io/dataease/base/mapper/PanelViewLinkageFieldMapper.xml b/backend/src/main/java/io/dataease/base/mapper/PanelViewLinkageFieldMapper.xml index af1ac226d8..eddb4c83f9 100644 --- a/backend/src/main/java/io/dataease/base/mapper/PanelViewLinkageFieldMapper.xml +++ b/backend/src/main/java/io/dataease/base/mapper/PanelViewLinkageFieldMapper.xml @@ -4,8 +4,8 @@ - - + + @@ -67,7 +67,7 @@ - id, linkage_id, source_filed, target_filed, update_time + id, linkage_id, source_field, target_field, update_time + + + delete from panel_view_linkage where panel_view_linkage.panel_id = #{panelId} + AND panel_view_linkage.source_view_id = #{sourceViewId} + + + + + DELETE pvl + FROM + panel_view_linkage pvl, + panel_view_linkage_field pvlf + WHERE + pvl.id = pvlf.linkage_id + AND pvl.source_view_id = #{panelId} + AND pvl.panel_id = #{panelId} + + + + INSERT INTO `panel_view_linkage` ( menu_id, title, pid, sub_count, permission, hidden,i_frame ) VALUES + + (#{menu.menuId},#{menu.title},#{menu.pid},#{menu.subCount},#{menu.permission},#{menu.hidden},ifnull(#{menu.hidden},0)) + + diff --git a/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java b/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java index 2b99e08576..b74b33a97f 100644 --- a/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java +++ b/backend/src/main/java/io/dataease/controller/panel/PanelViewLinkageController.java @@ -2,6 +2,7 @@ package io.dataease.controller.panel; import com.github.xiaoymin.knife4j.annotations.ApiSupport; import io.dataease.controller.request.panel.PanelLinkageRequest; +import io.dataease.dto.PanelViewLinkageDTO; import io.dataease.service.panel.PanelViewLinkageService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -30,4 +31,13 @@ public class PanelViewLinkageController { return panelViewLinkageService.getViewLinkageGather(request); } + + @ApiOperation("获取仪表板视图联动信息") + @PostMapping("/saveLinkage") + public void saveLinkage(@RequestBody PanelLinkageRequest request){ + panelViewLinkageService.saveLinkage(request); + } + + + } diff --git a/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java b/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java index 2829eaf14d..e7c164fab0 100644 --- a/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java +++ b/backend/src/main/java/io/dataease/controller/request/panel/PanelLinkageRequest.java @@ -1,6 +1,9 @@ package io.dataease.controller.request.panel; +import io.dataease.dto.PanelViewLinkageDTO; + import java.util.List; +import java.util.Map; /** * Author: wangjiahao @@ -15,6 +18,16 @@ public class PanelLinkageRequest { private List targetViewIds; + private Map linkageInfo; + + public Map getLinkageInfo() { + return linkageInfo; + } + + public void setLinkageInfo(Map linkageInfo) { + this.linkageInfo = linkageInfo; + } + public String getPanelId() { return panelId; } diff --git a/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java b/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java index 83e8f4cb4a..c265d4aecd 100644 --- a/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java +++ b/backend/src/main/java/io/dataease/dto/PanelViewLinkageDTO.java @@ -2,6 +2,7 @@ package io.dataease.dto; import io.dataease.base.domain.DatasetTableField; import io.dataease.base.domain.PanelViewLinkage; +import io.dataease.base.domain.PanelViewLinkageField; import java.util.ArrayList; import java.util.List; @@ -19,7 +20,7 @@ public class PanelViewLinkageDTO extends PanelViewLinkage { //关联状态 private boolean linkageActive = false; - private List linkageFields = new ArrayList<>(); + private List linkageFields = new ArrayList<>(); private List targetViewFields = new ArrayList<>(); @@ -68,11 +69,11 @@ public class PanelViewLinkageDTO extends PanelViewLinkage { this.linkageActive = linkageActive; } - public List getLinkageFields() { + public List getLinkageFields() { return linkageFields; } - public void setLinkageFields(List linkageFields) { + public void setLinkageFields(List linkageFields) { this.linkageFields = linkageFields; } } diff --git a/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java b/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java index 031029a489..792ada85de 100644 --- a/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java +++ b/backend/src/main/java/io/dataease/service/panel/PanelViewLinkageService.java @@ -1,11 +1,19 @@ package io.dataease.service.panel; +import io.dataease.base.domain.PanelViewLinkage; +import io.dataease.base.domain.PanelViewLinkageExample; +import io.dataease.base.domain.PanelViewLinkageField; +import io.dataease.base.mapper.PanelViewLinkageFieldMapper; import io.dataease.base.mapper.PanelViewLinkageMapper; import io.dataease.base.mapper.ext.ExtPanelViewLinkageMapper; +import io.dataease.commons.utils.AuthUtils; import io.dataease.controller.request.panel.PanelLinkageRequest; import io.dataease.dto.PanelViewLinkageDTO; +import io.dataease.dto.PanelViewLinkageFieldDTO; import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; import javax.annotation.Resource; import java.util.*; @@ -22,6 +30,9 @@ public class PanelViewLinkageService { @Resource private PanelViewLinkageMapper panelViewLinkageMapper; + @Resource + private PanelViewLinkageFieldMapper panelViewLinkageFieldMapper; + @Resource private ExtPanelViewLinkageMapper extPanelViewLinkageMapper; @@ -29,9 +40,6 @@ public class PanelViewLinkageService { public Map getViewLinkageGather(PanelLinkageRequest request) { if(CollectionUtils.isNotEmpty(request.getTargetViewIds())){ List linkageDTOList = extPanelViewLinkageMapper.getViewLinkageGather(request.getPanelId(),request.getSourceViewId(),request.getTargetViewIds()); - linkageDTOList.stream().forEach(linkage ->{ - linkage.setTargetViewFields(extPanelViewLinkageMapper.queryTableField(linkage.getTableId())); - }); Map result = linkageDTOList.stream() .collect(Collectors.toMap(PanelViewLinkageDTO::getTargetViewId,PanelViewLinkageDTO->PanelViewLinkageDTO)); return result; @@ -39,5 +47,61 @@ public class PanelViewLinkageService { return new HashMap<>(); } + @Transactional + public void saveLinkage(PanelLinkageRequest request){ + Long updateTime = System.currentTimeMillis(); + Map linkageInfo = request.getLinkageInfo(); + String sourceViewId = request.getSourceViewId(); + String panelId = request.getPanelId(); + + Assert.notNull(sourceViewId,"source View ID can not be null"); + Assert.notNull(panelId,"panelId can not be null"); + + //去掉source view 的信息 + linkageInfo.remove(sourceViewId); + + // 清理原有关系 + extPanelViewLinkageMapper.deleteViewLinkageField(panelId,sourceViewId); + extPanelViewLinkageMapper.deleteViewLinkage(panelId,sourceViewId); + + //重新建立关系 + for(Map.Entry entry : linkageInfo.entrySet()){ + String targetViewId = entry.getKey(); + PanelViewLinkageDTO linkageDTO = entry.getValue(); + List linkageFields = linkageDTO.getLinkageFields(); + + if(CollectionUtils.isNotEmpty(linkageFields)&&linkageDTO.isLinkageActive()){ + String linkageId = UUID.randomUUID().toString(); + PanelViewLinkage linkage = new PanelViewLinkage(); + linkage.setId(linkageId); + linkage.setPanelId(panelId); + linkage.setSourceViewId(sourceViewId); + linkage.setTargetViewId(targetViewId); + linkage.setUpdatePeople(AuthUtils.getUser().getUsername()); + linkage.setUpdateTime(updateTime); + panelViewLinkageMapper.insert(linkage); + + linkageFields.stream().forEach(linkageField->{ + linkageField.setId(UUID.randomUUID().toString()); + linkageField.setLinkageId(linkageId); + linkageField.setUpdateTime(updateTime); + panelViewLinkageFieldMapper.insert(linkageField); + }); + + } + + + + + } + + + + + + + + + } } diff --git a/backend/src/main/resources/db/migration/V20__linkage_table.sql b/backend/src/main/resources/db/migration/V20__linkage_table.sql new file mode 100644 index 0000000000..31fafdf176 --- /dev/null +++ b/backend/src/main/resources/db/migration/V20__linkage_table.sql @@ -0,0 +1,33 @@ +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for panel_view_linkage +-- ---------------------------- +DROP TABLE IF EXISTS `panel_view_linkage`; +CREATE TABLE `panel_view_linkage` ( + `id` varchar(50) NOT NULL, + `panel_id` varchar(50) DEFAULT NULL, + `source_view_id` varchar(50) DEFAULT NULL COMMENT '源视图id', + `target_view_id` varchar(50) DEFAULT NULL COMMENT '联动视图id', + `update_time` bigint(13) DEFAULT NULL COMMENT '更新时间', + `update_people` varchar(255) DEFAULT NULL COMMENT '更新人', + `ext1` varchar(2000) DEFAULT NULL, + `ext2` varchar(2000) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for panel_view_linkage_field +-- ---------------------------- +DROP TABLE IF EXISTS `panel_view_linkage_field`; +CREATE TABLE `panel_view_linkage_field` ( + `id` varchar(50) NOT NULL, + `linkage_id` varchar(50) DEFAULT NULL COMMENT '联动ID', + `source_field` varchar(255) DEFAULT NULL COMMENT '源视图字段', + `target_field` varchar(255) DEFAULT NULL COMMENT '目标视图字段', + `update_time` bigint(13) DEFAULT NULL COMMENT '更新时间', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/frontend/src/api/panel/linkage.js b/frontend/src/api/panel/linkage.js index 9bbbc0fde9..4a0f0ecc4a 100644 --- a/frontend/src/api/panel/linkage.js +++ b/frontend/src/api/panel/linkage.js @@ -9,3 +9,12 @@ export function getViewLinkageGather(requestInfo) { }) } +export function saveLinkage(requestInfo) { + return request({ + url: '/linkage/saveLinkage', + method: 'post', + data: requestInfo, + loading: true + }) +} + diff --git a/frontend/src/components/canvas/components/Editor/LinkageField.vue b/frontend/src/components/canvas/components/Editor/LinkageField.vue index 08333d082f..d4f50e9421 100644 --- a/frontend/src/components/canvas/components/Editor/LinkageField.vue +++ b/frontend/src/components/canvas/components/Editor/LinkageField.vue @@ -1,22 +1,68 @@