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())); } } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/SmsService.java
New file @@ -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); } skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsServiceImpl.java
New file @@ -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; } } 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; } /**