From d44f6423e00f0ef89f366760ed223e9f7b1ed105 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Thu, 9 Apr 2026 18:31:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sender/impl/email/AliyunEmailSender.java | 3 +- .../sender/impl/sms/TelecomSmsSender.java | 38 +++++++++---------- .../credential/CredentialController.java | 2 +- .../message/MessageRecordController.java | 25 +++++++++--- .../dataobject/credential/SystemSecretDO.java | 2 + .../dataobject/message/MessageRecordDO.java | 4 -- .../retry/MessageRetryHistoryDO.java | 1 + .../credential/CredentialServiceImpl.java | 3 +- .../service/message/MessageRecordService.java | 3 +- .../message/MessageRecordServiceImpl.java | 21 +++------- 10 files changed, 54 insertions(+), 48 deletions(-) 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 8f631d8..e1978b9 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 @@ -60,7 +60,8 @@ public class AliyunEmailSender implements EmailSender { RuntimeOptions runtimeOptions = new RuntimeOptions(); runtimeOptions.autoretry = true; - JSONObject jsonObject = JSON.parseObject(message.getExtraInfo()); +// JSONObject jsonObject = JSON.parseObject(message.getExtraInfo()); + JSONObject jsonObject = null; SingleSendMailRequest request = new SingleSendMailRequest() .setAccountName(jsonObject.getString(ACCOUNT_NAME)) .setAddressType(1) 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 d0a8012..04dc533 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 @@ -200,36 +200,36 @@ public class TelecomSmsSender implements SmsSender { return; } TelecomSmsSelectDetailRes detailRes = selectResponse.getList().get(0); -// if (detailRes.getStatus() == 5) { -// SendResult failedResult = this.sender.buildFailureResult( -// message, -// detailRes.getStat(), -// null, -// "THIRD_PARTY_CALLBACK_FAILED", -// "短信回执返回失败", -// false -// ); -// this.sender.applyCallbackResult(message, failedResult); -// } else if (detailRes.getStatus() == 4) { -// // 回执确认成功后,复用统一成功落库逻辑。 -// 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) { + if (detailRes.getStatus() == 5) { SendResult failedResult = this.sender.buildFailureResult( message, detailRes.getStat(), null, "THIRD_PARTY_CALLBACK_FAILED", "短信回执返回失败", - true + false ); this.sender.applyCallbackResult(message, failedResult); - } else { + } else if (detailRes.getStatus() == 4) { // 回执确认成功后,复用统一成功落库逻辑。 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); } diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/credential/CredentialController.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/credential/CredentialController.java index 5f53bb7..c48d627 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/credential/CredentialController.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/credential/CredentialController.java @@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController; */ @Tag(name = "系统凭证管理") @RestController -@RequestMapping("/credential") +@RequestMapping("/push/credential") public class CredentialController { @Autowired diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/message/MessageRecordController.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/message/MessageRecordController.java index 9cf1a9e..e9bb657 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/message/MessageRecordController.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/controller/admin/message/MessageRecordController.java @@ -8,6 +8,8 @@ import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReq import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageSendResultVO; import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO; import com.njcn.msgpush.module.push.enums.ChannelTypeEnum; +import com.njcn.msgpush.module.push.service.credential.CredentialServiceImpl; +import com.njcn.msgpush.module.push.service.credential.ICredentialService; import com.njcn.msgpush.module.push.service.message.MessageRecordService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; @@ -31,29 +33,40 @@ public class MessageRecordController { @Autowired private MessageRecordService messageRecordService; + @Autowired + private ICredentialService credentialService; @PermitAll @PostMapping("/send/sms") @Operation(summary = "短信推送") @Idempotent(timeout = 2) - public CommonResult> sendSms(@Valid @RequestBody List reqVOList) { - return success(messageRecordService.send(reqVOList, ChannelTypeEnum.SMS)); + public CommonResult> sendSms(@Valid @RequestBody List reqVOList, + @RequestHeader(value = "X-Credential-Token", required = false) String credentialToken) { + CredentialServiceImpl.CredentialInfo credentialInfo = credentialService.verifyCredential(credentialToken); + String systemName = credentialInfo.getSystemName(); + return success(messageRecordService.send(reqVOList, ChannelTypeEnum.SMS, systemName)); } @PermitAll @PostMapping("/send/email") @Operation(summary = "邮箱推送") @Idempotent(timeout = 2) - public CommonResult> sendEmail(@Valid @RequestBody List reqVOList) { - return success(messageRecordService.send(reqVOList, ChannelTypeEnum.EMAIL)); + public CommonResult> sendEmail(@Valid @RequestBody List reqVOList, + @RequestHeader(value = "X-Credential-Token", required = false) String credentialToken) { + CredentialServiceImpl.CredentialInfo credentialInfo = credentialService.verifyCredential(credentialToken); + String systemName = credentialInfo.getSystemName(); + return success(messageRecordService.send(reqVOList, ChannelTypeEnum.EMAIL, systemName)); } @PermitAll @PostMapping("/send/app") @Operation(summary = "app推送") @Idempotent(timeout = 2) - public CommonResult> sendApp(@Valid @RequestBody List reqVOList) { - return success(messageRecordService.send(reqVOList, ChannelTypeEnum.APP)); + public CommonResult> sendApp(@Valid @RequestBody List reqVOList, + @RequestHeader(value = "X-Credential-Token", required = false) String credentialToken) { + CredentialServiceImpl.CredentialInfo credentialInfo = credentialService.verifyCredential(credentialToken); + String systemName = credentialInfo.getSystemName(); + return success(messageRecordService.send(reqVOList, ChannelTypeEnum.APP, systemName)); } @PostMapping("/page") diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/credential/SystemSecretDO.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/credential/SystemSecretDO.java index 70c4a54..bf64468 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/credential/SystemSecretDO.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/credential/SystemSecretDO.java @@ -1,5 +1,6 @@ package com.njcn.msgpush.module.push.dal.dataobject.credential; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; /** @@ -7,6 +8,7 @@ import lombok.Data; * @data 2026-04-09 */ @Data +@TableName("push_sys_secret") public class SystemSecretDO { private String id; private String systemName; diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/message/MessageRecordDO.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/message/MessageRecordDO.java index 566bbd1..c698e7d 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/message/MessageRecordDO.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/message/MessageRecordDO.java @@ -62,10 +62,6 @@ public class MessageRecordDO extends BaseDO { */ private String templateParams; - /** - * 额外信息 - */ - private String extraInfo; /** * 状态:pending/sending/success/failed/final_failed/blacklisted/quota_exceeded/rate_limited/abandoned diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/retry/MessageRetryHistoryDO.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/retry/MessageRetryHistoryDO.java index 47d7eb0..4b98bbd 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/retry/MessageRetryHistoryDO.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/dal/dataobject/retry/MessageRetryHistoryDO.java @@ -1,5 +1,6 @@ package com.njcn.msgpush.module.push.dal.dataobject.retry; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.njcn.msgpush.framework.mybatis.core.dataobject.BaseDO; import lombok.Data; diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/credential/CredentialServiceImpl.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/credential/CredentialServiceImpl.java index ea107e8..74bcde5 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/credential/CredentialServiceImpl.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/credential/CredentialServiceImpl.java @@ -32,7 +32,8 @@ public class CredentialServiceImpl implements ICredentialService { /** * 凭证加密密钥(生产环境应通过配置中心或环境变量注入) */ - private String credentialSecretKey = "88888888"; + private String credentialSecretKey = "88888888888888888888888888888888"; // 32 字节 + @Autowired private ISystemSecretService systemSecretService; diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordService.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordService.java index 9601363..2437039 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordService.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordService.java @@ -16,10 +16,11 @@ public interface MessageRecordService extends IService { * 发送消息(包括email、sms、app) * * @param reqVOList + * @param systemName * @return channelTypeEnum * @return 发送的结果 */ - List send(List reqVOList, ChannelTypeEnum channelTypeEnum); + List send(List reqVOList, ChannelTypeEnum channelTypeEnum, String systemName); /** * 处理发送消息 diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordServiceImpl.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordServiceImpl.java index 8f903f8..e73961e 100644 --- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordServiceImpl.java +++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/service/message/MessageRecordServiceImpl.java @@ -71,17 +71,18 @@ public class MessageRecordServiceImpl extends ServiceImpl send(List reqVOList, ChannelTypeEnum channelTypeEnum) { - List messageRecordDOList = this.createMessageRecords(reqVOList, channelTypeEnum); + public List send(List reqVOList, ChannelTypeEnum channelTypeEnum, String systemName) { + List messageRecordDOList = this.createMessageRecords(reqVOList, channelTypeEnum, systemName); return this.processSendMsg(messageRecordDOList, null); } @Transactional(rollbackFor = Exception.class) - public List createMessageRecords(List reqVOList, ChannelTypeEnum channelTypeEnum) { + public List createMessageRecords(List reqVOList, ChannelTypeEnum channelTypeEnum, String systemName) { List messageRecordDOList = BeanUtil.copyToList(reqVOList, MessageRecordDO.class); messageRecordDOList.forEach(messageRecordDO -> { messageRecordDO.setChannel(channelTypeEnum.getCode()); messageRecordDO.setStatus(MsgStatusConstant.PENDING); + messageRecordDO.setAppName(systemName); // messageRecordDO.setRetryCount(0); }); this.saveBatch(messageRecordDOList); @@ -123,22 +124,12 @@ public class MessageRecordServiceImpl extends ServiceImpl enabledProviders = channelProviderConfigService.getEnabledProviders(messageRecordDO.getChannel()); SendResult sendResult = null; - if (CollectionUtil.isNotEmpty(enabledProviders)) { - ChannelProviderConfigDO channelProviderConfigDO = enabledProviders.get(0); - MessageProviderFactory messageProviderFactory = messageProviderFactoryMap.get(channelProviderConfigDO.getProviderType()); - sendResult = this.sendMessage(messageRecordDO, channelProviderConfigDO, messageProviderFactory); - this.applySendResult(messageRecordDO, sendResult); - this.recordRetryHistory(messageRecordDO, retrySource); - } else { - sendResult = this.sendMessage(messageRecordDO, null, null); - this.applySendResult(messageRecordDO, sendResult); - } - if (CollectionUtil.isNotEmpty(enabledProviders)) { ChannelProviderConfigDO channelProviderConfigDO = enabledProviders.get(0); MessageProviderFactory messageProviderFactory = messageProviderFactoryMap.get(channelProviderConfigDO.getProviderType()); sendResult = this.validateProviderAndChannel(messageRecordDO, channelProviderConfigDO, messageProviderFactory); + messageRecordDO.setProviderType(channelProviderConfigDO.getProviderType()); if (sendResult == null) { sendResult = this.sendMessage(messageRecordDO, channelProviderConfigDO, messageProviderFactory); } @@ -284,7 +275,7 @@ public class MessageRecordServiceImpl extends ServiceImpl getPage(MessageRecordReqVO reqVO) { QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() - .eq(StrUtil.isNotBlank(reqVO.getChannel()), MessageRecordDO::getChannel, reqVO.getChannel()); + .eq(StrUtil.isNotBlank(reqVO.getMessageType()), MessageRecordDO::getChannel, reqVO.getChannel()); return this.page(new Page<>(PageUtils.getPageNum(reqVO), PageUtils.getPageSize(reqVO)), wrapper); } }