zhongrj
2023-04-23 0d1abeb26fa722bddd42e09dd6237f3652ddc8ed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package cn.gistack.sm.sms.controller;
 
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.service.ISmsRecordService;
import cn.gistack.sm.sms.util.SmsUtils;
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.*;
 
/**
 * 短信发送控制层
 * @author zhongrj
 * @date 2023-04-22
 */
@Slf4j
@RestController
@RequestMapping("/sms/sms")
@AllArgsConstructor
public class SmsController {
 
    private final ISmsRecordService smsRecordService;
 
 
    private final BladeRedis bladeRedis;
 
    /**
     * 发送登录验证码
     * 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);
        // 返回发送信息
        return R.data(sendMsg);
    }
 
    /**
     * 保存验证码到 redis
     * @param userNumber
     * @param randNumber
     */
    private void saveCodeForRedis(String userNumber, String randNumber) {
        bladeRedis.setEx(userNumber,randNumber,5*60L);
    }
 
    /**
     * 发送记录保存
     * @param request 发送信息
     * @param sendMsg 响应数据
     */
    private void saveSendRecord(SMSSendRequest request, String sendMsg) {
        SmsRecord smsRecord = new SmsRecord();
        smsRecord.setPhone(request.getUserNumber());
        smsRecord.setContent(request.getMessageContent());
        smsRecord.setTemplateId(request.getTemplateId());
        smsRecord.setResContent(sendMsg);
        //插入记录
        smsRecordService.save(smsRecord);
    }
 
    @PostMapping("/test1")
    public R test1(@RequestBody DynSMSSendRequest request){
        return R.data(SmsUtils.dynSendMethod(request));
    }
}