activiti动态创建路径

 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cn.gdyes.wf.workflow.manager.impl;

import cn.gdyes.wf.workflow.manager.IGeneralRejectManager;
import java.util.ArrayList;
import java.util.List;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.RepositoryServiceImpl;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import org.activiti.engine.impl.pvm.process.TransitionImpl;
import org.springframework.beans.factory.annotation.Autowired;

/**
 *
 * @author Administrator
 */
public class GeneralRejectManagerImpl implements IGeneralRejectManager {

    @Autowired   
    private TaskService taskService;
    @Autowired   
    private RuntimeService runtimeService;
    @Autowired   
    private RepositoryService repositoryService;

    private List<ActivityImpl> activitiList = new ArrayList();
   
    //根据ActivitiId获取Acitiviti
    public ActivityImpl findActivityImpl(List<ActivityImpl> activitiList, String activitiId) {

        for (ActivityImpl activityImpl : activitiList) {
            String id = activityImpl.getId();
            if (id.equals(activitiId)) {
                return activityImpl;
            }
        }
        return null;
    }

    public List<ActivityImpl> findEndActivityImpls(List<ActivityImpl> activitiList) {
        List<ActivityImpl> activityImpls = new ArrayList<ActivityImpl>();
        for (ActivityImpl activityImpl : activitiList) {
            List<PvmTransition> pvmTransitionList = activityImpl.getOutgoingTransitions();
            if (pvmTransitionList.isEmpty()) {
                activityImpls.add(activityImpl);
            }
        }
        return activityImpls;
    }
   
    //通用流程否决接口
    public void rejectAndEnd(String taskId) {
       
        TaskEntity taskEntity = (TaskEntity) taskService.createTaskQuery().taskId(taskId).singleResult();
       
        ProcessDefinitionEntity def = (ProcessDefinitionEntity) ((RepositoryServiceImpl) repositoryService).getDeployedProcessDefinition(taskEntity.getProcessDefinitionId());
       
       
        ExecutionEntity executionEntity = (ExecutionEntity) runtimeService.createExecutionQuery().executionId(taskEntity.getExecutionId()).singleResult();//执行实例

        String activitiId = executionEntity.getActivityId();//当前实例的执行到哪个节点
        activitiList = def.getActivities();//获得当前任务的所有节点
       
        ActivityImpl activeActivity = findActivityImpl(activitiList, activitiId);
        ActivityImpl endActivity = findEndActivityImpls(activitiList).get(0);


        List<PvmTransition> pvmTransitionList = activeActivity.getOutgoingTransitions();//获取当前节点的所以出口(这个方法做的不好,应该返回List<TransitionImpl>才对的,这样就不用下面的强转换了,我想以后版本会改了这点)
        for (PvmTransition pvmTransition : pvmTransitionList) {
            TransitionImpl transitionImpl = (TransitionImpl) pvmTransition;//强转为TransitionImpl
            transitionImpl.setDestination(endActivity);
        }
       
        taskService.complete(taskId);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值