Browse Source

项目滞留短信推送逻辑调整

dev_shibei_match
sunyuchao 4 years ago
parent
commit
3d30bc5723
  1. 9
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/SysSmsService.java
  2. 49
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/impl/SysSmsServiceImpl.java
  3. 23
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AbstractSmsService.java
  4. 64
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/AliyunSmsService.java
  5. 56
      epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/sms/QcloudSmsService.java

9
epmet-module/epmet-message/epmet-message-server/src/main/java/com/epmet/service/SysSmsService.java

@ -44,6 +44,15 @@ public interface SysSmsService extends BaseService<SysSmsEntity> {
* @param status 发送状态
*/
void save(Integer platform, String mobile, LinkedHashMap<String, String> params, Integer status);
/**
* 保存短信发送记录
* @param platform 平台
* @param mobile 手机号
* @param params 短信参数
* @param status 发送状态
* @param customerId 客户Id
*/
void save(Integer platform, String mobile, LinkedHashMap<String, String> params, Integer status, String customerId);
/**
* 发送短信验证码

49
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<SysSmsDao, SysSmsEntity>
baseDao.insert(sms);
}
@Override
public void save(Integer platform, String mobile, LinkedHashMap<String, String> 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<SysSmsDao, SysSmsEntity>
SysSmsDTO sysSmsDTO = new SysSmsDTO();
sysSmsDTO.setMobile(dto.getMobile());
sysSmsDTO.setAliyunTemplateCode(dto.getAliyunTemplateCode());
sysSmsDTO.setParams1("syc测试1");
sysSmsDTO.setParams2("syc测试2");
sysSmsDTO.setCustomerId(customerId);
HashMap<String, String> 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<SysSmsDao, SysSmsEntity>
**/
private void sendMsg(SysSmsDTO sysSmsDTO) {
logger.info(String.format("固定短信模板推送短信信息接口入参:%s", JSON.toJSONString(sysSmsDTO)));
LinkedHashMap<String, String> map = null;
try {
//短信服务
AbstractSmsService service = SmsFactory.build();
@ -280,9 +319,9 @@ public class SysSmsServiceImpl extends BaseServiceImpl<SysSmsDao, SysSmsEntity>
}
//发送短信
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()));

23
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<String, String> 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);
}

64
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<String, String> 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());
}
}

56
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<String, String> params;
try {
params = JSON.parseObject(sysSmsDTO.getParams(), LinkedHashMap.class);
}catch (Exception e){
throw new RenException(ErrorCode.JSON_FORMAT_ERROR);
}
//短信参数
ArrayList<String> 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());
}
}

Loading…
Cancel
Save