| 
					
				 | 
			
			
				@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.redis.core.StringRedisTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.jdbc.core.JdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.lang.reflect.Field; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -48,6 +49,8 @@ public class ElasticsearchUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ElasticFactory elasticFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private StringRedisTemplate redisTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private JdbcTemplate jdbcTemplate; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${es.type.Statistics}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String esType; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${es.index.Statistics}") 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -296,6 +299,12 @@ public class ElasticsearchUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        public List findDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String areaLevel="6"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (areaLevels.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            areaLevel = areaLevels.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(startDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (startDate.length() > 10) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -352,7 +361,7 @@ public class ElasticsearchUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        sql.append(" quotaCode='" + index + "'  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" quotaCode in(" + index + ")  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and timeLevel='" + timeLevel + "'  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and areaLevel='6'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and areaLevel='"+areaLevel+"'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(startDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and quotaDate>='" + startDate + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1063,6 +1072,135 @@ public class ElasticsearchUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return excute(sql.toString(), SaveModel.class, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 多维度指标查寻(可控纬度与分组) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param startDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endDate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param area 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param level 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param timeLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param interval 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param lowLevel 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param groupKey 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param slaveKeys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List findDateQuotaLevels(String startDate, String endDate, String area, int level, String index, String timeLevel,String interval, String lowLevel,String groupKey,String ...slaveKeys) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String areaLevel="6"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' "; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (areaLevels.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            areaLevel = areaLevels.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(startDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (startDate.length() > 10) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                startDate = changeTime(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                startDate = changeDate(startDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(endDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (endDate.length() > 10) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                endDate = changeTime(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                endDate = changeDate(endDate); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer sql = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer groupBy = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String low_level = level + ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(lowLevel)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            low_level = lowLevel; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String[] groupKeys = groupKey.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer selectKeys = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        StringBuffer groupStr = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int i=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (String slaveKeyTmp:slaveKeys){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            selectKeys.append(" slaveKey").append(i).append(" as slaveKey").append(i).append(",slaveKey").append(i).append("Name as slaveKey").append(i).append("Name, "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            i++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (String groupKeyTmp:groupKeys){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupStr.append(",slaveKey"+groupKeyTmp+",slaveKey"+groupKeyTmp+"Name"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (SaveModel.doctorLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select doctor as doctor,doctorName as doctorName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by doctor,doctorName").append(groupStr.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else if (SaveModel.deptLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select dept as dept,deptName as deptName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by dept,deptName").append(groupStr.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.OrgLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select hospital as hospital,hospitalName as hospitalName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by hospital,hospitalName").append(groupStr.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.townLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select town as town,townName as townName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by town,townName").append(groupStr.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } else if (SaveModel.cityLevel.equals(low_level)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append("select city as city,cityName as cityName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            groupBy.append("  group by city,cityName").append(groupStr.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(area)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (SaveModel.doctorLevel.equals(level + "")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" doctor='" + area + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else if (SaveModel.deptLevel.equals(level + "")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" dept='" + area + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (SaveModel.OrgLevel.equals(level + "")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" hospital='" + area + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (SaveModel.townLevel.equals(level + "")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" town='" + area + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (SaveModel.cityLevel.equals(level + "")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" city='" + area + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" quotaCode in(" + index + ")  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and timeLevel='" + timeLevel + "'  "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(" and areaLevel='"+areaLevel+"'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(startDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and quotaDate>='" + startDate + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(endDate)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            sql.append(" and quotaDate<='" + endDate + "'"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        i=1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (String slaveKeyTmp:slaveKeys){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (StringUtils.isNotBlank(slaveKeyTmp)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String[] str = slaveKeyTmp.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                StringBuffer buffer = new StringBuffer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for (int j=0;j<str.length;j++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    buffer.append("'"+str[j]+"',"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                buffer.deleteCharAt(buffer.length()-1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                sql.append(" and slaveKey").append(i).append(" in (" + buffer + ")"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            i++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //根据时间维度分组 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotEmpty(interval)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (SaveModel.interval_month.equals(interval)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (SaveModel.interval_week.equals(interval)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } else if (SaveModel.interval_day.equals(interval)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') "); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        sql.append(groupBy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("sql :" + sql.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return excute(sql.toString(), SaveModel.class, "", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 二级指标查询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1770,6 +1908,14 @@ public class ElasticsearchUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return (SaveModel) list.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 多维度指标查询 可控制key与group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public  SaveModel findOneDateQuotaLevels(String startDate, String endDate, String area, int level, String index, String timelevel,String groupKey,String ...slaveKeys) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List list = findDateQuotaLevels(startDate, endDate, area, level, index, timelevel,null, null,groupKey,slaveKeys); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return (SaveModel) list.get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 1级维度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -1786,6 +1932,14 @@ public class ElasticsearchUtil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 多维度指标查询 可控制key与group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public  List<SaveModel> findDateQuotaLevelList(String startDate, String endDate, String area, int level, String index, String timelevel,String groupKey,String ...slaveKeys) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List list = findDateQuotaLevels(startDate, endDate, area, level, index, timelevel,null, null,groupKey,slaveKeys); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return list; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 1级维度 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表 
			 |