package com.mossle.humantask.web;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import com.mossle.api.humantask.HumanTaskConnector;
import com.mossle.api.humantask.HumanTaskConstants;
import com.mossle.api.humantask.HumanTaskDTO;
import com.mossle.api.tenant.TenantHolder;
import com.mossle.core.auth.CurrentUserHolder;
import com.mossle.core.export.Exportor;
import com.mossle.core.mapper.BeanMapper;
import com.mossle.core.mapper.JsonMapper;
import com.mossle.core.page.Page;
import com.mossle.core.query.PropertyFilter;
import com.mossle.core.spring.MessageHelper;
import com.mossle.humantask.persistence.domain.TaskInfo;
import com.mossle.humantask.persistence.manager.TaskInfoManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
@RequestMapping("humantask")
public class TaskWorkspaceController {
private static Logger logger = LoggerFactory
.getLogger(TaskWorkspaceController.class);
private TaskInfoManager taskInfoManager;
private Exportor exportor;
private BeanMapper beanMapper = new BeanMapper();
private JsonMapper jsonMapper = new JsonMapper();
private MessageHelper messageHelper;
private CurrentUserHolder currentUserHolder;
private JdbcTemplate jdbcTemplate;
private HumanTaskConnector humanTaskConnector;
private TenantHolder tenantHolder;
/**
* 待办任务.
*/
@RequestMapping("workspace-personalTasks")
public String personalTasks(@ModelAttribute Page page,
@RequestParam Map<String, Object> parameterMap, Model model) {
String userId = currentUserHolder.getUserId();
String tenantId = tenantHolder.getTenantId();
page = humanTaskConnector.findPersonalTasks(userId, tenantId,
page.getPageNo(), page.getPageSize());
// List<PropertyFilter> propertyFilters = PropertyFilter
// .buildFromMap(parameterMap);
// propertyFilters.add(new PropertyFilter("EQS_status", "active"));
// propertyFilters.add(new PropertyFilter("EQS_assignee", userId));
// page = taskInfoManager.pagedQuery(page, propertyFilters);
model.addAttribute("page", page);
return "humantask/workspace-personalTasks";
}
/**
* 待领任务.
*/
@RequestMapping("workspace-groupTasks")
public String groupTasks(@ModelAttribute Page page,
@RequestParam Map<String, Object> parameterMap, Model model) {
String userId = currentUserHolder.getUserId();
String tenantId = tenantHolder.getTenantId();
page = humanTaskConnector.findGroupTasks(userId, tenantId,
page.getPageNo(), page.getPageSize());
model.addAttribute("page", page);
return "humantask/workspace-groupTasks";
}
/**
* 已办任务.
*/
@RequestMapping("workspace-historyTasks")
public String historyTasks(@ModelAttribute Page page,
@RequestParam Map<String, Object> parameterMap, Model model) {
String userId = currentUserHolder.getUserId();
String tenantId = tenantHolder.getTenantId();
page = humanTaskConnector.findFinishedTasks(userId, tenantId,
page.getPageNo(), page.getPageSize());
model.addAttribute("page", page);
return "humantask/workspace-historyTasks";
}
/**
* 代理中的任务.
*/
@RequestMapping("workspace-delegatedTasks")
public String delegatedTasks(@ModelAttribute Page page,
@RequestParam Map<String, Object> parameterMap, Model model) {
String userId = currentUserHolder.getUserId();
String tenantId = tenantHolder.getTenantId();
page = humanTaskConnector.findDelegateTasks(userId, tenantId,
page.getPageNo(), page.getPageSize());
model.addAttribute("page", page);
return "humantask/workspace-delegatedTasks";
}
/**
* 领取.
*/
@RequestMapping("workspace-claimTask")
public String claimTask(@RequestParam("taskId") Long taskId) {
String userId = currentUserHolder.getUserId();
TaskInfo taskInfo = taskInfoManager.get(taskId);
taskInfo.setAssignee(userId);
taskInfoManager.save(taskInfo);
return "redirect:/humantask/workspace-personalTasks.do";
}
/**
* 转发已结流程.
*/
@RequestMapping("workspace-transferTask")
public String transferTask(@RequestParam("humanTaskId") String humanTaskId,
@RequestParam("assignee") String assignee) {
String tenantId = tenantHolder.getTenantId();
// 1. 找到任务
HumanTaskDTO historyHumanTask = humanTaskConnector
.findHumanTask(humanTaskId);
// 2. 创建一个任务,设置为未读,转发状态
HumanTaskDTO humanTaskDto = humanTaskConnector.createHumanTask();
humanTaskDto.setProcessInstanceId(historyHumanTask
.getProcessInstanceId());
humanTaskDto.setPresentationSubject(historyHumanTask
.getPresentationSubject());
humanTaskDto.setAssignee(assignee);
humanTaskDto.setTenantId(tenantId);
humanTaskDto.setParentId(historyHumanTask.getId());
// TODO: 还没有字段
// humanTaskDto.setCopyStatus("unread");
humanTaskDto.setCatalog(HumanTaskConstants.CATALOG_COPY);
humanTaskDto.setAction("unread");
humanTaskDto.setBusinessKey(historyHumanTask.getBusinessKey());
humanTaskDto.setProcessDefinitionId(historyHumanTask
.getProcessDefinitionId());
try {
// TODO: 等到流程支持viewFormKey,才能设置。目前做不到
humanTaskDto.setForm(historyHumanTask.getForm());
humanTaskDto.setName(historyHumanTask.getName());
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
humanTaskConnector.saveHumanTask(humanTaskDto);
// 3. 把任务分配给对应的人员
return "redirect:/humantask/workspace-historyTasks.do#";
}
// ~ ======================================================================
@Resource
public void setTaskInfoManager(TaskInfoManager taskInfoManager) {
this.taskInfoManager = taskInfoManager;
}
@Resource
public void setExportor(Exportor exportor) {
this.exportor = exportor;
}
@Resource
public void setMessageHelper(MessageHelper messageHelper) {
this.messageHelper = messageHelper;
}
@Resource
public void setCurrentUserHolder(CurrentUserHolder currentUserHolder) {
this.currentUserHolder = currentUserHolder;
}
@Resource
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Resource
public void setHumanTaskConnector(HumanTaskConnector humanTaskConnector) {
this.humanTaskConnector = humanTaskConnector;
}
@Resource
public void setTenantHolder(TenantHolder tenantHolder) {
this.tenantHolder = tenantHolder;
}
}