package com.yihu.wlyy.util; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.parser.SQLExprParser; import com.yihu.wlyy.config.es.ElasticFactory; import com.yihu.wlyy.web.quota.vo.SaveModel; import org.apache.commons.lang3.StringUtils; import org.elasticsearch.action.search.SearchResponse; import org.nlpcn.es4sql.domain.Select; import org.nlpcn.es4sql.jdbc.ObjectResult; import org.nlpcn.es4sql.jdbc.ObjectResultsExtractor; import org.nlpcn.es4sql.parse.ElasticSqlExprParser; import org.nlpcn.es4sql.parse.SqlParser; import org.nlpcn.es4sql.query.AggregationQueryAction; import org.nlpcn.es4sql.query.DefaultQueryAction; import org.nlpcn.es4sql.query.SqlElasticSearchRequestBuilder; import org.slf4j.Logger; 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.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * Created by chenweida on 2017/7/17. * SELECT town,townName,sum(result1) result1 FROM wlyy_quota_test * where quotaCode='1' * group by town,townName , date_histogram(field='quotaDate','interval'='week') */ @Component public class ElasticsearchUtil { private Logger logger = LoggerFactory.getLogger(ElasticsearchUtil.class); @Autowired private ElasticFactory elasticFactory; @Autowired private StringRedisTemplate redisTemplate; @Value("${es.type.Statistics}") private String esType; @Value("${es.index.Statistics}") private String esIndex; public List excute(String sql, Class clazz, String esType, String esIndex) { List saveModels = new ArrayList<>(); try { SQLExprParser parser = new ElasticSqlExprParser(sql); SQLExpr expr = parser.expr(); SQLQueryExpr queryExpr = (SQLQueryExpr) expr; Select select = null; select = new SqlParser().parseSelect(queryExpr); //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等 AggregationQueryAction action = null; DefaultQueryAction queryAction = null; SqlElasticSearchRequestBuilder requestBuilder = null; if (select.isAgg) { //包含计算的的排序分组的 action = new AggregationQueryAction(elasticFactory.getTransportClient(), select); requestBuilder = action.explain(); } else { //封装成自己的Select对象 queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select); requestBuilder = queryAction.explain(); } SearchResponse response = (SearchResponse) requestBuilder.get(); Object queryResult = null; if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1) { queryResult = response.getAggregations(); } else { queryResult = response.getHits(); } ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true); List heads = temp.getHeaders(); temp.getLines().forEach(one -> { Object saveModel = null; try { saveModel = clazz.newInstance(); } catch (Exception e) { logger.error(e.getMessage()); } for (int i = 0; i < one.size(); i++) { try { String key = null; Object value = one.get(i); if (heads.get(i).startsWith("_")) { continue; } key = "set" + UpFirstStr(heads.get(i)); if (heads.get(i).contains("quotaDate") || heads.get(i).contains("createTime") || heads.get(i).contains("date_histogram")) { if (heads.get(i).contains("date_histogram")) { key = "setQuotaDate"; } value = DateUtil.strToDate(String.valueOf(value).replace("T00:00:00+0800", " 00:00:00"), "yyyy-MM-dd HH:mm:ss"); } if (value instanceof String) { clazz.getMethod(key, String.class).invoke(saveModel, value); } else if (value instanceof Integer) { clazz.getMethod(key, Integer.class).invoke(saveModel, value); } else if (value instanceof Double) { clazz.getMethod(key, Double.class).invoke(saveModel, value); } else if (value instanceof java.util.Date) { clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value); } } catch (Exception e) { logger.warn(e.getMessage()); } } saveModels.add(saveModel); }); } catch (Exception e) { logger.error(e.getMessage()); } return saveModels; } public Long excuteForLong(String sql, String esType, String esIndex) { try { SQLExprParser parser = new ElasticSqlExprParser(sql); SQLExpr expr = parser.expr(); SQLQueryExpr queryExpr = (SQLQueryExpr) expr; Select select = null; select = new SqlParser().parseSelect(queryExpr); //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等 AggregationQueryAction action = null; DefaultQueryAction queryAction = null; SqlElasticSearchRequestBuilder requestBuilder = null; if (select.isAgg) { //包含计算的的排序分组的 action = new AggregationQueryAction(elasticFactory.getTransportClient(), select); requestBuilder = action.explain(); } else { //封装成自己的Select对象 queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select); requestBuilder = queryAction.explain(); } SearchResponse response = (SearchResponse) requestBuilder.get(); ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getAggregations(), true); Long Longvalue = ((Double) temp.getLines().get(0).get(1)).longValue(); return Longvalue; } catch (Exception e) { logger.error(e.getMessage()); } return 0L; } /** * 首字母大写 * * @param str * @return */ private String UpFirstStr(String str) { return str.replaceFirst(str.substring(0, 1), str.substring(0, 1).toUpperCase()); } public Object excuteOneObject(String sql, Class clazz, String esType, String esIndex) { try { SQLExprParser parser = new ElasticSqlExprParser(sql); SQLExpr expr = parser.expr(); SQLQueryExpr queryExpr = (SQLQueryExpr) expr; Select select = null; select = new SqlParser().parseSelect(queryExpr); //通过抽象语法树,封装成自定义的Select,包含了select、from、where group、limit等 AggregationQueryAction action = null; DefaultQueryAction queryAction = null; SqlElasticSearchRequestBuilder requestBuilder = null; if (select.isAgg) { //包含计算的的排序分组的 action = new AggregationQueryAction(elasticFactory.getTransportClient(), select); requestBuilder = action.explain(); } else { //封装成自己的Select对象 queryAction = new DefaultQueryAction(elasticFactory.getTransportClient(), select); requestBuilder = queryAction.explain(); } SearchResponse response = (SearchResponse) requestBuilder.get(); ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getHits(), true); List heads = temp.getHeaders(); Object saveModel = clazz.newInstance(); try { for (int i = 0; i < temp.getLines().get(0).size(); i++) { String key = null; Object value = temp.getLines().get(0).get(i); if (heads.get(i).contains("createTime")) { key = "setCreateTime"; value = DateUtil.strToDate(String.valueOf(value).replace("+0800", "").replace("T", " "), "yyyy-MM-dd HH:mm:ss"); } else { key = "set" + UpFirstStr(heads.get(i)); } if (value instanceof String) { clazz.getMethod(key, String.class).invoke(saveModel, value); } else if (value instanceof Integer) { clazz.getMethod(key, Integer.class).invoke(saveModel, value); } else if (value instanceof Double) { clazz.getMethod(key, Double.class).invoke(saveModel, value); } else if (value instanceof java.util.Date) { clazz.getMethod(key, java.util.Date.class).invoke(saveModel, value); } } } catch (Exception e) { logger.warn(e.getMessage()); } return saveModel; } catch (Exception e) { logger.error(e.getMessage()); } return null; } /** * 0级指标查询列表 * 获取所有指标的增量、到达量 * 备注:原来接口的一级指标对应现在的 * * @param startDate 开始时间 * @param endDate 结束时间 * @param area 区域code * @param level 等级 * @param index 指标 * @param timeLevel 1增量 2到达量 * @param interval 1日 2周 3月 * @param lowLevel 下一级区域等级 * @return * @throws Exception */ public List findDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception { //时间格式转换 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; } if (SaveModel.teamLevel.equals(low_level)) { sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by team,teamName"); } else if (SaveModel.OrgLevel.equals(low_level)) { sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by hospital,hospitalName"); } else if (SaveModel.townLevel.equals(low_level)) { sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by town,townName"); } else if (SaveModel.cityLevel.equals(low_level)) { sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by city,cityName"); } if(StringUtils.isNotEmpty(area)){ if (SaveModel.teamLevel.equals(level + "")) { sql.append(" team='" + 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='" + index + "' "); sql.append(" and timeLevel='" + timeLevel + "' "); sql.append(" and areaLevel='5'"); if (StringUtils.isNotEmpty(startDate)) { sql.append(" and quotaDate>='" + startDate + "'"); } if (StringUtils.isNotEmpty(endDate)) { sql.append(" and quotaDate<='" + endDate + "'"); } //根据时间维度分组 if (StringUtils.isNotEmpty(interval)) { if (SaveModel.interval_month.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') "); } else if (SaveModel.interval_week.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') "); } else if (SaveModel.interval_day.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') "); } } sql.append(groupBy); return excute(sql.toString(), SaveModel.class, "", ""); } /** * 一级指标查询列表 * 获取一级指标的增量、到达量 * 备注:原接口的二级指标对应现在的一级指标 * * @param startDate 开始时间 * @param endDate 结束时间 * @param area 区域code * @param level 等级 * @param index 指标 * @param timeLevel 1增量 2到达量 * @param slaveKeyValue 一级维度 * @param interval 1日 2周 3月 * @param lowLevel 下个等级 * @return * @throws Exception */ public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel,int keyNum, String slaveKeyValue, String interval, String lowLevel) throws Exception { String slaveKey = ""; String slaveKeyName = ""; if(keyNum==1){ slaveKey = "slaveKey1"; slaveKeyName = "slaveKey1Name"; }else if(keyNum==2){ slaveKey = "slaveKey2"; slaveKeyName = "slaveKey2Name"; } //时间格式转换 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; } if (SaveModel.teamLevel.equals(low_level)) { sql.append("select team,teamName,"+slaveKey+","+slaveKeyName+",sum(result1) result1, sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by team,teamName,"+slaveKey+","+slaveKeyName); } else if (SaveModel.OrgLevel.equals(low_level)) { sql.append("select hospital,hospitalName,"+slaveKey+","+slaveKeyName+",sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by hospital,hospitalName,"+slaveKey+","+slaveKeyName); } else if (SaveModel.townLevel.equals(low_level)) { sql.append("select town,townName,"+slaveKey+",slaveKey1Name,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by town,townName,"+slaveKey+","+slaveKeyName); } else if (SaveModel.cityLevel.equals(low_level)) { sql.append("select city,cityName,"+slaveKey+","+slaveKeyName+",sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by city,cityName,"+slaveKey+","+slaveKeyName); } if(StringUtils.isNotEmpty(area)){ if (SaveModel.teamLevel.equals(level + "")) { sql.append(" team='" + 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='" + index + "' "); sql.append(" and timeLevel='" + timeLevel + "' "); sql.append(" and areaLevel='5'"); if (StringUtils.isNotEmpty(startDate)) { sql.append(" and quotaDate>='" + startDate + "'"); } if (StringUtils.isNotEmpty(endDate)) { sql.append(" and quotaDate<='" + endDate + "'"); } if (StringUtils.isNotEmpty(slaveKeyValue)) { sql.append(" and "+slaveKey+"='" + slaveKeyValue + "' "); } //根据时间维度分组 if (StringUtils.isNotEmpty(interval)) { if (SaveModel.interval_month.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') "); } else if (SaveModel.interval_week.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') "); } else if (SaveModel.interval_day.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') "); } } sql.append(groupBy); return excute(sql.toString(), SaveModel.class, "", ""); } /** * 二级指标查询列表 * 获取二级指标的增量、到达量 * 备注:原接口的三级指标对应现在的二级指标 * * @param startDate 开始时间 * @param endDate 结束时间 * @param area 区域code * @param level 等级 * @param index 指标 * @param timeLevel 1增量 2到达量 * @param slaveKey1 一级维度code * @param slaveKey2 二级维度code * @param interval 1日 2周 3月 * @param lowLevel 下一等级 * @return */ public List findDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2, String interval, String lowLevel) { //时间格式转换 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; } if (SaveModel.teamLevel.equals(low_level)) { sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from "+esIndex+" where "); groupBy.append(" group by team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name"); } else if (SaveModel.OrgLevel.equals(low_level)) { sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by hospital,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,hospitalName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name"); } else if (SaveModel.townLevel.equals(low_level)) { sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name"); } else if (SaveModel.cityLevel.equals(low_level)) { sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from "+esIndex+" where "); groupBy.append(" group by city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name"); } if(StringUtils.isNotEmpty(area)){ if (SaveModel.teamLevel.equals(level + "")) { sql.append(" team='" + 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='" + index + "' "); sql.append(" and timeLevel='" + timeLevel + "' "); sql.append(" and areaLevel='5'"); if (StringUtils.isNotEmpty(startDate)) { sql.append(" and quotaDate>='" + startDate + "'"); } if (StringUtils.isNotEmpty(endDate)) { sql.append(" and quotaDate<='" + endDate + "'"); } if (StringUtils.isNotBlank(slaveKey1)) { sql.append(" and slaveKey1='" + slaveKey1 + "'"); } if (StringUtils.isNotBlank(slaveKey2)) { sql.append(" and slaveKey2='" + slaveKey2 + "'"); } //根据时间维度分组 if (StringUtils.isNotEmpty(interval)) { if (SaveModel.interval_month.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00') "); } else if (SaveModel.interval_week.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00') "); } else if (SaveModel.interval_day.equals(interval)) { groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00') "); } } sql.append(groupBy); return excute(sql.toString(), SaveModel.class, "", ""); } /** * 时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800 * * @param quotaDate */ private String changeDate(String quotaDate){ try { quotaDate = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(quotaDate)); } catch (ParseException e) { e.printStackTrace(); } return quotaDate; } public String changeTime(String time){ try { if(time.length()==10){ time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd").parse(time)); }else if(time.length()==19){ time = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time)); } } catch (ParseException e) { e.printStackTrace(); } return time; } //获取最新更新的时间 public String getQuotaTime() { String date = redisTemplate.opsForValue().get("quota:date"); // date = date.replace(" ","T")+"+0800"; try { date = new SimpleDateFormat("yyyy-MM-dd").format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date)); }catch (ParseException e) { e.printStackTrace(); } return date; } /** * 0级维度 * 查询某一天某一个0级维度的指标 * * @param quotaDate 时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @return */ public SaveModel findOneDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel) throws Exception { List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, null); return (SaveModel) list.get(0); } /** * 0级维度 * 查询某个时间区间某一个0级维度的指标 * * @param startDate 开始时间 yyyy-mm-dd * @param endDate 结束时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @return */ public SaveModel findOneDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timelevel) throws Exception { List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, null); return (SaveModel) list.get(0); } /** * 1级维度 * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者 * * @param quotaDate 时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @param slaveKey1 一级维度的key 不传返回全部 * @return */ public SaveModel findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,1,slaveKey1, null, null); return (SaveModel) list.get(0); } public SaveModel findOneDateQuotaLevel1Key2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,2,slaveKey1, null, null); return (SaveModel) list.get(0); } /** * 1级维度 * 查询某个时间区间某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者 * * @param startDate 开始时间 yyyy-mm-dd * @param endDate 结束时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @param slaveKey1 一级维度的key 不传返回全部 * @return */ public SaveModel findOneDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,slaveKey1, null, null); return (SaveModel) list.get(0); } public SaveModel findOneDateQuotaLevel1Key2(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,slaveKey1, null, null); return (SaveModel) list.get(0); } /** * 1级维度 * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表 * * @param quotaDate 时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @return */ public List findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel) throws Exception { List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,1,null, null, null); return list; } public List findOneDateQuotaLevel1key2(String quotaDate, String area, int level, String index, String timelevel) throws Exception { List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,2,null, null, null); return list; } /** * 1级维度 * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表 * * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @return */ public List findOneDateQuotaLevel1(String startDate,String endDate, String area, int level, String index, String timelevel) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,null, null, null); return list; } public List findOneDateQuotaLevel1Key2(String startDate,String endDate, String area, int level, String index, String timelevel) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,null, null, null); return list; } /** * 2级维度 * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者 * * @param quotaDate 时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @param slaveKey1 一级维度的key * @param slaveKey2 二级维度的key * @return */ public SaveModel findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception { List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, null); return (SaveModel) list.get(0); } /** * 2级维度 * 查询某个时间区间某一个2级维度的某个1级维度和2级维度下的指标 例如查询65岁以上的高血压患者 * * @param startDate 开始时间 yyyy-mm-dd * @param endDate 结束时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @param slaveKey1 一级维度的key * @param slaveKey2 二级维度的key * @return */ public SaveModel findOneDateQuotaLevel2(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception { List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, null); return (SaveModel) list.get(0); } /** * 2级维度 * 查询某一天某个1级维度下所有2级维度的指标 例如查询65岁以上的高血压患者 * * @param quotaDate 时间 yyyy-mm-dd * @param area code 厦门市 350200 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel // 1日 2年 * @param slaveKey1 一级维度的key * @return */ public List findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,null, null, null); return list; } /** * 折线图 * 0级维度 * 查询某个0级维度的指标折线图 * * @param startDate 开始时间 yyyy-mm-dd 包含头 * @param endDate 结束时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param interval 1日 2周 3月 (按照日周月聚合) * @return * @throws Exception */ public List findLineChartDateQuotaLevel0(String startDate,String endDate, String area, int level, String index, String timelevel,String interval) throws Exception { List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, interval, null); return list; } /** * 折线图 * 1级维度 * 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者 * * @param startDate 开始时间 yyyy-mm-dd 包含头 * @param endDate 结束时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param interval 1日 2周 3月 (按照日周月聚合) * @param slaveKey1 一级维度的key * @return */ public List findLineChartDateQuotaLevel1(String startDate,String endDate, String area, int level, String index, String timelevel,String interval, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,slaveKey1, interval, null); return list; } public List findLineChartDateQuotaLevel1Key2(String startDate,String endDate, String area, int level, String index, String timelevel,String interval, String slaveKey2) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,slaveKey2, interval, null); return list; } /** * 折线图 * 2级维度 * 查询某个2级维度的某个1级维度和2级维度下的折线图 例如查询65岁以上的高血压患者 * * @param startDate 开始时间 yyyy-mm-dd 包含头 * @param endDate 结束时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param interval 1日 2周 3月 (按照日周月聚合) * @param slaveKey1 一级维度的key * @param slaveKey2 二级维度的key * @return */ public List findLineChartDateQuotaLevel2(String startDate,String endDate, String area, int level, String index, String timelevel,String interval, String slaveKey1, String slaveKey2) throws Exception { List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, interval, null); return list; } /** * 列表 * 0级维度 * 查询某一天某个0级维度的指标列表 * * @param quotaDate 时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队 * @return * @throws Exception */ public List findListDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception { List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, lowLevel); return list; } /** * 列表 * 0级维度 * 查询某个区间某个0级维度的指标列表 * * @param startDate 开始时间 yyyy-mm-dd 包含头 * @param endDate 结束时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队. * @return * @throws Exception */ public List findListDateQuotaLevel0(String startDate,String endDate, String area, int level, String index, String timelevel, String lowLevel) throws Exception { List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, null, lowLevel); return list; } /** * 列表 * 1级维度 * 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者 * * @param quotaDate 时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队 * @param slaveKey1 一级维度的key * @return */ public List findListDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel,String lowLevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,1,slaveKey1, null, lowLevel); return list; } public List findListDateQuotaLevel1Key2(String quotaDate, String area, int level, String index, String timelevel,String lowLevel, String slaveKey2) throws Exception { List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,2,slaveKey2, null, lowLevel); return list; } /** * 列表 * 1级维度 * 查询某个区间某个1级维度的某个1级维度下的列表 例如查询65岁以上患者 * * @param startDate 开始时间 yyyy-mm-dd 包含头 * @param endDate 结束时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队 * @param slaveKey1 一级维度的key * @return */ public List findListDateQuotaLevel1(String startDate,String endDate, String area, int level, String index, String timelevel,String lowLevel, String slaveKey1) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,1,slaveKey1, null, lowLevel); return list; } public List findListDateQuotaLevel1Key2(String startDate,String endDate, String area, int level, String index, String timelevel,String lowLevel, String slaveKey2) throws Exception { List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,2,slaveKey2, null, lowLevel); return list; } /** * 列表 * 2级维度 * 查询某个2级维度的某个1级维度和2级维度下的列表 例如查询65岁以上的高血压患者 * * @param quotaDate 时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队 * @param slaveKey1 一级维度的key * @param slaveKey2 二级维度的key * @return */ public List findListDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel,String lowLevel, String slaveKey1, String slaveKey2) throws Exception { List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, lowLevel); return list; } /** * 列表 * 2级维度 * 查询某个区间某个2级维度的某个1级维度和2级维度下的列表 例如查询65岁以上的高血压患者 * * @param startDate 开始时间 yyyy-mm-dd 包含头 * @param endDate 结束时间 yyyy-mm-dd 包含头 * @param area code 厦门市 350200 code 和level是对应的 * @param level 等级 1 省 2 市 3 区县 4 机构 5团队 * @param index 指标code * @param timelevel 1增量 2到达量(按照年度) * @param lowLevel 下一级区域等级 1 省 2 市 3 区县 4 机构 5团队 * @param slaveKey1 一级维度的key * @param slaveKey2 二级维度的key * @return */ public List findListDateQuotaLevel2(String startDate,String endDate, String area, int level, String index, String timelevel,String lowLevel, String slaveKey1, String slaveKey2) throws Exception { List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, lowLevel); return list; } /** * 将参数转换成需要的SaveModel里的标识 * @param level 等级 4 市 3区 2社区 1团队 * 转换后的level 等级 2 市 3区 4社区 5团队 * @return * @author zhangdan * @time 2017-10-18 */ public int changeLevel(int level){ int resultLevel =0; if (level==1){ //团队转成SaveModel里的标识 resultLevel = Integer.valueOf(SaveModel.teamLevel); }else if(level==2){ //社区转成SaveModel里的标识 resultLevel = Integer.valueOf(SaveModel.OrgLevel); }else if (level ==3){ //区转成SaveModel里的标识 resultLevel = Integer.valueOf(SaveModel.townLevel); }else if (level==4){ //市转成SaveModel里的标识 resultLevel = Integer.valueOf(SaveModel.cityLevel); } if(resultLevel==0){ resultLevel = level; } return resultLevel; } }