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;
}