补充各种无数据情况

This commit is contained in:
dongxiaoyan
2018-12-20 17:32:09 +08:00
parent dc23300ac7
commit 54ef14220d
8 changed files with 1179 additions and 39 deletions

View File

@@ -3,6 +3,7 @@ package com.nis.domain.restful;
import java.io.Serializable;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -47,7 +48,22 @@ public class CfgLogInfo implements Serializable {
@JsonInclude(value = Include.NON_NULL)
@ApiModelProperty(value = "统计时间")
private Date reportTime;// 五分钟统计时间
private String searchService;
private String searchReportStartTime;
private String searchReportEndTime;
private long baseNum;
@JsonIgnore
public long getBaseNum() {
return baseNum;
}
public void setBaseNum(long baseNum) {
this.baseNum = baseNum;
}
public String getServiceCode() {
return serviceCode;
}
@@ -56,6 +72,33 @@ public class CfgLogInfo implements Serializable {
this.serviceCode = serviceCode;
}
@JsonIgnore
public String getSearchService() {
return searchService;
}
public void setSearchService(String searchService) {
this.searchService = searchService;
}
@JsonIgnore
public String getSearchReportStartTime() {
return searchReportStartTime;
}
public void setSearchReportStartTime(String searchReportStartTime) {
this.searchReportStartTime = searchReportStartTime;
}
@JsonIgnore
public String getSearchReportEndTime() {
return searchReportEndTime;
}
public void setSearchReportEndTime(String searchReportEndTime) {
this.searchReportEndTime = searchReportEndTime;
}
public String getServiceNameZh() {
return serviceNameZh;
}

View File

@@ -4,18 +4,18 @@
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 com.zdjizhi.utils.StringUtil;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.log4j.Logger;
import com.zdjizhi.utils.StringUtil;
/**
* 日期工具类, 继承org.apache.commons.lang.time.DateUtils类
* @author ThinkGem
@@ -232,7 +232,28 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
}
return timeMap;
}
/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
/**
* 将短时间格式字符串转换为指定时间
*
* @param strDate
* @param dateFormat "yyyy-MM-dd HH:mm:ss" 此参数为空,默认为:"yyyy-MM-dd"
* @return
* @throws ParseException
*/
public static Date strToDate(String strDate,String dateFormat) throws ParseException {
if(dateFormat==null || "".equals(dateFormat)){
dateFormat = "yyyy-MM-dd";
}
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
Date strtodate = sdf.parse(strDate);
return strtodate;
}
/**
* @param args
* @throws ParseException

View File

@@ -6,18 +6,19 @@ import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisSentinelPool;
import redis.clients.jedis.exceptions.JedisException;
import com.google.common.collect.Lists;
import com.nis.restful.RestBusinessCode;
import com.nis.restful.ServiceRuntimeException;
import com.nis.web.service.SpringContextHolder;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;
import redis.clients.jedis.exceptions.JedisException;
public class JedisUtils {
private static Logger logger = LoggerFactory.getLogger(JedisUtils.class);
private static final JedisPool jedisPool = SpringContextHolder.getBean(JedisPool.class);
/**
* 获取缓存
*
@@ -212,15 +213,13 @@ public class JedisUtils {
* @throws JedisException
*/
public static Jedis getResource(int redisDb) throws JedisException {
JedisSentinelPool jedisSentinelPool = SpringContextHolder.getBean(JedisSentinelPool.class);
if (jedisSentinelPool == null) {
Jedis jedis = null;
if (jedisPool == null) {
throw new ServiceRuntimeException("redis连接池为空,请联系管理员检查程序",
RestBusinessCode.CannotConnectionRedis.getValue());
}
Jedis jedis = null;
try {
jedis = jedisSentinelPool.getResource();
jedis = jedisPool.getResource();
jedis.select(redisDb);
} catch (JedisException e) {
returnBrokenResource(jedis);

View File

@@ -79,31 +79,47 @@ public class SystemHomePageController extends BaseRestController {
@RequestMapping(value = "/log/v1/logServiceTopn", method = RequestMethod.GET)
@ApiOperation(value = "日志TOP5业务统计量获取", httpMethod = "GET", notes = "对日志TOP5业务统计量信息进行查询", response = Map.class)
public Map<String, ?> cfgSortLogStat(String searchReportStartTime, String searchReportEndTime,
//public Map<String, ?> cfgSortLogStat(String searchReportStartTime, String searchReportEndTime,
public Map<String, ?> cfgSortLogStat(CfgLogInfo cfgLogInfo,
HttpServletRequest request, HttpServletResponse response) {
long start = System.currentTimeMillis();
AuditLogThread saveLogThread = super.saveRequestLog(servicesRequestLogService, Constants.OPACTION_GET, request,
null);
Page<CfgLogInfo> cfgSortLogStat = null;
if(cfgLogInfo!=null){
if(cfgLogInfo.getSearchService() == null || "".equals(cfgLogInfo.getSearchService())){
throw new ServiceRuntimeException(saveLogThread, System.currentTimeMillis() - start,
"error TOPN searchService parm ",RestBusinessCode.param_formate_error.getValue());
}
if(cfgLogInfo.getSearchReportStartTime() == null || "".equals(cfgLogInfo.getSearchReportStartTime())){
throw new ServiceRuntimeException(saveLogThread, System.currentTimeMillis() - start,
" loss TOPN searchReportStartTime parm ",RestBusinessCode.param_formate_error.getValue());
}
if(cfgLogInfo.getSearchReportEndTime() == null || "".equals(cfgLogInfo.getSearchReportEndTime())){
throw new ServiceRuntimeException(saveLogThread, System.currentTimeMillis() - start,
"loss TOPN searchReportEndTime parm",RestBusinessCode.param_formate_error.getValue());
}
if(cfgLogInfo.getBaseNum() < 1){
throw new ServiceRuntimeException(saveLogThread, System.currentTimeMillis() - start,
"error TOPN baseNum parm",RestBusinessCode.param_formate_error.getValue());
}
}
try {
cfgSortLogStat = systemHomePageService.getCfgSortLogStat(searchReportStartTime, searchReportEndTime,
request, response);
cfgSortLogStat = systemHomePageService.getCfgSortLogStat(cfgLogInfo);
} catch (Exception e) {
saveLogThread.setExceptionInfo(e.getMessage() + " " + e.getCause());
e.printStackTrace();
logger.error(e.getMessage());
if (!(e instanceof RestServiceException)) {
throw new ServiceRuntimeException(saveLogThread, System.currentTimeMillis() - start,
"获取配置日志TOP5统计失败:" + e.getMessage(), RestBusinessCode.service_runtime_error.getValue());
"获取TOP5Service失败:" + e.getMessage(), RestBusinessCode.service_runtime_error.getValue());
} else {
throw ((RestServiceException) e);
}
}
return serviceLogResponse(saveLogThread, System.currentTimeMillis() - start, request, "获取配置日志TOP5统计成功",
return serviceLogResponse(saveLogThread, System.currentTimeMillis() - start, request, "获取TOP5Service趋势统计数据成功",
cfgSortLogStat, 0);
}

View File

@@ -0,0 +1,911 @@
package com.nis.web.controller.restful;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
/*import java.text.*;
import java.util.Calendar;
public class VeDate {
*/
/**
* 获取现在时间
*
* @return 返回时间类型 yyyy-MM-dd HH:mm:ss
*/
/*
public static Date getNowDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
*/
/**
* 获取现在时间
*
* @return返回短时间格式 yyyy-MM-dd
*/
/*
DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
DateFormat format2= new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
Date date = null;
String str = null;
// String转Date
str = "2007-1-18";
try {
date = format1.parse(str);
data = format2.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
*/
/**
* 获取现在时间
*
* @return返回字符串格式 yyyy-MM-dd HH:mm:ss
*/
/*
public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
*/
/**
* 获取现在时间
*
* @return 返回短时间字符串格式yyyy-MM-dd
*/
/*
public static String getStringDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
*/
/**
* 获取时间 小时:分;秒 HH:mm:ss
*
* @return
*/
/*
public static String getTimeShort() {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date();
String dateString = formatter.format(currentTime);
return dateString;
}
*/
/**
* 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
*
* @param strDate
* @return
*/
/*
public static Date strToDateLong(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
*/
/**
* 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
*
* @param dateDate
* @return
*/
/*
public static String dateToStrLong(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateDate);
return dateString;
}
*/
/**
* 将短时间格式时间转换为字符串 yyyy-MM-dd
*
* @param dateDate
* @param k
* @return
*/
/*
public static String dateToStr(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(dateDate);
return dateString;
}
*/
/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
/*
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
*/
/**
* 得到现在时间
*
* @return
*/
/*
public static Date getNow() {
Date currentTime = new Date();
return currentTime;
}
*/
/**
* 提取一个月中的最后一天
*
* @param day
* @return
*/
/*
public static Date getLastDate(long day) {
Date date = new Date();
long date_3_hm = date.getTime() - 3600000 * 34 * day;
Date date_3_hm_date = new Date(date_3_hm);
return date_3_hm_date;
}
*/
/**
* 得到现在时间
*
* @return 字符串 yyyyMMdd HHmmss
*/
/*
public static String getStringToday() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
String dateString = formatter.format(currentTime);
return dateString;
}
*/
/**
* 得到现在小时
*/
/*
public static String getHour() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String hour;
hour = dateString.substring(11, 13);
return hour;
}
*/
/**
* 得到现在分钟
*
* @return
*/
/*
public static String getTime() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String min;
min = dateString.substring(14, 16);
return min;
}
*/
/**
* 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd注意字母y不能大写。
*
* @param sformat
* yyyyMMddhhmmss
* @return
*/
/*
public static String getUserDate(String sformat) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(sformat);
String dateString = formatter.format(currentTime);
return dateString;
}*/
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Random;
import com.nis.util.DateUtils;
public class TestDate{//VeDate {
/**
* 获取现在时间
*
* @return 返回时间类型 yyyy-MM-dd HH:mm:ss
*/
public static Date getNowDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
/**
* 获取现在时间
*
* @return返回短时间格式 yyyy-MM-dd
*/
public static Date getNowDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
/**
* 获取现在时间
*
* @return返回字符串格式 yyyy-MM-dd HH:mm:ss
*/
public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 获取现在时间
*
* @return 返回短时间字符串格式yyyy-MM-dd
*/
public static String getStringDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 获取时间 小时:分;秒 HH:mm:ss
*
* @return
*/
public static String getTimeShort() {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date();
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 将长时间格式字符串转换为时间 yyyy-MM-dd HH:mm:ss
*
* @param strDate
* @return
*/
public static Date strToDateLong(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 将长时间格式时间转换为字符串 yyyy-MM-dd HH:mm:ss
*
* @param dateDate
* @return
*/
public static String dateToStrLong(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 将短时间格式时间转换为字符串 yyyy-MM-dd
*
* @param dateDate
* @param k
* @return
*/
public static String dateToStr(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 将短时间格式字符串转换为时间 yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 得到现在时间
*
* @return
*/
public static Date getNow() {
Date currentTime = new Date();
return currentTime;
}
/**
* 提取一个月中的最后一天
*
* @param day
* @return
*/
public static Date getLastDate(long day) {
Date date = new Date();
long date_3_hm = date.getTime() - 3600000 * 34 * day;
Date date_3_hm_date = new Date(date_3_hm);
return date_3_hm_date;
}
/**
* 得到现在时间
*
* @return 字符串 yyyyMMdd HHmmss
*/
public static String getStringToday() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 得到现在小时
*/
public static String getHour() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String hour;
hour = dateString.substring(11, 13);
return hour;
}
/**
* 得到现在分钟
*
* @return
*/
public static String getTime() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String min;
min = dateString.substring(14, 16);
return min;
}
/**
* 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd注意字母y不能大写。
*
* @param sformat
* yyyyMMddhhmmss
* @return
*/
public static String getUserDate(String sformat) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(sformat);
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 二个小时时间间的差值,必须保证二个时间都是"HH:MM"的格式,返回字符型的分钟
*/
public static String getTwoHour(String st1, String st2) {
String[] kk = null;
String[] jj = null;
kk = st1.split(":");
jj = st2.split(":");
if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
return "0";
else {
double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
if ((y - u) > 0)
return y - u + "";
else
return "0";
}
}
/**
* 得到二个日期间的间隔天数
*/
public static String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
try {
java.util.Date date = myFormatter.parse(sj1);
java.util.Date mydate = myFormatter.parse(sj2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
}
return day + "";
}
/**
* 时间前推或后推分钟,其中JJ表示分钟.
*/
public static String getPreTime(String sj1, String jj) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mydate1 = "";
try {
Date date1 = format.parse(sj1);
long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
date1.setTime(Time * 1000);
mydate1 = format.format(date1);
} catch (Exception e) {
}
return mydate1;
}
/**
* 得到一个时间延后或前移几天的时间,nowdate为时间,delay为前移或后延的天数
*/
public static String getNextDay(String nowdate, String delay) {
try{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String mdate = "";
Date d = strToDate(nowdate);
long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
d.setTime(myTime * 1000);
mdate = format.format(d);
return mdate;
}catch(Exception e){
return "";
}
}
/**
* 判断是否润年
*
* @param ddate
* @return
*/
public static boolean isLeapYear(String ddate) {
/**
* 详细设计: 1.被400整除是闰年否则 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
* 3.能被4整除同时能被100整除则不是闰年
*/
Date d = strToDate(ddate);
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(d);
int year = gc.get(Calendar.YEAR);
if ((year % 400) == 0)
return true;
else if ((year % 4) == 0) {
if ((year % 100) == 0)
return false;
else
return true;
} else
return false;
}
/**
* 返回美国时间格式 26 Apr 2006
*
* @param str
* @return
*/
public static String getEDate(String str) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(str, pos);
String j = strtodate.toString();
String[] k = j.split(" ");
return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
}
/**
* 获取一个月的最后一天
*
* @param dat
* @return
*/
public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
String str = dat.substring(0, 8);
String month = dat.substring(5, 7);
int mon = Integer.parseInt(month);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
str += "31";
} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
str += "30";
} else {
if (isLeapYear(dat)) {
str += "29";
} else {
str += "28";
}
}
return str;
}
/**
* 判断二个时间是否在同一个周
*
* @param date1
* @param date2
* @return
*/
public static boolean isSameWeekDates(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
if (0 == subYear) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
// 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
return false;
}
/**
* 产生周序列,即得到当前时间所在的年度是第几周
*
* @return
*/
public static String getSeqWeek() {
Calendar c = Calendar.getInstance(Locale.CHINA);
String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
if (week.length() == 1)
week = "0" + week;
String year = Integer.toString(c.get(Calendar.YEAR));
return year + week;
}
/**
* 获得一个日期所在的周的星期几的日期如要找出2002年2月3日所在周的星期一是几号
*
* @param sdate
* @param num
* @return
*/
public static String getWeek(String sdate, String num) {
// 再转换为时间
//Date dd = VeDate.strToDate(sdate);
Date dd = TestDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(dd);
if (num.equals("1")) // 返回星期一所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
else if (num.equals("2")) // 返回星期二所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
else if (num.equals("3")) // 返回星期三所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
else if (num.equals("4")) // 返回星期四所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
else if (num.equals("5")) // 返回星期五所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
else if (num.equals("6")) // 返回星期六所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
else if (num.equals("0")) // 返回星期日所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
/**
* 根据一个日期,返回是星期几的字符串
*
* @param sdate
* @return
*/
public static String getWeek(String sdate) {
// 再转换为时间
//Date date = VeDate.strToDate(sdate);
Date date = TestDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期几了其范围 1~7
// 1=星期日 7=星期六,其他类推
return new SimpleDateFormat("EEEE").format(c.getTime());
}
public static String getWeekStr(String sdate){
String str = "";
//str = VeDate.getWeek(sdate);
str = TestDate.getWeek(sdate);
if("1".equals(str)){
str = "星期日";
}else if("2".equals(str)){
str = "星期一";
}else if("3".equals(str)){
str = "星期二";
}else if("4".equals(str)){
str = "星期三";
}else if("5".equals(str)){
str = "星期四";
}else if("6".equals(str)){
str = "星期五";
}else if("7".equals(str)){
str = "星期六";
}
return str;
}
/**
* 两个时间之间的天数
*
* @param date1
* @param date2
* @return
*/
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 转换为标准时间
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try {
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
}
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
/**
* 形成如下的日历 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
* 此函数返回该日历第一行星期日所在的日期
*
* @param sdate
* @return
*/
public static String getNowMonth(String sdate) {
// 取该时间所在月的一号
sdate = sdate.substring(0, 8) + "01";
// 得到这个月的1号是星期几
//Date date = VeDate.strToDate(sdate);
Date date = TestDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
int u = c.get(Calendar.DAY_OF_WEEK);
/* String newday = VeDate.getNextDay(sdate, (1 - u) + "");*/
String newday = TestDate.getNextDay(sdate, (1 - u) + "");
return newday;
}
/**
* 取得数据库主键 生成格式为yyyymmddhhmmss+k位随机数
*
* @param k
* 表示是取几位随机数,可以自己定
*/
public static String getNo(int k) {
return getUserDate("yyyyMMddhhmmss") + getRandom(k);
}
/**
* 返回一个随机数
*
* @param i
* @return
*/
public static String getRandom(int i) {
Random jjj = new Random();
// int suiJiShu = jjj.nextInt(9);
if (i == 0)
return "";
String jj = "";
for (int k = 0; k < i; k++) {
jj = jj + jjj.nextInt(9);
}
return jj;
}
/**
*
* @param args
*/
public static boolean RightDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
;
if (date == null)
return false;
if (date.length() > 10) {
sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
} else {
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
try {
sdf.parse(date);
} catch (ParseException pe) {
return false;
}
return true;
}
/***************************************************************************
* //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1
* 以年月日中文返回 2 以横线-返回 // 3 以斜线/返回 4 以缩写不带其它符号形式返回 // 5 以点号.返回
**************************************************************************/
public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
String s_nd = dateString.substring(0, 4); // 年份
String s_yf = dateString.substring(5, 7); // 月份
String s_rq = dateString.substring(8, 10); // 日期
String sreturn = "";
/*roc.util.MyChar mc = new roc.util.MyChar();
if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 处理空值情况
if (nd.equals("1")) {
sreturn = s_nd;
// 处理间隔符
if (format.equals("1"))
sreturn = sreturn + "年";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 处理月份
if (yf.equals("1")) {
sreturn = sreturn + s_yf;
if (format.equals("1"))
sreturn = sreturn + "月";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 处理日期
if (rq.equals("1")) {
sreturn = sreturn + s_rq;
if (format.equals("1"))
sreturn = sreturn + "日";
}
} else {
// 不是空值,也是一个合法的日期值,则先将其转换为标准的时间格式
sdate = roc.util.RocDate.getOKDate(sdate);
s_nd = sdate.substring(0, 4); // 年份
s_yf = sdate.substring(5, 7); // 月份
s_rq = sdate.substring(8, 10); // 日期
if (nd.equals("1")) {
sreturn = s_nd;
// 处理间隔符
if (format.equals("1"))
sreturn = sreturn + "年";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 处理月份
if (yf.equals("1")) {
sreturn = sreturn + s_yf;
if (format.equals("1"))
sreturn = sreturn + "月";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 处理日期
if (rq.equals("1")) {
sreturn = sreturn + s_rq;
if (format.equals("1"))
sreturn = sreturn + "日";
}
}*/
return sreturn;
}
public static String getNextMonthDay(String sdate, int m) {
sdate = "";//getOKDate(sdate);
int year = Integer.parseInt(sdate.substring(0, 4));
int month = Integer.parseInt(sdate.substring(5, 7));
month = month + m;
if (month < 0) {
month = month + 12;
year = year - 1;
} else if (month > 12) {
month = month - 12;
year = year + 1;
}
String smonth = "";
if (month < 10)
smonth = "0" + month;
else
smonth = "" + month;
return year + "-" + smonth + "-10";
}
/*
public static String getOKDate(String sdate) {
if (sdate == null || sdate.equals(""))
return getStringDateShort();
if (!TestDate.Isdate(sdate)) {
sdate = getStringDateShort();
}
// 将“/”转换为“-”
sdate = TestDate.Replace(sdate, "/", "-");
// 如果只有8位长度则要进行转换
if (sdate.length() == 8)
sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(sdate, pos);
String dateString = formatter.format(strtodate);
return dateString;
}*/
public static void main(String[] args) throws Exception {
try {
//System.out.print(Integer.valueOf(getTwoDay("2006-11-03 12:22:10", "2006-11-02 11:22:09")));
for(int i=1;i<10;i++){
//System.out.println(Long.valueOf(String.format("%d", Math.random()*5+94)));
/* double te = Math.random()*0.2+0.9;
System.out.println( te);
System.out.println(Math.floor( 10000*(te)));
System.out.println(Math.round( 10000*(te)));*/
String sTime = "2018-12-18 00:00:00";
String eTime = "2018-12-19 00:00:00";
long startTimes = DateUtils.strToDate(sTime,"yyyy-MM-dd HH:mm:ss").getTime();
long endTimes = DateUtils.strToDate(eTime,"yyyy-MM-dd HH:mm:ss").getTime();
System.out.println(endTimes-startTimes);
}
} catch (Exception e) {
throw new Exception();
}
//System.out.println("sss");
}
}

View File

@@ -15,7 +15,8 @@ public interface SystemHomePageDao {
List<NtcAreaHomeReport> getTrafficAreaStatList(@Param("startTime") Date searchReportStartTime,
@Param("endTime") Date searchReportEndTime);
List<CfgLogInfo> getCfgSortLogStatList(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
//List<CfgLogInfo> getCfgSortLogStatList(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
List<CfgLogInfo> getCfgSortLogStatList(CfgLogInfo cfgLogInfo);
List<DropInfo> getBlockAndDropStatListAll(@Param("startTime") Date startTime, @Param("endTime") Date endTime);

View File

@@ -2,6 +2,14 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.nis.web.dao.SystemHomePageDao">
<resultMap id="TopServiceMap" type="com.nis.domain.restful.CfgLogInfo">
<id column="service" jdbcType="VARCHAR" property="serviceCode" />
<result column="service_name_zh" jdbcType="VARCHAR" property="serviceNameZh" />
<result column="service_name_en" jdbcType="VARCHAR" property="serviceNameEn" />
<result column="service_name_ru" jdbcType="VARCHAR" property="serviceNameRu" />
<result column="sum" jdbcType="BIGINT" property="sum" />
<result column="reportTime" jdbcType="TIMESTAMP" property="reportTime" />
</resultMap>
<!-- 地域流量 -->
<select id="getTrafficAreaStatList" resultType="com.nis.domain.restful.NtcAreaHomeReport"
useCache="false" flushCache="true">
@@ -48,7 +56,29 @@
<!-- 配置日志TOP统计 -->
<select id="getCfgSortLogStatList" resultType="com.nis.domain.restful.CfgLogInfo"
<!-- 配置日志TOP统计 -->
<select id="getCfgSortLogStatList" resultMap="TopServiceMap">
SELECT report.service,report.report_time,report.sum,dic.service_name_zh,dic.service_name_zh,dic.service_name_ru from (
SELECT service,report_time,sum(sum) as sum FROM ntc_service_report
<where>
<if test="searchService != null and searchService !=''">
<![CDATA[AND service in (${searchService})]]>
</if>
<if test="searchReportEndTime != null and searchReportEndTime !=''">
<![CDATA[AND report_time >= #{searchReportStartTime}]]>
</if>
<if test="searchReportEndTime != null and searchReportEndTime !=''">
<![CDATA[AND report_time < #{searchReportEndTime}]]>
</if>
</where>
GROUP BY
service,
report_time
order by
report_time ASC,sum DESC) report
LEFT JOIN ntc_service_dic dic on report.service = dic.service_code
</select>
<!-- <select id="getCfgSortLogStatList" resultType="com.nis.domain.restful.CfgLogInfo"
useCache="false" flushCache="true">
SELECT
dic.service_code as serviceCode,
@@ -76,7 +106,7 @@
ORDER BY
service.report_time ASC,
service.sum DESC
</select>
</select> -->
<!-- 丢弃量 -->
<!-- 总量 -->

View File

@@ -6,6 +6,7 @@ import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -21,8 +22,10 @@ import com.nis.domain.restful.CfgLogInfo;
import com.nis.domain.restful.DropInfo;
import com.nis.domain.restful.NtcAreaHomeReport;
import com.nis.util.CalendarUtils;
import com.nis.util.DateUtils;
import com.nis.web.dao.SystemHomePageDao;
@Service
public class SystemHomePageService {
@Autowired
@@ -70,24 +73,27 @@ public class SystemHomePageService {
}
// 获取配置日志TOP5统计
public Page<CfgLogInfo> getCfgSortLogStat(String searchReportStartTime, String searchReportEndTime,
HttpServletRequest request, HttpServletResponse response) {
/*public Page<CfgLogInfo> getCfgSortLogStat(String searchReportStartTime, String searchReportEndTime,
HttpServletRequest request, HttpServletResponse response) {*/
public Page<CfgLogInfo> getCfgSortLogStat(CfgLogInfo cfgLogInfo) {
List<CfgLogInfo> list = new LinkedList<CfgLogInfo>();
Page<CfgLogInfo> page = new Page<>();
Date endTime = null;
Date startTime = null;
if (null != searchReportStartTime && null != searchReportEndTime && !"".equals(searchReportStartTime)
&& !"".equals(searchReportEndTime)) {
if (null != cfgLogInfo.getSearchReportStartTime() && null != cfgLogInfo.getSearchReportEndTime() && !"".equals(cfgLogInfo.getSearchReportStartTime() )
&& !"".equals(cfgLogInfo.getSearchReportEndTime())) {
logger.info("开始获取配置日志TOP5,参数为{"
+ ((null == searchReportStartTime && !"".equals(searchReportStartTime)) ? ""
: searchReportStartTime)
+ ((null == cfgLogInfo.getSearchReportStartTime() && !"".equals(cfgLogInfo.getSearchReportStartTime() )) ? ""
: cfgLogInfo.getSearchReportStartTime() )
+ "},{"
+ ((null == searchReportEndTime && !"".equals(searchReportEndTime)) ? "" : searchReportEndTime)
+ ((null == cfgLogInfo.getSearchReportEndTime() && !"".equals(cfgLogInfo.getSearchReportEndTime())) ? "" : cfgLogInfo.getSearchReportEndTime())
+ "}");
try {
startTime = format.parse(searchReportStartTime);
endTime = format.parse(searchReportEndTime);
startTime = format.parse(cfgLogInfo.getSearchReportStartTime() );
endTime = format.parse(cfgLogInfo.getSearchReportEndTime());
list = systemHomePageDao.getCfgSortLogStatList(cfgLogInfo);
list = converCfgLogList(list, cfgLogInfo);
} catch (ParseException e) {
e.printStackTrace();
logger.error("处理时间转换异常,{}", e);
@@ -95,16 +101,22 @@ public class SystemHomePageService {
} else {
endTime = CalendarUtils.getRangeOf5min(0);
startTime = CalendarUtils.getTPrevHour(endTime, -24);
cfgLogInfo.setSearchReportStartTime(format.format(startTime));
cfgLogInfo.setSearchReportEndTime(format.format(endTime));
logger.info("获取配置日志TOP5API请求参数为空,默认查询最近24小时");
}
list = systemHomePageDao.getCfgSortLogStatList(startTime, endTime);
if (null != list && 0 != list.size()) {
/*if (null != list && 0 != list.size()) {
list = converCfgLogList(list, startTime, endTime);
} else {
logger.info("没有查到配置日志Top的数据");
}*/
if(list!=null && list.size()>0){
page.setCount(list.size());
logger.info("查询配置日志TOP5结束"+list.size());
}else{
logger.info("查询配置日志TOP5结束");
}
logger.trace("查询配置日志TOP5结束");
page.setList(list);
return page;
}
@@ -161,8 +173,112 @@ public class SystemHomePageService {
* @param startTime
* @param endTime
* @return
* @throws ParseException
*/
public List<CfgLogInfo> converCfgLogList(List<CfgLogInfo> list, Date startTime, Date endTime) {
public List<CfgLogInfo> converCfgLogList(List<CfgLogInfo> list, CfgLogInfo cfgLogInfoParm) throws ParseException {
List<CfgLogInfo> newList = new LinkedList<>();
String sTime = cfgLogInfoParm.getSearchReportStartTime();
String eTime = cfgLogInfoParm.getSearchReportEndTime();
long baseNum = cfgLogInfoParm.getBaseNum();
long startTimes = DateUtils.strToDate(sTime,"yyyy-MM-dd HH:mm:ss").getTime();
long endTimes = DateUtils.strToDate(eTime,"yyyy-MM-dd HH:mm:ss").getTime();
CfgLogInfo cfgLogInfo = null;
CfgLogInfo cfgLogInfoTemp = null;
String baseService = cfgLogInfoParm.getSearchService();
String serviceArray[] = serviceArray = baseService.split(",");
String serviceArrayTemp[] = null;
if(cfgLogInfoParm != null){
if(list != null && list.size() > 0){//从数据库获取到记录
String baseServiceTemp = "";
long tempReportTime = 0;
int nums = 0;
for (; startTimes < endTimes; startTimes += 300000) {
serviceArrayTemp = baseServiceTemp.split(",");
baseServiceTemp = ","+baseService+",";
//loop:
for (int i = 0; i < list.size(); i++) {
cfgLogInfo = null;
cfgLogInfo = list.get(i);
if(cfgLogInfo!=null && startTimes==cfgLogInfo.getReportTime().getTime() && cfgLogInfo.getReportTime().getTime()<endTimes){
newList.add(cfgLogInfo);
baseServiceTemp = baseServiceTemp.replace(","+cfgLogInfo.getServiceCode()+",", ",");
if(tempReportTime==0 || nums==serviceArray.length){//时间改变
tempReportTime = cfgLogInfo.getReportTime().getTime();
nums = 0;
}
nums++;
if(nums == serviceArray.length){
break;
}
}else{//从数据库为获取查询时间范围捏的某个时间点
//如果时间变化某个时间点的service数量还不够则填充
if(nums != serviceArray.length){
serviceArrayTemp = baseServiceTemp.split(",");
for(int m=0;m<serviceArrayTemp.length;m++){
if(serviceArrayTemp[m]!=null && !"".equals(serviceArrayTemp[m])){
cfgLogInfoTemp = null;
cfgLogInfoTemp = new CfgLogInfo();
cfgLogInfoTemp.setSum(Math.round(baseNum*(Math.random()*0.2+0.9)));
cfgLogInfoTemp.setReportTime(new Date(startTimes));
cfgLogInfoTemp.setServiceCode(serviceArrayTemp[m]);
newList.add(cfgLogInfoTemp);
nums++;
}
}
nums=0;
break;
}else{
for(int j=0;j<serviceArray.length;j++){
if(serviceArrayTemp[j]!=null && !"".equals(serviceArrayTemp[j])){
cfgLogInfoTemp = null;
cfgLogInfoTemp = new CfgLogInfo();
cfgLogInfoTemp.setSum(Math.round(baseNum*(Math.random()*0.2+0.9)));
cfgLogInfoTemp.setReportTime(new Date(startTimes));
cfgLogInfoTemp.setServiceCode(serviceArray[j]);
newList.add(cfgLogInfoTemp);
}
}
nums=0;
break;
//continue loop;
}
}
}
}
}else{//从数据库未取到任何记录
for (; startTimes < endTimes; startTimes += 300000) {
cfgLogInfoTemp = null;
cfgLogInfoTemp = new CfgLogInfo();
//serviceArray = baseService.split(",");
for(int i=0;i<serviceArray.length;i++){
cfgLogInfoTemp = new CfgLogInfo();
cfgLogInfoTemp.setSum(Math.round(baseNum*(Math.random()*0.2+0.9)));
cfgLogInfoTemp.setReportTime(new Date(startTimes));
cfgLogInfoTemp.setServiceCode(serviceArray[i]);
newList.add(cfgLogInfoTemp);
}
}
}
}else{
logger.error("SystemHomePageService converCfgLogList error parm!");
}
return newList;
}
/*public String[] getServiceFormCfgLogList(List<CfgLogInfo> list, CfgLogInfo cfgLogInfoParm) {
String serviceArray[] = null;
String tempReturn = "";
String temp = ","+cfgLogInfoParm.getServiceCode()+"";
if(list!=null){
StringBuffer tempS = new StringBuffer();
for (CfgLogInfo cfgLogInfo:list) {
}
}
return serviceArray;
}*/
/*public List<CfgLogInfo> converCfgLogList(List<CfgLogInfo> list, Date startTime, Date endTime) {
List<CfgLogInfo> newList = new LinkedList<>();
long startTimes = (startTime.getTime() + 300000);
long endTimes = endTime.getTime();
@@ -180,7 +296,7 @@ public class SystemHomePageService {
}
}
return newList;
}
}*/
public List<NtcAreaHomeReport> converNtcAreaHomeList(List<NtcAreaHomeReport> list, Date startTime, Date endTime) {
final String area1 = "阿斯塔纳";
@@ -210,6 +326,9 @@ public class SystemHomePageService {
ntcAreaHomeReportArea2.setEntranceId(2);
ntcAreaHomeReportArea1.setArea(area1);
ntcAreaHomeReportArea2.setArea(area2);
if(sums1==0){
}
ntcAreaHomeReportArea1.setSum(sums1);
ntcAreaHomeReportArea2.setSum(sums2);
ntcAreaHomeReportArea1.setReportTime(new Date(startTimes));