소스 검색

miniapp、admin系统日志分离,后期记录内容差异化。

skyline 2 년 전
부모
커밋
d2ac2f1f19

+ 94 - 0
admin/src/main/java/com/kym/admin/aspect/AppLogAspect.java

@@ -0,0 +1,94 @@
+package com.kym.admin.aspect;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.google.gson.Gson;
+import com.kym.common.annotation.ApiLog;
+import com.kym.common.utils.HttpContextUtils;
+import com.kym.common.utils.IDGenerator;
+import com.kym.common.utils.IPUtils;
+import com.kym.entity.miniapp.AppLog;
+import com.kym.service.miniapp.AppLogService;
+import jakarta.servlet.http.HttpServletRequest;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+
+/**
+ * APP日志,切面处理类
+ *
+ * @author skyline
+ */
+@Aspect
+@Component
+public class AppLogAspect {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AppLogAspect.class);
+    private final AppLogService appLogService;
+    IDGenerator idGenerator;
+
+    AppLogAspect(AppLogService appLogService) {
+        this.idGenerator = new IDGenerator();
+        this.appLogService = appLogService;
+    }
+
+    /**
+     * 切点
+     */
+    @Pointcut("@annotation(com.kym.common.annotation.ApiLog)")
+    public void logPointCut() {
+    }
+
+    @Around("logPointCut()")
+    Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
+        var startTime = System.currentTimeMillis();
+        Object result = joinPoint.proceed();
+        var executeTime = System.currentTimeMillis() - startTime;
+        saveApiLog(joinPoint, executeTime);
+        return result;
+    }
+
+
+    private void saveApiLog(ProceedingJoinPoint joinPoint, long executeTime) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        var appLog = new AppLog();
+        appLog.setId(idGenerator.nextId());
+        var apiLog = method.getAnnotation(ApiLog.class);
+        if (apiLog != null) {
+            //注解上的描述
+            appLog.setOperation(apiLog.value());
+        }
+
+        //请求的方法名
+        String className = joinPoint.getTarget().getClass().getName();
+        String methodName = signature.getName();
+        appLog.setMethod(className + "." + methodName + "()");
+        //请求的参数
+        Object[] args = joinPoint.getArgs();
+        String params = new Gson().toJson(args);
+        appLog.setRequestParam(params);
+        //获取request
+        HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
+        //设置IP地址
+        appLog.setIp(IPUtils.getIpAddr(request));
+        //用户名、公司id、后台用户id
+        appLog.setUserId(StpUtil.getSession().getLong("userId"));
+        appLog.setCompanyId(StpUtil.getSession().getLong("companyId"));
+        appLog.setUsername(StpUtil.getSession().getString("username"));
+        appLog.setExecuteTime(executeTime);
+
+        //保存系统日志
+        appLogService.save(appLog);
+    }
+
+
+}

+ 15 - 0
common/src/main/java/com/kym/common/annotation/ApiLog.java

@@ -0,0 +1,15 @@
+package com.kym.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * APP日志注解
+ *
+ * @author skyline
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ApiLog {
+    String value() default "";
+}

+ 63 - 0
entity/src/main/java/com/kym/entity/miniapp/AppLog.java

@@ -0,0 +1,63 @@
+package com.kym.entity.miniapp;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.kym.entity.BaseEntity;
+import java.io.Serializable;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * APP日志表
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-08-20
+ */
+@Getter
+@Setter
+@TableName("t_app_log")
+public class AppLog extends BaseEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 公司id
+     */
+    private Long companyId;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 操作人
+     */
+    private String username;
+
+    /**
+     * ip
+     */
+    private String ip;
+
+    /**
+     * 操作名
+     */
+    private String operation;
+
+    /**
+     * 方法
+     */
+    private String method;
+
+    /**
+     * 请求参数
+     */
+    private String requestParam;
+
+    /**
+     * 执行时长
+     */
+    private Long executeTime;
+}

+ 16 - 0
mapper/src/main/java/com/kym/mapper/miniapp/AppLogMapper.java

@@ -0,0 +1,16 @@
+package com.kym.mapper.miniapp;
+
+import com.kym.entity.miniapp.AppLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * APP日志表 Mapper 接口
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-08-20
+ */
+public interface AppLogMapper extends BaseMapper<AppLog> {
+
+}

+ 22 - 0
mapper/src/main/resources/mappers/miniapp/AppLogMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kym.mapper.miniapp.AppLogMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.kym.entity.miniapp.AppLog">
+        <result column="company_id" property="companyId" />
+        <result column="user_id" property="userId" />
+        <result column="username" property="username" />
+        <result column="ip" property="ip" />
+        <result column="operation" property="operation" />
+        <result column="method" property="method" />
+        <result column="request_param" property="requestParam" />
+        <result column="execute_time" property="executeTime" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        company_id, user_id, username, ip, operation, method, request_param, execute_time
+    </sql>
+
+</mapper>

+ 0 - 0
admin/src/main/java/com/kym/admin/aspect/SysLogAspect.java → miniapp/src/main/java/com/kym/miniapp/aspect/SysLogAspect.java


+ 18 - 0
miniapp/src/main/java/com/kym/miniapp/controller/AppLogController.java

@@ -0,0 +1,18 @@
+package com.kym.miniapp.controller;
+
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * APP日志表 前端控制器
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-08-20
+ */
+@RestController
+@RequestMapping("/app-log")
+public class AppLogController {
+
+}

+ 0 - 1
miniapp/src/main/java/com/kym/miniapp/controller/ChargerController.java

@@ -12,7 +12,6 @@ import com.kym.service.enplus.EnPlusService;
 import com.kym.service.miniapp.ChargeService;
 import lombok.SneakyThrows;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;

+ 16 - 0
service/src/main/java/com/kym/service/miniapp/AppLogService.java

@@ -0,0 +1,16 @@
+package com.kym.service.miniapp;
+
+import com.kym.entity.miniapp.AppLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * APP日志表 服务类
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-08-20
+ */
+public interface AppLogService extends IService<AppLog> {
+
+}

+ 20 - 0
service/src/main/java/com/kym/service/miniapp/impl/AppLogServiceImpl.java

@@ -0,0 +1,20 @@
+package com.kym.service.miniapp.impl;
+
+import com.kym.entity.miniapp.AppLog;
+import com.kym.mapper.miniapp.AppLogMapper;
+import com.kym.service.miniapp.AppLogService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * APP日志表 服务实现类
+ * </p>
+ *
+ * @author skyline
+ * @since 2023-08-20
+ */
+@Service
+public class AppLogServiceImpl extends ServiceImpl<AppLogMapper, AppLog> implements AppLogService {
+
+}