1.代客下单相关接口
This commit is contained in:
@@ -0,0 +1,201 @@
|
||||
package com.chaozhanggui.system.cashierservice.aop;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.text.StrFormatter;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.chaozhanggui.system.cashierservice.annotation.MyLog;
|
||||
import com.chaozhanggui.system.cashierservice.bean.GetKeyWith;
|
||||
import lombok.extern.log4j.Log4j2;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Before;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.aspectj.lang.reflect.MethodSignature;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
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 java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
@Aspect
|
||||
@Order
|
||||
@Component
|
||||
@Log4j2
|
||||
public class LogAop {
|
||||
|
||||
|
||||
@Pointcut("@annotation(com.chaozhanggui.system.cashierservice.annotation.MyLog)")
|
||||
private void getLogPointCut() {
|
||||
}
|
||||
|
||||
private String getRequestBodyInfo(HttpServletRequest request) {
|
||||
try {
|
||||
//利用InputStreamReader将字节流转换为字符流
|
||||
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()));
|
||||
String string;
|
||||
StringBuilder stringBuffer=new StringBuilder();
|
||||
//读取字符流的字符拼接在stringBuffer,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类
|
||||
while((string=bufferedReader.readLine())!=null){
|
||||
stringBuffer.append(string);
|
||||
}
|
||||
return stringBuffer.toString();
|
||||
}catch (Exception e) {
|
||||
log.error(e);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
@Async
|
||||
public void writeLog(String remoteAddr, String url, MyLog logAnnotation, Map<String, String[]> parameterMap, String bodyInfo, Object resp, long duration) {
|
||||
if (!logAnnotation.write()) return;
|
||||
// 系统操作日志, 异步事件
|
||||
String keyVal = null;
|
||||
JSONObject jsonObject = JSON.parseObject(bodyInfo);
|
||||
if (logAnnotation.keyName() != null && jsonObject != null) {
|
||||
if (GetKeyWith.WITH_POST.equals(logAnnotation.getKeyWith())) {
|
||||
keyVal = jsonObject.getString(logAnnotation.keyName());
|
||||
}else if (GetKeyWith.WITH_GET.equals(logAnnotation.getKeyWith())) {
|
||||
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
|
||||
if (entry.getKey().equals(logAnnotation.keyName())) {
|
||||
keyVal = entry.getValue()[0];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// SystemOperationLog operationLog = new SystemOperationLog();
|
||||
// operationLog.setMsg(logAnnotation.tag().getValue() + " " + logAnnotation.value())
|
||||
// .setKeyValue(keyVal)
|
||||
// .setKeyName(logAnnotation.keyName())
|
||||
// .setState(logAnnotation.operationLogstate())
|
||||
// .setType(logAnnotation.operationLogType())
|
||||
// .setRespData(resp)
|
||||
// .setDuration(duration)
|
||||
// .setIp(remoteAddr)
|
||||
// .setUrl(url)
|
||||
// .setReqData(jsonObject);
|
||||
// Utils.publishEvent(operationLog, OperationLogEvent.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 配置环绕通知,使用在方法logPointcut()上注册的切入点
|
||||
*
|
||||
* @param joinPoint join point for advice
|
||||
*/
|
||||
@Around("getLogPointCut()")
|
||||
public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {
|
||||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||
String logInfo = "\033[34m请求地址: {}, 请求ip: {}, 请求方式: {}, GET参数: {}, POST参数: {}\033[0m";
|
||||
String logStr = "";
|
||||
String bodyInfo = "";
|
||||
|
||||
Map<String, String[]> parameterMap = new HashMap<>();
|
||||
HttpServletRequest request = null;
|
||||
String remoteAddr = "";
|
||||
if (attributes != null) {
|
||||
request = attributes.getRequest();
|
||||
if (request.getHeader("X-Forwarded-For") != null) {
|
||||
remoteAddr = request.getHeader("X-Forwarded-For").split(",")[0];
|
||||
} else {
|
||||
remoteAddr = request.getRemoteAddr();
|
||||
}
|
||||
parameterMap = request.getParameterMap();
|
||||
bodyInfo = getRequestBodyInfo(request);
|
||||
logStr = StrFormatter.format(logInfo,
|
||||
request.getRequestURI(), remoteAddr, request.getMethod(), request.getQueryString(), bodyInfo);
|
||||
log.info(logStr);
|
||||
}
|
||||
|
||||
MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
|
||||
Method method = methodSignature.getMethod();
|
||||
MyLog logAnnotation = method.getAnnotation(MyLog.class);
|
||||
|
||||
|
||||
// 开始时间
|
||||
long startTime = DateUtil.current(false);
|
||||
Object result = null;
|
||||
Exception error = null;
|
||||
try {
|
||||
result = joinPoint.proceed();
|
||||
return result;
|
||||
}catch (Exception e) {
|
||||
error = e;
|
||||
throw e;
|
||||
}
|
||||
finally {
|
||||
long endTime = DateUtil.current(false);
|
||||
|
||||
writeLog(remoteAddr, request != null ? request.getRequestURI() : "", logAnnotation, parameterMap, bodyInfo, result == null ? Objects.requireNonNull(error).getCause() + error.getMessage(): result, endTime - startTime);
|
||||
|
||||
// 异步记录日志
|
||||
if (logAnnotation.showBody()) {
|
||||
logInfo = "\033[32;4m包名: {}, 方法名: {}, 描述: {}, 操作类型: {}, 执行结果: {}, 执行时间: {}ms\033[0m";
|
||||
}else {
|
||||
logInfo = "\033[32;4m包名: {}, 方法名: {}, 描述: {}, 操作类型: {}, 执行时间: {}ms\033[0m";
|
||||
}
|
||||
switch (logAnnotation.type()) {
|
||||
case INFO:
|
||||
if (logAnnotation.showBody()) {
|
||||
log.info(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.value(), logAnnotation.actionType().getType(), result, endTime - startTime);
|
||||
}else {
|
||||
log.info(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.tag() + logAnnotation.value(), logAnnotation.actionType().getType(), endTime - startTime);
|
||||
}
|
||||
|
||||
break;
|
||||
case ERROR:
|
||||
if (logAnnotation.showBody()) {
|
||||
log.error(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.value(), logAnnotation.actionType().getType(), result, endTime - startTime);
|
||||
}else {
|
||||
log.error(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.tag() + logAnnotation.value(), logAnnotation.actionType().getType(), endTime - startTime);
|
||||
}
|
||||
break;
|
||||
case WARN:
|
||||
if (logAnnotation.showBody()) {
|
||||
log.warn(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.value(), logAnnotation.actionType().getType(), result, endTime - startTime);
|
||||
}else {
|
||||
log.warn(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.tag() + logAnnotation.value(), logAnnotation.actionType().getType(), endTime - startTime);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (logAnnotation.showBody()) {
|
||||
log.debug(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.value(), logAnnotation.actionType().getType(), result, endTime - startTime);
|
||||
}else {
|
||||
log.debug(logInfo,
|
||||
joinPoint.getTarget().getClass().getPackage().getName(),
|
||||
method.getName(), logAnnotation.tag() + logAnnotation.value(), logAnnotation.actionType().getType(), endTime - startTime);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user