mirror of
https://github.com/dataease/dataease.git
synced 2026-06-16 11:21:44 +08:00
refactor: 优化跳转相关问题 (#17010)
This commit is contained in:
@@ -348,6 +348,90 @@ public class VisualizationLinkJumpManage {
|
||||
return query.fetch();
|
||||
}
|
||||
|
||||
private List<VisualizationLinkJumpInfoExtendDTO> queryBaseLinkJumpInfo(Long id, Long sourceViewId, Long uid, boolean isDesktop) {
|
||||
QCoreChartView ccv = QCoreChartView.coreChartView;
|
||||
QCoreDatasetTableField cdtf = QCoreDatasetTableField.coreDatasetTableField;
|
||||
QVisualizationLinkJump vlj = QVisualizationLinkJump.visualizationLinkJump;
|
||||
QVisualizationLinkJumpInfo vlji = QVisualizationLinkJumpInfo.visualizationLinkJumpInfo;
|
||||
QDataVisualizationInfo dvi = QDataVisualizationInfo.dataVisualizationInfo;
|
||||
QVisualizationLinkJumpTargetViewInfo vljtvi = QVisualizationLinkJumpTargetViewInfo.visualizationLinkJumpTargetViewInfo;
|
||||
QXpackShare xpackShare = QXpackShare.xpackShare;
|
||||
QVisualizationOuterParamsInfo vopi = QVisualizationOuterParamsInfo.visualizationOuterParamsInfo;
|
||||
|
||||
// 构建查询,直接返回VisualizationLinkJumpInfoDTO
|
||||
JPAQuery<VisualizationLinkJumpInfoExtendDTO> query = queryFactory
|
||||
.select(Projections.bean(VisualizationLinkJumpInfoExtendDTO.class,
|
||||
cdtf.id.as("sourceFieldId"),
|
||||
cdtf.deType.as("sourceDeType"),
|
||||
cdtf.name.as("sourceFieldName"),
|
||||
vlji.id,
|
||||
vlji.linkJumpId,
|
||||
vlji.linkType,
|
||||
vlji.jumpType,
|
||||
vlji.windowSize,
|
||||
vlji.targetDvId,
|
||||
dvi.type.as("targetDvType"),
|
||||
vlji.content,
|
||||
Expressions.cases()
|
||||
.when(vlji.checked.isNull()).then(false)
|
||||
.otherwise(vlji.checked).as("checked"),
|
||||
Expressions.cases()
|
||||
.when(vlji.attachParams.isNull()).then(false)
|
||||
.otherwise(vlji.attachParams).as("attachParams"),
|
||||
vljtvi.targetId,
|
||||
vljtvi.targetViewId,
|
||||
vljtvi.targetFieldId,
|
||||
vljtvi.targetType,
|
||||
vljtvi.sourceFieldActiveId,
|
||||
vopi.paramName.as("outerParamsName")
|
||||
))
|
||||
.from(ccv)
|
||||
.leftJoin(cdtf).on(ccv.tableId.eq(cdtf.datasetGroupId))
|
||||
.leftJoin(vlj).on(ccv.id.eq(vlj.sourceViewId).and(vlj.id.eq(id)))
|
||||
.leftJoin(vlji).on(vlj.id.eq(vlji.linkJumpId).and(cdtf.id.eq(vlji.sourceFieldId)))
|
||||
.leftJoin(dvi).on(vlji.targetDvId.eq(dvi.id))
|
||||
.leftJoin(vljtvi).on(vlji.id.eq(vljtvi.linkJumpInfoId))
|
||||
.leftJoin(vopi).on(vopi.paramsInfoId.eq(vljtvi.targetViewId));
|
||||
|
||||
// 动态添加 xpack_share 连接和字段(非桌面版)
|
||||
if (!isDesktop) {
|
||||
query.leftJoin(xpackShare).on(
|
||||
xpackShare.creator.eq(uid)
|
||||
.and(vlji.targetDvId.eq(xpackShare.resourceId))
|
||||
);
|
||||
// 重新构建select包含publicJumpId
|
||||
query.select(Projections.bean(VisualizationLinkJumpInfoExtendDTO.class,
|
||||
cdtf.id.as("sourceFieldId"),
|
||||
cdtf.deType.as("sourceDeType"),
|
||||
cdtf.name.as("sourceFieldName"),
|
||||
vlji.id,
|
||||
vlji.linkJumpId,
|
||||
vlji.linkType,
|
||||
vlji.jumpType,
|
||||
vlji.windowSize,
|
||||
vlji.targetDvId,
|
||||
dvi.type.as("targetDvType"),
|
||||
vlji.content,
|
||||
Expressions.cases()
|
||||
.when(vlji.checked.isNull()).then(false)
|
||||
.otherwise(vlji.checked).as("checked"),
|
||||
Expressions.cases()
|
||||
.when(vlji.attachParams.isNull()).then(false)
|
||||
.otherwise(vlji.attachParams).as("attachParams"),
|
||||
vljtvi.targetId,
|
||||
vljtvi.targetViewId,
|
||||
vljtvi.targetFieldId,
|
||||
vljtvi.targetType,
|
||||
vljtvi.sourceFieldActiveId,
|
||||
vopi.paramName.as("outerParamsName"),
|
||||
xpackShare.uuid.as("publicJumpId")
|
||||
));
|
||||
}
|
||||
query.where(ccv.id.eq(sourceViewId).and(ccv.type.ne("VQuery")));
|
||||
query.orderBy(cdtf.name.asc());
|
||||
return query.fetch();
|
||||
}
|
||||
|
||||
private List<VisualizationLinkJumpInfoDTO> aggregateTargetViewInfo(List<VisualizationLinkJumpInfoExtendDTO> baseResults) {
|
||||
// 使用分组键:targetDvType + sourceFieldId + sourceDeType + sourceFieldName + publicJumpId
|
||||
Map<String, VisualizationLinkJumpInfoDTO> groupMap = new LinkedHashMap<>();
|
||||
@@ -406,24 +490,23 @@ public class VisualizationLinkJumpManage {
|
||||
}
|
||||
|
||||
private List<VisualizationLinkJumpDTO> buildLinkJumpQuery(Long dvId, Long uid, Boolean isDesktop, boolean isSnapshot) {
|
||||
|
||||
if (isSnapshot) {
|
||||
QSnapshotCoreChartView qChartView = QSnapshotCoreChartView.snapshotCoreChartView;
|
||||
QSnapshotVisualizationLinkJump qJump = QSnapshotVisualizationLinkJump.snapshotVisualizationLinkJump;
|
||||
QSnapshotCoreChartView ccv = QSnapshotCoreChartView.snapshotCoreChartView;
|
||||
QSnapshotVisualizationLinkJump vlj = QSnapshotVisualizationLinkJump.snapshotVisualizationLinkJump;
|
||||
List<VisualizationLinkJumpDTO> result = queryFactory
|
||||
.select(Projections.bean(VisualizationLinkJumpDTO.class,
|
||||
qChartView.id.as("sourceViewId"),
|
||||
qJump.id,
|
||||
ccv.id.as("sourceViewId"),
|
||||
vlj.id,
|
||||
Expressions.asNumber(dvId).as("sourceDvId"),
|
||||
qJump.linkJumpInfo,
|
||||
vlj.linkJumpInfo,
|
||||
Expressions.cases()
|
||||
.when(qJump.checked.isNull()).then(false)
|
||||
.otherwise(qJump.checked).as("checked")
|
||||
.when(ccv.jumpActive.isNull()).then(false)
|
||||
.otherwise(ccv.jumpActive).as("checked")
|
||||
))
|
||||
.from(qChartView)
|
||||
.leftJoin(qJump).on(qChartView.id.eq(qJump.sourceViewId))
|
||||
.where(qJump.sourceDvId.eq(dvId))
|
||||
.where(qChartView.jumpActive.eq(true)).fetch();
|
||||
.from(ccv)
|
||||
.leftJoin(vlj).on(ccv.id.eq(vlj.sourceViewId))
|
||||
.where(vlj.sourceDvId.eq(dvId))
|
||||
.where(ccv.jumpActive.eq(true)).fetch();
|
||||
if (CollectionUtils.isNotEmpty(result)) {
|
||||
result.stream().forEach(item -> {
|
||||
item.setLinkJumpInfoArray(getLinkJumpInfoSnapshot(item.getId() == null ? -1 : item.getId(), item.getSourceViewId(), uid, isDesktop));
|
||||
@@ -431,32 +514,33 @@ public class VisualizationLinkJumpManage {
|
||||
}
|
||||
return result;
|
||||
} else {
|
||||
QCoreChartView qChartView = QCoreChartView.coreChartView;
|
||||
QVisualizationLinkJump qJump = QVisualizationLinkJump.visualizationLinkJump;
|
||||
|
||||
return queryFactory
|
||||
QCoreChartView ccv = QCoreChartView.coreChartView;
|
||||
QVisualizationLinkJump vlj = QVisualizationLinkJump.visualizationLinkJump;
|
||||
List<VisualizationLinkJumpDTO> result = queryFactory
|
||||
.select(Projections.bean(VisualizationLinkJumpDTO.class,
|
||||
qChartView.id.as("sourceViewId"),
|
||||
qJump.id,
|
||||
ccv.id.as("sourceViewId"),
|
||||
vlj.id,
|
||||
Expressions.asNumber(dvId).as("sourceDvId"),
|
||||
qJump.linkJumpInfo,
|
||||
vlj.linkJumpInfo,
|
||||
Expressions.cases()
|
||||
.when(qJump.checked.isNull()).then(false)
|
||||
.otherwise(qJump.checked).as("checked")
|
||||
.when(ccv.jumpActive.isNull()).then(false)
|
||||
.otherwise(ccv.jumpActive).as("checked")
|
||||
))
|
||||
.from(qChartView)
|
||||
.leftJoin(qJump).on(qChartView.id.eq(qJump.sourceViewId))
|
||||
.where(qJump.sourceDvId.eq(dvId))
|
||||
.where(qChartView.jumpActive.eq(true)).fetch();
|
||||
.from(ccv)
|
||||
.leftJoin(vlj).on(ccv.id.eq(vlj.sourceViewId))
|
||||
.where(vlj.sourceDvId.eq(dvId))
|
||||
.where(ccv.jumpActive.eq(true)).fetch();
|
||||
if (CollectionUtils.isNotEmpty(result)) {
|
||||
result.stream().forEach(item -> {
|
||||
item.setLinkJumpInfoArray(getLinkJumpInfo(item.getId() == null ? -1 : item.getId(), item.getSourceViewId(), uid, isDesktop));
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public List<VisualizationLinkJumpInfoDTO> getLinkJumpInfo(String jumpId, Long sourceViewId, Long uid, Boolean isDesktop) {
|
||||
return buildLinkJumpInfoQuery(jumpId, sourceViewId, uid, isDesktop, false).fetch();
|
||||
}
|
||||
|
||||
public List<VisualizationLinkJumpInfoDTO> getLinkJumpInfoSnapshot(Long id, Long sourceViewId, Long uid, boolean isDesktop) {
|
||||
// 查询所有基础数据
|
||||
List<VisualizationLinkJumpInfoExtendDTO> baseResults = queryBaseLinkJumpInfoSnapshot(id, sourceViewId, uid, isDesktop);
|
||||
@@ -464,10 +548,11 @@ public class VisualizationLinkJumpManage {
|
||||
return aggregateTargetViewInfo(baseResults);
|
||||
}
|
||||
|
||||
private JPAQuery<VisualizationLinkJumpInfoDTO> buildLinkJumpInfoQuery(String jumpId, Long sourceViewId, Long uid, Boolean isDesktop, boolean isSnapshot) {
|
||||
|
||||
|
||||
return null;
|
||||
public List<VisualizationLinkJumpInfoDTO> getLinkJumpInfo(Long id, Long sourceViewId, Long uid, boolean isDesktop) {
|
||||
// 查询所有基础数据
|
||||
List<VisualizationLinkJumpInfoExtendDTO> baseResults = queryBaseLinkJumpInfo(id, sourceViewId, uid, isDesktop);
|
||||
// 按照指定字段分组并聚合targetViewInfoList
|
||||
return aggregateTargetViewInfo(baseResults);
|
||||
}
|
||||
|
||||
public void deleteJumpTargetViewInfoSnapshot(Long dvId, Long viewId) {
|
||||
|
||||
@@ -150,54 +150,74 @@ public class VisualizationLinkJumpService implements VisualizationLinkJumpApi {
|
||||
public VisualizationLinkJumpBaseResponse queryTargetVisualizationJumpInfo(VisualizationLinkJumpBaseRequest request) {
|
||||
List<VisualizationLinkJumpDTO> result = null;
|
||||
if (CommonConstants.RESOURCE_TABLE.SNAPSHOT.equals(request.getResourceTable())) {
|
||||
QSnapshotVisualizationLinkJumpTargetViewInfo visualizationLinkJumpTargetViewInfo = QSnapshotVisualizationLinkJumpTargetViewInfo.snapshotVisualizationLinkJumpTargetViewInfo;
|
||||
QSnapshotVisualizationLinkJumpInfo linkJumpInfo = QSnapshotVisualizationLinkJumpInfo.snapshotVisualizationLinkJumpInfo;
|
||||
QSnapshotVisualizationLinkJump visualizationLinkJump = QSnapshotVisualizationLinkJump.snapshotVisualizationLinkJump;
|
||||
QSnapshotVisualizationLinkJumpTargetViewInfo jtvi = QSnapshotVisualizationLinkJumpTargetViewInfo.snapshotVisualizationLinkJumpTargetViewInfo;
|
||||
QSnapshotVisualizationLinkJumpInfo lji = QSnapshotVisualizationLinkJumpInfo.snapshotVisualizationLinkJumpInfo;
|
||||
QSnapshotVisualizationLinkJump lj = QSnapshotVisualizationLinkJump.snapshotVisualizationLinkJump;
|
||||
|
||||
JPAQuery<VisualizationLinkJumpDTO> jpaQuery = queryFactory.select(
|
||||
Projections.fields(VisualizationLinkJumpDTO.class,
|
||||
visualizationLinkJump.sourceViewId.stringValue().concat("#").concat(visualizationLinkJumpTargetViewInfo.sourceFieldActiveId.stringValue()).as("sourceInfo"),
|
||||
visualizationLinkJumpTargetViewInfo.targetViewId.stringValue().concat("#").concat(visualizationLinkJumpTargetViewInfo.targetFieldId.stringValue()).as("targetInfo")
|
||||
lj.sourceViewId.stringValue().concat("#").concat(jtvi.sourceFieldActiveId.stringValue()).as("sourceInfo"),
|
||||
jtvi.targetViewId.stringValue().concat("#").concat(jtvi.targetFieldId.stringValue()).as("targetInfo")
|
||||
))
|
||||
.from(visualizationLinkJumpTargetViewInfo)
|
||||
.leftJoin(linkJumpInfo).on(visualizationLinkJumpTargetViewInfo.linkJumpInfoId.eq(linkJumpInfo.id))
|
||||
.leftJoin(visualizationLinkJump).on(linkJumpInfo.linkJumpId.eq(visualizationLinkJump.id))
|
||||
.where(linkJumpInfo.checked.eq(true))
|
||||
.where(visualizationLinkJump.sourceDvId.eq(request.getSourceDvId()))
|
||||
.where(visualizationLinkJump.sourceViewId.eq(request.getSourceViewId()))
|
||||
.where(linkJumpInfo.targetDvId.eq(request.getTargetDvId()));
|
||||
.from(jtvi)
|
||||
.leftJoin(lji).on(jtvi.linkJumpInfoId.eq(lji.id))
|
||||
.leftJoin(lj).on(lji.linkJumpId.eq(lj.id))
|
||||
.where(lji.checked.eq(true))
|
||||
.where(lj.sourceDvId.eq(request.getSourceDvId()))
|
||||
.where(lj.sourceViewId.eq(request.getSourceViewId()))
|
||||
.where(lji.targetDvId.eq(request.getTargetDvId()));
|
||||
|
||||
if (request.getSourceFieldId() != null) {
|
||||
jpaQuery.where(linkJumpInfo.sourceFieldId.eq(request.getSourceFieldId()));
|
||||
jpaQuery.where(lji.sourceFieldId.eq(request.getSourceFieldId()));
|
||||
}
|
||||
result = jpaQuery.fetch();
|
||||
|
||||
|
||||
} else {
|
||||
QVisualizationLinkJumpTargetViewInfo visualizationLinkJumpTargetViewInfo = QVisualizationLinkJumpTargetViewInfo.visualizationLinkJumpTargetViewInfo;
|
||||
QVisualizationLinkJumpInfo linkJumpInfo = QVisualizationLinkJumpInfo.visualizationLinkJumpInfo;
|
||||
QVisualizationLinkJump visualizationLinkJump = QVisualizationLinkJump.visualizationLinkJump;
|
||||
QVisualizationLinkJumpTargetViewInfo jtvi = QVisualizationLinkJumpTargetViewInfo.visualizationLinkJumpTargetViewInfo;
|
||||
QVisualizationLinkJumpInfo lji = QVisualizationLinkJumpInfo.visualizationLinkJumpInfo;
|
||||
QVisualizationLinkJump lj = QVisualizationLinkJump.visualizationLinkJump;
|
||||
|
||||
JPAQuery<VisualizationLinkJumpDTO> jpaQuery = queryFactory.select(
|
||||
Projections.fields(VisualizationLinkJumpDTO.class,
|
||||
visualizationLinkJump.sourceViewId.stringValue().concat("#").concat(visualizationLinkJumpTargetViewInfo.sourceFieldActiveId.stringValue()).as("sourceInfo"),
|
||||
visualizationLinkJumpTargetViewInfo.targetViewId.stringValue().concat("#").concat(visualizationLinkJumpTargetViewInfo.targetFieldId.stringValue()).as("targetInfo")
|
||||
lj.sourceViewId.stringValue().concat("#").concat(jtvi.sourceFieldActiveId.stringValue()).as("sourceInfo"),
|
||||
jtvi.targetViewId.stringValue().concat("#").concat(jtvi.targetFieldId.stringValue()).as("targetInfo")
|
||||
))
|
||||
.from(visualizationLinkJumpTargetViewInfo)
|
||||
.leftJoin(linkJumpInfo).on(visualizationLinkJumpTargetViewInfo.linkJumpInfoId.eq(linkJumpInfo.id))
|
||||
.leftJoin(visualizationLinkJump).on(linkJumpInfo.linkJumpId.eq(visualizationLinkJump.id))
|
||||
.where(linkJumpInfo.checked.eq(true))
|
||||
.where(visualizationLinkJump.sourceDvId.eq(request.getSourceDvId()))
|
||||
.where(visualizationLinkJump.sourceViewId.eq(request.getSourceViewId()))
|
||||
.where(linkJumpInfo.targetDvId.eq(request.getTargetDvId()));
|
||||
.from(jtvi)
|
||||
.leftJoin(lji).on(jtvi.linkJumpInfoId.eq(lji.id))
|
||||
.leftJoin(lj).on(lji.linkJumpId.eq(lj.id))
|
||||
.where(lji.checked.eq(true))
|
||||
.where(lj.sourceDvId.eq(request.getSourceDvId()))
|
||||
.where(lj.sourceViewId.eq(request.getSourceViewId()))
|
||||
.where(lji.targetDvId.eq(request.getTargetDvId()));
|
||||
|
||||
if (request.getSourceFieldId() != null) {
|
||||
jpaQuery.where(linkJumpInfo.sourceFieldId.eq(request.getSourceFieldId()));
|
||||
jpaQuery.where(lji.sourceFieldId.eq(request.getSourceFieldId()));
|
||||
}
|
||||
result = jpaQuery.fetch();
|
||||
|
||||
}
|
||||
return new VisualizationLinkJumpBaseResponse(null, Optional.ofNullable(result).orElse(new ArrayList<>()).stream().filter(item -> StringUtils.isNotEmpty(item.getSourceInfo())).collect(Collectors.toMap(VisualizationLinkJumpDTO::getSourceInfo, VisualizationLinkJumpDTO::getTargetInfoList)));
|
||||
// 按sourceInfo分组聚合targetInfo
|
||||
Map<String, List<String>> groupedResults = result.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
VisualizationLinkJumpDTO::getSourceInfo,
|
||||
Collectors.mapping(
|
||||
VisualizationLinkJumpDTO::getTargetInfo,
|
||||
Collectors.toList()
|
||||
)
|
||||
));
|
||||
|
||||
// 创建新的VisualizationLinkJumpDTO列表,每个包含sourceInfo和对应的targetInfo列表
|
||||
List<VisualizationLinkJumpDTO> aggregatedResult = groupedResults.entrySet().stream()
|
||||
.map(entry -> {
|
||||
VisualizationLinkJumpDTO dto = new VisualizationLinkJumpDTO();
|
||||
dto.setSourceInfo(entry.getKey());
|
||||
dto.setTargetInfoList(entry.getValue());
|
||||
return dto;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return new VisualizationLinkJumpBaseResponse(null, Optional.ofNullable(aggregatedResult).orElse(new ArrayList<>()).stream().filter(item -> StringUtils.isNotEmpty(item.getSourceInfo())).collect(Collectors.toMap(VisualizationLinkJumpDTO::getSourceInfo, VisualizationLinkJumpDTO::getTargetInfoList)));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,6 +17,8 @@ public class VisualizationLinkJumpDTO extends VisualizationLinkJumpVO {
|
||||
//仪表板可以跳转图表信息 sourceViewId#
|
||||
private String sourceInfo;
|
||||
|
||||
private String targetInfo;
|
||||
|
||||
private List<String> targetInfoList;
|
||||
|
||||
private List<VisualizationLinkJumpInfoDTO> linkJumpInfoArray = new ArrayList<>();
|
||||
|
||||
Reference in New Issue
Block a user