From dc5e180e846006f8fd0ae81fa8d7993e8ee76933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=98=89=E8=B1=AA?= <42510293+ziyujiahao@users.noreply.github.com> Date: Wed, 29 Oct 2025 14:49:55 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=BB=AA=E8=A1=A8=E6=9D=BF=E3=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=A4=96=E9=83=A8=E5=8F=82=E6=95=B0=E8=AE=BE=E7=BD=AE=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#17295)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...isualizationOuterParamsTargetViewInfo.java | 5 +- ...isualizationOuterParamsTargetViewInfo.java | 6 +- .../VisualizationOuterParamsService.java | 76 +++++++++++++++++-- .../visualization/OuterParamsSet.vue | 46 +---------- 4 files changed, 79 insertions(+), 54 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java index ae8780c373..d276071d97 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/SnapshotVisualizationOuterParamsTargetViewInfo.java @@ -41,9 +41,8 @@ public class SnapshotVisualizationOuterParamsTargetViewInfo { @Column(name = "copy_id", length = 50) private String copyId; - @Size(max = 50) @Comment("联动数据集id/联动过滤组件id") - @Column(name = "target_ds_id", length = 50) - private String targetDsId; + @Column(name = "target_ds_id") + private Long targetDsId; } diff --git a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java index e8421b55c9..75483e977c 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/dao/auto/entity/VisualizationOuterParamsTargetViewInfo.java @@ -16,7 +16,6 @@ import org.hibernate.annotations.Comment; @Table(name = "visualization_outer_params_target_view_info") public class VisualizationOuterParamsTargetViewInfo { @Id - @Size(max = 50) @Comment("主键") @Column(name = "target_id", nullable = false) private Long targetId; @@ -43,9 +42,8 @@ public class VisualizationOuterParamsTargetViewInfo { @Column(name = "copy_id", length = 50) private String copyId; - @Size(max = 50) @Comment("联动数据集id/联动过滤组件id") - @Column(name = "target_ds_id", length = 50) - private String targetDsId; + @Column(name = "target_ds_id") + private Long targetDsId; } diff --git a/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java b/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java index 63dd2168e7..c63e5f3015 100644 --- a/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java +++ b/core/core-backend/src/main/java/io/dataease/visualization/server/VisualizationOuterParamsService.java @@ -11,6 +11,7 @@ import io.dataease.api.visualization.VisualizationOuterParamsApi; import io.dataease.api.visualization.dto.VisualizationOuterParamsDTO; import io.dataease.api.visualization.dto.VisualizationOuterParamsInfoDTO; import io.dataease.api.visualization.response.VisualizationOuterParamsBaseResponse; +import io.dataease.api.visualization.vo.VisualizationOuterParamsTargetViewInfoVO; import io.dataease.auth.DeLinkPermit; import io.dataease.constant.CommonConstants; import io.dataease.dao.auto.entity.CoreDatasetTable; @@ -57,6 +58,10 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams private DataVisualizationServer dataVisualizationServer; + private static final QSnapshotVisualizationOuterParams qOuterParams = QSnapshotVisualizationOuterParams.snapshotVisualizationOuterParams; + private static final QSnapshotVisualizationOuterParamsInfo qOuterParamsInfo = QSnapshotVisualizationOuterParamsInfo.snapshotVisualizationOuterParamsInfo; + private static final QSnapshotVisualizationOuterParamsTargetViewInfo qTargetViewInfo = QSnapshotVisualizationOuterParamsTargetViewInfo.snapshotVisualizationOuterParamsTargetViewInfo; + @Override public VisualizationOuterParamsDTO queryWithVisualizationId(Long visualizationId) { QSnapshotDataVisualizationInfo qSnapshotDataVisualizationInfo = QSnapshotDataVisualizationInfo.snapshotDataVisualizationInfo; @@ -70,9 +75,70 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams if (visualizationOuterParamsDTO != null && visualizationOuterParamsDTO.getChecked() == null) { visualizationOuterParamsDTO.setChecked(false); } + visualizationOuterParamsDTO.setOuterParamsInfoArray(getOuterParamsInfoSnapshot(visualizationId)); return visualizationOuterParamsDTO; } + private VisualizationOuterParamsTargetViewInfoVO convertToVO(SnapshotVisualizationOuterParamsTargetViewInfo entity) { + if (entity == null) { + return null; + } + + VisualizationOuterParamsTargetViewInfoVO vo = new VisualizationOuterParamsTargetViewInfoVO(); + BeanUtils.copyBean(vo, entity); + return vo; + } + + + public List getOuterParamsInfoSnapshot(Long visualizationId) { + // 第一步:查询主表数据 + List paramsInfoList = queryFactory + .select(Projections.bean(SnapshotVisualizationOuterParamsInfo.class, + qOuterParamsInfo.paramsInfoId, + qOuterParamsInfo.paramName, + qOuterParamsInfo.enabledDefault, + qOuterParamsInfo.required, + qOuterParamsInfo.defaultValue, + Expressions.booleanTemplate("ifnull({0}, 0)", qOuterParamsInfo.checked).as("checked"))) + .from(qOuterParams) + .leftJoin(qOuterParamsInfo).on(qOuterParams.paramsId.eq(qOuterParamsInfo.paramsId)) + .where(qOuterParams.visualizationId.eq(visualizationId)) + .orderBy(Expressions.numberTemplate(Integer.class, "ifnull({0}, 0)", qOuterParamsInfo.checked).desc()) + .fetch(); + + if (paramsInfoList.isEmpty()) { + return Collections.emptyList(); + } + + // 第二步:查询关联的目标视图信息 + List paramsInfoIds = paramsInfoList.stream() + .map(SnapshotVisualizationOuterParamsInfo::getParamsInfoId) + .collect(Collectors.toList()); + + List targetViewInfoList = queryFactory + .select(Projections.bean(SnapshotVisualizationOuterParamsTargetViewInfo.class, + qTargetViewInfo.targetViewId, + qTargetViewInfo.targetDsId, + qTargetViewInfo.targetFieldId, + qTargetViewInfo.paramsInfoId)) + .from(qTargetViewInfo) + .where(qTargetViewInfo.paramsInfoId.in(paramsInfoIds)) + .fetch(); + + Map> targetViewInfoMap = targetViewInfoList.stream() + .collect(Collectors.groupingBy( + SnapshotVisualizationOuterParamsTargetViewInfo::getParamsInfoId, + Collectors.mapping(this::convertToVO, Collectors.toList()) + )); + + return paramsInfoList.stream().map(info -> { + VisualizationOuterParamsInfoDTO dto = new VisualizationOuterParamsInfoDTO(); + BeanUtils.copyBean(dto, info); + dto.setTargetViewInfoList(targetViewInfoMap.getOrDefault(info.getParamsInfoId(), Collections.emptyList())); + return dto; + }).collect(Collectors.toList()); + } + @Override public void updateOuterParamsSet(VisualizationOuterParamsDTO outerParamsDTO) { Long visualizationId = outerParamsDTO.getVisualizationId(); @@ -94,7 +160,7 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams QSnapshotVisualizationOuterParamsInfo snapshotVisualizationOuterParamsInfo = QSnapshotVisualizationOuterParamsInfo.snapshotVisualizationOuterParamsInfo; QSnapshotVisualizationOuterParams snapshotVisualizationOuterParams = QSnapshotVisualizationOuterParams.snapshotVisualizationOuterParams; QSnapshotVisualizationOuterParamsTargetViewInfo snapshotVisualizationOuterParamsTargetViewInfo = QSnapshotVisualizationOuterParamsTargetViewInfo.snapshotVisualizationOuterParamsTargetViewInfo; - List paramsInfoIds = queryFactory.select(snapshotVisualizationOuterParamsTargetViewInfo.targetId).from(snapshotVisualizationOuterParamsTargetViewInfo) + List paramsInfoIds = queryFactory.select(snapshotVisualizationOuterParamsTargetViewInfo.paramsInfoId).from(snapshotVisualizationOuterParamsTargetViewInfo) .innerJoin(snapshotVisualizationOuterParamsInfo).on(snapshotVisualizationOuterParamsTargetViewInfo.paramsInfoId.eq(snapshotVisualizationOuterParamsInfo.paramsInfoId)) .innerJoin(snapshotVisualizationOuterParams).on(snapshotVisualizationOuterParamsInfo.paramsId.eq(snapshotVisualizationOuterParams.paramsId)) .where(snapshotVisualizationOuterParams.visualizationId.eq(visualizationId)).fetch(); @@ -218,9 +284,9 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams .and(ccv.type.ne("VQuery")) .and(dvi.id.eq(visualizationId)) .and(Expressions.booleanTemplate( - "{0} like concat('%', {1}, '%')", - dvi.componentData, - ccv.id))) + "{0} like concat('%', {1}, '%')", + dvi.componentData, + ccv.id))) .distinct() .fetch(); } @@ -256,7 +322,7 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams qSnapshotCoreChartView.id )).fetch(); if (!CollectionUtils.isEmpty(result)) { - result.stream().forEach(item ->{ + result.stream().forEach(item -> { item.setDatasetViews(getViewInfo(item.getId(), visualizationId)); item.setDatasetFields(getDsFieldInfo(item.getId())); }); diff --git a/core/core-frontend/src/components/visualization/OuterParamsSet.vue b/core/core-frontend/src/components/visualization/OuterParamsSet.vue index 4801d7f766..2d39d84343 100644 --- a/core/core-frontend/src/components/visualization/OuterParamsSet.vue +++ b/core/core-frontend/src/components/visualization/OuterParamsSet.vue @@ -334,7 +334,7 @@ import edit from '@/assets/svg/icon_rename_outlined.svg' import icon_more_vertical_outlined from '@/assets/svg/icon_more-vertical_outlined.svg' import filterParams from '@/assets/svg/filter-params.svg' import icon_dataset from '@/assets/svg/icon_dataset.svg' -import { ref, reactive, computed, nextTick } from 'vue' +import { ref, reactive, nextTick } from 'vue' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { storeToRefs } from 'pinia' import { ElCol, ElIcon, ElInput, ElMessage } from 'element-plus-secondary' @@ -472,10 +472,6 @@ const validateArgs = (val, id) => { } } -const viewSelectedField = computed(() => - state.outerParamsInfo?.targetViewInfoList?.map(targetViewInfo => targetViewInfo.targetViewId) -) - const closeEdit = params => { if (!params.paramName || params.paramName.length < 2 || params.paramName.length > 25) { ElMessage({ @@ -499,18 +495,6 @@ const outerParamsOperation = (cmd, node, data) => { } } -const fieldIdDisabledCheck = targetViewInfo => { - return ( - state.viewIdFieldArrayMap[targetViewInfo.targetViewId] && - state.viewIdFieldArrayMap[targetViewInfo.targetViewId].length === 1 && - state.viewIdFieldArrayMap[targetViewInfo.targetViewId][0].id === 'empty' - ) -} - -const getFieldArray = id => { - return state.viewIdFieldArrayMap[id] -} - const initParams = async () => { state.baseFilterInfo = [] state.baseDatasetInfo = [] @@ -519,13 +503,13 @@ const initParams = async () => { if (componentItem.component === 'VQuery') { state.baseFilterInfo.push(componentItem) } else if (componentItem.component === 'Group') { - componentItem.propValue?.forEach(groupItem => { + componentItem.propValue.forEach(groupItem => { if (groupItem.component === 'VQuery') { state.baseFilterInfo.push(groupItem) } }) } else if (componentItem.component === 'DeTabs') { - componentItem.propValue?.forEach(tabItem => { + componentItem.propValue.forEach(tabItem => { tabItem.componentData?.forEach(tabComponent => { if (tabComponent.component === 'VQuery') { state.baseFilterInfo.push(tabComponent) @@ -722,7 +706,7 @@ const getPanelViewList = dvId => { // 增加过滤组件匹配 componentData.value.forEach(componentItem => { if (componentItem.component === 'VQuery') { - componentItem.propValue?.forEach(filterItem => { + componentItem.propValue.forEach(filterItem => { state.currentLinkPanelViewArray.push({ id: filterItem.id, type: 'filter', @@ -738,28 +722,6 @@ const getPanelViewList = dvId => { }) } -const addOuterParamsField = () => { - state.outerParamsInfo.targetViewInfoList.push({ - targetViewId: '', - targetFieldId: '' - }) -} -const deleteOuterParamsField = index => { - state.outerParamsInfo.targetViewInfoList.splice(index, 1) -} - -const viewInfoOnChange = targetViewInfo => { - if ( - state.viewIdFieldArrayMap[targetViewInfo.targetViewId] && - state.viewIdFieldArrayMap[targetViewInfo.targetViewId].length === 1 && - state.viewIdFieldArrayMap[targetViewInfo.targetViewId][0].id === 'empty' - ) { - targetViewInfo.targetFieldId = 'empty' - } else { - targetViewInfo.targetFieldId = null - } -} - const initSelected = data => { nextTick(() => { outerParamsInfoTree.value.setCurrentKey(data.paramsInfoId)