package com.cabletech.business.desktop.dao;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
import com.cabletech.baseinfo.business.entity.UserInfo;
import com.cabletech.common.base.BaseDao;
/**
* 桌面处理Dao
*
* @author 杨隽 2012-05-17 去除无用的导入、局部变量和类成员
*/
@Repository
@SuppressWarnings("rawtypes")
public class DesktopDao extends BaseDao {
protected final Logger logger = Logger.getLogger(this.getClass());
/**
* 从数据库字典表中获取专业类型列表
*
* @param type
* String
* @return
*/
public List<Map<String, Object>> getDictionaryList(String type) {
String sql = " SELECT CODEVALUE,LABLE FROM BASE_SYSDICTIONARY WHERE COLUMNTYPE='"
+ type + "' order by sortnum ";
List<Map<String, Object>> list = super.getJdbcTemplate().queryForList(
sql);
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<Map<String, Object>>();
}
return list;
}
/**
* 根据登录用户获取在线巡检人员列表
*
* @param userInfo
* 用户信息
* @return
*/
public List<Map<String, Object>> getOnlineManTreeList(UserInfo userInfo) {
StringBuffer sqlBuf = getSql(userInfo);
logger.debug("获取在线人员列表:" + sqlBuf.toString());
List<Map<String, Object>> list = super.getJdbcTemplate().queryForList(
sqlBuf.toString());
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<Map<String, Object>>();
}
return list;
}
/**
* 根据登录用户组织在线巡检人员查询sql语句
*
* @param userInfo
* UserInfo
* @return
*/
@SuppressWarnings("unused")
public StringBuffer getSql(UserInfo userInfo) {
// TODO Auto-generated method stub
StringBuffer sqlBuf = new StringBuffer("");
if (userInfo.isMobile()) {
getRegionSql(userInfo, sqlBuf);
sqlBuf.append(" UNION ");
getContractorSql(userInfo, sqlBuf);
} else if (userInfo.isContractor()) {
getContractorSql(userInfo, sqlBuf);
sqlBuf.append(" UNION ");
getPatrolmanSql(userInfo, sqlBuf);
sqlBuf.append(" UNION ");
getPersonSql(userInfo, sqlBuf);
// sqlBuf.append(" UNION ");
// getSimSql(userInfo, sqlBuf);
}
return sqlBuf;
}
/**
* 根据登录用户获取用户所属区域的查询sql语句
*
* @param userInfo
* UserInfo
* @param sqlBuf
* StringBuffer
*/
private void getRegionSql(UserInfo userInfo, StringBuffer sqlBuf) {
// TODO Auto-generated method stub
sqlBuf.append(" select r.REGIONID AS ID, r.REGIONNAME AS NAME, nvl(allmancount, 0) AS allmancount, nvl(olmancount, 0) AS olmancount, ");
sqlBuf.append(" r.PARENTID ,'REGION' AS objtype ");
sqlBuf.append(" FROM VIEW_REGION r left join (select count(distinct p.id) allmancount,count(distinct om.patrolman_id) olmancount, p.regionid from ");
sqlBuf.append(" view_patrolgroupperson p left join onlineman om on p.ID=om.patrolman_id and om.activetime between sysdate - 1/12 and sysdate where p.OBJTYPE='MAN' ");
sqlBuf.append(" and p.REGIONID = (substr(p.REGIONID, 0, 4) || '00') ");
sqlBuf.append(" group by p.regionid) d on r.REGIONID=substr(d.REGIONID,0,4)||'00' where r.REGIONID=any(");
sqlBuf.append(" select regionid from view_region start with regionid='"
+ userInfo.getRegionId()
+ "' connect by prior regionid=parentid) and lv<=3 ");
}
/**
* 根据登录用户获取用户所属代维单位的查询sql语句
*
* @param userInfo
* UserInfo
* @param sqlBuf
* StringBuffer
*/
private void getContractorSql(UserInfo userInfo, StringBuffer sqlBuf) {
// TODO Auto-generated method stub
sqlBuf.append(" select o.ID,o.NAME,nvl(allmancount,0)allmancount,nvl(olmancount,0) olmancount ");
if (userInfo.isProvinceContractor()) {
sqlBuf.append(",o.PARENTID");
} else {
sqlBuf.append(",O.REGIONID PARENTID");
}
sqlBuf.append(" ,'ORG' AS objtype from view_org o left join (select count(distinct p.id) allmancount,count(distinct om.patrolman_id) olmancount, p.orgid from view_patrolgroupperson p left join onlineman om ");
sqlBuf.append(" on p.ID=om.patrolman_id and om.activetime between sysdate - 1/12 and sysdate where p.OBJTYPE='MAN' group by p.orgid) d");
sqlBuf.append(" on o.id=d.ORGID where o.orgtype='2' ");
if (userInfo.isProvinceContractor()) {
sqlBuf.append(" and o.id= any(select id from view_org start with id='"
+ userInfo.getOrgId() + "' connect by prior id=parentid)");
} else if (userInfo.isCityContractor()) {
sqlBuf.append(" AND o.ID='");
sqlBuf.append(userInfo.getOrgId());
sqlBuf.append("' ");
} else if(userInfo.isProvinceMobile()){
sqlBuf.append(" and o.REGIONID!='"
+ userInfo.getRegionId()
+ "'");
sqlBuf.append(" and o.REGIONID=any(select regionid from view_region start with regionid='"
+ userInfo.getRegionId()
+ "' connect by prior regionid=parentid)");
}else {
sqlBuf.append(" and o.REGIONID=any(select regionid from view_region start with regionid='"
+ userInfo.getRegionId()
+ "' connect by prior regionid=parentid)");
}
sqlBuf.append(" and substr(o.regionid,5,6) ='00' ");
}
/**
* 根据登录用户获取用户所管理巡检组的查询sql语句
*
* @param userInfo
* UserInfo
* @param sqlBuf
* sqlBuf
*/
private void getPatrolmanSql(UserInfo userInfo, StringBuffer sqlBuf) {
sqlBuf.append(" select o.ID,o.NAME,nvl(allmancount,0) allmancount,nvl(olmancount,0) olmancount,o.PARENTID,'GROUP' AS objtype from view_patrolgroup o ");
sqlBuf.append(" left join (select count(distinct p.id) allmancount,count(distinct om.patrolman_id) olmancount, p.ORGID,p.PARENTID from view_patrolgroupperson p left join onlineman om ");
sqlBuf.append(" on p.ID=om.patrolman_id and om.activetime between sysdate - 1/12 and sysdate where p.OBJTYPE='MAN' group by p.PARENTID,p.ORGID) d");
sqlBuf.append(" on o.id=d.PARENTID where o.REGIONID=any(select regionid from region start with regionid='");
sqlBuf.append(userInfo.getRegionId());
sqlBuf.append("' connect by prior regionid=parentregionid) ");
if (userInfo.isCityContractor()) {
sqlBuf.append(" AND o.ORGID='");
sqlBuf.append(userInfo.getOrgId());
sqlBuf.append("' ");
}
}
/**
* 根据登录用户获取用户所管理在线巡检人员的查询sql语句
*
* @param userInfo
* UserInfo
* @param sqlBuf
* StringBuffer
*/
private void getPersonSql(UserInfo userInfo, StringBuffer sqlBuf) {
// TODO Auto-generated method stub
sqlBuf.append(" SELECT DISTINCT vpgp.ID AS id,vpgp.NAME, 1 allmancount,1 olmancount,");
sqlBuf.append(" vpgp.PARENTID,'PATROLPERSON' AS objtype");
sqlBuf.append(" FROM ONLINEMAN om ");
sqlBuf.append(" JOIN VIEW_PATROLGROUPPERSON vpgp ON om.PATROLMAN_ID=vpgp.ID ");
sqlBuf.append(" JOIN VIEW_ORGPATROLMAN vop ON vpgp.PARENTID=vop.ID ");
sqlBuf.append(" JOIN VIEW_ORG vo ON vop.PARENTID=vo.ID");
sqlBuf.append(" WHERE vpgp.OBJTYPE='MAN' ");
sqlBuf.append(" AND om.activetime>=sysdate-2/24 ");
sqlBuf.append(" AND vo.REGIONID=any(select regionid from region start with regionid='");
sqlBuf.append(userInfo.getRegionId());
sqlBuf.append("' connect by prior regionid=parentregionid) ");
if (userInfo.isCityContractor()) {
sqlBuf.append(" AND vo.ID='");
sqlBuf.append(userInfo.getOrgId());
sqlBuf.append("' ");
}
}
/**
* 根据登录用户获取用户所管理在线巡检人员sim卡号的查询sql语句
*
* @param userInfo
* UserInfo
* @param sqlBuf
* StringBuffer
*/
private void getSimSql(UserInfo userInfo, StringBuffer sqlBuf) {
// TODO Auto-generated method stub
sqlBuf.append(" SELECT DISTINCT bti.TERMINALID AS id,bti.SIMNUMBER AS TEXT, ");
sqlBuf.append(" bti.OWNERID AS PARENTID,'PATROLPERSON' AS objtype,6 AS lv, ");
sqlBuf.append(" DECODE(om.ACTIVETIME,NULL,'0','','0', ");
sqlBuf.append(" DECODE(SIGN(sysdate-om.ACTIVETIME-2/24),1,'0','1') ");
sqlBuf.append(" ) AS status ");
sqlBuf.append(" FROM ONLINEMAN om ");
sqlBuf.append(" JOIN BASE_TERMINALINFO bti ON om.SIMID=bti.SIMNUMBER ");
sqlBuf.append(" JOIN VIEW_ORGPATROLMAN vop ON bti.OWNERID=vop.ID ");
sqlBuf.append(" JOIN VIEW_ORG vo ON vop.PARENTID=vo.ID");
sqlBuf.append(" WHERE 1=1 ");
// 必须代维人员为null才取设备
sqlBuf.append(" and om.patrolman_id is null ");
// sqlBuf.append(" AND om.activetime>=sysdate-2/24 ");
sqlBuf.append(" AND vo.REGIONID=any(select regionid from region start with regionid='");
sqlBuf.append(userInfo.getRegionId());
sqlBuf.append("' connect by prior regionid=parentregionid) ");
if (userInfo.isCityContractor()) {
sqlBuf.append(" AND vo.ID='");
sqlBuf.append(userInfo.getOrgId());
sqlBuf.append("' ");
}
}
/**
* 获取用户快捷方式
*
* @param user
* 用户
* @return
*/
public List<Map<String, Object>> getShortCuts(UserInfo user) {
String sql = "select m.* from BASE_USER_SHORTCUTS s, base_menu m where s.menu_id=m.id and s.user_id= '"
+ user.getUserId() + "'";
logger.debug("查询用户快捷方式:" + sql);
return this.getJdbcTemplate().queryForList(sql);
}
}