微调
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
*/
|
||||
@Tag(name = "系统凭证管理")
|
||||
@RestController
|
||||
@RequestMapping("/credential")
|
||||
@RequestMapping("/push/credential")
|
||||
public class CredentialController {
|
||||
|
||||
@Autowired
|
||||
|
||||
@@ -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<List<MessageSendResultVO>> sendSms(@Valid @RequestBody List<MessageRecordReqVO> reqVOList) {
|
||||
return success(messageRecordService.send(reqVOList, ChannelTypeEnum.SMS));
|
||||
public CommonResult<List<MessageSendResultVO>> sendSms(@Valid @RequestBody List<MessageRecordReqVO> 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<List<MessageSendResultVO>> sendEmail(@Valid @RequestBody List<MessageRecordReqVO> reqVOList) {
|
||||
return success(messageRecordService.send(reqVOList, ChannelTypeEnum.EMAIL));
|
||||
public CommonResult<List<MessageSendResultVO>> sendEmail(@Valid @RequestBody List<MessageRecordReqVO> 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<List<MessageSendResultVO>> sendApp(@Valid @RequestBody List<MessageRecordReqVO> reqVOList) {
|
||||
return success(messageRecordService.send(reqVOList, ChannelTypeEnum.APP));
|
||||
public CommonResult<List<MessageSendResultVO>> sendApp(@Valid @RequestBody List<MessageRecordReqVO> 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")
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -32,7 +32,8 @@ public class CredentialServiceImpl implements ICredentialService {
|
||||
/**
|
||||
* 凭证加密密钥(生产环境应通过配置中心或环境变量注入)
|
||||
*/
|
||||
private String credentialSecretKey = "88888888";
|
||||
private String credentialSecretKey = "88888888888888888888888888888888"; // 32 字节
|
||||
|
||||
@Autowired
|
||||
private ISystemSecretService systemSecretService;
|
||||
|
||||
|
||||
@@ -16,10 +16,11 @@ public interface MessageRecordService extends IService<MessageRecordDO> {
|
||||
* 发送消息(包括email、sms、app)
|
||||
*
|
||||
* @param reqVOList
|
||||
* @param systemName
|
||||
* @return channelTypeEnum
|
||||
* @return 发送的结果
|
||||
*/
|
||||
List<MessageSendResultVO> send(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum);
|
||||
List<MessageSendResultVO> send(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum, String systemName);
|
||||
|
||||
/**
|
||||
* 处理发送消息
|
||||
|
||||
@@ -71,17 +71,18 @@ public class MessageRecordServiceImpl extends ServiceImpl<MessageRecordMapper, M
|
||||
private MessageConfirmRedisDAO messageConfirmRedisDAO;
|
||||
|
||||
@Override
|
||||
public List<MessageSendResultVO> send(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum) {
|
||||
List<MessageRecordDO> messageRecordDOList = this.createMessageRecords(reqVOList, channelTypeEnum);
|
||||
public List<MessageSendResultVO> send(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum, String systemName) {
|
||||
List<MessageRecordDO> messageRecordDOList = this.createMessageRecords(reqVOList, channelTypeEnum, systemName);
|
||||
return this.processSendMsg(messageRecordDOList, null);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public List<MessageRecordDO> createMessageRecords(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum) {
|
||||
public List<MessageRecordDO> createMessageRecords(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum, String systemName) {
|
||||
List<MessageRecordDO> 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<MessageRecordMapper, M
|
||||
}
|
||||
List<ChannelProviderConfigDO> 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<MessageRecordMapper, M
|
||||
public Page<MessageRecordDO> getPage(MessageRecordReqVO reqVO) {
|
||||
QueryWrapper<MessageRecordDO> 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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user