summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/nis/domain/restful/dashboard/TrafficEntity.java38
-rw-r--r--src/main/java/com/nis/domain/restful/dashboard/TrafficTransStatisticCK.java82
-rw-r--r--src/main/java/com/nis/util/DateUtils.java170
-rw-r--r--src/main/java/com/nis/web/controller/restful/DashboardServiceController.java50
-rw-r--r--src/main/java/com/nis/web/dao/TrafficReportDao.java7
-rw-r--r--src/main/java/com/nis/web/dao/TrafficReportDao.xml120
-rw-r--r--src/main/java/com/nis/web/service/restful/DashboardService.java20
-rw-r--r--src/main/java/com/nis/web/service/restful/TrafficReportService.java133
8 files changed, 615 insertions, 5 deletions
diff --git a/src/main/java/com/nis/domain/restful/dashboard/TrafficEntity.java b/src/main/java/com/nis/domain/restful/dashboard/TrafficEntity.java
new file mode 100644
index 0000000..407b65f
--- /dev/null
+++ b/src/main/java/com/nis/domain/restful/dashboard/TrafficEntity.java
@@ -0,0 +1,38 @@
+package com.nis.domain.restful.dashboard;
+
+import java.io.Serializable;
+
+public abstract class TrafficEntity<T> implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ protected String beginDate;// 开始时间
+ protected String endDate;// 结束时间
+ protected Integer searchBusinessType = 1;// 1:五分钟,2:小时,3:天,4:月,5:年
+
+ public String getBeginDate() {
+ return beginDate;
+ }
+
+ public void setBeginDate(String beginDate) {
+ this.beginDate = beginDate;
+ }
+
+ public String getEndDate() {
+ return endDate;
+ }
+
+ public void setEndDate(String endDate) {
+ this.endDate = endDate;
+ }
+
+ public Integer getSearchBusinessType() {
+ return searchBusinessType;
+ }
+
+ public void setSearchBusinessType(Integer searchBusinessType) {
+ this.searchBusinessType = searchBusinessType;
+ }
+
+}
diff --git a/src/main/java/com/nis/domain/restful/dashboard/TrafficTransStatisticCK.java b/src/main/java/com/nis/domain/restful/dashboard/TrafficTransStatisticCK.java
new file mode 100644
index 0000000..3ef1110
--- /dev/null
+++ b/src/main/java/com/nis/domain/restful/dashboard/TrafficTransStatisticCK.java
@@ -0,0 +1,82 @@
+package com.nis.domain.restful.dashboard;
+
+import java.util.Date;
+/**
+ * 从clickhouse中查询流量统计相关结果映射的bean
+ * @author RenKaiGe
+ *
+ */
+public class TrafficTransStatisticCK extends TrafficEntity<TrafficTransStatisticCK> {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private Integer addrType;
+ private Integer transType;
+ private Integer entranceId;
+ private Date statTime;
+ private Double num;
+
+ private Integer searchDirection;//方向
+ private Integer searchQuotaType;//1:bps,2:pps,3:linknum
+
+ public Integer getAddrType() {
+ return addrType;
+ }
+
+ public void setAddrType(Integer addrType) {
+ this.addrType = addrType;
+ }
+
+ public Integer getTransType() {
+ return transType;
+ }
+
+ public void setTransType(Integer transType) {
+ this.transType = transType;
+ }
+
+ public Integer getEntranceId() {
+ return entranceId;
+ }
+
+ public void setEntranceId(Integer entranceId) {
+ this.entranceId = entranceId;
+ }
+
+ public Date getStatTime() {
+ return statTime;
+ }
+
+ public void setStatTime(Date statTime) {
+ this.statTime = statTime;
+ }
+
+ public Double getNum() {
+ return num;
+ }
+
+ public void setNum(Double num) {
+ this.num = num;
+ }
+
+ public Integer getSearchDirection() {
+ return searchDirection;
+ }
+
+ public void setSearchDirection(Integer searchDirection) {
+ this.searchDirection = searchDirection;
+ }
+
+ public Integer getSearchQuotaType() {
+ return searchQuotaType;
+ }
+
+ public void setSearchQuotaType(Integer searchQuotaType) {
+ this.searchQuotaType = searchQuotaType;
+ }
+
+
+
+}
diff --git a/src/main/java/com/nis/util/DateUtils.java b/src/main/java/com/nis/util/DateUtils.java
index c7ecdd4..4dd3e58 100644
--- a/src/main/java/com/nis/util/DateUtils.java
+++ b/src/main/java/com/nis/util/DateUtils.java
@@ -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();
+ }
+
+
+
}
diff --git a/src/main/java/com/nis/web/controller/restful/DashboardServiceController.java b/src/main/java/com/nis/web/controller/restful/DashboardServiceController.java
index 83ce616..d6f0000 100644
--- a/src/main/java/com/nis/web/controller/restful/DashboardServiceController.java
+++ b/src/main/java/com/nis/web/controller/restful/DashboardServiceController.java
@@ -195,7 +195,7 @@ public class DashboardServiceController extends BaseRestController {
}
return serviceLogResponse(auditLogThread, System.currentTimeMillis() - start, request, "带宽实时统计数据检索成功", list, 0);
}
-
+
/**
* 根据ip46,协议tcp,udp查询带宽
*/
@@ -215,6 +215,53 @@ public class DashboardServiceController extends BaseRestController {
cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) - 1);
beginDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.getTime());
}
+ CustomerContextHolder.setCustomerType(CustomerContextHolder.DATA_SOURCE_B);
+ resultMap = dashboardService.getBandwidthTransByQuoTaType(beginDate, endDate, searchQuotaType,
+ searchDirection);
+ } catch (Exception e) {
+ auditLogThread.setExceptionInfo("带宽实时统计数据检索失败:" + e.getMessage());
+ logger.error("带宽实时统计数据检索失败:" + ExceptionUtil.getExceptionMsg(e));
+ if (e instanceof RestServiceException) {
+ throw new RestServiceException(auditLogThread, System.currentTimeMillis() - start,
+ "带宽实时统计数据检索失败:" + e.getMessage(), ((RestServiceException) e).getErrorCode());
+ } else if (e instanceof ServiceRuntimeException) {
+ throw new ServiceRuntimeException(auditLogThread, System.currentTimeMillis() - start,
+ "带宽实时统计数据检索失败:" + e.getMessage(), ((ServiceRuntimeException) e).getErrorCode());
+ } else {
+ throw new ServiceRuntimeException(auditLogThread, System.currentTimeMillis() - start,
+ "带宽实时统计数据检索失败:" + e.getMessage(), RestBusinessCode.service_runtime_error.getValue());
+ }
+ } finally {
+ CustomerContextHolder.clearCustomerType();
+ }
+ return serviceLogResponse(auditLogThread, System.currentTimeMillis() - start, request, "带宽实时统计数据检索成功",
+ resultMap, 0);
+ }
+
+
+
+
+
+
+ /**
+ * 根据ip46,协议tcp,udp查询带宽
+ */
+ @RequestMapping(value = "trafficBandwidthTransThreeOld", method = RequestMethod.GET)
+ @ApiOperation(value = "带宽根据ip46,协议tcp,udp查询详情", httpMethod = "GET", notes = "对应带宽根据IPv4,6,协议tcp,udp统计数据显示")
+ public Map<String, ?> trafficBandwidthTransThreeOld(String beginDate, String endDate, String searchQuotaType,
+ Model model, Integer searchDirection, HttpServletRequest request, HttpServletResponse response) {
+ long start = System.currentTimeMillis();
+ AuditLogThread auditLogThread = super.saveRequestLog(servicesRequestLogService, Constants.OPACTION_GET, request,
+ null);
+ Map resultMap = new HashMap();
+ try {
+ if (StringUtils.isEmpty(beginDate) && StringUtils.isEmpty(endDate)) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(new Date());
+ endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.getTime());// 获取到完整的时间
+ cal.set(Calendar.HOUR_OF_DAY, cal.get(Calendar.HOUR_OF_DAY) - 1);
+ beginDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(cal.getTime());
+ }
resultMap = dashboardService.getBandwidthTransEntrance(beginDate, endDate, searchQuotaType,
searchDirection);
@@ -235,6 +282,7 @@ public class DashboardServiceController extends BaseRestController {
return serviceLogResponse(auditLogThread, System.currentTimeMillis() - start, request, "带宽实时统计数据检索成功",
resultMap, 0);
}
+
/**
* 流量统计活跃端口统计
diff --git a/src/main/java/com/nis/web/dao/TrafficReportDao.java b/src/main/java/com/nis/web/dao/TrafficReportDao.java
index 939ee7b..ac7bc4e 100644
--- a/src/main/java/com/nis/web/dao/TrafficReportDao.java
+++ b/src/main/java/com/nis/web/dao/TrafficReportDao.java
@@ -19,6 +19,7 @@ import com.nis.domain.restful.NtcTagReport;
import com.nis.domain.restful.NtcURLIpReport;
import com.nis.domain.restful.dashboard.NtcTotalReport;
import com.nis.domain.restful.dashboard.TrafficTransStatistic;
+import com.nis.domain.restful.dashboard.TrafficTransStatisticCK;
/**
*
@@ -60,7 +61,11 @@ public interface TrafficReportDao extends CrudDao {
void truncateNtcIpRange();
-
+ List<TrafficTransStatisticCK> getBandwidthBpsFromCk(TrafficTransStatisticCK trafficTransStatisticCK);
+
+ List<TrafficTransStatisticCK> getBandwidthPpsFromCk(TrafficTransStatisticCK trafficTransStatisticCK);
+
+ List<TrafficTransStatisticCK> getBandwidthLinkNumFromCk(TrafficTransStatisticCK trafficTransStatisticCK);
NtcTotalReport getMaxReportTime();
Map getMaxStatTime();
diff --git a/src/main/java/com/nis/web/dao/TrafficReportDao.xml b/src/main/java/com/nis/web/dao/TrafficReportDao.xml
index 2934f1a..db9ea07 100644
--- a/src/main/java/com/nis/web/dao/TrafficReportDao.xml
+++ b/src/main/java/com/nis/web/dao/TrafficReportDao.xml
@@ -103,6 +103,18 @@
<result column="desc_detail" jdbcType="VARCHAR" property="desc" />
</resultMap>
+ <resultMap id="TrafficTransStatisticCKResultMap"
+ type="com.nis.domain.restful.dashboard.TrafficTransStatisticCK">
+ <result column="addr_type" jdbcType="INTEGER"
+ property="addrType" />
+ <result column="trans_type" jdbcType="INTEGER"
+ property="transType" />
+ <result column="entrance_id" jdbcType="INTEGER"
+ property="entranceId" />
+ <result column="num" jdbcType="DOUBLE" property="num" />
+ <result column="stat_time" jdbcType="TIMESTAMP"
+ property="statTime" />
+ </resultMap>
<sql id="commonPorperty">
SERVICE,SUM,REPORT_TIME
@@ -987,4 +999,112 @@
and entrance_id=#{entranceId}
group by report_time order by report_time
</select>
+
+
+
+
+ <select id="getBandwidthBpsFromCk"
+ resultMap="TrafficTransStatisticCKResultMap">
+ select
+ (SUM(c2s_byte_len + s2c_byte_len)* 8)/ 300 / 1024 / 1024 / 1024 num,
+ toStartOfFiveMinute(stat_time) stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ from
+ ntc_network_traffic_stat
+ where
+ <![CDATA[stat_time>=#{beginDate} and stat_time<#{endDate} ]]>
+ <if test="searchDirection != null">
+ and direction=#{searchDirection}
+ </if>
+ and addr_type in('4',
+ '6')
+ and entrance_id in (1,
+ 2)
+ and trans_type in(6,
+ 17)
+ group by
+ stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ order by
+ stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ </select>
+
+
+
+
+<select id="getBandwidthPpsFromCk"
+ resultMap="TrafficTransStatisticCKResultMap">
+ select
+ SUM(c2s_pkt_num + s2c_pkt_num)/ 300 num,
+ toStartOfFiveMinute(stat_time) stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ from
+ ntc_network_traffic_stat
+ where
+ <![CDATA[stat_time>=#{beginDate} and stat_time<#{endDate} ]]>
+ <if test="searchDirection != null">
+ and direction=#{searchDirection}
+ </if>
+ and addr_type in('4',
+ '6')
+ and entrance_id in (1,
+ 2)
+ and trans_type in(6,
+ 17)
+ group by
+ stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ order by
+ stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ </select>
+
+
+
+<select id="getBandwidthLinkNumFromCk"
+ resultMap="TrafficTransStatisticCKResultMap">
+ select
+ SUM(link_num) num,
+ toStartOfFiveMinute(stat_time) stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ from
+ ntc_network_traffic_stat
+ where
+ <![CDATA[stat_time>=#{beginDate} and stat_time<#{endDate} ]]>
+ <if test="searchDirection != null">
+ and direction=#{searchDirection}
+ </if>
+ and addr_type in('4',
+ '6')
+ and entrance_id in (1,
+ 2)
+ and trans_type in(6,
+ 17)
+ group by
+ stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ order by
+ stat_time,
+ addr_type,
+ trans_type,
+ entrance_id
+ </select>
+
</mapper> \ No newline at end of file
diff --git a/src/main/java/com/nis/web/service/restful/DashboardService.java b/src/main/java/com/nis/web/service/restful/DashboardService.java
index c6dff6a..b3b5586 100644
--- a/src/main/java/com/nis/web/service/restful/DashboardService.java
+++ b/src/main/java/com/nis/web/service/restful/DashboardService.java
@@ -27,8 +27,8 @@ import com.nis.domain.restful.NtcEntranceReport;
import com.nis.domain.restful.dashboard.AppConnRecordStatistic;
import com.nis.domain.restful.dashboard.NtcTotalReport;
import com.nis.domain.restful.dashboard.SysDeviceInfo;
-import com.nis.domain.restful.dashboard.TrafficAppFocusStatistic;
import com.nis.domain.restful.dashboard.TrafficAppBpsStatistic;
+import com.nis.domain.restful.dashboard.TrafficAppFocusStatistic;
import com.nis.domain.restful.dashboard.TrafficAppPpsStatistic;
import com.nis.domain.restful.dashboard.TrafficAppStatistic;
import com.nis.domain.restful.dashboard.TrafficAsnStatistic;
@@ -37,6 +37,7 @@ import com.nis.domain.restful.dashboard.TrafficIpActiveStatistic;
import com.nis.domain.restful.dashboard.TrafficPortActiveStatistic;
import com.nis.domain.restful.dashboard.TrafficProtocolStatistic;
import com.nis.domain.restful.dashboard.TrafficTransStatistic;
+import com.nis.domain.restful.dashboard.TrafficTransStatisticCK;
import com.nis.domain.restful.dashboard.TrafficUaStatistic;
import com.nis.restful.RestBusinessCode;
import com.nis.restful.RestServiceException;
@@ -76,6 +77,8 @@ public class DashboardService extends BaseService {
public TrafficPortActiveStatisticDao trafficPortActiveStatisticDao;
@Autowired
private IspInfoDao ispInfoDao;
+ @Autowired
+ protected TrafficReportService trafficReportService;
// ip地址类型
private final String[] addrTypes = { "4", "6" };
// tcp udp
@@ -1300,6 +1303,21 @@ public class DashboardService extends BaseService {
}
return fieldType == null ? null : fieldType.split(",");
}
+ public Map<?, ?> getBandwidthTransByQuoTaType(String beginDate, String endDate, String searchQuotaType,
+ Integer searchDirection) {
+ TrafficTransStatisticCK trafficTransStatisticCK = new TrafficTransStatisticCK();
+ trafficTransStatisticCK.setSearchBusinessType(1);
+ trafficTransStatisticCK.setBeginDate(beginDate);
+ trafficTransStatisticCK.setEndDate(endDate);
+ if (searchQuotaType.toLowerCase().equals("gbps")) {
+ trafficTransStatisticCK.setSearchQuotaType(1);
+ } else if (searchQuotaType.toLowerCase().equals("pps")) {
+ trafficTransStatisticCK.setSearchQuotaType(2);
+ } else if (searchQuotaType.toLowerCase().equals("linknumber")) {
+ trafficTransStatisticCK.setSearchQuotaType(3);
+ }
+ return trafficReportService.getBandwidthTransByQuoTaType(trafficTransStatisticCK);
+ }
public Map<String, Map> getBandwidthTransEntrance(String beginDate, String endDate, String searchQuotaType,
Integer searchDirection) throws ParseException {
diff --git a/src/main/java/com/nis/web/service/restful/TrafficReportService.java b/src/main/java/com/nis/web/service/restful/TrafficReportService.java
index 437a320..1d0cf29 100644
--- a/src/main/java/com/nis/web/service/restful/TrafficReportService.java
+++ b/src/main/java/com/nis/web/service/restful/TrafficReportService.java
@@ -6,8 +6,11 @@ import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -15,8 +18,9 @@ import org.springframework.stereotype.Service;
import com.nis.domain.Page;
import com.nis.domain.restful.NtcRadiusReport;
import com.nis.domain.restful.dashboard.TrafficTransStatistic;
+import com.nis.domain.restful.dashboard.TrafficTransStatisticCK;
+import com.nis.util.DateUtils;
import com.nis.web.dao.TrafficReportDao;
-import com.nis.web.dao.dashboard.NtcTotalReportDao;
import com.nis.web.service.BaseLogService;
@Service
@@ -87,6 +91,133 @@ public class TrafficReportService extends BaseLogService {
return listMap;
}
+
+
+
+
+ /**
+ * 查询bps/pps/linnum在ip46,tcp,udp的统计数据
+ *
+ * @param beginDate
+ * @param endDate
+ * @param searchQuotaType bps,pps,linknum
+ * @param searchDirection
+ * @return
+ */
+ public Map<?, ?> getBandwidthTransByQuoTaType(TrafficTransStatisticCK trafficTransStatisticCK) {
+ List<TrafficTransStatisticCK> list = null;
+ List<Long> timeList = null;
+ Integer searchBusinessType = trafficTransStatisticCK.getSearchBusinessType();
+ if (searchBusinessType == 1) {
+ timeList = DateUtils.getTimeInterval(trafficTransStatisticCK.getBeginDate(),
+ trafficTransStatisticCK.getEndDate(), 0);
+ } else if (searchBusinessType == 2) {
+ timeList = DateUtils.getTimeInterval(trafficTransStatisticCK.getBeginDate(),
+ trafficTransStatisticCK.getEndDate(), 1);
+ } else if (searchBusinessType == 3) {
+ timeList = DateUtils.getTimeInterval(trafficTransStatisticCK.getBeginDate(),
+ trafficTransStatisticCK.getEndDate(), 2);
+ } else if (searchBusinessType == 4) {
+ timeList = DateUtils.getTimeInterval(trafficTransStatisticCK.getBeginDate(),
+ trafficTransStatisticCK.getEndDate(), 3);
+ } else if (searchBusinessType == 5) {
+ timeList = DateUtils.getTimeInterval(trafficTransStatisticCK.getBeginDate(),
+ trafficTransStatisticCK.getEndDate(), 4);
+ }
+ if (trafficTransStatisticCK.getSearchQuotaType() == 1) {
+ list = trafficReportDao.getBandwidthBpsFromCk(trafficTransStatisticCK);
+ } else if (trafficTransStatisticCK.getSearchQuotaType() == 2) {
+ list = trafficReportDao.getBandwidthPpsFromCk(trafficTransStatisticCK);
+ } else if (trafficTransStatisticCK.getSearchQuotaType() == 3) {
+ list = trafficReportDao.getBandwidthLinkNumFromCk(trafficTransStatisticCK);
+ }
+ Map<?, ?> map = convertData2List(list, timeList, searchBusinessType);
+ return map;
+
+ }
+
+ private Map<?, ?> convertData2List(List<TrafficTransStatisticCK> list, List<Long> timeList,
+ Integer searchBusinessType) {
+ Map<String, List<TrafficTransStatisticCK>> mapList = new HashMap<>();
+ Map<String, Map<String, Object>> map = new HashMap<>();
+ if (list != null) {
+ Set<String> dataKey = new HashSet<>();//无论有没有数据都要组装这几个json,界面需要这几个数据
+ dataKey.add("ipv4Type1");//ip只有4,6两种,协议只有tcp和udp,这里都写死了
+ dataKey.add("ipv4Type2");
+ dataKey.add("ipv6Type1");
+ dataKey.add("ipv6Type2");
+
+ dataKey.add("trans6Type1");
+ dataKey.add("trans6Type2");
+ dataKey.add("trans17Type1");
+ dataKey.add("trans17Type2");
+
+ for (TrafficTransStatisticCK trafficTransStatisticCK : list) {
+ Integer entranceId = trafficTransStatisticCK.getEntranceId();
+ Integer addrType = trafficTransStatisticCK.getAddrType();
+ Integer transType = trafficTransStatisticCK.getTransType();
+ String addrAndEntrKey = "ipv" + addrType + "Type" + entranceId;
+ String transAndEntrKey = "trans" + transType + "Type" + entranceId;
+
+ if (mapList.containsKey(addrAndEntrKey)) {
+ mapList.get(addrAndEntrKey).add(trafficTransStatisticCK);
+ } else {
+ List<TrafficTransStatisticCK> transList = new ArrayList<>();
+ transList.add(trafficTransStatisticCK);
+ mapList.put(addrAndEntrKey, transList);
+ }
+
+ if (mapList.containsKey(transAndEntrKey)) {
+ mapList.get(transAndEntrKey).add(trafficTransStatisticCK);
+ } else {
+ List<TrafficTransStatisticCK> transList = new ArrayList<>();
+ transList.add(trafficTransStatisticCK);
+ mapList.put(transAndEntrKey, transList);
+ }
+ }
+ for (String key : dataKey) {//无论这8种key是否都查询出了数据,都要给界面提供每个时间点的数据
+ Map<Long, Long> timeAndNum = new TreeMap<>();
+ Long count = 0l;
+ for (Long time : timeList) {
+ long num = 0l;
+ List<TrafficTransStatisticCK> list2 = mapList.get(key);
+ if (list2 != null && list2.size() > 0) {
+ for (TrafficTransStatisticCK trafficTransStatisticCK : list2) {
+ long transTime = trafficTransStatisticCK.getStatTime().getTime();
+ if (searchBusinessType == 1) {// 五分钟不需要转换了,时间已经是五分钟的格式了
+// transTime = DateUtils.getTimeByType(transTime, 0);//
+ } else if (searchBusinessType == 2) {
+ transTime = DateUtils.getTimeByType(transTime, 1);
+ } else if (searchBusinessType == 3) {
+ transTime = DateUtils.getTimeByType(transTime, 2);
+ } else if (searchBusinessType == 4) {
+ transTime = DateUtils.getTimeByType(transTime, 3);
+ } else if (searchBusinessType == 5) {
+ transTime = DateUtils.getTimeByType(transTime, 4);
+ }
+ if (transTime == time) {
+ num += trafficTransStatisticCK.getNum().longValue();
+ count += trafficTransStatisticCK.getNum().longValue();
+ }
+ }
+ }
+ timeAndNum.put(time, num);
+ }
+ Map<String, Object> resultMap = new HashMap<>();
+ List<List<Long>> restList = new ArrayList<List<Long>>();
+ for (Long timeKey : timeAndNum.keySet()) {
+ List<Long> dataList = new ArrayList<>();
+ dataList.add(timeKey);
+ dataList.add(timeAndNum.get(timeKey));
+ restList.add(dataList);
+ }
+ resultMap.put("result", restList);
+ resultMap.put("sum", count);
+ map.put(key, resultMap);
+ }
+ }
+ return map;
+ }
/**
* 根据ip46,协议tcp,udp查询带宽