fix: 修复关联报错字段不存在

This commit is contained in:
junjun
2026-01-23 12:50:23 +08:00
committed by Junjun
parent 0fefb82a60
commit e95da88efa
2 changed files with 34 additions and 8 deletions

View File

@@ -215,15 +215,15 @@ public class DatasetDataManage {
DatasetUtils.dsDecode(datasetGroupInfoDTO);
}
Map<String, Object> sqlMap = datasetSQLManage.getUnionSQLForEdit(datasetGroupInfoDTO, null);
String sql = (String) sqlMap.get("sql");
// 获取allFields
List<DatasetTableFieldDTO> fields = datasetGroupInfoDTO.getAllFields();
if (ObjectUtils.isEmpty(fields)) {
DEException.throwException(Translator.get("i18n_no_fields"));
}
Map<String, Object> sqlMap = datasetSQLManage.getUnionSQLForEdit(datasetGroupInfoDTO, null);
String sql = (String) sqlMap.get("sql");
Map<String, ColumnPermissionItem> desensitizationList = new HashMap<>();
if (checkPermission) {
fields = permissionManage.filterColumnPermissions(fields, desensitizationList, datasetGroupInfoDTO.getId(), null);

View File

@@ -129,6 +129,8 @@ public class DatasetSQLManage {
public Map<String, Object> getUnionSQLForEdit(DatasetGroupInfoDTO dataTableInfoDTO, ChartExtRequest chartExtRequest, CoreDatasource coreDatasource, boolean isFromDataSet) throws Exception {
Map<Long, DatasourceSchemaDTO> dsMap = new LinkedHashMap<>();
// 获取所有字段将dataeaseName赋值给currentField中的dataeaseName
List<DatasetTableFieldDTO> allFields = dataTableInfoDTO.getAllFields();
List<UnionDTO> union = dataTableInfoDTO.getUnion();
// 所有选中的字段即select后的查询字段
Map<String, String[]> checkedInfo = new LinkedHashMap<>();
@@ -162,7 +164,19 @@ public class DatasetSQLManage {
String[] array = fields.stream()
.map(f -> {
String alias = TableUtils.fieldNameShort(table.getTableAlias() + "_" + f.getOriginName());
// 赋值dataeaseName
for (DatasetTableFieldDTO a_f: allFields) {
if (Objects.equals(a_f.getId(),f.getId())) {
f.setDataeaseName(a_f.getDataeaseName());
}
}
String alias;
if (StringUtils.isEmpty(f.getDataeaseName())) {
alias = TableUtils.fieldNameShort(f.getDatasetTableId() + "_" + f.getOriginName());
} else {
alias = f.getDataeaseName();
}
f.setFieldShortName(alias);
f.setDataeaseName(f.getFieldShortName());
@@ -191,7 +205,7 @@ public class DatasetSQLManage {
checkedFields.addAll(fields);
// 获取child的fields和union
if (!CollectionUtils.isEmpty(unionDTO.getChildrenDs())) {
getUnionForEdit(datasetTable, table, unionDTO.getChildrenDs(), checkedInfo, unionList, checkedFields, dsMap, chartExtRequest, isCross);
getUnionForEdit(datasetTable, table, unionDTO.getChildrenDs(), checkedInfo, unionList, checkedFields, dsMap, chartExtRequest, isCross, allFields);
}
}
// build sql
@@ -311,7 +325,7 @@ public class DatasetSQLManage {
List<UnionDTO> childrenDs, Map<String, String[]> checkedInfo,
List<UnionParamDTO> unionList, List<DatasetTableFieldDTO> checkedFields,
Map<Long, DatasourceSchemaDTO> dsMap, ChartExtRequest chartExtRequest,
boolean isCross) throws Exception {
boolean isCross, List<DatasetTableFieldDTO> allFields) throws Exception {
for (int i = 0; i < childrenDs.size(); i++) {
int index = unionList.size() + 1;
@@ -332,7 +346,19 @@ public class DatasetSQLManage {
String[] array = fields.stream()
.map(f -> {
String alias = TableUtils.fieldNameShort(table.getTableAlias() + "_" + f.getOriginName());
// 赋值dataeaseName
for (DatasetTableFieldDTO a_f: allFields) {
if (Objects.equals(a_f.getId(),f.getId())) {
f.setDataeaseName(a_f.getDataeaseName());
}
}
String alias;
if (StringUtils.isEmpty(f.getDataeaseName())) {
alias = TableUtils.fieldNameShort(f.getDatasetTableId() + "_" + f.getOriginName());
} else {
alias = f.getDataeaseName();
}
f.setFieldShortName(alias);
f.setDataeaseName(f.getFieldShortName());
@@ -363,7 +389,7 @@ public class DatasetSQLManage {
unionToParent.setCurrentSQLObj(table);
unionList.add(unionToParent);
if (!CollectionUtils.isEmpty(unionDTO.getChildrenDs())) {
getUnionForEdit(datasetTable, table, unionDTO.getChildrenDs(), checkedInfo, unionList, checkedFields, dsMap, chartExtRequest, isCross);
getUnionForEdit(datasetTable, table, unionDTO.getChildrenDs(), checkedInfo, unionList, checkedFields, dsMap, chartExtRequest, isCross, allFields);
}
}
}