package com.norteksoft.task.web;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.beans.factory.annotation.Autowired;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.api.entity.Menu;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.product.util.JsTreeUtils;
import com.norteksoft.product.util.JsonParser;
import com.norteksoft.product.util.PageUtils;
import com.norteksoft.product.util.SystemUrls;
import com.norteksoft.product.util.tree.ZTreeNode;
import com.norteksoft.product.web.struts2.CrudActionSupport;
import com.norteksoft.product.web.struts2.Struts2Utils;
import com.norteksoft.task.base.enumeration.TaskCategory;
import com.norteksoft.task.base.enumeration.TaskType;
import com.norteksoft.task.entity.HistoryWorkflowTask;
import com.norteksoft.task.entity.TaskMark;
import com.norteksoft.task.service.HistoryWorkflowTaskManager;
@Namespace("/task")
@ParentPackage("default")
@Results( { @Result(name = CrudActionSupport.RELOAD, location = "history-workflow-task", type = "redirectAction")})
public class HistoryWorkflowTaskAction extends CrudActionSupport<HistoryWorkflowTask>{
private static final long serialVersionUID = 4658506181455886084L;
private Long id;
private HistoryWorkflowTask historyWorkflowTask;
private Page<HistoryWorkflowTask> page = new Page<HistoryWorkflowTask>(0, true);
private String taskCategory;//任务状态,其值为:complete,cancel
private String taskType;//任务类别:默认类别,流程名称,流程自定义类别
private String typeName;
private String ids;
private TaskMark taskMarks;//标识的颜色
private String taskUrl;
@Autowired
private HistoryWorkflowTaskManager historyWorkflowTaskManager;
@Override
public String delete() throws Exception {
// TODO Auto-generated method stub
return null;
}
@Override
@Action("history-workflow-task-input")
public String input() throws Exception {
if(!historyWorkflowTask.getRead()){
historyWorkflowTask.setRead(true);
historyWorkflowTaskManager.saveHistoryWorkflowTask(historyWorkflowTask);
}
taskUrl = getTaskUrl(historyWorkflowTask);
return INPUT;
}
private String getTaskUrl(HistoryWorkflowTask historyWorkflowTask){
String url=historyWorkflowTask.getUrl();
if(!historyWorkflowTask.getUrl().contains("http://")&&historyWorkflowTask.getUrl().contains("?")){
url=SystemUrls.getSystemUrl(StringUtils.substringBefore(historyWorkflowTask.getUrl(), "/"))+StringUtils.substring(historyWorkflowTask.getUrl(), historyWorkflowTask.getUrl().indexOf('/'))+historyWorkflowTask.getSourceTaskId();
}else if(!historyWorkflowTask.getUrl().contains("http://")){
url=SystemUrls.getSystemUrl(StringUtils.substringBefore(historyWorkflowTask.getUrl(), "/"))+StringUtils.substring(historyWorkflowTask.getUrl(), historyWorkflowTask.getUrl().indexOf('/'))+"?taskId="+historyWorkflowTask.getSourceTaskId();
}
//重新加载页面样式
if(!url.contains("_r=1")){
if(url.contains("?")){
url=url+"&_r=1";
}else{
url=url+"?_r=1";
}
}
return url;
}
/**
* 已完成任务列表
*/
@Override
@Action("history-workflow-task")
public String list() throws Exception {
Menu menu=ApiFactory.getMmsService().getTopMenu("historyWorkflowTask");
if(menu!=null){
Struts2Utils.getRequest().setAttribute("menuId", menu.getId());
}
taskCategory="complete";
if("default_type".equals(typeName)||"custom_type".equals(typeName)||"workflow_name".equals(typeName)){
typeName="";
}
if(TaskType.WORKFLOW_NAME.toString().equalsIgnoreCase(taskType)){
if(page.getPageSize()>1){
historyWorkflowTaskManager.getCompletedTasksByGroupName(page,typeName);
ApiFactory.getBussinessLogService().log("历史事宜",
"已完成任务列表",
ContextUtils.getSystemId("task"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}else if(TaskType.CUSTOM_TYPE.toString().equalsIgnoreCase(taskType)){
if(page.getPageSize()>1){
historyWorkflowTaskManager.getCompletedTasksByCustomType(page,typeName);
ApiFactory.getBussinessLogService().log("历史事宜",
"已完成任务列表",
ContextUtils.getSystemId("task"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}else{
if(page.getPageSize()>1){
historyWorkflowTaskManager.getCompletedTasksByUserType(page,typeName);
ApiFactory.getBussinessLogService().log("历史事宜",
"已完成任务列表",
ContextUtils.getSystemId("task"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}
return "history-workflow-task";
}
/**
* 已取消任务列表
*/
@Action("history-workflow-task-canceled")
public String canceledTasks() throws Exception{
Menu menu=ApiFactory.getMmsService().getTopMenu("historyWorkflowTask");
if(menu!=null){
Struts2Utils.getRequest().setAttribute("menuId", menu.getId());
}
if("default_type".equals(typeName)||"custom_type".equals(typeName)||"workflow_name".equals(typeName)){
typeName="";
}
if(TaskType.WORKFLOW_NAME.toString().equalsIgnoreCase(taskType)){
if(page.getPageSize()>1){
historyWorkflowTaskManager.getCancelTasksByGroupName(page,typeName);
ApiFactory.getBussinessLogService().log("历史事宜",
"已取消任务列表",
ContextUtils.getSystemId("task"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}else if(TaskType.CUSTOM_TYPE.toString().equalsIgnoreCase(taskType)){
if(page.getPageSize()>1){
historyWorkflowTaskManager.getCancelTasksByCustomType(page,typeName);
ApiFactory.getBussinessLogService().log("历史事宜",
"已取消任务列表",
ContextUtils.getSystemId("task"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}else{
if(page.getPageSize()>1){
historyWorkflowTaskManager.getCanceledTasksByUserType(page,typeName);
ApiFactory.getBussinessLogService().log("历史事宜",
"已取消任务列表",
ContextUtils.getSystemId("task"));
this.renderText(PageUtils.pageToJson(page));
return null;
}
}
return "history-workflow-task-canceled";
}
/**
* 标记任务
* @return
* @throws Exception
*/
@Action("history-workflow-task-mark")
public String mark() throws Exception{
String[] idStr=ids.split(",");
for(int i=0;i<idStr.length;i++){
historyWorkflowTaskManager.changeTaskMark(Long.parseLong(idStr[i]),taskMarks);
}
ApiFactory.getBussinessLogService().log("历史事宜",
"标记任务",
ContextUtils.getSystemId("task"));
if(TaskCategory.COMPLETE.equals(taskCategory)){
return list();
}else {
return canceledTasks();
}
}
@Override
protected void prepareModel() throws Exception {
if(id==null){
historyWorkflowTask=new HistoryWorkflowTask();
}else{
historyWorkflowTask=historyWorkflowTaskManager.getHistoryWorkflowTask(id);
}
}
@Override
public String save() throws Exception {
// TODO Auto-generated method stub
return null;
}
/**
* 任务类型树
* @return
* @throws Exception
*/
@Action("history-task-type-tree")
public String typeTree() throws Exception{
List<ZTreeNode> treeNodes = new ArrayList<ZTreeNode>();
List<Object[]> typeInfos=null;
if(TaskType.WORKFLOW_NAME.toString().equalsIgnoreCase(taskType)){
typeInfos=historyWorkflowTaskManager.getGroupNames(taskCategory);
ZTreeNode root = new ZTreeNode("workflow_name","0","流程名称", "true", "false", "", "", "folder", "");
treeNodes.add(root);
typeTree(typeInfos,treeNodes,"workflow_name");
}else if(TaskType.CUSTOM_TYPE.toString().equalsIgnoreCase(taskType)){
typeInfos=historyWorkflowTaskManager.getCustomTypes(taskCategory);
ZTreeNode root = new ZTreeNode("custom_type","0","流程自定义类别", "true", "false", "", "", "folder", "");
treeNodes.add(root);
typeTree(typeInfos,treeNodes,"custom_type");
}else{
typeInfos=historyWorkflowTaskManager.getTypeInfos(taskCategory);
ZTreeNode root = new ZTreeNode("default_type","0","默认类别", "true", "false", "", "", "folder", "");
treeNodes.add(root);
typeTree(typeInfos,treeNodes,"default_type");
}
this.renderText(JsonParser.object2Json(treeNodes));
return null;
}
private void typeTree(List<Object[]> typeInfos,List<ZTreeNode> treeNodes,String parentId){
Integer taskNum=historyWorkflowTaskManager.getAllTaskNumByUser(taskCategory);
StringBuilder tree=new StringBuilder();
tree.append("[");
if(TaskCategory.COMPLETE.equals(taskCategory)){
ZTreeNode root = new ZTreeNode("complete_task",parentId,"所有事宜", "false", "false", "", "", "folder", "");
treeNodes.add(root);
}else if(TaskCategory.CANCEL.equals(taskCategory)){
ZTreeNode root = new ZTreeNode("cancel_task",parentId,"所有事宜", "false", "false", "", "", "folder", "");
treeNodes.add(root);
}else{
ZTreeNode root = new ZTreeNode("active_task",parentId,"所有事宜("+taskNum+")", "false", "false", "", "", "folder", "");
treeNodes.add(root);
}
for(Object[] objs:typeInfos){
String typeName=(String)objs[0];
Long countTask=(Long)objs[1];
if(StringUtils.isNotEmpty(typeName)){
if(TaskCategory.COMPLETE.equals(taskCategory)||TaskCategory.CANCEL.equals(taskCategory)){
ZTreeNode root = new ZTreeNode(typeName,parentId,typeName, "false", "false", "", "", "folder", "");
treeNodes.add(root);
}else{
ZTreeNode root = new ZTreeNode(typeName,parentId,typeName+"("+countTask+")", "false", "false", "", "", "folder", "");
treeNodes.add(root);
}
}
}
}
public HistoryWorkflowTask getModel() {
return historyWorkflowTask;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public HistoryWorkflowTask getHistoryWorkflowTask() {
return historyWorkflowTask;
}
public void setHistoryWorkflowTask(HistoryWorkflowTask historyWorkflowTask) {
this.historyWorkflowTask = historyWorkflowTask;
}
public Page<HistoryWorkflowTask> getPage() {
return page;
}
public void setPage(Page<HistoryWorkflowTask> page) {
this.page = page;
}
public String getTaskCategory() {
return taskCategory;
}
public void setTaskCategory(String taskCategory) {
this.taskCategory = taskCategory;
}
public String getTaskType() {
return taskType;
}
public void setTaskType(String taskType) {
this.taskType = taskType;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
public String getIds() {
return ids;
}
public void setIds(String ids) {
this.ids = ids;
}
public TaskMark getTaskMarks() {
return taskMarks;
}
public void setTaskMarks(TaskMark taskMarks) {
this.taskMarks = taskMarks;
}
public String getTaskUrl() {
return taskUrl;
}
}