package com.sitech.crmpd.annotation;
import java.lang.annotation.*;
/**
* @oauth: qiangSW
* @date: 2019/11/26 10:31
* @description:
* @doc:
*/
@Target({ElementType.METHOD,ElementType.PARAMETER})
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface SystemHttpLog {
}
package com.sitech.crmpd.annotation;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @oauth: qiangSW
* @date: 2019/11/26 10:34
* @description: com.sitech.crmpd.annotation
* @doc:
*/
@Slf4j
@Aspect
@Component
public class AopSystemHttpLog {
@Autowired
private ObjectMapper objectMapper;
/**
* 系统日志
*/
@Pointcut("@annotation(com.sitech.crmpd.annotation.SystemHttpLog)")
public void controllerAspect() {
}
@Before(value = ("controllerAspect()"))
public void befor(JoinPoint joinPoint) {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
request.setAttribute("beforPointTime", LocalDateTime.now());
} catch (Exception e) {
log.error("aop日志注解异常:", e);
}
}
@AfterReturning(pointcut = ("controllerAspect()"), returning = "rt")
public void afterReturning(JoinPoint joinPoint, Object rt) {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String requestURI = request.getRequestURI();
LocalDateTime beforPointTime = (LocalDateTime) request.getAttribute("beforPointTime");
LocalDateTime afterReturnTime = LocalDateTime.now();
long TimeDifference = ChronoUnit.MILLIS.between(beforPointTime, afterReturnTime);
Object[] args = joinPoint.getArgs();
List<Object> response = Stream.of(args).filter(arg -> !(arg instanceof HttpServletRequest) && !(arg instanceof HttpServletResponse))
.collect(Collectors.toList());
log.info("##请求路径:[{}],请求开始时间[{}],请求结束时间[{}],花费时间[{}]毫秒##请求参数:{},##返回参数:{}", requestURI, beforPointTime,
afterReturnTime, TimeDifference, objectMapper.writeValueAsString(response), objectMapper.writeValueAsString(rt));
} catch (Exception e) {
log.error("aop日志注解异常:", e);
}
}
}
package com.sitech.crmpd.controller;
@RestController
@RequestMapping("/mkt")
public class ViewTaskController {
@Autowired
private ViewTaskService viewTaskService;
/**
* 项目经理查看营销信息子视图-客户接触成功
*
* @param custId
* @param viewItemCat
*/
@GetMapping("/custViewData")
@SystemHttpLog
public CustViewDataDTO custViewData(@RequestParam(name = "custId") String custId,
@RequestParam(name = "viewItemCat") String viewItemCat) {
return viewTaskService.custViewData(custId, viewItemCat);
}
}