| package com.xcong.excoin.common.aop; | 
|   | 
| import com.xcong.excoin.common.annotations.SubmitRepeat; | 
| import com.xcong.excoin.common.response.Result; | 
| import com.xcong.excoin.utils.MessageSourceUtils; | 
| import com.xcong.excoin.utils.RedisUtils; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.aspectj.lang.JoinPoint; | 
| import org.aspectj.lang.ProceedingJoinPoint; | 
| import org.aspectj.lang.annotation.*; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.stereotype.Component; | 
| import org.springframework.web.context.request.RequestContextHolder; | 
| import org.springframework.web.context.request.ServletRequestAttributes; | 
|   | 
| import javax.annotation.Resource; | 
| import javax.servlet.http.HttpServletRequest; | 
|   | 
| /** | 
|  * @author wzy | 
|  * @date 2020-04-16 22:01 | 
|  **/ | 
| @Slf4j | 
| @Aspect | 
| @Component | 
| public class SubmitRepeatAspect { | 
|   | 
|     @Resource | 
|     private RedisUtils redisUtil; | 
|   | 
|     private String key; | 
|   | 
|     @Pointcut("@annotation(submitRepeat)") | 
|     public void submitRepeatPointCut(SubmitRepeat submitRepeat) { | 
|   | 
|     } | 
|   | 
|     @Before("submitRepeatPointCut(submitRepeat)") | 
|     public void before(SubmitRepeat submitRepeat) { | 
|     } | 
|   | 
|     @Around("submitRepeatPointCut(submitRepeat)") | 
|     public Object around(ProceedingJoinPoint joinPoint, SubmitRepeat submitRepeat) throws Throwable { | 
|         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); | 
|         HttpServletRequest request = attributes.getRequest(); | 
|   | 
|         String token = request.getHeader("token"); | 
|         String uri = request.getRequestURI(); | 
|         String mId = (String) redisUtil.get(token); | 
|         log.info("#token : {}, uri : {}, mId : {}#", token, uri, mId); | 
|         key = mId + "_" + uri; | 
|         boolean flag = redisUtil.setNotExist(key, "1", 5); | 
|         log.info("#mid : {}, flag : {}#", mId, flag); | 
|         if (flag) { | 
|             Object result = joinPoint.proceed(); | 
|             redisUtil.del(key); | 
|             return result; | 
|         } else { | 
|             return Result.fail(MessageSourceUtils.getString("submit_repeat")); | 
|         } | 
|     } | 
|   | 
|     @After("submitRepeatPointCut(submitRepeat)") | 
|     public void after(SubmitRepeat submitRepeat) { | 
|   | 
|     } | 
|   | 
|     @AfterThrowing(throwing = "ex", pointcut = "submitRepeatPointCut(submitRepeat)") | 
|     public void afterThrows(JoinPoint jp, Exception ex, SubmitRepeat submitRepeat) throws Exception { | 
|         log.error("#submit repeat error:#", ex); | 
|         redisUtil.del(key); | 
|         throw new Exception("系统繁忙"); | 
|     } | 
| } |