Преглед изворни кода

feat:后端项目,在网关模块中校验接口可调用的次数;调用成功触发接口成功调用次数+1;

yang yi пре 9 месеци
родитељ
комит
52ebd8a234

+ 19 - 4
open-api-gateway/src/main/java/space/anyi/openAPIGateway/filter/ConsumerFilter.java

@@ -21,7 +21,9 @@ import reactor.core.publisher.Mono;
 import space.anyi.openAPI.comom.model.interfaceInfo.InterfaceInfo;
 import space.anyi.openAPI.comom.model.interfaceInfo.InterfaceStatus;
 import space.anyi.openAPI.comom.model.user.User;
+import space.anyi.openAPI.comom.model.userInterfaceInfo.UserInterfaceInfo;
 import space.anyi.openAPI.comom.service.inside.InsideInterfaceInfoService;
+import space.anyi.openAPI.comom.service.inside.InsideUserInterfaceInfoService;
 import space.anyi.openAPI.comom.service.inside.InsideUserService;
 
 import java.util.HashSet;
@@ -48,6 +50,8 @@ public class ConsumerFilter implements GlobalFilter, Ordered {
     private InsideInterfaceInfoService insideInterfaceInfoService;
     @DubboReference
     private InsideUserService insideUserService;
+    @DubboReference
+    private InsideUserInterfaceInfoService insideUserInterfaceInfoService;
 
     /**
      * 记录时间戳和随机数nonce(防止重放攻击)
@@ -108,11 +112,22 @@ public class ConsumerFilter implements GlobalFilter, Ordered {
             return parameterExceptionHandler(response,"sign不合法");
         }
 
-        //todo:是否还有调用次数
-
+        //是否还有调用次数
+        UserInterfaceInfo userInterfaceInfo = insideUserInterfaceInfoService.getUserInterfaceInfoByUserIdAndInterfaceInfoId(user.getId(), interfaceInfo.getId());
+        log.debug("userInterfaceInfo:{}", userInterfaceInfo);
+        if (Objects.isNull(userInterfaceInfo)) {
+            log.warn("userInterfaceInfo不存在:{}",userInterfaceInfo);
+            return parameterExceptionHandler(response,"没有开通调用权限");
+        }
+        if (userInterfaceInfo.getLeftNum()<=0) {
+            log.warn("用户:{}的接口{}调用次数不足:{}",user,interfaceInfo,userInterfaceInfo.getLeftNum());
+            return parameterExceptionHandler(response,"调用次数不足");
+        }
+        //调用次数+1
         return chain.filter(exchange).doOnSuccess(aVoid -> {
-            //todo:过滤器后置处理
-            log.info("过滤器后置处理");
+            //过滤器后置处理
+            log.info("用户:{}调用接口:{}成功",user.getId(),interfaceInfo.getId());
+            insideUserInterfaceInfoService.invokeSuccess(userInterfaceInfo.getId());
         });
     }