add 新增 sms4j 短信融合 支持数十种短信服务商共用

remove 移除 原框架自带短信功能
This commit is contained in:
疯狂的狮子Li
2023-06-21 18:12:31 +08:00
parent 19d47c7405
commit ed6507e426
13 changed files with 76 additions and 391 deletions

View File

@@ -5,14 +5,14 @@ import cn.hutool.core.util.RandomUtil;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.core.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.web.controller.BaseController;
import com.ruoyi.common.redis.utils.RedisUtils;
import com.ruoyi.common.sms.config.properties.SmsProperties;
import com.ruoyi.common.sms.core.SmsTemplate;
import com.ruoyi.common.sms.entity.SmsResult;
import lombok.RequiredArgsConstructor;
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.dromara.sms4j.provider.enumerate.SupplierType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -20,8 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.LinkedHashMap;
/**
* 短信功能
@@ -35,8 +34,6 @@ import java.util.Map;
@RequestMapping("/sms")
public class SysSmsController extends BaseController {
private final SmsProperties smsProperties;
/**
* 短信验证码
*
@@ -44,21 +41,18 @@ public class SysSmsController extends BaseController {
*/
@GetMapping("/code")
public R<Void> smsCaptcha(@NotBlank(message = "{user.phonenumber.not.blank}") String phonenumber) {
if (!smsProperties.getEnabled()) {
return R.fail("当前系统没有开启短信功能!");
}
String key = CacheConstants.CAPTCHA_CODE_KEY + phonenumber;
String code = RandomUtil.randomNumbers(4);
RedisUtils.setCacheObject(key, code, Duration.ofMinutes(Constants.CAPTCHA_EXPIRATION));
// 验证码模板id 自行处理 (查数据库或写死均可)
String templateId = "";
Map<String, String> map = new HashMap<>(1);
LinkedHashMap<String, String> map = new LinkedHashMap<>(1);
map.put("code", code);
SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class);
SmsResult result = smsTemplate.send(phonenumber, templateId, map);
if (!result.getIsSuccess()) {
log.error("验证码短信发送异常 => {}", result);
return R.fail(result.getMessage());
SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA);
SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, templateId, map);
if (!"OK".equals(smsResponse.getCode())) {
log.error("验证码短信发送异常 => {}", smsResponse);
return R.fail(smsResponse.getMessage());
}
return R.ok();
}

View File

@@ -1,19 +1,19 @@
package com.ruoyi.resource.dubbo;
import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.sms.config.properties.SmsProperties;
import com.ruoyi.common.sms.core.SmsTemplate;
import com.ruoyi.common.sms.entity.SmsResult;
import com.ruoyi.common.core.utils.JsonUtils;
import com.ruoyi.resource.api.RemoteSmsService;
import com.ruoyi.resource.api.domain.SysSms;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboService;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.entity.SmsResponse;
import org.dromara.sms4j.core.factory.SmsFactory;
import org.dromara.sms4j.provider.enumerate.SupplierType;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.LinkedHashMap;
/**
* 短信服务
@@ -26,8 +26,6 @@ import java.util.Map;
@DubboService
public class RemoteSmsServiceImpl implements RemoteSmsService {
private final SmsProperties smsProperties;
/**
* 发送短信
*
@@ -35,13 +33,14 @@ public class RemoteSmsServiceImpl implements RemoteSmsService {
* @param templateId 模板id
* @param param 模板对应参数
*/
public SysSms send(String phones, String templateId, Map<String, String> param) throws ServiceException {
if (!smsProperties.getEnabled()) {
throw new ServiceException("当前系统没有开启短信功能!");
}
SmsTemplate smsTemplate = SpringUtils.getBean(SmsTemplate.class);
SmsResult smsResult = smsTemplate.send(phones, templateId, param);
return BeanUtil.toBean(smsResult, SysSms.class);
public SysSms send(String phones, String templateId, LinkedHashMap<String, String> param) throws ServiceException {
SmsBlend smsBlend = SmsFactory.createSmsBlend(SupplierType.ALIBABA);
SmsResponse smsResponse = smsBlend.sendMessage(phones, templateId, param);
SysSms sysSms = new SysSms();
sysSms.setIsSuccess(smsResponse.isSuccess());
sysSms.setMessage(smsResponse.getMessage());
sysSms.setResponse(JsonUtils.toJsonString(smsResponse));
return sysSms;
}
}