package com.jbpmTest.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessDefinition;
import org.jbpm.api.ProcessDefinitionQuery;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
import com.jbpmTest.service.InitConf;
import com.opensymphony.xwork.ActionSupport;
public class TestAction extends ActionSupport {
ExecutionService executionService;
RepositoryService repositoryService;
ManagementService managementService;
HistoryService historyService;
TaskService taskService;
static String NEW_APPLY = "new_appy";
static String MAIN="main";
static String TASK="task";
static String VIEW="view";
String applyName;
String applyTime;
String leaveDay;
String content;
String position;
String id;
String name;
String taskId;
List process=new ArrayList();
List pi=new ArrayList();
List taskList=new ArrayList();
Map<String, Object> map ;
static Logger logger = Logger.getLogger(TestAction.class);
public List getProcess() {
return process;
}
public void setProcess(List process) {
this.process = process;
}
public List getPi() {
return pi;
}
public void setPi(List pi) {
this.pi = pi;
}
public String leave() {
// 根据流程定义的KEY值启动一个新的流程实例
ProcessInstance processInstance = executionService
.startProcessInstanceByKey("leave");
//判断流程定义的活动是否是“填写请假单”的活动
if (processInstance.isActive("填写请假单")) {
NEW_APPLY="new_appy";
}
return NEW_APPLY;
}
public String apply() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("name", applyName);
variables.put("time", applyTime);
variables.put("leaveDay", leaveDay);
variables.put("content", content);
variables.put("position", position);
if (position.trim().equals("经理")) {
// "manager"变量名与leave.jpdl.xml中decision里面的变量一致,同时设置的值也要保持一致
variables.put("manager", "是");
} else {
variables.put("manager", "否");
}
// 获取任务列表,因为我们在填写请假单的时候是分配给“zzg”的,见leave.jpdl.xml
List<Task> taskList = taskService.findPersonalTasks("Kayzhan");
// 根据任务列表获取任务
Task task = taskList.get(0);
// 把设置好的变量放到任务服务里面并根据任务ID结束任务
taskService.setVariables(task.getId(), variables);
taskService.completeTask(task.getId());
return retrieve();
}
public String getTask() {
taskList = taskService.findPersonalTasks(name);
logger.debug(taskList);
return TASK;
}
public String view(){
Set<String> set = taskService.getVariableNames(taskId);
map = taskService.getVariables(taskId, set);
return VIEW;
}
public String retrieve() {
process = getLatestProcessDefinition();
pi = getProcessInstanceById();
return MAIN;
}
public String confirm() {
Task task = taskService.getTask(taskId);
Execution execution = executionService.findExecutionById(task
.getExecutionId());
if (execution.getProcessInstance().isActive("老板审批")) {
taskService.completeTask(taskId, "老板批准");
} else if (execution.getProcessInstance().isActive("经理审核")) {
String variable = (String) taskService.getVariable(taskId,
"leaveDay");
if (Integer.valueOf(variable) > 3) {
taskService.completeTask(taskId, "请假天数>3");
} else {
taskService.completeTask(taskId, "经理批准");
}
}
return getTask();
}
public String dissent() {
Task task = taskService.getTask(taskId);
Execution execution = executionService.findExecutionById(task
.getExecutionId());
if (execution.getProcessInstance().isActive("老板审批")) {
taskService.completeTask(taskId, "老板不批准");
} else if (execution.getProcessInstance().isActive("经理审核")) {
taskService.completeTask(taskId, "经理不批准");
}
return getTask();
}
/**
* 获取最新版本的流程定义
*
* @param request
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
protected List<ProcessDefinition> getLatestProcessDefinition(){
List<ProcessDefinition> processDefinitions = repositoryService
.createProcessDefinitionQuery().orderAsc(
ProcessDefinitionQuery.PROPERTY_NAME).list();
Map<String, ProcessDefinition> map = new LinkedHashMap<String, ProcessDefinition>();
for (ProcessDefinition pd : processDefinitions) {
String key = pd.getKey();
ProcessDefinition definition = map.get(key);
if ((definition == null)
|| (definition.getVersion() < pd.getVersion())) {
map.put(key, pd);
}
}
return new ArrayList(map.values());
}
/**
* 根据流程定义ID获取流程实例
* @param request
* @param response
* @return
* @throws ServletException
* @throws IOException
*/
protected List<ProcessInstance> getProcessInstanceById()
{
List temp=new ArrayList();
if(id==null||id.trim().equals("")){
return temp;
}
return executionService.createProcessInstanceQuery()
.processDefinitionId(id).list();
}
public ExecutionService getExecutionService() {
return executionService;
}
public void setExecutionService(ExecutionService executionService) {
this.executionService = executionService;
}
public RepositoryService getRepositoryService() {
return repositoryService;
}
public void setRepositoryService(RepositoryService repositoryService) {
this.repositoryService = repositoryService;
}
public TaskService getTaskService() {
return taskService;
}
public void setTaskService(TaskService taskService) {
this.taskService = taskService;
}
public String getApplyName() {
return applyName;
}
public void setApplyName(String applyName) {
this.applyName = applyName;
}
public String getApplyTime() {
return applyTime;
}
public void setApplyTime(String applyTime) {
this.applyTime = applyTime;
}
public String getLeaveDay() {
return leaveDay;
}
public void setLeaveDay(String leaveDay) {
this.leaveDay = leaveDay;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List getTaskList() {
return taskList;
}
public void setTaskList(List taskList) {
this.taskList = taskList;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
}
评论3
最新资源