package com.norteksoft.task.service;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.norteksoft.acs.entity.organization.User;
import com.norteksoft.product.api.ApiFactory;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.task.base.enumeration.TaskCategory;
import com.norteksoft.task.base.enumeration.TaskState;
import com.norteksoft.task.dao.TaskDao;
import com.norteksoft.task.entity.Task;
import com.norteksoft.task.entity.TaskMark;
@Service
@Transactional
public class TaskManager {
private Log log = LogFactory.getLog(TaskManager.class);
private TaskDao taskDao;
@Autowired
public void setTaskDao(TaskDao taskDao) {
this.taskDao = taskDao;
}
@Transactional(readOnly=false)
public void saveTask(Task task){
log.debug("*** saveTask 方法开始");
log.debug("*** Received parameter:" + task);
taskDao.save(task);
log.debug("*** saveTask 方法结束");
}
public List<Task> getPersonalTasks(String loginName, Long companyId, Integer size, String order){
log.debug("*** getPersonalTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("loginName:").append(loginName)
.append("companyId:").append(companyId)
.append("]").toString());
StringBuilder sql = new StringBuilder("from Task task where task.companyId=? and task.transactor=? and (task.active=? or task.active=? or task.active=? or task.active=?) and task.paused=? and task.visible=?");
if(StringUtils.isNotEmpty(order)){
sql.append(" order by task.displayOrder asc,task."+order+" desc");
}else{
sql.append(" order by task.displayOrder asc,task.createdTime desc");
}
Page<Task> tasks = new Page<Task>(size);
taskDao.findPage(tasks,sql.toString(),companyId, loginName, TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.DRAW_WAIT.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false,true);
log.debug("*** getPersonalTasks 方法结束");
return tasks.getResult();
}
public List<Task> getDetailTasksByUserType(Long companyId, String loginName, String typeName, Integer size, String order){
log.debug("*** getPersonalTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("loginName:").append(loginName)
.append("companyId:").append(companyId)
.append("]").toString());
StringBuilder sql = new StringBuilder("from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=? or t.active=?) and t.paused=? and t.category=?");
if(StringUtils.isNotEmpty(order)){
sql.append(" order by t.displayOrder asc,t."+order+" desc");
}else{
sql.append(" order by t.displayOrder asc,t.createdTime desc");
}
Page<Task> tasks = new Page<Task>(size);
taskDao.findPage(tasks,sql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false,typeName);
log.debug("*** getPersonalTasks 方法结束");
return tasks.getResult();
}
public List<Task> getPersonalTasks(String loginName, Long companyId, Integer size){
log.debug("*** saveTask 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("loginName:").append(loginName)
.append("companyId:").append(companyId)
.append("size:").append(size)
.append("]").toString());
Page<Task> tasks = new Page<Task>(size);
taskDao.findPage(tasks, "from Task task where task.visible=? and task.companyId=? and task.transactor=? and (task.active=? or task.active=? or task.active=?) order by task.createdTime desc",
true, companyId, loginName, TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex());
log.debug("*** getPersonalTasks 方法结束");
return tasks.getResult();
}
public List<Task> getPersonalCompletedTasks(String loginName, Long companyId){
log.debug("*** getPersonalCompletedTasks 方法开始");
log.debug(new StringBuilder("*** Received parameter:[")
.append("loginName:").append(loginName)
.append("companyId:").append(companyId)
.append("]").toString());
List<Task> tasks = taskDao.find("from Task task where task.companyId=? and task.transactor=? and (task.active=? or task.active=?)",
companyId, loginName, TaskState.COMPLETED.getIndex(), TaskState.CANCELLED.getIndex());
log.debug("*** getPersonalCompletedTasks 方法结束");
return tasks;
}
public Task getTaskById(Long taskId){
return taskDao.get(taskId);
}
//改变任务标识
public void changeTaskMark(Long taskId,TaskMark taskMark) {
Task task = getTaskById(taskId);
switch(taskMark) {
case RED:
task.setTaskMark(TaskMark.RED);
break;
case BLUE:
task.setTaskMark(TaskMark.BLUE);
break;
case YELLOW:
task.setTaskMark(TaskMark.YELLOW);
break;
case GREEN:
task.setTaskMark(TaskMark.GREEN);
break;
case ORANGE:
task.setTaskMark(TaskMark.ORANGE);
break;
case PURPLE:
task.setTaskMark(TaskMark.PURPLE);
break;
case CANCEL:
task.setTaskMark(TaskMark.CANCEL);
break;
default:
}
taskDao.save(task);
}
/**
* 完成普通任务
* @param task
*/
public void completeCommonTask(Task task){
task.setActive(TaskState.COMPLETED.getIndex());
saveTask(task);
}
/**
* 创建普通任务
* @param url
* @param name
* @param title
* @param category
* @param transactor
*/
public void createTask(String url,String name, String title, String category,String transactor){
Task task=new Task();
task.setActive(TaskState.WAIT_TRANSACT.getIndex());
task.setName(name);
if(StringUtils.isNotEmpty(url)){
task.setUrl(ContextUtils.getSystemCode()+url);
}else{
task.setUrl("task/task/common-task-input.htm?id=");
}
task.setTitle(title);
task.setCategory(category);
task.setWorkflowTask(false);
task.setTransactor(transactor);
com.norteksoft.product.api.entity.User user=ApiFactory.getAcsService().getUserByLoginName(transactor);
if(user!=null){
task.setTransactorName(user.getName());
}
saveTask(task);
try {
ApiFactory.getPortalService().addMessage("task", ContextUtils.getUserName(), ContextUtils.getLoginName(), task.getTransactor(),category, title, "/task/message-task.htm?id="+task.getId());
} catch (Exception e) {
e.printStackTrace();
}
}
public void createTask(String name,String title, String category,String transactor){
createTask(null, name,title,category,transactor);
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByUser(Long companyId, String loginName, Page<Task> page){
taskDao.getAllTasksByUser(companyId, loginName, page);
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByUserType(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getAllTasksByUserType(companyId, loginName, page,typeName);
}
/**
* 分页查询用户已完成任务
* @param companyId
* @param loginName
* @param page
*/
public void getCompletedTasksByUserType(Long companyId, String loginName, Page<Task> page,String typeName) {
taskDao.getCompletedTasksByUserType(companyId, loginName, page,typeName);
}
/**
* 分页查询用户已取消任务
* @param companyId
* @param loginName
* @param page
*/
public void getCanceledTasksByUserType(Long companyId, String loginName, Page<Task> page,String typeName) {
taskDao.getCanceledTasksByUserType(companyId, loginName, page,typeName);
}
/**
* 获得所有任务类型
* @param isComplete
* @return
*/
public List<Object[]> getTypeInfos(String taskCategory){
if(TaskCategory.COMPLETE.equals(taskCategory)){
return taskDao.getAllCompleteTaskTypeInfos(ContextUtils.getCompanyId(), ContextUtils.getLoginName());
}else if(TaskCategory.CANCEL.equals(taskCategory)){
return taskDao.getAllCancelTaskTypeInfos(ContextUtils.getCompanyId(), ContextUtils.getLoginName());
}else{
return taskDao.getAllActiveTaskTypeInfos(ContextUtils.getCompanyId(), ContextUtils.getLoginName());
}
}
/**
* 根据办理人登录名获得类型信息
* @param companyId
* @param longinName
* @return
*/
public List<Object[]> getTypeInfos(Long companyId,String longinName){
return taskDao.getAllActiveTaskTypeInfos(companyId,longinName);
}
/**
* 根据办理人获得任务数目
* @param isComplete
* @return
*/
public Integer getAllTaskNumByUser(String taskCategory){
if(TaskCategory.COMPLETE.equals(taskCategory)){
return taskDao.getAllCompleteTasksNum(ContextUtils.getCompanyId(), ContextUtils.getLoginName());
}else if(TaskCategory.CANCEL.equals(taskCategory)){
return taskDao.getAllCancelTasksNum(ContextUtils.getCompanyId(), ContextUtils.getLoginName());
}else{
return taskDao.getAllActiveTasksNum(ContextUtils.getCompanyId(), ContextUtils.getLoginName());
}
}
/**
* 根据办理人登录名获得所有待办事宜数目
* @param companyId
* @param longinName
* @return
*/
public Integer getAllTaskNumByUser(Long companyId,String longinName){
return taskDao.getAllActiveTasksNum(companyId,longinName);
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByGroupName(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getAllTasksByGroupName(companyId, loginName, page,typeName);
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByCustomType(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getAllTasksByCustomType(companyId, loginName, page,typeName);
}
/**
* 根据自定义类型分页查询用户所有已完成任务
* @param page
*/
public void getCompletedTasksByCustomType(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getCompletedTasksByCustomType(companyId, loginName, page,typeName);
}
/**
* 根据流程名称分页查询用户所有已完成任务
* @param page
*/
public void getCompletedTasksByGroupName(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getCompletedTasksByGroupName(companyId, loginName, page,typeName);
}
/**
* 根据自定义类型分页查询用户所有已取消任务
* @param page
*/
public void getCancelTasksByCustomType(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getCancelTasksByCustomType(companyId, loginName, page,typeName);
}
/**
* 根据流程名称分页查询用户所有已取消任务
* @param page
*/
public void getCancelTasksByGroupName(Long companyId, String loginName, Page<Task> page,String typeName){
taskDao.getCancelTasksByGroupName(companyId, loginName, page,typeName);
}
}