package com.cabletech.business.desktop.dao; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.springframework.stereotype.Repository; import com.cabletech.baseinfo.business.entity.UserInfo; import com.cabletech.common.base.BaseDao; /** * 离职人员统计Dao * * @author 杨隽 2012-03-14 创建 * */ @Repository @SuppressWarnings("rawtypes") public class LeavePersonStatisticDao extends BaseDao { protected final Logger logger = Logger.getLogger(this.getClass()); /** * 获取截止到当前月份的代维单位人员总数(按区域分组统计) * * @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(); } }