fix(仪表板、数据大屏): 修复部分外部参数联动未生效问题 (#17299)

This commit is contained in:
王嘉豪
2025-10-29 15:49:57 +08:00
committed by GitHub
parent dc5e180e84
commit 16ac040c57
2 changed files with 58 additions and 14 deletions

View File

@@ -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.VisualizationOuterParamsInfoVO;
import io.dataease.api.visualization.vo.VisualizationOuterParamsTargetViewInfoVO;
import io.dataease.auth.DeLinkPermit;
import io.dataease.constant.CommonConstants;
@@ -213,25 +214,66 @@ public class VisualizationOuterParamsService implements VisualizationOuterParams
@DeLinkPermit
@Override
public VisualizationOuterParamsBaseResponse getOuterParamsInfo(Long visualizationId) {
QVisualizationOuterParams qVisualizationOuterParams = QVisualizationOuterParams.visualizationOuterParams;
QVisualizationOuterParamsInfo qVisualizationOuterParamsInfo = QVisualizationOuterParamsInfo.visualizationOuterParamsInfo;
QVisualizationOuterParamsTargetViewInfo visualizationOuterParamsTargetViewInfo = QVisualizationOuterParamsTargetViewInfo.visualizationOuterParamsTargetViewInfo;
List<VisualizationOuterParamsInfoDTO> result = queryFactory.select(Projections.fields(VisualizationOuterParamsInfoDTO.class,
qVisualizationOuterParamsInfo.paramName.as("paramName"),
qVisualizationOuterParamsInfo.required,
qVisualizationOuterParamsInfo.defaultValue,
qVisualizationOuterParamsInfo.enabledDefault,
visualizationOuterParamsTargetViewInfo.targetViewId.stringValue().concat("#").concat(visualizationOuterParamsTargetViewInfo.targetViewId.stringValue()).as("targetInfo"))).from(qVisualizationOuterParams)
.leftJoin(qVisualizationOuterParamsInfo).on(qVisualizationOuterParamsInfo.paramsId.eq(qVisualizationOuterParams.paramsId))
.leftJoin(visualizationOuterParamsTargetViewInfo).on(visualizationOuterParamsTargetViewInfo.paramsInfoId.eq(qVisualizationOuterParamsInfo.paramsInfoId))
.fetch();
List<VisualizationOuterParamsInfoDTO> result = getVisualizationOuterParamsInfo(visualizationId);
return new VisualizationOuterParamsBaseResponse(Optional.ofNullable(result).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(VisualizationOuterParamsInfoDTO::getSourceInfo, VisualizationOuterParamsInfoDTO::getTargetInfoList)),
Optional.ofNullable(result).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(VisualizationOuterParamsInfoDTO::getSourceInfo, paramsInfo -> paramsInfo))
);
}
public List<VisualizationOuterParamsInfoDTO> getVisualizationOuterParamsInfo(Long visualizationId) {
QVisualizationOuterParams pop = QVisualizationOuterParams.visualizationOuterParams;
QVisualizationOuterParamsInfo popi = QVisualizationOuterParamsInfo.visualizationOuterParamsInfo;
QVisualizationOuterParamsTargetViewInfo poptvi = QVisualizationOuterParamsTargetViewInfo.visualizationOuterParamsTargetViewInfo;
// 执行查询获取原始数据
List<VisualizationOuterParamsInfoDTO> queryResults = queryFactory
.select(Projections.bean(VisualizationOuterParamsInfoDTO.class,
popi.paramName.as("sourceInfo"),
// 处理 boolean 字段转换
popi.required,
popi.defaultValue,
popi.enabledDefault,
Expressions.stringTemplate("CONCAT({0}, '#', {1})",
poptvi.targetViewId, poptvi.targetFieldId).as("targetInfo")))
.from(pop)
.leftJoin(popi).on(pop.paramsId.eq(popi.paramsId))
.leftJoin(poptvi).on(popi.paramsInfoId.eq(poptvi.paramsInfoId))
.where(pop.visualizationId.eq(visualizationId)
.and(pop.checked.eq(true)) // 数据库中是 1/0但 QueryDSL 实体应该是 boolean
.and(popi.checked.eq(true)))
.distinct()
.fetch();
return groupQueryResults(queryResults);
}
private List<VisualizationOuterParamsInfoDTO> groupQueryResults(List<VisualizationOuterParamsInfoDTO> queryResults) {
Map<String, VisualizationOuterParamsInfoDTO> resultMap = new LinkedHashMap<>();
for (VisualizationOuterParamsInfoDTO result : queryResults) {
String key = result.getSourceInfo() + "_" + result.getRequired() + "_" +
result.getDefaultValue() + "_" + result.getEnabledDefault();
VisualizationOuterParamsInfoDTO dto = resultMap.get(key);
if (dto == null) {
dto = new VisualizationOuterParamsInfoDTO();
dto.setSourceInfo(result.getSourceInfo());
dto.setRequired(result.getRequired());
dto.setDefaultValue(result.getDefaultValue());
dto.setEnabledDefault(result.getEnabledDefault());
dto.setTargetInfoList(new ArrayList<>());
resultMap.put(key, dto);
}
if (result.getTargetInfo() != null) {
dto.getTargetInfoList().add(result.getTargetInfo());
}
}
return new ArrayList<>(resultMap.values());
}
private List<CoreDatasetTableFieldVO> getDsFieldInfo(Long datasetGroupId) {
QCoreDatasetTableField qField = QCoreDatasetTableField.coreDatasetTableField;
return queryFactory.select(Projections.fields(CoreDatasetTableFieldVO.class,

View File

@@ -19,6 +19,8 @@ public class VisualizationOuterParamsInfoDTO extends VisualizationOuterParamsInf
//仪表板外部参数信息 dvId#paramName
private String sourceInfo;
private String targetInfo;
//目标联动参数 targetViewId#targetFieldId
private List<String> targetInfoList;