@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);
}
}
}
}