修改v1版本流量统计带宽查询接口从clickhouse中查询

This commit is contained in:
renkaige
2019-05-20 14:57:19 +08:00
parent ab4ea8fa69
commit d66892e159
8 changed files with 615 additions and 5 deletions

View File

@@ -4,11 +4,12 @@
package com.nis.util;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.time.DateFormatUtils;
@@ -380,4 +381,171 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
String dayAfter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime());
return dayAfter;
}
/**
* 获取某个时间的最近五分钟,strDate和numDate传入一个即可
*
* @param date 格式yyyy-MM-dd HH:mm:ss
* @param numDate 时间戳
* @return
*/
public static Calendar getRecentFiveMinute(String strDate, Long numDate) {
Calendar instance = Calendar.getInstance();
if (strDate != null) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
instance.setTime(sdf.parse(strDate));
} catch (ParseException e) {
e.printStackTrace();
}
} else if (numDate != null) {
instance.setTimeInMillis(numDate);
}
int oldMinute = instance.get(Calendar.MINUTE);
char[] charArray = String.valueOf(oldMinute).toCharArray();
if (charArray[charArray.length - 1] - '0' >= 5) {
charArray[charArray.length - 1] = '5';
} else {
charArray[charArray.length - 1] = '0';
}
instance.set(Calendar.SECOND, 0);
instance.set(Calendar.MINUTE, Integer.valueOf(String.valueOf(charArray)));
return instance;
}
/**
* 获取两个时间的五分钟间隔,小时间隔,天间隔,月间隔
*
* @param beginDate 开始时间(包含开始时间)
* @param endDate 结束时间(不包含结束时间)
* @param type 0:五分钟间隔,1:小时间隔,2:天间隔,3:月间隔,4:年间隔
* @return 返回时间戳集合
*/
public static List<Long> getTimeInterval(String beginDate, String endDate, int type) {
Calendar beginCal = getRecentFiveMinute(beginDate,null);// 将时间转为最近的五分钟
Calendar endCal = getRecentFiveMinute(endDate,null);
List<Long> list = new ArrayList<>();
boolean bool = true;
switch (type) {
case 1:// 获取小时间隔
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.HOUR_OF_DAY, beginCal.get(Calendar.HOUR_OF_DAY));
endCal.set(Calendar.MINUTE, 0);
endCal.set(Calendar.HOUR_OF_DAY, endCal.get(Calendar.HOUR_OF_DAY));
break;
case 2:// 获取天间隔
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.HOUR_OF_DAY, 0);
beginCal.set(Calendar.DAY_OF_MONTH, beginCal.get(Calendar.DAY_OF_MONTH));
endCal.set(Calendar.MINUTE, 0);
endCal.set(Calendar.HOUR_OF_DAY, 0);
endCal.set(Calendar.DAY_OF_MONTH, endCal.get(Calendar.DAY_OF_MONTH));
break;
case 3:// 获取月间隔
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.HOUR_OF_DAY, 0);
beginCal.set(Calendar.DAY_OF_MONTH, 1);
beginCal.set(Calendar.MONTH, beginCal.get(Calendar.MONTH));
endCal.set(Calendar.MINUTE, 0);
endCal.set(Calendar.HOUR_OF_DAY, 0);
endCal.set(Calendar.DAY_OF_MONTH, 1);
endCal.set(Calendar.MONTH, endCal.get(Calendar.MONTH));
break;
case 4:// 获取年间隔
beginCal.set(Calendar.MINUTE, 0);
beginCal.set(Calendar.HOUR_OF_DAY, 0);
beginCal.set(Calendar.DAY_OF_MONTH, 1);
beginCal.set(Calendar.MONTH, 0);
beginCal.set(Calendar.YEAR, beginCal.get(Calendar.YEAR));
endCal.set(Calendar.MINUTE, 0);
endCal.set(Calendar.HOUR_OF_DAY, 0);
endCal.set(Calendar.DAY_OF_MONTH, 1);
endCal.set(Calendar.MONTH, 0);
endCal.set(Calendar.YEAR, endCal.get(Calendar.YEAR));
break;
}
list.add(beginCal.getTimeInMillis());
long endTime = endCal.getTimeInMillis();
while (bool) {
switch (type) {
case 1:// 获取小时间隔
beginCal.add(Calendar.HOUR_OF_DAY, 1);
break;
case 2:// 获取天间隔
beginCal.add(Calendar.DAY_OF_MONTH, 1);
break;
case 3:// 获取月间隔
beginCal.add(Calendar.MONTH, 1);
break;
case 4:// 获取年间隔
beginCal.add(Calendar.YEAR, 1);
break;
default:// 默认获取五分钟间隔
beginCal.add(Calendar.MINUTE, 5);
}
long timeInMillis = beginCal.getTimeInMillis();
if (timeInMillis < endTime) {
list.add(timeInMillis);
} else {
bool = false;
}
}
return list;
}
/**
* 获取一个时间对应的小时,天,月,年等粒度
*
* @param time 需要转化的时间
* @param type 0:五分钟粒度,1:小时粒度,2:天粒度,3:月粒度,4:年粒度
* @return
*/
public static Long getTimeByType(Long time, int type) {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
switch (type) {
case 0:// 获取小时间隔
calendar=getRecentFiveMinute(null,time);
break;
case 1:// 获取小时间隔
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY));
break;
case 2:// 获取天间隔
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH));
break;
case 3:// 获取月间隔
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH));
break;
case 4:// 获取年间隔
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR));
break;
}
return calendar.getTimeInMillis();
}
}