|
@ -1,11 +1,24 @@
|
|
|
package com.yihu.jw.es.service;
|
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.es.util.ElasticsearchUtil;
|
|
|
import com.yihu.jw.es.util.SaveModel;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import jdk.management.resource.internal.inst.FileOutputStreamRMHooks;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* Created by wangzhinan on 2019/12/3.
|
|
|
*/
|
|
@ -14,17 +27,643 @@ public class StatisticsEsService {
|
|
|
|
|
|
@Autowired
|
|
|
private ElasticsearchUtil elasticsearchUtil;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
|
/**
|
|
|
* 问诊量
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level 2 市 3区 4医院 5、科室 6医生
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getTotalAmount(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(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL, level2_type);
|
|
|
} else {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL);
|
|
|
}
|
|
|
JSONObject object = new JSONObject();
|
|
|
object.put("outPatientCount",saveModel.getResult2().longValue());//问诊量
|
|
|
String startTime = DateUtil.getStringDateShort()+" 00:00:00";
|
|
|
String endTime = DateUtil.getStringDateShort() +" 23:59:59";
|
|
|
String sql = "select count(*) as total from base.wlyy_outpatient o where o.status=2 and o.create_time >='"+startTime+"' and o.create_time <='"+endTime+"'";
|
|
|
if (level==4){
|
|
|
sql += " and o.doctor IN (SELECT doctor_code FROM `base_doctor_hospital` dh where dh.org_code ='"+area+"' and dh.del=1)";
|
|
|
}else if (level==5){
|
|
|
sql += " and o.doctor IN (SELECT doctor_code FROM `base_doctor_hospital` dh where dh.dept_code ='"+area+"' and dh.del=1)";
|
|
|
}else if (level==6){
|
|
|
sql +=" and o.doctor='"+area+"'";
|
|
|
}
|
|
|
List<Map<String,Object>> rstotal = jdbcTemplate.queryForList(sql);
|
|
|
Long count = 0L;
|
|
|
if(rstotal!=null&&rstotal.size()>0){
|
|
|
count = (Long) rstotal.get(0).get("total");
|
|
|
}
|
|
|
object.put("TodayOutPatientCount",count);//今日问诊量
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 按日期柱状图
|
|
|
*
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getOutPatientLine(String startDate, String endDate, String area, int level, String index,int interval, String level2_type) throws Exception {
|
|
|
//问诊量
|
|
|
JSONObject object = new JSONObject();
|
|
|
if (interval==1){
|
|
|
JSONArray array = dateTotalStatistics2(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL,null);
|
|
|
object.put("data",array);
|
|
|
}else if (interval==2){
|
|
|
JSONArray array = weekTotalStatistics(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL);
|
|
|
object.put("data",array);
|
|
|
}else if (interval==3){
|
|
|
JSONArray array = monthTotalStatistics2(startDate,endDate,area,level,index,null,SaveModel.timeLevel_ZL);
|
|
|
object.put("data",array);
|
|
|
}
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
public long getTotalAmount(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
/**
|
|
|
*
|
|
|
* 门诊圆形图
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getOutPatientCircular(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
|
|
|
JSONObject object = new JSONObject();
|
|
|
//专家咨询数量
|
|
|
SaveModel saveModel = null;
|
|
|
if (StringUtils.isNotEmpty(level2_type)) {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL, level2_type);
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel1(endDate, endDate, area, level, "4", SaveModel.timeLevel_DDL, level2_type);
|
|
|
} else {
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_ZL);
|
|
|
saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, "4", SaveModel.timeLevel_DDL);
|
|
|
}
|
|
|
//协同门诊
|
|
|
SaveModel saveModel1 = null;
|
|
|
saveModel1 = elasticsearchUtil.findOneDateQuotaLevel1(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL, "2");
|
|
|
//图文复诊
|
|
|
SaveModel saveModel2 = null;
|
|
|
saveModel2 = elasticsearchUtil.findOneDateQuotaLevel2(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL, "1","1");
|
|
|
//视频复诊
|
|
|
SaveModel saveModel3 = null;
|
|
|
saveModel3 = elasticsearchUtil.findOneDateQuotaLevel2(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL, "1","2");
|
|
|
|
|
|
int specialistCount = saveModel.getResult2().intValue();//专家咨询数量
|
|
|
int synergyCount = saveModel1.getResult2().intValue();//协同门诊数量
|
|
|
int topicCount = saveModel2.getResult2().intValue();//图文复诊数量
|
|
|
int videoCount = saveModel3.getResult2().intValue();//视频复诊数量
|
|
|
int total = specialistCount+synergyCount+topicCount+videoCount;//总量
|
|
|
object.put("specialistCount",specialistCount);//专家咨询数
|
|
|
object.put("specialistRate",getRange(specialistCount,total,2));
|
|
|
object.put("synergyCount",synergyCount);//专家咨询数
|
|
|
object.put("synergyRate",getRange(synergyCount,total,2));
|
|
|
object.put("topicCount",topicCount);//图文复诊数量
|
|
|
object.put("topicRate",getRange(topicCount,total,2));
|
|
|
object.put("videoCount",videoCount);//视频复诊数量
|
|
|
object.put("videoRate",getRange(videoCount,total,2));
|
|
|
object.put("total",total);
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 问诊量统计-等级
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getOutPatientGrade(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
|
|
|
JSONObject object = new JSONObject();
|
|
|
List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel0(endDate,endDate,area,level,index,SaveModel.timeLevel_DDL,null,level2_type);
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
for (SaveModel saveModel:saveModels){
|
|
|
JSONObject object1 = new JSONObject();
|
|
|
if (level2_type.equals(SaveModel.deptLevel)){
|
|
|
object1.put("dept",saveModel.getDept());
|
|
|
object1.put("deptName",saveModel.getDeptName());
|
|
|
}else if (level2_type.equals(SaveModel.doctorLevel)){
|
|
|
object1.put("doctor",saveModel.getDoctor());
|
|
|
object1.put("doctorName",saveModel.getDoctorName());
|
|
|
}else if (level2_type.equals(SaveModel.OrgLevel)){
|
|
|
object1.put("hospital",saveModel.getHospital());
|
|
|
object1.put("hospitalName",saveModel.getHospitalName());
|
|
|
}
|
|
|
object1.put("result1",saveModel.getResult1());
|
|
|
object1.put("result2",saveModel.getResult2());
|
|
|
result.add(object1);
|
|
|
}
|
|
|
// 排序
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
@Override
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
if (o1.getString("result1").compareTo(o2.getString("result1")) > 0) {
|
|
|
return 1;
|
|
|
} else if (o1.getString("result1").compareTo(o2.getString("result1")) < 0) {
|
|
|
return -1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
for (JSONObject object2:result){
|
|
|
jsonArray.add(object2);
|
|
|
}
|
|
|
return saveModel.getResult2().longValue();
|
|
|
object.put("data",result);
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 问诊量统计-类别曲线
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param level2_type
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject getOutPatientTypeline(String startDate, String endDate, String area, int level, String index, String level2_type) throws Exception {
|
|
|
JSONObject object = new JSONObject();
|
|
|
//专家咨询
|
|
|
JSONArray specialistArray = dateTotalStatistics2(startDate,endDate,area,level,"4",null,SaveModel.timeLevel_ZL,null);
|
|
|
object.put("specialistArray",specialistArray);
|
|
|
//协同复诊
|
|
|
JSONArray syngeryArray = dateTotalStatistics2(startDate,endDate,area,level,index,"2",SaveModel.timeLevel_ZL,null);
|
|
|
object.put("syngeryArray",syngeryArray);
|
|
|
//图文复诊
|
|
|
JSONArray topicArray = dateTotalStatistics2(startDate,endDate,area,level,index,"1",SaveModel.timeLevel_ZL,"1");
|
|
|
object.put("topicArray",topicArray);
|
|
|
//视频复诊
|
|
|
JSONArray vedioArray = dateTotalStatistics2(startDate,endDate,area,level,index,"1",SaveModel.timeLevel_ZL,"2");
|
|
|
object.put("vedioArray",vedioArray);
|
|
|
return object;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 获取2个数的百分比
|
|
|
*
|
|
|
* @param first
|
|
|
* @param second
|
|
|
* @param i
|
|
|
* @return
|
|
|
*/
|
|
|
public String getRange(int first, int second, int i) {
|
|
|
if (second == 0 && first > 0) {
|
|
|
return "100%";
|
|
|
} else if (second == 0 && first == 0) {
|
|
|
return "0%";
|
|
|
}
|
|
|
float size = (float) (first * 100) / second;
|
|
|
DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
|
|
|
String filesize = df.format(size);
|
|
|
return filesize + "%";
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 总体分析 折线图 按日--0级维度1级维度
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param lowCode
|
|
|
* @return
|
|
|
* @throws ParseException
|
|
|
*/
|
|
|
public JSONArray dateTotalStatistics2(String startDate, String endDate, String area, int level, String index, String lowCode, String timelevel,String lowCode2) throws Exception {
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
//startDate = DateUtil.getNextDay(startDate,-1);
|
|
|
if (StringUtils.isNotBlank(lowCode)) {
|
|
|
if (StringUtils.isNoneBlank(lowCode2)){
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel2(startDate, endDate, area, level, index, timelevel, SaveModel.interval_day, lowCode,lowCode2);
|
|
|
}else {
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, SaveModel.interval_day, lowCode);
|
|
|
}
|
|
|
} else {
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, SaveModel.interval_day);
|
|
|
}
|
|
|
List<JSONObject> result = new ArrayList<>();
|
|
|
|
|
|
// if (saveModels != null && saveModels.size() >0) {
|
|
|
List<Map<String, Object>> resultList = DateUtil.findDates(dateFormat.parse(startDate), dateFormat.parse(DateUtil.getNextDay(endDate, 1)));
|
|
|
// result.clear();
|
|
|
for (Map<String, Object> one : resultList) {
|
|
|
JSONObject json = new JSONObject();
|
|
|
json.put("range", one.get("date"));
|
|
|
json.put("amount", 0);
|
|
|
result.add(json);
|
|
|
}
|
|
|
// }
|
|
|
|
|
|
if (saveModels != null) {
|
|
|
// 计算结果
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
JSONObject json = new JSONObject();
|
|
|
String range = null;
|
|
|
if (saveModel.getQuotaDate() != null) {
|
|
|
range = df.format(saveModel.getQuotaDate());
|
|
|
}
|
|
|
long amount = saveModel.getResult2().longValue();
|
|
|
for(JSONObject obj : result){
|
|
|
if((obj.get("range")+"").equals(range)){
|
|
|
obj.put("amount", amount);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// json.put("range", range);
|
|
|
// json.put("amount", amount);
|
|
|
// result.add(json);
|
|
|
}
|
|
|
// if (saveModels != null && saveModels.size() == 1 && saveModels.get(0).getHospital() == null) {
|
|
|
// List<Map<String, Object>> resultList = DateUtil.findDates(dateFormat.parse(startDate), dateFormat.parse(DateUtil.getNextDay(endDate, 1)));
|
|
|
// result.clear();
|
|
|
// for (Map<String, Object> map : resultList) {
|
|
|
// JSONObject json = new JSONObject();
|
|
|
// json.put("range", map.get("date"));
|
|
|
// json.put("amount", 0);
|
|
|
// result.add(json);
|
|
|
// }
|
|
|
// }
|
|
|
// SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
// Date startDate1 = sf.parse(startDate);
|
|
|
// Date endDate1 = sf.parse(endDate);
|
|
|
// long days = DateUtil.getDays(startDate1,endDate1);
|
|
|
// Calendar calendar = Calendar.getInstance();
|
|
|
// calendar.setTime(startDate1);
|
|
|
// List<JSONObject> resultTemp = new ArrayList<>();
|
|
|
// for(int i=1;i<=days;i++){
|
|
|
// calendar.add(calendar.DATE,i);//把日期往后增加一天.整数往后推,负数往前移动
|
|
|
// String dateString = sf.format(calendar.getTime());
|
|
|
// Map<String, Object> map = new HashMap<>();
|
|
|
// map.put("range",sf.format(calendar.getTime()));
|
|
|
// map.put()
|
|
|
// }
|
|
|
|
|
|
// 排序
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
@Override
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
|
|
|
return 1;
|
|
|
} else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
|
|
|
return -1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
for (JSONObject object:result){
|
|
|
jsonArray.add(object);
|
|
|
}
|
|
|
|
|
|
return jsonArray;
|
|
|
} else {
|
|
|
return new JSONArray();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 按周统计 折线图
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param lowCode
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
private JSONArray weekTotalStatistics(String startDate, String endDate, String area, int level, String index, String lowCode, String timelevel) throws Exception {
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
// 起始日期
|
|
|
Calendar start = Calendar.getInstance();
|
|
|
start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
|
|
|
// 第一个统计周期结束日期
|
|
|
String firstEnd = "";
|
|
|
// 结束日期
|
|
|
Calendar end = Calendar.getInstance();
|
|
|
//因为统计时间是统计到当前时间的前一天,所以这里的时间是提前一天
|
|
|
Calendar temp = Calendar.getInstance();
|
|
|
temp.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
// temp.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
end.setTime(temp.getTime());
|
|
|
// 起始日期为周几
|
|
|
int week = start.get(Calendar.DAY_OF_WEEK);
|
|
|
int incre = 7 - week + 1;
|
|
|
|
|
|
// 日期集合
|
|
|
List<Calendar> days = new ArrayList<>();
|
|
|
days.add(start);
|
|
|
boolean flag = true;
|
|
|
int i = 0;
|
|
|
|
|
|
if (startDate.compareTo(endDate) == 0) {
|
|
|
flag = false;
|
|
|
days.add(end);
|
|
|
firstEnd = df.format(end.getTime());
|
|
|
}
|
|
|
|
|
|
// 计算统计日期
|
|
|
while (flag) {
|
|
|
Calendar next = Calendar.getInstance();
|
|
|
next.setTime(days.get(days.size() - 1).getTime());
|
|
|
|
|
|
if (i == 0) {
|
|
|
if (incre != 7) {
|
|
|
next.add(Calendar.DATE, incre);
|
|
|
}
|
|
|
} else {
|
|
|
next.add(Calendar.DATE, 7);
|
|
|
}
|
|
|
if (next.getTime().before(DateUtil.strToDate(endDate, "yyyy-MM-dd"))) {
|
|
|
days.add(next);
|
|
|
if (i == 0) {
|
|
|
firstEnd = df.format(next.getTime());
|
|
|
}
|
|
|
} else {
|
|
|
days.add(end);
|
|
|
flag = false;
|
|
|
if (i == 0) {
|
|
|
firstEnd = df.format(end.getTime());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
i++;
|
|
|
}
|
|
|
|
|
|
// 结果集
|
|
|
Map<String, JSONObject> countResult = new HashMap<>();
|
|
|
|
|
|
// Date dd = df.parse();
|
|
|
|
|
|
// 算出每个查询周期
|
|
|
for (int j = 0; j < days.size() - 1; j++) {
|
|
|
String startStr = "";
|
|
|
String endStr = df.format(days.get(j + 1).getTime());
|
|
|
|
|
|
// 起始、截止日期
|
|
|
if (j == 0) {
|
|
|
startStr = df.format(days.get(j).getTime());
|
|
|
} else {
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
cal.setTime(days.get(j).getTime());
|
|
|
cal.add(Calendar.DATE, 1);
|
|
|
startStr = df.format(cal.getTime());
|
|
|
}
|
|
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
range.put("range", endStr);
|
|
|
range.put("amount", 0);
|
|
|
countResult.put(endStr, range);
|
|
|
|
|
|
|
|
|
// if(!DateUtil.getSundayOfThisDate(new Date()).equals(df.format(new Date()))){
|
|
|
// JSONObject range2 = new JSONObject();
|
|
|
// range2.put("range", endDate);
|
|
|
// range2.put("amount", 0);
|
|
|
// countResult.put(df.format(new Date()), range2);
|
|
|
// };
|
|
|
}
|
|
|
|
|
|
if (startDate.equals(df.format(new Date()))) {
|
|
|
Calendar preDate = Calendar.getInstance();
|
|
|
preDate.setTime(df.parse(endDate));
|
|
|
preDate.add(Calendar.DATE, -1);
|
|
|
|
|
|
startDate = df.format(preDate.getTime());
|
|
|
}
|
|
|
|
|
|
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
if (StringUtils.isNotBlank(lowCode)) {
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, SaveModel.interval_week, lowCode);
|
|
|
} else {
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, SaveModel.interval_week);
|
|
|
}
|
|
|
|
|
|
if (saveModels != null) {
|
|
|
// 计算结果
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
String range = "";
|
|
|
if (saveModel.getQuotaDate() != null) {
|
|
|
range = df.format(saveModel.getQuotaDate());
|
|
|
}
|
|
|
JSONObject json = countResult.get(range);
|
|
|
// //因为上述时间集提前一天 但是前端是显示当前时间,所以这里给调整回去
|
|
|
// if (range.equals(df.format(temp.getTime()))) {
|
|
|
// json.put("range", endDate);
|
|
|
// }
|
|
|
if (json != null) {
|
|
|
long amount = saveModel.getResult2().longValue();
|
|
|
json.put("amount", amount);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>(countResult.values());
|
|
|
|
|
|
// 排序
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
@Override
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
|
|
|
return 1;
|
|
|
} else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
|
|
|
return -1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
for (JSONObject object:result){
|
|
|
jsonArray.add(object);
|
|
|
}
|
|
|
|
|
|
return jsonArray;
|
|
|
} else {
|
|
|
return new JSONArray();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 按月统计 折线图
|
|
|
*
|
|
|
* @param startDate
|
|
|
* @param endDate
|
|
|
* @param area
|
|
|
* @param level
|
|
|
* @param index
|
|
|
* @param lowCode
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
private JSONArray monthTotalStatistics2(String startDate, String endDate, String area, int level, String index, String lowCode, String timelevel) throws Exception {
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
|
|
// 起始日期
|
|
|
Calendar start = Calendar.getInstance();
|
|
|
start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
|
|
|
// 结束日期
|
|
|
Calendar end = Calendar.getInstance();
|
|
|
//因为统计时间是统计到当前时间的前一天,所以这里的时间是提前一天
|
|
|
Calendar temp = Calendar.getInstance();
|
|
|
temp.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
// temp.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
end.setTime(temp.getTime());
|
|
|
|
|
|
// 日期集合
|
|
|
List<Calendar> days = new ArrayList<>();
|
|
|
days.add(start);
|
|
|
|
|
|
boolean flag = true;
|
|
|
int k = 0;
|
|
|
|
|
|
if (startDate.compareTo(endDate) == 0) {
|
|
|
flag = false;
|
|
|
days.add(end);
|
|
|
}
|
|
|
|
|
|
// 统计日期计算
|
|
|
while (flag) {
|
|
|
Calendar next = Calendar.getInstance();
|
|
|
next.setTime(days.get(days.size() - 1).getTime());
|
|
|
if (k == 0) {
|
|
|
next.add(Calendar.MONTH, 1);
|
|
|
} else {
|
|
|
next.add(Calendar.MONTH, 2);
|
|
|
}
|
|
|
next.set(Calendar.DAY_OF_MONTH, 1);
|
|
|
next.add(Calendar.DAY_OF_MONTH, -1);
|
|
|
|
|
|
if (next.getTime().before(DateUtil.strToDate(endDate, "yyyy-MM-dd"))) {
|
|
|
days.add(next);
|
|
|
} else {
|
|
|
days.add(end);
|
|
|
flag = false;
|
|
|
}
|
|
|
k++;
|
|
|
}
|
|
|
|
|
|
// 统计结果
|
|
|
Map<String, JSONObject> countResult = new HashMap<>();
|
|
|
|
|
|
for (int i = 0; i < days.size() - 1; i++) {
|
|
|
String endStr = df.format(days.get(i + 1).getTime());
|
|
|
|
|
|
JSONObject range = new JSONObject();
|
|
|
|
|
|
range.put("range", endStr);
|
|
|
range.put("amount", 0);
|
|
|
|
|
|
countResult.put(endStr, range);
|
|
|
}
|
|
|
|
|
|
if (startDate.equals(df.format(new Date()))) {
|
|
|
Calendar preDate = Calendar.getInstance();
|
|
|
preDate.setTime(df.parse(endDate));
|
|
|
preDate.add(Calendar.DATE, -1);
|
|
|
|
|
|
startDate = df.format(preDate.getTime());
|
|
|
}
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
if (StringUtils.isNotBlank(lowCode)) {
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, timelevel, SaveModel.interval_month, lowCode);
|
|
|
} else {
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, SaveModel.interval_month);
|
|
|
}
|
|
|
|
|
|
if (saveModels != null) {
|
|
|
// 计算结果
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
String range = "";
|
|
|
if (saveModel.getQuotaDate() != null) {
|
|
|
range = df.format(saveModel.getQuotaDate());
|
|
|
}
|
|
|
JSONObject json = countResult.get(range);
|
|
|
//因为上述时间集提前一天 但是前端是显示当前时间,所以这里给调整回去
|
|
|
if (range.equals(df.format(temp.getTime()))) {
|
|
|
json.put("range", endDate);
|
|
|
}
|
|
|
if (json != null) {
|
|
|
long amount = saveModel.getResult2().longValue();
|
|
|
json.put("amount", amount);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
List<JSONObject> result = new ArrayList<>(countResult.values());
|
|
|
|
|
|
// 排序
|
|
|
result.sort(new Comparator<JSONObject>() {
|
|
|
@Override
|
|
|
public int compare(JSONObject o1, JSONObject o2) {
|
|
|
if (o1.getString("range").compareTo(o2.getString("range")) > 0) {
|
|
|
return 1;
|
|
|
} else if (o1.getString("range").compareTo(o2.getString("range")) < 0) {
|
|
|
return -1;
|
|
|
} else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
});
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
for (JSONObject object:result){
|
|
|
jsonArray.add(object);
|
|
|
}
|
|
|
|
|
|
return jsonArray;
|
|
|
} else {
|
|
|
return new JSONArray();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|