From affff835d01de682a503eee8b71d48bf35255a50 Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Thu, 25 May 2023 15:20:13 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java | 254 ++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 233 insertions(+), 21 deletions(-)
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
index 0660f43..53daeb9 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -3,13 +3,26 @@
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
import cn.gistack.sm.sms.entity.SmsRecord;
+import cn.gistack.sm.sms.entity.SmsRequest;
+import cn.gistack.sm.sms.entity.SmsResult;
import cn.gistack.sm.sms.service.ISmsRecordService;
+import cn.gistack.sm.sms.service.ISmsResultService;
import cn.gistack.sm.sms.util.SmsUtils;
+import cn.gistack.system.user.entity.User;
+import cn.gistack.system.user.feign.IUserClient;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
/**
* 短信发送控制层
@@ -24,31 +37,158 @@
private final ISmsRecordService smsRecordService;
+ private final ISmsResultService smsResultService;
private final BladeRedis bladeRedis;
+ private final IUserClient userClient;
+
+ @GetMapping("/test")
+ public void setRedis(){
+ saveCodeForRedis("super_admin","123456");
+ }
+
+ /**
+ * 短信固定内容发送通用方法(仅支持 {xx} 模式的模板)
+ * request 必须包含手机号,模板id,拼接好的内容
+ * @param request
+ * @return
+ */
+ @PostMapping("/sendFixedContentByXXModel")
+ public R sendFixedContentByXXModel(@RequestBody SMSSendRequest request){
+ // 手机号码校验
+ if(validatePhone(request.getUserNumber())) {
+ // 发送操作
+ String sendMsg = SmsUtils.sendMsg(request);
+ JSONObject jsonObject = JSON.parseObject(sendMsg);
+ // 记录发送记录操作
+ SmsResult smsResult = saveSendResult(request, 1);
+ if (null != smsResult){
+ saveSendRecord(request, sendMsg,smsResult.getId());
+ }
+ // 返回发送信息
+ return R.data(jsonObject);
+ }
+ // 返回发送信息
+ return R.fail(400,"该手机号不存在!");
+ }
+
+
+ /**
+ * 短信动态内容发送通用方法(仅支持 具名变量 {手机号码:11} 模式的模板)
+ * request 必须包含手机号,模板id,拼接好的内容
+ * @param smsRequest
+ * @return
+ */
+ @PostMapping("/sendFixedContentByNamedVariableModel")
+ public R sendFixedContentByNamedVariableModel(@RequestBody SmsRequest smsRequest){
+ // 处理数据(可能是多个手机号情况)
+ List<String> list = Arrays.asList(smsRequest.getPhone().split(","));
+ // 保存发送结果
+ // 记录保存
+ SMSSendRequest request = new SMSSendRequest();
+ request.setMessageContent(smsRequest.getContent());
+ request.setTemplateId(smsRequest.getTemplateId());
+ SmsResult smsResult = saveSendResult(request, list.size());
+ // 遍历
+ for (String phone : list) {
+ DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest();
+ dynSMSSendRequest.setTemplateId(smsRequest.getTemplateId());
+ dynSMSSendRequest.setDynData(smsRequest.getParams());
+ // 手机号校验
+ if(validator(phone)) {
+ // 发送邮件短信
+ String dynSendMsg = SmsUtils.dynSendMethod(dynSMSSendRequest);
+ // 记录保存
+ if (null != smsResult) {
+ SMSSendRequest smsSendRequest = new SMSSendRequest();
+ smsSendRequest.setUserNumber(phone);
+ smsSendRequest.setMessageContent(smsRequest.getContent());
+ smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
+ // 记录发送记录操作
+ saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId());
+ }
+ }else {
+ // 手机号有误记录
+ // 记录保存
+ SMSSendRequest smsSendRequest = new SMSSendRequest();
+ smsSendRequest.setUserNumber(phone);
+ smsSendRequest.setMessageContent(smsRequest.getContent());
+ smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
+ // 记录发送记录操作
+ saveSendRecord(smsSendRequest, "手机号错误未发送...",null);
+ }
+ }
+ return R.status(true);
+ }
+
/**
* 发送登录验证码
- * request 必须包含手机号(多个手机号以英文逗号分隔)
+ * request 必须包含手机号
* @param request
* @return
*/
@PostMapping("/sendCode")
- public R test(@RequestBody SMSSendRequest request){
- //设置模板相关信息
- String templateId = "2431012205498";
- String randNumber = SmsUtils.getRandNumber();
- String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
- request.setMessageContent(content);
- request.setTemplateId(templateId);
- // 发送操作
- String sendMsg = SmsUtils.sendMsg(request);
- // 记录发送记录操作
- saveSendRecord(request,sendMsg);
- // 保存验证码到 redis
- saveCodeForRedis(request.getUserNumber(),randNumber);
+ public R sendCode(@RequestBody SMSSendRequest request){
+ // 手机号码校验
+ if(validatePhone(request.getUserNumber())) {
+ //设置模板相关信息
+ String templateId = "2431012205498";
+ String randNumber = SmsUtils.getRandNumber();
+ String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
+ request.setMessageContent(content);
+ request.setTemplateId(templateId);
+ // 发送操作
+ String sendMsg = SmsUtils.sendMsg(request);
+ JSONObject jsonObject = JSON.parseObject(sendMsg);
+ // 记录发送记录操作
+ SmsResult smsResult = saveSendResult(request, 1);
+ if (null != smsResult){
+ saveSendRecord(request, sendMsg,smsResult.getId());
+ }
+ // 保存验证码到 redis
+ saveCodeForRedis(request.getUserNumber(), randNumber);
+ // 返回发送信息
+ return R.data(jsonObject);
+ }
// 返回发送信息
- return R.data(sendMsg);
+ return R.fail(400,"该手机号不存在!");
+ }
+
+ /**
+ * 校验手机号码正确性
+ * @param userNumber
+ * @return
+ */
+ private boolean validatePhone(String userNumber) {
+ // 校验手机号码正确性
+ if (validator(userNumber)){
+ // 校验该账户是否已注册,通过手机号查询用户是否存在,tenantId 暂时写死,未登陆情况 tenantId 获取不到
+ R<List<User>> list = userClient.userInfoByPhoneOrAccount("000000", userNumber);
+ if (list.getData().size()>0){
+ return true;
+ }
+ return false;
+ }
+ return false;
+ }
+
+ /**
+ * 校验手机号码
+ */
+ public static boolean validator(String phone) {
+ if (null!=phone && !phone.equals("")) {
+ String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
+ if (phone.length() != 11) {
+ return false;
+ } else {
+ Pattern p = Pattern.compile(regex);
+ Matcher m = p.matcher(phone);
+ boolean isMatch = m.matches();
+ return isMatch;
+ }
+ }
+ return false;
}
/**
@@ -57,26 +197,98 @@
* @param randNumber
*/
private void saveCodeForRedis(String userNumber, String randNumber) {
- bladeRedis.setEx(userNumber,randNumber,5*60L);
+ bladeRedis.setEx(PHONE_KEY + userNumber,randNumber,5*60L);
}
/**
* 发送记录保存
* @param request 发送信息
* @param sendMsg 响应数据
+ * @param resultId 发送结果id
*/
- private void saveSendRecord(SMSSendRequest request, String sendMsg) {
+ private void saveSendRecord(SMSSendRequest request, String sendMsg,Long resultId) {
+ // 在保存明细
SmsRecord smsRecord = new SmsRecord();
- smsRecord.setPhone(request.getUserNumber());
+// smsRecord.setPhone(request.getUserNumber());
+ smsRecord.setTel(request.getUserNumber());
smsRecord.setContent(request.getMessageContent());
smsRecord.setTemplateId(request.getTemplateId());
smsRecord.setResContent(sendMsg);
+ smsRecord.setResultId(resultId);
+ // 解析 sendMsg
+ JSONObject jsonObject = JSON.parseObject(sendMsg);
+ smsRecord.setResponseStatus(jsonObject.getString("code"));
+ smsRecord.setResponseMsg(jsonObject.getString("msg"));
//插入记录
smsRecordService.save(smsRecord);
}
- @PostMapping("/test1")
- public R test1(@RequestBody DynSMSSendRequest request){
- return R.data(SmsUtils.dynSendMethod(request));
+ /**
+ * 发送记录保存
+ * @param request 发送信息
+ * @param number 号码个数
+ */
+ private SmsResult saveSendResult(SMSSendRequest request,Integer number) {
+ // 先保存结果表
+ SmsResult smsResult = new SmsResult();
+ smsResult.setTemplateId(request.getTemplateId());
+ smsResult.setContent(request.getMessageContent());
+ smsResult.setNumber(number);
+ //插入记录
+ boolean save = smsResultService.save(smsResult);
+ if (save){
+ return smsResult;
+ }
+ // 返回
+ return null;
+ }
+
+
+
+ /**
+ * 发送邮件提醒
+ * @param smsRequest
+ * @return
+ */
+ @PostMapping("/sendEmailMsg")
+ public R sendEmailMsg(@RequestBody SmsRequest smsRequest){
+ // 处理数据(可能是多个手机号情况)
+ List<String> list = Arrays.asList(smsRequest.getPhone().split(","));
+ // 保存发送结果
+ // 记录保存
+ SMSSendRequest request = new SMSSendRequest();
+ request.setMessageContent(smsRequest.getContent());
+ request.setTemplateId("2431012165299");
+ SmsResult smsResult = saveSendResult(request, list.size());
+ // 遍历
+ for (String phone : list) {
+ DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest();
+ dynSMSSendRequest.setTemplateId("2431012165299");
+ dynSMSSendRequest.setDynData(new String[][]{{"手机号码", "标题"}, {phone, smsRequest.getContent()}});
+ // 手机号校验
+ if(validator(phone)) {
+ // 发送邮件短信
+ String dynSendMsg = SmsUtils.dynSendMethod(dynSMSSendRequest);
+ // 记录保存
+ if (null != smsResult) {
+ SMSSendRequest smsSendRequest = new SMSSendRequest();
+ smsSendRequest.setUserNumber(phone);
+ smsSendRequest.setMessageContent(smsRequest.getContent());
+ smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
+ // 记录发送记录操作
+ saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId());
+ }
+ }else {
+ // 手机号有误记录
+ // 记录保存
+ SMSSendRequest smsSendRequest = new SMSSendRequest();
+ smsSendRequest.setUserNumber(phone);
+ smsSendRequest.setMessageContent(smsRequest.getContent());
+ smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId());
+ // 记录发送记录操作
+ saveSendRecord(smsSendRequest, "手机号错误未发送...",null);
+ }
+ }
+ return R.status(true);
}
}
--
Gitblit v1.9.3