package com.norteksoft.task.dao;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Repository;
import com.norteksoft.product.orm.Page;
import com.norteksoft.product.orm.hibernate.HibernateDao;
import com.norteksoft.product.util.ContextUtils;
import com.norteksoft.task.base.enumeration.TaskState;
import com.norteksoft.task.entity.Task;
@Repository
public class TaskDao extends HibernateDao<Task, Long>{
public void findFinishTaskForPage(Page<Task> tasks, List<String> names, List<String> values) {
StringBuffer hql = new StringBuffer("from Task t where t.companyId = ? and (t.active=? or t.active=? or t.active=? or t.active=? or t.active=?) ");
List<Object> parameters = new ArrayList<Object>();
parameters.add(0, ContextUtils.getCompanyId());
parameters.add(1, TaskState.WAIT_TRANSACT.getIndex());
parameters.add(2, TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex());
parameters.add(3, TaskState.COMPLETED.getIndex());
parameters.add(4, TaskState.CANCELLED.getIndex());
parameters.add(5, TaskState.ASSIGNED.getIndex());
for (int i=0; i<names.size(); i++) {
String parameterName = names.get(i);
if("groupName".equals(parameterName) || "title".equals(parameterName)){
hql.append("and t." + parameterName + " like ? ");
parameters.add("%" + values.get(i) + "%");
}
if("creatorName".equals(parameterName)){
hql.append("and t." + parameterName + " = ? ");
parameters.add(values.get(i));
}
if("transactDate".equals(parameterName)){
hql.append("and (t." + parameterName + " between ? and ?) ");
List<Date> twoDays = getDays(values.get(i));
parameters.add(twoDays.get(0));
parameters.add(twoDays.get(1));
}
}
hql.append("order by t.id desc");
findPage(tasks, hql.toString(), parameters);
}
private List<Date> getDays(String value){
List<Date> betweenDay = new ArrayList<Date>(2);
DateFormat df = DateFormat.getDateInstance();
Date today = null;
try {
today = df.parse(value);
} catch (ParseException e) {
e.printStackTrace();
}
Date tomorrow = new Date();
tomorrow.setTime(today.getTime()+1*24*3600*1000);
betweenDay.add(0, today);
betweenDay.add(1, tomorrow);
return betweenDay;
}
public void findUNFinishTaskForPage(Page<Task> tasks, List<String> names, List<String> values) {
StringBuffer hql = new StringBuffer("from Task t where t.companyId = ? and (t.active=? or t.active=? or t.active=? or t.active=?) ");
List<Object> parameters = new ArrayList<Object>();
parameters.add(0, ContextUtils.getCompanyId());
parameters.add(1, TaskState.DRAW_WAIT.getIndex());
parameters.add(2, TaskState.WAIT_TRANSACT.getIndex());
parameters.add(3, TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex());
parameters.add(4, TaskState.WAIT_CHOICE_TACHE.getIndex());
for (int i=0; i<names.size(); i++) {
String parameterName = names.get(i);
if("groupName".equals(parameterName) || "title".equals(parameterName)){
hql.append("and t." + parameterName + " like ? ");
parameters.add("%" + values.get(i) + "%");
}
if("creatorName".equals(parameterName)){
hql.append("and t." + parameterName + " = ? ");
parameters.add(values.get(i));
}
}
hql.append("and t.transactor=?");
parameters.add(ContextUtils.getLoginName());
hql.append("order by t.id desc");
findPage(tasks, hql.toString(), parameters);
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByUser(Long companyId, String loginName, Page<Task> page){
String hql="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=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false);
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByUserType(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql="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=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false);
}else{
hql="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=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false,typeName);
}
}
/**
* 分页查询用户已完成任务
* @param companyId
* @param loginName
* @param page
*/
public void getCompletedTasksByUserType(Long companyId, String loginName, Page<Task> page,String typeName) {
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql="from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? and t.transactDate != null order by t.transactDate desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName, TaskState.COMPLETED.getIndex(),false);
}else{
hql="from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? and t.category=? and t.transactDate != null order by t.transactDate desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName, TaskState.COMPLETED.getIndex(),false,typeName);
}
}
/**
* 分页查询用户已取消任务
* @param companyId
* @param loginName
* @param page
*/
public void getCanceledTasksByUserType(Long companyId, String loginName, Page<Task> page,String typeName) {
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql="from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=?) and t.paused=? order by t.transactDate desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName, TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),TaskState.HAS_DRAW_OTHER.getIndex(),false);
}else{
hql="from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=?) and t.paused=? and t.category=? order by t.transactDate desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName, TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),TaskState.HAS_DRAW_OTHER.getIndex(),false,typeName);
}
}
/**
* 根据用户获得自己所有已完成的任务类型名称
* @param companyId
* @param loginName
* @return
*/
public List<Object[]> getAllCompleteTaskTypeInfos(Long companyId,String loginName){
String hql="select t.category,count(t.category) from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? and t.category!=null group by t.category";
return find(hql, companyId, loginName,TaskState.COMPLETED.getIndex(),false);
}
/**
* 根据用户获得自己所有已完成的任务类型名称
* @param companyId
* @param loginName
* @return
*/
public List<Object[]> getAllCancelTaskTypeInfos(Long companyId,String loginName){
String hql="select t.category,count(t.category) from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=?) and t.paused=? and t.category!=null group by t.category";
return find(hql, companyId, loginName,TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),false);
}
/**
* 根据用户获得自己所有类型名称
* @param companyId
* @param loginName
* @return
*/
public List<Object[]> getAllActiveTaskTypeInfos(Long companyId,String loginName){
String hql="select t.category,count(t.category) 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!=null group by t.category";
return find(hql, companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false);
}
/**
* 根据用户获得自己所有任务个数
* @param companyId
* @param loginName
* @return
*/
public Integer getAllActiveTasksNum(Long companyId,String loginName){
String hql="select count(t) 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=?";
Object obj=createQuery(hql, companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false).uniqueResult();
if(obj!=null)return Integer.parseInt(obj.toString());
return 0;
}
/**
* 根据用户获得自己所有已完成的任务类型名称
* @param companyId
* @param loginName
* @return
*/
public Integer getAllCompleteTasksNum(Long companyId,String loginName){
String hql="select count(t) from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=?";
Object obj=createQuery(hql, companyId, loginName,TaskState.COMPLETED.getIndex(),false).uniqueResult();
if(obj!=null)return Integer.parseInt(obj.toString());
return 0;
}
/**
* 根据用户获得自己所有已完成的任务类型名称
* @param companyId
* @param loginName
* @return
*/
public Integer getAllCancelTasksNum(Long companyId,String loginName){
String hql="select count(t) from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and ( t.active=? or t.active=?) and t.paused=?";
Object obj=createQuery(hql, companyId, loginName, TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),false).uniqueResult();
if(obj!=null)return Integer.parseInt(obj.toString());
return 0;
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByGroupName(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql=" 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=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false);
}else{
hql=" 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.groupName=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false,typeName);
}
}
/**
* 分页查询用户所有未完成任务
* @param page
*/
public void getAllTasksByCustomType(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql="select t from Task t,WorkflowTask wt where t.id=wt.id and t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=? or t.active=?) and t.paused=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false);
}else{
hql="select t from Task t,WorkflowTask wt where t.id=wt.id and 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 wt.customType=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.DRAW_WAIT.getIndex(), TaskState.WAIT_TRANSACT.getIndex(), TaskState.WAIT_DESIGNATE_TRANSACTOR.getIndex(),TaskState.WAIT_CHOICE_TACHE.getIndex(),false,typeName);
}
}
/**
* 根据自定义类型分页查询用户所有已完成任务
* @param page
*/
public void getCompletedTasksByCustomType(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql="select t from Task t,WorkflowTask wt where t.id=wt.id and t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.COMPLETED.getIndex(),false);
}else{
hql="select t from Task t,WorkflowTask wt where t.id=wt.id and t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? and wt.customType=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.COMPLETED.getIndex(),false,typeName);
}
}
/**
* 根据流程名称分页查询用户所有已完成任务
* @param page
*/
public void getCompletedTasksByGroupName(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql=" from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.COMPLETED.getIndex(),false);
}else{
hql=" from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and t.active=? and t.paused=? and t.groupName=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.COMPLETED.getIndex(),false,typeName);
}
}
/**
* 根据自定义类型分页查询用户所有已完成任务
* @param page
*/
public void getCancelTasksByCustomType(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql="select t from Task t,WorkflowTask wt where t.id=wt.id and t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=?) and t.paused=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),TaskState.HAS_DRAW_OTHER.getIndex(),false);
}else{
hql="select t from Task t,WorkflowTask wt where t.id=wt.id and t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=?) and t.paused=? and wt.customType=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),TaskState.HAS_DRAW_OTHER.getIndex(),false,typeName);
}
}
/**
* 根据流程名称分页查询用户所有已完成任务
* @param page
*/
public void getCancelTasksByGroupName(Long companyId, String loginName, Page<Task> page,String typeName){
String hql=null;
if(StringUtils.isEmpty(typeName)){
hql=" from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=?) and t.paused=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),TaskState.HAS_DRAW_OTHER.getIndex(),false);
}else{
hql=" from Task t where t.companyId = ? and t.transactor = ? and t.visible = true and (t.active=? or t.active=? or t.active=?) and t.paused=? and t.groupName=? order by t.createdTime desc";
this.searchPageByHql(page, hql.toString(),companyId, loginName,TaskState.CANCELLED.getIndex(),TaskState.ASSIGNED.getIndex(),TaskState.HAS_DRAW_OTHER.getIndex(),false,typeName);
}
}
}