From 6db2b7de0799ca56c24af7e917c622e2fc951f72 Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Tue, 02 Apr 2024 14:39:45 +0800
Subject: [PATCH] 保存短信发送记录
---
src/main/java/org/springblade/modules/sms/service/impl/SmsSendServiceImpl.java | 78 ++++++++++++++++++++++++++++++++-------
1 files changed, 64 insertions(+), 14 deletions(-)
diff --git a/src/main/java/org/springblade/modules/sms/service/impl/SmsSendServiceImpl.java b/src/main/java/org/springblade/modules/sms/service/impl/SmsSendServiceImpl.java
index d36a576..0e1a248 100644
--- a/src/main/java/org/springblade/modules/sms/service/impl/SmsSendServiceImpl.java
+++ b/src/main/java/org/springblade/modules/sms/service/impl/SmsSendServiceImpl.java
@@ -24,14 +24,19 @@
import org.slf4j.LoggerFactory;
import org.springblade.common.config.SmsConfig;
import org.springblade.common.utils.HttpClientUtils;
+import org.springblade.common.utils.SpringUtils;
import org.springblade.common.utils.UtilRandom;
import org.springblade.common.utils.sms.AlipaySignature;
import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.modules.resource.entity.Sms;
import org.springblade.modules.resource.service.ISmsService;
import org.springblade.modules.sms.entity.SmsTemplateEntity;
import org.springblade.modules.sms.mapper.SmsTemplateMapper;
import org.springblade.modules.sms.service.ISmsSendService;
+import org.springblade.modules.sms.service.ISmsTemplateService;
+import org.springblade.modules.smsRecord.entity.SmsRecordEntity;
+import org.springblade.modules.smsRecord.service.ISmsRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -50,22 +55,41 @@
@Service
public class SmsSendServiceImpl extends ServiceImpl<SmsTemplateMapper, SmsTemplateEntity> implements ISmsSendService {
@Autowired
- private BladeRedis redisTemplate;
+ private BladeRedis redisTemplate;
private static Logger logger = LoggerFactory.getLogger(SmsSendServiceImpl.class);
-
+ // 确保这些字符串被适当地定义和管理
public static final String SMS_VALIDATE_PHONE = "sms:validate:code:";
public static final String SMS_VALIDATE_PHONE_NUM = "sms:validate:phone:";
+ private static final String SMS_SEND_FAILED = "短信发送失败!";
+ private static final String MESSAGE_SOP_EQUALS_MES_RESPONSE_CODE = "message_sop_equalsMes_response";
+ private static final String SEND_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
-// @Autowired
-// private SmsConfig smsConfig;
@Autowired
private ISmsService iSmsService;
+ @Autowired
+ private ISmsTemplateService iSmsTemplateService;
+
@Override
public Boolean smsSend(String phone) {
+ if (phone == null || phone.length() != 11) {
+ logger.error("手机号格式错误");
+ return false;
+ }
- Sms serviceOne = iSmsService.getOne(Wrappers.<Sms>lambdaQuery().eq(Sms::getSmsCode, "106575361457"));
+ Sms serviceOne = iSmsService.getOne(Wrappers.<Sms>lambdaQuery().eq(Sms::getStatus, 2));
+ if (serviceOne == null) {
+ logger.error("未找到状态为2的Sms服务");
+ return false;
+ }
+ SmsTemplateEntity smsTemplateEntity = iSmsTemplateService.getOne(Wrappers.<SmsTemplateEntity>lambdaQuery()
+ .eq(SmsTemplateEntity::getId, serviceOne.getTemplateId()));
+ if (smsTemplateEntity == null) {
+ logger.error("未找到对应的短信模板");
+ return false;
+ }
+
//发送的手机号
List<Map> phonesList = new ArrayList<>();
@@ -82,12 +106,11 @@
//短信主题
String subject = "对外接口不同内容发送-动态模板";
//短信内容
- String content = "您正在验证投票操作,验证码:#P_1#。如非本人操作,则密码可能已泄露,建议立即修改密码或联系客服。";
-// String content = "尊敬的#P_1#,你得工资#P_2#,测试#P_3#";
+ String content = smsTemplateEntity.getContent();
//短信模板
String template_id = null;
//发送时间
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat df = new SimpleDateFormat(SEND_TIME_FORMAT);
String send_time = df.format(new Date());
//优先级,高级=5,中级=3,低级=1
String priority = "1";
@@ -103,11 +126,13 @@
params.put("type", type);
//创建人主键
params.put("sop_create_by", serviceOne.getSmsCode());
- String s = null;
+ String result = null;
try {
- s = testGet(params, "message.sop.differentMes",serviceOne);
- JSONObject jsonObject = JSON.parseObject(s);
- JSONObject messageSopEqualsMesResponse = (JSONObject) jsonObject.get("message_sop_equalsMes_response");
+ //短信发送记录
+ saveSmsRecord(phone, serviceOne, code, content);
+ result = testGet(params, "message.sop.differentMes", serviceOne);
+ JSONObject jsonObject = JSON.parseObject(result);
+ JSONObject messageSopEqualsMesResponse = (JSONObject) jsonObject.get(MESSAGE_SOP_EQUALS_MES_RESPONSE_CODE);
if (messageSopEqualsMesResponse.get("code").equals(200)) {
// 将验证码存入redis
redisTemplate.setEx(SMS_VALIDATE_PHONE + phone, code, 300L);
@@ -115,13 +140,38 @@
return true;
}
} catch (Exception e) {
- logger.error("短信发送失败!", e);
+ logger.error(SMS_SEND_FAILED, e);
throw new RuntimeException(e);
}
return false;
}
- public String testGet(Object bizContent, String method,Sms serviceOne) throws Exception {
+ /**
+ * 保存短信发送记录
+ *
+ * @param phone 接收短信的手机号码
+ * @param serviceOne 发送短信所使用的服务
+ * @param code 短信中的验证码
+ * @param content 短信内容,其中可能包含占位符"#P_1#"用于被验证码替换
+ */
+ private static void saveSmsRecord(String phone, Sms serviceOne, Integer code, String content) {
+ // 通过Spring工具类获取短信记录服务的实例
+ ISmsRecordService smsRecordService = SpringUtils.getBean(ISmsRecordService.class);
+ // 创建一个新的短信记录实体
+ SmsRecordEntity smsRecordEntity = new SmsRecordEntity();
+ // 设置短信内容,将占位符"#P_1#"替换为验证码
+ smsRecordEntity.setContent(content.replace("#P_1#", code.toString()));
+ // 设置手机号码
+ smsRecordEntity.setPhone(phone);
+ // 设置短信模板ID
+ smsRecordEntity.setTemplateId(Long.valueOf(serviceOne.getTemplateId()));
+ // 设置创建用户ID,来自认证工具类
+ smsRecordEntity.setCreateUser(AuthUtil.getUserId());
+ // 保存短信记录实体
+ smsRecordService.save(smsRecordEntity);
+ }
+
+ public String testGet(Object bizContent, String method, Sms serviceOne) throws Exception {
// 公共请求参数
Map<String, String> params = new HashMap<String, String>();
--
Gitblit v1.9.3