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 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 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 ""; } }