Activiti 驳回代码尝试修改

Activiti 驳回代码尝试修改

      之前根据jbpm改过来的驳回代码是 把当前的任务直接改变成驳回到任务 ,偶以为相当的不妥 , 以后就没办法对驳回进行追踪,应该新建驳回的任务比较靠谱 ,于是进行了一番修改。

/*
     *  activityId 驳回节点ID
     *  activityName 驳回节点名称
     *  taskId 当前任务ID
     *  variables 流程参数
     * */
    @Override
    @Transactional
    @SuppressWarnings("rawtypes")
    public boolean rejectTaskCommon(String taskId, String activityId,
            String activityName, Map variables) throws Exception {

        //找到当前任务
        TaskEntity task = (TaskEntity) baseService.getTaskService()
                .createTaskQuery().taskId(taskId).singleResult();

        if (task == null) {
            return false;
        }

        //找到流程实例
        ProcessInstance processInstance = baseService.getRuntimeService()
                .createProcessInstanceQuery()
                .processInstanceId(task.getProcessInstanceId()).singleResult();

        if (processInstance == null) {
            return false;
        }

        //取得流程定义
        ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) ((RepositoryServiceImpl) baseService
                .getRepositoryService()).getDeployedProcessDefinition(task
                .getProcessDefinitionId());

        if (processDefinition == null) {
            return false;
        }

        // 更换其Execution
        ExecutionEntity exeImpl = (ExecutionEntity) processInstance;

        // 更换其活动的定义
        ActivityImpl preActivity = ((ProcessDefinitionImpl) processDefinition)
                .findActivity(activityId);
        exeImpl.setActivity(preActivity);

        //取得要驳回到的节点的任务定义
        TaskDefinition taskDef = ((ProcessDefinitionEntity) processDefinition)
                .getTaskDefinitions().get(preActivity.getId());

        try {
            TaskEntity newTask = (TaskEntity) baseService.getTaskService()
                    .newTask();

            newTask.setName(activityName);
            newTask.setDescription(task.getDescription());
            newTask.setExecution(exeImpl);
            newTask.setCreateTime(new Date());

            newTask.setExecutionId(task.getExecutionId());
            newTask.setProcessInstanceId(task.getProcessInstanceId());
            newTask.setProcessDefinitionId(task.getProcessDefinitionId());
            newTask.setProcessInstance(task.getProcessInstance());

            // 更换流程任务的定义
            if (taskDef != null) {
                newTask.setTaskDefinition(taskDef);
            } else {
                return false;
            }

            //保存新的任务
            baseService.getTaskService().saveTask(newTask);
            
            
            //加入之前节点被分派的人员
            List<HistoricTaskInstance> targetTaskList = baseService
                    .getHistoryService().createHistoricTaskInstanceQuery()
                    .processInstanceId(task.getProcessInstanceId())
                    .taskDefinitionKey(activityId).list();
            if (targetTaskList != null && targetTaskList.size() > 0) {
                for (HistoricTaskInstance ht : targetTaskList) {
                    baseService.getTaskService().addCandidateUser(
                            newTask.getId(), ht.getAssignee());
                }
            }
            
            //完成当前任务
            baseService.getTaskService().deleteTask(task.getId());

        } catch (Exception e) {
            logger.error("", e);

            return false;
        }

        return true;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值