package com.cabletech.business.wplan.plan.dao;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Repository;
import com.cabletech.baseinfo.business.entity.UserInfo;
import com.cabletech.common.base.BaseDao;
import com.cabletech.common.util.Page;
/**
*
* 巡检进度查询DAO
*
* @author wj
*
*/
@Repository
public class PatrolinfoScheduleDao extends BaseDao {
// 资源明细
private String detailed_sql = " select vsd.lable as restype,rrv.NAME as resname,vpgp.ORGNAME,vpgp.PARENTNAME as patrolgroupname, "
+ " vpgp.NAME as patrolmanname,r.arrive_time,r.start_time,r.end_time, "
+ " (trunc(to_number(END_TIME - START_TIME))||'天'||mod(trunc(to_number(END_TIME - START_TIME)*24),24) ||'小时'||mod(trunc(to_number(END_TIME - START_TIME)*24*60),60) ||'分'||mod(round(to_number(END_TIME - START_TIME)*24*60*60),60) ||'秒') as PRESSURE "
+ " from wplan_executeresult r "
+ " join WPLAN_PATROLRESOURCE pr on pr.plan_id=r.plan_id and pr.resource_id=r.resource_id and pr.resource_type=r.resource_type "
+ " and r.end_time=(select max(end_time) from wplan_executeresult where plan_id=r.plan_id "
+ " and resource_id=r.resource_id and resource_type=r.resource_type and patrol_group_id=r.patrol_group_id) "
+ " left join wplan_patrolinfo wp on wp.id=r.plan_id "
+ " left join view_patrolgroupperson vpgp on r.patrolman_id = vpgp.ID and vpgp.OBJTYPE = 'MAN' "
+ " left join rs_resourcerecord_v rrv on rrv.ID = r.resource_id and rrv.TYPE = r.resource_type "
+ " left join view_sysdictionary vsd on rrv.type = vsd.codevalue and vsd.columntype = 'BUSINESSTYPE' "
+ " where 1 = 1 ";
/**
* 按区域统计
*
* @param parameter
* 参数
* @param page
* Page
* @return LIST
*/
public Page statisticsByRegion(Map<String, Object> parameter, Page page) {
String endpatrol_condition = "";
String excption_condition = "";
if (StringUtils.isNotBlank((String) parameter.get("startTime"))
&& StringUtils.isNotBlank((String) parameter.get("endTime"))) {
endpatrol_condition = " and r.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
excption_condition = " and ret.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
}
endpatrol_condition+=getUserCondition(parameter);
excption_condition+=getUserCondition(parameter);
StringBuffer sb = new StringBuffer();
sb.append(" select t.regionid,t.REGIONNAME,nvl(res1.nub ,0)as resnub,nvl(res2.nub ,0)as excnub,nvl(res3.nub ,0)as excitem from view_region t ");
sb.append(" left join ( ");
sb.append(getEndPatrolSql("region", endpatrol_condition));
sb.append(" ) res1 on res1.regionid = t.regionid ");
sb.append(" left join ( ");
sb.append(getExceptionResSql("region", excption_condition));
sb.append(" ) res2 on res2.regionid = t.regionid ");
sb.append(" left join ( ");
sb.append(getExceptionItemSql("region", excption_condition));
sb.append(" ) res3 on res3.regionid = t.regionid ");
sb.append(" where t.lv = 3 ");
if (StringUtils.isNotBlank((String) parameter.get("regionId"))) {
sb.append(" and t.regionid in "
+ iterationRegion("'" + parameter.get("regionId") + "'"));
}
return super.findSQLPage(page, sb.toString());
}
/**
* 按组织统计
*
* @param parameter
* 参数
* @param page
* Page
* @return LIST
*/
public Page statisticsByOrg(Map<String, Object> parameter, Page page) {
String endpatrol_condition = "";
String excption_condition = "";
if (StringUtils.isNotBlank((String) parameter.get("startTime"))
&& StringUtils.isNotBlank((String) parameter.get("endTime"))) {
endpatrol_condition = " and r.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
excption_condition = " and ret.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
}
endpatrol_condition+=getUserCondition(parameter);
excption_condition+=getUserCondition(parameter);
StringBuffer sb = new StringBuffer();
sb.append(" select reg.REGIONNAME,t.id,t.name,nvl(res1.nub ,0)as resnub,nvl(res2.nub ,0)as excnub,nvl(res3.nub ,0)as excitem from view_org t ");
sb.append(" left join ( ");
sb.append(getEndPatrolSql("org", endpatrol_condition));
sb.append(") res1 on res1.orgid = t.id ");
sb.append(" left join ( ");
sb.append(getExceptionResSql("org", excption_condition));
sb.append(" ) res2 on res2.orgid = t.id");
sb.append(" left join ( ");
sb.append(getExceptionItemSql("org", excption_condition));
sb.append(" ) res3 on res3.orgid = t.id ");
sb.append("left join view_region reg on t.regionid = reg.regionid ");
sb.append("where t.orgtype = '2' ");
if (StringUtils.isNotBlank((String) parameter.get("regionId"))) {
sb.append(" and t.regionid in "
+ iterationRegion("'" + parameter.get("regionId") + "'"));
}
if (StringUtils.isNotBlank((String) parameter.get("orgId"))) {
sb.append(" and t.id in (select id from base_organize start with id = '"
+ parameter.get("orgId")
+ "' connect by prior id=parentid) ");
}
return super.findSQLPage(page, sb.toString());
}
/**
* 按巡检组统计
*
* @param parameter
* 参数
* @param page
* Page
* @return LIST
*/
public Page statisticsByPatrolGroup(Map<String, Object> parameter, Page page) {
String endpatrol_condition = "";
String excption_condition = "";
if (StringUtils.isNotBlank((String) parameter.get("startTime"))
&& StringUtils.isNotBlank((String) parameter.get("endTime"))) {
endpatrol_condition = " and r.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
excption_condition = " and ret.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
}
endpatrol_condition+=getUserCondition(parameter);
excption_condition+=getUserCondition(parameter);
StringBuffer sb = new StringBuffer();
sb.append(" select reg.REGIONNAME,t.orgname,t.id,t.name,nvl(res1.nub ,0)as resnub,nvl(res2.nub ,0)as excnub,nvl(res3.nub ,0)as excitem from view_patrolgroup t ");
sb.append(" left join ( ");
sb.append(getEndPatrolSql("patrolgroup", endpatrol_condition));
sb.append(") res1 on res1.PARENTID = t.id ");
sb.append(" left join ( ");
sb.append(getExceptionResSql("patrolgroup", excption_condition));
sb.append(" ) res2 on res2.PATROLGROUPID = t.id");
sb.append(" left join ( ");
sb.append(getExceptionItemSql("patrolgroup", excption_condition));
sb.append(" ) res3 on res3.PATROLGROUPID = t.id ");
sb.append("left join view_region reg on t.regionid = reg.regionid ");
sb.append("where 1=1");
if (StringUtils.isNotBlank((String) parameter.get("regionId"))) {
sb.append(" and t.regionid in "
+ iterationRegion("'" + parameter.get("regionId") + "'"));
}
if (StringUtils.isNotBlank((String) parameter.get("orgId"))) {
sb.append(" and t.parentid in (select id from base_organize start with id = '"
+ parameter.get("orgId")
+ "' connect by prior id=parentid) ");
}
if (StringUtils.isNotBlank((String) parameter.get("patrolGroupId"))) {
sb.append(" and t.id = '" + parameter.get("patrolGroupId") + "'");
}
return super.findSQLPage(page, sb.toString());
}
/**
* 按巡检员统计
*
* @param parameter
* 参数
* @param page
* Page
* @return LIST
*/
public Page statisticsByPatrolMan(Map<String, Object> parameter, Page page) {
String endpatrol_condition = "";
String excption_condition = "";
if (StringUtils.isNotBlank((String) parameter.get("startTime"))
&& StringUtils.isNotBlank((String) parameter.get("endTime"))) {
endpatrol_condition = " and r.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
excption_condition = " and ret.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ";
}
endpatrol_condition+=getUserCondition(parameter);
excption_condition+=getUserCondition(parameter);
StringBuffer sb = new StringBuffer();
sb.append("select reg.REGIONNAME,t.ORGNAME,t.PARENTNAME,t.id,t.NAME,nvl(res1.nub ,0)as resnub,nvl(res2.nub ,0)as excnub,nvl(res3.nub ,0)as excitem from view_patrolgroupperson t ");
sb.append(" left join ( ");
sb.append(getEndPatrolSql("patrolman", endpatrol_condition));
sb.append(") res1 on res1.id = t.id ");
sb.append(" left join ( ");
sb.append(getExceptionResSql("patrolman", excption_condition));
sb.append(" ) res2 on res2.patrolmanid = t.id");
sb.append(" left join ( ");
sb.append(getExceptionItemSql("patrolman", excption_condition));
sb.append(" ) res3 on res3.patrolmanid = t.id ");
sb.append("left join view_region reg on t.regionid = reg.regionid ");
sb.append("where t.objtype = 'MAN'");
if (StringUtils.isNotBlank((String) parameter.get("regionId"))) {
sb.append(" and t.regionid in "
+ iterationRegion("'" + parameter.get("regionId") + "'"));
}
if (StringUtils.isNotBlank((String) parameter.get("orgId"))) {
sb.append(" and t.orgid in (select id from base_organize start with id = '"
+ parameter.get("orgId")
+ "' connect by prior id=parentid) ");
}
if (StringUtils.isNotBlank((String) parameter.get("patrolGroupId"))) {
sb.append(" and t.parentid = '" + parameter.get("patrolGroupId")
+ "'");
}
return super.findSQLPage(page, sb.toString());
}
/**
* 查询资源明细
*
* @param page
* Page
* @param parameter
* 参数
* @return LIST
*/
public Page searchDetailed(Map<String, Object> parameter, Page page) {
StringBuffer sb = new StringBuffer();
sb.append(detailed_sql);
sb.append(getUserCondition(parameter));
if (StringUtils.isNotBlank((String) parameter.get("regionId"))) {
sb.append(" and vpgp.regionid in "
+ iterationRegion("'" + parameter.get("regionId") + "'"));
}
if (StringUtils.isNotBlank((String) parameter.get("orgId"))) {
sb.append(" and vpgp.orgid = '" + parameter.get("orgId") + "' ");
}
if (StringUtils.isNotBlank((String) parameter.get("patrolGroupId"))) {
sb.append(" and vpgp.parentid = '" + parameter.get("patrolGroupId")
+ "'");
}
if (StringUtils.isNotBlank((String) parameter.get("patrolManId"))) {
sb.append(" and vpgp.id = '" + parameter.get("patrolManId") + "'");
}
if (StringUtils.isNotBlank((String) parameter.get("startTime"))
&& StringUtils.isNotBlank((String) parameter.get("endTime"))) {
sb.append(" and r.start_time between to_date('"
+ parameter.get("startTime")
+ "','yyyy-MM-dd') and to_date('"
+ parameter.get("endTime") + "','yyyy-MM-dd') ");
}
return super.findSQLPage(page, sb.toString());
}
/**
* 根据条件生成巡检站点 SQL
*
* @param groupBy
* 查询标识
* @param condition
* 查询条件
* @return
*/
public String getEndPatrolSql(String groupBy, String condition) {
String queryKey = "";
String queryCondition = "";
String queryGorupBy = "";
if ("region".equals(groupBy)) {
queryKey = " VPGP.REGIONID, ";
queryGorupBy = " GROUP BY VPGP.REGIONID ";
queryCondition = condition;
}
if ("org".equals(groupBy)) {
queryKey = " VPGP.ORGID, ";
queryGorupBy = " GROUP BY VPGP.ORGID ";
queryCondition = condition;
}
if ("patrolgroup".equals(groupBy)) {
queryKey = " VPGP.PARENTID, ";
queryGorupBy = " GROUP BY VPGP.PARENTID ";
queryCondition = condition;
}
if ("patrolman".equals(groupBy)) {
queryKey = " VPGP.ID, ";
queryGorupBy = " GROUP BY VPGP.ID ";
queryCondition = condition;
}
StringBuffer sb = new StringBuffer();
sb.append(" SELECT ");
sb.append(queryKey);
sb.append(" COUNT(*) AS NUB FROM WPLAN_EXECUTERESULT R ");
sb.append(" JOIN WPLAN_PATROLRESOURCE PR ON PR.PLAN_ID=R.PLAN_ID AND PR.RESOURCE_ID=R.RESOURCE_ID AND PR.RESOURCE_TYPE=R.RESOURCE_TYPE ");
sb.append(" AND R.END_TIME=(SELECT MAX(END_TIME) FROM WPLAN_EXECUTERESULT WHERE PLAN_ID=R.PLAN_ID ");
sb.append(" AND RESOURCE_ID=R.RESOURCE_ID AND RESOURCE_TYPE=R.RESOURCE_TYPE AND PATROL_GROUP_ID=R.PATROL_GROUP_ID) ");
sb.append(" LEFT JOIN VIEW_PATROLGROUPPERSON VPGP ON R.PATROLMAN_ID = VPGP.ID AND VPGP.OBJTYPE = 'MAN' ");
sb.append(" JOIN WPLAN_PATROLINFO WP ON PR.PLAN_ID=WP.ID");
sb.append(" WHERE 1=1 ");
sb.append(queryCondition);
sb.append(queryGorupBy);
return sb.toString();
}
/**
* 根据条件生成异常站点 SQL
*
* @param groupBy
* 查询标识
* @param condition
* 查询条件
* @return
*/
public String getExceptionResSql(String groupBy, String condition) {
String queryKey = "";
String queryCondition = "";
String queryGorupBy = "";
if ("region".equals(groupBy)) {
queryKey = " RET.REGIONID, ";
queryGorupBy = " GROUP BY RET.REGIONID ";
queryCondition = condition;
}
if ("org".equals(groupBy)) {
queryKey = " RET.ORGID, ";
queryGorupBy = " GROUP BY RET.ORGID ";
queryCondition = condition;
}
if ("patrolgroup".equals(groupBy)) {
queryKey = " RET.PATROLGROUPID, ";
queryGorupBy = " GROUP BY RET.PATROLGROUPID ";
queryCondition = condition;
}
if ("patrolman".equals(groupBy)) {
queryKey = " RET.PATROLMANID, ";
queryGorupBy = " GROUP BY RET.PATROLMANID ";
queryCondition = condition;
}
StringBuffer sb = new StringBuffer();
sb.append(" SELECT ");
sb.append(queryKey);
sb.append(" COUNT(DISTINCT WPRC.EXECUTERESULT_ID) AS NUB FROM WPLAN_PATROLRECORD WPRC ");
sb.append(" JOIN WPLAN_PATROLSUBITEM WPSI ON WPSI.ID = WPRC.SUBITEM_ID ");
sb.append(" JOIN ( ");
sb.append(" SELECT WER.*,VPGP.REGIONID,VPGP.ORGID,VPGP.PARENTNAME AS PATROLGROUPNAME,VPGP.PARENTID AS PATROLGROUPID,VPGP.ID AS PATROLMANID,VPGP.NAME AS PATROLNAME FROM WPLAN_EXECUTERESULT WER ");
sb.append(" JOIN WPLAN_PATROLRESOURCE PR ON PR.PLAN_ID=WER.PLAN_ID AND PR.RESOURCE_ID=WER.RESOURCE_ID AND PR.RESOURCE_TYPE=WER.RESOURCE_TYPE ");
sb.append(" AND WER.END_TIME=(SELECT MAX(END_TIME) FROM WPLAN_EXECUTERESULT WHERE PLAN_ID=WER.PLAN_ID ");
sb.append(" AND RESOURCE_ID=WER.RESOURCE_ID AND RESOURCE_TYPE=WER.RESOURCE_TYPE AND PATROL_GROUP_ID=WER.PATROL_GROUP_ID) ");
sb.append(" LEFT JOIN VIEW_PATROLGROUPPERSON VPGP ON WER.PATROLMAN_ID = VPGP.ID AND VPGP.OBJTYPE = 'MAN' ");
sb.append(" ) RET ON RET.ID = WPRC.EXECUTERESULT_ID ");
sb.append(" JOIN WPLAN_PATROLINFO WP ON RET.PLAN_ID=WP.ID");
sb.append(" WHERE WPSI.EXCEPTION_VALUE IS NOT NULL AND WPRC.SUBITEM_PATROL=WPSI.EXCEPTION_VALUE ");
sb.append(queryCondition);
sb.append(queryGorupBy);
return sb.toString();
}
/**
* 根据条件生成异常项 SQL
*
* @param groupBy
* 查询标识
* @param condition
* 查询条件
* @return
*/
public String getExceptionItemSql(String groupBy, String condition) {
String queryKey = "";
String queryCondition = "";
String queryGorupBy = "";
if ("region".equals(groupBy)) {
queryKey = " RET.REGIONID, ";
queryGorupBy = " GROUP BY RET.REGIONID ";
queryCondition = condition;
}
if ("org".equals(groupBy)) {
queryKey = " RET.ORGID, ";
queryGorupBy = " GROUP BY RET.ORGID ";
queryCondition = condition;
}
if ("patrolgroup".equals(groupBy)) {
queryKey = " RET.PATROLGROUPID, ";
queryGorupBy = " GROUP BY RET.PATROLGROUPID ";
queryCondition = condition;
}
if ("patrolman".equals(groupBy)) {
queryKey = " RET.PATROLMANID, ";
queryGorupBy = " GROUP BY RET.PATROLMANID ";
queryCondition = condition;
}
StringBuffer sb = new StringBuffer();
sb.append(" SELECT ");
sb.append(queryKey);
sb.append(" COUNT(WPRC.ID) AS NUB FROM WPLAN_PATROLRECORD WPRC ");
sb.append(" JOIN WPLAN_PATROLSUBITEM WPSI ON WPSI.ID = WPRC.SUBITEM_ID ");
sb.append(" JOIN ( ");
sb.append(" SELECT WER.*,VPGP.REGIONID,VPGP.ORGID,VPGP.PARENTNAME AS PATROLGROUPNAME,VPGP.PARENTID AS PATROLGROUPID,VPGP.ID AS PATROLMANID,VPGP.NAME AS PATROLNAME FROM WPLAN_EXECUTERESULT WER ");
sb.append(" JOIN WPLAN_PATROLRESOURCE PR ON PR.PLAN_ID=WER.PLAN_ID AND PR.RESOURCE_ID=WER.RESOURCE_ID AND PR.RESOURCE_TYPE=WER.RESOURCE_TYPE ");
sb.append(" AND WER.END_TIME=(SELECT MAX(END_TIME) FROM WPLAN_EXECUTERESULT WHERE PLAN_ID=WER.PLAN_ID ");
sb.append(" AND RESOURCE_ID=WER.RESOURCE_ID AND RESOURCE_TYPE=WER.RESOURCE_TYPE AND PATROL_GROUP_ID=WER.PATROL_GROUP_ID) ");
sb.append(" LEFT JOIN VIEW_PATROLGROUPPERSON VPGP ON WER.PATROLMAN_ID = VPGP.ID AND VPGP.OBJTYPE = 'MAN' ");
sb.append(" ) RET ON RET.ID = WPRC.EXECUTERESULT_ID ");
sb.append(" JOIN WPLAN_PATROLINFO WP ON RET.PLAN_ID=WP.ID");
sb.append(" WHERE WPSI.EXCEPTION_VALUE IS NOT NULL AND WPRC.SUBITEM_PATROL=WPSI.EXCEPTION_VALUE ");
sb.append(queryCondition);
sb.append(queryGorupBy);
return sb.toString();
}
/**
* 封装区域递归
*
* @param regionId
* 区域id
* @return sql
*/
public String iterationRegion(String regionId) {
return " (select regionid from base_region start with regionid= "
+ regionId + " connect by prior regionid=parentid) ";
}
/**
* 获取用户专业查询条件
*
* @param parameters
* Map<String, Object>
* @param sqlBuffer
* StringBuffer
*/
private String getUserCondition(Map<String, Object> parameters) {
UserInfo user = (UserInfo) parameters.get("user");
if (user == null) {
return "";
}
List<Map<String, Object>> businessTypeList = user.getBusinessTypes();
String businessTypeStr = "";
StringBuffer sqlBuffer = new StringBuffer("");
if (CollectionUtils.isNotEmpty(businessTypeList)) {
for (int i = 0; i < businessTypeList.size(); i++) {
Map<String, Object> map = businessTypeList.get(i);
businessTypeStr += "'";
businessTypeStr += map.get("CODEVALUE");
businessTypeStr += "'";
if (i < businessTypeList.size() - 1) {
businessTypeStr += ",";
}
}
sqlBuffer.append(" AND wp.BUSINESS_TYPE IN ( ");
sqlBuffer.append(businessTypeStr);
sqlBuffer.append(" )");
}
return sqlBuffer.toString();
}
}