package com.famousPro.process.service.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.impl.RepositoryServiceImpl;
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.ProcessDefinitionImpl;
import org.activiti.engine.impl.pvm.process.TransitionImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import com.famousPro.common.service.impl.BaseServiceImp;
import com.famousPro.common.util.IDGenerator;
import com.famousPro.common.util.StringUtil;
import com.famousPro.process.service.ProcessCoreService;
import com.famousPro.process.service.ProcessOtherService;
/**
* 流程操作核心类<br>
* 此核心类主要处理:流程通过、驳回、会签、转办、中止、挂起等核心操作<br>
*
* @author wangfuwei
*
*/
public class ProcessCoreServiceImpl extends BaseServiceImp implements
ProcessCoreService {
protected RepositoryService repositoryService;
protected RuntimeService runtimeService;
protected TaskService taskService;
protected FormService formService;
protected HistoryService historyService;
protected ProcessOtherService processOtherService;
/**
* 根据当前任务ID,查询可以驳回的任务节点
*
* @param taskId
* 当前任务ID
*/
public List<ActivityImpl> findBackAvtivity(String taskId) throws Exception {
List<ActivityImpl> rtnList = null;
if (processOtherService.isJointTask(taskId)) {// 会签任务节点,不允许驳回
rtnList = new ArrayList<ActivityImpl>();
} else {
rtnList = iteratorBackActivity(taskId, findActivitiImpl(taskId,
null), new ArrayList<ActivityImpl>(),
new ArrayList<ActivityImpl>());
}
return reverList(rtnList);
}
/**
* 审批通过(驳回直接跳回功能需后续扩展)
*
* @param taskId
* 当前任务ID
* @param variables
* 流程存储参数
* @throws Exception
*/
public void passProcess(String taskId, Map<String, Object> variables)
throws Exception {
List<Task> tasks = taskService.createTaskQuery().parentTaskId(taskId)
.taskDescription("jointProcess").list();
for (Task task : tasks) {// 级联结束本节点发起的会签任务
commitProcess(task.getId(), null, null);
}
commitProcess(taskId, variables, null);
}
/**
* 驳回流程
*
* @param taskId
* 当前任务ID
* @param activityId
* 驳回节点ID
* @param variables
* 流程存储参数
* @throws Exception
*/
public void backProcess(String taskId, String activityId,
Map<String, Object> variables) throws Exception {
if (StringUtil.isNull(activityId)) {
throw new Exception("驳回目标节点ID为空!");
}
// 查询本节点发起的会签任务,并结束
List<Task> tasks = taskService.createTaskQuery().parentTaskId(taskId)
.taskDescription("jointProcess").list();
for (Task task : tasks) {
commitProcess(task.getId(), null, null);
}
// 查找所有并行任务节点,同时驳回
List<Task> taskList = findTaskListByKey(findProcessInstanceByTaskId(
taskId).getId(), findTaskById(taskId).getTaskDefinitionKey());
for (Task task : taskList) {
commitProcess(task.getId(), variables, activityId);
}
}
/**
* 取回流程
*
* @param taskId
* 当前任务ID
* @param activityId
* 取回节点ID
* @throws Exception
*/
public void callBackProcess(String taskId, String activityId)
throws Exception {
if (StringUtil.isNull(activityId)) {
throw new Exception("目标节点ID为空!");
}
// 查找所有并行任务节点,同时取回
List<Task> taskList = findTaskListByKey(findProcessInstanceByTaskId(
taskId).getId(), findTaskById(taskId).getTaskDefinitionKey());
for (Task task : taskList) {
commitProcess(task.getId(), null, activityId);
}
}
/**
* 中止流程(特权人直接审批通过等)
*
* @param taskId
*/
public void endProcess(String taskId) throws Exception {
ActivityImpl endActivity = findActivitiImpl(taskId, "end");
commitProc
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.impl.RepositoryServiceImpl;
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.ProcessDefinitionImpl;
import org.activiti.engine.impl.pvm.process.TransitionImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import com.famousPro.common.service.impl.BaseServiceImp;
import com.famousPro.common.util.IDGenerator;
import com.famousPro.common.util.StringUtil;
import com.famousPro.process.service.ProcessCoreService;
import com.famousPro.process.service.ProcessOtherService;
/**
* 流程操作核心类<br>
* 此核心类主要处理:流程通过、驳回、会签、转办、中止、挂起等核心操作<br>
*
* @author wangfuwei
*
*/
public class ProcessCoreServiceImpl extends BaseServiceImp implements
ProcessCoreService {
protected RepositoryService repositoryService;
protected RuntimeService runtimeService;
protected TaskService taskService;
protected FormService formService;
protected HistoryService historyService;
protected ProcessOtherService processOtherService;
/**
* 根据当前任务ID,查询可以驳回的任务节点
*
* @param taskId
* 当前任务ID
*/
public List<ActivityImpl> findBackAvtivity(String taskId) throws Exception {
List<ActivityImpl> rtnList = null;
if (processOtherService.isJointTask(taskId)) {// 会签任务节点,不允许驳回
rtnList = new ArrayList<ActivityImpl>();
} else {
rtnList = iteratorBackActivity(taskId, findActivitiImpl(taskId,
null), new ArrayList<ActivityImpl>(),
new ArrayList<ActivityImpl>());
}
return reverList(rtnList);
}
/**
* 审批通过(驳回直接跳回功能需后续扩展)
*
* @param taskId
* 当前任务ID
* @param variables
* 流程存储参数
* @throws Exception
*/
public void passProcess(String taskId, Map<String, Object> variables)
throws Exception {
List<Task> tasks = taskService.createTaskQuery().parentTaskId(taskId)
.taskDescription("jointProcess").list();
for (Task task : tasks) {// 级联结束本节点发起的会签任务
commitProcess(task.getId(), null, null);
}
commitProcess(taskId, variables, null);
}
/**
* 驳回流程
*
* @param taskId
* 当前任务ID
* @param activityId
* 驳回节点ID
* @param variables
* 流程存储参数
* @throws Exception
*/
public void backProcess(String taskId, String activityId,
Map<String, Object> variables) throws Exception {
if (StringUtil.isNull(activityId)) {
throw new Exception("驳回目标节点ID为空!");
}
// 查询本节点发起的会签任务,并结束
List<Task> tasks = taskService.createTaskQuery().parentTaskId(taskId)
.taskDescription("jointProcess").list();
for (Task task : tasks) {
commitProcess(task.getId(), null, null);
}
// 查找所有并行任务节点,同时驳回
List<Task> taskList = findTaskListByKey(findProcessInstanceByTaskId(
taskId).getId(), findTaskById(taskId).getTaskDefinitionKey());
for (Task task : taskList) {
commitProcess(task.getId(), variables, activityId);
}
}
/**
* 取回流程
*
* @param taskId
* 当前任务ID
* @param activityId
* 取回节点ID
* @throws Exception
*/
public void callBackProcess(String taskId, String activityId)
throws Exception {
if (StringUtil.isNull(activityId)) {
throw new Exception("目标节点ID为空!");
}
// 查找所有并行任务节点,同时取回
List<Task> taskList = findTaskListByKey(findProcessInstanceByTaskId(
taskId).getId(), findTaskById(taskId).getTaskDefinitionKey());
for (Task task : taskList) {
commitProcess(task.getId(), null, activityId);
}
}
/**
* 中止流程(特权人直接审批通过等)
*
* @param taskId
*/
public void endProcess(String taskId) throws Exception {
ActivityImpl endActivity = findActivitiImpl(taskId, "end");
commitProc