| | |
| | | import cn.com.flaginfo.sdk.cmc.api.sms.send.SMSSendRequest; |
| | | import cn.gistack.alerts.sms.entity.SmsRequest; |
| | | import cn.gistack.alerts.sms.entity.SmsResult; |
| | | import cn.gistack.alerts.sms.excel.SendRainSmsExcel; |
| | | import cn.gistack.alerts.sms.excel.SendSmsExcel; |
| | | import cn.gistack.alerts.sms.listener.ExcelListener; |
| | | import cn.gistack.alerts.sms.service.SmsService; |
| | | import cn.gistack.alerts.sms.util.SmsUtils; |
| | | import cn.gistack.alerts.sms.vo.SmsRequestTemplate; |
| | | import cn.gistack.alerts.sms.vo.SmsResponseVO; |
| | | import cn.gistack.sm.intelligentCall.excel.CallExcel; |
| | | import cn.gistack.system.user.entity.User; |
| | | import cn.gistack.system.user.feign.IUserClient; |
| | | import com.alibaba.excel.EasyExcel; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springblade.core.excel.util.ExcelUtil; |
| | | import org.springblade.core.redis.cache.BladeRedis; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | import java.util.Map; |
| | | import static cn.gistack.alerts.sms.util.SmsUtils.validator; |
| | | import static cn.gistack.common.cache.CacheNames.PHONE_KEY; |
| | | |
| | | /** |
| | |
| | | // 发送操作 |
| | | ComResult<SMSSendDataResult> resultComResult = SmsUtils.sendMsg(request); |
| | | // 记录发送记录操作 |
| | | SmsResult smsResult = smsService.saveSendResult(request, 1); |
| | | SmsResult smsResult = smsService.saveSendResult(resultComResult.getCode().toString(),resultComResult.getMsg(),request, 1); |
| | | if (null != smsResult){ |
| | | smsService.saveSendRecord(request, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId()); |
| | | smsService.saveSendRecord(request, resultComResult.getCode().toString(),resultComResult.getMsg(),smsResult.getId()); |
| | | } |
| | | // 返回发送信息 |
| | | return R.data(resultComResult); |
| | | } |
| | | // 返回发送信息 |
| | | 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 = smsService.saveSendResult(request, list.size()); |
| | | // 遍历 |
| | | for (String phone : list) { |
| | | DynSMSSendRequest dynSMSSendRequest = new DynSMSSendRequest(); |
| | | dynSMSSendRequest.setTemplateId(smsRequest.getTemplateId()); |
| | | dynSMSSendRequest.setDynData(smsRequest.getParams()); |
| | | // 手机号校验 |
| | | if(validator(phone)) { |
| | | // 发送邮件短信 |
| | | ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(dynSMSSendRequest); |
| | | // 记录保存 |
| | | if (null != smsResult) { |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | smsService.saveSendRecord(smsSendRequest, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId()); |
| | | } |
| | | }else { |
| | | // 手机号有误记录 |
| | | // 记录保存 |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | smsService.saveSendRecord(smsSendRequest, 400,"手机号错误未发送...",null); |
| | | } |
| | | } |
| | | return R.status(true); |
| | | } |
| | | |
| | | /** |
| | |
| | | // 发送操作 |
| | | ComResult<SMSSendDataResult> resultComResult = SmsUtils.sendMsg(request); |
| | | // 记录发送记录操作 |
| | | SmsResult smsResult = smsService.saveSendResult(request, 1); |
| | | SmsResult smsResult = smsService.saveSendResult(resultComResult.getCode().toString(),resultComResult.getMsg(),request, 1); |
| | | if (null != smsResult){ |
| | | smsService.saveSendRecord(request, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId()); |
| | | smsService.saveSendRecord(request, resultComResult.getCode().toString(),resultComResult.getMsg(),smsResult.getId()); |
| | | } |
| | | // 保存验证码到 redis |
| | | saveCodeForRedis(request.getUserNumber(), randNumber); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 校验手机号码 |
| | | */ |
| | | public static boolean validator(String phone) { |
| | | if (null!=phone && !phone.equals("")) { |
| | | String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$"; |
| | | if (phone.length() != 11) { |
| | | return false; |
| | | } else { |
| | | Pattern p = Pattern.compile(regex); |
| | | Matcher m = p.matcher(phone); |
| | | boolean isMatch = m.matches(); |
| | | return isMatch; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 保存验证码到 redis |
| | | * @param userNumber |
| | | * @param randNumber |
| | |
| | | } |
| | | |
| | | /** |
| | | * 发送邮件提醒 |
| | | * 发送待办提醒 |
| | | * @param smsRequest |
| | | * @return |
| | | */ |
| | |
| | | // 处理数据(可能是多个手机号情况) |
| | | List<String> list = Arrays.asList(smsRequest.getPhone().split(",")); |
| | | // 保存发送结果 |
| | | // 记录保存 |
| | | SMSSendRequest request = new SMSSendRequest(); |
| | | request.setMessageContent(smsRequest.getContent()); |
| | | request.setTemplateId("2431012165299"); |
| | | SmsResult smsResult = smsService.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)) { |
| | | // 发送邮件短信 |
| | | ComResult<DynSMSSendDataResult> resultComResult = SmsUtils.dynSendMethod(dynSMSSendRequest); |
| | | // 记录保存 |
| | | if (null != smsResult) { |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | smsService.saveSendRecord(smsSendRequest, resultComResult.getCode(),resultComResult.getMsg(),smsResult.getId()); |
| | | } |
| | | }else { |
| | | // 手机号有误记录 |
| | | // 记录保存 |
| | | SMSSendRequest smsSendRequest = new SMSSendRequest(); |
| | | smsSendRequest.setUserNumber(phone); |
| | | smsSendRequest.setMessageContent(smsRequest.getContent()); |
| | | smsSendRequest.setTemplateId(dynSMSSendRequest.getTemplateId()); |
| | | // 记录发送记录操作 |
| | | smsService.saveSendRecord(smsSendRequest, 400,"手机号错误未发送...",null); |
| | | } |
| | | } |
| | | smsService.sendEmailMsg(list,smsRequest); |
| | | // 返回 |
| | | return R.status(true); |
| | | } |
| | | |
| | |
| | | |
| | | |
| | | /** |
| | | * 发送 具名 变量模板短信 |
| | | * 发送 具名 变量模板短信(告警定制) |
| | | * @param smsRequest 发送对象 |
| | | * @return |
| | | */ |
| | |
| | | public R sendSignMsg(@RequestBody SmsRequestTemplate smsRequest){ |
| | | return R.data(smsService.sendSignMsg(smsRequest)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发送降雨短信 |
| | | * @param params 发送对象 |
| | | * @return |
| | | */ |
| | | @PostMapping("/sendSignRainMsg") |
| | | public R sendSignRainMsg(@RequestBody Map<String,Object> params){ |
| | | return R.data(smsService.sendSignRainMsg(params)); |
| | | } |
| | | |
| | | /** |
| | | * 通过手机号获取外呼未接通已发短信通知的人员水库信息 |
| | | * @param callId 呼叫id |
| | | * @return |
| | | */ |
| | | @GetMapping("/getCallNotConnectSmsNoticeInfo") |
| | | public R getCallNotConnectSmsNoticeInfo(String callId){ |
| | | return R.data(smsService.getCallNotConnectSmsNoticeInfo(callId)); |
| | | } |
| | | |
| | | /** |
| | | * 导入表格发送降雨短信 |
| | | * @param file excel文件 |
| | | * @param startTime 短信内容填报起始时间 |
| | | * @param endTime 短信内容填报截止时间 |
| | | * @return |
| | | */ |
| | | @PostMapping("/import-send-rain-sms") |
| | | public R importSendRainSms(MultipartFile file,String startTime,String endTime){ |
| | | ExcelListener<SendRainSmsExcel> listener = new ExcelListener<>(); |
| | | //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据 |
| | | try { |
| | | EasyExcel.read(file.getInputStream(), SendRainSmsExcel.class, listener).headRowNumber(1).sheet(0).doRead(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<SendRainSmsExcel> list = listener.getDatas(); |
| | | // 导入并返回 |
| | | return R.data(smsService.importSendRainSms(list,startTime,endTime)); |
| | | } |
| | | |
| | | /** |
| | | * 批量发送短信(集合数据) |
| | | * @param map (保护参数 1:短信模板id 2:数据集合 list<Map<String,Object>>) |
| | | * @return |
| | | */ |
| | | @PostMapping("/batch-send-sms") |
| | | public R batchSendSms(@RequestBody Map<String,Object> map){ |
| | | // 导入并返回 |
| | | return R.data(smsService.batchSendSms(map)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 导入表格发送预警短信 |
| | | * @param file excel文件 |
| | | * @param templateId 模板id |
| | | * @param param 通用参数 |
| | | * @param content 发送内容 |
| | | * @return |
| | | */ |
| | | @PostMapping("/import-send-sms") |
| | | public R importSendSms(MultipartFile file,String templateId,String param,String content){ |
| | | ExcelListener<SendSmsExcel> listener = new ExcelListener<>(); |
| | | //headRowNumber(1)从第2行开始读取,使用getDatas()方法取出数据 |
| | | try { |
| | | EasyExcel.read(file.getInputStream(), SendSmsExcel.class, listener).headRowNumber(1).sheet(0).doRead(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | List<SendSmsExcel> list = listener.getDatas(); |
| | | // 导入并返回 |
| | | return R.data(smsService.importSendSms(list,templateId,param,content)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 导出模板 |
| | | */ |
| | | @GetMapping("/export-template") |
| | | @ApiOperation(value = "导出模板") |
| | | public void exportTemplate(HttpServletResponse response) { |
| | | List<SendSmsExcel> list = new ArrayList<>(); |
| | | ExcelUtil.export(response, "短信发送数据模板", "短信发送数据表", list, SendSmsExcel.class); |
| | | } |
| | | } |