package com.cabletech.business.desktop.dao; import java.util.Calendar; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.springframework.stereotype.Repository; import com.cabletech.common.base.BaseDao; /** * 线路计划巡检率dao * * @author 杨隽 2012-03-12 创建 * */ @Repository @SuppressWarnings("rawtypes") public class LinePatrolAnalysisDao extends BaseDao { protected final Logger logger = Logger.getLogger("LinePatrolAnalysisDao"); /** * 获取省区域下的线路计划巡检率列表数据 * * @param regionId * String 区域编号 * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getRegionLinePatrolResultRateList( String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select r.regionid,r.regionname name, "); sqlBuffer.append(" to_char(nvl( "); sqlBuffer.append(" decode(sum(result_.planpoint),0,0, "); sqlBuffer.append(" 100*sum(result_.factpoint)/sum(result_.planpoint) "); sqlBuffer.append(" ) "); sqlBuffer.append(" ,0),'FM990.09') as rate "); sqlBuffer.append(" from ( "); sqlBuffer.append(" select regionid,regionname,lv from view_region "); sqlBuffer.append(" where 1=1 start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' connect by prior regionid=parentid "); sqlBuffer.append(" ) r "); sqlBuffer.append(" left join ("); sqlBuffer.append(getPlanPatrolResultSql(regionId)); sqlBuffer.append(" ) result_ "); sqlBuffer.append(" on r.regionid=result_.regionid "); sqlBuffer.append(" where lv=3 "); sqlBuffer.append(" group by r.regionid,r.regionname "); sqlBuffer.append(" order by r.regionid "); logger.info("getregionline"+sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取区域下所有组织的线路计划巡检率列表数据 * * @param regionId * String 区域编号 * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getContractorLinePatrolResultRateList( String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select m.id,m.name, "); sqlBuffer.append(" to_char(nvl( "); sqlBuffer.append(" decode(sum(result_.planpoint),0,0, "); sqlBuffer.append(" 100*sum(result_.factpoint)/sum(result_.planpoint) "); sqlBuffer.append(" ) "); sqlBuffer.append(" ,0),'FM990.09') as rate "); sqlBuffer.append(" from view_org m "); sqlBuffer.append(" left join ("); sqlBuffer.append(getPlanPatrolResultSql(regionId)); sqlBuffer.append(" ) result_ "); sqlBuffer.append(" on result_.contractorid=m.id "); sqlBuffer.append(" where m.regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' and m.orgtype='2' "); sqlBuffer.append(" group by m.id,m.name "); sqlBuffer.append(" order by m.id "); logger.info("getcontractorline"+sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取组织下所有巡检组的线路计划巡检率列表数据 * * @param regionId * String 区域编号 * @param orgId * String 组织编号 * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getPatrolGroupLinePatrolResultRateList( String regionId, String orgId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select m.id,m.name, "); sqlBuffer.append(" to_char(nvl( "); sqlBuffer.append(" decode(sum(result_.planpoint),0,0, "); sqlBuffer.append(" 100*sum(result_.factpoint)/sum(result_.planpoint) "); sqlBuffer.append(" ) "); sqlBuffer.append(" ,0),'FM990.09') as rate "); sqlBuffer.append(" from view_patrolgroup m "); sqlBuffer.append(" left join ("); sqlBuffer.append(getPlanPatrolResultSql(regionId)); sqlBuffer.append(" ) result_ "); sqlBuffer.append(" on m.id=result_.executorid "); sqlBuffer.append(" where m.orgid='"); sqlBuffer.append(orgId); sqlBuffer.append("' "); sqlBuffer.append(" group by m.id,m.name "); sqlBuffer.append(" order by m.id "); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取计划巡检执行信息的结果数据列表sql * * @param regionId * String 区域编号 * @return */ private String getPlanPatrolResultSql(String regionId) { // TODO Auto-generated method stub StringBuffer sqlBuffer = new StringBuffer(""); getEndPlanPatrolResult(regionId, sqlBuffer); sqlBuffer.append(" union "); getCurrentPlanPatrolResult(regionId, sqlBuffer); return sqlBuffer.toString(); } /** * 根据区域编号获取当前月份的当前计划执行结果信息 * * @param regionId * String 区域编号 * @param sqlBuffer * StringBuffer */ private void getCurrentPlanPatrolResult(String regionId, StringBuffer sqlBuffer) { sqlBuffer.append(" select pcs.curplanid as planid,vo.regionid, "); sqlBuffer.append(" pcs.contractorid,pcs.executorid, "); sqlBuffer.append(" pcs.planpointtimes as planpoint, "); sqlBuffer.append(" pcs.actualpointtimes as factpoint "); sqlBuffer.append(" from plancurrent_stat pcs "); sqlBuffer.append(" join view_org vo on pcs.contractorid=vo.id "); sqlBuffer.append(" where 1=1 "); sqlBuffer.append(" and vo.regionid=any( "); sqlBuffer.append(" select regionid from region "); sqlBuffer.append(" start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior regionid=parentregionid "); sqlBuffer.append(" ) "); String yearMonth = getYearMonth(); sqlBuffer.append(" and pcs.enddate>=to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-01','yyyy-mm-dd') "); sqlBuffer.append(" and pcs.enddate<add_months(to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-01','yyyy-mm-dd'),1) "); } /** * 根据区域编号获取当前月份的到期计划执行结果信息 * * @param regionId * String 区域编号 * @param sqlBuffer * StringBuffer */ private void getEndPlanPatrolResult(String regionId, StringBuffer sqlBuffer) { sqlBuffer.append(" select ps.planid,vo.regionid,ps.contractorid, "); sqlBuffer.append(" ps.executorid,ps.planpoint,ps.factpoint "); sqlBuffer.append(" from plan_stat ps "); sqlBuffer.append(" join view_org vo on ps.contractorid=vo.id "); sqlBuffer.append(" where 1=1 "); sqlBuffer.append(" and vo.regionid=any( "); sqlBuffer.append(" select regionid from region "); sqlBuffer.append(" start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior regionid=parentregionid "); sqlBuffer.append(" ) "); String yearMonth = getYearMonth(); sqlBuffer.append(" and ps.enddate>=to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-01','yyyy-mm-dd') "); sqlBuffer.append(" and ps.enddate<add_months(to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-01','yyyy-mm-dd'),1) "); } /** * 获取当前的年月输入字串 * * @return */ private String getYearMonth() { Calendar c = Calendar.getInstance(); String yearMonth = c.get(Calendar.YEAR) + "-" + (c.get(Calendar.MONTH) + 1); return yearMonth; } }