feat: 短信功能优化
This commit is contained in:
@@ -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
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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";
|
||||
}
|
@@ -1 +0,0 @@
|
||||
controller 应用上下文
|
@@ -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("已发送,请注意查看!");
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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();
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
@@ -19,7 +19,7 @@ public enum SmsSupplierType {
|
||||
/**
|
||||
* 腾讯云
|
||||
*/
|
||||
TENCENT("tenxun"),
|
||||
TENCENT("tencent"),
|
||||
/**
|
||||
* 合一短信
|
||||
*/
|
||||
|
Reference in New Issue
Block a user