//package com.wteam.framework.common.aop.interceptor;
//
//import cn.lili.common.aop.annotation.RetryOperation;
//import cn.lili.common.exception.RetryException;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.springframework.stereotype.Component;
//
///**
// * @author paulG
// * @since 2022/4/26
// **/
//@Aspect
//@Component
//@Slf4j
//public class RetryAspect {
//
//
//    @Around(value = "@annotation(retryOperation)")
//    public Object retryOperation(ProceedingJoinPoint joinPoint, RetryOperation retryOperation) throws Throwable {
//
//        Object response = null;
//        int retryCount = retryOperation.retryCount();
//        int waitSeconds = retryOperation.waitSeconds();
//        boolean successful = false;
//
//        do {
//            try {
//                response = joinPoint.proceed();
//                successful = true;
//            } catch (RetryException ex) {
//                log.info("Operation failed, retries remaining: {}", retryCount);
//                retryCount--;
//                if (retryCount < 0) {
//                    successful = true;
//                    log.error(ex.getMessage());
//                }
//                if (waitSeconds > 0 && !successful) {
//                    log.info("Waiting for {} second(s) before next retry", waitSeconds);
//                    Thread.sleep(waitSeconds * 1000L);
//                }
//            }
//        } while (!successful);
//
//        return response;
//    }
//
//}
