From 1d8945ea7ba27eb6bd8bec14579586e1c88b756e Mon Sep 17 00:00:00 2001
From: wzy <wzy19931122ai@163.com>
Date: Fri, 16 Oct 2020 00:01:24 +0800
Subject: [PATCH] modify

---
 src/main/java/com/xcong/excoin/common/aspect/SubmitRepeatAspect.java         |   72 ++++++++++++++++++++++++++++++++++++
 src/main/java/com/xcong/excoin/common/annotation/SubmitRepeat.java           |   13 ++++++
 src/main/java/com/xcong/excoin/modules/agent/controller/AgentController.java |    2 +
 3 files changed, 87 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/common/annotation/SubmitRepeat.java b/src/main/java/com/xcong/excoin/common/annotation/SubmitRepeat.java
new file mode 100644
index 0000000..cf122c1
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/common/annotation/SubmitRepeat.java
@@ -0,0 +1,13 @@
+package com.xcong.excoin.common.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ *
+ * @author helius
+ */
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+public @interface SubmitRepeat {
+}
diff --git a/src/main/java/com/xcong/excoin/common/aspect/SubmitRepeatAspect.java b/src/main/java/com/xcong/excoin/common/aspect/SubmitRepeatAspect.java
new file mode 100644
index 0000000..052afb3
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/common/aspect/SubmitRepeatAspect.java
@@ -0,0 +1,72 @@
+package com.xcong.excoin.common.aspect;
+
+import com.xcong.excoin.common.annotation.SubmitRepeat;
+import com.xcong.excoin.common.entity.FebsResponse;
+import com.xcong.excoin.common.exception.FebsException;
+import com.xcong.excoin.common.utils.RedisUtils;
+import com.xcong.excoin.system.entity.User;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.*;
+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 uri = request.getRequestURI();
+        User user = (User) SecurityUtils.getSubject().getPrincipal();
+        key = user.getId() + "_" + uri;
+        boolean flag = redisUtil.setNotExist(key, "1", 5);
+        log.info("#mid : {}, flag : {}#", user.getId(), flag);
+        if (flag) {
+            Object result = joinPoint.proceed();
+            redisUtil.del(key);
+            return result;
+        } else {
+            return new FebsResponse().fail().message("请勿重复点击");
+        }
+    }
+
+    @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("系统繁忙");
+    }
+}
diff --git a/src/main/java/com/xcong/excoin/modules/agent/controller/AgentController.java b/src/main/java/com/xcong/excoin/modules/agent/controller/AgentController.java
index 1ab053b..2357a43 100644
--- a/src/main/java/com/xcong/excoin/modules/agent/controller/AgentController.java
+++ b/src/main/java/com/xcong/excoin/modules/agent/controller/AgentController.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.xcong.excoin.common.annotation.ControllerEndpoint;
+import com.xcong.excoin.common.annotation.SubmitRepeat;
 import com.xcong.excoin.common.controller.BaseController;
 import com.xcong.excoin.common.entity.FebsResponse;
 import com.xcong.excoin.common.entity.QueryRequest;
@@ -41,6 +42,7 @@
         return new FebsResponse().success().data(map);
     }
 
+    @SubmitRepeat
     @PostMapping("add")
     @RequiresPermissions("agent:add")
     @ControllerEndpoint(operation = "新增代理商", exceptionMessage = "新增代理商失败")

--
Gitblit v1.9.1