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.factory.SmsTypeHandlerFactory;
|
||||||
import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler;
|
import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler;
|
||||||
|
import org.dromara.sms4j.core.datainterface.SmsReadConfig;
|
||||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
@@ -18,7 +19,7 @@ import java.util.List;
|
|||||||
* @Version: 1.0
|
* @Version: 1.0
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class SmsReadConfig implements org.dromara.sms4j.core.datainterface.SmsReadConfig {
|
public class SmsConfig implements SmsReadConfig {
|
||||||
|
|
||||||
|
|
||||||
@Resource
|
@Resource
|
@@ -1,32 +1,53 @@
|
|||||||
package com.schisandra.auth.application.config;
|
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.common.redis.RedisUtil;
|
||||||
import com.schisandra.auth.infra.entity.SmsConfigInfo;
|
import com.schisandra.auth.infra.entity.SmsConfigInfo;
|
||||||
import com.schisandra.auth.infra.rpc.SmsConfigRpc;
|
import com.schisandra.auth.infra.rpc.SmsConfigRpc;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.SmartLifecycle;
|
||||||
import org.springframework.context.event.ContextRefreshedEvent;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.context.event.EventListener;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
//@Configuration
|
@Component
|
||||||
public class SmsInitConfig {
|
@Slf4j
|
||||||
|
public class SmsInitConfig implements SmartLifecycle {
|
||||||
@Resource
|
@Resource
|
||||||
SmsReadConfig smsReadConfig;
|
SmsConfig smsConfig;
|
||||||
@Resource
|
@Resource
|
||||||
SmsConfigRpc smsConfigRpc;
|
SmsConfigRpc smsConfigRpc;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
RedisUtil redisUtil;
|
RedisUtil redisUtil;
|
||||||
|
|
||||||
|
private final String smsConfigPrefix="sys.config.sms";
|
||||||
|
|
||||||
@EventListener
|
public void init() {
|
||||||
public void init(ContextRefreshedEvent event) {
|
SmsConfigInfo configInfo = smsConfigRpc.getConfigInfo(SmsConfigContext.SMS_CONFIG_KEY);
|
||||||
SmsConfigInfo configInfo = smsConfigRpc.getConfigInfo(SmsConfigConstant.SMS_CONFIG_KEY);
|
String key = redisUtil.buildKey(smsConfigPrefix, SmsConfigContext.SMS_CONFIG_KEY);
|
||||||
redisUtil.set(SmsConfigConstant.SMS_CONFIG_KEY, configInfo.getConfigValue());
|
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
|
* @BelongsProject: schisandra-cloud-storage
|
||||||
* @BelongsPackage: com.schisandra.auth.common.constants
|
* @BelongsPackage: com.schisandra.auth.common.constants
|
||||||
* @Author: landaiqing
|
* @Author: landaiqing
|
||||||
@@ -9,6 +9,6 @@ package com.schisandra.auth.common.constants;
|
|||||||
* @Description: TODO
|
* @Description: TODO
|
||||||
* @Version: 1.0
|
* @Version: 1.0
|
||||||
*/
|
*/
|
||||||
public class SmsConfigConstant {
|
public class SmsConfigContext {
|
||||||
public static final String SMS_CONFIG_KEY = "sms_config_id";
|
public static final String SMS_CONFIG_KEY = "sms_config_id";
|
||||||
}
|
}
|
@@ -1 +0,0 @@
|
|||||||
controller 应用上下文
|
|
@@ -1,17 +1,11 @@
|
|||||||
package com.schisandra.auth.application.controller;
|
package com.schisandra.auth.application.controller;
|
||||||
|
|
||||||
|
|
||||||
import com.schisandra.auth.application.config.SmsReadConfig;
|
import com.schisandra.auth.application.context.SmsConfigContext;
|
||||||
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.common.entity.Result;
|
import com.schisandra.auth.common.entity.Result;
|
||||||
import com.schisandra.auth.common.redis.RedisUtil;
|
import com.schisandra.auth.common.redis.RedisUtil;
|
||||||
import com.schisandra.auth.common.utils.SmsCodeUtils;
|
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 lombok.extern.slf4j.Slf4j;
|
||||||
import org.dromara.sms4j.api.SmsBlend;
|
|
||||||
import org.dromara.sms4j.api.entity.SmsResponse;
|
import org.dromara.sms4j.api.entity.SmsResponse;
|
||||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@@ -28,11 +22,6 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
|||||||
public class SchisandraSmsController {
|
public class SchisandraSmsController {
|
||||||
@Resource
|
@Resource
|
||||||
private RedisUtil redisUtil;
|
private RedisUtil redisUtil;
|
||||||
@Resource
|
|
||||||
private SmsReadConfig smsReadConfig;
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
SmsConfigRpc smsConfigRpc;
|
|
||||||
|
|
||||||
private final String authPhonePrefix="auth.phone";
|
private final String authPhonePrefix="auth.phone";
|
||||||
private final String smsConfigPrefix="sys.config.sms";
|
private final String smsConfigPrefix="sys.config.sms";
|
||||||
@@ -48,11 +37,11 @@ public class SchisandraSmsController {
|
|||||||
String prefix = redisUtil.buildKey(authPhonePrefix, phone);
|
String prefix = redisUtil.buildKey(authPhonePrefix, phone);
|
||||||
String code = SmsCodeUtils.generateValidateCode(4).toString();
|
String code = SmsCodeUtils.generateValidateCode(4).toString();
|
||||||
if (!redisUtil.exist(prefix)){
|
if (!redisUtil.exist(prefix)){
|
||||||
SmsConfigInfo configInfo = smsConfigRpc.getConfigInfo(SmsConfigConstant.SMS_CONFIG_KEY);
|
String key = redisUtil.buildKey(smsConfigPrefix, SmsConfigContext.SMS_CONFIG_KEY);
|
||||||
String key = redisUtil.buildKey(smsConfigPrefix, SmsConfigConstant.SMS_CONFIG_KEY);
|
String configId = redisUtil.get(key);
|
||||||
redisUtil.set(key, configInfo.getConfigValue());
|
if (configId == null){
|
||||||
SmsFactory.createSmsBlend(smsReadConfig, configInfo.getConfigValue());
|
log.error("短信配置不存在!");
|
||||||
String configId = redisUtil.get(SmsConfigConstant.SMS_CONFIG_KEY);
|
}
|
||||||
SmsResponse smsResponse=SmsFactory.getSmsBlend(configId).sendMessage(phone,code);
|
SmsResponse smsResponse=SmsFactory.getSmsBlend(configId).sendMessage(phone,code);
|
||||||
if (smsResponse.isSuccess()){
|
if (smsResponse.isSuccess()){
|
||||||
redisUtil.setNx(prefix, code, 60L* 5,SECONDS);
|
redisUtil.setNx(prefix, code, 60L* 5,SECONDS);
|
||||||
@@ -61,7 +50,7 @@ public class SchisandraSmsController {
|
|||||||
return Result.fail("短信发送失败,请重试!");
|
return Result.fail("短信发送失败,请重试!");
|
||||||
}
|
}
|
||||||
}else {
|
}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.common.enums.SmsSupplierType;
|
||||||
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||||
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
||||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||||
@@ -22,6 +23,7 @@ import javax.annotation.Resource;
|
|||||||
* @Version: 1.0
|
* @Version: 1.0
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@Slf4j
|
||||||
public class AlibabaSmsHandler implements SchisandraSmsTypeHandler{
|
public class AlibabaSmsHandler implements SchisandraSmsTypeHandler{
|
||||||
@Resource
|
@Resource
|
||||||
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
||||||
@@ -35,6 +37,7 @@ public class AlibabaSmsHandler implements SchisandraSmsTypeHandler{
|
|||||||
SchisandraSmsConfigBO schisandraSmsConfigBO = schisandraSmsConfigDomainService.queryByConfigId(configId);
|
SchisandraSmsConfigBO schisandraSmsConfigBO = schisandraSmsConfigDomainService.queryByConfigId(configId);
|
||||||
SchisandraSmsConfigDTO schisandraSmsConfigDTO = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTO(schisandraSmsConfigBO);
|
SchisandraSmsConfigDTO schisandraSmsConfigDTO = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTO(schisandraSmsConfigBO);
|
||||||
if (ObjectUtils.isEmpty(schisandraSmsConfigDTO)){
|
if (ObjectUtils.isEmpty(schisandraSmsConfigDTO)){
|
||||||
|
log.error("阿里云短信配置信息获取失败");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
AlibabaConfig alibabaConfig=new AlibabaConfig();
|
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