From ae5dd42e3a01365d78c4e7c4c27941a8f97abad0 Mon Sep 17 00:00:00 2001 From: zhenghaoyu Date: Tue, 14 May 2024 17:23:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=E6=A8=A1=E6=8B=9F=E7=99=BB=E5=BD=95?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=88=86=E5=B8=83=E5=BC=8F=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../aspect/JobAnnotationAspect.java | 45 ++++++++++------- .../basicdata/aspect/JobAnnotationAspect.java | 41 ++++++++++------ .../jinpai/aspect/JobAnnotationAspect.java | 41 ++++++++++------ .../factory/aspect/JobAnnotationAspect.java | 41 ++++++++++------ .../config/InterceptorAdapterConfig.java | 6 ++- .../LocalServerLoginAccountsInterceptor.java | 42 ++++++++++------ .../patch/aspect/JobAnnotationAspect.java | 41 ++++++++++------ .../config/InterceptorAdapterConfig.java | 5 +- .../warehouse/config/RedissonConfig.java | 49 ++++++++----------- .../LocalServerLoginAccountsInterceptor.java | 39 +++++++++------ 10 files changed, 210 insertions(+), 140 deletions(-) diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java index 609decb6e..4a49f3c0f 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/aspect/JobAnnotationAspect.java @@ -8,12 +8,11 @@ import lombok.AllArgsConstructor; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.aspectj.lang.reflect.MethodSignature; -import org.springblade.common.annotations.LogpmAsync; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.redis.cache.BladeRedis; -import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -22,10 +21,10 @@ import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import java.lang.reflect.Method; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Aspect @Component @@ -33,6 +32,7 @@ import java.util.Objects; public class JobAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { @@ -59,25 +59,32 @@ public class JobAnnotationAspect { } - private JSONObject mockLogin(){ + private JSONObject mockLogin() throws InterruptedException { String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } return data; } diff --git a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java index 9409e560c..64825908c 100644 --- a/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java +++ b/blade-service/logpm-basicdata/src/main/java/com/logpm/basicdata/aspect/JobAnnotationAspect.java @@ -11,6 +11,8 @@ import org.aspectj.lang.annotation.Aspect; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -22,6 +24,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Aspect @Component @@ -29,6 +32,7 @@ import java.util.Objects; public class JobAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { @@ -55,25 +59,32 @@ public class JobAnnotationAspect { } - private JSONObject mockLogin(){ + private JSONObject mockLogin() throws InterruptedException { String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } return data; } diff --git a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java index 250c4d8d6..6e8ed4cf6 100644 --- a/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java +++ b/blade-service/logpm-factory-data/logpm-factory-data-jinpai/src/main/java/com/logpm/factorydata/jinpai/aspect/JobAnnotationAspect.java @@ -11,6 +11,8 @@ import org.aspectj.lang.annotation.Aspect; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -22,6 +24,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Aspect @Component @@ -29,6 +32,7 @@ import java.util.Objects; public class JobAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { @@ -55,25 +59,32 @@ public class JobAnnotationAspect { } - private JSONObject mockLogin(){ + private JSONObject mockLogin() throws InterruptedException { String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } return data; } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java index e90fe3e7e..731bdc02e 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/aspect/JobAnnotationAspect.java @@ -11,6 +11,8 @@ import org.aspectj.lang.annotation.Aspect; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -22,6 +24,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Aspect @Component @@ -29,6 +32,7 @@ import java.util.Objects; public class JobAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { @@ -55,25 +59,32 @@ public class JobAnnotationAspect { } - private JSONObject mockLogin(){ + private JSONObject mockLogin() throws InterruptedException { String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } return data; } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/config/InterceptorAdapterConfig.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/config/InterceptorAdapterConfig.java index d16d65a3b..190350ed0 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/config/InterceptorAdapterConfig.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/config/InterceptorAdapterConfig.java @@ -7,9 +7,9 @@ import com.logpm.factory.interceptor.ZbFactoryAccountsInterceptor; import com.logpm.factory.props.ZbFactoryProperties; import lombok.AllArgsConstructor; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.RedisLockClient; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; -import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -25,6 +25,8 @@ public class InterceptorAdapterConfig implements WebMvcConfigurer { private final Environment environment; + private final RedisLockClient redisLockClient; + @Override public void addInterceptors(InterceptorRegistry interceptorRegistry) { @@ -36,7 +38,7 @@ public class InterceptorAdapterConfig implements WebMvcConfigurer { .excludePathPatterns("/factory/common/**").order(2); interceptorRegistry.addInterceptor(new ZbFactoryAccountsInterceptor(zbFactoryProperties)) .addPathPatterns("/factory/zb/**").order(3); - interceptorRegistry.addInterceptor(new LocalServerLoginAccountsInterceptor(redis,environment)).addPathPatterns("/**").order(1); + interceptorRegistry.addInterceptor(new LocalServerLoginAccountsInterceptor(redis,environment,redisLockClient)).addPathPatterns("/**").order(1); } } diff --git a/blade-service/logpm-factory/src/main/java/com/logpm/factory/interceptor/LocalServerLoginAccountsInterceptor.java b/blade-service/logpm-factory/src/main/java/com/logpm/factory/interceptor/LocalServerLoginAccountsInterceptor.java index a33a25e80..9fdfd6a3e 100644 --- a/blade-service/logpm-factory/src/main/java/com/logpm/factory/interceptor/LocalServerLoginAccountsInterceptor.java +++ b/blade-service/logpm-factory/src/main/java/com/logpm/factory/interceptor/LocalServerLoginAccountsInterceptor.java @@ -3,13 +3,15 @@ package com.logpm.factory.interceptor; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; -import org.springblade.common.wrapper.CustomHttpServletRequestWrapper; import lombok.AllArgsConstructor; import lombok.extern.log4j.Log4j2; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.common.exception.CustomerException; +import org.springblade.common.wrapper.CustomHttpServletRequestWrapper; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; @@ -25,6 +27,7 @@ import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Log4j2 @AllArgsConstructor @@ -32,6 +35,8 @@ public class LocalServerLoginAccountsInterceptor extends HandlerInterceptorAdapt private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws CustomerException { @@ -41,20 +46,27 @@ public class LocalServerLoginAccountsInterceptor extends HandlerInterceptorAdapt String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - cn.hutool.http.HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } // 修改或添加header diff --git a/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java b/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java index 0e315907c..8005a9479 100644 --- a/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java +++ b/blade-service/logpm-patch/src/main/java/com/logpm/patch/aspect/JobAnnotationAspect.java @@ -11,6 +11,8 @@ import org.aspectj.lang.annotation.Aspect; import org.springblade.common.cache.CacheNames; import org.springblade.common.constant.LauncherConstant; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; import org.springframework.http.HttpHeaders; @@ -22,6 +24,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Aspect @Component @@ -29,6 +32,7 @@ import java.util.Objects; public class JobAnnotationAspect { private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; @Around("@annotation(com.xxl.job.core.handler.annotation.XxlJob)") public Object xxlJobAnnotationMethods(ProceedingJoinPoint joinPoint) throws Throwable { @@ -55,25 +59,32 @@ public class JobAnnotationAspect { } - private JSONObject mockLogin(){ + private JSONObject mockLogin() throws InterruptedException { String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } return data; } diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/InterceptorAdapterConfig.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/InterceptorAdapterConfig.java index edebf374b..2325d0ac1 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/InterceptorAdapterConfig.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/InterceptorAdapterConfig.java @@ -3,6 +3,7 @@ package com.logpm.warehouse.config; import com.logpm.warehouse.config.interceptor.LocalServerLoginAccountsInterceptor; import lombok.AllArgsConstructor; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.RedisLockClient; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; @@ -16,9 +17,11 @@ public class InterceptorAdapterConfig implements WebMvcConfigurer { private final Environment environment; + private final RedisLockClient redisLockClient; + @Override public void addInterceptors(InterceptorRegistry interceptorRegistry) { - interceptorRegistry.addInterceptor(new LocalServerLoginAccountsInterceptor(redis,environment)).addPathPatterns("/oldpush/**").order(1); + interceptorRegistry.addInterceptor(new LocalServerLoginAccountsInterceptor(redis,environment,redisLockClient)).addPathPatterns("/oldpush/**").order(1); } } diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/RedissonConfig.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/RedissonConfig.java index e40cd71fe..3c93a4097 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/RedissonConfig.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/RedissonConfig.java @@ -1,35 +1,26 @@ package com.logpm.warehouse.config; -import org.redisson.Redisson; -import org.redisson.config.Config; -import org.springblade.core.redis.cache.BladeRedis; -import org.springblade.core.tool.utils.SpringUtil; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; - -@Configuration +//@Configuration public class RedissonConfig { - @Bean - public Redisson redisson() { - // 单机模式 - Config config = new Config(); - - BladeRedis bean = SpringUtil.getBean(BladeRedis.class); - - RedisConnectionFactory connectionFactory = bean.getRedisTemplate().getConnectionFactory(); - - LettuceConnectionFactory factory = (LettuceConnectionFactory) connectionFactory; - - String hostName = factory.getHostName(); - int port = factory.getPort(); - String password = factory.getPassword(); - - config.useSingleServer().setAddress("redis://"+hostName+":"+port).setDatabase(2); - config.useSingleServer().setPassword(password); - return (Redisson) Redisson.create(config); - } +// @Bean +// public Redisson redisson() { +// // 单机模式 +// Config config = new Config(); +// +// BladeRedis bean = SpringUtil.getBean(BladeRedis.class); +// +// RedisConnectionFactory connectionFactory = bean.getRedisTemplate().getConnectionFactory(); +// +// LettuceConnectionFactory factory = (LettuceConnectionFactory) connectionFactory; +// +// String hostName = factory.getHostName(); +// int port = factory.getPort(); +// String password = factory.getPassword(); +// +// config.useSingleServer().setAddress("redis://"+hostName+":"+port).setDatabase(2); +// config.useSingleServer().setPassword(password); +// return (Redisson) Redisson.create(config); +// } } diff --git a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/interceptor/LocalServerLoginAccountsInterceptor.java b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/interceptor/LocalServerLoginAccountsInterceptor.java index 223c1c2ec..ecffd08ab 100644 --- a/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/interceptor/LocalServerLoginAccountsInterceptor.java +++ b/blade-service/logpm-warehouse/src/main/java/com/logpm/warehouse/config/interceptor/LocalServerLoginAccountsInterceptor.java @@ -10,6 +10,8 @@ import org.springblade.common.constant.LauncherConstant; import org.springblade.common.exception.CustomerException; import org.springblade.common.wrapper.CustomHttpServletRequestWrapper; import org.springblade.core.redis.cache.BladeRedis; +import org.springblade.core.redis.lock.LockType; +import org.springblade.core.redis.lock.RedisLockClient; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.ThreadLocalUtil; import org.springframework.core.env.Environment; @@ -25,6 +27,7 @@ import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; import java.util.Objects; +import java.util.concurrent.TimeUnit; @Log4j2 @AllArgsConstructor @@ -32,6 +35,7 @@ public class LocalServerLoginAccountsInterceptor extends HandlerInterceptorAdapt private final BladeRedis bladeRedis; private final Environment environment; + private final RedisLockClient redisLockClient; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws CustomerException { @@ -41,20 +45,27 @@ public class LocalServerLoginAccountsInterceptor extends HandlerInterceptorAdapt String account ="shujutongbu"; JSONObject data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); if(Objects.isNull(data)){ - String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; - HttpRequest urlRequest = HttpRequest.post(url); - urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); - urlRequest.header("Tenant-Id", "627683"); - - Map params = new HashMap<>(); - params.put("grant_type", "local_server"); - params.put("scope", "all"); - params.put("username", account); - params.put("tenantId", "627683"); - HttpResponse execute = urlRequest.form(params).execute(); - String body = execute.body(); - data = JSONObject.parseObject(body); - bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,3200L); + boolean flag = redisLockClient.tryLock("local_server_user", LockType.FAIR, 5000, 10000, TimeUnit.MILLISECONDS); + if(flag){ + data =bladeRedis.get(CacheNames.LOCAL_SERVER_USER+account); + if(Objects.isNull(data)){ + String url = "http://"+ LauncherConstant.loginAddr(Objects.requireNonNull(environment.getActiveProfiles()[0]))+"/blade-auth/oauth/token"; + HttpRequest urlRequest = HttpRequest.post(url); + urlRequest.header("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0"); + urlRequest.header("Tenant-Id", "627683"); + + Map params = new HashMap<>(); + params.put("grant_type", "local_server"); + params.put("scope", "all"); + params.put("username", account); + params.put("tenantId", "627683"); + HttpResponse execute = urlRequest.form(params).execute(); + String body = execute.body(); + data = JSONObject.parseObject(body); + bladeRedis.setEx(CacheNames.LOCAL_SERVER_USER+account,data,20L); + redisLockClient.unLock("local_server_user", LockType.FAIR); + } + } } // 修改或添加header From 8730d2ad45c4e2ca0fcf298c7b92f58497777ebe Mon Sep 17 00:00:00 2001 From: PigBaoBei <2739175034@qq.com> Date: Tue, 14 May 2024 17:41:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=87=E8=B4=A7=E5=BA=93=E4=BD=8D?= =?UTF-8?q?=E4=B8=8A=E6=9E=B6=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DistributionStockupAppController.java | 46 ++++++++++--------- .../impl/DistributionStockupServiceImpl.java | 19 ++++---- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java index 2f075907a..8310af7b6 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/appcontroller/DistributionStockupAppController.java @@ -1461,14 +1461,16 @@ public class DistributionStockupAppController extends BladeController { String audioValue = DictBizCache.getValue(DictBizConstant.PDA_AUDIO, PdaAudioLingoStatus.saomiaochenggong.getValue()); //进行备货库位上架 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("warehouseId", myCurrentWarehouse.getId()); - jsonObject.put("code",packetBarCode); -// jsonObject.put("stockUpAllocationId", stockupDTO.getStockupAllocationId()); - jsonObject.put("type", 2); - jsonObject.put("num", 1); - //TODO - warehouseUpdownStockUpAreaClient.upStockUpShelf(jsonObject); + if (!Func.isEmpty(stockupDTO.getStockupAllocationId())){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("warehouseId", myCurrentWarehouse.getId()); + jsonObject.put("code",packetBarCode); + jsonObject.put("stockUpAllocationId", stockupDTO.getStockupAllocationId()); + jsonObject.put("type", 2); + jsonObject.put("num", 1); + warehouseUpdownStockUpAreaClient.upStockUpShelf(jsonObject); + } + //扫码成功 return Resp.scanSuccess(PdaAudioLingoStatus.saomiaochenggong.getName(), audioValue); case 2: @@ -1534,7 +1536,7 @@ public class DistributionStockupAppController extends BladeController { String packetBarCode = stockupDTO.getPacketBarCode();//包件码 Long stockupId = stockupDTO.getStockupId();//备货任务ID Long reservationId = stockupDTO.getReservationId();//预约单id - Long stockUpAllocationId = stockupDTO.getStockupAllocationId();//备货库位ID +// Long stockUpAllocationId = stockupDTO.getStockupAllocationId();//备货库位ID if (Objects.isNull(myCurrentWarehouse)) { log.warn("##################stockupScan: 未选择仓库,订单自编号为空"); return R.fail(403,"未授权!!"); @@ -1555,10 +1557,10 @@ public class DistributionStockupAppController extends BladeController { log.warn("##################stockupScan: 包件扫码,预约单id为空"); return R.fail("包件扫码:预约单id不能为空"); } - if (Objects.isNull(stockUpAllocationId)) { - log.warn("##################stockupScan: 备货库位不存在,stockUpAllocationId:{}",stockUpAllocationId); - return Resp.scanFail("请扫描备货库位","请扫描备货库位"); - } +// if (Objects.isNull(stockUpAllocationId)) { +// log.warn("##################stockupScan: 备货库位不存在,stockUpAllocationId:{}",stockUpAllocationId); +// return Resp.scanFail("请扫描备货库位","请扫描备货库位"); +// } Integer integer = distributionStockupService.selectPackage(stockupDTO); switch (integer) { @@ -1654,14 +1656,16 @@ public class DistributionStockupAppController extends BladeController { }); //查询是否货位数据是否该下架 - JSONObject jsonObject = new JSONObject(); - jsonObject.put("warehouseId", myCurrentWarehouse.getId()); - jsonObject.put("code",packetBarCode); - jsonObject.put("stockUpAllocationId", stockupDTO.getStockupAllocationId()); - jsonObject.put("type", 1); - jsonObject.put("num", 1); - //进行了备货库位的选择才进行备货库位的上架 - warehouseUpdownStockUpAreaClient.upStockUpShelf(jsonObject); + if (!Func.isEmpty(stockupDTO.getStockupAllocationId())){ + JSONObject jsonObject = new JSONObject(); + jsonObject.put("warehouseId", myCurrentWarehouse.getId()); + jsonObject.put("code",packetBarCode); + jsonObject.put("stockUpAllocationId", stockupDTO.getStockupAllocationId()); + jsonObject.put("type", 1); + jsonObject.put("num", 1); + //进行了备货库位的选择才进行备货库位的上架 + warehouseUpdownStockUpAreaClient.upStockUpShelf(jsonObject); + } //修改包件备货状态 DistributionParcelListEntity parcelListEntity = new DistributionParcelListEntity(); parcelListEntity.setId(entity.getParcelListId()); diff --git a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java index 5ea0ac7ad..8cd285367 100644 --- a/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java +++ b/blade-service/logpm-distribution/src/main/java/com/logpm/distribution/service/impl/DistributionStockupServiceImpl.java @@ -2692,15 +2692,16 @@ public class DistributionStockupServiceImpl extends BaseServiceImpl