package com.norteksoft.wf.engine.dao; import java.util.List; import org.springframework.stereotype.Repository; import com.norteksoft.product.orm.hibernate.HibernateDao; import com.norteksoft.task.base.enumeration.TaskProcessingMode; import com.norteksoft.task.entity.WorkflowTask; import com.norteksoft.wf.engine.entity.Opinion; @Repository public class OpinionDao extends HibernateDao<Opinion, Long>{ public void deleteAllOpinionsByWorkflowInstanceId(String workflowId,Long companyId){ createQuery("delete from Opinion o where o.workflowId = ? and o.companyId = ? ", workflowId,companyId).executeUpdate(); } public List<Opinion> getOpinionsByInstanceId(String workflowId , Long companyId) { return find("from Opinion o where o.workflowId=? and o.companyId=? order by o.createdTime", workflowId,companyId); } public List<Opinion> getOpinionsByTaskId(Long taskId , Long companyId) { return find("from Opinion o where o.taskId=? and o.companyId=?", taskId,companyId); } public Opinion getOpinionsById(Long opinionId) { return findUnique("from Opinion o where o.id=?", opinionId); } public List<Opinion> getOpinions(Long taskId, Long companyId) { StringBuilder hql = new StringBuilder("from Opinion o where o.taskId=? and o.companyId=? order by o.createdTime"); return find(hql.toString(), taskId,companyId); } public List<Opinion> getOpinions(String workflowId, Long companyId, String taskName) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? and o.taskName=? order by o.createdTime"); return find(hql.toString(), workflowId,companyId,taskName); } public List<Opinion> getOpinions(String workflowId, Long companyId, TaskProcessingMode taskMode) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? and o.taskMode=? order by o.createdTime"); return find(hql.toString(), workflowId,companyId,taskMode); } public List<Opinion> getOpinionsExceptTaskMode(String workflowId, Long companyId, TaskProcessingMode taskMode) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? and o.taskMode<>? order by o.createdTime"); return find(hql.toString(), workflowId,companyId,taskMode); } public List<Opinion> getOpinionsExceptCustomField(String workflowId, String customField) { String hql = "from Opinion d where d.workflowId=? and d.customField<>? order by d.createdTime desc"; return this.find(hql, workflowId,customField); } public List<Opinion> getOpinionsByCustomField(String workflowId, String customField) { String hql = "from Opinion d where d.workflowId=? and d.customField=? order by d.createdTime desc"; return this.find(hql, workflowId,customField); } /** * 查询任务和意见 * @param companyId * @param task * @return */ public List<Object[]> getOpinions(WorkflowTask task){ String hql = "select t, d from Opinion d, WorkflowTask t where t.id=d.taskId and d.workflowId=? and d.taskName=? and d.companyId=? and d.opinion is not null order by d.taskId desc"; return this.find(hql, task.getProcessInstanceId(),task.getName(),task.getCompanyId()); } public List<Opinion> getOpinionsExceptTaskName(String workflowId, Long companyId, String taskName) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? and o.taskName!=? order by o.createdTime"); return find(hql.toString(), workflowId,companyId,taskName); } public List<Opinion> getOpinions(String workflowId, Long companyId, List<String> taskNames) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=?"); Object[] objs = new Object[taskNames.size()+2]; if(taskNames.size()>0)hql.append(" and ("); boolean isFirst=true; objs[0]=workflowId; objs[1]=companyId; for(int i=0;i<taskNames.size();i++){ if(!isFirst) hql.append(" or "); hql.append(" o.taskName=?" ); isFirst=false; objs[i+2]=taskNames.get(i); } if(taskNames.size()>0)hql.append(")"); hql.append(" order by o.createdTime"); return find(hql.toString(),objs); } public List<Opinion> getOpinionsExceptTaskName(String workflowId, Long companyId, List<String> taskNames) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? "); Object[] objs = new Object[taskNames.size()+2]; if(taskNames.size()>0)hql.append(" and ("); boolean isFirst=true; objs[0]=workflowId; objs[1]=companyId; for(int i=0;i<taskNames.size();i++){ if(!isFirst) hql.append(" and "); hql.append(" o.taskName!=?" ); isFirst=false; objs[i+2]=taskNames.get(i); } if(taskNames.size()>0)hql.append(")"); hql.append(" order by o.createdTime"); return find(hql.toString(),objs); } public List<Opinion> getOpinionsByTacheCode(String workflowId, Long companyId, String tacheCode) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? and o.taskCode=? order by o.createdTime"); return find(hql.toString(), workflowId,companyId,tacheCode); } public List<Opinion> getOpinionsByTacheCode(String workflowId, Long companyId, List<String> tacheCodes) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=?"); Object[] objs = new Object[tacheCodes.size()+2]; objs[0]=workflowId; objs[1]=companyId; if(tacheCodes.size()>0)hql.append(" and ("); boolean isFirst=true; int i=2; for(String tacheCode:tacheCodes){ if(!isFirst) hql.append(" or "); hql.append(" o.taskCode=?" ); isFirst=false; objs[i++]=tacheCode; } if(tacheCodes.size()>0)hql.append(")"); hql.append(" order by o.createdTime"); return find(hql.toString(),objs); } public List<Opinion> getOpinionsByTaskName(String workflowId, Long companyId, String taskName) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=? and o.taskName=? and o.taskCode=null order by o.createdTime"); return find(hql.toString(), workflowId,companyId,taskName); } public List<Opinion> getOpinionsByTaskName(String workflowId, Long companyId, List<String> taskNames) { StringBuilder hql = new StringBuilder("from Opinion o where o.workflowId=? and o.companyId=?"); Object[] objs = new Object[taskNames.size()+2]; objs[0]=workflowId; objs[1]=companyId; if(taskNames.size()>0)hql.append(" and ("); boolean isFirst=true; int i=2; for(String tacheCode:taskNames){ if(!isFirst) hql.append(" or "); hql.append(" o.taskName=?" ); isFirst=false; objs[i++]=tacheCode; } if(taskNames.size()>0)hql.append(")"); hql.append(" and o.taskCode=null order by o.createdTime"); return find(hql.toString(),objs); } /** * 根据任务删除意见 * @param companyId * @param instanceId * @param taskName * @param taskNames */ public void deleteOpinionsByTask(Long companyId, String instanceId, Long taskId){ createQuery("delete Opinion ih where ih.companyId=? and ih.workflowId=? and ih.taskId=?", companyId, instanceId, taskId).executeUpdate(); } }