package process.service;
|
|
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 oracle.net.aso.f;
|
|
import org.activiti.engine.RepositoryService;
|
import org.activiti.engine.TaskService;
|
import org.activiti.engine.history.HistoricProcessInstance;
|
import org.activiti.engine.history.HistoricVariableInstance;
|
import org.activiti.engine.repository.ProcessDefinition;
|
import org.activiti.engine.task.Task;
|
|
import process.ProcessUser;
|
import process.service.writer.TodoTaskWriter;
|
import foundation.callable.Callable;
|
import foundation.data.Entity;
|
import foundation.persist.Field;
|
import foundation.persist.TableMeta;
|
import foundation.persist.sql.NamedSQL;
|
import foundation.persist.sql.SQLRunner;
|
|
public class HistoryService extends Service {
|
|
private HttpServletRequest request;
|
private org.activiti.engine.HistoryService historyService;
|
private HttpSession session;
|
private RepositoryService repositoryService;
|
private TaskService taskService;
|
|
public HistoryService(Callable context) throws Exception {
|
super(context);
|
request = context.getRequest();
|
session = request.getSession();
|
historyService = processEngine.getHistoryService();
|
repositoryService = processEngine.getRepositoryService();
|
taskService = processEngine.getTaskService();
|
|
}
|
|
@Override
|
public void call(String operator) throws Exception {
|
if ("getMyRunTask".equalsIgnoreCase(operator)) {
|
getMyRunTask();
|
}
|
else if ("getHistoryTask".equalsIgnoreCase(operator)) {
|
getHistoryTask();
|
}
|
else if ("getAllTask".equalsIgnoreCase(operator)) {
|
getAllTask();
|
}
|
else if ("getTaskDetail".equalsIgnoreCase(operator)) {
|
getTaskDetail();
|
}
|
}
|
|
|
private void getTaskDetail() throws Exception {
|
String processInstanceId = request.getParameter("processInstanceId");
|
String tableName = null ;
|
String userId = null ;
|
LinkedHashMap<String,String> variableMap = new LinkedHashMap<String, String>();
|
List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().processInstanceId(processInstanceId).list();
|
for (HistoricVariableInstance historicVariableInstance : list) {
|
String variableName = historicVariableInstance.getVariableName();
|
if (variableName.equalsIgnoreCase("tablename")) {
|
tableName = (String) historicVariableInstance.getValue();
|
continue;
|
}
|
if (variableName.equalsIgnoreCase("applyUserId")) {
|
userId = (String) historicVariableInstance.getValue();
|
continue;
|
}
|
variableMap.put(variableName, (String) historicVariableInstance.getValue());
|
}
|
if (tableName != null && userId != null) {
|
NamedSQL namedSQL = NamedSQL.getInstance("");
|
namedSQL.setParam("user_id", userId);
|
Entity entity = SQLRunner.getEntity(namedSQL);
|
TableMeta tableMeta = entity.getTableMeta();
|
List<Field> fields = tableMeta.getFields();
|
for (Field field : fields) {
|
String fieldValue = entity.getString(field.getName());
|
variableMap.put(field.getName(), fieldValue);
|
}
|
}
|
resultPool.addValue(variableMap);
|
}
|
|
private void getAllTask() {
|
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
|
ProcessUser user = (ProcessUser) session.getAttribute("user");
|
List<HistoricProcessInstance> unFinishedTaskList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().list();
|
Map<String, String> singleTask = null ;
|
for (HistoricProcessInstance historicProcessInstance : unFinishedTaskList) {
|
String userId = historicProcessInstance.getStartUserId();
|
if (user.getId().equalsIgnoreCase(userId)) {
|
if (historicProcessInstance.getEndTime() == null) {
|
Task Assigneetask = taskService.createTaskQuery().taskAssignee(userId).processInstanceId(historicProcessInstance.getId()).singleResult();
|
if (Assigneetask != null) {
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult();
|
singleTask = packageTaskInfo( Assigneetask, processDefinition);
|
singleTask.put("status", "待办理");
|
}
|
Task CandiDateTask = taskService.createTaskQuery().taskCandidateUser(userId).processInstanceId(historicProcessInstance.getId()).singleResult();
|
if (CandiDateTask != null) {
|
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult();
|
singleTask = packageTaskInfo( CandiDateTask, processDefinition);
|
singleTask.put("status", "待接收");
|
}
|
}
|
else {
|
String processDefinitionId = historicProcessInstance.getProcessDefinitionId();
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
singleTask = packageTaskInfo(new SimpleDateFormat("yyyy-MM-dd hh:mm"),historicProcessInstance, processDefinition);
|
singleTask.put("status", "已结束");
|
}
|
|
result.add(singleTask);
|
}
|
}
|
if (result.size()==0) {
|
resultPool.addValue("no myUnFinishedTask task");
|
}else {
|
resultPool.addValue("myUnFinishedTask", result, new TodoTaskWriter());
|
}
|
}
|
|
private void getHistoryTask() {
|
ProcessUser user = (ProcessUser) session.getAttribute("user");
|
List<HistoricProcessInstance> unFinishedTaskList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().finished().list();
|
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
|
for (HistoricProcessInstance historicProcessInstance : unFinishedTaskList) {
|
String userId = historicProcessInstance.getStartUserId();
|
if (user.getId().equalsIgnoreCase(userId)) {
|
String processDefinitionId = historicProcessInstance.getProcessDefinitionId();
|
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
Map<String, String> singleTask = packageTaskInfo(new SimpleDateFormat("yyyy-MM-dd hh:mm"),historicProcessInstance, processDefinition);
|
singleTask.put("status", "已结束");
|
result.add(singleTask);
|
}
|
}
|
if (result.size()==0) {
|
resultPool.addValue("no history task");
|
}else {
|
resultPool.addValue("historytask", result, new TodoTaskWriter());
|
}
|
}
|
|
private void getMyRunTask() {
|
List<Map<String, String>> result = new ArrayList<Map<String, String>>();
|
ProcessUser user = (ProcessUser) session.getAttribute("user");
|
List<HistoricProcessInstance> unFinishedTaskList = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().unfinished().list();
|
Map<String, String> singleTask = null ;
|
for (HistoricProcessInstance historicProcessInstance : unFinishedTaskList) {
|
String userId = historicProcessInstance.getStartUserId();
|
if (user.getId().equalsIgnoreCase(userId)) {
|
|
Task Assigneetask = taskService.createTaskQuery().taskAssignee(userId).processInstanceId(historicProcessInstance.getId()).singleResult();
|
if (Assigneetask != null) {
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult();
|
singleTask = packageTaskInfo( Assigneetask, processDefinition);
|
singleTask.put("status", "待办理");
|
}
|
Task CandiDateTask = taskService.createTaskQuery().taskCandidateUser(userId).processInstanceId(historicProcessInstance.getId()).singleResult();
|
if (CandiDateTask != null) {
|
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(historicProcessInstance.getProcessDefinitionId()).singleResult();
|
singleTask = packageTaskInfo( CandiDateTask, processDefinition);
|
singleTask.put("status", "待接收");
|
}
|
|
result.add(singleTask);
|
}
|
}
|
if (result.size()==0) {
|
resultPool.addValue("no myUnFinishedTask task");
|
}else {
|
resultPool.addValue("myUnFinishedTask", result, new TodoTaskWriter());
|
}
|
}
|
private Map<String, String> packageTaskInfo(SimpleDateFormat sdf, HistoricProcessInstance historicProcessInstance, ProcessDefinition processDefinition) {
|
ProcessUser user = (ProcessUser)session.getAttribute("user");
|
Map<String, String> singleTask = new HashMap<String, String>();
|
singleTask.put("sid", user.getId());
|
singleTask.put("id", historicProcessInstance.getId());
|
singleTask.put("name", "已结束");
|
singleTask.put("createTime", sdf.format(historicProcessInstance.getStartTime()));
|
singleTask.put("pdname", processDefinition.getName());
|
singleTask.put("pdversion", Integer.toString(processDefinition.getVersion()));
|
singleTask.put("pid", historicProcessInstance.getId());
|
return singleTask;
|
}
|
|
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("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;
|
}
|
}
|