feat(REQ-2300):字段展示处理解析处理

This commit is contained in:
李昆鹏 2024-07-26 15:42:21 +08:00
parent bf3e2c71e1
commit 7879529f12

View File

@ -9,16 +9,13 @@ import cn.axzo.karma.client.feign.tyr.response.ExamineDpColumnsResp;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists; import com.google.common.collect.Sets;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.Iterator; import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Objects;
/** /**
* @author likunpeng * @author likunpeng
@ -43,10 +40,10 @@ public class DataPermissionResponseExecutor {
public void processNode(DataPermissionContextHolder.DataPermissionContext context, JsonNode dataNode) { public void processNode(DataPermissionContextHolder.DataPermissionContext context, JsonNode dataNode) {
DataPermission dataPermission = context.getDataPermission(); DataPermission dataPermission = context.getDataPermission();
List<ExamineDpColumnsReq.OrgNodeIdAndPersonId> orgNodeIdAndPersonIds = Lists.newArrayList(); Set<Long> personIds = Sets.newHashSet();
recursiveGetOrgNodeIdAndPersonIds(dataPermission, dataNode, orgNodeIdAndPersonIds); recursiveGetPersonIds(dataPermission, dataNode, personIds);
if (CollectionUtils.isEmpty(orgNodeIdAndPersonIds)) { if (CollectionUtils.isEmpty(personIds)) {
log.warn("api result has no organizationalNodeId and personId, not examine data permission for result columns."); log.warn("api result has no personId, not examine data permission for result columns.");
return; return;
} }
ExamineDpColumnsReq request = ExamineDpColumnsReq.builder() ExamineDpColumnsReq request = ExamineDpColumnsReq.builder()
@ -54,7 +51,7 @@ public class DataPermissionResponseExecutor {
.ouId(context.getOuId()) .ouId(context.getOuId())
.personId(context.getPersonId()) .personId(context.getPersonId())
.workspaceId(context.getWorkspaceId()) .workspaceId(context.getWorkspaceId())
.resultOrgNodeIdAndPersonIds(orgNodeIdAndPersonIds) .resultPersonIds(personIds)
.build(); .build();
// 调用karma获取数据列的校验结果 // 调用karma获取数据列的校验结果
ExamineDpColumnsResp examineDpColumnsResp = RpcInternalUtil.rpcProcessor(() -> dataObjectApi.examineDpColumns(request), "data permission processNode", request).getData(); ExamineDpColumnsResp examineDpColumnsResp = RpcInternalUtil.rpcProcessor(() -> dataObjectApi.examineDpColumns(request), "data permission processNode", request).getData();
@ -62,15 +59,13 @@ public class DataPermissionResponseExecutor {
return; return;
} }
// 根据karma数据列的校验结果处理api结果的数据对象 // 根据karma数据列的校验结果处理api结果的数据对象
recursiveProcessOrgNodeIdAndPersonIds(dataPermission, dataNode, examineDpColumnsResp.getAttributeDpResultMap()); recursiveProcessPersonIds(dataPermission, dataNode, examineDpColumnsResp.getAttributeDpResultMap());
} }
private void recursiveGetOrgNodeIdAndPersonIds(DataPermission dataPermission, JsonNode dataNode, List<ExamineDpColumnsReq.OrgNodeIdAndPersonId> orgNodeIdAndPersonIds) { private void recursiveGetPersonIds(DataPermission dataPermission, JsonNode dataNode, Set<Long> personIds) {
if (dataNode.isObject()) { if (dataNode.isObject()) {
Long resultOrganizationalNodeId = Objects.nonNull(dataNode.get(dataPermission.key_organizationalNodeId())) ? dataNode.get(dataPermission.key_organizationalNodeId()).asLong() : 0L; if (Objects.nonNull(dataNode.get(dataPermission.key_personId()))) {
Long resultPersonId = Objects.nonNull(dataNode.get(dataPermission.key_personId())) ? dataNode.get(dataPermission.key_personId()).asLong() : 0L; personIds.add(dataNode.get(dataPermission.key_personId()).asLong());
if (!resultOrganizationalNodeId.equals(0L) || !resultPersonId.equals(0L)) {
orgNodeIdAndPersonIds.add(ExamineDpColumnsReq.OrgNodeIdAndPersonId.builder().organizationalNodeId(resultOrganizationalNodeId).personId(resultPersonId).build());
} }
// 循环处理子field // 循环处理子field
Iterator<Map.Entry<String, JsonNode>> fields = dataNode.fields(); Iterator<Map.Entry<String, JsonNode>> fields = dataNode.fields();
@ -78,7 +73,7 @@ public class DataPermissionResponseExecutor {
Map.Entry<String, JsonNode> entry = fields.next(); Map.Entry<String, JsonNode> entry = fields.next();
JsonNode value = entry.getValue(); JsonNode value = entry.getValue();
if (value.isContainerNode()) { if (value.isContainerNode()) {
recursiveGetOrgNodeIdAndPersonIds(dataPermission, value, orgNodeIdAndPersonIds); recursiveGetPersonIds(dataPermission, value, personIds);
} }
} }
} }
@ -87,18 +82,18 @@ public class DataPermissionResponseExecutor {
Iterator<JsonNode> elements = arrayNode.elements(); Iterator<JsonNode> elements = arrayNode.elements();
while (elements.hasNext()) { while (elements.hasNext()) {
JsonNode element = elements.next(); JsonNode element = elements.next();
recursiveGetOrgNodeIdAndPersonIds(dataPermission, element, orgNodeIdAndPersonIds); recursiveGetPersonIds(dataPermission, element, personIds);
} }
} }
} }
private void recursiveProcessOrgNodeIdAndPersonIds(DataPermission dataPermission, JsonNode dataNode, private void recursiveProcessPersonIds(DataPermission dataPermission, JsonNode dataNode,
Map<String, Map<String, ExamineDpColumnsResp.AttributePermissionBasicDTO>> attributeDpResultMap) { Map<Long, Map<String, ExamineDpColumnsResp.AttributePermissionBasicDTO>> attributeDpResultMap) {
if (dataNode.isObject()) { if (dataNode.isObject()) {
Long resultOrganizationalNodeId = Objects.nonNull(dataNode.get(dataPermission.key_organizationalNodeId())) ? dataNode.get(dataPermission.key_organizationalNodeId()).asLong() : 0L; Long resultPersonId = Objects.nonNull(dataNode.get(dataPermission.key_personId())) ? dataNode.get(dataPermission.key_personId()).asLong() : null;
Long resultPersonId = Objects.nonNull(dataNode.get(dataPermission.key_personId())) ? dataNode.get(dataPermission.key_personId()).asLong() : 0L;
if (!resultOrganizationalNodeId.equals(0L) || !resultPersonId.equals(0L)) { if (Objects.nonNull(resultPersonId)) {
Map<String, ExamineDpColumnsResp.AttributePermissionBasicDTO> attributeMap = attributeDpResultMap.get(resultOrganizationalNodeId + "_" + resultPersonId); Map<String, ExamineDpColumnsResp.AttributePermissionBasicDTO> attributeMap = attributeDpResultMap.get(resultPersonId);
if (MapUtils.isNotEmpty(attributeMap)) { if (MapUtils.isNotEmpty(attributeMap)) {
for (Map.Entry<String, ExamineDpColumnsResp.AttributePermissionBasicDTO> entry : attributeMap.entrySet()) { for (Map.Entry<String, ExamineDpColumnsResp.AttributePermissionBasicDTO> entry : attributeMap.entrySet()) {
ExamineDpColumnsResp.AttributePermissionBasicDTO basic = entry.getValue(); ExamineDpColumnsResp.AttributePermissionBasicDTO basic = entry.getValue();
@ -121,7 +116,7 @@ public class DataPermissionResponseExecutor {
Map.Entry<String, JsonNode> entry = fields.next(); Map.Entry<String, JsonNode> entry = fields.next();
JsonNode value = entry.getValue(); JsonNode value = entry.getValue();
if (value.isContainerNode()) { if (value.isContainerNode()) {
recursiveProcessOrgNodeIdAndPersonIds(dataPermission, value, attributeDpResultMap); recursiveProcessPersonIds(dataPermission, value, attributeDpResultMap);
} }
} }
} }
@ -131,7 +126,7 @@ public class DataPermissionResponseExecutor {
Iterator<JsonNode> elements = arrayNode.elements(); Iterator<JsonNode> elements = arrayNode.elements();
while (elements.hasNext()) { while (elements.hasNext()) {
JsonNode element = elements.next(); JsonNode element = elements.next();
recursiveProcessOrgNodeIdAndPersonIds(dataPermission, element, attributeDpResultMap); recursiveProcessPersonIds(dataPermission, element, attributeDpResultMap);
} }
} }
} }