package com.cabletech.business.workflow.fault.dao; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Repository; import com.cabletech.common.base.BaseDao; /** * 首页故障派单统计Dao * * @author 杨隽 2012-03-09 创建 * */ @Repository @SuppressWarnings("rawtypes") public class FaultStatisticDao extends BaseDao { /** * 日志输出 */ protected final Logger logger = Logger.getLogger("FaultStatisticDao"); /** * 获取超时故障数量列表(按区域) * * @param condition * String 查询条件 * @param regionId * String 区域编号 * @return List<Map<String, Object>> 超时故障数量列表 */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getOvertimeFaultNumberByRegion( String condition, String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select r.regionid as gid,r.regionname as gname, "); sqlBuffer.append(" sum(decode(sign_,-1,1,0)) as overtime_f_num from "); sqlBuffer.append(" ( "); sqlBuffer.append(" select regionid,regionname "); sqlBuffer.append(" from view_region "); sqlBuffer.append(" where lv=3 "); sqlBuffer.append(" start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior regionid=parentid) r "); sqlBuffer.append(" join "); sqlBuffer.append(getOvertimeFaultNumberSql(condition)); sqlBuffer.append(" on r.regionid=result_.regionid "); sqlBuffer.append(" group by r.regionid,r.regionname "); logger.info(":" + sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取超时故障数量列表(按组织) * * @param condition * String 查询条件 * @param regionId * String 区域编号 * @param orgId * String 组织编号 * @return List<Map<String, Object>> 超时故障数量列表 */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getOvertimeFaultNumberByOrg( String condition, String regionId, String orgId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select vo.id as gid,vo.name as gname, "); sqlBuffer.append(" sum(decode(sign_,-1,1,0)) as overtime_f_num from "); sqlBuffer.append(" view_org vo "); sqlBuffer.append(" join "); sqlBuffer.append(getOvertimeFaultNumberSql(condition)); sqlBuffer.append(" on result_.id=vo.id "); sqlBuffer.append(" where 1=1 "); if (StringUtils.isNotBlank(regionId)) { sqlBuffer.append(" and vo.regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("'"); } if (StringUtils.isNotBlank(orgId)) { sqlBuffer.append(" and vo.id='"); sqlBuffer.append(orgId); sqlBuffer.append("'"); } sqlBuffer.append(" group by vo.id,vo.name "); logger.info(":" + sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取超时故障数量列表的sql * * @param condition * String 查询条件 * @return String 超时故障数量列表的sql */ private String getOvertimeFaultNumberSql(String condition) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" ( "); sqlBuffer.append(" select vo.id,vo.regionid,sign( "); sqlBuffer.append(" wt.deadline- "); sqlBuffer.append(" ( "); sqlBuffer.append(" select min(jbpm_.end_time) from "); getJbpmTaskDataSql(sqlBuffer); sqlBuffer.append(" where jbpm_.key='fault' "); sqlBuffer.append(" and jbpm_.task_name='填写故障回单' "); sqlBuffer.append(" and jbpm_.bzid=wt.id "); sqlBuffer.append(" ) "); sqlBuffer.append(" ) as sign_ "); sqlBuffer.append(" from wtrouble_alarm wa "); sqlBuffer.append(" join wtrouble_sendtask wt on wa.id=wt.alarm_id "); sqlBuffer.append(" join wtrouble_reply wr on wt.id=wr.task_id "); sqlBuffer.append(" join view_org vo on wt.maintenance_id=vo.id "); sqlBuffer.append(" where 1=1 "); sqlBuffer.append(" ) result_ "); return sqlBuffer.toString(); } /** * 获取工作流的任务数据信息 * * @param sqlBuffer * StringBuffer sql存放缓冲区 */ private void getJbpmTaskDataSql(StringBuffer sqlBuffer) { sqlBuffer.append(" ( "); sqlBuffer.append(" select jd.deploymentkey as key, "); sqlBuffer .append(" decode(jhpe.bzid,null,jhp.key_,jhpe.bzid) as bzid, "); sqlBuffer.append(" jhp.id_ as did, "); sqlBuffer .append(" to_date(to_char(jha.end_,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') as end_time, "); sqlBuffer.append(" jha.activity_name_ as task_name "); sqlBuffer.append(" from JBPM4_HIST_PROCINST jhp "); sqlBuffer.append(" left join jbpm4_defineinfo jd "); sqlBuffer.append(" on jhp.procdefid_=jd.processdefinitionid "); sqlBuffer.append(" left join jbpm4_hist_pi_ext jhpe "); sqlBuffer.append(" on jhp.id_=jhpe.piid "); sqlBuffer.append(" left join jbpm4_hist_actinst jha "); sqlBuffer.append(" on jhp.id_=jha.execution_ and jha.type_ = 'task' "); sqlBuffer.append(" where jhp.state_ = 'ended' "); sqlBuffer.append(" order by jhp.id_,jha.end_ "); sqlBuffer.append(" ) jbpm_ "); } }