当前位置: 代码迷 >> 综合 >> 节点转分支代码
  详细解决方案

节点转分支代码

热度:0   发布时间:2024-03-06 21:37:21.0
@Data
public class PmdApprovalProjectProcessNodeResponse {/*** 主建id*/@ApiModelProperty(name = "id",value = "主建id")private Long id;/*** 立项项目id*/@ApiModelProperty(name = "approvalProjectId",value = "立项项目id")private Long approvalProjectId;/*** 立项项目流程id*/@ApiModelProperty(name = "approvalProjectProcessId",value = "立项项目流程id")private Long approvalProjectProcessId;/*** 流程配置id*/@ApiModelProperty(name = "processConfigId",value = "流程配置id")private Long processConfigId;/*** 当前节点id*/@ApiModelProperty(name = "currentNodeId",value = "当前节点id")private Long currentNodeId;/*** 节点名称*/@ApiModelProperty(name = "nodeName",value = "节点名称")private String nodeName;/*** 前驱节点id*/@ApiModelProperty(name = "previousNodeId",value = "前驱节点id")private Long previousNodeId;/*** 下个节点id*/@ApiModelProperty(name = "nextNodeId",value = "下个节点id")private Long nextNodeId;/*** 是否经过0-否,1-是*/@ApiModelProperty(name = "flag",value = "是否经过0-否,1-是")private Integer flag;/*** 节点状态:0-禁用,1-启用*/@ApiModelProperty(name = "status",value = "节点状态:0-禁用,1-启用")private Integer status;}
/*** 转换分支* @param pmdApprovalProjectProcessNodes* @return*/public List<List<PmdApprovalProjectProcessNodeResponse>> convertBranch(List<PmdApprovalProjectProcessNodeResponse> pmdApprovalProjectProcessNodes){List<List<PmdApprovalProjectProcessNodeResponse>> configNodeResponses=new LinkedList<>();if(!CollectionUtils.isEmpty(pmdApprovalProjectProcessNodes)){//组装分支Map<Long,List<PmdApprovalProjectProcessNodeResponse>> listNextMap=pmdApprovalProjectProcessNodes.stream().collect(Collectors.groupingBy(PmdApprovalProjectProcessNodeResponse :: getPreviousNodeId));Map<Long, PmdApprovalProjectProcessNodeResponse> listCurrentMap = pmdApprovalProjectProcessNodes.stream().collect(Collectors.toMap(PmdApprovalProjectProcessNodeResponse::getCurrentNodeId, a -> a,(k1,k2)->k1));this.returnNextNode(configNodeResponses,listNextMap,listCurrentMap,null);}return configNodeResponses;
}/*** 返回下一个节点* @param configNodeResponses* @param listNextMap* @param listCurrentMap* @param perNodes* @return*/
public void returnNextNode(List<List<PmdApprovalProjectProcessNodeResponse>> configNodeResponses, Map<Long,List<PmdApprovalProjectProcessNodeResponse>> listNextMap, Map<Long, PmdApprovalProjectProcessNodeResponse> listCurrentMap, List<PmdApprovalProjectProcessNodeResponse> perNodes){if(CollectionUtils.isEmpty(perNodes)){//获取头节点List<PmdApprovalProjectProcessNodeResponse> headNodes=listNextMap.get(0L);if(!CollectionUtils.isEmpty(headNodes)){for(PmdApprovalProjectProcessNodeResponse headNode:headNodes){List<PmdApprovalProjectProcessNodeResponse> currentNodeResponseList=new LinkedList<>();currentNodeResponseList.add(headNode);if(headNode.getNextNodeId()==0||headNode.getNextNodeId()==null){configNodeResponses.add(currentNodeResponseList);}else {this.returnNextNode(configNodeResponses,listNextMap,listCurrentMap,currentNodeResponseList);}}}}else {int nodeSize=perNodes.size();PmdApprovalProjectProcessNodeResponse configNodeResponse=perNodes.get(nodeSize-1);Long nextNodeId=configNodeResponse.getNextNodeId();if(nextNodeId==0||nextNodeId==null){configNodeResponses.add(perNodes);}else {PmdApprovalProjectProcessNodeResponse currentNode=listCurrentMap.get(nextNodeId);List<PmdApprovalProjectProcessNodeResponse> configNodeResponseList=listNextMap.get(nextNodeId);if(!CollectionUtils.isEmpty(configNodeResponseList)){for(PmdApprovalProjectProcessNodeResponse nodeResponse:configNodeResponseList){List<PmdApprovalProjectProcessNodeResponse> currentNodeResponseList=new LinkedList<>();currentNodeResponseList.addAll(perNodes);currentNodeResponseList.add(currentNode);currentNodeResponseList.add(nodeResponse);if(nodeResponse.getNextNodeId()==0||nodeResponse.getNextNodeId()==null){configNodeResponses.add(currentNodeResponseList);}else {this.returnNextNode(configNodeResponses,listNextMap,listCurrentMap,currentNodeResponseList);}}}}}
}
  相关解决方案