张晓波
2023-10-30 448bbf9ccb7564036e34fe4a497e4365bf14a5fc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.thhy.general.config;
 
import com.alibaba.fastjson.JSONObject;
import com.thhy.general.common.enums.LogTypeEnums;
import com.thhy.general.entity.SysLogVo;
import com.thhy.general.utils.UserInfoUtils;
import lombok.Data;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
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.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
 
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
 
@Component
@Aspect
@ConditionalOnProperty(prefix = "rocketmq",value = "enable",havingValue = "true")
public class SysLogExec {
 
    @Pointcut("execution(public * com.thhy.*.modules.*.*.service.impl.*.*(..))")
    public void pointcut(){
 
    }
 
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
 
    @Value("${spring.application.name}")
    private String moduleName;
 
    private String topic = "syslog";
 
    @Around("pointcut()")
    public Object invoke(ProceedingJoinPoint invocation) throws Throwable {
 
        String methodName = invocation.getSignature().getName();
        Map<String,Object> map = UserInfoUtils.getInstance().currentPath();
        String ip = map.get("ip").toString();
        String path = map.get("path").toString();
        System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"___"+ip+"---"+path);
        if(methodName.contains("add")||methodName.contains("Add")||methodName.contains("update")||methodName.contains("Update")
                ||methodName.contains("delete")||methodName.contains("insert")
                ||methodName.contains("Insert")){
            System.out.println("拦截到需要日志"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
            SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo();
            SysLogVo sysLogVo = new SysLogVo();
            sysLogVo.setLogIp(ip);
            sysLogVo.setLoginUser(userInfo.getUserId());
            sysLogVo.setLogUrl(path);
            sysLogVo.setOpTime(new Date());
            sysLogVo.setOpType(getOpType(methodName));
            sysLogVo.setModuleName(moduleName);
            Object obj = invocation.proceed();
 
            Message<String> message = MessageBuilder.withPayload(JSONObject.toJSONString(sysLogVo)).build();
            rocketMQTemplate.send(topic,message);
            return obj;
        }
        return invocation.proceed();
    }
 
    public String getOpType(String methodName){
        if(methodName.contains("add")||methodName.contains("Add")||methodName.contains("insert")||methodName.contains("Insert")){
            return LogTypeEnums.add.getValue();
        }else if(methodName.contains("update")||methodName.contains("Update")){
            return LogTypeEnums.update.getValue();
        }else if(methodName.contains("delete")){
            return LogTypeEnums.delete.getValue();
        }
        return "";
    }
}