package process.service;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.text.SimpleDateFormat;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.LinkedHashMap;
|
import java.util.List;
|
import java.util.Map;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpSession;
|
import org.activiti.engine.RepositoryService;
|
import org.activiti.engine.RuntimeService;
|
import org.activiti.engine.identity.User;
|
import org.activiti.engine.repository.Model;
|
import org.activiti.engine.repository.ProcessDefinition;
|
import org.activiti.engine.task.Task;
|
|
|
import process.service.writer.TaskDetailWriter;
|
import process.service.writer.TodoTaskWriter;
|
import foundation.callable.Callable;
|
import foundation.data.Entity;
|
import foundation.persist.sql.NamedSQL;
|
import foundation.persist.sql.SQLRunner;
|
|
public class TaskService extends Service {
|
|
HttpServletRequest request;
|
org.activiti.engine.TaskService taskService;
|
private HttpSession session;
|
private RuntimeService runtimeService;
|
private RepositoryService repositoryService;
|
|
public TaskService(Callable context) throws Exception {
|
super(context);
|
request = context.getRequest();
|
session = request.getSession();
|
repositoryService = processEngine.getRepositoryService();
|
taskService = processEngine.getTaskService();
|
runtimeService = processEngine.getRuntimeService();
|
|
}
|
|
@Override
|
public void call(String operator) throws Exception {
|
if ("getTodoTask".equalsIgnoreCase(operator)) {
|
getTodoTask();
|
}
|
else if ("claimTask".equalsIgnoreCase(operator)) {
|
claimTask();
|
}
|
else if ("completeTask".equalsIgnoreCase(operator)) {
|
completeTask();
|
}
|
else if ("getAllTask".equalsIgnoreCase(operator)) {
|
getAllTask();
|
}
|
else if ("getAllTask".equalsIgnoreCase(operator)) {
|
getAllTask();
|
}
|
|
else if ("getTaskDetail".equalsIgnoreCase(operator)) {
|
getTaskDetail();
|
}
|
else if ("getModelId".equalsIgnoreCase(operator)) {
|
getModelId();
|
}
|
}
|
|
private void getModelId() throws Exception {
|
String taskId = request.getParameter("taskId");
|
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
|
String processDefinitionId = task.getProcessDefinitionId();
|
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
String resourceName = processDefinition.getResourceName();
|
InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName);
|
|
response.setContentType(request.getServletContext().getMimeType(resourceName));
|
//设置Content-Disposition
|
response.setHeader("Content-Disposition", "attachment;filename="+resourceName);
|
byte[] b = new byte[1024];
|
int len = -1;
|
|
while ((len = resourceAsStream.read(b, 0, 1024)) != -1) {
|
response.getOutputStream().write(b, 0, len);
|
}
|
}
|
|
private void getTaskDetail() throws Exception {
|
|
String taskId = request.getParameter("taskId");
|
Map<String, Object> variables = taskService.getVariables(taskId);
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getTaskDetail");
|
namedSQL.setParam("taskid", taskId);
|
Entity entity = SQLRunner.getEntity(namedSQL);
|
|
resultPool.addValue("detail", new Object[]{entity,variables},new TaskDetailWriter());
|
}
|
|
private void getAllTask() {
|
User user = (User) session.getAttribute("user");
|
if (user == null) {
|
error(" user is empty");
|
return;
|
}
|
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
|
List<Task> list = taskService.createTaskQuery().list();
|
for (Task task : list) {
|
String processDefinitionId = task.getProcessDefinitionId();
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
|
Map<String, String> singleTask = packageTaskInfo( task, processDefinition);
|
// singleTask.put("status", "待办理");
|
result.add(singleTask);
|
|
}
|
if (result.size()==0) {
|
resultPool.addValue("no all task");
|
}else {
|
resultPool.addValue("allTask", result, new TodoTaskWriter());
|
}
|
}
|
|
private void claimTask() {
|
String taskId = request.getParameter("taskId");
|
User user = (User) session.getAttribute("user");
|
if (user == null) {
|
error("user is empty or tiomeout");
|
return;
|
}
|
|
taskService.claim(taskId, user.getId());
|
resultPool.setMessage("Task is claimed");
|
}
|
|
private void completeTask() {
|
Map<String, Object> variables = new LinkedHashMap<String, Object>();
|
String taskId = request.getParameter("taskid");
|
String passName = request.getParameter("passName");
|
|
User user = (User) session.getAttribute("user");
|
if (user == null) {
|
error("user is empty or tiomeout");
|
return;
|
}
|
|
if (passName.equalsIgnoreCase("reportBack")) {
|
String real_end = request.getParameter("real_end");
|
String real_start = request.getParameter("real_start");
|
variables.put("realityStartTime", real_start);
|
variables.put("realityEndTime", real_end);
|
}
|
else if (passName.equalsIgnoreCase("modifyApply")) {
|
String reapplysString = request.getParameter("reApply");
|
boolean reappley = Boolean.parseBoolean(reapplysString);
|
if (!reappley) {
|
variables.put("reApply", reappley);
|
}
|
else {
|
variables.put("reApply", reappley);
|
String leaveType = request.getParameter("leaveType");
|
String startTime =request.getParameter("startTime");
|
String endTime =request.getParameter("endTime");
|
String reason =request.getParameter("reason");
|
variables.put("leaveType", leaveType);
|
variables.put("startTime", startTime);
|
variables.put("endTime", endTime);
|
variables.put("reason", reason);
|
}
|
}
|
else {
|
boolean passValue = Boolean.parseBoolean(request.getParameter("passValue"));
|
String reasonName = request.getParameter("reasonName");
|
String reasonValue = request.getParameter("reasonValue");
|
variables.put(passName, passValue);
|
variables.put(reasonName, reasonValue);
|
}
|
|
try {
|
taskService.complete(taskId, variables);
|
resultPool.setMessage("办理成功");
|
} catch (Exception e) {
|
e.printStackTrace();
|
resultPool.setMessage("办理任务失败.");
|
logger.debug("can not complete task");
|
}
|
|
}
|
private void getTodoTask() {
|
User user = (User) session.getAttribute("user");
|
if (user == null) {
|
error(" user is empty");
|
return;
|
}
|
|
// taskOwner(user.getId())
|
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
|
|
List<Task> list = taskService.createTaskQuery().taskAssignee(user.getId()).active().list();
|
|
for (Task task : list) {
|
String processDefinitionId = task.getProcessDefinitionId();
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
|
Map<String, String> singleTask = packageTaskInfo( task, processDefinition);
|
singleTask.put("status", "待办理");
|
result.add(singleTask);
|
}
|
|
List<Task> toClaimList = taskService.createTaskQuery().taskCandidateUser(user.getId()).active().list();
|
for (Task task : toClaimList) {
|
String processDefinitionId = task.getProcessDefinitionId();
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
|
Map<String, String> singleTask = packageTaskInfo( task, processDefinition);
|
singleTask.put("status", "待接收");
|
result.add(singleTask);
|
}
|
|
resultPool.addValue("todoTask", result, new TodoTaskWriter());
|
|
|
}
|
|
private Map<String, String> packageTaskInfo(Task task, ProcessDefinition processDefinition) {
|
Map<String, String> singleTask = new HashMap<String, String>();
|
Map<String,Object> taskVariables = taskService.getVariables(task.getId());
|
singleTask.put("sid", (String)taskVariables.get("applyUserId"));
|
singleTask.put("id", task.getId());
|
singleTask.put("name", task.getName());
|
singleTask.put("isSuspension", String.valueOf(task.isSuspended()));
|
singleTask.put("createTime", new SimpleDateFormat("yyyy-MM-dd hh:mm").format(task.getCreateTime()));
|
singleTask.put("pdname", processDefinition.getName());
|
singleTask.put("pdversion", Integer.toString(processDefinition.getVersion()));
|
singleTask.put("pid", task.getProcessInstanceId());
|
return singleTask;
|
}
|
}
|