From 1683fdaacf8b92dc886017b6d9bb8ebc4de76ac2 Mon Sep 17 00:00:00 2001 From: landaiqing <3517283258@qq.com> Date: Sun, 12 May 2024 13:34:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=9F=AD=E4=BF=A1=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{SmsReadConfig.java => SmsConfig.java} | 3 +- .../application/config/SmsInitConfig.java | 45 ++++++++++---- .../context/SmsConfigContext.java} | 6 +- .../auth/application/context/package-info.md | 1 - .../controller/SchisandraSmsController.java | 25 +++----- .../handler/AlibabaSmsHandler.java | 3 + .../handler/TencentSmsHandler.java | 61 +++++++++++++++++++ .../auth/common/enums/SmsSupplierType.java | 2 +- 8 files changed, 110 insertions(+), 36 deletions(-) rename schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/{SmsReadConfig.java => SmsConfig.java} (89%) rename schisandra-cloud-storage-auth/{schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/constants/SmsConfigConstant.java => schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/SmsConfigContext.java} (70%) delete mode 100644 schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/package-info.md create mode 100644 schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/TencentSmsHandler.java diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsReadConfig.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsConfig.java similarity index 89% rename from schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsReadConfig.java rename to schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsConfig.java index d5df0ab..9329b4b 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsReadConfig.java +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsConfig.java @@ -2,6 +2,7 @@ package com.schisandra.auth.application.config; import com.schisandra.auth.application.factory.SmsTypeHandlerFactory; import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler; +import org.dromara.sms4j.core.datainterface.SmsReadConfig; import org.dromara.sms4j.provider.config.BaseConfig; import org.springframework.stereotype.Component; @@ -18,7 +19,7 @@ import java.util.List; * @Version: 1.0 */ @Component -public class SmsReadConfig implements org.dromara.sms4j.core.datainterface.SmsReadConfig { +public class SmsConfig implements SmsReadConfig { @Resource diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsInitConfig.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsInitConfig.java index 06813c8..7e6a03a 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsInitConfig.java +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/config/SmsInitConfig.java @@ -1,32 +1,53 @@ package com.schisandra.auth.application.config; -import com.schisandra.auth.common.constants.SmsConfigConstant; +import cn.hutool.core.util.ObjectUtil; +import com.schisandra.auth.application.context.SmsConfigContext; import com.schisandra.auth.common.redis.RedisUtil; import com.schisandra.auth.infra.entity.SmsConfigInfo; import com.schisandra.auth.infra.rpc.SmsConfigRpc; +import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.core.factory.SmsFactory; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.context.event.EventListener; +import org.springframework.context.SmartLifecycle; +import org.springframework.stereotype.Component; import javax.annotation.Resource; -//@Configuration -public class SmsInitConfig { +@Component +@Slf4j +public class SmsInitConfig implements SmartLifecycle { @Resource - SmsReadConfig smsReadConfig; + SmsConfig smsConfig; @Resource SmsConfigRpc smsConfigRpc; @Resource RedisUtil redisUtil; + private final String smsConfigPrefix="sys.config.sms"; - @EventListener - public void init(ContextRefreshedEvent event) { - SmsConfigInfo configInfo = smsConfigRpc.getConfigInfo(SmsConfigConstant.SMS_CONFIG_KEY); - redisUtil.set(SmsConfigConstant.SMS_CONFIG_KEY, configInfo.getConfigValue()); + public void init() { + SmsConfigInfo configInfo = smsConfigRpc.getConfigInfo(SmsConfigContext.SMS_CONFIG_KEY); + String key = redisUtil.buildKey(smsConfigPrefix, SmsConfigContext.SMS_CONFIG_KEY); + redisUtil.set(key, configInfo.getConfigValue()); + if (ObjectUtil.isEmpty(configInfo)){ + log.info("短信配置获取失败!"); + } // 初始化短信配置 - SmsFactory.createSmsBlend(smsReadConfig, configInfo.getConfigValue()); + SmsFactory.createSmsBlend(smsConfig, configInfo.getConfigValue()); + } + + @Override + public void start() { + this.init(); + } + + @Override + public void stop() { + + } + + @Override + public boolean isRunning() { + return false; } } diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/constants/SmsConfigConstant.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/SmsConfigContext.java similarity index 70% rename from schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/constants/SmsConfigConstant.java rename to schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/SmsConfigContext.java index bab3a9c..474fc4b 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/constants/SmsConfigConstant.java +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/SmsConfigContext.java @@ -1,7 +1,7 @@ -package com.schisandra.auth.common.constants; +package com.schisandra.auth.application.context; /** - * @Classname SmsConfigConstant + * @Classname SmsConfigContext * @BelongsProject: schisandra-cloud-storage * @BelongsPackage: com.schisandra.auth.common.constants * @Author: landaiqing @@ -9,6 +9,6 @@ package com.schisandra.auth.common.constants; * @Description: TODO * @Version: 1.0 */ -public class SmsConfigConstant { +public class SmsConfigContext { public static final String SMS_CONFIG_KEY = "sms_config_id"; } diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/package-info.md b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/package-info.md deleted file mode 100644 index 5d0b822..0000000 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/context/package-info.md +++ /dev/null @@ -1 +0,0 @@ -controller 应用上下文 \ No newline at end of file diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraSmsController.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraSmsController.java index b978f1d..2fbcd30 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraSmsController.java +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/controller/SchisandraSmsController.java @@ -1,17 +1,11 @@ package com.schisandra.auth.application.controller; -import com.schisandra.auth.application.config.SmsReadConfig; -import com.schisandra.auth.application.factory.SmsTypeHandlerFactory; -import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler; -import com.schisandra.auth.common.constants.SmsConfigConstant; +import com.schisandra.auth.application.context.SmsConfigContext; import com.schisandra.auth.common.entity.Result; import com.schisandra.auth.common.redis.RedisUtil; import com.schisandra.auth.common.utils.SmsCodeUtils; -import com.schisandra.auth.infra.entity.SmsConfigInfo; -import com.schisandra.auth.infra.rpc.SmsConfigRpc; import lombok.extern.slf4j.Slf4j; -import org.dromara.sms4j.api.SmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; import org.dromara.sms4j.core.factory.SmsFactory; import org.springframework.web.bind.annotation.GetMapping; @@ -28,11 +22,6 @@ import static java.util.concurrent.TimeUnit.SECONDS; public class SchisandraSmsController { @Resource private RedisUtil redisUtil; - @Resource - private SmsReadConfig smsReadConfig; - - @Resource - SmsConfigRpc smsConfigRpc; private final String authPhonePrefix="auth.phone"; private final String smsConfigPrefix="sys.config.sms"; @@ -48,11 +37,11 @@ public class SchisandraSmsController { String prefix = redisUtil.buildKey(authPhonePrefix, phone); String code = SmsCodeUtils.generateValidateCode(4).toString(); if (!redisUtil.exist(prefix)){ - SmsConfigInfo configInfo = smsConfigRpc.getConfigInfo(SmsConfigConstant.SMS_CONFIG_KEY); - String key = redisUtil.buildKey(smsConfigPrefix, SmsConfigConstant.SMS_CONFIG_KEY); - redisUtil.set(key, configInfo.getConfigValue()); - SmsFactory.createSmsBlend(smsReadConfig, configInfo.getConfigValue()); - String configId = redisUtil.get(SmsConfigConstant.SMS_CONFIG_KEY); + String key = redisUtil.buildKey(smsConfigPrefix, SmsConfigContext.SMS_CONFIG_KEY); + String configId = redisUtil.get(key); + if (configId == null){ + log.error("短信配置不存在!"); + } SmsResponse smsResponse=SmsFactory.getSmsBlend(configId).sendMessage(phone,code); if (smsResponse.isSuccess()){ redisUtil.setNx(prefix, code, 60L* 5,SECONDS); @@ -61,7 +50,7 @@ public class SchisandraSmsController { return Result.fail("短信发送失败,请重试!"); } }else { - return Result.fail("已发送。请注意查看!"); + return Result.fail("已发送,请注意查看!"); } } diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/AlibabaSmsHandler.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/AlibabaSmsHandler.java index 2b05326..b381e00 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/AlibabaSmsHandler.java +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/AlibabaSmsHandler.java @@ -5,6 +5,7 @@ import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO; import com.schisandra.auth.common.enums.SmsSupplierType; import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO; import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.dromara.sms4j.aliyun.config.AlibabaConfig; import org.dromara.sms4j.provider.config.BaseConfig; @@ -22,6 +23,7 @@ import javax.annotation.Resource; * @Version: 1.0 */ @Component +@Slf4j public class AlibabaSmsHandler implements SchisandraSmsTypeHandler{ @Resource SchisandraSmsConfigDomainService schisandraSmsConfigDomainService; @@ -35,6 +37,7 @@ public class AlibabaSmsHandler implements SchisandraSmsTypeHandler{ SchisandraSmsConfigBO schisandraSmsConfigBO = schisandraSmsConfigDomainService.queryByConfigId(configId); SchisandraSmsConfigDTO schisandraSmsConfigDTO = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTO(schisandraSmsConfigBO); if (ObjectUtils.isEmpty(schisandraSmsConfigDTO)){ + log.error("阿里云短信配置信息获取失败"); return null; } AlibabaConfig alibabaConfig=new AlibabaConfig(); diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/TencentSmsHandler.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/TencentSmsHandler.java new file mode 100644 index 0000000..fa0ee90 --- /dev/null +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-application/schisandra-cloud-storage-auth-application-controller/src/main/java/com/schisandra/auth/application/handler/TencentSmsHandler.java @@ -0,0 +1,61 @@ +package com.schisandra.auth.application.handler; + +import com.schisandra.auth.application.convert.SchisandraSmsConfigDTOConvert; +import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO; +import com.schisandra.auth.common.enums.SmsSupplierType; +import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO; +import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.ObjectUtils; +import org.dromara.sms4j.provider.config.BaseConfig; +import org.dromara.sms4j.tencent.config.TencentConfig; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * @Classname TencentSmsHandler + * @BelongsProject: schisandra-cloud-storage + * @BelongsPackage: com.schisandra.auth.application.handler + * @Author: landaiqing + * @CreateTime: 2024-05-12 13:07 + * @Description: TODO + * @Version: 1.0 + */ +@Component +@Slf4j +public class TencentSmsHandler implements SchisandraSmsTypeHandler{ + @Resource + SchisandraSmsConfigDomainService schisandraSmsConfigDomainService; + @Override + public SmsSupplierType getHandlerType() { + return SmsSupplierType.TENCENT; + } + + @Override + public BaseConfig addConfig(String configId) { + SchisandraSmsConfigBO schisandraSmsConfigBO = schisandraSmsConfigDomainService.queryByConfigId(configId); + SchisandraSmsConfigDTO schisandraSmsConfigDTO = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTO(schisandraSmsConfigBO); + if (ObjectUtils.isEmpty(schisandraSmsConfigDTO)){ + log.error("腾讯短信配置信息获取失败"); + return null; + } + TencentConfig tencentConfig=new TencentConfig(); + tencentConfig.setAccessKeyId(schisandraSmsConfigDTO.getAccessKeyId()); + tencentConfig.setAccessKeySecret(schisandraSmsConfigDTO.getAccessKeySecret()); + tencentConfig.setConfigId(schisandraSmsConfigDTO.getConfigId()); + tencentConfig.setAction(schisandraSmsConfigDTO.getAction()); + tencentConfig.setService(schisandraSmsConfigDTO.getService()); + tencentConfig.setRequestUrl(schisandraSmsConfigDTO.getRequestUrl()); + tencentConfig.setConnTimeout(schisandraSmsConfigDTO.getConnTimeout()); + tencentConfig.setTerritory(schisandraSmsConfigDTO.getRegion()); + tencentConfig.setVersion(schisandraSmsConfigDTO.getVersion()); + tencentConfig.setTemplateId(schisandraSmsConfigDTO.getTemplateId()); + tencentConfig.setSignature(schisandraSmsConfigDTO.getSignature()); + tencentConfig.setSdkAppId(schisandraSmsConfigDTO.getSdkAppId()); + tencentConfig.setMaxRetries(schisandraSmsConfigDTO.getMaxRetries()); + tencentConfig.setMaximum(Math.toIntExact(schisandraSmsConfigDTO.getMaximum())); + tencentConfig.setWeight(schisandraSmsConfigDTO.getWeight()); + return tencentConfig; + } +} diff --git a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/enums/SmsSupplierType.java b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/enums/SmsSupplierType.java index aef910d..933be61 100644 --- a/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/enums/SmsSupplierType.java +++ b/schisandra-cloud-storage-auth/schisandra-cloud-storage-auth-common/src/main/java/com/schisandra/auth/common/enums/SmsSupplierType.java @@ -19,7 +19,7 @@ public enum SmsSupplierType { /** * 腾讯云 */ - TENCENT("tenxun"), + TENCENT("tencent"), /** * 合一短信 */