浏览代码

msgw 推送管理公用方法

master
zouhantao 4 周前
父节点
当前提交
bebeebafa1

+ 25
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageRetryRequestDto.java 查看文件

package cn.com.taiji.msgw.dto;

import javax.validation.constraints.NotBlank;

import cn.com.taiji.core.dto.AbstractStaffBizRequestDTO;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;

/***
* 消息重发
* @Author weicailin
* @Date 2023/5/15 17:03
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class MessageRetryRequestDto extends AbstractStaffBizRequestDTO {

@ApiModelProperty(value = "发送明细id", required = true)
@NotBlank(message = "id不能为空")
private String sendDetailsId;


}

+ 13
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageRetryResponseDto.java 查看文件

package cn.com.taiji.msgw.dto;


import cn.com.taiji.common.entity.BaseEntity;

/***
* 消息重发
* @Author weicailin
* @Date 2023/5/15 17:03
* @Email 13079168756@163.com
*/
public class MessageRetryResponseDto extends BaseEntity {
}

+ 68
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageStatisticsEveryDayDataVO.java 查看文件


package cn.com.taiji.msgw.dto;

import lombok.Getter;
import lombok.Setter;

import java.time.LocalDate;
import java.time.LocalDateTime;

/***
* 消息统计每日数据
* @Author weicailin
* @Date 2023/5/15 17:03
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class MessageStatisticsEveryDayDataVO {
//所有类型和所有通道的消息统计
/***
* 统计日期
*/
private LocalDateTime startTime;
/***
* 统计日期
*/
private LocalDateTime endTime;
/***
* 总消息数
*/
private Long totalNum;

/***
* 成功消息总数
*/
private Long successTotalNum;

/***
* 失败消息总数
*/
private Long failTotalNum;

/***
* 待发送消息总数
*/
private Long waitTotalNum;

/***
* 过期消息总数
*/
private Long expiredTotalNum;

/***
* 取消消息总数
*/
private Long cancelTotalNum;

public MessageStatisticsEveryDayDataVO(LocalDateTime startTime, LocalDateTime endTime , Long totalNum, Long successTotalNum, Long failTotalNum, Long waitTotalNum, Long expiredTotalNum, Long cancelTotalNum) {
this.startTime = startTime;
this.endTime = endTime;
this.totalNum = totalNum;
this.successTotalNum = successTotalNum;
this.failTotalNum = failTotalNum;
this.waitTotalNum = waitTotalNum;
this.expiredTotalNum = expiredTotalNum;
this.cancelTotalNum = cancelTotalNum;
}
}

+ 35
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageStatisticsRequestDto.java 查看文件

package cn.com.taiji.msgw.dto;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.dto.AbstractStaffBizRequestDTO;
import cn.com.taiji.core.entity.dict.msgw.MessageType;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;

/***
* 消息统计
* @Author weicailin
* @Date 2023/5/15 17:03
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class MessageStatisticsRequestDto extends AbstractStaffBizRequestDTO {

/**
* 消息类型
*/
private MessageType messageType;

/***
* 统计开始日期
*/
private LocalDateTime startDate;
/***
* 统计结束日期
*/
private LocalDateTime endDate;

}

+ 104
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/dto/MessageStatisticsResponseDto.java 查看文件

package cn.com.taiji.msgw.dto;


import cn.com.taiji.common.entity.BaseEntity;
import lombok.Getter;
import lombok.Setter;


/***
* 消息统计
* @Author weicailin
* @Date 2023/5/15 17:03
* @Email 13079168756@163.com
*/
@Getter
@Setter
public class MessageStatisticsResponseDto extends BaseEntity {
//所有类型和所有通道的消息统计
/***
* 总消息数
*/
private Long totalNum;

/***
* 成功消息总数
*/
private Long successTotalNum;

/***
* 失败消息总数
*/
private Long failTotalNum;

/***
* 待发送消息总数
*/
private Long waitTotalNum;

/***
* 过期消息总数
*/
private Long expiredTotalNum;

/***
* 取消消息总数
*/
private Long cancelTotalNum;

public MessageStatisticsResponseDto(Long totalNum, Long successTotalNum, Long failTotalNum, Long waitTotalNum, Long expiredTotalNum, Long cancelTotalNum) {
this.totalNum = totalNum;
this.successTotalNum = successTotalNum;
this.failTotalNum = failTotalNum;
this.waitTotalNum = waitTotalNum;
this.expiredTotalNum = expiredTotalNum;
this.cancelTotalNum = cancelTotalNum;
}

//指定类型、通道的消息统计
/***
* 指定类型的总消息数
*/
private Long specifiedTotalNum;

/***
* 指定类型的成功消息总数
*/
private Long specifiedSuccessTotalNum;

/***
* 指定类型的失败消息总数
*/
private Long specifiedFailTotalNum;

/***
* 指定类型的待发送消息总数
*/
private Long specifiedWaitTotalNum;

/***
* 指定类型的过期消息总数
*/
private Long specifiedExpiredTotalNum;

/***
* 指定类型的取消消息总数
*/
private Long specifiedCancelTotalNum;

public MessageStatisticsResponseDto(Long totalNum, Long successTotalNum, Long failTotalNum, Long waitTotalNum, Long expiredTotalNum, Long cancelTotalNum, Long specifiedTotalNum, Long specifiedSuccessTotalNum, Long specifiedFailTotalNum, Long specifiedWaitTotalNum, Long specifiedExpiredTotalNum, Long specifiedCancelTotalNum) {
this.totalNum = totalNum;
this.successTotalNum = successTotalNum;
this.failTotalNum = failTotalNum;
this.waitTotalNum = waitTotalNum;
this.expiredTotalNum = expiredTotalNum;
this.cancelTotalNum = cancelTotalNum;
this.specifiedTotalNum = specifiedTotalNum;
this.specifiedSuccessTotalNum = specifiedSuccessTotalNum;
this.specifiedFailTotalNum = specifiedFailTotalNum;
this.specifiedWaitTotalNum = specifiedWaitTotalNum;
this.specifiedExpiredTotalNum = specifiedExpiredTotalNum;
this.specifiedCancelTotalNum = specifiedCancelTotalNum;
}

}

+ 267
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/manager/messageWaitSend/MessageWaiSendManagerImpl.java 查看文件

package cn.com.taiji.msgw.manager.messageWaitSend;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

import cn.com.taiji.common.model.dao.Pagination;
import cn.com.taiji.core.repo.request.msgw.MsgwSendDetailsPageRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.entity.dict.msgw.MessageResult;
import cn.com.taiji.core.entity.dict.msgw.MessageType;
import cn.com.taiji.core.entity.msgw.MsgwSendApply;
import cn.com.taiji.core.entity.msgw.MsgwSendDetails;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMiniSendMessageRequest;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.WxMpSendMessageRequest;
import cn.com.taiji.core.model.comm.protocol.ias.message.HltSendShortRequest;
import cn.com.taiji.core.model.comm.protocol.ias.message.QtkPushSendMessageRequest;
import cn.com.taiji.core.model.comm.protocol.ias.message.QtzlEmailSendRequest;
import cn.com.taiji.core.repo.jpa.msgw.MsgwSendApplyRepo;
import cn.com.taiji.core.repo.jpa.msgw.MsgwSendDetailsRepo;
import cn.com.taiji.msgw.dto.*;
import cn.com.taiji.msgw.manager.AbstractCommManager;

@Service
public class MessageWaiSendManagerImpl extends AbstractCommManager implements MessageWaitSendManager {

@Autowired
private MsgwSendApplyRepo sendApplyRepo;
@Autowired
private MsgwSendDetailsRepo sendDetailsRepo;

// 消息重发
@Override
public MessageRetryResponseDto messageRetry(MessageRetryRequestDto request) throws ManagerException {
//核对该消息是需要创建-待发送消息记录
MsgwSendDetails sendDetails = sendDetailsRepo.findById(request.getSendDetailsId()).orElse(null);
//3、判断状态,只有发送失败的消息的才可以支持消息重发
if (MessageResult.FAIL.equals(sendDetails.getSendResult())){
// 根据不同类型和渠道,发送对应的消息
try {
sendMessageByQtkMessageAndQuartz(sendDetails);
//4、修改消息列表的状态,改为已发送
sendDetails.setSendResult(MessageResult.SEND);
} catch (ServiceHandleException e) {
//4、修改消息列表的状态,改为发送失败
sendDetails.setSendResult(MessageResult.FAIL);
sendDetails.setDescription(e.getMessage());
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
} finally {
LocalDateTime now = LocalDateTime.now();
sendDetails.setRetryNum(sendDetails.getRetryNum() + 1);
sendDetails.setSendTime(now);
sendDetailsRepo.save(sendDetails);
}
}
MessageRetryResponseDto response = new MessageRetryResponseDto();
return response;
}

@Override
public MessageStatisticsResponseDto messageStatistics(MessageStatisticsRequestDto request) {
LocalDateTime startDateTime = request.getStartDate();
LocalDateTime endDateTime = request.getEndDate();
MessageStatisticsResponseDto response = null;
//统计所有消息
//总消息数
Long totalNum = sendDetailsRepo.countStatistics(null, null, startDateTime, endDateTime);
//成功消息总数
Long successTotalNum = sendDetailsRepo.countStatistics(null, MessageResult.SEND, startDateTime, endDateTime);
//失败消息总数
Long failTotalNum = sendDetailsRepo.countStatistics(null, MessageResult.FAIL, startDateTime, endDateTime);
//待发送消息总数
Long waitTotalNum = sendDetailsRepo.countStatistics(null, MessageResult.WAIT, startDateTime, endDateTime);
//过期消息总数
Long expiredTotalNum = sendDetailsRepo.countStatistics(null, MessageResult.EXPIRED, startDateTime, endDateTime);
//取消消息总数
Long cancelTotalNum = sendDetailsRepo.countStatistics(null, MessageResult.CANCEL, startDateTime, endDateTime);


if (request.getMessageType() == null) {
response = new MessageStatisticsResponseDto(totalNum, successTotalNum, failTotalNum, waitTotalNum, expiredTotalNum, cancelTotalNum,
totalNum, successTotalNum, failTotalNum, waitTotalNum, expiredTotalNum, cancelTotalNum);
} else {
//统计指定类型
Long specifiedTotalNum = sendDetailsRepo.countStatistics(request.getMessageType(), null, startDateTime, endDateTime);
//成功消息总数
Long specifiedSuccessTotalNum = sendDetailsRepo.countStatistics(request.getMessageType(), MessageResult.SEND, startDateTime, endDateTime);
//失败消息总数
Long specifiedFailTotalNum = sendDetailsRepo.countStatistics(request.getMessageType(), MessageResult.FAIL, startDateTime, endDateTime);
//待发送消息总数
Long specifiedWaitTotalNum = sendDetailsRepo.countStatistics(request.getMessageType(), MessageResult.WAIT, startDateTime, endDateTime);
//过期消息总数
Long specifiedExpiredTotalNum = sendDetailsRepo.countStatistics(request.getMessageType(), MessageResult.EXPIRED, startDateTime, endDateTime);
//取消消息总数
Long specifiedCancelTotalNum = sendDetailsRepo.countStatistics(request.getMessageType(), MessageResult.CANCEL, startDateTime, endDateTime);

response = new MessageStatisticsResponseDto(totalNum, successTotalNum, failTotalNum, waitTotalNum, expiredTotalNum, cancelTotalNum,
specifiedTotalNum, specifiedSuccessTotalNum, specifiedFailTotalNum, specifiedWaitTotalNum, specifiedExpiredTotalNum, specifiedCancelTotalNum);
}
return response;
}

// 消息发送
public void sendMessageByQtkMessageAndQuartz(MsgwSendDetails sendDetails) throws ManagerException, JsonProcessingException {
MessageType messageType = sendDetails.getMessageType();
//一、《web》 端消息推送
if (MessageType.WEB.equals(messageType)) {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(sendDetails.getRequestDataJson());
QtkPushSendMessageRequest sendMessageRequest = mapper.treeToValue(jsonNode, QtkPushSendMessageRequest.class);
jsonPostRepeat(sendMessageRequest);
}
//二、《app》 端消息推送
// else if (MessageType.APP.equals(messageType)) {
// //极光推送
// if (MessageChannel.JPUSH.equals(messageChannel) && StringUtils.hasText(cmdName)) {
// //1、极光推送-全体App用户(android/ios)-通知栏通知
// if (cmdName.equals(ChannelCmd.JPUSHALLAPPN.name())) {
// JpushAllAppNotificationRequest request = JSON.parseObject(qtkMessage.getRequestJson(), JpushAllAppNotificationRequest.class);
// jpushManager.sendWaitToAllAppNotification(request, apiKey, qtkMessage);
// }
// //2、极光推送-全体App用户(android/ios)-自定义消息
// else if (cmdName.equals(ChannelCmd.JPUSHALLAPPM.name())) {
// JpushAllAppMessageRequest request = JSON.parseObject(qtkMessage.getRequestJson(), JpushAllAppMessageRequest.class);
// jpushManager.sendWaitToAllAppMessage(request, apiKey, qtkMessage);
// }
// //3、极光推送-全体App用户(android/ios)-通知栏通知和自定义消息
// else if (cmdName.equals(ChannelCmd.JPUSHALLAPPNM.name())) {
// JpushAllAppNotificationMessageRequest request = JSON.parseObject(qtkMessage.getRequestJson(), JpushAllAppNotificationMessageRequest.class);
// jpushManager.sendWaitToAllAppNotificationMessage(request, apiKey, qtkMessage);
// }
// //4、极光推送-指定registrationId(android/ios)-通知栏通知
// else if (cmdName.equals(ChannelCmd.JPUSHALLRIDN.name())) {
// JpushAllRidNotificationRequest request = JSON.parseObject(qtkMessage.getRequestJson(), JpushAllRidNotificationRequest.class);
// jpushManager.sendWaitToAllRidNotification(request, apiKey, qtkMessage);
// }
// //5、极光推送-指定registrationId(android/ios)-自定义消息
// else if (cmdName.equals(ChannelCmd.JPUSHALLRIDM.name())) {
// JpushAllRidMessageRequest request = JSON.parseObject(qtkMessage.getRequestJson(), JpushAllRidMessageRequest.class);
// jpushManager.sendWaitToAllRidMessage(request, apiKey, qtkMessage);
// }
// //6、极光推送-指定registrationId(android/ios)-通知栏通知和自定义消息
// else if (cmdName.equals(ChannelCmd.JPUSHALLRIDNM.name())) {
// JpushAllRidNotificationMessageRequest request = JSON.parseObject(qtkMessage.getRequestJson(), JpushAllRidNotificationMessageRequest.class);
// jpushManager.sendWaitToAllRidNotificationMessage(request, apiKey, qtkMessage);
// }
// //批量导入
// else if (cmdName.equals(ChannelCmd.JPUSHALLAPPMIMPORT.name())) {
// MessageImportSendRequest request = JSON.parseObject(qtkMessage.getRequestJson(), MessageImportSendRequest.class);
// ImportMessageDto importMessageDto = new ImportMessageDto();
// jpushAllAppMessageImportSendHandler.readExcel(request.getExcelUrl(), importMessageDto); //读取excel数据
// jpushManager.sendWaitToAllAppMessageImport(request, apiKey, qtkMessage, importMessageDto);
// } else if (cmdName.equals(ChannelCmd.JPUSHALLAPPNIMPORT.name())) {
// MessageImportSendRequest request = JSON.parseObject(qtkMessage.getRequestJson(), MessageImportSendRequest.class);
// ImportMessageDto importMessageDto = new ImportMessageDto();
// jpushAllAppNotificationImportSendHandler.readExcel(request.getExcelUrl(), importMessageDto); //读取excel数据
// jpushManager.sendWaitToAllAppNotificationImport(request, apiKey, qtkMessage, importMessageDto);
// } else if (cmdName.equals(ChannelCmd.JPUSHALLAPPNMIMPORT.name())) {
// MessageImportSendRequest request = JSON.parseObject(qtkMessage.getRequestJson(), MessageImportSendRequest.class);
// ImportMessageDto importMessageDto = new ImportMessageDto();
// jpushAllAppNotificationMessageImportSendHandler.readExcel(request.getExcelUrl(), importMessageDto); //读取excel数据
// jpushManager.sendWaitToAllAppNotificationMessageImport(request, apiKey, qtkMessage, importMessageDto);
// } else if (cmdName.equals(ChannelCmd.JPUSHALLRIDMIMPORT.name())) {
// MessageImportSendRequest request = JSON.parseObject(qtkMessage.getRequestJson(), MessageImportSendRequest.class);
// ImportMessageDto importMessageDto = new ImportMessageDto();
// jpushAllRidMessageImportSendHandler.readExcel(request.getExcelUrl(), importMessageDto); //读取excel数据
//
// Map<String, String> ridMapByMobileList = jpushAllRidMessageImportSendHandler.getRidMapByMobileList(importMessageDto);//获取
// jpushManager.sendWaitToAllRidMessageImport(request, apiKey, qtkMessage, importMessageDto, ridMapByMobileList);
// } else if (cmdName.equals(ChannelCmd.JPUSHALLRIDNIMPORT.name())) {
// MessageImportSendRequest request = JSON.parseObject(qtkMessage.getRequestJson(), MessageImportSendRequest.class);
// ImportMessageDto importMessageDto = new ImportMessageDto();
// jpushAllRidNotificationImportSendHandler.readExcel(request.getExcelUrl(), importMessageDto); //读取excel数据
//
// Map<String, String> ridMapByMobileList = jpushAllRidNotificationImportSendHandler.getRidMapByMobileList(importMessageDto);//获取
// jpushManager.sendWaitToAllRidNotificationImport(request, apiKey, qtkMessage, importMessageDto, ridMapByMobileList);
// } else if (cmdName.equals(ChannelCmd.JPUSHALLRIDNMIMPORT.name())) {
// MessageImportSendRequest request = JSON.parseObject(qtkMessage.getRequestJson(), MessageImportSendRequest.class);
// ImportMessageDto importMessageDto = new ImportMessageDto();
// jpushAllRidNotificationMessageImportSendHandler.readExcel(request.getExcelUrl(), importMessageDto); //读取excel数据
//
// Map<String, String> ridMapByMobileList = jpushAllRidNotificationMessageImportSendHandler.getRidMapByMobileList(importMessageDto);//获取
// jpushManager.sendWaitToAllRidNotificationMessageImport(request, apiKey, qtkMessage, importMessageDto, ridMapByMobileList);
// }
// }
// }
//三、《小程序》 端消息推送
else if (MessageType.MINI_PROGRAM.equals(messageType)) {
//微信小程序
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(sendDetails.getRequestDataJson());
WxMiniSendMessageRequest wxMiniSendMessageRequest = mapper.treeToValue(jsonNode, WxMiniSendMessageRequest.class);
jsonPostRepeat(wxMiniSendMessageRequest);
}
// else if(MessageType.ZFB_MINI.equals(messageType)){
// // TODO:panbing 2024/5/28 16:58 支付宝消息发送
// if(MessageChannel.ZFB_MINI==messageChannel){
// if(cmdName.equals(ChannelCmd.ZFBMINISENDMESSAGE.name())){
// ZfbMiniSendMessageRequest request = JSON.parseObject(qtkMessage.getRequestJson(), ZfbMiniSendMessageRequest.class);
// zfbManager.sendMsg(request, apiKey, qtkMessage);
// }
// }
// }
//四、《短信》 端消息推送
else if (MessageType.SHORT.equals(messageType)) {
//汇联通短信(统一会员平台)
// 提取字段
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(sendDetails.getRequestDataJson());
String title = jsonNode.get("title").asText();
String mobile = jsonNode.get("mobile").asText();
String alarmMessage = jsonNode.get("alarmMessage").asText();
// 短信发送
HltSendShortRequest hltShortRequest = new HltSendShortRequest();
hltShortRequest.setTitle(title);
hltShortRequest.setMessage(mobile);
hltShortRequest.setMessage(alarmMessage);
jsonPostRepeat(hltShortRequest);
}
//五、《邮件》 端消息推送
else if (MessageType.EMAIL.equals(messageType)) {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(sendDetails.getRequestDataJson());
// 邮件发送
QtzlEmailSendRequest emailSendRequest = mapper.treeToValue(jsonNode, QtzlEmailSendRequest.class);
jsonPostRepeat(emailSendRequest);
}
//六、《公众号》 端消息推送
else if (MessageType.OFFICIAL_ACCOUNTS.equals(messageType)) {
//1、微信公众号
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(sendDetails.getRequestDataJson());
WxMpSendMessageRequest wxMpSendMessageRequest = mapper.treeToValue(jsonNode, WxMpSendMessageRequest.class);
jsonPostRepeat(wxMpSendMessageRequest);
}
}

@Override
public MessageSendDetailsResponseDto view(MessageSendDetailsRequestDto request) {
MsgwSendDetails sendDetails = sendDetailsRepo.findById(request.getSendDetailsId()).orElse(null);
MessageSendDetailsResponseDto response = new MessageSendDetailsResponseDto();
response.setSendDetails(sendDetails);
return response;
}

@Override
public Pagination page(MsgwSendDetailsPageRequest request) throws ManagerException {
if (request.getMessageType().equals(null)){
throw new ManagerException("请输入类型!");
}
return sendDetailsRepo.page(request);
}


}

+ 27
- 0
zhywpt-app-msgw/src/main/java/cn/com/taiji/msgw/manager/messageWaitSend/MessageWaitSendManager.java 查看文件

package cn.com.taiji.msgw.manager.messageWaitSend;

import cn.com.taiji.common.manager.ManagerException;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.model.dao.Pagination;
import cn.com.taiji.core.repo.request.msgw.MsgwSendDetailsPageRequest;
import cn.com.taiji.msgw.dto.*;

/**
* @Author weicailin
* @Date 2023/4/19 18:41
* @Email 13079168756@163.com
*/
public interface MessageWaitSendManager {


/**消息重发*/
MessageRetryResponseDto messageRetry(MessageRetryRequestDto request) throws ManagerException;

/**消息统计*/
MessageStatisticsResponseDto messageStatistics(MessageStatisticsRequestDto request) throws ServiceHandleException;

/**消息明细*/
MessageSendDetailsResponseDto view(MessageSendDetailsRequestDto request);

Pagination page(MsgwSendDetailsPageRequest request) throws ManagerException;
}

正在加载...
取消
保存