提交 496ec2a7 authored 作者: 刘海泉's avatar 刘海泉

增加通用发送短信的功能

上级 6b3e5b96
......@@ -299,6 +299,33 @@ public class RabbitBeanConfig {
/**
*发送短信通知
*/
@Bean
public Queue sendSmsNoticeQueue() {
return new Queue(RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE,
true, false, false);
}
/**
* 发送短信通知
**/
@Bean
public DirectExchange sendSmsNoticeExchange() {
return new DirectExchange(RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_EXCHANGE);
}
/**
*发送短信通知
*/
@Bean
public Binding sendSmsNoticeBind() {
return BindingBuilder.bind(sendSmsNoticeQueue()).to(sendSmsNoticeExchange())
.with(RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_ROUTING_KEY);
}
}
......@@ -150,4 +150,16 @@ public class RabbitKeyConstants {
//保存货单调价记录routing_key
public static final String SAVE_ORDER_GOODS_ADJUSTMENT_PRICE_ROUTING_KEY = "clx_performance.save.order.goods.adjustment.price.routing.key";
//保存货单调价记录queue
public static final String NOTICE_SEND_SMS_QUEUE = "clx_performance.notice.send.sms.queue";
//保存货单调价记录exchange
public static final String NOTICE_SEND_SMS_QUEUE_EXCHANGE = "clx_performance.notice.send.sms.exchange";
//保存货单调价记录routing_key
public static final String NOTICE_SEND_SMS_QUEUE_ROUTING_KEY = "clx_performance.notice.send.sms.routing.key";
}
package com.clx.performance.listener;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.open.sdk.callback.message.OrderInfoMessage;
import com.clx.order.enums.OrderEnum;
import com.clx.order.feign.OrderFeign;
import com.clx.order.vo.feign.FeignOrderVO;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.config.ConfiguredOpenProperties;
import com.clx.performance.constant.RabbitKeyConstants;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.mq.SendSmsNoticeParam;
import com.msl.common.open.ConfiguredOpenClient;
import com.msl.common.result.Result;
import com.msl.message.sdk.action.MessageAction;
import com.msl.message.sms.api.sms.SmsMessage;
import com.msl.message.sms.api.sms.content.SmsMessageContentImpl;
import com.msl.message.sms.api.sms.recipient.SmsMessageRecipientImpl;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import static com.clx.performance.enums.OrderEnum.Status.*;
import static com.msl.message.sms.api.enums.RecipientTypeEnum.USER_MOBILE;
@Slf4j
@Component
@AllArgsConstructor
public class SendSmsListener {
private final ConfiguredOpenClient configuredOpenClient;
private final ConfiguredOpenProperties properties;
@RabbitListener(queues = RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE)
public void onMessage(Message message) {
try{
log.info("监听到通用发送通知短信,消息内容{}", new String(message.getBody()));
SendSmsNoticeParam messageParam = JSONUtil.toBean(new String(message.getBody()),
new TypeReference<MqWrapper<SendSmsNoticeParam>>() {
},false).getData();
log.info("发送短信的手机号列表:{}",messageParam.getMobileList());
if(CollectionUtils.isEmpty(messageParam.getMobileList())){
return;
}
SmsMessage smsMessage = new SmsMessage();
//设置消息内容
SmsMessageContentImpl smsMessageContent= new SmsMessageContentImpl();
//模版code
smsMessageContent.setCode(messageParam.getCode());
smsMessageContent.setParams(messageParam.getParams());
//设置消息接收人
SmsMessageRecipientImpl smsMessageRecipient = new SmsMessageRecipientImpl();
smsMessageRecipient.setUserType(USER_MOBILE.getCode());
smsMessageRecipient.setTargets(String.join(",", messageParam.getMobileList()));
smsMessage.setContent(smsMessageContent);
smsMessage.setRecipient(smsMessageRecipient);
//从消息中心注册获取的通道key
smsMessage.setAccessKey(properties.getAccessKey());
//向消息中心发送消息
log.info("开始发送消息中心短信,请求参数:{}", JSON.toJSONString(smsMessage));
Result<Object> result = configuredOpenClient.doAction(new MessageAction(smsMessage));
if(result.succeed()){
log.info("结束发送消息中心短信成功,响应结果:{}", JSON.toJSONString(result));
}else{
log.error("结束发送消息中心短信失败,响应结果:{}", JSON.toJSONString(result));
}
}catch (Exception e){
log.info("监听发送通知短信发生异常,异常原因:{}", ExceptionUtils.getStackTrace(e));
}
}
}
package com.clx.performance.service;
public interface SendSmsService {
}
package com.clx.performance.service.impl;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.clx.order.enums.OrderEnum;
import com.clx.performance.common.MqWrapper;
import com.clx.performance.dao.vehiclewarn.VehicleWarnUserDao;
import com.clx.performance.model.vehiclewarn.VehicleWarnUser;
import com.clx.performance.param.mq.SendSmsNoticeParam;
import com.clx.performance.service.SendSmsService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageBuilder;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
import static com.clx.performance.constant.RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_EXCHANGE;
import static com.clx.performance.constant.RabbitKeyConstants.NOTICE_SEND_SMS_QUEUE_ROUTING_KEY;
/**
* @ClassName SendSmsServiceImpl
* @Description
* @Author kavin
* @Date 2024/11/6 10:14
* @Version 1.0
*/
@Service
@Slf4j
@AllArgsConstructor
public class SendSmsServiceImpl implements SendSmsService {
private final RabbitTemplate rabbitTemplate;
private final VehicleWarnUserDao vehicleWarnUserDao;
public void sendChildWarnConfigSmsNotice(Integer warnTypeCode,String smsTemplateCode){
log.info("开始运单预警通知配置短信消息,短信模版code:{}",smsTemplateCode);
List<String> targets = getTargets(warnTypeCode);
SendSmsNoticeParam param = new SendSmsNoticeParam();
param.setCode(smsTemplateCode);
param.setMobileList(targets);
Message body = MessageBuilder.withBody(JSON.toJSONString(new MqWrapper<>(param)).getBytes()).build();
rabbitTemplate.send(NOTICE_SEND_SMS_QUEUE_EXCHANGE,NOTICE_SEND_SMS_QUEUE_ROUTING_KEY, body);
log.info("结束运单预警通知配置短信消息,短信模版code:{},", smsTemplateCode);
}
private List<String> getTargets(int code){
return vehicleWarnUserDao.listAllEnable()
.stream()
.filter(item -> JSONUtil.toList(item.getWarnTypeJson(), Integer.class).contains(code))
.map(VehicleWarnUser::getMobile).collect(Collectors.toList());
}
}
package com.clx.performance.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum SmsTemplateEnum {
;
@Getter
@AllArgsConstructor
public enum Type {
EXCEPTION_REPORT_DEAL("childExceptionReportDeal", "异常上报处理","{childNo:}"),
;
private final String code;
private final String msg;
private final String param;
}
}
......@@ -22,7 +22,7 @@ public enum VehicleWarnConfigEnum {
LOAD_TIMEOUT(7, "运单-装车超时"),
UNLOAD_TIMEOUT(8, "运单-卸车超时"),
DELAY(9, "运单-运单延误"),
EXCEPTION_REPORT_DEAL(10, "异常上报处理"),
;
private final Integer code;
......
package com.clx.performance.param.mq;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import java.util.Map;
/**
* @ClassName SendSmsNoticeParam
* @Description
* @Author kavin
* @Date 2024/11/6 10:21
* @Version 1.0
*/
@Setter
@Getter
public class SendSmsNoticeParam {
//短信模版code码
private String code;
//发送手机号列表
private List<String> mobileList;
//短信模版参数
private Map<String, Object> params;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论