有关activit工作流的项目的一些简述:一

一:创建一个ActivitiHandle,就是一个操作类

 

@Component("activitiHandle")
public class ActivitiHandle {

    //该路径为activiti工作流的pbmn图的位置

    private static final String PBMN_URL = "com/diagrams/";

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    @Autowired
    private HistoryService historyService;

    @Autowired
    private ActivitiService activitiService;

    /**
     * 流程部署;对于流程部署来说,需要两个参数;一个该工作流的名字,一个是pbmn文件的文字;这样是为了方便多次部署流程,也可以部署不同的流程;
     */
    public void deployFlow(String workflowName, String pbmnName) {
        Deployment deployment = repositoryService.createDeployment()//这个service是工作流中的类,无需自己创建,导入相关的jar包即可
                .name(workflowName).addClasspathResource(PBMN_URL + pbmnName)
                .deploy();
        System.out.println(deployment.getId());
        System.out.println(deployment.getName());
    }

    /**
     * 启动流程:启动已经部署好的流程,即创建流程实例:例如在工单项目中新疆工单的时候就启动一个流程;即创建一个流程实例
     */
    public String flowstart(String workflowFlg,Map<String,Object> paramter){
        Map<String,Object> variables = new HashMap<String, Object>();
        variables.put(ActivitiParamter.WO_VARIABLES, paramter);
        // 用key启动时按照最新的流程版本定义启动
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(workflowFlg, variables);
        String ss = processInstance.getDescription();
        return  processInstance.getId();
    }

    /**
     * 查询组内待领取任务
     */
    public DataGrid findGroupTask(ActivitiDto activitiDto) {
        return activitiService.findGroupTask(activitiDto);
    }

    /**
     * 查询个人待办任务
     */
    public DataGrid findPersonTask(ActivitiDto activitiDto) {
        return activitiService.findPersonTask(activitiDto);
    }

    /**
     * 认领任务:认领任务,需要任务的标识和员工的标识,因为一般情况下,认领都是个人行为
     */
    public void claimTask(String taskId, String userId) {
        taskService.claim(taskId, userId);
    }

    /**
     * 重新认领:已经被认领的任务,重新认领,需要参数同认领方法
     * 
     * @param taskId
     * @param ouserId
     */
    public void reClaimTak(String taskId, String ouserId) {
        taskService.setAssignee(taskId, ouserId);
    }

    /**
     * 完成任务:完成任务只需要taskId。
     * 
     * @param taskId
     */
    public void completeTask(String taskId) {
        taskService.complete(taskId);
        System.out.println("完成任务,任务ID:" + taskId);
    }

    /**
     * 完成任务:同样是完成任务,但是可以加入一些工作流变量(全局变量)
     * 
     * @param taskId
     * @param paramter
     */
    public void completeTask(String taskId, Map<String, Object> va) {
        taskService.complete(taskId, va);
        System.out.println("完成任务,任务ID:" + taskId);
    }

    /**
     * 查询节点描述:根据taskId查询该任务节点详细:这里是取描述字段,并转化为ActivitiCode对象(工作流码表对象)
     * @param taskId
     * @return
     */
    public ActivitiCode queryTaskDescription(String taskId){
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
        String des = task.getDescription();
        ActivitiCode activitiCode = JSONObject.parseObject(des, ActivitiCode.class);
        //String lastNode  =activitiCode.getCodeValue().get(activitiCode.getLastNodeName());
        return activitiCode;
    }
    
    /**
     * 流程退回:根据taskId,查询该任务节点:并取出上一个节点,根绝上一个节点完成流程退回
     * @param taskId
     */
    public void fallBack(String taskId) {

        //根据taskId查询任务节点对象
        Task task = taskService.createTaskQuery().taskId(taskId).singleResult();

        //取出该节点描述
        String des = task.getDescription();

        //将该节点转化成工作流码表对象
        ActivitiCode activitiCode = JSONObject.parseObject(des,
                ActivitiCode.class);

        //然后获取到该节点的上一节点
        String lastNode = activitiCode.getCodeValue().get(activitiCode.getLastNodeName()).toString();
        if (!StringUtils.isEmpty(lastNode)) {
            // 查询上一个节点处理记录taskDefKey即为我们查询出来的lastNode
            WoProcessLoggning ps = woProcessLoggningService.lastProcessLogging(
                    lastNode, task.getExecutionId());
            Map<String, Object> variables = new HashMap<String, Object>();
            // 设置任务委派类型为个人
            variables.put(ActivitiParamter.WO_TYPE,
                    ActivitiParamter.WO_TYPE_ENUM.ASSIGNEE.getKey());
            // 设置任务委派人:即上一节点流程处理记录里面的操作者
            variables.put(ActivitiParamter.WO_TYPE_ENUM.ASSIGNEE.getKey(),
                    ps.getOperatorFlag());
            // 设置不强制结束
            variables.put(ActivitiParamter.WO_END_STATUS, "0");
            // 设置审核类型为不通过
            variables.put(ActivitiParamterCaifu.WO_AUDIT_STATUS,
                    ActivitiParamterCaifu.AUDIT_STATUS.NO.getKey());
            // 设置全局变量
            runtimeService.setVariable(task.getExecutionId(),
                    ActivitiParamter.WO_VARIABLES, variables);
            // 完成任务
            taskService.complete(taskId, variables);
        }
    }
    
    /**
     * 完成任务
     * @param dto
     * executionId 和 taskId必填
     */
    public void completeTaskByExecution(ActivitiParamter dto) {
        if (!StringUtils.isEmpty(dto.getExecutionId())) {

            //流程实例id不能为空
            Map<String, Object> variables = new HashMap<String, Object>();
            if (!StringUtils.isEmpty(dto.getWoAssignee())) {

                //如果委托人不为空,那就是个人任务。所以设置流程全局变量的时候就设置为个人
                variables.put(ActivitiParamter.WO_TYPE,
                        ActivitiParamter.WO_TYPE_ENUM.ASSIGNEE.getKey());
                variables.put(ActivitiParamter.WO_TYPE_ENUM.ASSIGNEE.getKey(),
                        dto.getWoAssignee());
            } else if (!StringUtils.isEmpty(dto.getWoGroup())) {

                //如果个人为空,组不为空就将全局变量设置为组
                variables.put(ActivitiParamter.WO_TYPE,
                        ActivitiParamter.WO_TYPE_ENUM.GROUP.getKey());
                variables.put(ActivitiParamter.WO_TYPE_ENUM.GROUP.getKey(),
                        dto.getWoGroup());
            }

            //向全局变量添加完成
            variables.put(ActivitiParamter.WO_END_STATUS, dto.getEndStatus());
            variables.putAll(dto.getVariables());

                        //设置该流程实例的流程变量
         runtimeService.setVariable(dto.getExecutionId(), ActivitiParamter.WO_VARIABLES, variables);
        }

        //完成任务
        taskService.complete(dto.getTaskId(), dto.getVariables());
    }
}

转载于:https://my.oschina.net/u/3045515/blog/842058

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值