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