|  | @ -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级维度下的指标 例如某个机构下的所有维度的患者列表
 |