From 6494ea506ad493cfce9328d1ccd3f28b99a9853e Mon Sep 17 00:00:00 2001 From: sh1yu <41428433@qq.com> Date: Fri, 12 Jan 2024 20:41:45 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=A4=9A=E6=A1=86=E6=9E=B6?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=9F=A5=E6=89=BESmsdao=E6=97=B6=E7=9A=84err?= =?UTF-8?q?or=E6=97=A5=E5=BF=97=E4=B8=BAinfo=202.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9C=A8springboot=E7=9A=84=E4=BE=9D=E8=B5=96=E4=B8=8B?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E7=94=A8smsReadConfig=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E4=BC=9A=E5=8F=91=E7=94=9F=E6=B8=A0=E9=81=93=E7=BA=A7=E4=B8=8A?= =?UTF-8?q?=E7=BA=BF=E6=8B=A6=E6=88=AA=E5=99=A8=E5=BC=82=E5=B8=B8=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms4j/core/proxy/SmsProxyFactory.java | 4 +- .../SingleBlendRestrictedProcessor.java | 4 ++ .../adepter/ConfigCombineMapAdeptor.java | 41 +++++++++++++++++++ .../starter/config/SmsBlendsInitializer.java | 38 +++++++++++++++-- .../sms4j/starter/config/SupplierConfig.java | 7 +++- 5 files changed, 87 insertions(+), 7 deletions(-) create mode 100644 sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/adepter/ConfigCombineMapAdeptor.java diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java index 5da1a4ba..bb3cdcf5 100644 --- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java +++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java @@ -89,7 +89,7 @@ public abstract class SmsProxyFactory { if (null != smsDao) { return smsDao; } - log.error("尝试框架加载失败,最终使用默认SmsDao!"); + log.info("尝试框架加载失败,最终使用默认SmsDao!"); return SmsDaoDefaultImpl.getInstance(); } @@ -100,7 +100,7 @@ public abstract class SmsProxyFactory { Method getSmsDao = clazz.getMethod("getSmsDao", null); return (SmsDao) getSmsDao.invoke(null, null); } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { - log.error("{}:加载SmsDao失败,尝试其他框架加载......", frameworkName); + log.info("{}:加载SmsDao失败,尝试其他框架加载......", frameworkName); } return null; } diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/SingleBlendRestrictedProcessor.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/SingleBlendRestrictedProcessor.java index 8ba4f583..987b5ac7 100644 --- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/SingleBlendRestrictedProcessor.java +++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/SingleBlendRestrictedProcessor.java @@ -52,6 +52,10 @@ public class SingleBlendRestrictedProcessor implements SmsProcessor, SmsDaoAware String configId = smsBlend.getConfigId(); Map targetConfig = (Map) smsBlendsConfig.get(configId); Object maximumObj = targetConfig.get("maximum"); + if (null == maximumObj) { + log.info("配置信息未能加载到本拦截器,跳过渠道级上限前置拦截执行器"); + return param; + } if (SmsUtils.isEmpty(maximumObj)) { return param; } diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/adepter/ConfigCombineMapAdeptor.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/adepter/ConfigCombineMapAdeptor.java new file mode 100644 index 00000000..18223cb4 --- /dev/null +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/adepter/ConfigCombineMapAdeptor.java @@ -0,0 +1,41 @@ +package org.dromara.sms4j.starter.adepter; + +import cn.hutool.core.bean.BeanUtil; +import org.dromara.sms4j.core.datainterface.SmsReadConfig; +import org.dromara.sms4j.provider.config.BaseConfig; + +import java.util.*; + +public class ConfigCombineMapAdeptor extends HashMap { + public M get(Object key) { + Object o = super.get(key); + if (null == o){ + Set configKeySet = this.keySet(); + for (Object insideMapKey : configKeySet) { + if (((String)insideMapKey).startsWith(SmsReadConfig.class.getSimpleName())){ + Map smsBlendsConfigInsideMap = (Map) this.get(insideMapKey); + SmsReadConfig config = (SmsReadConfig) smsBlendsConfigInsideMap.get(insideMapKey); + BaseConfig supplierConfig = config.getSupplierConfig((String)key); + List supplierConfigList = config.getSupplierConfigList(); + if (null == supplierConfigList){ + supplierConfigList = new ArrayList<>(); + } + if (null != supplierConfig){ + supplierConfigList.add(supplierConfig); + } + for (BaseConfig baseConfig : supplierConfigList) { + if (key.equals(baseConfig.getConfigId())){ + Map configMap = BeanUtil.beanToMap(baseConfig); + this.put(baseConfig.getConfigId(),configMap); + return (M)configMap; + } + } + } + } + return null; + } + return (M)o; + } + + +} diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java index 8ae6b2d3..90e4c3eb 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java @@ -11,6 +11,7 @@ import org.dromara.sms4j.cloopen.config.CloopenFactory; import org.dromara.sms4j.comm.constant.Constant; import org.dromara.sms4j.comm.enumerate.ConfigType; import org.dromara.sms4j.comm.utils.SmsUtils; +import org.dromara.sms4j.core.datainterface.SmsReadConfig; import org.dromara.sms4j.core.proxy.EnvirmentHolder; import org.dromara.sms4j.core.factory.SmsFactory; import org.dromara.sms4j.core.proxy.processor.*; @@ -25,11 +26,14 @@ import org.dromara.sms4j.netease.config.NeteaseFactory; import org.dromara.sms4j.provider.config.SmsConfig; import org.dromara.sms4j.provider.factory.BaseProviderFactory; import org.dromara.sms4j.provider.factory.ProviderFactoryHolder; +import org.dromara.sms4j.starter.adepter.ConfigCombineMapAdeptor; import org.dromara.sms4j.tencent.config.TencentFactory; import org.dromara.sms4j.unisms.config.UniFactory; import org.dromara.sms4j.yunpian.config.YunPianFactory; import org.dromara.sms4j.zhutong.config.ZhutongFactory; +import org.springframework.beans.factory.ObjectProvider; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,14 +44,16 @@ public class SmsBlendsInitializer { private final SmsConfig smsConfig; private final Map> blends; + private final ObjectProvider extendsSmsConfigs; public SmsBlendsInitializer(List> factoryList, SmsConfig smsConfig, - Map> blends - ){ + Map> blends, + ObjectProvider extendsSmsConfigs){ this.factoryList = factoryList; this.smsConfig = smsConfig; this.blends = blends; + this.extendsSmsConfigs = extendsSmsConfigs; onApplicationEvent(); } @@ -58,7 +64,33 @@ public class SmsBlendsInitializer { if(ConfigType.YAML.equals(this.smsConfig.getConfigType())) { //持有初始化配置信息 - EnvirmentHolder.frozenEnvirmet(smsConfig, blends); + Map> blendsInclude = new ConfigCombineMapAdeptor>(); + blendsInclude.putAll(this.blends); + int num = 0; + for (SmsReadConfig smsReadConfig : extendsSmsConfigs) { + String key = SmsReadConfig.class.getSimpleName() + num; + Map insideMap = new HashMap<>(); + insideMap.put(key,smsReadConfig); + blendsInclude.put(key,insideMap); + num++; + /* BaseConfig supplierConfig = smsReadConfig.getSupplierConfig(""); + List supplierConfigList = smsReadConfig.getSupplierConfigList(); + if(null != supplierConfigList){ + supplierConfigList.add(supplierConfig); + for (BaseConfig config : supplierConfigList) { + String key = SmsReadConfig.class.getSimpleName() + num; + Map insideMap = new HashMap<>(); + insideMap.put(key,supplierConfig); + blendsInclude.put(key,insideMap); + num++; + } + }else { + if(null != supplierConfig){ + + } + }*/ + } + EnvirmentHolder.frozenEnvirmet(smsConfig, blendsInclude); //注册执行器实现 SmsProxyFactory.addProcessor(new RestrictedProcessor()); SmsProxyFactory.addProcessor(new BlackListProcessor()); diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java index 567778d8..14722f0d 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SupplierConfig.java @@ -5,8 +5,10 @@ import lombok.SneakyThrows; import org.dromara.sms4j.api.SmsBlend; import org.dromara.sms4j.comm.constant.Constant; import org.dromara.sms4j.comm.enumerate.ConfigType; +import org.dromara.sms4j.core.datainterface.SmsReadConfig; import org.dromara.sms4j.provider.config.SmsConfig; import org.dromara.sms4j.provider.factory.BaseProviderFactory; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.ConfigurationProperties; @@ -53,8 +55,9 @@ public class SupplierConfig { @Bean protected SmsBlendsInitializer smsBlendsInitializer(List> factoryList, SmsConfig smsConfig, - Map> blends) { - return new SmsBlendsInitializer(factoryList, smsConfig, blends); + Map> blends, + ObjectProvider extendsSmsConfigs) { + return new SmsBlendsInitializer(factoryList, smsConfig, blends, extendsSmsConfigs); } }