瀏覽代碼

账号体系改造

dsx 2 年之前
父節點
當前提交
81d51f3172
共有 33 個文件被更改,包括 413 次插入254 次删除
  1. 33 1
      src/main/java/com/fdkankan/openApi/OpenApiApplication.java
  2. 1 1
      src/main/java/com/fdkankan/openApi/component/Limit.java
  3. 2 11
      src/main/java/com/fdkankan/openApi/component/LimitAspect.java
  4. 1 1
      src/main/java/com/fdkankan/openApi/component/LocalOverCache.java
  5. 1 1
      src/main/java/com/fdkankan/openApi/component/RedisLimit.java
  6. 2 6
      src/main/java/com/fdkankan/openApi/component/RedisLimitAspect.java
  7. 1 1
      src/main/java/com/fdkankan/openApi/component/ValidateApi.java
  8. 20 17
      src/main/java/com/fdkankan/openApi/component/ValidateApiAOP.java
  9. 2 0
      src/main/java/com/fdkankan/openApi/constant/RedisKey.java
  10. 7 4
      src/main/java/com/fdkankan/openApi/controller/BaseController.java
  11. 8 24
      src/main/java/com/fdkankan/openApi/controller/TestController.java
  12. 21 0
      src/main/java/com/fdkankan/openApi/controller/system/AccountController.java
  13. 19 13
      src/main/java/com/fdkankan/openApi/controller/system/SsoUserController.java
  14. 2 10
      src/main/java/com/fdkankan/openApi/controller/www/SceneController.java
  15. 55 0
      src/main/java/com/fdkankan/openApi/entity/system/Account.java
  16. 5 0
      src/main/java/com/fdkankan/openApi/entity/system/SystemBaseEntity.java
  17. 28 3
      src/main/java/com/fdkankan/openApi/entity/system/UserAuthInfo.java
  18. 0 29
      src/main/java/com/fdkankan/openApi/entity/system/Users.java
  19. 8 8
      src/main/java/com/fdkankan/openApi/generate/AutoGenerate.java
  20. 18 0
      src/main/java/com/fdkankan/openApi/mapper/system/IAccountMapper.java
  21. 1 1
      src/main/java/com/fdkankan/openApi/mapper/system/IUserAuthMapper.java
  22. 0 20
      src/main/java/com/fdkankan/openApi/mapper/system/IUsersMapper.java
  23. 2 2
      src/main/java/com/fdkankan/openApi/mq/listener/CallApiListener.java
  24. 22 0
      src/main/java/com/fdkankan/openApi/service/system/IAccountService.java
  25. 10 4
      src/main/java/com/fdkankan/openApi/service/system/IUserAuthService.java
  26. 0 20
      src/main/java/com/fdkankan/openApi/service/system/IUsersService.java
  27. 64 0
      src/main/java/com/fdkankan/openApi/service/system/impl/AccountServiceImpl.java
  28. 53 10
      src/main/java/com/fdkankan/openApi/service/system/impl/UserAuthServiceImpl.java
  29. 0 57
      src/main/java/com/fdkankan/openApi/service/system/impl/UsersServiceImpl.java
  30. 12 0
      src/main/java/com/fdkankan/openApi/vo/system/CreateAppUserParamVo.java
  31. 1 1
      src/main/java/com/fdkankan/openApi/vo/www/FdkkUserVo.java
  32. 5 0
      src/main/resources/mapper/system/AccountMapper.xml
  33. 9 9
      src/main/resources/mapper/system/UserMapper.xml

+ 33 - 1
src/main/java/com/fdkankan/openApi/OpenApiApplication.java

@@ -1,19 +1,51 @@
 package com.fdkankan.openApi;
 package com.fdkankan.openApi;
 
 
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.openApi.constant.RedisKey;
+import com.fdkankan.openApi.entity.system.UserAuthInfo;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
+import com.fdkankan.redis.util.RedisUtil;
 import org.mybatis.spring.annotation.MapperScan;
 import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
 @SpringBootApplication
 @SpringBootApplication
 @EnableScheduling
 @EnableScheduling
 @ComponentScan(basePackages = {"com.fdkankan.*"})
 @ComponentScan(basePackages = {"com.fdkankan.*"})
 @MapperScan({"com.fdkankan.openApi.mapper.laser","com.fdkankan.openApi.mapper.www","com.fdkankan.openApi.mapper.system"})
 @MapperScan({"com.fdkankan.openApi.mapper.laser","com.fdkankan.openApi.mapper.www","com.fdkankan.openApi.mapper.system"})
-public class OpenApiApplication {
+public class OpenApiApplication implements CommandLineRunner {
+
+	@Autowired
+	IUserAuthInfoService userAuthInfoService;
+	@Autowired
+	RedisUtil redisUtil;
 
 
 	public static void main(String[] args) {
 	public static void main(String[] args) {
 		SpringApplication.run(OpenApiApplication.class, args);
 		SpringApplication.run(OpenApiApplication.class, args);
 	}
 	}
 
 
+	@Override
+	public void run(String... args) throws Exception {
+
+		//项目启动初始化一次无限制用户缓存
+		this.initInfiniteCountCache();
+	}
+
+	private void initInfiniteCountCache(){
+		List<UserAuthInfo> list = userAuthInfoService.list(new LambdaQueryWrapper<UserAuthInfo>().select(UserAuthInfo::getAppKey).eq(UserAuthInfo::getTotalCount, -1));
+		if(CollUtil.isEmpty(list)){
+			return;
+		}
+		List<String> appKeyList = list.stream().map(item -> item.getAppKey()).collect(Collectors.toList());
+		redisUtil.sSet(RedisKey.API_METHOD_COUNT_INFINITE, appKeyList.toArray());
+	}
 }
 }

+ 1 - 1
src/main/java/com/fdkankan/openApi/component/Limit.java

@@ -1,4 +1,4 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
 import java.lang.annotation.*;
 import java.lang.annotation.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;

+ 2 - 11
src/main/java/com/fdkankan/openApi/component/LimitAspect.java

@@ -1,16 +1,11 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
-import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
-import com.google.common.collect.ConcurrentHashMultiset;
-import com.google.common.collect.Maps;
 import com.google.common.util.concurrent.RateLimiter;
 import com.google.common.util.concurrent.RateLimiter;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.aspectj.lang.reflect.MethodSignature;
@@ -20,12 +15,8 @@ import org.springframework.web.context.request.ServletRequestAttributes;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
-import java.util.Map;
-import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 
 
 @Slf4j
 @Slf4j
 @Aspect
 @Aspect
@@ -34,7 +25,7 @@ public class LimitAspect {
 
 
     private static ConcurrentHashMap<String, RateLimiter> limitMap = new ConcurrentHashMap<>();
     private static ConcurrentHashMap<String, RateLimiter> limitMap = new ConcurrentHashMap<>();
 
 
-    @Before("@annotation(com.fdkankan.openApi.component.Limit)")
+    @Before("@annotation(com.fdkankan.openApi.aop.Limit)")
     public  void before(JoinPoint joinPoint) throws Throwable {
     public  void before(JoinPoint joinPoint) throws Throwable {
 
 
         ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

+ 1 - 1
src/main/java/com/fdkankan/openApi/component/LocalOverCache.java

@@ -1,4 +1,4 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
 import cn.hutool.cache.CacheUtil;
 import cn.hutool.cache.CacheUtil;
 import cn.hutool.cache.impl.TimedCache;
 import cn.hutool.cache.impl.TimedCache;

+ 1 - 1
src/main/java/com/fdkankan/openApi/component/RedisLimit.java

@@ -1,4 +1,4 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
 import com.fdkankan.openApi.constant.LimitType;
 import com.fdkankan.openApi.constant.LimitType;
 
 

+ 2 - 6
src/main/java/com/fdkankan/openApi/component/RedisLimitAspect.java

@@ -1,12 +1,10 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.openApi.constant.LimitType;
 import com.fdkankan.openApi.constant.LimitType;
 import com.fdkankan.web.util.WebUtil;
 import com.fdkankan.web.util.WebUtil;
-import com.google.common.collect.ImmutableList;
-import jodd.datetime.TimeUtil;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.JoinPoint;
@@ -29,8 +27,6 @@ import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
 import java.lang.reflect.Method;
 import java.time.Instant;
 import java.time.Instant;
 import java.util.Collections;
 import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
 @Slf4j
 @Slf4j
@@ -45,7 +41,7 @@ public class RedisLimitAspect {
     @Resource
     @Resource
     private RedisScript<Long> limitRedisScript;
     private RedisScript<Long> limitRedisScript;
 
 
-    @Before("@annotation(com.fdkankan.openApi.component.RedisLimit)")
+    @Before("@annotation(com.fdkankan.openApi.aop.RedisLimit)")
     public void before(JoinPoint joinPoint){
     public void before(JoinPoint joinPoint){
         MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
         MethodSignature methodSignature = (MethodSignature)joinPoint.getSignature();
         Method method = methodSignature.getMethod();
         Method method = methodSignature.getMethod();

+ 1 - 1
src/main/java/com/fdkankan/openApi/component/ValidateApi.java

@@ -1,4 +1,4 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
 import java.lang.annotation.*;
 import java.lang.annotation.*;
 
 

+ 20 - 17
src/main/java/com/fdkankan/openApi/component/ValidateApiAOP.java

@@ -1,4 +1,4 @@
-package com.fdkankan.openApi.component;
+package com.fdkankan.openApi.aop;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
@@ -9,7 +9,7 @@ import com.fdkankan.openApi.constant.RedisKey;
 import com.fdkankan.openApi.exception.ApiBusinessException;
 import com.fdkankan.openApi.exception.ApiBusinessException;
 import com.fdkankan.openApi.mq.dto.CallApiDTO;
 import com.fdkankan.openApi.mq.dto.CallApiDTO;
 import com.fdkankan.openApi.mq.sender.CallApiSender;
 import com.fdkankan.openApi.mq.sender.CallApiSender;
-import com.fdkankan.openApi.service.system.IUserAuthService;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.response.ResultData;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -34,7 +34,7 @@ public class ValidateApiAOP {
     @Autowired
     @Autowired
     private CallApiSender callApiSender;
     private CallApiSender callApiSender;
     @Autowired
     @Autowired
-    private IUserAuthService userAuthService;
+    private IUserAuthInfoService userAuthService;
     @Autowired
     @Autowired
     private LocalOverCache localOverCache;
     private LocalOverCache localOverCache;
 
 
@@ -59,25 +59,28 @@ public class ValidateApiAOP {
                 throw new ApiBusinessException(ErrorCode.AUTH_FAIL);
                 throw new ApiBusinessException(ErrorCode.AUTH_FAIL);
             }
             }
             //数据库鉴权
             //数据库鉴权
-            if (!userAuthService.findExistByAppKey(authorization)) {
-                throw new ApiBusinessException(ErrorCode.AUTH_FAIL);
-            }
+            userAuthService.checkValidAppKey(authorization);
+
             //内存标记,减少redis访问
             //内存标记,减少redis访问
             Boolean over = localOverCache.getTimedCache(authorization);
             Boolean over = localOverCache.getTimedCache(authorization);
             if (ObjectUtil.isNotNull(over) && over) {
             if (ObjectUtil.isNotNull(over) && over) {
                 throw new ApiBusinessException(HttpStatus.COUNT_OVER, "");
                 throw new ApiBusinessException(HttpStatus.COUNT_OVER, "");
             }
             }
         }
         }
-        // TODO: 2023/4/17 次数校验,先注释掉,现阶段测试接口是否可用,需要测试次数时再放开,次数校验按照用户维度还是接口维度待定 method
-//        if (counting) {
-//            //预减次数
-//            long decrStock = redisUtil.decr(String.format(RedisKey.API_METHOD_COUNT, authorization, method), 1);
-//            log.info("前置减次数后,{}", decrStock);
-//            if (decrStock < 1) {
-//                localOverCache.setTimedCache(authorization, true);
-//            }
-//        }
-
+        if (counting) {
+            //判断是否是无限制
+            boolean isInfinite = redisUtil.sExists(RedisKey.API_METHOD_COUNT_INFINITE, authorization);
+            if(!isInfinite){
+                //预减次数
+                long decrStock = redisUtil.decr(String.format(RedisKey.API_METHOD_COUNT, authorization), 1);
+                log.info("前置减次数后,{}", decrStock);
+                if (decrStock < 1) {
+                    localOverCache.setTimedCache(authorization, true);
+                    redisUtil.incr(String.format(RedisKey.API_METHOD_COUNT, authorization), 1);
+                    throw new ApiBusinessException(HttpStatus.COUNT_OVER, "");
+                }
+            }
+        }
     }
     }
 
 
     /**
     /**
@@ -106,7 +109,7 @@ public class ValidateApiAOP {
         } else {
         } else {
             if (counting) {
             if (counting) {
                 log.info("业务非正常返回,进行次数回滚+1:{}");
                 log.info("业务非正常返回,进行次数回滚+1:{}");
-                long incrStock = redisUtil.incr(String.format(RedisKey.API_METHOD_COUNT, authorization, method), 1);
+                redisUtil.incr(String.format(RedisKey.API_METHOD_COUNT, authorization), 1);
             }
             }
         }
         }
     }
     }

+ 2 - 0
src/main/java/com/fdkankan/openApi/constant/RedisKey.java

@@ -9,4 +9,6 @@ public class RedisKey {
     public static String USER_APP_KEY_INFO = "api:user:%s";
     public static String USER_APP_KEY_INFO = "api:user:%s";
     //API:用户key:接口名
     //API:用户key:接口名
     public static String API_METHOD_COUNT = "api:count:%s";
     public static String API_METHOD_COUNT = "api:count:%s";
+    //API:用户key:接口名
+    public static String API_METHOD_COUNT_INFINITE = "api:count:infinite";
 }
 }

+ 7 - 4
src/main/java/com/fdkankan/openApi/controller/BaseController.java

@@ -5,7 +5,7 @@ import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.DateEditor;
 import com.fdkankan.common.util.DateEditor;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
-import com.fdkankan.openApi.service.system.IUserAuthService;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.propertyeditors.StringTrimmerEditor;
 import org.springframework.beans.propertyeditors.StringTrimmerEditor;
 import org.springframework.web.bind.WebDataBinder;
 import org.springframework.web.bind.WebDataBinder;
@@ -24,7 +24,7 @@ public class BaseController {
     protected HttpServletResponse response;
     protected HttpServletResponse response;
 
 
     @Autowired
     @Autowired
-    protected IUserAuthService userAuthService;
+    protected IUserAuthInfoService userAuthService;
 
 
     @InitBinder
     @InitBinder
     protected void initBinder(WebDataBinder webDataBinder) {
     protected void initBinder(WebDataBinder webDataBinder) {
@@ -41,7 +41,6 @@ public class BaseController {
     }
     }
 
 
     protected UserAuthInfo getUserAuthInfo(){
     protected UserAuthInfo getUserAuthInfo(){
-        String authorization = this.getAuthorization();
         UserAuthInfo userAuthInfo = userAuthService.findByAppKey(this.getAuthorization());
         UserAuthInfo userAuthInfo = userAuthService.findByAppKey(this.getAuthorization());
         if(Objects.isNull(userAuthInfo)){
         if(Objects.isNull(userAuthInfo)){
             throw new BusinessException(ErrorCode.APP_KEY_ILLEGAL);
             throw new BusinessException(ErrorCode.APP_KEY_ILLEGAL);
@@ -49,8 +48,12 @@ public class BaseController {
         return userAuthInfo;
         return userAuthInfo;
     }
     }
 
 
+    protected UserAuthInfo getEffectUserAuthInfo(){
+        return userAuthService.getEffectUserAuthInfo(this.getAuthorization());
+    }
+
     protected Long getUserId(){
     protected Long getUserId(){
-        return this.getUserAuthInfo().getUserId();
+        return this.getEffectUserAuthInfo().getUserId();
     }
     }
 
 
 }
 }

+ 8 - 24
src/main/java/com/fdkankan/openApi/controller/TestController.java

@@ -2,14 +2,14 @@ package com.fdkankan.openApi.controller;
 
 
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaCheckLogin;
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.dev33.satoken.annotation.SaIgnore;
-import com.fdkankan.openApi.component.LocalOverCache;
-import com.fdkankan.openApi.component.ValidateApi;
+import com.fdkankan.openApi.aop.LocalOverCache;
+import com.fdkankan.openApi.aop.ValidateApi;
 import com.fdkankan.openApi.entity.laser.SceneEntity;
 import com.fdkankan.openApi.entity.laser.SceneEntity;
+import com.fdkankan.openApi.entity.system.Account;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
-import com.fdkankan.openApi.entity.system.Users;
 import com.fdkankan.openApi.service.laser.SceneService;
 import com.fdkankan.openApi.service.laser.SceneService;
-import com.fdkankan.openApi.service.system.IUserAuthService;
-import com.fdkankan.openApi.service.system.IUsersService;
+import com.fdkankan.openApi.service.system.IAccountService;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
 import com.fdkankan.openApi.service.www.IUserService;
 import com.fdkankan.openApi.service.www.IUserService;
 import com.fdkankan.openApi.util.TokenUtil;
 import com.fdkankan.openApi.util.TokenUtil;
 import com.fdkankan.web.controller.BaseController;
 import com.fdkankan.web.controller.BaseController;
@@ -32,9 +32,9 @@ public class TestController extends BaseController {
     private SceneService sceneService;
     private SceneService sceneService;
 
 
     @Autowired
     @Autowired
-    private IUsersService usersService;
+    private IAccountService accountService;
     @Autowired
     @Autowired
-    private IUserAuthService userAuthService;
+    private IUserAuthInfoService userAuthService;
 
 
     @Autowired
     @Autowired
     private LocalOverCache localOverCache;
     private LocalOverCache localOverCache;
@@ -47,7 +47,7 @@ public class TestController extends BaseController {
     @ValidateApi(method = "test:test", counting = false)
     @ValidateApi(method = "test:test", counting = false)
     public ResultData test() {
     public ResultData test() {
         SceneEntity bySceneCode = sceneService.findBySceneCode("SS-t-yotkjVf55A");
         SceneEntity bySceneCode = sceneService.findBySceneCode("SS-t-yotkjVf55A");
-        Users byUsersName = usersService.findByUserName("18666186515");
+        Account byUsersName = accountService.findByUserName("18666186515");
         return ResultData.ok("ok");
         return ResultData.ok("ok");
     }
     }
 
 
@@ -59,20 +59,4 @@ public class TestController extends BaseController {
         return ResultData.ok("ok");
         return ResultData.ok("ok");
     }
     }
 
 
-    @GetMapping("/bindUser")
-    @SaIgnore
-    public ResultData test(int userId, String userName) {
-
-        Users users = new Users();
-        users.setId(userId);
-        users.setUserName(userName);
-        usersService.save(users);
-
-        UserAuthInfo userAuthInfo = new UserAuthInfo();
-        userAuthInfo.setUserId((long)userId);
-        userAuthInfo.setAppKey(TokenUtil.createToken());
-        userAuthService.save(userAuthInfo);
-
-        return ResultData.ok(userAuthInfo.getAppKey());
-    }
 }
 }

+ 21 - 0
src/main/java/com/fdkankan/openApi/controller/system/AccountController.java

@@ -0,0 +1,21 @@
+package com.fdkankan.openApi.controller.system;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 账号表 前端控制器
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@RestController
+@RequestMapping("/openApi/account")
+public class AccountController {
+
+}
+

+ 19 - 13
src/main/java/com/fdkankan/openApi/controller/system/SsoUserController.java

@@ -7,12 +7,11 @@ import cn.dev33.satoken.stp.StpUtil;
 import com.fdkankan.common.util.Base64Converter;
 import com.fdkankan.common.util.Base64Converter;
 import com.fdkankan.common.util.PasswordUtils;
 import com.fdkankan.common.util.PasswordUtils;
 import com.fdkankan.openApi.controller.BaseController;
 import com.fdkankan.openApi.controller.BaseController;
+import com.fdkankan.openApi.entity.system.Account;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
-import com.fdkankan.openApi.entity.system.Users;
 import com.fdkankan.openApi.httpclient.client.FdKKClient;
 import com.fdkankan.openApi.httpclient.client.FdKKClient;
-import com.fdkankan.openApi.service.system.IUserAuthService;
-import com.fdkankan.openApi.service.system.IUsersService;
-import com.fdkankan.openApi.util.TokenUtil;
+import com.fdkankan.openApi.service.system.IAccountService;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
 import com.fdkankan.openApi.vo.system.LoginParam;
 import com.fdkankan.openApi.vo.system.LoginParam;
 import com.fdkankan.openApi.vo.www.FdkkLoginVo;
 import com.fdkankan.openApi.vo.www.FdkkLoginVo;
 import com.fdkankan.web.response.Result;
 import com.fdkankan.web.response.Result;
@@ -40,9 +39,9 @@ public class SsoUserController extends BaseController {
     @Autowired
     @Autowired
     private FdKKClient fdKKClient;
     private FdKKClient fdKKClient;
     @Autowired
     @Autowired
-    private IUsersService usersService;
+    private IAccountService accountService;
     @Autowired
     @Autowired
-    private IUserAuthService userAuthService;
+    private IUserAuthInfoService userAuthService;
 
 
     /**
     /**
      * 登录
      * 登录
@@ -59,18 +58,25 @@ public class SsoUserController extends BaseController {
                 .setIsLastingCookie(false)
                 .setIsLastingCookie(false)
                 .setToken(fdkkLoginVo.getData().getToken());
                 .setToken(fdkkLoginVo.getData().getToken());
         FdkkLoginVo data = fdkkLoginVo.getData();
         FdkkLoginVo data = fdkkLoginVo.getData();
-        Users users = usersService.findByUserName(data.getUser().getUserName(), data.getUser().getId(), data.getUser().getHead());
-        if(Objects.nonNull(users)){
-            UserAuthInfo userAuthInfo = userAuthService.findByUserIdCreateIfNotExits(users.getId());
+        Account account = accountService.findByUserName(data.getUser().getUserName(), data.getUser().getId(), data.getUser().getHead());
+        if(Objects.nonNull(account)){
+            UserAuthInfo userAuthInfo = userAuthService.findByUserIdCreateIfNotExits(account.getId(), account.getUserId());
             data.setAppKey(userAuthInfo.getAppKey());
             data.setAppKey(userAuthInfo.getAppKey());
         }
         }
-        StpUtil.login(users.getUserName(), saLoginModel);
-        StpUtil.getSession().set("user", users);
-//        data.getUser().setFdkkId(data.getUser().getId());
-//        data.getUser().setId(users.getId());
+        StpUtil.login(account.getUserName(), saLoginModel);
+        StpUtil.getSession().set("user", account);
         return ResultData.ok(data.getAppKey());
         return ResultData.ok(data.getAppKey());
     }
     }
 
 
+//    @SaIgnore
+//    @PostMapping("createApp")
+//    public ResultData createApp(){
+//
+//
+//
+//
+//    }
+
 
 
 }
 }
 
 

+ 2 - 10
src/main/java/com/fdkankan/openApi/controller/www/SceneController.java

@@ -2,14 +2,11 @@ package com.fdkankan.openApi.controller.www;
 
 
 
 
 import cn.dev33.satoken.annotation.SaIgnore;
 import cn.dev33.satoken.annotation.SaIgnore;
-import cn.hutool.http.HttpUtil;
-import com.alibaba.nacos.common.http.HttpUtils;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.openApi.common.PageInfo;
 import com.fdkankan.openApi.common.PageInfo;
-import com.fdkankan.openApi.component.Limit;
-import com.fdkankan.openApi.component.RedisLimit;
-import com.fdkankan.openApi.component.ValidateApi;
+import com.fdkankan.openApi.aop.RedisLimit;
+import com.fdkankan.openApi.aop.ValidateApi;
 import com.fdkankan.openApi.controller.BaseController;
 import com.fdkankan.openApi.controller.BaseController;
 import com.fdkankan.openApi.entity.www.ScenePlus;
 import com.fdkankan.openApi.entity.www.ScenePlus;
 import com.fdkankan.openApi.service.laser.SceneService;
 import com.fdkankan.openApi.service.laser.SceneService;
@@ -17,17 +14,12 @@ import com.fdkankan.openApi.service.www.IScenePlusService;
 import com.fdkankan.openApi.vo.BaseSceneParamVo;
 import com.fdkankan.openApi.vo.BaseSceneParamVo;
 import com.fdkankan.openApi.vo.www.PageScenesParamVo;
 import com.fdkankan.openApi.vo.www.PageScenesParamVo;
 import com.fdkankan.web.response.ResultData;
 import com.fdkankan.web.response.ResultData;
-import com.google.common.util.concurrent.RateLimiter;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.concurrent.TimeUnit;
-
 /**
 /**
  * <p>
  * <p>
  *  前端控制器
  *  前端控制器

+ 55 - 0
src/main/java/com/fdkankan/openApi/entity/system/Account.java

@@ -0,0 +1,55 @@
+package com.fdkankan.openApi.entity.system;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.util.Date;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 账号表
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Getter
+@Setter
+@TableName("t_account")
+public class Account extends SystemBaseEntity {
+
+    /**
+     * 官网用户id
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 官网用户账号
+     */
+    @TableField("user_name")
+    private String userName;
+
+    /**
+     * 客户名称
+     */
+    @TableField("customer_name")
+    private String customerName;
+
+    /**
+     * 客户描述
+     */
+    @TableField("description")
+    private String description;
+
+    /**
+     * 头像
+     */
+    @TableField("head")
+    private String head;
+
+}

+ 5 - 0
src/main/java/com/fdkankan/openApi/entity/system/SystemBaseEntity.java

@@ -1,6 +1,8 @@
 package com.fdkankan.openApi.entity.system;
 package com.fdkankan.openApi.entity.system;
 
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -20,6 +22,9 @@ public class SystemBaseEntity implements Serializable {
 
 
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
     /**
     /**
      * 创建人id
      * 创建人id
      */
      */

+ 28 - 3
src/main/java/com/fdkankan/openApi/entity/system/UserAuthInfo.java

@@ -1,23 +1,48 @@
 package com.fdkankan.openApi.entity.system;
 package com.fdkankan.openApi.entity.system;
 
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.Data;
 
 
+import java.util.Date;
+
 /**
 /**
  * @author Xiewj
  * @author Xiewj
  * @date 2022/12/19
  * @date 2022/12/19
  */
  */
 @Data
 @Data
-@TableName("t_users_auth_info")
+@TableName("t_user_auth_info")
 public class UserAuthInfo extends SystemBaseEntity {
 public class UserAuthInfo extends SystemBaseEntity {
 
 
+
+
+    @TableField("account_id")
+    private Long accountId;
+
     @TableField("user_id")
     @TableField("user_id")
     private Long userId;
     private Long userId;
+
     @TableField("app_key")
     @TableField("app_key")
     private String appKey;
     private String appKey;
 
 
-    @TableField("call_counts")
-    private Integer callCounts;
+    @TableField("total_count")
+    private Integer totalCount;
+
+    @TableField("call_count")
+    private Integer callCount;
+
+    /**
+     * 是否启用(0-否,1-是)
+     */
+    @TableField("state")
+    private Integer state;
+
+    /**
+     * 生效时间
+     */
+    @TableField("effect_time")
+    private Date effectTime;
+
 
 
 }
 }

+ 0 - 29
src/main/java/com/fdkankan/openApi/entity/system/Users.java

@@ -1,29 +0,0 @@
-package com.fdkankan.openApi.entity.system;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-/**
- * @author Xiewj
- * @date 2022/12/19
- */
-@Data
-@TableName("t_users")
-public class Users extends SystemBaseEntity {
-   @TableId(value = "id", type = IdType.AUTO)
-   private Integer id;
-
-   /**
-    * 账号
-    */
-   @TableField("user_name")
-   private String userName;
-
-   @TableField("head")
-   private String head;
-
-
-}

+ 8 - 8
src/main/java/com/fdkankan/openApi/generate/AutoGenerate.java

@@ -21,7 +21,7 @@ public class AutoGenerate {
         String path =System.getProperty("user.dir");
         String path =System.getProperty("user.dir");
 
 
         generate(path,"openApi", getTables(new String[]{
         generate(path,"openApi", getTables(new String[]{
-                "t_camera_detail",
+                "t_account",
         }));
         }));
 
 
 //        generate(path,"goods", getTables(new String[]{
 //        generate(path,"goods", getTables(new String[]{
@@ -49,7 +49,7 @@ public class AutoGenerate {
 
 
 
 
     public static void  generate(String path,String moduleName,  List<String> tables){
     public static void  generate(String path,String moduleName,  List<String> tables){
-        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_v4",
+        FastAutoGenerator.create("jdbc:mysql://120.24.144.164:3306/4dkankan_open_api",
                 "root","4Dage@4Dage#@168")
                 "root","4Dage@4Dage#@168")
                 .globalConfig(builder -> {
                 .globalConfig(builder -> {
                     builder.author("")               //作者
                     builder.author("")               //作者
@@ -63,13 +63,13 @@ public class AutoGenerate {
                 .packageConfig(builder -> {
                 .packageConfig(builder -> {
                     builder.parent("com.fdkankan")
                     builder.parent("com.fdkankan")
                             .moduleName(moduleName)
                             .moduleName(moduleName)
-                            .entity("entity.www")
-                            .service("service.www")
-                            .serviceImpl("service.www.impl")
-                            .controller("controller.www")
-                            .mapper("mapper.www")
+                            .entity("entity.system")
+                            .service("service.system")
+                            .serviceImpl("service.system.impl")
+                            .controller("controller.system")
+                            .mapper("mapper.system")
                             .xml("test.mapper")
                             .xml("test.mapper")
-                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,path+"\\src\\main\\resources\\mapper\\"+moduleName + "\\www"));
+                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml,path+"\\src\\main\\resources\\mapper\\system"));
                 })
                 })
                 .strategyConfig(builder -> {
                 .strategyConfig(builder -> {
                     builder.addInclude(tables)
                     builder.addInclude(tables)

+ 18 - 0
src/main/java/com/fdkankan/openApi/mapper/system/IAccountMapper.java

@@ -0,0 +1,18 @@
+package com.fdkankan.openApi.mapper.system;
+
+import com.fdkankan.openApi.entity.system.Account;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 账号表 Mapper 接口
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Mapper
+public interface IAccountMapper extends BaseMapper<Account> {
+
+}

+ 1 - 1
src/main/java/com/fdkankan/openApi/mapper/system/IUserAuthMapper.java

@@ -16,7 +16,7 @@ import org.springframework.stereotype.Component;
  */
  */
 @Mapper
 @Mapper
 @Component("IUserAuthMapper")
 @Component("IUserAuthMapper")
-public interface IUserAuthMapper extends BaseMapper<UserAuthInfo> {
+public interface IUserAuthInfoMapper extends BaseMapper<UserAuthInfo> {
     int updateCallCounts(@Param("appKey") String appKey);
     int updateCallCounts(@Param("appKey") String appKey);
 
 
     int updateCallCountsByParam(@Param("appKey") String appKey, @Param("count") Integer count);
     int updateCallCountsByParam(@Param("appKey") String appKey, @Param("count") Integer count);

+ 0 - 20
src/main/java/com/fdkankan/openApi/mapper/system/IUsersMapper.java

@@ -1,20 +0,0 @@
-package com.fdkankan.openApi.mapper.system;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.fdkankan.openApi.entity.system.Users;
-import org.apache.ibatis.annotations.Mapper;
-import org.springframework.stereotype.Component;
-
-/**
- * <p>
- *  Mapper 接口
- * </p>
- *
- * @author 
- * @since 2023年2月10日14:38:33
- */
-@Mapper
-@Component("IUsersMapper")
-public interface IUsersMapper extends BaseMapper<Users> {
-
-}

+ 2 - 2
src/main/java/com/fdkankan/openApi/mq/listener/CallApiListener.java

@@ -3,7 +3,7 @@ package com.fdkankan.openApi.mq.listener;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.openApi.mq.dto.CallApiDTO;
 import com.fdkankan.openApi.mq.dto.CallApiDTO;
-import com.fdkankan.openApi.service.system.IUserAuthService;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Channel;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.Message;
@@ -27,7 +27,7 @@ import java.nio.charset.StandardCharsets;
 @Slf4j
 @Slf4j
 public class CallApiListener {
 public class CallApiListener {
     @Autowired
     @Autowired
-    IUserAuthService userAuthService;
+    IUserAuthInfoService userAuthService;
 
 
     /**
     /**
      * saveOrEdit
      * saveOrEdit

+ 22 - 0
src/main/java/com/fdkankan/openApi/service/system/IAccountService.java

@@ -0,0 +1,22 @@
+package com.fdkankan.openApi.service.system;
+
+import com.fdkankan.openApi.entity.system.Account;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 账号表 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+public interface IAccountService extends IService<Account> {
+
+    Account findByUserName(String userName);
+
+    Account findByUserName(String userName, Long userId, String head);
+
+    Account findByTokenCovUserName(String token);
+
+}

+ 10 - 4
src/main/java/com/fdkankan/openApi/service/system/IUserAuthService.java

@@ -11,11 +11,11 @@ import com.fdkankan.openApi.entity.system.UserAuthInfo;
  * @author
  * @author
  * @since 2022年12月19日09:44:17
  * @since 2022年12月19日09:44:17
  */
  */
-public interface IUserAuthService extends IService<UserAuthInfo> {
+public interface IUserAuthInfoService extends IService<UserAuthInfo> {
 
 
-    UserAuthInfo findByUserId(Integer userId);
+    UserAuthInfo findByUserId(long userId);
 
 
-    UserAuthInfo findByUserIdCreateIfNotExits(Integer userId);
+    UserAuthInfo findByUserIdCreateIfNotExits(long accountId, long userId);
 
 
     UserAuthInfo findByAppKey(String appKey);
     UserAuthInfo findByAppKey(String appKey);
 
 
@@ -25,6 +25,12 @@ public interface IUserAuthService extends IService<UserAuthInfo> {
 
 
     boolean updateCallCounts(String appKey, Integer count);
     boolean updateCallCounts(String appKey, Integer count);
 
 
-    public boolean updateCallCountsByType(String appKey, Integer count, Integer type);
+    boolean updateCallCountsByType(String appKey, Integer count, Integer type);
+
+    UserAuthInfo getEffectUserAuthInfo(String appKey);
+
+    void checkValidAppKey(String appKey);
+
+    void setReidsCount(String appKey, int count, boolean isInfinite);
 
 
 }
 }

+ 0 - 20
src/main/java/com/fdkankan/openApi/service/system/IUsersService.java

@@ -1,20 +0,0 @@
-package com.fdkankan.openApi.service.system;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.fdkankan.openApi.entity.system.Users;
-
-/**
- * <p>
- *  服务类
- * </p>
- *
- * @author 
- * @since  2022年12月19日09:44:17
- */
-public interface IUsersService extends IService<Users> {
-
-    Users findByUserName(String userName);
-    Users findByUserName(String userName, Integer fdkkId, String head);
-    Users findByTokenCovUserName(String token);
-
-}

+ 64 - 0
src/main/java/com/fdkankan/openApi/service/system/impl/AccountServiceImpl.java

@@ -0,0 +1,64 @@
+package com.fdkankan.openApi.service.system.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.fdkankan.openApi.entity.system.Account;
+import com.fdkankan.openApi.mapper.system.IAccountMapper;
+import com.fdkankan.openApi.service.system.IAccountService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.openApi.util.JwtUtil;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 账号表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2023-05-18
+ */
+@Service
+public class AccountServiceImpl extends ServiceImpl<IAccountMapper, Account> implements IAccountService {
+
+    @Override
+    public Account findByUserName(String userName) {
+        LambdaQueryWrapper<Account> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Account::getUserName, userName);
+        Account one = this.getOne(wrapper);
+        if (ObjectUtil.isNotNull(one)) {
+            return one;
+        } else {
+            Account u = new Account();
+            u.setUserName(userName);
+            this.save(u);
+            return u;
+        }
+    }
+
+    @Override
+    public Account findByUserName(String userName, Long userId, String head) {
+        LambdaQueryWrapper<Account> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(Account::getUserName, userName);
+        Account account = this.getOne(wrapper);
+        if (ObjectUtil.isNotNull(account)) {
+            if (ObjectUtil.isNull(account.getHead())) {
+                account.setHead(head);
+                updateById(account);
+            }
+            return account;
+        }
+        account = new Account();
+        account.setUserName(userName);
+        account.setUserId(userId);
+        account.setDescription("官网账号密码登录创建");
+        this.save(account);
+        return account;
+    }
+
+    @Override
+    public Account findByTokenCovUserName(String token) {
+        String userName = JwtUtil.getUserName(token);
+        return findByUserName(userName);
+    }
+
+}

+ 53 - 10
src/main/java/com/fdkankan/openApi/service/system/impl/UserAuthServiceImpl.java

@@ -4,50 +4,60 @@ import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fdkankan.common.constant.CommonStatus;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.openApi.constant.RedisKey;
 import com.fdkankan.openApi.constant.RedisKey;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
 import com.fdkankan.openApi.entity.system.UserAuthInfo;
-import com.fdkankan.openApi.mapper.system.IUserAuthMapper;
-import com.fdkankan.openApi.service.system.IUserAuthService;
-import com.fdkankan.openApi.util.JwtUtil;
+import com.fdkankan.openApi.exception.ApiBusinessException;
+import com.fdkankan.openApi.mapper.system.IUserAuthInfoMapper;
+import com.fdkankan.openApi.service.system.IUserAuthInfoService;
 import com.fdkankan.openApi.util.TokenUtil;
 import com.fdkankan.openApi.util.TokenUtil;
 import com.fdkankan.redis.util.RedisUtil;
 import com.fdkankan.redis.util.RedisUtil;
-import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.util.Calendar;
 import java.util.Objects;
 import java.util.Objects;
 
 
 @DS("system")
 @DS("system")
 @Service
 @Service
-public class UserAuthServiceImpl extends ServiceImpl<IUserAuthMapper, UserAuthInfo> implements IUserAuthService {
+public class UserAuthInfoInfoServiceImpl extends ServiceImpl<IUserAuthInfoMapper, UserAuthInfo> implements IUserAuthInfoService {
 
 
     @Autowired
     @Autowired
     RedisUtil redisUtil;
     RedisUtil redisUtil;
     @Autowired
     @Autowired
-    private IUserAuthService userAuthService;
+    private IUserAuthInfoService userAuthService;
 
 
 
 
     @Override
     @Override
-    public UserAuthInfo findByUserId(Integer userId) {
+    public UserAuthInfo findByUserId(long userId) {
         LambdaQueryWrapper<UserAuthInfo> wrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<UserAuthInfo> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(UserAuthInfo::getUserId, userId);
         wrapper.eq(UserAuthInfo::getUserId, userId);
         return getOne((wrapper));
         return getOne((wrapper));
     }
     }
 
 
     @Override
     @Override
-    public UserAuthInfo findByUserIdCreateIfNotExits(Integer userId) {
+    public UserAuthInfo findByUserIdCreateIfNotExits(long accountId, long userId) {
         UserAuthInfo userAuthInfo = this.findByUserId(userId);
         UserAuthInfo userAuthInfo = this.findByUserId(userId);
         if(Objects.nonNull(userAuthInfo)){
         if(Objects.nonNull(userAuthInfo)){
             return userAuthInfo;
             return userAuthInfo;
         }
         }
         userAuthInfo = new UserAuthInfo();
         userAuthInfo = new UserAuthInfo();
-        userAuthInfo.setUserId((long)userId);
+        userAuthInfo.setAccountId(accountId);
+        userAuthInfo.setUserId(userId);
         userAuthInfo.setAppKey(TokenUtil.createToken());
         userAuthInfo.setAppKey(TokenUtil.createToken());
-        userAuthInfo.setCallCounts(0);
+        userAuthInfo.setTotalCount(-1);
+        userAuthInfo.setCallCount(0);
+        userAuthInfo.setState(CommonStatus.YES.code().intValue());
+        userAuthInfo.setEffectTime(Calendar.getInstance().getTime());
         userAuthService.save(userAuthInfo);
         userAuthService.save(userAuthInfo);
+
+        this.setReidsCount(userAuthInfo.getAppKey(), -1, true);
+
         return userAuthInfo;
         return userAuthInfo;
     }
     }
 
 
@@ -108,4 +118,37 @@ public class UserAuthServiceImpl extends ServiceImpl<IUserAuthMapper, UserAuthIn
         }
         }
         return false;
         return false;
     }
     }
+
+    @Override
+    public UserAuthInfo getEffectUserAuthInfo(String appKey) {
+        UserAuthInfo userAuthInfo = this.findByAppKey(appKey);
+        if(Objects.isNull(userAuthInfo)){
+            throw new BusinessException(ErrorCode.APP_KEY_ILLEGAL);
+        }
+        if(CommonStatus.NO.code().intValue() == userAuthInfo.getState()){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_10000);
+        }
+        if(userAuthInfo.getEffectTime().before(Calendar.getInstance().getTime())){
+            throw new BusinessException(ErrorCode.FAILURE_CODE_10001);
+        }
+        return userAuthInfo;
+    }
+
+    @Override
+    public void checkValidAppKey(String appKey) {
+        String key = String.format(RedisKey.USER_APP_KEY_INFO, appKey);
+        if (!redisUtil.hasKey(key)){
+            this.getEffectUserAuthInfo(appKey);
+        }
+        redisUtil.set(key, appKey, 3600);
+    }
+
+    @Override
+    public void setReidsCount(String appKey, int count, boolean isInfinite) {
+        if(isInfinite){
+            redisUtil.sSet(RedisKey.API_METHOD_COUNT_INFINITE, appKey);
+            return;
+        }
+        redisUtil.incr(String.format(RedisKey.API_METHOD_COUNT, appKey), count);
+    }
 }
 }

+ 0 - 57
src/main/java/com/fdkankan/openApi/service/system/impl/UsersServiceImpl.java

@@ -1,57 +0,0 @@
-package com.fdkankan.openApi.service.system.impl;
-
-import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.dynamic.datasource.annotation.DS;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fdkankan.openApi.entity.system.Users;
-import com.fdkankan.openApi.mapper.system.IUsersMapper;
-import com.fdkankan.openApi.service.system.IUsersService;
-import com.fdkankan.openApi.util.JwtUtil;
-import org.springframework.stereotype.Service;
-
-@DS("system")
-@Service
-public class UsersServiceImpl extends ServiceImpl<IUsersMapper, Users> implements IUsersService {
-
-    @Override
-    public Users findByUserName(String userName) {
-        LambdaQueryWrapper<Users> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(Users::getUserName, userName);
-        Users one = this.getOne(wrapper);
-        if (ObjectUtil.isNotNull(one)) {
-            return one;
-        } else {
-            Users u = new Users();
-            u.setUserName(userName);
-            boolean save = save(u);
-            return u;
-        }
-    }
-
-    @Override
-    public Users findByUserName(String userName, Integer fdkkId, String head) {
-        LambdaQueryWrapper<Users> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(Users::getUserName, userName);
-        Users one = this.getOne(wrapper);
-        if (ObjectUtil.isNotNull(one)) {
-            if (ObjectUtil.isNull(one.getHead())) {
-                one.setHead(head);
-                updateById(one);
-            }
-            return one;
-        } else {
-            Users u = new Users();
-            u.setUserName(userName);
-            u.setId(fdkkId);
-            boolean save = save(u);
-            return u;
-        }
-    }
-
-    @Override
-    public Users findByTokenCovUserName(String token) {
-        String userName = JwtUtil.getUserName(token);
-        return findByUserName(userName);
-    }
-}

+ 12 - 0
src/main/java/com/fdkankan/openApi/vo/system/CreateAppUserParamVo.java

@@ -0,0 +1,12 @@
+package com.fdkankan.openApi.vo.system;
+
+import lombok.Data;
+
+@Data
+public class CreateAppUserParamVo {
+
+
+//    private String userName;
+//    private String
+
+}

+ 1 - 1
src/main/java/com/fdkankan/openApi/vo/www/FdkkUserVo.java

@@ -4,7 +4,7 @@ import lombok.Data;
 
 
 @Data
 @Data
 public class FdkkUserVo {
 public class FdkkUserVo {
-    private Integer id ;
+    private Long id ;
     private Integer fdkkId ;
     private Integer fdkkId ;
     private String userName;                    //用户名
     private String userName;                    //用户名
     private String head;                        //头像
     private String head;                        //头像

+ 5 - 0
src/main/resources/mapper/system/AccountMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fdkankan.openApi.mapper.system.IAccountMapper">
+
+</mapper>

+ 9 - 9
src/main/resources/mapper/system/UserMapper.xml

@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.fdkankan.openApi.mapper.system.IUserAuthMapper">
+<mapper namespace="com.fdkankan.openApi.mapper.system.IUserAuthInfoMapper">
 
 
     <update id="updateCallCounts">
     <update id="updateCallCounts">
-        update t_users_auth_info
-        set call_counts = call_counts -1
-        where call_counts > 0
+        update t_user_auth_info
+        set call_count = call_count -1
+        where call_count > 0
         <if test="appKey != null and appKey != ''">
         <if test="appKey != null and appKey != ''">
             and app_key = #{appKey}
             and app_key = #{appKey}
         </if>
         </if>
     </update>
     </update>
     <update id="updateCallCountsByParam">
     <update id="updateCallCountsByParam">
-        update t_users_auth_info
-        set call_counts = #{count}
+        update t_user_auth_info
+        set call_count = #{count}
         <where>
         <where>
             <if test="appKey != null and appKey != ''">
             <if test="appKey != null and appKey != ''">
                 app_key = #{appKey}
                 app_key = #{appKey}
@@ -20,12 +20,12 @@
         </where>
         </where>
     </update>
     </update>
     <update id="updateCallCountsByParamAndType">
     <update id="updateCallCountsByParamAndType">
-        update t_users_auth_info
+        update t_user_auth_info
             <if test="type != null and type == 1">
             <if test="type != null and type == 1">
-                set call_counts = call_counts+#{count}
+                set call_count = call_count+#{count}
             </if>
             </if>
             <if test="type != null and type == 2">
             <if test="type != null and type == 2">
-                set call_counts = call_counts-#{count}
+                set call_count = call_count-#{count}
             </if>
             </if>
         <where>
         <where>
             <if test="appKey != null and appKey != ''">
             <if test="appKey != null and appKey != ''">