package com.cabletech.business.analysis.dao; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; /** * 故障超时时长统计Dao * * @author 杨隽 2012-03-23 创建 * @author 杨隽 2012-03-30 提取公共方法 * */ @SuppressWarnings("rawtypes") @Repository public class TroubleLevelsOvertimeLengthDao extends TroubleAnalyseBaseDao { /** * 进行故障超时时长统计(按组织分组) * * @param parameters * Map<String, String> 查询条件参数 * @return List 故障超时时长列表 */ public List getTroubleLevelsOvertimeLengthListByOrg( Map<String, String> parameters) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select vo.id,vo.name,vo.parentid, "); sqlBuffer.append(" '0' as level_,'false' as isLeaf, "); sqlBuffer.append(" 'false' as expanded,'true' as loaded, "); sqlBuffer.append(" result_.* from ( "); sqlBuffer.append(" select v.* from view_org v "); sqlBuffer.append(" where v.regionid=any( "); sqlBuffer.append(" select r.regionid from view_region r "); sqlBuffer.append(" start with r.regionid='"); sqlBuffer.append(parameters.get("regionId")); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior r.regionid=r.parentid "); sqlBuffer.append(" ) "); if (StringUtils.isNotBlank(parameters.get("orgId"))) { sqlBuffer.append(" and v.id='"); sqlBuffer.append(parameters.get("orgId")); sqlBuffer.append("'"); } sqlBuffer.append(" ) vo "); sqlBuffer.append(" join ( "); sqlBuffer.append(getTroubleLevelsTimeLengthSqlByOrg(parameters)); sqlBuffer.append(" ) result_ on vo.id=result_.maintenance_id "); return super.getSQLALL(sqlBuffer.toString()); } /** * 进行故障超时时长统计(按巡检组分组) * * @param parameters * Map<String, String> 查询条件参数 * @return List 故障平均历时列表 */ public List getTroubleLevelsOvertimeLengthListByPatrolGroup( Map<String, String> parameters) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select vp.id,vp.name,vp.parentid, "); sqlBuffer.append(" '1' as level_,'true' as isLeaf, "); sqlBuffer.append(" 'false' as expanded,'true' as loaded, "); sqlBuffer.append(" result_.* "); sqlBuffer.append(" from ( "); sqlBuffer.append(" select v.* from view_patrolgroup v "); sqlBuffer.append(" where v.regionid=any( "); sqlBuffer.append(" select r.regionid from view_region r "); sqlBuffer.append(" start with r.regionid='"); sqlBuffer.append(parameters.get("regionId")); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior r.regionid=r.parentid "); sqlBuffer.append(" ) "); if (StringUtils.isNotBlank(parameters.get("orgId"))) { sqlBuffer.append(" and v.orgid='"); sqlBuffer.append(parameters.get("orgId")); sqlBuffer.append("'"); } sqlBuffer.append(" ) vp "); sqlBuffer.append(" join ( "); sqlBuffer .append(getTroubleLevelsTimeLengthSqlByPatrolGroup(parameters)); sqlBuffer.append(" ) result_ on vp.id=result_.patrol_group "); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取故障超时时长统计的sql(按组织分组) * * @param parameters * Map<String, String> 查询条件参数 * @return StringBuffer 故障超时时长统计的sql缓冲区 */ private StringBuffer getTroubleLevelsTimeLengthSqlByOrg( Map<String, String> parameters) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select all_t.maintenance_id, "); getStatisticNumberColumnSql(sqlBuffer); sqlBuffer.append(" from ( "); sqlBuffer.append(getTroubleSqlByLevel(parameters)); sqlBuffer.append(" ) all_t "); sqlBuffer.append(" group by all_t.maintenance_id "); return sqlBuffer; } /** * 获取故障超时时长统计的sql(按巡检组分组) * * @param parameters * Map<String, String> 查询条件参数 * @return StringBuffer 故障超时时长统计的sql缓冲区 */ private StringBuffer getTroubleLevelsTimeLengthSqlByPatrolGroup( Map<String, String> parameters) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select all_t.patrol_group, "); getStatisticNumberColumnSql(sqlBuffer); sqlBuffer.append(" from ( "); sqlBuffer.append(getTroubleSqlByLevel(parameters)); sqlBuffer.append(" ) all_t "); sqlBuffer.append(" where all_t.patrol_group is not null "); sqlBuffer.append(" group by all_t.patrol_group "); return sqlBuffer; } /** * 获取统计使用的数据列 * * @param sqlBuffer * StringBuffer 故障超时时长统计的sql缓冲区 */ private void getStatisticNumberColumnSql(StringBuffer sqlBuffer) { sqlBuffer.append(" count(all_t.did) as all_num, "); sqlBuffer .append(" to_char(sum(all_t.len),'FM99999990.099') as all_len, "); sqlBuffer .append(" to_char(decode(count(all_t.did),0,0,sum(all_t.len)/count(all_t.did)),'FM99999990.099') as all_avg_len, "); sqlBuffer .append(" sum(decode(all_t.is_instancy,'严重故障',1,0)) as level_num0, "); sqlBuffer .append(" to_char(sum(decode(all_t.is_instancy,'严重故障',len,0)),'FM99999990.099') as level_len0, "); sqlBuffer .append(" to_char(decode(sum(decode(all_t.is_instancy,'严重故障',1,0)),0,0,sum(decode(all_t.is_instancy,'严重故障',len,0))/sum(decode(all_t.is_instancy,'严重故障',1,0))),'FM99999990.099') as level_avg_len0, "); sqlBuffer .append(" sum(decode(all_t.is_instancy,'重大故障',1,0)) as level_num1, "); sqlBuffer .append(" to_char(sum(decode(all_t.is_instancy,'重大故障',len,0)),'FM99999990.099') as level_len1, "); sqlBuffer .append(" to_char(decode(sum(decode(all_t.is_instancy,'重大故障',1,0)),0,0,sum(decode(all_t.is_instancy,'重大故障',len,0))/sum(decode(all_t.is_instancy,'重大故障',1,0))),'FM99999990.099') as level_avg_len1, "); sqlBuffer .append(" sum(decode(all_t.is_instancy,'一般故障',1,0)) as level_num2, "); sqlBuffer .append(" to_char(sum(decode(all_t.is_instancy,'一般故障',len,0)),'FM99999990.099') as level_len2, "); sqlBuffer .append(" to_char(decode(sum(decode(all_t.is_instancy,'一般故障',1,0)),0,0,sum(decode(all_t.is_instancy,'一般故障',len,0))/sum(decode(all_t.is_instancy,'一般故障',1,0))),'FM99999990.099') as level_avg_len2 "); } /** * 获取所有超时故障单列表的sql * * @param parameters * Map<String, String> 查询条件参数 * @return StringBuffer 故障超时时长统计的sql缓冲区 */ private String getTroubleSqlByLevel(Map<String, String> parameters) { // TODO Auto-generated method stub StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select * from ( "); getWTroubleSelectSql(parameters, sqlBuffer); sqlBuffer.append(" and sign(ws.deadline-( "); 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=ws.id "); sqlBuffer.append(" ))<0 "); sqlBuffer.append(" union "); getLTroubleSelectSql(parameters, sqlBuffer); sqlBuffer.append(" and sign(lti.reply_deadline-( "); sqlBuffer.append(" select min(jbpm_.end_time) from "); getJbpmTaskDataSql(sqlBuffer); sqlBuffer.append(" where jbpm_.key='trouble' "); sqlBuffer.append(" and jbpm_.task_name='reply_task' "); sqlBuffer.append(" and jbpm_.bzid=ltpu.id "); sqlBuffer.append(" ))<0 "); sqlBuffer.append(" ) order by len "); return sqlBuffer.toString(); } /** * 获取所有线路故障单列表的select sql * * @param parameters * Map<String, String> 查询条件参数 * @param sqlBuffer * StringBuffer 故障超时时长统计的sql缓冲区 */ private void getLTroubleSelectSql(Map<String, String> parameters, StringBuffer sqlBuffer) { sqlBuffer.append(" select lti.id,ltpu.id as did, "); sqlBuffer.append(" ltpu.process_unit_id as maintenance_id, "); sqlBuffer.append(" '' as patrol_group, "); sqlBuffer.append(" lti.trouble_name,ltec.eoms_code as eoms_id, "); sqlBuffer.append(" lti.trouble_start_time as trouble_time, "); sqlBuffer.append(" '' as address,'' as station_id, "); sqlBuffer.append(" '' as station_type,'' as station_name, "); sqlBuffer .append(" decode(lti.is_great_trouble,'1','重大故障','一般故障') as is_instancy, "); sqlBuffer .append(" decode(lti.trouble_type,'0','巡回','告知') as find_type, "); sqlBuffer.append(" to_char((( "); sqlBuffer.append(" select min(jbpm_.end_time) from "); getJbpmTaskDataSql(sqlBuffer); sqlBuffer.append(" where jbpm_.key='trouble' "); sqlBuffer.append(" and jbpm_.task_name='reply_task' "); sqlBuffer.append(" and jbpm_.bzid=ltpu.id "); sqlBuffer .append(" )-lti.reply_deadline)*24,'FM99999990.099') as len from lp_trouble_info lti "); sqlBuffer.append(" join lp_trouble_process_unit ltpu "); sqlBuffer.append(" on lti.id=ltpu.trouble_id "); sqlBuffer.append(" left join lp_trouble_eoms_code ltec "); sqlBuffer.append(" on lti.id=ltec.trouble_id "); sqlBuffer.append(" where lti.trouble_state='"); sqlBuffer.append(LTROUBLE_END_STATE); sqlBuffer.append("' "); getLTroubleCondition(parameters, sqlBuffer); } /** * 获取所有无线故障单列表的select sql * * @param parameters * Map<String, String> 查询条件参数 * @param sqlBuffer * StringBuffer 故障超时时长统计的sql缓冲区 */ private void getWTroubleSelectSql(Map<String, String> parameters, StringBuffer sqlBuffer) { sqlBuffer.append(" select wa.id,ws.id as did, "); sqlBuffer.append(" ws.maintenance_id,ws.patrol_group, "); sqlBuffer.append(" wa.trouble_title as title "); sqlBuffer.append(" ,wa.eoms_id,wa.trouble_time,wa.address, "); sqlBuffer.append(" wa.station_id,wa.station_type, "); sqlBuffer.append(" rs.zymc as station_name,"); sqlBuffer .append(" FN_GETNAMEBYCODE(wa.trouble_level,'TROUBLE_LEVEL') as is_instancy, "); sqlBuffer .append(" FN_GETNAMEBYCODE(wa.find_type,'FIND_TYPE') as find_type, "); sqlBuffer.append(" to_char((( "); 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=ws.id "); sqlBuffer .append(" )-ws.deadline)*24,'FM99999990.099') as len from wtrouble_alarm wa "); sqlBuffer.append(" join wtrouble_sendtask ws on wa.id=ws.alarm_id "); sqlBuffer.append(" left join res_zdxx rs "); sqlBuffer.append(" on wa.station_id=rs.xtbh "); //sqlBuffer.append(" and wa.station_type=rs.rs_type "); sqlBuffer.append(" where wa.ignore_state='"); sqlBuffer.append(WTROUBLE_END_STATE); sqlBuffer.append("' "); getWTroubleCondition(parameters, sqlBuffer); } }