package com.ruoyi.common.config; 
 | 
  
 | 
import com.ruoyi.common.annotation.NotRepeatCommit; 
 | 
import com.ruoyi.common.filter.RepeatedlyRequestWrapper; 
 | 
import com.ruoyi.common.utils.http.HttpHelper; 
 | 
import org.apache.logging.log4j.util.Strings; 
 | 
import org.aspectj.lang.ProceedingJoinPoint; 
 | 
import org.aspectj.lang.annotation.Around; 
 | 
import org.aspectj.lang.annotation.Aspect; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.stereotype.Component; 
 | 
  
 | 
import javax.servlet.http.HttpServletRequest; 
 | 
import java.util.concurrent.TimeUnit; 
 | 
  
 | 
@Aspect 
 | 
@Component 
 | 
public class IsAspectAspect { 
 | 
    @Autowired 
 | 
    private RedisTemplate redisTemplate; 
 | 
  
 | 
    @Around("@annotation(notRepeat)") 
 | 
    public Object before(ProceedingJoinPoint point, NotRepeatCommit notRepeat) { 
 | 
        String nowParams = ""; 
 | 
  
 | 
        String key = getKey(notRepeat.key(), point.getArgs()); 
 | 
        if (Strings.isNotBlank(key)) { 
 | 
            // 不存在 就添加  缓存 设置 时间 
 | 
            if (!redisTemplate.opsForValue().setIfAbsent(key, "1", notRepeat.value(), TimeUnit.MILLISECONDS)) { 
 | 
                throw new RuntimeException("请勿重复提交"); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        try { 
 | 
            return point.proceed(); 
 | 
        } catch (Throwable throwable) { 
 | 
            throw new RuntimeException("服务器异常"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * key 生成策略 
 | 
     * 
 | 
     * @param key  key表达式 
 | 
     * @param args 参数 
 | 
     * @return 生成的key 
 | 
     */ 
 | 
    private String getKey(String key, Object[] args) { 
 | 
        for (int i = 0; i < args.length; i++) { 
 | 
            key = key.replace("arg[" + i + "]", args[i].toString()); 
 | 
        } 
 | 
        return key; 
 | 
    } 
 | 
} 
 |