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)); } }