From 80a8d45a3e4c79c2dc3e290745ca477032998fae Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Tue, 30 May 2023 19:23:08 +0800
Subject: [PATCH] 新增 xx 变量和 具名变量通用发送接口
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java | 34 ++------
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/SmsService.java | 30 +++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java | 36 +++++++-
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsServiceImpl.java | 132 +++++++++++++++++++++++++++++++++
4 files changed, 203 insertions(+), 29 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 53daeb9..65fa054 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
@@ -7,7 +7,9 @@
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.service.SmsService;
import cn.gistack.sm.sms.util.SmsUtils;
+import cn.gistack.sm.sms.vo.SmsRequestTemplate;
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.feign.IUserClient;
import com.alibaba.fastjson.JSON;
@@ -39,6 +41,8 @@
private final ISmsResultService smsResultService;
+ private final SmsService smsService;
+
private final BladeRedis bladeRedis;
private final IUserClient userClient;
@@ -59,7 +63,7 @@
// 手机号码校验
if(validatePhone(request.getUserNumber())) {
// 发送操作
- String sendMsg = SmsUtils.sendMsg(request);
+ String sendMsg = JSON.toJSONString(SmsUtils.sendMsg(request));
JSONObject jsonObject = JSON.parseObject(sendMsg);
// 记录发送记录操作
SmsResult smsResult = saveSendResult(request, 1);
@@ -98,7 +102,7 @@
// 手机号校验
if(validator(phone)) {
// 发送邮件短信
- String dynSendMsg = SmsUtils.dynSendMethod(dynSMSSendRequest);
+ String dynSendMsg = JSON.toJSONString(SmsUtils.dynSendMethod(dynSMSSendRequest));
// 记录保存
if (null != smsResult) {
SMSSendRequest smsSendRequest = new SMSSendRequest();
@@ -139,7 +143,7 @@
request.setMessageContent(content);
request.setTemplateId(templateId);
// 发送操作
- String sendMsg = SmsUtils.sendMsg(request);
+ String sendMsg =JSON.toJSONString(SmsUtils.sendMsg(request));
JSONObject jsonObject = JSON.parseObject(sendMsg);
// 记录发送记录操作
SmsResult smsResult = saveSendResult(request, 1);
@@ -209,7 +213,6 @@
private void saveSendRecord(SMSSendRequest request, String sendMsg,Long resultId) {
// 在保存明细
SmsRecord smsRecord = new SmsRecord();
-// smsRecord.setPhone(request.getUserNumber());
smsRecord.setTel(request.getUserNumber());
smsRecord.setContent(request.getMessageContent());
smsRecord.setTemplateId(request.getTemplateId());
@@ -268,7 +271,7 @@
// 手机号校验
if(validator(phone)) {
// 发送邮件短信
- String dynSendMsg = SmsUtils.dynSendMethod(dynSMSSendRequest);
+ String dynSendMsg = JSON.toJSONString(SmsUtils.dynSendMethod(dynSMSSendRequest));
// 记录保存
if (null != smsResult) {
SMSSendRequest smsSendRequest = new SMSSendRequest();
@@ -291,4 +294,27 @@
}
return R.status(true);
}
+
+
+
+ /**
+ * 发送 xx 变量模板短信
+ * @param smsRequest 发送对象
+ * @return
+ */
+ @PostMapping("/sendXXMsg")
+ public R sendXXMsg(@RequestBody SmsRequestTemplate smsRequest){
+ return R.data(smsService.sendXXMsg(smsRequest.getSmsRequest(),smsRequest.getPhoneNumbers()));
+ }
+
+
+ /**
+ * 发送 具名 变量模板短信
+ * @param smsRequest 发送对象
+ * @return
+ */
+ @PostMapping("/sendSignMsg")
+ public R sendSignMsg(@RequestBody SmsRequestTemplate smsRequest){
+ return R.data(smsService.sendSignMsg(smsRequest.getTitle(),smsRequest.getContent(),smsRequest.getSmsRequest()));
+ }
}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/SmsService.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/SmsService.java
new file mode 100644
index 0000000..29589a3
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/SmsService.java
@@ -0,0 +1,30 @@
+package cn.gistack.sm.sms.service;
+
+import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
+
+import java.util.List;
+
+/**
+ * 短信发送服务接口
+ * @author zhongrj
+ * @date 2023-05-30
+ */
+public interface SmsService {
+
+ /**
+ * 发送 xx 变量模板短信
+ * @param phoneNumbers 手机号集合
+ * @param request 内容对象
+ * @return
+ */
+ Object sendXXMsg(SMSSendRequest request,List<String> phoneNumbers);
+
+ /**
+ * 发送 具名 变量模板短信
+ * @param title 具名变量头
+ * @param content 内容详情
+ * @param request 内容对象
+ * @return
+ */
+ Object sendSignMsg(String title,String content,SMSSendRequest request);
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsServiceImpl.java
new file mode 100644
index 0000000..69aa0c7
--- /dev/null
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsServiceImpl.java
@@ -0,0 +1,132 @@
+package cn.gistack.sm.sms.service.impl;
+
+import cn.com.flaginfo.sdk.cmc.api.result.ComResult;
+import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendDataResult;
+import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
+import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendDataResult;
+import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
+import cn.gistack.sm.sms.entity.SmsRecord;
+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.service.SmsService;
+import cn.gistack.sm.sms.util.SmsUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 短信发送服务实现层
+ * @author zhongrj
+ * @date 2023-05-30
+ */
+@Service
+public class SmsServiceImpl implements SmsService {
+
+ @Autowired
+ private ISmsRecordService smsRecordService;
+
+ @Autowired
+ private ISmsResultService smsResultService;
+
+ /**
+ * 发送 xx 变量模板短信
+ * @param phoneNumbers 手机号集合
+ * @param request 内容对象
+ * @return
+ */
+ @Override
+ public Object sendXXMsg(SMSSendRequest request, List<String> phoneNumbers) {
+ List<ComResult<SMSSendDataResult>> list = new ArrayList<>();
+ if (phoneNumbers.size()>0){
+ // 先保存结果记录
+ SmsResult smsResult = saveSendResult(request, phoneNumbers.size());
+ // 遍历发送
+ for (String phone : phoneNumbers) {
+ request.setUserNumber(phone);
+ // 发送
+ ComResult<SMSSendDataResult> result = SmsUtils.sendMsg(request);
+ if(null != smsResult) {
+ // 保存记录
+ saveSmsRecord(request, result.getCode(), result.getMsg(), smsResult.getId());
+ }
+ list.add(result);
+ }
+ }
+ return list;
+ }
+
+ /**
+ * 发送 具名 变量模板短信
+ * @param title 具名变量头
+ * @param content 内容对象
+ * @return
+ */
+ @Override
+ public Object sendSignMsg(String title, String content, SMSSendRequest request) {
+ String[] titleArr = title.split(",");
+ String[] rows = content.split(";");
+ String[][] dyns = new String[rows.length + 1][titleArr.length];
+ dyns[0] = titleArr;
+ int rowNum = 1;
+ for (String row : rows) {
+ String[] cols = row.split(",");
+ dyns[rowNum++] = cols;
+ }
+ //请求参数
+ DynSMSSendRequest sendRequest = new DynSMSSendRequest();
+ sendRequest.setTemplateId(request.getTemplateId());
+ sendRequest.setDynData(dyns);
+ // 发送
+ ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(sendRequest);
+ // 先保存结果记录
+ SmsResult smsResult = saveSendResult(request, rows.length);
+ if (null != smsResult){
+ // 保存记录
+ saveSmsRecord(request,resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId());
+ }
+ // 返回
+ return resultComResult;
+ }
+
+ /**
+ * 保存发送短信记录信息
+ * @param request
+ * @param code 响应code
+ * @param msg 响应消息
+ * @param resultId
+ */
+ private void saveSmsRecord(SMSSendRequest request,Integer code,String msg, Long resultId) {
+ // 在保存明细
+ SmsRecord smsRecord = new SmsRecord();
+ smsRecord.setTel(request.getUserNumber());
+ smsRecord.setContent(request.getMessageContent());
+ smsRecord.setTemplateId(request.getTemplateId());
+ smsRecord.setResultId(resultId);
+ smsRecord.setResponseStatus(code.toString());
+ smsRecord.setResponseMsg(msg);
+ //插入记录
+ smsRecordService.save(smsRecord);
+ }
+
+ /**
+ * 发送记录保存
+ * @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;
+ }
+}
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
index d51c025..6eb8e67 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
@@ -6,44 +6,29 @@
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSAPI;
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendDataResult;
import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest;
-import cn.com.flaginfo.sdk.cmc.api.sms.reply.SMSReplyAPI;
-import cn.com.flaginfo.sdk.cmc.api.sms.reply.SMSReplyDataResult;
-import cn.com.flaginfo.sdk.cmc.api.sms.reply.SMSReplyRequest;
-import cn.com.flaginfo.sdk.cmc.api.sms.replyconfirm.SMSReplyConfirmAPI;
-import cn.com.flaginfo.sdk.cmc.api.sms.replyconfirm.SMSReplyConfirmRequest;
-import cn.com.flaginfo.sdk.cmc.api.sms.report.SMSReportAPI;
-import cn.com.flaginfo.sdk.cmc.api.sms.report.SMSReportRequest;
-import cn.com.flaginfo.sdk.cmc.api.sms.report.SMSReportResult;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSApi;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendDataResult;
import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest;
import cn.com.flaginfo.sdk.cmc.common.ApiEnum;
import cn.gistack.sm.sms.constant.SmsConstant;
-import com.alibaba.fastjson.JSON;
-import org.aspectj.lang.annotation.Before;
-import org.springblade.core.redis.cache.BladeRedis;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
-
-import javax.annotation.PostConstruct;
import java.text.SimpleDateFormat;
import java.util.Date;
-import java.util.List;
import java.util.Random;
-
-import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
import static cn.gistack.sm.sms.constant.SmsConstant.*;
+/**
+ * 短信发送工具类
+ * @author zhongrj
+ * @date 2023-05-30
+ */
@Component
public class SmsUtils {
-
- @Autowired
- private BladeRedis bladeRedis;
/**
* 固定内容发送
*/
- public static String sendMsg(SMSSendRequest sendRequest) {
+ public static ComResult<SMSSendDataResult> sendMsg(SMSSendRequest sendRequest) {
ApiConfig apiConfig = new ApiConfig(SpCode, AppKey, AppSecret);
ApiProvider provider = ApiProvider.getInstance(apiConfig);
//请求接口
@@ -53,7 +38,7 @@
sendRequest.setSerialNumber(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
ComResult<SMSSendDataResult> request = api.request(sendRequest);
// 返回
- return JSON.toJSONString(request);
+ return request;
}
/**
@@ -73,7 +58,7 @@
/**
* 动态短信内容批量发送
*/
- public static String dynSendMethod(DynSMSSendRequest sendRequest) {
+ public static ComResult<DynSMSSendDataResult> dynSendMethod(DynSMSSendRequest sendRequest) {
ApiConfig apiConfig = new ApiConfig(SpCode, AppKey, AppSecret);
ApiProvider provider = ApiProvider.getInstance(apiConfig);
//请求接口
@@ -82,7 +67,8 @@
//请求参数
sendRequest.setSerialNumber(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
ComResult<DynSMSSendDataResult> result = api.request(sendRequest);
- return JSON.toJSONString(result);
+ // 返回
+ return result;
}
/**
--
Gitblit v1.9.3