|
@ -0,0 +1,180 @@
|
|
|
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.util.DateUtil;
|
|
|
import com.yihu.wlyy.util.ElasticsearchUtil;
|
|
|
import com.yihu.wlyy.web.quota.vo.SaveModel;
|
|
|
import io.searchbox.client.JestClient;
|
|
|
import io.searchbox.core.Bulk;
|
|
|
import io.searchbox.core.BulkResult;
|
|
|
import io.searchbox.core.Index;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* Created by ${liuwenbin} on 2017/9/14.
|
|
|
*/
|
|
|
@Service
|
|
|
public class StatisticsESService {
|
|
|
|
|
|
@Autowired
|
|
|
private ElasticsearchUtil elasticsearchUtil;
|
|
|
@Autowired
|
|
|
private ElasticFactory elasticFactory;
|
|
|
|
|
|
/**
|
|
|
* 获取上次统计时间
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public String getStatisticsTime() {
|
|
|
String date = DateUtil.dateToStrLong(new Date());
|
|
|
|
|
|
try {
|
|
|
// date = redisTemplate.opsForValue().get("quota:date");
|
|
|
// JestClient jestClient = elasticFactory.getJestClient();
|
|
|
//
|
|
|
// Bulk.Builder bulk = new Bulk.Builder().defaultIndex("health_edu_article_patient_test").defaultType("health_edu_article_patient_test");
|
|
|
// PrescriptionDispensaryCode ap = new PrescriptionDispensaryCode();
|
|
|
// ap.setCode("aaaa");
|
|
|
// ap.setType(2);
|
|
|
// Index index = new Index.Builder(ap).build();
|
|
|
// bulk.addAction(index);
|
|
|
// BulkResult br = jestClient.execute(bulk.build());
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
return date;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取时间戳
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
public String getQuotaTimeStamp() {
|
|
|
// return redisTemplate.opsForValue().get("quota:timeKey");
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取时间范围内按间隔统计指标增量
|
|
|
*
|
|
|
* @param startDate 起始时间
|
|
|
* @param endDate 结束时间
|
|
|
* @param interval 时间间隔
|
|
|
* @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);
|
|
|
}
|
|
|
|
|
|
return new JSONArray();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 按日统计
|
|
|
*
|
|
|
* @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);
|
|
|
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 + "'");
|
|
|
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='"+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(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", saveModel.getQuotaDate());
|
|
|
range.put("amount", saveModel.getResult1());
|
|
|
result.add(range);
|
|
|
}
|
|
|
return new JSONArray(result);
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 时间格式转换 yyyy-MM-dd转成 2017-07-17T00:00:00+0800
|
|
|
*
|
|
|
* @param quotaDate
|
|
|
*/
|
|
|
private String changeDate(String quotaDate) {
|
|
|
return quotaDate + "T00:00:00+0800";
|
|
|
}
|
|
|
|
|
|
}
|