| | |
| | | package cn.gistack.sm.sms.controller; |
| | | |
| | | import cn.com.flaginfo.sdk.cmc.api.sms.dynsend.DynSMSSendRequest; |
| | | import cn.com.flaginfo.sdk.cmc.api.result.ComResult; |
| | | 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.SmsRequest; |
| | | 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.alerts.sms.feign.ISmsRecordClient; |
| | | 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; |
| | |
| | | import org.springblade.core.redis.cache.BladeRedis; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | |
| | | @AllArgsConstructor |
| | | public class SmsController { |
| | | |
| | | private final ISmsRecordService smsRecordService; |
| | | |
| | | private final ISmsResultService smsResultService; |
| | | |
| | | private final SmsService smsService; |
| | | |
| | | private final BladeRedis bladeRedis; |
| | | |
| | | private final IUserClient userClient; |
| | | |
| | | @GetMapping("/test") |
| | | public void setRedis(){ |
| | | saveCodeForRedis("super_admin","123456"); |
| | | } |
| | | |
| | | /** |
| | | * 短信固定内容发送通用方法(仅支持 {xx} 模式的模板) |
| | | * request 必须包含手机号,模板id,拼接好的内容 |
| | | * @param request |
| | | * @return |
| | | */ |
| | | @PostMapping("/sendFixedContentByXXModel") |
| | | public R sendFixedContentByXXModel(@RequestBody SMSSendRequest request){ |
| | | // 手机号码校验 |
| | | if(validatePhone(request.getUserNumber())) { |
| | | // 发送操作 |
| | | String sendMsg = JSON.toJSONString(SmsUtils.sendMsg(request)); |
| | | JSONObject jsonObject = JSON.parseObject(sendMsg); |
| | | // 记录发送记录操作 |
| | | SmsResult smsResult = saveSendResult(request, 1); |
| | | if (null != smsResult){ |
| | | saveSendRecord(request, sendMsg,smsResult.getId()); |
| | | } |
| | | // 返回发送信息 |
| | | return R.data(jsonObject); |
| | | } |
| | | // 返回发送信息 |
| | | return R.fail(400,"该手机号不存在!"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 短信动态内容发送通用方法(仅支持 具名变量 {手机号码:11} 模式的模板) |
| | | * request 必须包含手机号,模板id,拼接好的内容 |
| | | * @param smsRequest |
| | | * @return |
| | | */ |
| | | @PostMapping("/sendFixedContentByNamedVariableModel") |
| | | public R sendFixedContentByNamedVariableModel(@RequestBody SmsRequest smsRequest){ |
| | | // 处理数据(可能是多个手机号情况) |
| | | List<String> list = Arrays.asList(smsRequest.getPhone().split(",")); |
| | | // 保存发送结果 |
| | | // 记录保存 |
| | | SMSSendRequest request = new SMSSendRequest(); |
| | | request.setMessageContent(smsRequest.getContent()); |
| | | request.setTemplateId(smsRequest.getTemplateId()); |
| | | SmsResult smsResult = saveSendResult(request, list.size()); |
| | | // 遍历 |
| | | for (String phone : list) { |
| | | DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest(); |
| | | dynSMSSendRequest.setTemplateId(smsRequest.getTemplateId()); |
| | | dynSMSSendRequest.setDynData(smsRequest.getParams()); |
| | | // 手机号校验 |
| | | if(validator(phone)) { |
| | | // 发送邮件短信 |
| | | String dynSendMsg = JSON.toJSONString(SmsUtils.dynSendMethod(dynSMSSendRequest)); |
| | | // 记录保存 |
| | | if (null != smsResult) { |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId()); |
| | | } |
| | | }else { |
| | | // 手机号有误记录 |
| | | // 记录保存 |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | saveSendRecord(smsSendRequest, "手机号错误未发送...",null); |
| | | } |
| | | } |
| | | return R.status(true); |
| | | } |
| | | private final ISmsRecordClient smsRecordClient; |
| | | |
| | | /** |
| | | * 发送登录验证码 |
| | |
| | | request.setMessageContent(content); |
| | | request.setTemplateId(templateId); |
| | | // 发送操作 |
| | | String sendMsg =JSON.toJSONString(SmsUtils.sendMsg(request)); |
| | | ComResult<SMSSendDataResult> resultComResult = SmsUtils.sendMsg(request); |
| | | String sendMsg =JSON.toJSONString(resultComResult); |
| | | JSONObject jsonObject = JSON.parseObject(sendMsg); |
| | | // 记录发送记录操作 |
| | | SmsResult smsResult = saveSendResult(request, 1); |
| | | if (null != smsResult){ |
| | | saveSendRecord(request, sendMsg,smsResult.getId()); |
| | | } |
| | | // 保存验证码到 redis |
| | | saveCodeForRedis(request.getUserNumber(), randNumber); |
| | | // 记录发送记录操作 |
| | | smsRecordClient.saveSmsRecord( |
| | | request.getUserNumber(), |
| | | request.getMessageContent(), |
| | | request.getTemplateId(), |
| | | resultComResult.getCode(), |
| | | resultComResult.getMsg(), |
| | | 1); |
| | | // 返回发送信息 |
| | | return R.data(jsonObject); |
| | | } |
| | |
| | | */ |
| | | private void saveCodeForRedis(String userNumber, String randNumber) { |
| | | bladeRedis.setEx(PHONE_KEY + userNumber,randNumber,5*60L); |
| | | } |
| | | |
| | | /** |
| | | * 发送记录保存 |
| | | * @param request 发送信息 |
| | | * @param sendMsg 响应数据 |
| | | * @param resultId 发送结果id |
| | | */ |
| | | private void saveSendRecord(SMSSendRequest request, String sendMsg,Long resultId) { |
| | | // 在保存明细 |
| | | SmsRecord smsRecord = new SmsRecord(); |
| | | smsRecord.setTel(request.getUserNumber()); |
| | | smsRecord.setContent(request.getMessageContent()); |
| | | smsRecord.setTemplateId(request.getTemplateId()); |
| | | smsRecord.setResContent(sendMsg); |
| | | smsRecord.setResultId(resultId); |
| | | // 解析 sendMsg |
| | | JSONObject jsonObject = JSON.parseObject(sendMsg); |
| | | smsRecord.setResponseStatus(jsonObject.getString("code")); |
| | | smsRecord.setResponseMsg(jsonObject.getString("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; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 发送邮件提醒 |
| | | * @param smsRequest |
| | | * @return |
| | | */ |
| | | @PostMapping("/sendEmailMsg") |
| | | public R sendEmailMsg(@RequestBody SmsRequest smsRequest){ |
| | | // 处理数据(可能是多个手机号情况) |
| | | List<String> list = Arrays.asList(smsRequest.getPhone().split(",")); |
| | | // 保存发送结果 |
| | | // 记录保存 |
| | | SMSSendRequest request = new SMSSendRequest(); |
| | | request.setMessageContent(smsRequest.getContent()); |
| | | request.setTemplateId("2431012165299"); |
| | | SmsResult smsResult = saveSendResult(request, list.size()); |
| | | // 遍历 |
| | | for (String phone : list) { |
| | | DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest(); |
| | | dynSMSSendRequest.setTemplateId("2431012165299"); |
| | | dynSMSSendRequest.setDynData(new String[][]{{"手机号码", "标题"}, {phone, smsRequest.getContent()}}); |
| | | // 手机号校验 |
| | | if(validator(phone)) { |
| | | // 发送邮件短信 |
| | | String dynSendMsg = JSON.toJSONString(SmsUtils.dynSendMethod(dynSMSSendRequest)); |
| | | // 记录保存 |
| | | if (null != smsResult) { |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | saveSendRecord(smsSendRequest, dynSendMsg,smsResult.getId()); |
| | | } |
| | | }else { |
| | | // 手机号有误记录 |
| | | // 记录保存 |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | saveSendRecord(smsSendRequest, "手机号错误未发送...",null); |
| | | } |
| | | } |
| | | 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)); |
| | | } |
| | | } |