节点转分支代码

it2024-08-21  47

@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 first = perNodes.get(nodeSize-1); PmdApprovalProjectProcessNodeResponse last = perNodes.get(nodeSize-1); Long nextNodeId = last.getNextNodeId(); if(nextNodeId==0 || nextNodeId==null || first.getPreviousNodeId().equals(last.getNextNodeId())){ 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); } } }else{ perNodes.add(currentNode); configNodeResponses.add(perNodes); } } } }
最新回复(0)