diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/handle/WithDrawHandle.java b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/handle/WithDrawHandle.java index e607ea4..5dca80d 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/handle/WithDrawHandle.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/todocenter/handle/WithDrawHandle.java @@ -12,7 +12,6 @@ import com.wflow.workflow.bean.dto.ReqProcessHandlerDTO; import com.wflow.workflow.bean.process.ProgressNode; import com.wflow.workflow.bean.process.enums.NodeTypeEnum; import com.wflow.workflow.bean.vo.ProcessProgressVo; -import com.wflow.workflow.enums.ProcessHandlerEnum; import com.wflow.workflow.enums.ProcessStatusEnum; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -132,58 +131,52 @@ public class WithDrawHandle { Boolean isAndOr = Boolean.FALSE; - //还有种情况是 会签 或签 并且在当前节点 并且已经通过 + //判断当前子流程是否结束 如果结束了 必不能撤回 + Boolean thisSubNodeOver = Boolean.FALSE; + //当前节点是 会签|或签的情况 if(CollUtil.isNotEmpty(thisAndOr)){ + Integer finishNodes = 0; for(ProgressNode n : thisAndOr){ - if(n.getUserId().equals(String.valueOf(user.getUserId())) && - Objects.nonNull(n.getFinishTime()) - ){ - //肯定是可以撤回的 + if(Objects.nonNull(n.getFinishTime())){ + //当前会签 有审批过的 那么上个会签|或签 无论如何 就不可能可以撤回了 + beforeAndOr = Collections.emptyList(); + finishNodes ++; + } + //找到了 当前的操作人 在当前的 会签|或签 中 并且已经审批了 + if(n.getUserId().equals(user.getEmployeeCode()) && + Objects.nonNull(n.getFinishTime())){ + beforeProgressNode = n; + //说明当前操作人 在上个会签或者或签节点 isAndOr = Boolean.TRUE; - if(Objects.nonNull(n.getResult()) && n.getResult().equals(ProcessHandlerEnum.BACK)){ - //如果上个节点被退回了 直接返回false - return Boolean.FALSE; - } - - if(taskId.equals(n.getTaskId())){ - //说明当前操作人 在这个会签或者或签节点 - beforeProgressNode = n; - return Boolean.TRUE; - } } } - } - - // - if(isAndOr){ - //在本个会签节点有 但是taskId对不上 那这种情况话 其它task都不能撤回了 - return Boolean.FALSE; + //如果都审批过了 结束了 那说明此子流程已经结束了 不能再撤回了 + if(finishNodes.equals(thisAndOr.size())){ + return Boolean.FALSE; + } + }else{ + //如果当前不是会签|或签 就判断 当前最后一个节点 结束了没 + //如果结束了 也同样 直接不能撤回 + if(Objects.nonNull(currentProgressNode.getFinishTime())){ + return Boolean.FALSE; + } } //如果上个会签没取到 还有种情况是 会签 或签 并且在上个节点 if(!isAndOr && CollUtil.isNotEmpty(beforeAndOr)) { for (ProgressNode n : beforeAndOr) { - if (n.getUserId().equals(String.valueOf(user.getUserId())) + if (n.getUserId().equals(user.getEmployeeCode()) && !TodoCenterContant.Handler.OR_SIGN_FLAG.equals(n.getWithdrawFlag())) { - if(Objects.nonNull(n.getResult()) && n.getResult().equals(ProcessHandlerEnum.BACK)){ - //如果上个节点被退回了 直接返回false - return Boolean.FALSE; - } + beforeProgressNode = n; //说明当前操作人 在上个会签或者或签节点 isAndOr = Boolean.TRUE; - if(taskId.equals(n.getTaskId())){ - beforeProgressNode = n; - //肯定是可以撤回的 - return Boolean.TRUE; - } + break; } } } if(!isAndOr && (Objects.isNull(beforeProgressNode) - || !String.valueOf(user.getUserId()).equals(beforeProgressNode.getUserId())) - || !taskId.equals(beforeProgressNode.getTaskId()) - || beforeProgressNode.getResult().equals(ProcessHandlerEnum.BACK)){ + || !user.getEmployeeCode().equals(beforeProgressNode.getUserId()))){ return Boolean.FALSE; }