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