如何根据预测流程节点信息判断是否跳过当前审批节点

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

如何根据预测流程节点信息判断是否跳过当前审批节点

关键词:工作流、跳过、审批节点

一、需求

     背景:在采购订货系统中,工作流流程审批存在这样的审批规范:

  • 如果某个用户a是某个审批节点审批人 ,同时后面还有审批节点的审批人是用户a,并且后面存在某个审批节点的审批人b是他的下属,那么跳过当前审批节点

  • 如果某个用户a是某个审批节点审批人 ,同时后面没有审批节点的审批人是用户a,或者后面不存在某个审批节点的审批人b是他的下属,则保留当前审批审批节点。

    场景:在工作流审批时,有如下X-Y-Z-M三个审批节点,审批人设置为如下图。第一级审批人、第三级审批人和第四级节点是 一样的。

  • 如果创建人是第二级审批人(张三)的领导时,第一级和第四级审批节点跳过,保留第二级审批节点和第三级审批节点。

  • 如果创建人不是第二级审批人(张三)的领导时,保留第一级审批和第二级审批节点,第三节和第四级审批节点跳过

二、思路与方案

(1)思路:

       目前,工作流系统支持存在多个审批节点时,要么是只能跳过前面相同审批人节点(审批人后审控制介绍 (kingdee.com))。要么只能跳过后面所有系统审批人节点(自动审批的四种场景 (kdcloud.com))。要么是按照当前表单数据作为条件是否跳过当前审批节点。并不能按照当前节点之后的审批信息去判断是否跳过某个审批节点。因此需要借助二开插件实现如需求中描述的场景。

(2)方案:

      在工作流审批的各个节点添加工作流插件,在条件事件hasTrueCondition中调用流程预测接口WorkflowServiceHelper.getPreComputorRecord去获取出每个审批节点的审批人,然后判断后面的审批人中是否存在某个审批人是当前审批人的下属,并且还存在其他审批节点的审批人和当前节点审批人是相同的,则跳过当前审批节点。需要注意的是,调用流程预测接口时,又会进入条件事件hasTrueCondition,导致死循环。因此要在hasTrueCondition做条件判断如果是预测接口进入的工作流插件,直接不走插件的处理逻辑。

三、实现过程

1、控制领导在下属后面去审批

public class ReqWorkflowPlugin implements Plugin, IWorkflowPlugin {
    @Override
    public boolean hasTrueCondition(AgentExecution execution) {
        if(execution instanceof PreComputatorExecutionEntityImpl){//预测流程时,不走这个条件判断,避免死循环
            return false;
        }
        Boolean condition=false;//是否跳过当前节点
        Boolean conditiona=false;//如果当前节点是后面某个节点审批人的领导
        Boolean conditionb=false;//存在后面还有和当前节点相同的审批人的审批节点。
        //单据id
        String businessKey = execution.getBusinessKey();
        //获取当前审批人
        String curPartipantIds =  execution.getCurrentTask() == null?null: (String) execution.getCurrentTask().getVariable("currentParticipant");
        List<Long> currentApproverIds = execution.getCurrentApprover();
        if(currentApproverIds.isEmpty() && null!=curPartipantIds && curPartipantIds.trim().length()>0
                &&!curPartipantIds.contains(",")){
            currentApproverIds.add(Long.parseLong(curPartipantIds));//仅有一个参与人时
        }
        if (currentApproverIds.size() == 1) {
            Long currentApproverId = currentApproverIds.get(0);
            Long processInstanceId = execution.getProcessInstanceId();
            //获取流程后面节点的预计算结果
            IPreComputorRecord preComputorRecord = WorkflowServiceHelper.getPreComputorRecord(processInstanceId);
            List<IPreComputorRecordItem> pcrDataList = preComputorRecord.getPcrData();
            for (int i = 1; i < pcrDataList.size(); i++) {//当i=0时,是当前节点,要比较的是当前之后的节点
                IPreComputorRecordItem pcrData = pcrDataList.get(i);
                List<String> nextNodeId = pcrData.getNextNodeId();
                if (nextNodeId.size() > 0) {
                    //获取下一个节点的审核人
                    List<Long> assignee = pcrData.getAssignee();
                    if (assignee.size() > 0) {
                        //只有一个审批人,如果实际工作流流程节点有多个审批人,遍历去取审批人即可
                        Long nextApproverId = assignee.get(0);
                        if (!nextApproverId.equals(currentApproverId)) {
                                Map<Long, Map<String, Object>> userInfoBySuperior = UserServiceHelper.getUserInfoBySuperior(nextApproverId);
                                if (userInfoBySuperior.containsKey(currentApproverId)) {
                                    //如果当前节点是后面某个节点审批人的领导,则跳过
                                    conditiona = true;
                                    if (conditiona && conditionb) {
                                        condition = true;
                                        break;
                                    }
                                }
                            } else {//存在后面还有相同的审批人。
                                conditionb = true;
                                if (conditiona && conditionb) {
                                    condition = true;
                                    break;
                                }
                            }
                        }
                    }
                }
            }
            return condition;
        }
    }

每一个审批节点都注册上面的插件ReqWorkflowPlugin

2、控制同一个用户只能审批一个节点     

四、效果图

(1)创建人不是张三所在部门负责人时,跳过第三级、第四级审批节点

(2)创建人是张三所在部门负责人时,跳过第一级、第四级审批节点

五、开发环境版本

V6.0.1

六、参考资料

开发平台

学习成长中心



如何根据预测流程节点信息判断是否跳过当前审批节点

关键词:工作流、跳过、审批节点一、需求 背景:在采购订货系统中,工作流流程审批存在这样的审批规范:如果某个用户a是某个审批节点...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息