package com.cabletech.business.desktop.dao; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Repository; import com.cabletech.baseinfo.business.entity.UserInfo; import com.cabletech.common.base.BaseDao; /** * 二级 首页 -- 统计DAO * * @author wj */ @Repository public class BaseWorkDao extends BaseDao { /** * 维护持有终端数 -- 按区域分组 * * @param regionId * 区域 * @return List */ public List<Map<String, Object>> getContractorTerminalListByRegion( String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select r.REGIONID as id,r.REGIONNAME as name,sum(rnum) as TERMINALNUM "); sqlBuffer .append(" from (select * from view_region r where r.REGIONID=any(select regionid "); sqlBuffer.append(" from view_region start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' connect by prior regionid=parentid) and lv=3) r "); sqlBuffer .append(" left join (select count(rs.terminalid) rnum,rs.REGIONID "); sqlBuffer .append(" from base_terminalinfo rs group by rs.regionid) n on r.REGIONID=substr (n.REGIONID,0,4)||'00' "); sqlBuffer.append(" group by r.REGIONID,r.REGIONNAME "); sqlBuffer.append(" order by r.REGIONID "); String sql = sqlBuffer.toString(); logger.info("维护持有终端数 -- 按区域分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 维护持有终端数 -- 按组织分组 * * @param regionId * 区域 * @return List */ public List<Map<String, Object>> getContractorTerminalListByOrg( String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select o.ID,o.name,nvl(count(ods.terminalid),0) as TERMINALNUM "); sqlBuffer.append(" from view_org o "); sqlBuffer .append(" left join base_terminalinfo ods on ods.contractorid = o.id "); sqlBuffer.append(" where o.REGIONID=any "); sqlBuffer.append(" (select regionid from region start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' connect by prior regionid=parentregionid) "); sqlBuffer.append(" and o.ORGTYPE = '2' "); sqlBuffer.append(" group by o.ID,o.NAME "); sqlBuffer.append(" order by o.ID "); String sql = sqlBuffer.toString(); logger.info("维护持有终端数 -- 按组织分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 维护持有终端数 -- 按巡检组分组 * * @param regionId * 区域 * @param orgId * 组织 * @return List * */ public List<Map<String, Object>> getContractorTerminalListByPatrol( String regionId, String orgId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select o.ID,o.name,nvl(count(ods.terminalid),0) as TERMINALNUM "); sqlBuffer .append(" from view_patrolgroup o left join base_terminalinfo ods on ods.ownerid = o.id "); sqlBuffer .append(" where o.REGIONID=any (select regionid from region start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' connect by prior regionid=parentregionid) "); sqlBuffer.append(" and o.ORGID = '" + orgId + "' "); sqlBuffer.append(" group by o.ID,o.NAME "); sqlBuffer.append(" order by o.ID "); String sql = sqlBuffer.toString(); logger.info("维护持有终端数 -- 按巡检组分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } // ---------------------------------------------------------------资质,证书到期提醒 /** * 到期资质 证书 * * @param regionId * 区域 * @param orgId * 组织 * @return List * */ public List<Map<String, Object>> getValidperiodedCertificatesList( String regionId, String orgId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select t.id,o.NAME AS orgname,t.certificatename,to_char(t.validperiod,'yyyy-mm-dd') as validperiod "); sqlBuffer.append(" from base_certificate t "); sqlBuffer .append(" left join view_orgdeptstaff o on t.objectid = o.ID "); sqlBuffer.append(" where t.validperiod <= sysdate "); // sqlBuffer.append(" where 1=1 "); sqlBuffer .append(" and exists( SELECT REGIONID FROM VIEW_REGION vr WHERE "); sqlBuffer.append(" vr.REGIONID=o.REGIONID START WITH "); sqlBuffer.append(" vr.REGIONID='"); sqlBuffer.append(regionId); sqlBuffer.append("' CONNECT BY PRIOR "); sqlBuffer.append(" vr.REGIONID=vr.PARENTID) "); if (StringUtils.isNotBlank(orgId)) { sqlBuffer.append(" and t.objectid = '" + orgId + "' "); } sqlBuffer.append(" order by t.objectid,t.validperiod "); String sql = sqlBuffer.toString(); logger.info("到期资质 证书sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } // --------------------------------------------------- 维护的资源 /** * 资源数量 -- 按区域分组 * * @param regionId * 区域 * @param pointtype * String * @return List */ public List<Map<String, Object>> getResCountListByRegion(String regionId, String pointtype) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select r.REGIONNAME as name,nvl(sum(rnum),0) as num "); sqlBuffer .append(" from (select * from view_region r where r.REGIONID=any(select regionid from view_region start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' connect by prior regionid=parentid) and lv=3) r "); sqlBuffer .append(" left join (select count(rs.Pointid) rnum,rs.REGIONID "); sqlBuffer.append(" from pointinfo rs where rs.pointtype in ("); sqlBuffer.append(StringToSqlCondition(pointtype)); sqlBuffer .append(") group by rs.regionid) n on r.REGIONID=substr (n.REGIONID,0,4)||'00' "); sqlBuffer.append(" group by r.REGIONID,r.REGIONNAME "); sqlBuffer.append(" order by r.REGIONID "); String sql = sqlBuffer.toString(); logger.info("资源数量 -- 按区域分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 线路公里数 -- 按区域分组 * * @param regionId * 区域 * @return List */ public List<Map<String, Object>> getLineCountListByRegion(String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select r.REGIONNAME as name,to_char(round(nvl(sum(rnum)/1000,0),2),'FM9999999999999990.00') as num "); sqlBuffer .append(" from (select * from view_region r where r.REGIONID=any(select regionid from view_region start with regionid='"); sqlBuffer.append(regionId); sqlBuffer.append("' connect by prior regionid=parentid) and lv=3) r "); sqlBuffer .append(" left join (select sum(t.shape.len) rnum,t.regionid from sublineinfo t group by t.regionid) n on r.REGIONID=substr(n.REGIONID,0,4)||'00' "); sqlBuffer.append(" group by r.REGIONID,r.REGIONNAME "); sqlBuffer.append(" order by r.REGIONID "); String sql = sqlBuffer.toString(); logger.info("线路公里数 -- 按区域分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 资源数量 -- 按组织分组 * * @param regionId * 区域 * @param pointtype * String * @return List */ public List<Map<String, Object>> getResCountListByOrg(String regionId, String pointtype) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select o.NAME,nvl(count(rm.rs_id),0) num "); sqlBuffer.append(" from view_org o "); sqlBuffer .append(" left join rees_maintenance rm on rm.maintenance_id = o.id and rm.rs_type in ("); sqlBuffer.append(StringToSqlCondition(pointtype)); sqlBuffer.append(") where o.regionid=any "); sqlBuffer.append(" (select regionid from region start with regionid='" + regionId + "' connect by prior regionid=parentregionid) "); sqlBuffer.append(" and o.ORGTYPE = '2' "); sqlBuffer.append(" group by o.id,o.name "); sqlBuffer.append(" order by o.id "); String sql = sqlBuffer.toString(); logger.info("资源数量 -- 按组织分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 线路公里数 -- 按组织分组 * * @param regionId * 区域 * @return List */ public List<Map<String, Object>> getLineCountListByOrg(String regionId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select o.name,to_char(round(nvl(sum(line.shape.len)/1000,0),2),'FM9999999999999990.00') as num "); sqlBuffer.append(" from view_org o "); sqlBuffer .append(" left join sublineinfo line on line.contractorid = o.id "); sqlBuffer.append(" where o.REGIONID=any "); sqlBuffer.append(" (select regionid from region start with regionid='" + regionId + "' connect by prior regionid=parentregionid) "); sqlBuffer.append(" and o.ORGTYPE = '2' "); sqlBuffer.append(" group by o.ID,o.NAME "); sqlBuffer.append(" order by o.id "); String sql = sqlBuffer.toString(); logger.info(" 线路公里数 -- 按组织分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 资源数量 -- 按巡检组分组 * * @param regionId * 区域 * @param orgId * String 组织编号 * @param pointtype * String 点类型 * @return List */ public List<Map<String, Object>> getResCountListByPatrol(String regionId, String orgId, String pointtype) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select o.NAME,nvl(count(rm.rs_id),0) num "); sqlBuffer.append(" from view_patrolgroup o "); sqlBuffer .append(" left join res_maintenance rm on rm.patrol_group_id = o.id and rm.rs_type in ("); sqlBuffer.append(StringToSqlCondition(pointtype)); sqlBuffer.append(") where o.regionid=any "); sqlBuffer.append(" (select regionid from region start with regionid='" + regionId + "' connect by prior regionid=parentregionid) "); sqlBuffer.append(" and o.PARENTID = '" + orgId + "' "); sqlBuffer.append(" group by o.id,o.name "); sqlBuffer.append(" order by o.id "); String sql = sqlBuffer.toString(); logger.info("资源数量 -- 按巡检组分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 线路公里数 -- 按巡检组分组 * * @param regionId * 区域 * @param orgId * String 组织编号 * @return List */ public List<Map<String, Object>> getLineCountListByPatrol(String regionId, String orgId) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer .append(" select o.NAME,to_char(round(nvl(sum(rm.shape.len)/1000,0),2),'FM9999999999999990.00') as num "); sqlBuffer.append(" from view_patrolgroup o "); sqlBuffer.append(" left join sublineinfo rm on rm.patrolid = o.id "); sqlBuffer.append(" where o.regionid=any "); sqlBuffer.append(" (select regionid from region start with regionid='" + regionId + "' connect by prior regionid=parentregionid) "); sqlBuffer.append(" and o.PARENTID = '" + orgId + "' "); sqlBuffer.append(" group by o.id,o.name "); sqlBuffer.append(" order by o.id "); String sql = sqlBuffer.toString(); logger.info(" 线路公里数 -- 按巡检组分组 sql:" + sql); List<Map<String, Object>> list = super.getJdbcTemplate().queryForList( sql); return list; } /** * 将字符串转化为sql语句的条件 * * @param str * String * @return */ private String StringToSqlCondition(String str) { if (StringUtils.isBlank(str)) return "''"; StringBuffer sqlBuffer = new StringBuffer(""); String[] conds = str.split(","); for (int i = 0; i < conds.length; i++) { if (i > 0) { sqlBuffer.append(","); } sqlBuffer.append("'" + conds[i] + "'"); } return sqlBuffer.toString(); } /** * 获取截止到当前月份的代维单位人员总数(按区域分组统计) * * @param userInfo * UserInfo * @param yearMonth * String * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getAllPersonNumberGroupByRegion( UserInfo userInfo, String yearMonth) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select r.regionid as gid,r.regionname as gname, "); sqlBuffer.append(" to_char(count(*)) as all_num "); sqlBuffer.append(" from ( "); sqlBuffer.append(" select * from view_region "); sqlBuffer.append(" where lv=3 "); sqlBuffer.append(" start with regionid='"); sqlBuffer.append(userInfo.getRegionId()); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior regionid=parentid "); sqlBuffer.append(" ) r join ("); getAllPersonListSql(userInfo, yearMonth, sqlBuffer); sqlBuffer.append(" ) result_ on r.regionid=result_.regionid "); sqlBuffer.append(" group by r.regionid,r.regionname "); sqlBuffer.append(" order by r.regionid "); logger.info("获取截止到当前月份的代维单位人员总数(按区域分组统计)SQL:" + sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取截止到当前月份的代维单位人员总数(按组织分组统计) * * @param userInfo * UserInfo * @param yearMonth * String * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getAllPersonNumberGroupByOrg( UserInfo userInfo, String yearMonth) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select v.id as gid,v.name as gname, "); sqlBuffer.append(" to_char(count(*)) as all_num "); sqlBuffer.append(" from view_org v join ( "); getAllPersonListSql(userInfo, yearMonth, sqlBuffer); sqlBuffer.append(" ) result_ on v.id=result_.id "); sqlBuffer.append(" group by v.id,v.name "); sqlBuffer.append(" order by v.id "); logger.info("获取截止到当前月份的代维单位人员总数(按组织分组统计)SQL:" + sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取当前月份的离职代维单位人员总数(按区域分组统计) * * @param userInfo * UserInfo * @param yearMonth * String * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getLeavePersonNumberByRegion( UserInfo userInfo, String yearMonth) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select r.regionid as gid,r.regionname as gname, "); sqlBuffer.append(" to_char(count(*)) as leave_num "); sqlBuffer.append(" from ( "); sqlBuffer.append(" select * from view_region "); sqlBuffer.append(" where lv=3 "); sqlBuffer.append(" start with regionid='"); sqlBuffer.append(userInfo.getRegionId()); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior regionid=parentid "); sqlBuffer.append(" ) r join ("); getLeavePersonListSql(userInfo, yearMonth, sqlBuffer); sqlBuffer.append(" ) result_ on r.regionid=result_.regionid "); sqlBuffer.append(" group by r.regionid,r.regionname "); sqlBuffer.append(" order by r.regionid "); logger.info("获取当前月份的离职代维单位人员总数(按区域分组统计)SQL:" + sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取当前月份的离职代维单位人员总数(按组织分组统计) * * @param userInfo * UserInfo * @param yearMonth * String * @return */ @SuppressWarnings("unchecked") public List<Map<String, Object>> getLeavePersonNumberByOrg( UserInfo userInfo, String yearMonth) { StringBuffer sqlBuffer = new StringBuffer(""); sqlBuffer.append(" select v.id as gid,v.name as gname, "); sqlBuffer.append(" to_char(count(*)) as leave_num "); sqlBuffer.append(" from view_org v join ( "); getLeavePersonListSql(userInfo, yearMonth, sqlBuffer); sqlBuffer.append(" ) result_ on v.id=result_.id "); sqlBuffer.append(" group by v.id,v.name "); sqlBuffer.append(" order by v.id "); logger.info("获取当前月份的离职代维单位人员总数(按组织分组统计)SQL:" + sqlBuffer.toString()); return super.getSQLALL(sqlBuffer.toString()); } /** * 获取所有当月在职人员列表的sql * * @param userInfo * UserInfo * @param yearMonth * String * @param sqlBuffer * StringBuffer */ private void getAllPersonListSql(UserInfo userInfo, String yearMonth, StringBuffer sqlBuffer) { sqlBuffer.append(" select vo.regionid,vo.id,op.id as pid "); sqlBuffer.append(" from base_person op "); sqlBuffer.append(" join view_org vo on op.contractorid=vo.id "); sqlBuffer.append(" where 1=1 "); sqlBuffer.append(" and vo.orgtype='2' "); sqlBuffer.append(" and ( "); sqlBuffer.append(" op.leave_time is null "); sqlBuffer.append(" or "); sqlBuffer.append(" op.leave_time>=add_months(to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-1','yyyy-mm-dd'),1) "); sqlBuffer.append(" ) "); sqlBuffer.append(" and ( "); sqlBuffer.append(" op.enter_time is null "); sqlBuffer.append(" or "); sqlBuffer.append(" op.enter_time<add_months(to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-1','yyyy-mm-dd'),1) "); sqlBuffer.append(" ) "); sqlBuffer.append(getUserCondition(userInfo)); } /** * 获取所有当月离职人员列表的sql * * @param userInfo * UserInfo * @param yearMonth * String * @param sqlBuffer * StringBuffer */ private void getLeavePersonListSql(UserInfo userInfo, String yearMonth, StringBuffer sqlBuffer) { sqlBuffer.append(" select vo.regionid,vo.id,op.id as pid "); sqlBuffer.append(" from base_person op "); sqlBuffer.append(" join view_org vo on op.contractorid=vo.id "); sqlBuffer.append(" where 1=1 "); sqlBuffer.append(" and vo.orgtype='2' "); sqlBuffer.append(" and op.leave_time>=to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-1','yyyy-mm-dd') "); sqlBuffer.append(" and op.leave_time<add_months(to_date('"); sqlBuffer.append(yearMonth); sqlBuffer.append("-1','yyyy-mm-dd'),1) "); sqlBuffer.append(getUserCondition(userInfo)); } /** * 获取用户查询条件 * * @param userInfo * UserInfo * @return */ private String getUserCondition(UserInfo userInfo) { // TODO Auto-generated method stub StringBuffer sqlBuffer = new StringBuffer(""); if (userInfo.isMobile()) { sqlBuffer.append(" and vo.regionid=any( "); sqlBuffer.append(" select r.regionid from view_region r "); sqlBuffer.append(" start with r.regionid='"); sqlBuffer.append(userInfo.getRegionId()); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior r.regionid=r.parentid "); sqlBuffer.append(" ) "); } if (userInfo.isContractor()) { sqlBuffer.append(" and vo.id=any( "); sqlBuffer.append(" select v.id from view_org v "); sqlBuffer.append(" start with v.id='"); sqlBuffer.append(userInfo.getOrgId()); sqlBuffer.append("' "); sqlBuffer.append(" connect by prior v.id=v.parentid "); sqlBuffer.append(" ) "); } return sqlBuffer.toString(); } }