|
@ -1,667 +0,0 @@
|
|
|
package com.yihu.jw.care.service.statistics;
|
|
|
|
|
|
|
|
|
import com.yihu.jw.es.service.StatisticsEsService;
|
|
|
import com.yihu.jw.es.util.ElasticsearchUtil;
|
|
|
import com.yihu.jw.es.util.SaveModel;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* 统计工具类
|
|
|
* Created by yeshijie on 2020/12/14.
|
|
|
*/
|
|
|
@Service
|
|
|
public class StatisticsUtilService {
|
|
|
|
|
|
@Value("${es.type.Statistics}")
|
|
|
private String esType;
|
|
|
@Value("${es.index.Statistics}")
|
|
|
private String esIndex;
|
|
|
@Autowired
|
|
|
private ElasticsearchUtil elasticsearchUtil;
|
|
|
@Autowired
|
|
|
private StatisticsEsService statisticsESService;
|
|
|
|
|
|
public final String commonParams = "xmijk_quota";
|
|
|
|
|
|
/**
|
|
|
* 根据开始时间 结束时间判断查询增量还是到达量
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @return
|
|
|
*/
|
|
|
public String getDDLOrZL(String startDate,String endDate){
|
|
|
String ddlOrZl = "1";
|
|
|
if(endDate.equals(startDate)){
|
|
|
ddlOrZl = SaveModel.timeLevel_DDL;
|
|
|
}
|
|
|
return ddlOrZl;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取签约开始时间,7月1号
|
|
|
* @return
|
|
|
*/
|
|
|
public String getSignStartDay(){
|
|
|
return DateUtil.getSignYear()+"-07-01";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 如果开始时间是7月1号 就设置为结束时间
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @return
|
|
|
*/
|
|
|
public String getStartDate(String startDate,String endDate){
|
|
|
if(startDate.equals(getSignStartDay())){
|
|
|
return endDate;
|
|
|
}
|
|
|
return startDate;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 是否是专科
|
|
|
* @param level
|
|
|
* @param area
|
|
|
* @return
|
|
|
*/
|
|
|
public boolean isSpecialist(int level,String area){
|
|
|
if(level == 4 && area.length() != 10){
|
|
|
return true;
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取下转的map
|
|
|
* @param saveModel
|
|
|
* @param lowLevel
|
|
|
* @param result2Name
|
|
|
* @return
|
|
|
*/
|
|
|
public Map<String, Object> getMapTurnDownResult2(SaveModel saveModel,String lowLevel,String result2Name){
|
|
|
Map<String, Object> map = getMapTurnDown(saveModel, lowLevel);
|
|
|
map.put(result2Name, saveModel.getResult2().longValue());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
public Map<String, Object> getMapTurnDownResult12(SaveModel saveModel,String lowLevel,String result1Name,String result2Name){
|
|
|
Map<String, Object> map = getMapTurnDown(saveModel, lowLevel);
|
|
|
map.put(result1Name, saveModel.getResult1());
|
|
|
map.put(result2Name, saveModel.getResult2().longValue());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
public Map<String, Object> getMapTurnDown(SaveModel saveModel,String lowLevel){
|
|
|
Map<String, Object> map = new HashMap<>(16);
|
|
|
if (SaveModel.OrgLevel.equals(lowLevel)) {
|
|
|
map.put("code", saveModel.getHospital());
|
|
|
map.put("name", saveModel.getHospitalName());
|
|
|
} else if (SaveModel.townLevel.equals(lowLevel)) {
|
|
|
map.put("code", saveModel.getTown());
|
|
|
map.put("name", saveModel.getTownName());
|
|
|
} else if (SaveModel.cityLevel.equals(lowLevel)) {
|
|
|
map.put("code", saveModel.getCity());
|
|
|
map.put("name", saveModel.getCityName());
|
|
|
} else if (SaveModel.deptLevel.equals(lowLevel)) {
|
|
|
map.put("code", saveModel.getDept());
|
|
|
map.put("name", saveModel.getDeptName());
|
|
|
}else if (SaveModel.doctorLevel.equals(lowLevel)) {
|
|
|
map.put("code", saveModel.getDoctor());
|
|
|
map.put("name", saveModel.getDoctorName());
|
|
|
}
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
public boolean compareSaveModel(SaveModel saveModel1,SaveModel saveModel2,String lowLevel){
|
|
|
if (SaveModel.OrgLevel.equals(lowLevel) && saveModel1.getHospital() != null && saveModel2.getHospital() != null) {
|
|
|
return saveModel1.getHospital().equals(saveModel2.getHospital());
|
|
|
} else if (SaveModel.townLevel.equals(lowLevel) && saveModel1.getTown() != null && saveModel2.getTown() != null) {
|
|
|
return saveModel1.getTown().equals(saveModel2.getTown());
|
|
|
} else if (SaveModel.cityLevel.equals(lowLevel) && saveModel1.getCity() != null && saveModel2.getCity() != null) {
|
|
|
return saveModel1.getCity().equals(saveModel2.getCity());
|
|
|
} else if (SaveModel.deptLevel.equals(lowLevel) && saveModel1.getDept() != null && saveModel2.getDept() != null) {
|
|
|
return saveModel1.getDept().equals(saveModel2.getDept());
|
|
|
}else if (SaveModel.doctorLevel.equals(lowLevel) && saveModel1.getDoctor() != null && saveModel2.getDoctor() != null) {
|
|
|
return saveModel1.getDoctor().equals(saveModel2.getDoctor());
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取到达量或者增量
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public long getTotalAmountDDLOrZL(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception{
|
|
|
if(endDate.equals(startDate)){
|
|
|
return getTotalAmount3DDL(startDate, endDate, area, level, index, level2_type);
|
|
|
}
|
|
|
return getTotalAmount3ZL(startDate, endDate, area, level, index, level2_type);
|
|
|
}
|
|
|
|
|
|
public long getTotalAmount3ZL(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
|
|
|
SaveModel saveModel = null;
|
|
|
if (StringUtils.isNotEmpty(level2_type)) {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, level2_type);
|
|
|
} else {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL);
|
|
|
}
|
|
|
return saveModel.getResult2().longValue();
|
|
|
}
|
|
|
|
|
|
public long getTotalAmount3DDL(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
|
|
|
SaveModel saveModel = null;
|
|
|
if (StringUtils.isNotEmpty(level2_type)) {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, level2_type);
|
|
|
} else {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL);
|
|
|
}
|
|
|
return saveModel.getResult2().longValue();
|
|
|
}
|
|
|
|
|
|
|
|
|
public Map<String, Object> saveModelToMap(SaveModel saveModel){
|
|
|
Map<String, Object> map = new HashMap<>(16);
|
|
|
map.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd"));
|
|
|
map.put("amount", saveModel.getResult2());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
public Map<String, Object> slaveKay1ToMapLong(SaveModel saveModel){
|
|
|
Map<String, Object> map = new HashMap<>(16);
|
|
|
map.put("code", saveModel.getSlaveKey1());
|
|
|
map.put("name", saveModel.getSlaveKey1Name());
|
|
|
map.put("num", saveModel.getResult2().longValue());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
|
|
|
public Map<String, Object> slaveKay1ToMapLong2(SaveModel saveModel){
|
|
|
Map<String, Object> map = new HashMap<>(16);
|
|
|
map.put("code", saveModel.getSlaveKey1());
|
|
|
map.put("name", saveModel.getSlaveKey1Name());
|
|
|
map.put("num", saveModel.getResult2().longValue());
|
|
|
map.put("price", saveModel.getResult1());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
public Map<String, Object> slaveKay2ToMapLong(SaveModel saveModel){
|
|
|
Map<String, Object> map = new HashMap<>(16);
|
|
|
map.put("code", saveModel.getSlaveKey2());
|
|
|
map.put("name", saveModel.getSlaveKey2Name());
|
|
|
map.put("num", saveModel.getResult2().longValue());
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 计算开始时间
|
|
|
* @param endDate
|
|
|
* @param type 1周,2月
|
|
|
* @return
|
|
|
*/
|
|
|
public String calStart(String endDate,String type){
|
|
|
if(StringUtils.isEmpty(endDate)){
|
|
|
return endDate;
|
|
|
}
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
cal.setTime(DateUtil.strToDate(endDate));
|
|
|
if("1".equals(type)){
|
|
|
if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
|
|
|
cal.add(Calendar.DAY_OF_WEEK,-1);
|
|
|
}
|
|
|
cal.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);
|
|
|
}else{
|
|
|
cal.set(Calendar.DAY_OF_MONTH,1);
|
|
|
}
|
|
|
return DateUtil.dateToStrShort(cal.getTime());
|
|
|
}
|
|
|
|
|
|
|
|
|
public String getSaveModelCode(int level,SaveModel saveModel){
|
|
|
if(level == 4){
|
|
|
return saveModel.getDept();
|
|
|
}else if(level == 3){
|
|
|
return saveModel.getHospital();
|
|
|
}else if(level == 2){
|
|
|
return saveModel.getTown();
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 按sortName排序 降序
|
|
|
* @param resultList
|
|
|
*/
|
|
|
public void sortDoubleList(List<Map<String,Object>> resultList, String sortName){
|
|
|
resultList.sort((x,y)->{
|
|
|
if ( (Long) x.get(sortName) > (Long) y.get(sortName)) {
|
|
|
return 1;
|
|
|
} else if ((Long) x.get(sortName) < (Long) y.get(sortName)) {
|
|
|
return -1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 降序
|
|
|
* @param resultList
|
|
|
* @param sortName
|
|
|
*/
|
|
|
public void sortLongList(List<Map<String,Object>> resultList,String sortName){
|
|
|
resultList.sort((x,y)->{
|
|
|
if ( (Long) x.get(sortName) > (Long) y.get(sortName)) {
|
|
|
return -1;
|
|
|
} else if ((Long) x.get(sortName) < (Long) y.get(sortName)) {
|
|
|
return 1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
|
|
|
/**************************************************封装的方法 start ********************************************/
|
|
|
/**
|
|
|
* 查询总量
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param timelevel
|
|
|
* @param slaveKey1
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public long getTotalAmount(String startDate, String endDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception{
|
|
|
if(SaveModel.timeLevel_DDL.equals(timelevel)){
|
|
|
return getTotalAmount3DDL(startDate,endDate,area,level,index,slaveKey1);
|
|
|
}else {
|
|
|
return getTotalAmount3ZL(startDate,endDate,area,level,index,slaveKey1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 查一级指标
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param timeLevel
|
|
|
* @param interval
|
|
|
* @param slaveKey1
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public List findDateQuotaLevel0BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String slaveKey1) throws Exception {
|
|
|
if(StringUtils.isEmpty(slaveKey1)){
|
|
|
return elasticsearchUtil.findDateQuotaLevel0(startDate, endDate, area, level, index, timeLevel, interval, null);
|
|
|
}else {
|
|
|
return findDateQuotaLevel0BySlaveKey1(startDate,endDate,area,level,index,timeLevel,interval,null,slaveKey1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public long getTotalAmountLevel2BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2 ) throws Exception{
|
|
|
SaveModel saveModel = findOneDateQuotaLevel2BySlaveKey1(startDate, endDate, area, level, index, timeLevel, slaveKey1, slaveKey2);
|
|
|
return saveModel.getResult1().longValue();
|
|
|
}
|
|
|
|
|
|
public SaveModel findOneDateQuotaLevel2BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2) throws Exception {
|
|
|
if(StringUtils.isEmpty(slaveKey2)){
|
|
|
slaveKey2 = commonParams;
|
|
|
}
|
|
|
List list = findDateQuotaLevel2BySlaveKey1(startDate, endDate, area, level, index, timeLevel, slaveKey1, slaveKey2,null, null);
|
|
|
return (SaveModel) list.get(0);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查找一级或二级维度
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param timeLevel
|
|
|
* @param slaveKey1
|
|
|
* @param slaveKey2
|
|
|
* @param interval
|
|
|
* @param lowLevel
|
|
|
* @return
|
|
|
*/
|
|
|
public List findDateQuotaLevel2BySlaveKey1(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
|
|
|
startDate = changeDateTime(startDate);
|
|
|
endDate = changeDateTime(endDate);
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
|
|
|
sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey2,"slaveKey2","slaveKey2Name");
|
|
|
|
|
|
sqlArea(sql,area,level,index,timeLevel,startDate,endDate);
|
|
|
|
|
|
sqlSlaveKey(slaveKey1,"slaveKey1",sql);
|
|
|
sqlSlaveKey(slaveKey2,"slaveKey2",sql);
|
|
|
|
|
|
//根据时间维度分组
|
|
|
groupByInterval(interval,groupBy);
|
|
|
|
|
|
sql.append(groupBy);
|
|
|
return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
* @param dateTime
|
|
|
* @return
|
|
|
*/
|
|
|
public String changeDateTime(String dateTime){
|
|
|
if (StringUtils.isNotEmpty(dateTime)) {
|
|
|
if (dateTime.length() > 10) {
|
|
|
return elasticsearchUtil.changeTime(dateTime);
|
|
|
} else {
|
|
|
return elasticsearchUtil.changeDate(dateTime);
|
|
|
}
|
|
|
}
|
|
|
return dateTime;
|
|
|
}
|
|
|
|
|
|
public void groupByInterval(String interval,StringBuffer groupBy){
|
|
|
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') ");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void sqlArea(StringBuffer sql,String area,int level,boolean isAnd){
|
|
|
if (StringUtils.isNotEmpty(area)) {
|
|
|
if (SaveModel.deptLevel.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 + "'");
|
|
|
}
|
|
|
if(isAnd){
|
|
|
sql.append(" and ");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void sqlArea(StringBuffer sql,String area,int level,String index,String timeLevel,String startDate,String endDate){
|
|
|
|
|
|
sqlArea(sql,area,level,true);
|
|
|
|
|
|
sql.append(" quotaCode in(" + 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 + "'");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void sqlSlaveKey(String slaveKey,String slaveKeyName,StringBuffer sql){
|
|
|
if (StringUtils.isNotBlank(slaveKey)&&!commonParams.equals(slaveKey)) {
|
|
|
String[] str = slaveKey.split(",");
|
|
|
StringBuffer buffer = new StringBuffer();
|
|
|
for (int i=0;i<str.length;i++){
|
|
|
buffer.append("'"+str[i]+"',");
|
|
|
}
|
|
|
buffer.deleteCharAt(buffer.length()-1);
|
|
|
sql.append(" and "+slaveKeyName+" in (" + buffer + ")");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void groupBySlaveKey(StringBuffer groupBy,String slaveKeyValue,String slaveKey,String slaveKeyName){
|
|
|
if (StringUtils.isNotEmpty(slaveKeyValue)||commonParams.equals(slaveKeyValue)) {
|
|
|
groupBy.append(","+slaveKey+","+slaveKeyName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void sqlGroupBySlaveKey(StringBuffer sql,StringBuffer groupBy,String low_level,String slaveKeyValue,String slaveKey,String slaveKeyName){
|
|
|
String tmp = "";
|
|
|
if(StringUtils.isNotBlank(slaveKeyValue)){
|
|
|
tmp = slaveKey +","+slaveKeyName+",";
|
|
|
}
|
|
|
if (SaveModel.deptLevel.equals(low_level)) {
|
|
|
sql.append("select team,teamName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by team,teamName");
|
|
|
groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName);
|
|
|
} else if (SaveModel.OrgLevel.equals(low_level)) {
|
|
|
sql.append("select hospital,hospitalName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by hospital,hospitalName");
|
|
|
groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName);
|
|
|
} else if (SaveModel.townLevel.equals(low_level)) {
|
|
|
sql.append("select town,townName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by town,townName");
|
|
|
groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName);
|
|
|
} else if (SaveModel.cityLevel.equals(low_level)) {
|
|
|
sql.append("select city,cityName,"+tmp+"sum(result1) result1,sum(result2) result2 from " + esIndex + " where ");
|
|
|
groupBy.append(" group by city,cityName");
|
|
|
groupBySlaveKey(groupBy,slaveKeyValue,slaveKey,slaveKeyName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public List findDateQuotaLevel3BySlaveKey13(String startDate, String endDate, String area, int level, String index,
|
|
|
String timeLevel, String slaveKey1, String slaveKey2,String slaveKey3, String interval, String lowLevel) {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
startDate = changeDateTime(startDate);
|
|
|
endDate = changeDateTime(endDate);
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
|
|
|
sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey1,"slaveKey1","slaveKey1Name");
|
|
|
|
|
|
sqlArea(sql,area,level,index,timeLevel,startDate,endDate);
|
|
|
|
|
|
sqlSlaveKey(slaveKey1,"slaveKey1",sql);
|
|
|
sqlSlaveKey(slaveKey2,"slaveKey2",sql);
|
|
|
sqlSlaveKey(slaveKey3,"slaveKey3",sql);
|
|
|
|
|
|
//根据时间维度分组
|
|
|
groupByInterval(interval,groupBy);
|
|
|
|
|
|
sql.append(groupBy);
|
|
|
return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
public String returnSlaveKey(String slaveKey){
|
|
|
if(StringUtils.isEmpty(slaveKey)){
|
|
|
return commonParams;
|
|
|
}
|
|
|
return slaveKey;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 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 findDateQuotaLevel0BySlaveKey1(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel, String slaveKey1) throws Exception {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
startDate = changeDateTime(startDate);
|
|
|
endDate = changeDateTime(endDate);
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
|
|
|
sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey1,"slaveKey1","slaveKey1Name");
|
|
|
|
|
|
sqlArea(sql,area,level,index,timeLevel,startDate,endDate);
|
|
|
sqlSlaveKey(slaveKey1,"slaveKey1",sql);
|
|
|
|
|
|
//根据时间维度分组
|
|
|
groupByInterval(interval,groupBy);
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
public List<SaveModel> findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String interval, String lowLevel) throws Exception {
|
|
|
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
startDate = changeDateTime(startDate);
|
|
|
endDate = changeDateTime(endDate);
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
String low_level = level + "";
|
|
|
if (StringUtils.isNotEmpty(lowLevel)) {
|
|
|
low_level = lowLevel;
|
|
|
}
|
|
|
|
|
|
sqlGroupBySlaveKey(sql,groupBy,low_level,slaveKey1,"slaveKey1","slaveKey1Name");
|
|
|
|
|
|
sqlArea(sql,area,level,index,timeLevel,startDate,endDate);
|
|
|
sqlSlaveKey(slaveKey1,"slaveKey1",sql);
|
|
|
|
|
|
//根据时间维度分组
|
|
|
groupByInterval(interval,groupBy);
|
|
|
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return elasticsearchUtil.excute(sql.toString(), SaveModel.class, "", "");
|
|
|
}
|
|
|
|
|
|
|
|
|
public List<Map<String, Object>> getDataList(int level,String area,String startDate,String endDate,String quota){
|
|
|
|
|
|
startDate = getStartDate(startDate, endDate);
|
|
|
StringBuffer initalStr = new StringBuffer(" where quotaDate >= '" + startDate + "T00:00:00+0800'" + " and quotaDate <= '" + endDate + "T23:59:59+0800'");
|
|
|
|
|
|
sqlArea(initalStr,area,level,false);
|
|
|
String ddlOrZl = getDDLOrZL(startDate, endDate);
|
|
|
|
|
|
String quotaCodeAndWhere = quota.substring(quota.indexOf("quotaCode="));
|
|
|
String filter = "";
|
|
|
String quotaCode = "";
|
|
|
if(quotaCodeAndWhere.contains("-")){
|
|
|
quotaCode = quotaCodeAndWhere.split("-")[0];
|
|
|
filter = " and " + quotaCodeAndWhere.split("-")[1];
|
|
|
}else {
|
|
|
quotaCode = quotaCodeAndWhere;
|
|
|
}
|
|
|
filter += " and " + quotaCode +" and timeLevel = '"+ddlOrZl+"' and areaLevel='5'";
|
|
|
String sql="";
|
|
|
if(level == 3){
|
|
|
sql = "select sum(result1) result,hospital,hospitalName from " + esIndex + initalStr.toString() + filter + " group by hospital,hospitalName";
|
|
|
}else if(level == 2){
|
|
|
sql = "select sum(result1) result,town,townName from " + esIndex + initalStr.toString() + filter + " group by town,townName";
|
|
|
}else{
|
|
|
sql = "select sum(result1) result,team,teamName from " + esIndex + initalStr.toString() + filter + " group by team,teamName";
|
|
|
}
|
|
|
List<Map<String, Object>> dataList = elasticsearchUtil.excuteDataModel(sql);
|
|
|
return dataList;
|
|
|
// teamList = dataListIntegration(totalMap,teamList,dataList,quotaName,range);
|
|
|
}
|
|
|
|
|
|
public List<Map<String, Object>> dataListIntegration( Map<String, Object> totalMap,List<Map<String, Object>> teamList
|
|
|
,List<Map<String, Object>> dataList,String quotaName,int level){
|
|
|
DecimalFormat df = new DecimalFormat("###");
|
|
|
Double total=0.00;
|
|
|
List<Map<String, Object>> resultList=new ArrayList<>();
|
|
|
String teamCloumn = "";
|
|
|
for(Map<String, Object> teamMap : teamList){
|
|
|
String teamId;
|
|
|
if(level == 3){
|
|
|
teamId = teamMap.get("code").toString();
|
|
|
teamCloumn = "hospital";
|
|
|
}else if(level == 2) {
|
|
|
teamId = teamMap.get("town").toString();
|
|
|
teamCloumn = "town";
|
|
|
}else{
|
|
|
teamId = teamMap.get("id").toString();
|
|
|
teamCloumn = "team";
|
|
|
}
|
|
|
boolean exit = false;
|
|
|
if(dataList != null && dataList.size() > 0){
|
|
|
for(Map<String, Object> dataMap : dataList){
|
|
|
if(dataMap.get(teamCloumn)!= null && dataMap.get(teamCloumn).toString().equals(teamId)){
|
|
|
if(dataMap.get("result") != null){
|
|
|
String result = df.format(Double.valueOf(dataMap.get("result").toString()));
|
|
|
total=total+Double.valueOf(dataMap.get("result").toString());
|
|
|
teamMap.put(quotaName,result);
|
|
|
exit = true;
|
|
|
break;
|
|
|
}else if(dataMap.get("count") != null){
|
|
|
String result = df.format(Double.valueOf(dataMap.get("count").toString()));
|
|
|
total=total+Double.valueOf(dataMap.get("count").toString());
|
|
|
teamMap.put(quotaName,result);
|
|
|
exit = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if( !exit){
|
|
|
teamMap.put(quotaName,0);
|
|
|
}
|
|
|
resultList.add(teamMap);
|
|
|
}
|
|
|
|
|
|
totalMap.put(quotaName,df.format(total));
|
|
|
return resultList;
|
|
|
}
|
|
|
/**************************************************封装的方法 end ********************************************/
|
|
|
}
|