zhongrj
2023-05-30 80a8d45a3e4c79c2dc3e290745ca477032998fae
新增 xx 变量和 具名变量通用发送接口
2 files modified
2 files added
232 ■■■■ changed files
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java 36 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/SmsService.java 30 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/service/impl/SmsServiceImpl.java 132 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java 34 ●●●● patch | view | raw | blame | history
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;
    }
    /**