|
@ -815,7 +815,7 @@ public class StatisticsESService {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public JSONObject getDateTotal(String startDate, String endDate, int interval, String area, int level, String index, String lowCode, String year) throws Exception {
|
|
public JSONObject getDateTotal(String startDate, String endDate, int interval, String area, int level, String index, String lowCode, String year) throws Exception {
|
|
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
int taskNum = 0;
|
|
int taskNum = 0;
|
|
JSONObject json = new JSONObject();
|
|
JSONObject json = new JSONObject();
|
|
|
|
|
|
@ -840,23 +840,331 @@ public class StatisticsESService {
|
|
}
|
|
}
|
|
|
|
|
|
json.put("taskNum", taskNum);
|
|
json.put("taskNum", taskNum);
|
|
List<SaveModel> list = null;
|
|
|
|
if (StringUtils.isNotEmpty(lowCode)) {
|
|
|
|
//一级维度
|
|
|
|
list = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, interval + "", lowCode);
|
|
|
|
} else {
|
|
|
|
list = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate, endDate, area, level, index, SaveModel.timeLevel_DDL, interval + "");
|
|
|
|
|
|
if (interval == 1){
|
|
|
|
JSONArray jsonArray = dateTotalStatistics(startDate, endDate, area, level, index, lowCode);
|
|
|
|
json.put("data", jsonArray);
|
|
|
|
return json;
|
|
|
|
} else if (interval == 2) {
|
|
|
|
JSONArray jsonArray = weekTotalStatistics(startDate, endDate, area, level, index, lowCode);
|
|
|
|
json.put("data", jsonArray);
|
|
|
|
return json;
|
|
|
|
} else if (interval == 3) {
|
|
|
|
JSONArray jsonArray = monthTotalStatistics(startDate, endDate, area, level, index, lowCode);
|
|
|
|
json.put("data", jsonArray);
|
|
|
|
return json;
|
|
}
|
|
}
|
|
|
|
return json;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 总体分析 折线图 绑定微信 按日
|
|
|
|
* @param startDate
|
|
|
|
* @param endDate
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @param lowCode
|
|
|
|
* @return
|
|
|
|
* @throws ParseException
|
|
|
|
*/
|
|
|
|
public JSONArray dateTotalStatistics(String startDate, String endDate, String area, int level, String index, String lowCode) throws Exception {
|
|
|
|
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
List<SaveModel> saveModels = new ArrayList<>();
|
|
|
|
//startDate = DateUtil.getNextDay(startDate,-1);
|
|
|
|
if (StringUtils.isNotBlank(lowCode)){
|
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel1(startDate,endDate,area,level,index,SaveModel.timeLevel_DDL,SaveModel.interval_day,lowCode);
|
|
|
|
}else{
|
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate,endDate,area,level,index,SaveModel.timeLevel_DDL,SaveModel.interval_day);
|
|
|
|
}
|
|
List<JSONObject> result = new ArrayList<>();
|
|
List<JSONObject> result = new ArrayList<>();
|
|
for (SaveModel saveModel : list) {
|
|
|
|
|
|
if (saveModels != null) {
|
|
|
|
// 计算结果
|
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
|
JSONObject json = new JSONObject();
|
|
|
|
String range = df.format(saveModel.getQuotaDate());
|
|
|
|
long amount = saveModel.getResult2().longValue();
|
|
|
|
json.put("range", range);
|
|
|
|
json.put("amount", amount);
|
|
|
|
result.add(json);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 排序
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
|
} 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) 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();
|
|
|
|
end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
|
// 起始日期为周几
|
|
|
|
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<>();
|
|
|
|
|
|
|
|
// 算出每个查询周期
|
|
|
|
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();
|
|
JSONObject range = new JSONObject();
|
|
range.put("range", df.format(saveModel.getQuotaDate()));
|
|
|
|
range.put("amount", saveModel.getResult2().longValue());
|
|
|
|
result.add(range);
|
|
|
|
|
|
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,SaveModel.timeLevel_DDL,SaveModel.interval_day,lowCode);
|
|
|
|
}else{
|
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate,endDate,area,level,index,SaveModel.timeLevel_DDL,SaveModel.interval_day);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (saveModels != null) {
|
|
|
|
// 计算结果
|
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
|
String range = df.format(saveModel.getQuotaDate());
|
|
|
|
JSONObject json = countResult.get(range);
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
|
} else {
|
|
|
|
return new JSONArray();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 按月统计 折线图
|
|
|
|
* @param startDate
|
|
|
|
* @param endDate
|
|
|
|
* @param area
|
|
|
|
* @param level
|
|
|
|
* @param index
|
|
|
|
* @param lowCode
|
|
|
|
* @return
|
|
|
|
* @throws Exception
|
|
|
|
*/
|
|
|
|
private JSONArray monthTotalStatistics(String startDate, String endDate, String area, int level, String index, String lowCode) 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();
|
|
|
|
end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
|
|
|
|
|
|
|
|
// 日期集合
|
|
|
|
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,SaveModel.timeLevel_DDL,SaveModel.interval_day,lowCode);
|
|
|
|
}else{
|
|
|
|
saveModels = elasticsearchUtil.findLineChartDateQuotaLevel0(startDate,endDate,area,level,index,SaveModel.timeLevel_DDL,SaveModel.interval_day);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (saveModels != null) {
|
|
|
|
// 计算结果
|
|
|
|
for (SaveModel saveModel : saveModels) {
|
|
|
|
String range = df.format(saveModel.getQuotaDate());
|
|
|
|
JSONObject json = countResult.get(range);
|
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return new JSONArray(result);
|
|
|
|
} else {
|
|
|
|
return new JSONArray();
|
|
}
|
|
}
|
|
json.put("data", new ArrayList<>(result));
|
|
|
|
return json;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|