From 1db50ecdccd7a981888ee33c65e31b7f2f9f4733 Mon Sep 17 00:00:00 2001
From: MercuryZ <zdmisif@126.com>
Date: 星期四, 31 三月 2022 14:09:08 +0800
Subject: [PATCH] fix 操作日志

---
 sandu-common/src/main/java/com/sandu/common/log/LogService.java |   59 +++++++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 45 insertions(+), 14 deletions(-)

diff --git a/sandu-common/src/main/java/com/sandu/common/log/LogService.java b/sandu-common/src/main/java/com/sandu/common/log/LogService.java
index 2675d54..49b7901 100644
--- a/sandu-common/src/main/java/com/sandu/common/log/LogService.java
+++ b/sandu-common/src/main/java/com/sandu/common/log/LogService.java
@@ -1,27 +1,58 @@
-
 package com.sandu.common.log;
 
+import cn.hutool.extra.servlet.ServletUtil;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentInfo;
+import cn.hutool.http.useragent.UserAgentUtil;
+import com.sandu.common.security.SecurityUtils;
+import com.sandu.common.service.impl.BaseServiceImpl;
 import org.aspectj.lang.ProceedingJoinPoint;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.transaction.annotation.Transactional;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Method;
+import java.util.Optional;
 
 /**
  * @author hupeng
  * @date 2018-11-24
  */
-public interface LogService {
+@Service
+public class LogService extends BaseServiceImpl<LogDao, AccessLog> implements LogServiceImpl {
 
-    /**
-     * 淇濆瓨鏃ュ織鏁版嵁
-     *
-     * @param request      /
-     * @param joinPoint    /
-     * @param operationLog /
-     */
-    @Async
-    @Transactional(rollbackFor = Exception.class)
-    void saveOperation(HttpServletRequest request, ProceedingJoinPoint joinPoint, AccessLog operationLog);
+    @Override
+    public void saveOperation(HttpServletRequest request, ProceedingJoinPoint joinPoint, AccessLog accessLog) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+        Log aopLog = method.getAnnotation(Log.class);
+
+        // 鏂规硶璺緞
+        String methodName = joinPoint.getTarget().getClass().getName() + "." + signature.getName() + "()";
+
+        StringBuilder params = new StringBuilder("{");
+        //鍙傛暟鍊�
+        Object[] argValues = joinPoint.getArgs();
+        //鍙傛暟鍚嶇О
+        String[] argNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames();
+        if (argValues != null) {
+            for (int i = 0; i < argValues.length; i++) {
+                params.append(" ").append(argNames[i]).append(": ").append(argValues[i]);
+            }
+        }
+        accessLog.setDescription(aopLog.value());
+        //绫诲瀷 0-鍚庡彴 1-鍓嶅彴
+        accessLog.setType(aopLog.type());
+        accessLog.setUid(SecurityUtils.getUserId());
+
+        UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
+        accessLog.setBrowser(Optional.ofNullable(userAgent).map(UserAgent::getBrowser).map(UserAgentInfo::getName).orElse(""));
+        accessLog.setRequestIp(ServletUtil.getClientIP(request));
+
+        accessLog.setMethod(methodName);
+        accessLog.setUsername(SecurityUtils.getUsername());
+        accessLog.setParams(params.toString() + " }");
+        this.save(accessLog);
+    }
 
 }

--
Gitblit v1.9.3