package com.yanzuoguang.cloud.aop;

import com.yanzuoguang.util.exception.ExceptionHelper;
import com.yanzuoguang.util.helper.StringHelper;
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.stereotype.Component;

/**
 * LogsAspect(接口请求日志切面)
 *
 * @author: Kang
 * @time: 2018年04月25日 11:43
 */
@Aspect
@Component
public class MqAspect extends BaseRequestAspect {

    private static final String TAG = MqAspect.class.getSimpleName();

    /**
     * exec aop point aspect
     */
    @Pointcut("execution(* *..mq..*Consumer.*(..))")
    public void mqAspect() {
    }

    /**
     * 执行环形切面
     *
     * @param joinPoint
     * @return
     */
    @Around(value = "mqAspect()")
    public Object requestWebAround(ProceedingJoinPoint joinPoint) throws Throwable {
        boolean clear = requestLogInit();
        long start = requestLog(TAG, joinPoint);
        Object result = null;
        Exception ex = null;
        try {
            result = executeMethod(joinPoint);
            return result;
        } catch (Exception e) {
            // 消费消息出错
            result = ExceptionHelper.getError(e);
            ex = e;
            throw e;
        } finally {
            responseLog(clear, TAG, StringHelper.EMPTY, joinPoint, start, result, ex);
        }
    }

    private Object executeMethod(ProceedingJoinPoint joinPoint) throws Throwable {
        return joinPoint.proceed();
    }
}