diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/SysSmsService.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/SysSmsService.java index 8bb9cb2a8e..1327aff692 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/SysSmsService.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/SysSmsService.java @@ -44,6 +44,15 @@ public interface SysSmsService extends BaseService { * @param status 发送状态 */ void save(Integer platform, String mobile, LinkedHashMap params, Integer status); + /** + * 保存短信发送记录 + * @param platform 平台 + * @param mobile 手机号 + * @param params 短信参数 + * @param status 发送状态 + * @param customerId 客户Id + */ + void save(Integer platform, String mobile, LinkedHashMap params, Integer status, String customerId); /** * 发送短信验证码 diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java index 5e4d21d072..08233fc452 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java @@ -19,6 +19,7 @@ import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.page.PageData; import com.epmet.commons.tools.utils.ConvertUtils; import com.epmet.commons.tools.utils.Result; +import com.epmet.constant.SmsTemplateConstant; import com.epmet.constant.SysSmsConstant; import com.epmet.dao.SysSmsDao; import com.epmet.dto.SysSmsDTO; @@ -132,6 +133,34 @@ public class SysSmsServiceImpl extends BaseServiceImpl baseDao.insert(sms); } + @Override + public void save(Integer platform, String mobile, LinkedHashMap params, Integer status, String customerId) { + SysSmsEntity sms = new SysSmsEntity(); + sms.setPlatform(platform); + sms.setMobile(mobile); + sms.setCustomerId(customerId); + + //设置短信参数 + if(MapUtil.isNotEmpty(params)){ + int index = 1; + for(String value : params.values()){ + if(index == 1){ + sms.setParams1(value); + }else if(index == 2){ + sms.setParams2(value); + }else if(index == 3){ + sms.setParams3(value); + }else if(index == 4){ + sms.setParams4(value); + } + index++; + } + } + + sms.setStatus(status); + baseDao.insert(sms); + } + @Override public Result sendSmsCaptcha(String mobile) { Integer code = (int) ((Math.random() * 9 + 1) * 100000); @@ -240,8 +269,19 @@ public class SysSmsServiceImpl extends BaseServiceImpl SysSmsDTO sysSmsDTO = new SysSmsDTO(); sysSmsDTO.setMobile(dto.getMobile()); sysSmsDTO.setAliyunTemplateCode(dto.getAliyunTemplateCode()); - sysSmsDTO.setParams1("syc测试1"); - sysSmsDTO.setParams2("syc测试2"); + sysSmsDTO.setCustomerId(customerId); + HashMap map = new HashMap<>(); + try{ + if(SmsTemplateConstant.PROJECT_TRANSFER.equals(dto.getAliyunTemplateCode())){ + map.put("params1", "【党群e事通】您有新的被吹哨任务,请尽快处理。"); + }else if(SmsTemplateConstant.PROJECT_OVERDUE.equals(dto.getAliyunTemplateCode())){ + map.put("params1", "【党群e事通】您有项目即将超期,请尽快处理。"); + } + String paramJson = new ObjectMapper().writeValueAsString(map); + sysSmsDTO.setParams(paramJson); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } //推送短信 this.sendMsg(sysSmsDTO); }); @@ -271,7 +311,6 @@ public class SysSmsServiceImpl extends BaseServiceImpl **/ private void sendMsg(SysSmsDTO sysSmsDTO) { logger.info(String.format("固定短信模板推送短信信息接口入参:%s", JSON.toJSONString(sysSmsDTO))); - LinkedHashMap map = null; try { //短信服务 AbstractSmsService service = SmsFactory.build(); @@ -280,9 +319,9 @@ public class SysSmsServiceImpl extends BaseServiceImpl } //发送短信 if (StringUtils.isNotBlank(sysSmsDTO.getAliyunTemplateCode())) { - service.sendSmsByAliyunTemplateCode(sysSmsDTO.getMobile(), map, sysSmsDTO.getAliyunTemplateCode()); + service.sendSmsByAliyunTemplateCodeMsg(sysSmsDTO); } else { - service.sendSms(sysSmsDTO.getMobile(), map); + service.sendSmsMsg(sysSmsDTO); } } catch (Exception e) { logger.error(String.format("项目提醒发送短信失败,失败手机号:%s,ErrorCode:%s", sysSmsDTO.getMobile(), e.getMessage())); diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AbstractSmsService.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AbstractSmsService.java index e1a07530fb..bcdeb1e466 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AbstractSmsService.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AbstractSmsService.java @@ -8,6 +8,8 @@ package com.epmet.sms; +import com.epmet.dto.SysSmsDTO; + import java.util.LinkedHashMap; /** @@ -50,4 +52,25 @@ public abstract class AbstractSmsService { public abstract void sendSmsByAliyunTemplateCode(String mobile, LinkedHashMap params, String aliyunTemplateCode); + /** + * 发送短信 + * @param sysSmsDTO 短信对象 + */ + public abstract void sendSmsMsg(SysSmsDTO sysSmsDTO); + + /** + * + * 发送短信 + * @param sysSmsDTO 短信对象 + * @param signName 短信签名 + * @param template 短信模板 + */ + public abstract void sendSmsMsg(SysSmsDTO sysSmsDTO, String signName, String template); + + /** + * @return void + * @param sysSmsDTO 短信对象 + * @description sun + **/ + public abstract void sendSmsByAliyunTemplateCodeMsg(SysSmsDTO sysSmsDTO); } diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AliyunSmsService.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AliyunSmsService.java index 9ec5c16cd5..3ffa06f8c8 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AliyunSmsService.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AliyunSmsService.java @@ -19,8 +19,10 @@ import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.epmet.commons.tools.constant.Constant; +import com.epmet.commons.tools.exception.ErrorCode; import com.epmet.commons.tools.exception.RenException; import com.epmet.commons.tools.utils.SpringContextUtils; +import com.epmet.dto.SysSmsDTO; import com.epmet.enums.PlatformEnum; import com.epmet.exception.ModuleErrorCode; import com.epmet.service.SysSmsService; @@ -118,4 +120,66 @@ public class AliyunSmsService extends AbstractSmsService { } this.sendSms(mobile, params, config.getAliyunSignName(), config.getAliyunTemplateCode()); } + + @Override + public void sendSmsMsg(SysSmsDTO sysSmsDTO) { + this.sendSmsMsg(sysSmsDTO, config.getAliyunSignName(), config.getAliyunTemplateCode()); + } + @Override + public void sendSmsMsg(SysSmsDTO sysSmsDTO, String signName, String template) { + System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); + System.setProperty("sun.net.client.defaultReadTimeout", "30000"); + + LinkedHashMap params; + try { + params = JSON.parseObject(sysSmsDTO.getParams(), LinkedHashMap.class); + }catch (Exception e){ + throw new RenException(ErrorCode.JSON_FORMAT_ERROR); + } + + //组装请求对象 + SendSmsRequest request = new SendSmsRequest(); + request.setMethod(MethodType.POST); + //待发送手机号,支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式 + //发送国际/港澳台消息时,接收号码格式为00+国际区号+号码,如"0085200000000" + request.setPhoneNumbers(sysSmsDTO.getMobile()); + //短信签名-可在短信控制台中找到 + request.setSignName(signName); + //短信模板-可在短信控制台中找到 + request.setTemplateCode(template); + //参数 + if(MapUtil.isNotEmpty(params)){ + request.setTemplateParam(JSON.toJSONString(params)); + } + + SendSmsResponse response; + try { + IAcsClient acsClient = new DefaultAcsClient(profile); + response = acsClient.getAcsResponse(request); + } catch (ClientException e) { + throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, e, ""); + } + + int status = Constant.SUCCESS; + if(!Constant.OK.equalsIgnoreCase(response.getCode())){ + status = Constant.FAIL; + } + + //保存短信记录 + SysSmsService sysSmsService = SpringContextUtils.getBean(SysSmsService.class); + sysSmsService.save(PlatformEnum.ALIYUN.value(), sysSmsDTO.getMobile(), params, status, sysSmsDTO.getCustomerId()); + + if(status == Constant.FAIL){ + throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, response.getMessage()); + } + } + + @Override + public void sendSmsByAliyunTemplateCodeMsg(SysSmsDTO sysSmsDTO) { + if(StringUtils.isNotBlank(sysSmsDTO.getAliyunTemplateCode())){ + this.sendSmsMsg(sysSmsDTO, config.getAliyunSignName(), sysSmsDTO.getAliyunTemplateCode()); + return; + } + this.sendSmsMsg(sysSmsDTO, config.getAliyunSignName(), config.getAliyunTemplateCode()); + } } diff --git a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/QcloudSmsService.java b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/QcloudSmsService.java index a3e33d6557..84ab8bb41e 100644 --- a/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/QcloudSmsService.java +++ b/epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/QcloudSmsService.java @@ -9,6 +9,9 @@ package com.epmet.sms; import cn.hutool.core.map.MapUtil; +import com.alibaba.fastjson.JSON; +import com.epmet.commons.tools.exception.ErrorCode; +import com.epmet.dto.SysSmsDTO; import com.github.qcloudsms.SmsSingleSender; import com.github.qcloudsms.SmsSingleSenderResult; import com.epmet.commons.tools.constant.Constant; @@ -77,4 +80,57 @@ public class QcloudSmsService extends AbstractSmsService { } this.sendSms(mobile, params, config.getAliyunSignName(), config.getAliyunTemplateCode()); } + + @Override + public void sendSmsMsg(SysSmsDTO sysSmsDTO) { + this.sendSmsMsg(sysSmsDTO, config.getAliyunSignName(), config.getAliyunTemplateCode()); + } + + @Override + public void sendSmsMsg(SysSmsDTO sysSmsDTO, String signName, String template) { + SmsSingleSender sender = new SmsSingleSender(config.getQcloudAppId(), config.getQcloudAppKey()); + + LinkedHashMap params; + try { + params = JSON.parseObject(sysSmsDTO.getParams(), LinkedHashMap.class); + }catch (Exception e){ + throw new RenException(ErrorCode.JSON_FORMAT_ERROR); + } + + //短信参数 + ArrayList paramsList = new ArrayList<>(); + if(MapUtil.isNotEmpty(params)){ + for(String value : params.values()){ + paramsList.add(value); + } + } + SmsSingleSenderResult result; + try { + result = sender.sendWithParam("86", sysSmsDTO.getMobile(), Integer.parseInt(template), paramsList, signName, null, null); + } catch (Exception e) { + throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, e, ""); + } + + int status = Constant.SUCCESS; + if(result.result != 0){ + status = Constant.FAIL; + } + + //保存短信记录 + SysSmsService sysSmsService = SpringContextUtils.getBean(SysSmsService.class); + sysSmsService.save(PlatformEnum.QCLOUD.value(), sysSmsDTO.getMobile(), params, status); + + if(status == Constant.FAIL){ + throw new RenException(ModuleErrorCode.SEND_SMS_ERROR, result.errMsg); + } + } + + @Override + public void sendSmsByAliyunTemplateCodeMsg(SysSmsDTO sysSmsDTO) { + if(StringUtils.isNotBlank(sysSmsDTO.getAliyunTemplateCode())){ + this.sendSmsMsg(sysSmsDTO, config.getAliyunSignName(), sysSmsDTO.getAliyunTemplateCode()); + return; + } + this.sendSmsMsg(sysSmsDTO, config.getAliyunSignName(), config.getAliyunTemplateCode()); + } }