diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/email/AliyunEmailSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/email/AliyunEmailSender.java index e1978b9..3639f5f 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/email/AliyunEmailSender.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/email/AliyunEmailSender.java @@ -2,10 +2,8 @@ package com.njcn.msgpush.module.push.client.sender.impl.email; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.aliyun.dm20151123.Client; -import com.aliyun.dm20151123.models.SingleSendMailRequest; -import com.aliyun.dm20151123.models.SingleSendMailResponse; +import com.aliyun.dm20151123.models.*; import com.aliyun.teaopenapi.models.Config; import com.aliyun.teautil.models.RuntimeOptions; import com.njcn.msgpush.module.push.client.sender.EmailSender; @@ -18,6 +16,8 @@ import org.springframework.http.HttpStatus; import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.List; import java.util.Map; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -25,9 +25,10 @@ import java.util.concurrent.TimeUnit; @Slf4j public class AliyunEmailSender implements EmailSender { - private static final String ACCOUNT_NAME = "accountName"; - private static final String REPLY_TO_ADDRESS = "replyToAddress"; - private static final String FROM_ALIAS = "fromAlias"; + private static final String ACCOUNT_NAME = "njcn@shining-electric.cn"; + private static final Integer ADDRESS_TYPE = 1; + private static final Boolean REPLY_TO_ADDRESS = false; + private static final String FROM_ALIAS = "南京灿能"; private final Sender sender; @@ -60,17 +61,15 @@ public class AliyunEmailSender implements EmailSender { RuntimeOptions runtimeOptions = new RuntimeOptions(); runtimeOptions.autoretry = true; -// JSONObject jsonObject = JSON.parseObject(message.getExtraInfo()); - JSONObject jsonObject = null; SingleSendMailRequest request = new SingleSendMailRequest() - .setAccountName(jsonObject.getString(ACCOUNT_NAME)) - .setAddressType(1) - .setReplyToAddress(jsonObject.getBooleanValue(REPLY_TO_ADDRESS)) + .setAccountName(ACCOUNT_NAME) + .setAddressType(ADDRESS_TYPE) + .setReplyToAddress(REPLY_TO_ADDRESS) .setToAddress(message.getReceiver()) .setSubject(message.getTitle()) .setHtmlBody(message.getContent()) .setTextBody("") - .setFromAlias(jsonObject.getString(FROM_ALIAS)); + .setFromAlias(FROM_ALIAS); try { LocalDateTime now = LocalDateTime.now(); @@ -82,6 +81,8 @@ public class AliyunEmailSender implements EmailSender { message.setCostTime(costTime); if (HttpStatus.OK.value() == response.getStatusCode()) { + // 电信短信同步返回成功同样只代表已受理,最终状态以后续回执为准。 + this.getDownInfo(message); // 邮件接口同步返回成功时,当前平台直接认定本次发送成功。 return SendResult.success(now, costTime, null); } @@ -108,4 +109,52 @@ public class AliyunEmailSender implements EmailSender { return this.sender.buildTimeoutResult(); } } + + private void getDownInfo(MessageRecordDO message) { + // 回执查询延后执行,给第三方落库和状态变更留出时间。 + this.sender.MSG_CALLBACK_THREAD_POOL_SCHEDULER.schedule(() -> { + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + SenderStatisticsDetailByParamRequest request = new SenderStatisticsDetailByParamRequest() + .setToAddress(message.getReceiver()) + .setLength(1); + try { + SenderStatisticsDetailByParamResponse detail = this.emailClient.senderStatisticsDetailByParam(request); + System.out.println("@@@=" + JSON.toJSONString(detail)); + + if (detail.statusCode == 200) { + List mailDetailList = detail.body.getData().mailDetail; + + if (mailDetailList.size() > 0) { + SenderStatisticsDetailByParamResponseBody.SenderStatisticsDetailByParamResponseBodyDataMailDetail mailDetail = mailDetailList.get(0); + if (mailDetail.getStatus() == 0) { + // 回执确认成功后,复用统一成功落库逻辑。 + this.sender.applyCallbackResult(message, SendResult.success(message.getSendTime(), message.getCostTime(), message.getThirdPartyId())); + } else { + SendResult failedResult = this.sender.buildFailureResult( + message, + mailDetail.getErrorClassification(), + mailDetail.getErrorClassification(), + "THIRD_PARTY_CALLBACK_FAILED", + "邮件回执返回失败", + false + ); + this.sender.applyCallbackResult(message, failedResult); + } + } else { + SendResult failedResult = this.sender.buildFailureResult( + message, + null, + null, + "THIRD_PARTY_CALLBACK_FAILED", + "邮件回执返回失败", + false + ); + this.sender.applyCallbackResult(message, failedResult); + } + } + } catch (Exception e) { + log.error("电信短信回执查询失败", e); + } + }, 30, TimeUnit.SECONDS); + } } diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/sms/TelecomSmsSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/sms/TelecomSmsSender.java index 04dc533..b296fb7 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/sms/TelecomSmsSender.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/sms/TelecomSmsSender.java @@ -214,22 +214,6 @@ public class TelecomSmsSender implements SmsSender { // 回执确认成功后,复用统一成功落库逻辑。 this.sender.applyCallbackResult(message, SendResult.success(message.getSendTime(), message.getCostTime(), message.getThirdPartyId())); } -// double random = Math.random(); -// System.out.println(random + " aaaa"); -// if (random > 0.5) { -// SendResult failedResult = this.sender.buildFailureResult( -// message, -// detailRes.getStat(), -// null, -// "THIRD_PARTY_CALLBACK_FAILED", -// "短信回执返回失败", -// true -// ); -// this.sender.applyCallbackResult(message, failedResult); -// } else { -// // 回执确认成功后,复用统一成功落库逻辑。 -// this.sender.applyCallbackResult(message, SendResult.success(message.getSendTime(), message.getCostTime(), message.getThirdPartyId())); -// } } catch (Exception e) { log.error("电信短信回执查询失败", e); }