|
@ -2,8 +2,11 @@ package com.yihu.wlyy.service.app.statisticsES;
|
|
|
|
|
|
import com.yihu.wlyy.config.es.ElasticFactory;
|
|
|
import com.yihu.wlyy.entity.patient.prescription.PrescriptionDispensaryCode;
|
|
|
import com.yihu.wlyy.entity.statistics.PopulationBase;
|
|
|
import com.yihu.wlyy.util.Constant;
|
|
|
import com.yihu.wlyy.util.DateUtil;
|
|
|
import com.yihu.wlyy.util.ElasticsearchUtil;
|
|
|
import com.yihu.wlyy.util.IdcardInfoExtractor;
|
|
|
import com.yihu.wlyy.web.quota.vo.SaveModel;
|
|
|
import io.searchbox.client.JestClient;
|
|
|
import io.searchbox.core.Bulk;
|
|
@ -13,13 +16,13 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Created by ${liuwenbin} on 2017/9/14.
|
|
@ -31,6 +34,8 @@ public class StatisticsESService {
|
|
|
private ElasticsearchUtil elasticsearchUtil;
|
|
|
@Autowired
|
|
|
private ElasticFactory elasticFactory;
|
|
|
@Autowired
|
|
|
JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
/**
|
|
|
* 获取上次统计时间
|
|
@ -69,104 +74,354 @@ public class StatisticsESService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取时间范围内按间隔统计指标增量
|
|
|
* 获取所有指标的增量、到达量
|
|
|
* 备注:原来接口的一级指标对应现在的
|
|
|
*
|
|
|
* @param startDate 起始时间
|
|
|
* @param endDate 结束时间
|
|
|
* @param interval 时间间隔
|
|
|
* @param area 区域或机构代码
|
|
|
* @param level 级别
|
|
|
* @param index 指标
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONArray getDateIncrementDetail(String startDate, String endDate, int interval, String area, String level, String index, String level2_type) throws Exception {
|
|
|
if (interval == 1) {
|
|
|
return dateStatistics(startDate, endDate, area, level, index, level2_type);
|
|
|
} else if (interval == 2) {
|
|
|
// return weekStatistics(startDate, endDate, area, level, index, level2_type);
|
|
|
} else if (interval == 3) {
|
|
|
// return monthStatistics(startDate, endDate, area, level, index, level2_type);
|
|
|
public List findOneDateQuotaLevel0(String startDate,String endDate, String area, int level, String index,String timeLevel,String interval,String lowLevel) throws Exception {
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
if (SaveModel.teamLevel.equals(level+"")) {
|
|
|
sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where team='" + area + "'");
|
|
|
groupBy.append(" group by team,teamName");
|
|
|
} else if (SaveModel.OrgLevel.equals(level+"")) {
|
|
|
sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
|
|
|
groupBy.append(" group by hospital");
|
|
|
} else if (SaveModel.townLevel.equals(level+"")) {
|
|
|
sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
|
|
|
groupBy.append(" group by town,townName");
|
|
|
} else if (SaveModel.cityLevel.equals(level+"")) {
|
|
|
sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
|
|
|
groupBy.append(" group by city,cityName");
|
|
|
}
|
|
|
sql.append(" and 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(lowLevel)){
|
|
|
|
|
|
return new JSONArray();
|
|
|
if (SaveModel.teamLevel.equals(lowLevel)) {
|
|
|
sql.append(" and team='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(lowLevel)) {
|
|
|
sql.append(" and hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(lowLevel)) {
|
|
|
sql.append(" and town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(lowLevel)) {
|
|
|
sql.append(" and city='" + area + "'");
|
|
|
}
|
|
|
}
|
|
|
//根据时间维度分组
|
|
|
if(StringUtils.isNotEmpty(interval)){
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 按日统计
|
|
|
* 获取一级指标的增量、到达量
|
|
|
* 备注:原接口的二级指标对应现在的一级指标
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @return
|
|
|
*/
|
|
|
private JSONArray dateStatistics(String startDate, String endDate, String area, String level, String index, String level2_type) {
|
|
|
|
|
|
// SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
// // 起始日期
|
|
|
// Calendar start = Calendar.getInstance();
|
|
|
// start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
|
|
|
// //结束日期
|
|
|
// Calendar end = Calendar.getInstance();
|
|
|
// end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
// // 日期集合
|
|
|
// List<Calendar> days = new ArrayList<>();
|
|
|
// days.add(start);
|
|
|
// boolean flag = true;
|
|
|
// if (startDate.compareTo(endDate) == 0) {
|
|
|
// flag = false;
|
|
|
// }
|
|
|
// 计算统计日期
|
|
|
// while (flag) {
|
|
|
// Calendar next = Calendar.getInstance();
|
|
|
// next.setTime(days.get(days.size() - 1).getTime());
|
|
|
// next.add(Calendar.DATE, 1);
|
|
|
// if (df.format(next.getTime()).compareTo(endDate) < 0) {
|
|
|
// days.add(next);
|
|
|
// } else {
|
|
|
// days.add(end);
|
|
|
// flag = false;
|
|
|
// }
|
|
|
// }
|
|
|
startDate = changeDate(startDate);
|
|
|
endDate = changeDate(endDate);
|
|
|
public List findOneDateQuotaLevel1(String startDate,String endDate, String area, int level, String index,String timeLevel,String slaveKey1,String interval,String lowLevel ) throws Exception{
|
|
|
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
if (SaveModel.teamLevel.equals(level)) {
|
|
|
sql.append("select team,teamName,slaveKey1,slaveKey1Name,result1,result2 from wlyy_quota_test where team='" + area + "'");
|
|
|
if (SaveModel.teamLevel.equals(level+"")) {
|
|
|
sql.append("select team,teamName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where team='" + area + "'");
|
|
|
groupBy.append(" group by team,teamName,slaveKey1,slaveKey1Name");
|
|
|
} else if (SaveModel.OrgLevel.equals(level)) {
|
|
|
} else if (SaveModel.OrgLevel.equals(level+"")) {
|
|
|
sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
|
|
|
groupBy.append(" group by hospital,hospitalName,slaveKey1,slaveKey1Name");
|
|
|
} else if (SaveModel.townLevel.equals(level)) {
|
|
|
} else if (SaveModel.townLevel.equals(level+"")) {
|
|
|
sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
|
|
|
groupBy.append(" group by town,townName,slaveKey1,slaveKey1Name");
|
|
|
} else if (SaveModel.cityLevel.equals(level)) {
|
|
|
} else if (SaveModel.cityLevel.equals(level+"")) {
|
|
|
sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
|
|
|
groupBy.append(" group by city,cityName,slaveKey1,slaveKey1Name");
|
|
|
}
|
|
|
sql.append(" and 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(slaveKey1)){
|
|
|
sql.append(" and slaveKey1='"+slaveKey1+"' ");
|
|
|
}
|
|
|
if(StringUtils.isNotEmpty(lowLevel)){
|
|
|
|
|
|
if (SaveModel.teamLevel.equals(lowLevel)) {
|
|
|
sql.append(" and team='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(lowLevel)) {
|
|
|
sql.append(" and hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(lowLevel)) {
|
|
|
sql.append(" and town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(lowLevel)) {
|
|
|
sql.append(" and city='" + area + "'");
|
|
|
}
|
|
|
}
|
|
|
//根据时间维度分组
|
|
|
if(StringUtils.isNotEmpty(interval)){
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
|
|
|
return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取二级指标的增量、到达量
|
|
|
* 备注:原接口的三级指标对应现在的二级指标
|
|
|
*
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @return
|
|
|
*/
|
|
|
public List findOneDateQuotaLevel2(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
|
|
|
endDate = changeDate(endDate);
|
|
|
StringBuffer sql = new StringBuffer();
|
|
|
StringBuffer groupBy = new StringBuffer();
|
|
|
if (SaveModel.teamLevel.equals(level+"")) {
|
|
|
sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from wlyy_quota_test where team='" + area + "'");
|
|
|
groupBy.append(" group by team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
|
|
|
} else if (SaveModel.OrgLevel.equals(level+"")) {
|
|
|
sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
|
|
|
groupBy.append(" group by hospital,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,hospitalName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
|
|
|
} else if (SaveModel.townLevel.equals(level+"")) {
|
|
|
sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
|
|
|
groupBy.append(" group by town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
|
|
|
} else if (SaveModel.cityLevel.equals(level+"")) {
|
|
|
sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
|
|
|
groupBy.append(" group by city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
|
|
|
}
|
|
|
|
|
|
sql.append(" and quotaCode='" + index + "' ");
|
|
|
sql.append(" and timeLevel='1' ");
|
|
|
sql.append(" and areaLevel='"+level+"'");
|
|
|
sql.append(" and quotaDate>='" + startDate + "'");
|
|
|
sql.append(" and quotaDate<='" + endDate + "'");
|
|
|
if(StringUtils.isNotBlank(level2_type)){
|
|
|
sql.append(" and slaveKey2='"+level2_type+"'");
|
|
|
groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
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(lowLevel)){
|
|
|
|
|
|
if (SaveModel.teamLevel.equals(lowLevel)) {
|
|
|
sql.append(" and team='" + area + "'");
|
|
|
} else if (SaveModel.OrgLevel.equals(lowLevel)) {
|
|
|
sql.append(" and hospital='" + area + "'");
|
|
|
} else if (SaveModel.townLevel.equals(lowLevel)) {
|
|
|
sql.append(" and town='" + area + "'");
|
|
|
} else if (SaveModel.cityLevel.equals(lowLevel)) {
|
|
|
sql.append(" and city='" + area + "'");
|
|
|
}
|
|
|
}
|
|
|
//根据时间维度分组
|
|
|
if(StringUtils.isNotEmpty(interval)){
|
|
|
if (SaveModel.interval_month.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
|
|
|
} else if (SaveModel.interval_week.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
|
|
|
} else if (SaveModel.interval_day.equals(interval)) {
|
|
|
groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
|
|
|
}
|
|
|
}
|
|
|
sql.append(groupBy);
|
|
|
List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
}
|
|
|
|
|
|
|
|
|
// /**
|
|
|
// * 查询某一天父level下的子level 例如 查询市下面的团队,或者区下面的团队
|
|
|
// *
|
|
|
// * @param index 指标code
|
|
|
// * @param area 机构code或者团队code或者town code或者city code
|
|
|
// * @param timeLevel 1增量 2到达量
|
|
|
// * @param level 父arealevel
|
|
|
// * @param lowLevel 子arealevel
|
|
|
// * @return
|
|
|
// */
|
|
|
// public List<SaveModel> findOneDateQuotaByChllevel(String startDate,
|
|
|
// String endDate,
|
|
|
// String index,
|
|
|
// String area,
|
|
|
// String timeLevel,
|
|
|
// String level,
|
|
|
// String lowLevel) {
|
|
|
//
|
|
|
// //时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
// startDate = changeDate(startDate);
|
|
|
// endDate = changeDate(endDate);
|
|
|
//
|
|
|
// StringBuffer sql = new StringBuffer();
|
|
|
// StringBuffer groupBy = new StringBuffer();
|
|
|
// //根据 childAreaLevel group by
|
|
|
// if (SaveModel.teamLevel.equals(level)) {
|
|
|
// sql.append("select team,teamName,result1,result2 from wlyy_quota_test where ");
|
|
|
// groupBy.append(" group by team,teamName");
|
|
|
// } else if (SaveModel.OrgLevel.equals(level)) {
|
|
|
// sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
|
|
|
// groupBy.append(" group by hospital,hospitalName");
|
|
|
// } else if (SaveModel.townLevel.equals(level)) {
|
|
|
// sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
|
|
|
// groupBy.append(" group by town,townName");
|
|
|
// } else if (SaveModel.cityLevel.equals(level)) {
|
|
|
// sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
|
|
|
// groupBy.append(" group by city,cityName");
|
|
|
// }
|
|
|
//
|
|
|
// 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 + "'");
|
|
|
// }
|
|
|
// //查询code
|
|
|
// if (SaveModel.teamLevel.equals(lowLevel)) {
|
|
|
// sql.append(" and team='" + area + "'");
|
|
|
// } else if (SaveModel.OrgLevel.equals(lowLevel)) {
|
|
|
// sql.append(" and hospital='" + area + "'");
|
|
|
// } else if (SaveModel.townLevel.equals(lowLevel)) {
|
|
|
// sql.append(" and town='" + area + "'");
|
|
|
// } else if (SaveModel.cityLevel.equals(lowLevel)) {
|
|
|
// sql.append(" and city='" + area + "'");
|
|
|
// }
|
|
|
// sql.append(groupBy);
|
|
|
// return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
// }
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取时间范围内按间隔统计指标增量
|
|
|
*
|
|
|
* @param startDate 起始时间
|
|
|
* @param endDate 结束时间
|
|
|
* @param interval 时间间隔
|
|
|
* @param area 区域或机构代码
|
|
|
* @param level 级别
|
|
|
* @param index 指标
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONArray getDateIncrementDetail(String startDate, String endDate, String interval, String area, int level, String index, String level2_type) throws Exception {
|
|
|
List<SaveModel> list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,interval,null);
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
for (SaveModel saveModel:list){
|
|
|
JSONObject range = new JSONObject();
|
|
|
range.put("range", saveModel.getQuotaDate());
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
range.put("amount", saveModel.getResult2());
|
|
|
result.add(range);
|
|
|
}
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
}
|
|
|
|
|
|
// /**
|
|
|
// * 按日统计
|
|
|
// *
|
|
|
// * @param startDate
|
|
|
// * @param endDate
|
|
|
// * @param area
|
|
|
// * @param level
|
|
|
// * @param index
|
|
|
// * @return
|
|
|
// */
|
|
|
// private JSONArray dateStatistics(String startDate, String endDate, String area, int level, String index, String level2_type,String interval) {
|
|
|
//
|
|
|
// startDate = changeDate(startDate);
|
|
|
// endDate = changeDate(endDate);
|
|
|
// StringBuffer sql = new StringBuffer();
|
|
|
// StringBuffer groupBy = new StringBuffer();
|
|
|
// if (SaveModel.teamLevel.equals(level+"")) {
|
|
|
// sql.append("select team,teamName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where team='" + area + "'");
|
|
|
// groupBy.append(" group by team,teamName,slaveKey1,slaveKey1Name");
|
|
|
// } else if (SaveModel.OrgLevel.equals(level+"")) {
|
|
|
// sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
|
|
|
// groupBy.append(" group by hospital,hospitalName,slaveKey1,slaveKey1Name");
|
|
|
// } else if (SaveModel.townLevel.equals(level+"")) {
|
|
|
// sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
|
|
|
// groupBy.append(" group by town,townName,slaveKey1,slaveKey1Name");
|
|
|
// } else if (SaveModel.cityLevel.equals(level+"")) {
|
|
|
// sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
|
|
|
// groupBy.append(" group by city,cityName,slaveKey1,slaveKey1Name");
|
|
|
// }
|
|
|
// sql.append(" and quotaCode='" + index + "' ");
|
|
|
// sql.append(" and timeLevel='1' ");
|
|
|
// sql.append(" and areaLevel='5'");
|
|
|
// sql.append(" and quotaDate>='" + startDate + "'");
|
|
|
// sql.append(" and quotaDate<='" + endDate + "'");
|
|
|
// if(StringUtils.isNotBlank(level2_type)){
|
|
|
// sql.append(" and slaveKey2='"+level2_type+"'");
|
|
|
// groupBy.append(",slaveKey2,slaveKey2Name");
|
|
|
// }
|
|
|
// //根据时间维度分组
|
|
|
// if (SaveModel.interval_month.equals(interval)) {
|
|
|
// groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
|
|
|
// } else if (SaveModel.interval_week.equals(interval)) {
|
|
|
// groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
|
|
|
// } else if (SaveModel.interval_day.equals(interval)) {
|
|
|
// groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
|
|
|
// }
|
|
|
// sql.append(groupBy);
|
|
|
// List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
// List<JSONObject> result = new ArrayList<>();
|
|
|
// for (SaveModel saveModel:list){
|
|
|
// JSONObject range = new JSONObject();
|
|
|
// range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(),"yyyy-MM-dd HH:mm:ss"));
|
|
|
// range.put("amount", saveModel.getResult2());
|
|
|
// result.add(range);
|
|
|
// }
|
|
|
// return new JSONArray(result);
|
|
|
// }
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
@ -177,4 +432,258 @@ public class StatisticsESService {
|
|
|
return quotaDate + "T00:00:00+0800";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询截止某个日期累计量
|
|
|
*
|
|
|
* @param endDate 截止日期
|
|
|
* @param area 区域或机构代码
|
|
|
* @param level 级别
|
|
|
* @param level2_type level2_type的类型
|
|
|
* @return
|
|
|
*/
|
|
|
public long getTotalAmount(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
|
|
|
startDate = changeDate(startDate);
|
|
|
endDate = changeDate(endDate);
|
|
|
|
|
|
List<SaveModel> list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,null);
|
|
|
if(list.size()>0){
|
|
|
return list.get(0).getResult2();
|
|
|
}
|
|
|
return 0L;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询截止某个日期某个区域后机构各下级指标累计情况
|
|
|
*
|
|
|
* @param endDate 截止日期
|
|
|
* @param area 区域或机构代码
|
|
|
* @param level 级别
|
|
|
* @return
|
|
|
*/
|
|
|
public JSONArray getLowLevelTotalDetail(String endDate, String area, int level, String index, int sort, String lowLevel, String level2_type, String year) throws Exception {
|
|
|
|
|
|
String startDate = "";
|
|
|
|
|
|
//如果year有值 就按照年度来查询 即2017年 就是大于2017-06-30
|
|
|
if (!org.springframework.util.StringUtils.isEmpty(year)) {
|
|
|
startDate = year + "-06-30' ";
|
|
|
}
|
|
|
//时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
if(StringUtils.isNotEmpty(startDate)){
|
|
|
startDate = changeDate(startDate);
|
|
|
}
|
|
|
endDate = changeDate(endDate);
|
|
|
String levelTemp = level+"";
|
|
|
if(StringUtils.isNotEmpty(lowLevel)){
|
|
|
levelTemp = lowLevel;
|
|
|
}
|
|
|
List<SaveModel> list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,lowLevel);
|
|
|
if (org.springframework.util.StringUtils.isEmpty(year)) {
|
|
|
year = Constant.getNowYear();
|
|
|
}
|
|
|
List<Map<String, Object>> resultList = new ArrayList<>();
|
|
|
PopulationBase populationBase = getPopulationBase(area,year);
|
|
|
DecimalFormat df = new DecimalFormat("0.0000");
|
|
|
for (SaveModel saveModel:list) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
if (SaveModel.OrgLevel.equals(levelTemp)) {
|
|
|
map.put("code",saveModel.getHospital());
|
|
|
map.put("name",saveModel.getHospitalName());
|
|
|
} else if (SaveModel.townLevel.equals(levelTemp)) {
|
|
|
map.put("code",saveModel.getTown());
|
|
|
map.put("name",saveModel.getTownName());
|
|
|
} else if (SaveModel.cityLevel.equals(levelTemp)) {
|
|
|
map.put("code",saveModel.getCity());
|
|
|
map.put("name",saveModel.getCityName());
|
|
|
} else if (SaveModel.teamLevel.equals(level+"")) {
|
|
|
map.put("code",saveModel.getTeam());
|
|
|
map.put("name",saveModel.getCityName());
|
|
|
}
|
|
|
map.put("amount",saveModel.getResult2());
|
|
|
map.put("rate",df.format((saveModel.getResult2() * 1.0000) / populationBase.getNum() * 100));
|
|
|
map.put("rateString",saveModel.getResult2()+"/"+populationBase.getNum());
|
|
|
resultList.add(map);
|
|
|
}
|
|
|
Collections.sort(resultList, new Comparator<Map<String, Object>>() {
|
|
|
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
|
|
|
int map1value = (int) o1.get("amount");
|
|
|
int map2value = (int) o2.get("amount");
|
|
|
|
|
|
if (map1value - map2value > 0) {
|
|
|
return sort == 1 ? -1 : 1;
|
|
|
} else if (map1value - map2value < 0) {
|
|
|
return sort == 1 ? 1 : -1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return new JSONArray(resultList);
|
|
|
}
|
|
|
|
|
|
|
|
|
public JSONArray getIndexLevelTwototal(String endDate, String area, int level, String index) throws Exception{
|
|
|
|
|
|
// List<SaveModel> list =findOneDateQuotaLevel2(endDate, area, level, index,"1","");
|
|
|
List<SaveModel> list = findOneDateQuotaLevel1(endDate,endDate,area,level,index,"1",null,null,null);
|
|
|
List<Map<String, Object>> resultList = new ArrayList<>();
|
|
|
DecimalFormat df = new DecimalFormat("0.0000");
|
|
|
long total = 0;
|
|
|
for (SaveModel saveModel:list) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
if (SaveModel.OrgLevel.equals(level+"")) {
|
|
|
map.put("code",saveModel.getHospital());
|
|
|
map.put("name",saveModel.getHospitalName());
|
|
|
} else if (SaveModel.townLevel.equals(level+"")) {
|
|
|
map.put("code",saveModel.getTown());
|
|
|
map.put("name",saveModel.getTownName());
|
|
|
} else if (SaveModel.cityLevel.equals(level+"")) {
|
|
|
map.put("code",saveModel.getCity());
|
|
|
map.put("name",saveModel.getCityName());
|
|
|
} else if (SaveModel.teamLevel.equals(level+"")) {
|
|
|
map.put("code",saveModel.getTeam());
|
|
|
map.put("name",saveModel.getCityName());
|
|
|
}
|
|
|
// map.put("amount",saveModel.getResult2());
|
|
|
// map.put("rate",df.format((saveModel.getResult2() * 1.0000) / populationBase.getNum() * 100));
|
|
|
// map.put("rateString",saveModel.getResult2()+"/"+populationBase.getNum());
|
|
|
|
|
|
map.put("amount", saveModel.getResult2());
|
|
|
if (index.equals("7")) {
|
|
|
// 分组指标总数算法
|
|
|
String code = saveModel.getSlaveKey2();
|
|
|
if (code.equals("0") || code.equals("1") || code.equals("2") || code.equals("3") || code.equals("7")) {
|
|
|
total += saveModel.getResult2();
|
|
|
}
|
|
|
} else if (index.equals("16")) {
|
|
|
String code = saveModel.getSlaveKey2();
|
|
|
|
|
|
if (!code.equals("2")) {
|
|
|
total += saveModel.getResult2();
|
|
|
}
|
|
|
} else {
|
|
|
total += saveModel.getResult2();
|
|
|
}
|
|
|
resultList.add(map);
|
|
|
}
|
|
|
if (!index.equals("8")) {
|
|
|
if (index.equals("36")) {
|
|
|
//如果是查询36的指标 那么除数是签约总数
|
|
|
List<SaveModel> list2 =findOneDateQuotaLevel1(endDate,endDate, area, level, "1","2",null,null,null);
|
|
|
Integer num=0;
|
|
|
if(list2.size()>0){
|
|
|
num = list2.get(0).getResult2();
|
|
|
}else{
|
|
|
throw new Exception("param num error");
|
|
|
}
|
|
|
for (Map<String, Object> map:resultList) {
|
|
|
double rateG = (total > 0 ? ((long) map.get("amount")) * 1.0000 / num * 100 : 0);
|
|
|
map.put("rate", df.format(rateG));
|
|
|
map.put("rateString", ((long) map.get("amount")) + "/" + num);
|
|
|
}
|
|
|
}else{
|
|
|
for (Map<String, Object> map:resultList) {
|
|
|
double rateG = (total > 0 ? ((long) map.get("amount")) * 1.0000 / total * 100 : 0);
|
|
|
map.put("rate", df.format(rateG));
|
|
|
map.put("rateString", ((int) map.get("amount")) + "/" + total);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (index.equals("6") && resultList.size() > 0) {
|
|
|
int i = 0;
|
|
|
boolean flag = false;
|
|
|
for (; i < resultList.size(); i++) {
|
|
|
if (resultList.get(i).get("code") != null && String.valueOf(resultList.get(i).get("code")).equals("3")
|
|
|
&& String.valueOf(resultList.get(i).get("amount")).equals("0")) {
|
|
|
flag = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (flag) {
|
|
|
resultList.remove(i);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return new JSONArray(resultList);
|
|
|
}
|
|
|
|
|
|
public PopulationBase getPopulationBase(String code, String year) {
|
|
|
|
|
|
String sql = "select * from wlyy_people_num where code=? and year=? ";
|
|
|
List<PopulationBase> peopleNum = jdbcTemplate.query(sql, new BeanPropertyRowMapper(PopulationBase.class), code, year);
|
|
|
if (peopleNum != null && peopleNum.size() > 0) {
|
|
|
return peopleNum.get(0);
|
|
|
} else {
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取一级指标达到量
|
|
|
*
|
|
|
* @param endDate 截止日期
|
|
|
* @param area 区域
|
|
|
* @param index 指标
|
|
|
* @param level 级别
|
|
|
* @return
|
|
|
*/
|
|
|
public long getIndexTotal(String endDate, String area, int level, String index,String timeLevel) throws Exception{
|
|
|
endDate = changeDate(endDate);
|
|
|
|
|
|
// List<SaveModel> list =findOneDateQuotaLevel1("",endDate, area, level, index,timeLevel,null,null);
|
|
|
List<SaveModel> list =findOneDateQuotaLevel0(endDate,endDate, area, level, index,timeLevel,null,null);
|
|
|
// List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
|
|
|
if(list.size()>0){
|
|
|
|
|
|
return list.get(0).getResult2();
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取缴费
|
|
|
*
|
|
|
* @param endDate 截止日期
|
|
|
* @param area 区域
|
|
|
* @param level 级别
|
|
|
* @return
|
|
|
*/
|
|
|
public long getWeiJiaoFei(String endDate, String area, int level) {
|
|
|
|
|
|
// List<SaveModel> list = findOneDateQuotaLevel2(endDate,area,level,"16","2","0");
|
|
|
// if(list.size()>0){
|
|
|
// return list.get(0).getResult2();
|
|
|
// }
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
|
|
|
public JSONObject getRenewPercent(String level, String area, String year) {
|
|
|
|
|
|
String renewIndex = "";
|
|
|
if ("1".equals(level)) {
|
|
|
//团队的续签量
|
|
|
renewIndex = "42";
|
|
|
} else if ("2".equals(level)) {
|
|
|
//社区的续签量
|
|
|
renewIndex = "43";
|
|
|
} else if ("3".equals(level)) {
|
|
|
//区的续签量
|
|
|
renewIndex = "44";
|
|
|
} else {
|
|
|
//市的续签量
|
|
|
renewIndex = "29";
|
|
|
}
|
|
|
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
Date today = new Date();
|
|
|
String todayString = simpleDateFormat.format(today);
|
|
|
todayString = changeDate(todayString);
|
|
|
// List<SaveModel> list = findOneDateQuotaLevel1(todayString,area,Integer.parseInt(level),renewIndex,"2",null,null);
|
|
|
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|