From 6a0bb5f23ec2db5ebeab71c3179694a534c3d068 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Tue, 10 Mar 2026 10:46:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/sender/impl/AliyunEmailSender.java | 82 +++++++++++-------- .../client/sender/impl/AliyunSmsSender.java | 2 + .../client/sender/impl/TelecomSmsSender.java | 5 ++ 3 files changed, 56 insertions(+), 33 deletions(-) diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunEmailSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunEmailSender.java index 84b6cbb..30d8398 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunEmailSender.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunEmailSender.java @@ -11,6 +11,7 @@ import com.aliyun.teautil.models.RuntimeOptions; import com.njcn.msgpush.module.push.client.sender.EmailSender; import com.njcn.msgpush.module.push.client.sender.Sender; import com.njcn.msgpush.module.push.client.setting.impl.AliYunMailSetting; +import com.njcn.msgpush.module.push.constant.MessageStatusConstant; import com.njcn.msgpush.module.push.constant.MsgPushConstant; import com.njcn.msgpush.module.push.dal.dataobject.channel.ProviderErrorCodeMappingDO; import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO; @@ -20,6 +21,8 @@ import org.springframework.http.HttpStatus; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Map; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; import static com.aliyun.teautil.Common.toJSONString; @@ -62,46 +65,59 @@ public class AliyunEmailSender implements EmailSender { @Override public boolean sendEmail(MessageRecordDO message, Map params) { - RuntimeOptions runtimeOptions = new RuntimeOptions(); - runtimeOptions.autoretry = true; + Future future = this.sender.MSG_PUSH_THREAD_POOL_EXECUTOR.submit(() -> { + message.setStatus(MessageStatusConstant.SENDING); + RuntimeOptions runtimeOptions = new RuntimeOptions(); + runtimeOptions.autoretry = true; - String extraInfo = message.getExtraInfo(); - JSONObject jsonObject = JSON.parseObject(extraInfo); - SingleSendMailRequest request = new SingleSendMailRequest() - .setAccountName(jsonObject.get(ACCOUNT_NAME).toString()) - .setAddressType(1) - .setReplyToAddress((boolean) jsonObject.get(REPLY_TO_ADDRESS)) - .setToAddress(message.getReceiver()) //目标地址,多个 email 地址可以用逗号分隔,最多 100 个地址(支持邮件组)。 - .setSubject(message.getTitle()) - .setHtmlBody(message.getContent()) //HtmlBody 和 TextBody 是针对不同类型的邮件 - .setTextBody("") - .setFromAlias(jsonObject.get(FROM_ALIAS).toString()); + String extraInfo = message.getExtraInfo(); + JSONObject jsonObject = JSON.parseObject(extraInfo); + SingleSendMailRequest request = new SingleSendMailRequest() + .setAccountName(jsonObject.get(ACCOUNT_NAME).toString()) + .setAddressType(1) + .setReplyToAddress((boolean) jsonObject.get(REPLY_TO_ADDRESS)) + .setToAddress(message.getReceiver()) //目标地址,多个 email 地址可以用逗号分隔,最多 100 个地址(支持邮件组)。 + .setSubject(message.getTitle()) + .setHtmlBody(message.getContent()) //HtmlBody 和 TextBody 是针对不同类型的邮件 + .setTextBody("") + .setFromAlias(jsonObject.get(FROM_ALIAS).toString()); - try { - LocalDateTime now = LocalDateTime.now(); - long start = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); - message.setSendTime(now); - SingleSendMailResponse response = this.emailClient.singleSendMailWithOptions(request, runtimeOptions); - LocalDateTime end = LocalDateTime.now(); - message.setCostTime((int) (end.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - start)); - System.out.println(toJSONString(response)); - if (HttpStatus.OK.value() == response.getStatusCode()) { - this.sender.channelProviderConfigService.successUpdate(message.getProviderType(), message.getChannel()); - return true; - } else { - message.setErrorCode(response.getStatusCode() + ""); - ProviderErrorCodeMappingDO providerErrorCode = this.sender.providerErrorCodeMappingService.getByProviderErrorCode(message.getProviderType(), message.getChannel(), response.getStatusCode() + ""); - if (ObjectUtil.isNotNull(providerErrorCode)) { - message.setErrorMsg(providerErrorCode.getOriginalMessage()); + try { + LocalDateTime now = LocalDateTime.now(); + long start = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + message.setSendTime(now); + SingleSendMailResponse response = this.emailClient.singleSendMailWithOptions(request, runtimeOptions); + LocalDateTime end = LocalDateTime.now(); + message.setCostTime((int) (end.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - start)); + System.out.println(toJSONString(response)); + if (HttpStatus.OK.value() == response.getStatusCode()) { + message.setStatus(MessageStatusConstant.SUCCESS); + this.sender.channelProviderConfigService.successUpdate(message.getProviderType(), message.getChannel()); + return true; } else { - message.setErrorMsg(MsgPushConstant.ERROR_MSG_UNKNOWN); + message.setStatus(MessageStatusConstant.FAILED); + message.setErrorCode(response.getStatusCode() + ""); + ProviderErrorCodeMappingDO providerErrorCode = this.sender.providerErrorCodeMappingService.getByProviderErrorCode(message.getProviderType(), message.getChannel(), response.getStatusCode() + ""); + if (ObjectUtil.isNotNull(providerErrorCode)) { + message.setErrorMsg(providerErrorCode.getOriginalMessage()); + } else { + message.setErrorMsg(MsgPushConstant.ERROR_MSG_UNKNOWN); + } + this.sender.messageRetryQueueService.saveOrUpdateRetryMessage(message); + this.sender.channelProviderConfigService.failureUpdate(message.getProviderType(), message.getChannel()); + return false; } - this.sender.messageRetryQueueService.saveOrUpdateRetryMessage(message); - this.sender.channelProviderConfigService.failureUpdate(message.getProviderType(), message.getChannel()); - return false; + } catch (Exception e) { + throw new RuntimeException(e); } + }); + Boolean b = null; + try { + b = future.get(3, TimeUnit.SECONDS); } catch (Exception e) { throw new RuntimeException(e); } + + return b; } } diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunSmsSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunSmsSender.java index 71023c2..25f9df9 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunSmsSender.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/AliyunSmsSender.java @@ -82,10 +82,12 @@ public class AliyunSmsSender implements SmsSender { message.setCostTime((int) (end.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - start)); System.out.println(toJSONString(response)); if (HttpStatus.OK.value() == response.getStatusCode()) { + message.setStatus(MessageStatusConstant.SUCCESS); this.getDownInfo(response.body.bizId, message); this.sender.channelProviderConfigService.successUpdate(message.getProviderType(), message.getChannel()); return true; } else { + message.setStatus(MessageStatusConstant.FAILED); message.setErrorCode(response.body.code); message.setErrorMsg(response.body.message); this.sender.messageRetryQueueService.saveOrUpdateRetryMessage(message); diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/TelecomSmsSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/TelecomSmsSender.java index dfe9639..cedee6b 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/TelecomSmsSender.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/TelecomSmsSender.java @@ -136,6 +136,7 @@ public class TelecomSmsSender implements SmsSender { return true; } else { ProviderErrorCodeMappingDO providerErrorCodeMappingDO = this.sender.providerErrorCodeMappingService.getByProviderErrorCode(message.getProviderType(), message.getChannel(), telecomSmsSendResponse.list.get(0).result + ""); + message.setStatus(MessageStatusConstant.FAILED); message.setErrorCode(telecomSmsSendResponse.list.get(0).result + ""); message.setErrorMsg(providerErrorCodeMappingDO.getOriginalMessage()); this.sender.messageRetryQueueService.saveOrUpdateRetryMessage(message); @@ -260,6 +261,7 @@ public class TelecomSmsSender implements SmsSender { TelecomSmsSelectResponse telecomSmsSelectResponse = JSON.parseObject(response.getBody(), TelecomSmsSelectResponse.class); TelecomSmsSelectDetailRes telecomSmsSelectDetailRes = telecomSmsSelectResponse.list.get(0); if (telecomSmsSelectDetailRes.getStatus() == 5) { + message.setStatus(MessageStatusConstant.FAILED); ProviderErrorCodeMappingDO providerErrorCodeMappingDO = this.sender.providerErrorCodeMappingService.getByProviderErrorCode(message.getProviderType(), message.getChannel(), telecomSmsSelectDetailRes.getStat()); message.setErrorCode(telecomSmsSelectDetailRes.getStat()); if (ObjectUtil.isNotNull(providerErrorCodeMappingDO)) { @@ -269,6 +271,9 @@ public class TelecomSmsSender implements SmsSender { } this.sender.messageRetryQueueService.saveOrUpdateRetryMessage(message); } + if (telecomSmsSelectDetailRes.getStatus() == 4) { + message.setStatus(MessageStatusConstant.SUCCESS); + } // } this.scheduledExecutorService.shutdown(); this.scheduledExecutorService = null;