diff --git a/src/main/java/com/nis/domain/restful/NtcRadiusReport.java b/src/main/java/com/nis/domain/restful/NtcRadiusReport.java new file mode 100644 index 0000000..9eeb38d --- /dev/null +++ b/src/main/java/com/nis/domain/restful/NtcRadiusReport.java @@ -0,0 +1,136 @@ +package com.nis.domain.restful; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.wordnik.swagger.annotations.ApiModelProperty; + +public class NtcRadiusReport implements Serializable{ + + private static final long serialVersionUID = 7635016645942704971L; + @JsonInclude(value = Include.NON_NULL) + @ApiModelProperty(value = "接入IP", required = true) + protected String nasIp; + @JsonInclude(value = Include.NON_NULL) + @ApiModelProperty(value = "用户名", required = true) + protected String account; + @JsonInclude(value = Include.NON_NULL) + @ApiModelProperty(value = "次数", required = true) + protected Long num; + @JsonInclude(value = Include.NON_NULL) + @ApiModelProperty(value = "统计时间", required = true) + protected String reportTime; + + /** + * 业务类型:1:用户名和接口IP列表 2:根据用户,统计IP变化趋势 3:IP根据,统计用户变化趋势 + */ + protected String searchBusinessType = "1"; + protected String searchReportStartTime; + protected String searchReportEndTime; + protected Long searchReportStartTimeCluster; + protected Long searchReportEndTimeCluster; + + protected String searchNasIp; + protected String searchAccount; + protected String groupType; + + public String getNasIp() { + return nasIp; + } + + public void setNasIp(String nasIp) { + this.nasIp = nasIp; + } + + public String getAccount() { + return account; + } + + public void setAccount(String account) { + this.account = account; + } + + public Long getNum() { + return num; + } + + public void setNum(Long num) { + this.num = num; + } + + public String getReportTime() { + return reportTime; + } + + public void setReportTime(String reportTime) { + this.reportTime = reportTime; + } + + public String getSearchBusinessType() { + return searchBusinessType; + } + @JsonIgnore + public void setSearchBusinessType(String searchBusinessType) { + this.searchBusinessType = searchBusinessType; + } + @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; + } + @JsonIgnore + public Long getSearchReportStartTimeCluster() { + return searchReportStartTimeCluster; + } + + public void setSearchReportStartTimeCluster( + Long searchReportStartTimeCluster) { + this.searchReportStartTimeCluster = searchReportStartTimeCluster; + } + @JsonIgnore + public Long getSearchReportEndTimeCluster() { + return searchReportEndTimeCluster; + } + + public void setSearchReportEndTimeCluster(Long searchReportEndTimeCluster) { + this.searchReportEndTimeCluster = searchReportEndTimeCluster; + } + @JsonIgnore + public String getSearchNasIp() { + return searchNasIp; + } + + public void setSearchNasIp(String searchNasIp) { + this.searchNasIp = searchNasIp; + } + @JsonIgnore + public String getSearchAccount() { + return searchAccount; + } + + public void setSearchAccount(String searchAccount) { + this.searchAccount = searchAccount; + } + @JsonIgnore + public String getGroupType() { + return groupType; + } + + public void setGroupType(String groupType) { + this.groupType = groupType; + } + +} diff --git a/src/main/java/com/nis/web/controller/restful/SingleDimensionReport.java b/src/main/java/com/nis/web/controller/restful/SingleDimensionReport.java index 382d2ea..41e9db2 100644 --- a/src/main/java/com/nis/web/controller/restful/SingleDimensionReport.java +++ b/src/main/java/com/nis/web/controller/restful/SingleDimensionReport.java @@ -1,12 +1,11 @@ package com.nis.web.controller.restful; -import java.text.SimpleDateFormat; +import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import com.zdjizhi.utils.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @@ -19,6 +18,7 @@ import com.nis.domain.restful.NtcDestipCountryReport; import com.nis.domain.restful.NtcEntranceReport; import com.nis.domain.restful.NtcLwhhReport; import com.nis.domain.restful.NtcPzReport; +import com.nis.domain.restful.NtcRadiusReport; import com.nis.domain.restful.NtcReportEntity; import com.nis.domain.restful.NtcServiceReport; import com.nis.domain.restful.NtcSrcipDomesticReport; @@ -32,6 +32,8 @@ import com.nis.web.service.ServicesRequestLogService; import com.nis.web.service.restful.NtcReportService; import com.wordnik.swagger.annotations.Api; import com.wordnik.swagger.annotations.ApiOperation; +import com.zdjizhi.utils.DateUtil; +import com.zdjizhi.utils.StringUtil; /** * @@ -355,6 +357,33 @@ public class SingleDimensionReport extends BaseRestController { 0); } + @RequestMapping(value = "/ntcRadiusReport", method = RequestMethod.GET) + @ApiOperation(value = "用户行为统计查询服务", httpMethod = "GET", notes = "用户行为统计查询服务,基于用户名或接入IP维度聚合") + public Map ntcRadiusReport(NtcRadiusReport ntcRadiusReport, Model model, + HttpServletRequest request, HttpServletResponse response) { + long start = System.currentTimeMillis(); + AuditLogThread saveLogThread = super.saveRequestLog(servicesRequestLogService, Constants.OPACTION_GET, request, + null); + List dataList = null; + try { + + + ntcReportService.checkNtcRadiusReportCondition(saveLogThread, start, ntcRadiusReport); + setGroupType(ntcRadiusReport); + dataList= ntcReportService.findNtcRadiusReport(ntcRadiusReport); + } catch (Exception e) { + saveLogThread.setExceptionInfo(e.getMessage() + " " + e.getCause()); + e.printStackTrace(); + logger.error(e.getMessage()); + if (!(e instanceof RestServiceException)) { + e = new RestServiceException(saveLogThread, System.currentTimeMillis() - start, "用户行为统计查询失败"); + } + throw ((RestServiceException) e); + } + + return serviceLogResponse(saveLogThread, System.currentTimeMillis() - start, request, "用户行为统计查询成功", dataList, + 0); + } /** * @Description: * @author (zdx) @@ -393,5 +422,25 @@ public class SingleDimensionReport extends BaseRestController { } } - + /** + * @Description: + * @author(zdx) + * @date 2018年10月31日 下午2:43:13 + * @param ntcRadiusReport + * @throws Exception + */ + public void setGroupType(NtcRadiusReport ntcRadiusReport) throws Exception { + String groupType =""; + Long times = DateUtil.convertStringToTimestamp(ntcRadiusReport.getSearchReportEndTime(), DateUtil.YYYY_MM_DD_HH24_MM_SS)-DateUtil.convertStringToTimestamp(ntcRadiusReport.getSearchReportStartTime(), DateUtil.YYYY_MM_DD_HH24_MM_SS); + if (times<=24*60*60L) { + groupType ="hour"; + }else{ + if (times<=30*24*60*60L) { + groupType ="day"; + }else { + groupType ="month"; + } + } + ntcRadiusReport.setGroupType(groupType); + } } diff --git a/src/main/java/com/nis/web/dao/NtcReportDao.java b/src/main/java/com/nis/web/dao/NtcReportDao.java index 4f95310..f7aee88 100644 --- a/src/main/java/com/nis/web/dao/NtcReportDao.java +++ b/src/main/java/com/nis/web/dao/NtcReportDao.java @@ -7,6 +7,7 @@ import com.nis.domain.restful.NtcDestipCountryReport; import com.nis.domain.restful.NtcEntranceReport; import com.nis.domain.restful.NtcLwhhReport; import com.nis.domain.restful.NtcPzReport; +import com.nis.domain.restful.NtcRadiusReport; import com.nis.domain.restful.NtcServiceReport; import com.nis.domain.restful.NtcSrcipDomesticReport; import com.nis.domain.restful.NtcTagReport; @@ -29,4 +30,7 @@ public interface NtcReportDao extends CrudDao { List findNtcSrcipDomesticReport(NtcSrcipDomesticReport pz); List findNtcDestipCountryReport(NtcDestipCountryReport pz); List findNtcEntranceReport(NtcEntranceReport pz); + List findAccounList(NtcRadiusReport pz); + List findNasIpList(NtcRadiusReport pz); + List findNtcRadiusReport(NtcRadiusReport pz); } diff --git a/src/main/java/com/nis/web/dao/NtcReportDao.xml b/src/main/java/com/nis/web/dao/NtcReportDao.xml index bc1d132..65b0ca3 100644 --- a/src/main/java/com/nis/web/dao/NtcReportDao.xml +++ b/src/main/java/com/nis/web/dao/NtcReportDao.xml @@ -50,6 +50,13 @@ + + + + + + + SERVICE,SUM,REPORT_TIME @@ -601,4 +608,113 @@ + + + + + \ No newline at end of file diff --git a/src/main/java/com/nis/web/service/BaseLogService.java b/src/main/java/com/nis/web/service/BaseLogService.java index bcd610b..8b16254 100644 --- a/src/main/java/com/nis/web/service/BaseLogService.java +++ b/src/main/java/com/nis/web/service/BaseLogService.java @@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired; import com.nis.domain.LogEntity; import com.nis.domain.Page; +import com.nis.domain.restful.NtcRadiusReport; import com.nis.domain.restful.NtcReportEntity; import com.nis.restful.RestBusinessCode; import com.nis.restful.RestServiceException; @@ -294,14 +295,6 @@ public abstract class BaseLogService { logger.error(e); throw new RestServiceException(thread, System.currentTimeMillis() - start, "searchReportEndTime参数错误"); } - if (!StringUtil.isBlank(entity.getSearchBusinessType())&&!StringUtil.isNumeric(entity.getSearchBusinessType())) { - logger.error(RestBusinessCode.param_formate_error.getErrorReason()+",searchBusinessType参数格式错误"); - thread.setExceptionInfo("searchBusinessType参数格式错误"); - throw new RestServiceException(thread, - System.currentTimeMillis() - start, - "searchBusinessType参数格式错误", - RestBusinessCode.param_formate_error.getValue()); - } logger.info("实时报表统计查询参数校验结束----" + System.currentTimeMillis()); @@ -339,6 +332,90 @@ public abstract class BaseLogService { } } } + /** + * @Description:验证用户行为日志统计查询条件 + * @author(zdx) + * @date 2018年10月31日 下午4:53:27 + * @param thread + * @param start + * @param entity + */ + public void checkNtcRadiusReportCondition(AuditLogThread thread, long start, NtcRadiusReport entity) { + logger.info("用户行为日志统计参数校验开始----" + System.currentTimeMillis()); + if (!StringUtil.isBlank(entity.getSearchBusinessType())&&!StringUtil.isNumeric(entity.getSearchBusinessType())) { + logger.error(RestBusinessCode.param_formate_error.getErrorReason()+",searchBusinessType参数格式错误"); + thread.setExceptionInfo("searchBusinessType参数格式错误"); + throw new RestServiceException(thread, + System.currentTimeMillis() - start, + "searchBusinessType参数格式错误", + RestBusinessCode.param_formate_error.getValue()); + } + + int timeCount = 0; + try { + if (!StringUtil.isBlank(entity.getSearchReportStartTime())) { + sdf.parse(entity.getSearchReportStartTime()); + timeCount++; + } + } catch (ParseException e) { + thread.setExceptionInfo(e.getMessage() + " " + e.getCause()); + logger.error(e); + throw new RestServiceException(thread, System.currentTimeMillis() - start, "searchReportStartTime参数格式错误", + RestBusinessCode.param_formate_error.getValue()); + } catch (Exception e) { + thread.setExceptionInfo(e.getMessage() + " " + e.getCause()); + logger.error(e); + throw new RestServiceException(thread, System.currentTimeMillis() - start, "searchReportStartTime参数错误"); + } + + try { + if (!StringUtil.isBlank(entity.getSearchReportEndTime())) { + sdf.parse(entity.getSearchReportEndTime()); + timeCount++; + } + } catch (ParseException e) { + thread.setExceptionInfo(e.getMessage() + " " + e.getCause()); + logger.error(e); + throw new RestServiceException(thread, System.currentTimeMillis() - start, "searchReportEndTime参数格式错误", + RestBusinessCode.param_formate_error.getValue()); + } catch (Exception e) { + thread.setExceptionInfo(e.getMessage() + " " + e.getCause()); + logger.error(e); + throw new RestServiceException(thread, System.currentTimeMillis() - start, "searchReportEndTime参数错误"); + } + if (timeCount!=2) { + logger.error(RestBusinessCode.config_integrity_error.getErrorReason()+",searchReportStartTime和searchReportEndTime参数必须同时填写"); + thread.setExceptionInfo("searchReportStartTime和searchReportEndTime参数必须同时填写"); + throw new RestServiceException(thread, + System.currentTimeMillis() - start, + "searchReportStartTime和searchReportEndTime参数必须同时填写", + RestBusinessCode.config_integrity_error.getValue()); + } + + + //根据用户查看IP趋势时(searchBusinessType=2),用户名必需填写 + if ("2".equals(entity.getSearchBusinessType())&&StringUtil.isEmpty(entity.getSearchAccount())) { + logger.error(RestBusinessCode.config_integrity_error.getErrorReason()+",searchBusinessType=2时searchAccount参数必须填写"); + thread.setExceptionInfo("searchBusinessType=2时searchAccount参数必须填写"); + throw new RestServiceException(thread, + System.currentTimeMillis() - start, + "searchBusinessType=2时searchAccount参数必须填写", + RestBusinessCode.config_integrity_error.getValue()); + } + + //根据用户查看IP趋势时(searchBusinessType=3),用户名必需填写 + if ("3".equals(entity.getSearchBusinessType())&&StringUtil.isEmpty(entity.getSearchNasIp())) { + logger.error(RestBusinessCode.config_integrity_error.getErrorReason()+",searchBusinessType=3时searchNasIp参数必须填写"); + thread.setExceptionInfo("searchBusinessType=3时searchNasIp参数必须填写"); + throw new RestServiceException(thread, + System.currentTimeMillis() - start, + "searchBusinessType=3时searchNasIp参数必须填写", + RestBusinessCode.config_integrity_error.getValue()); + } + + logger.info("用户行为日志统计参数校验结束----" + System.currentTimeMillis()); + + } /** * diff --git a/src/main/java/com/nis/web/service/restful/NtcReportService.java b/src/main/java/com/nis/web/service/restful/NtcReportService.java index fe1bc62..f957a9c 100644 --- a/src/main/java/com/nis/web/service/restful/NtcReportService.java +++ b/src/main/java/com/nis/web/service/restful/NtcReportService.java @@ -14,6 +14,7 @@ import com.nis.domain.restful.NtcDestipCountryReport; import com.nis.domain.restful.NtcEntranceReport; import com.nis.domain.restful.NtcLwhhReport; import com.nis.domain.restful.NtcPzReport; +import com.nis.domain.restful.NtcRadiusReport; import com.nis.domain.restful.NtcServiceReport; import com.nis.domain.restful.NtcSrcipDomesticReport; import com.nis.domain.restful.NtcTagReport; @@ -102,4 +103,25 @@ public class NtcReportService extends BaseLogService { page.setList(dao.findNtcEntranceReport(entity)); return page; } + + + + public List findNtcRadiusReport(NtcRadiusReport entity) throws Exception { + List resultList = null; + + if ("1".equals(entity.getSearchBusinessType())) { + resultList = new ArrayList(); + Map> restMap = new HashMap>(); + List accountList =dao.findAccounList(entity); + restMap.put("accountList", accountList); + List nasIpList =dao.findNasIpList(entity); + restMap.put("nasIpList", nasIpList); + resultList.add(restMap); + }else{ + resultList = dao.findNtcRadiusReport(entity); + } + + return resultList; + + } }