package com.cabletech.business.analysis.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.business.base.condition.BusinessConditionUtils;
import com.cabletech.business.base.condition.ConditionGenerateUtils;
import com.cabletech.business.base.condition.QueryParameter;
import com.cabletech.common.base.BaseDao;
import com.cabletech.common.base.SysConstant;
import com.cabletech.common.util.Page;
/**
* 站点巡检结果统计分析Dao
*
* @author 杨隽 2012-07-27 创建
*
*/
@SuppressWarnings("rawtypes")
@Repository
public class StationPatrolResultAnalyseDao extends BaseDao {
/**
* 获取站点巡检结果统计分析列表
*
* @param parameters
* Map<String, String> 参数
* @param page
* Page
*/
@SuppressWarnings("unchecked")
public void getStationPatrolResult(Map<String, Object> parameters, Page page) {
StringBuffer sqlBuffer = new StringBuffer("");
sqlBuffer
.append(" SELECT wp.ID AS PLAN_ID,wer.ID AS RESULT_ID,rz.ZYMC AS STATION_NAME, ");
sqlBuffer.append(" vp.PARENTNAME AS ORG_NAME,vp.NAME AS PATROL_NAME, ");
sqlBuffer.append(" wp.PLAN_NAME,dic.LABLE AS BUSINESS_TYPE, ");
sqlBuffer
.append(" DECODE(wer.ID,NULL,'否',decode(replace(wer.RESOURCE_ID,wpr.RESOURCE_ID),'','是','否')) ");
sqlBuffer.append(" AS IS_PATROLED, ");
sqlBuffer.append(" TO_CHAR(wer.END_TIME,'yyyy-mm-dd hh24:mi:ss') ");
sqlBuffer.append(" AS PATROL_TIME_DIS, ");
sqlBuffer.append(" vpg.NAME AS PATROL_MAN ");
sqlBuffer.append(" FROM WPLAN_PATROLINFO wp ");
sqlBuffer.append(" JOIN WPLAN_PATROLRESOURCE wpr ");
sqlBuffer.append(" ON wpr.PLAN_ID=wp.ID ");
sqlBuffer.append(" JOIN RES_ZDXX rz ON rz.XTBH=wpr.RESOURCE_ID ");
sqlBuffer.append(" JOIN VIEW_PATROLGROUP vp ");
sqlBuffer.append(" ON wp.PATROL_GROUP_ID=vp.ID ");
sqlBuffer.append(" JOIN BASE_SYSDICTIONARY dic ");
sqlBuffer.append(" ON dic.CODEVALUE=wp.BUSINESS_TYPE ");
sqlBuffer.append(" AND dic.COLUMNTYPE='BUSINESSTYPE' ");
sqlBuffer.append(" LEFT JOIN ( ");
sqlBuffer
.append(" SELECT we.PLAN_ID,we.END_TIME,we.RESOURCE_ID,we.RESOURCE_TYPE, ");
sqlBuffer.append(" we.ID,we.PATROL_GROUP_ID,we.PATROLMAN_ID ");
sqlBuffer.append(" FROM WPLAN_EXECUTERESULT we ");
sqlBuffer.append(" WHERE we.END_TIME=( ");
sqlBuffer.append(" SELECT MAX(w.END_TIME) FROM WPLAN_EXECUTERESULT w ");
sqlBuffer
.append(" WHERE w.PLAN_ID=we.PLAN_ID AND we.RESOURCE_ID=w.RESOURCE_ID ");
sqlBuffer.append(" ) ");
sqlBuffer
.append(" ) wer ON wer.PLAN_ID=wp.ID AND wer.RESOURCE_ID=wpr.RESOURCE_ID ");
sqlBuffer.append(" LEFT JOIN VIEW_PATROLGROUPPERSON vpg ");
sqlBuffer.append(" ON vpg.ID=wer.PATROLMAN_ID ");
sqlBuffer.append(" WHERE wp.PLAN_STATE='" + SysConstant.PASSED_STATE
+ "' ");
getUserCondition(parameters, sqlBuffer);
getConditionString(parameters, sqlBuffer);
sqlBuffer
.append(" ORDER BY wp.END_TIME DESC,wer.END_TIME DESC,wp.ID DESC ");
super.getSQLPageAll(page, sqlBuffer.toString());
}
/**
* 获取用户专业查询条件
*
* @param parameters
* Map<String, Object>
* @param sqlBuffer
* StringBuffer
*/
private void getUserCondition(Map<String, Object> parameters,
StringBuffer sqlBuffer) {
UserInfo user = (UserInfo) parameters.get("user");
if (user == null) {
return;
}
List<Map<String, Object>> businessTypeList = user.getBusinessTypes();
String businessTypeStr = "";
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(" )");
}
}
/**
* 获取查询条件的字串
*
* @param parameters
* Map<String, String>
* @param sqlBuffer
* StringBuffer
*/
private void getConditionString(Map<String, Object> parameters,
StringBuffer sqlBuffer) {
QueryParameter parameter = new QueryParameter();
parameter.setAlias("wp");
parameter.setColumnName("BUSINESS_TYPE");
parameter.setValue((String) parameters.get("businessType"));
sqlBuffer.append(ConditionGenerateUtils
.getConditionEqualByAndLogicOperator(parameter));
parameter.setColumnName("REGION_ID");
parameter.setValue((String) parameters.get("regionId"));
sqlBuffer.append(BusinessConditionUtils.getRegionCondition(parameter));
parameter.setColumnName("PATROL_GROUP_ID");
parameter.setValue((String) parameters.get("patrolId"));
sqlBuffer.append(ConditionGenerateUtils
.getConditionEqualByAndLogicOperator(parameter));
parameter.setAlias("vp");
parameter.setColumnName("PARENTID");
parameter.setValue((String) parameters.get("orgId"));
sqlBuffer.append(BusinessConditionUtils.getOrgCondition(parameter));
if (StringUtils.isNotBlank((String) parameters.get("startTime"))
|| StringUtils.isNotBlank((String) parameters.get("endTime"))) {
sqlBuffer.append(" AND ((wer.END_TIME IS NULL) ");
sqlBuffer.append(" OR ( 1=1 ");
parameter.setAlias("wer");
parameter.setColumnName("END_TIME");
parameter.setValue((String) parameters.get("startTime"));
parameter.setOperator(ConditionGenerateUtils.GE_OPERATOR);
sqlBuffer.append(ConditionGenerateUtils
.getConditionDateTimeByAndLogicOperator(parameter));
parameter.setValue((String) parameters.get("endTime"));
parameter.setOperator(ConditionGenerateUtils.LE_OPERATOR);
sqlBuffer.append(ConditionGenerateUtils
.getConditionDateTimeByAndLogicOperator(parameter));
sqlBuffer.append(" ) ");
sqlBuffer.append(" ) ");
}
parameter.setAlias("rz");
parameter.setColumnName("ZYMC");
parameter.setValue((String) parameters.get("stationName"));
sqlBuffer.append(ConditionGenerateUtils
.getConditionLikeByAndLogicOperator(parameter));
}
}