feat: 短信功能优化

This commit is contained in:
landaiqing
2024-05-12 13:34:55 +08:00
parent 57ec16da5b
commit 1683fdaacf
8 changed files with 110 additions and 36 deletions

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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";
}

View File

@@ -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("已发送请注意查看!");
}
}

View File

@@ -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();

View File

@@ -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;
}
}

View File

@@ -19,7 +19,7 @@ public enum SmsSupplierType {
/**
* 腾讯云
*/
TENCENT("tenxun"),
TENCENT("tencent"),
/**
* 合一短信
*/