浏览代码

增加aop日志管理

wangli 4 年之前
父节点
当前提交
b264f7600d

+ 4 - 0
user_center/src/main/java/com/huaxu/controller/TenantController.java

@@ -7,6 +7,7 @@ import com.huaxu.common.FileUploadUtil;
 import com.huaxu.dto.TenantDto;
 import com.huaxu.entity.TenantEntity;
 import com.huaxu.entity.UserEntity;
+import com.huaxu.logAdvice.LogAnnotation;
 import com.huaxu.model.AjaxMessage;
 import com.huaxu.model.Pagination;
 import com.huaxu.model.ResultStatus;
@@ -97,6 +98,7 @@ public class TenantController {
      * @param tenantDto 实体类
      * @return Response对象t
      */
+    @LogAnnotation(module = "【租户管理】新增")
     @RequestMapping(value = "insert", method = RequestMethod.POST)
     @ApiOperation(value = "插入租户信息")
     public AjaxMessage<Integer> insert(@ApiParam(value = "租户信息", required = true) @RequestBody TenantDto tenantDto) {
@@ -117,6 +119,7 @@ public class TenantController {
      * @param tenantDto 实体类
      * @return Response对象
      */
+    @LogAnnotation(module = "【租户管理】修改")
     @RequestMapping(value = "update", method = RequestMethod.POST)
     @ApiOperation(value = "修改租户信息")
     public AjaxMessage<Integer> update(@ApiParam(value = "租户信息", required = true) @RequestBody TenantDto tenantDto) {
@@ -138,6 +141,7 @@ public class TenantController {
      * @param id
      * @return Response对象
      */
+    @LogAnnotation(module = "【租户管理】删除")
     @RequestMapping(value = "delete", method = RequestMethod.POST)
     @ApiOperation(value = "删除租户信息")
     public AjaxMessage<Integer> delete(@ApiParam(value = "租户信息", required = true) @RequestParam Integer id) {

+ 16 - 0
user_center/src/main/java/com/huaxu/logAdvice/LogAnnotation.java

@@ -0,0 +1,16 @@
+package com.huaxu.logAdvice;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 日志注解
+ *
+ */
+@Target({ ElementType.TYPE,ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface LogAnnotation {
+	String module() default "";
+}

+ 90 - 0
user_center/src/main/java/com/huaxu/logAdvice/OperateLogAdvice.java

@@ -0,0 +1,90 @@
+package com.huaxu.logAdvice;
+
+import com.huaxu.dao.OperateLogMapper;
+import com.huaxu.entity.OperateLogEntity;
+import com.huaxu.model.LoginUser;
+import com.huaxu.util.UserUtil;
+import io.swagger.annotations.ApiOperation;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Method;
+import java.util.Date;
+
+/**
+ * @description 统一日志处理 :通过自定义注解获取操作名称
+ * @auto wangli
+ * @data 2020-11-09 8:43
+ */
+@Aspect
+@Component
+public class OperateLogAdvice {
+
+    @Resource
+    private OperateLogMapper operateLogMapper;
+
+    @Around(value = "@annotation(com.huaxu.logAdvice.LogAnnotation)")
+    public Object logSave(ProceedingJoinPoint joinPoint) throws Throwable {
+        //参数存储
+        StringBuffer stringBuffer=new StringBuffer();
+        try{
+            //1.获取到所有的参数值的数组
+            Object[] args = joinPoint.getArgs();
+            Signature signature = joinPoint.getSignature();
+            MethodSignature methodSignature = (MethodSignature) signature;
+            //2.获取到方法的所有参数名称的字符串数组
+            String[] parameterNames = methodSignature.getParameterNames();
+            //拼装参数
+            for (int i =0 ,len=parameterNames.length;i < len ;i++){
+                stringBuffer.append("\r\n参数名:"+ parameterNames[i] + " = " +args[i]);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+
+        OperateLogEntity OperateLogs = new OperateLogEntity();
+        LoginUser user = UserUtil.getCurrentUser();
+        if (user != null) {
+            // 设置当前登录用户
+            OperateLogs.setUserName(user.getUsername());
+            OperateLogs.setPhone(user.getPhoneNumber());
+            OperateLogs.setCompanyId(user.getCompanyId());
+            OperateLogs.setDepartmentId(user.getDepartmentId());
+
+            MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
+
+            String module = null;//ApiOperation注解的模块名
+            ApiOperation methodApiOperation = methodSignature.getMethod().getDeclaredAnnotation(ApiOperation.class);
+            if (methodApiOperation != null) {
+                module =methodApiOperation.value();
+            }
+
+            // 没有指定日志module ,获取方法
+            if (StringUtils.isEmpty(module)) {
+                Method method = methodSignature.getMethod();
+                module= method.getDeclaringClass().getName()+method.getName();
+            }
+            OperateLogs.setOperateContent(module);
+
+            try {
+                return  joinPoint.proceed();
+            } catch (Exception e) {
+                OperateLogs.setOperateContent(OperateLogs.getOperateContent()+"__"+e.getMessage());
+                throw e;
+            } finally {
+                if (OperateLogs.getUserName() != null) {
+                    OperateLogs.setCreateTime(new Date());
+                    operateLogMapper.insert(OperateLogs);
+                }
+            }
+        }else {
+            return joinPoint.proceed();
+        }
+    }
+}