From 9ba12dad011e2afa278833f37aba895a632ccb9c Mon Sep 17 00:00:00 2001
From: lin <sbla5888@163.com>
Date: Mon, 06 May 2024 14:45:16 +0800
Subject: [PATCH] 校园安全检查

---
 src/main/java/org/springblade/modules/sms/service/impl/SmsSendServiceImpl.java |   87 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 87 insertions(+), 0 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 a887043..7e2ba8a 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
@@ -20,6 +20,7 @@
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang3.StringUtils;
 import org.jetbrains.annotations.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -265,6 +266,92 @@
 		return aBoolean;
 	}
 
+	@Override
+	public Boolean loginSendVerificationCode(String phone) {
+		if (phone == null || phone.length() != 11) {
+			logger.error("手机号格式错误");
+			return false;
+		}
+
+		if (redisTemplate.exists(SMS_VALIDATE_PHONE_NUM + phone)) {
+			logger.error("同一个手机号一分钟内只能发送一条记录");
+			return false;
+		}
+
+		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, "1783764287897939969"));
+		if (smsTemplateEntity == null) {
+			logger.error("未找到对应的短信模板");
+			return false;
+		}
+
+		//发送的手机号
+		List<Map> phonesList = new ArrayList<>();
+		Map phoneMap = new HashMap();
+		phoneMap.put("phone", phone);
+		List<String> varList = new ArrayList<>();
+		Integer code = UtilRandom.randomCount(111111, 999999);
+		varList.add(code.toString());
+		phoneMap.put("varList", varList);
+		phonesList.add(phoneMap);
+		//短信内容
+		String content = smsTemplateEntity.getContent();
+		//发送时间
+		LocalDateTime nowDateTime = LocalDateTime.now();
+		String send_time = nowDateTime.format(SECOND_FORMATTER);
+		Map params = new HashMap();
+		params.put("phones", phonesList);
+		//短信主题
+		params.put("subject", "对外接口不同内容发送-动态模板");
+		params.put("content", content);
+		//短信模板
+		params.put("template_id", null);
+		// 发送时间
+		params.put("send_time", send_time);
+		//优先级,高级=5,中级=3,低级=1
+		params.put("priority", "1");
+		//不同内容发送类型,1=动态模板发送,2=文件内容发送
+		params.put("type", "1");
+		//创建人主键
+		params.put("sop_create_by", serviceOne.getSmsCode());
+		//短信发送记录
+		saveSmsRecord(phone, serviceOne, code.toString(), content);
+		Boolean aBoolean = sendSmsGet(serviceOne, params);
+		if (aBoolean) {
+			// 将验证码存入redis,其中phone为手机号,code为验证码
+			// SMS_VALIDATE_PHONE 为前缀,通过phone和code在redis中设置一个过期的键值对
+			redisTemplate.setEx(SMS_VALIDATE_PHONE + phone, code, 300L);
+			// 同时,为了记录该手机短时间内已接收的验证码次数,使用另一个键值对进行计数
+			// SMS_VALIDATE_PHONE_NUM 为计数器的前缀,过期时间为60秒
+			redisTemplate.setEx(SMS_VALIDATE_PHONE_NUM + phone, 1, 60L);
+		}
+		return aBoolean;
+	}
+
+	@Override
+	public String checkCode(String phone, String code) {
+		if (StringUtils.isNotBlank(phone)) {
+			if (StringUtils.isBlank(code)) {
+				return "验证码不能为空!";
+			}
+			Object validateCode = redisTemplate.get(SMS_VALIDATE_PHONE + phone);
+			if (validateCode == null) {
+				return "验证码不存在或已过期";
+			}
+			if (!validateCode.toString().equals(code)) {
+				return "验证码错误";
+			}
+			//删除验证码
+			redisTemplate.del(SMS_VALIDATE_PHONE + phone);
+		}
+		return "";
+	}
+
 	/**
 	 * 发送短信并获取发送结果。
 	 *

--
Gitblit v1.9.3