package com.norteksoft.wf.engine.dao; import java.util.List; import org.hibernate.SQLQuery; import org.springframework.stereotype.Repository; import com.norteksoft.product.orm.hibernate.HibernateDao; import com.norteksoft.wf.engine.entity.InstanceHistory; import com.norteksoft.wf.engine.entity.Opinion; @Repository public class InstanceHistoryDao extends HibernateDao<InstanceHistory, Long>{ /** * 流程自动环节和人工环节的流转历史 * @param companyId * @param instanceId * @return */ @SuppressWarnings("unchecked") public List<Object[]> getHistoryBySpecial(Long companyId, String instanceId, boolean isSpecial){ StringBuilder hql = new StringBuilder(); hql.append("select {ih.*}, {o.*} "); hql.append("from WF_INSTANCE_HISTORY ih left join WF_OPINION o on ih.task_id=o.task_id "); hql.append("where ih.company_id=? and ih.instance_id=? and (ih.type = ? or (ih.type = ? and o.id is null)) and ih.special_task=? order by ih.id,ih.task_id"); SQLQuery query = this.getSession().createSQLQuery(hql.toString()); query.setParameter(0, companyId); query.setParameter(1, instanceId); query.setParameter(2, InstanceHistory.TYPE_TASK); query.setParameter(3, InstanceHistory.TYPE_AUTO); query.setParameter(4, isSpecial); return query.addEntity("ih", InstanceHistory.class).addEntity("o", Opinion.class).list(); } /** * 文本流转历史 * @param companyId * @param workflowId * @return InstanceHistory */ @SuppressWarnings("unchecked") public List<Object[]> getHistoryByWorkflowId(Long companyId, String workflowId){ StringBuilder hql = new StringBuilder(); hql.append("select {ih.*}, {o.*} "); hql.append("from WF_INSTANCE_HISTORY ih left join WF_OPINION o on ih.task_id=o.task_id "); hql.append("where ih.company_id=? and ih.instance_id=? and (ih.type = ? or (ih.type = ? or ih.type = ? and o.id is null)) order by ih.id,ih.task_id"); SQLQuery query = this.getSession().createSQLQuery(hql.toString()); query.setParameter(0, companyId); query.setParameter(1, workflowId); query.setParameter(2, InstanceHistory.TYPE_TASK); query.setParameter(3, InstanceHistory.TYPE_FLOW_START); query.setParameter(4, InstanceHistory.TYPE_FLOW_END); return query.addEntity("ih", InstanceHistory.class).addEntity("o", Opinion.class).list(); } /** * 主流程的人工流转历史 * @param companyId * @param instanceId * @return */ public List<InstanceHistory> getMainProcessHistory(Long companyId, String instanceId){ return find("from InstanceHistory ih where ih.companyId=? and ih.executionId=? and ih.type = ? and ih.effective=? order by ih.id", companyId, instanceId, InstanceHistory.TYPE_TASK, true); } /** * 流程的人工流转历史(排序) * @param companyId * @param instanceId * @return */ public List<InstanceHistory> getArtificialHistory(Long companyId, String instanceId){ return find("from InstanceHistory ih where ih.companyId=? and ih.instanceId=? and ih.type = ? and ih.effective=? order by ih.id", companyId, instanceId, InstanceHistory.TYPE_TASK, true); } /** * 查询流程实例所有有效的流转历史 * @param companyId * @param instanceId * @return */ public List<InstanceHistory> getAllHistoryByInstance(Long companyId, String instanceId){ return find("from InstanceHistory ih where ih.companyId=? and ih.instanceId=? and ih.effective = ?", companyId, instanceId, true); } /** * 流程的进入任务流转历史(排序) * @param companyId * @param instanceId * @return */ public List<InstanceHistory> getIntoTaskHistory(Long companyId, String instanceId){ return find("from InstanceHistory ih where ih.companyId=? and ih.instanceId=? and ih.type = ? and ih.effective=? order by ih.id", companyId, instanceId, InstanceHistory.TYPE_FLOW_INTO, true); } /** * 根据任务删除任务的流转历史 * @param companyId * @param instanceId * @param taskName * @param taskNames */ public void deleteHistoryByTask(Long companyId, String instanceId, Long taskId, String[] taskNames){ createQuery("delete InstanceHistory ih where ih.companyId=? and ih.instanceId=? and ih.taskId=? and (ih.type = ? or ih.type = ? ) and ih.effective=?", companyId, instanceId, taskId, InstanceHistory.TYPE_TASK, InstanceHistory.TYPE_FLOW_LEAVE, true).executeUpdate(); for(String name : taskNames){ createQuery("delete InstanceHistory ih where ih.companyId=? and ih.instanceId=? and ih.taskName=? and ih.type = ? and ih.effective=?", companyId, instanceId, name, InstanceHistory.TYPE_FLOW_INTO, true).executeUpdate(); } } /** * 删除流程实例的所有流转历史 * @param companyId * @param workflowId */ public void deleteHistoryByworkflowId(String workflowId,Long companyId){ createQuery("delete InstanceHistory ih where ih.companyId=? and ih.instanceId=? ", companyId, workflowId).executeUpdate(); } }