diff --git a/msgpush-module-push/msgpush-module-push-server/pom.xml b/msgpush-module-push/msgpush-module-push-server/pom.xml
index 92fcf3a..3b52875 100644
--- a/msgpush-module-push/msgpush-module-push-server/pom.xml
+++ b/msgpush-module-push/msgpush-module-push-server/pom.xml
@@ -18,10 +18,10 @@
-
- com.njcn
- msgpush-spring-boot-starter-env
-
+
+
+
+
@@ -119,6 +119,13 @@
4.2.0
+
+
+ com.getui.push
+ restful-sdk
+ 1.0.0.1
+
+
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/PushServerApplication.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/PushServerApplication.java
index 34fbee9..0643662 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/PushServerApplication.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/PushServerApplication.java
@@ -1,20 +1,21 @@
package com.njcn.msgpush.module.push;
+import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.ComponentScan;
/**
* 项目的启动类
*
* @author hongawen
*/
+@ComponentScan(basePackages = {"com.njcn.msgpush.module.push", "com.njcn.msgpush.framework.mybatis"})
+@MapperScan("com.njcn.msgpush.module.*.dal.mysql")
@SpringBootApplication
public class PushServerApplication {
-
public static void main(String[] args) {
SpringApplication.run(PushServerApplication.class, args);
}
-
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/IChecker.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/IChecker.java
index 8aadd2d..eda2720 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/IChecker.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/IChecker.java
@@ -1,6 +1,6 @@
package com.njcn.msgpush.module.push.checker;
-import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSendReqVO;
+import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
/**
* @author caozehui
@@ -9,5 +9,5 @@ import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSen
*/
public interface IChecker {
- boolean check(MessageRecordSendReqVO reqVO);
+ boolean check(MessageRecordReqVO reqVO);
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/MsgPushGuardChain.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/MsgPushGuardChain.java
index d5b29e5..3ab56b7 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/MsgPushGuardChain.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/MsgPushGuardChain.java
@@ -4,7 +4,7 @@ import com.njcn.msgpush.module.push.checker.impl.BlacklistChecker;
import com.njcn.msgpush.module.push.checker.impl.IdempotencyChecker;
import com.njcn.msgpush.module.push.checker.impl.QuotaChecker;
import com.njcn.msgpush.module.push.checker.impl.RateLimitChecker;
-import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSendReqVO;
+import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
import java.util.ArrayList;
import java.util.List;
@@ -25,7 +25,7 @@ public class MsgPushGuardChain {
this.checkers.add(new RateLimitChecker());
}
- public boolean checkAll(MessageRecordSendReqVO reqVO) {
+ public boolean checkAll(MessageRecordReqVO reqVO) {
for (IChecker checker : checkers) {
boolean result = checker.check(reqVO);
if (!result) {
@@ -37,7 +37,7 @@ public class MsgPushGuardChain {
return true;
}
- private void logRejection(MessageRecordSendReqVO reqVO) {
+ private void logRejection(MessageRecordReqVO reqVO) {
// 记录拒绝日志,用于监控和分析
System.out.printf("消息请求被拒绝: receiver=%s, messageId=%s, reason=%s%n", reqVO.getReceiver(), reqVO.getMessageId());
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/BlacklistChecker.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/BlacklistChecker.java
index fac6a62..d81b7f0 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/BlacklistChecker.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/BlacklistChecker.java
@@ -1,7 +1,7 @@
package com.njcn.msgpush.module.push.checker.impl;
import com.njcn.msgpush.module.push.checker.IChecker;
-import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSendReqVO;
+import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
/**
* @author caozehui
@@ -10,7 +10,7 @@ import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSen
*/
public class BlacklistChecker implements IChecker {
@Override
- public boolean check(MessageRecordSendReqVO reqVO) {
+ public boolean check(MessageRecordReqVO reqVO) {
return true;
}
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/IdempotencyChecker.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/IdempotencyChecker.java
index c7065fa..b5937cf 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/IdempotencyChecker.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/IdempotencyChecker.java
@@ -1,7 +1,7 @@
package com.njcn.msgpush.module.push.checker.impl;
import com.njcn.msgpush.module.push.checker.IChecker;
-import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSendReqVO;
+import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
/**
* @author caozehui
@@ -10,7 +10,7 @@ import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSen
*/
public class IdempotencyChecker implements IChecker {
@Override
- public boolean check(MessageRecordSendReqVO reqVO) {
+ public boolean check(MessageRecordReqVO reqVO) {
return true;
}
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/QuotaChecker.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/QuotaChecker.java
index 464936d..553431f 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/QuotaChecker.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/QuotaChecker.java
@@ -1,7 +1,7 @@
package com.njcn.msgpush.module.push.checker.impl;
import com.njcn.msgpush.module.push.checker.IChecker;
-import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSendReqVO;
+import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
/**
* @author caozehui
@@ -10,7 +10,7 @@ import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSen
*/
public class QuotaChecker implements IChecker {
@Override
- public boolean check(MessageRecordSendReqVO reqVO) {
+ public boolean check(MessageRecordReqVO reqVO) {
return true;
}
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/RateLimitChecker.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/RateLimitChecker.java
index e3e97b9..2dc986e 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/RateLimitChecker.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/checker/impl/RateLimitChecker.java
@@ -2,7 +2,7 @@ package com.njcn.msgpush.module.push.checker.impl;
import com.njcn.msgpush.module.push.checker.IChecker;
-import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSendReqVO;
+import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
/**
* @author caozehui
@@ -11,7 +11,7 @@ import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordSen
*/
public class RateLimitChecker implements IChecker {
@Override
- public boolean check(MessageRecordSendReqVO reqVO) {
+ public boolean check(MessageRecordReqVO reqVO) {
return true;
}
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/ClientConfiguration.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/ClientConfiguration.java
index 39728d2..ee6b6ee 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/ClientConfiguration.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/ClientConfiguration.java
@@ -2,13 +2,20 @@ package com.njcn.msgpush.module.push.client;
import com.njcn.msgpush.module.push.client.factory.MessageProviderFactory;
import com.njcn.msgpush.module.push.client.factory.impl.AliyunProviderFactory;
+import com.njcn.msgpush.module.push.client.factory.impl.TelecomProviderFactory;
+import com.njcn.msgpush.module.push.client.factory.impl.UniPushProviderFactory;
+import com.njcn.msgpush.module.push.client.sender.Sender;
import com.njcn.msgpush.module.push.constant.MsgPushConstant;
import com.njcn.msgpush.module.push.dal.dataobject.channel.ChannelProviderConfigDO;
+import com.njcn.msgpush.module.push.dal.mysql.channel.ChannelProviderConfigMapper;
import com.njcn.msgpush.module.push.service.channel.ChannelProviderConfigService;
+import com.njcn.msgpush.module.push.service.channel.ProviderErrorCodeMappingService;
+import com.njcn.msgpush.module.push.service.retry.MessageRetryQueueService;
import com.njcn.msgpush.module.push.util.RestTemplateUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
import java.util.HashMap;
import java.util.List;
@@ -21,10 +28,6 @@ import java.util.Map;
@Configuration
public class ClientConfiguration {
- @Autowired
- private RestTemplateUtil restTemplateUtil;
-
-
@Autowired
private ChannelProviderConfigService channelProviderConfigService;
@@ -41,12 +44,12 @@ public class ClientConfiguration {
}
break;
case MsgPushConstant.PROVIDER_TYPE_TELECOM: {
- MessageProviderFactory orDefault = messageProviderFactoryMap.getOrDefault(MsgPushConstant.PROVIDER_TYPE_TELECOM, new AliyunProviderFactory());
+ MessageProviderFactory orDefault = messageProviderFactoryMap.getOrDefault(MsgPushConstant.PROVIDER_TYPE_TELECOM, new TelecomProviderFactory());
messageProviderFactoryMap.put(MsgPushConstant.PROVIDER_TYPE_TELECOM, orDefault);
}
break;
case MsgPushConstant.PROVIDER_TYPE_UNI_PUSH: {
- MessageProviderFactory orDefault = messageProviderFactoryMap.getOrDefault(MsgPushConstant.PROVIDER_TYPE_UNI_PUSH, new AliyunProviderFactory());
+ MessageProviderFactory orDefault = messageProviderFactoryMap.getOrDefault(MsgPushConstant.PROVIDER_TYPE_UNI_PUSH, new UniPushProviderFactory());
messageProviderFactoryMap.put(MsgPushConstant.PROVIDER_TYPE_UNI_PUSH, orDefault);
}
break;
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/MessageProviderFactory.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/MessageProviderFactory.java
index 03d9fa3..4461bea 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/MessageProviderFactory.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/MessageProviderFactory.java
@@ -2,6 +2,7 @@ package com.njcn.msgpush.module.push.client.factory;
import com.njcn.msgpush.module.push.client.sender.AppPushSender;
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.sender.SmsSender;
import com.njcn.msgpush.module.push.dal.dataobject.channel.ChannelProviderConfigDO;
@@ -13,15 +14,15 @@ public interface MessageProviderFactory {
/**
* 创建短信发送器
*/
- SmsSender createSmsSender(ChannelProviderConfigDO config);
+ SmsSender createSmsSender(ChannelProviderConfigDO config, Sender sender);
/**
* 创建邮件发送器
*/
- EmailSender createEmailSender(ChannelProviderConfigDO config) throws Exception;
+ EmailSender createEmailSender(ChannelProviderConfigDO config,Sender sender);
/**
* 创建APP推送发送器
*/
- AppPushSender createAppPushSender(ChannelProviderConfigDO config);
+ AppPushSender createAppPushSender(ChannelProviderConfigDO config,Sender sender);
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/AliyunProviderFactory.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/AliyunProviderFactory.java
index 8c1ea8d..5c623ad 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/AliyunProviderFactory.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/AliyunProviderFactory.java
@@ -3,6 +3,7 @@ package com.njcn.msgpush.module.push.client.factory.impl;
import com.njcn.msgpush.module.push.client.factory.MessageProviderFactory;
import com.njcn.msgpush.module.push.client.sender.AppPushSender;
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.sender.SmsSender;
import com.njcn.msgpush.module.push.client.sender.impl.AliyunEmailSender;
import com.njcn.msgpush.module.push.client.sender.impl.AliyunSmsSender;
@@ -16,31 +17,33 @@ import lombok.extern.slf4j.Slf4j;
*/
@Slf4j
public class AliyunProviderFactory implements MessageProviderFactory {
+
+
@Override
- public SmsSender createSmsSender(ChannelProviderConfigDO config) {
+ public SmsSender createSmsSender(ChannelProviderConfigDO config, Sender sender) {
AliYunMailSetting aliYunSmsSetting = AliYunMailSetting.builder()
.accessKeyId(config.getAppKey())
.accessKeySecret(config.getAppSecret())
.regionId("cn-hangzhou")
.endpoint("dysmsapi.aliyuncs.com")
.build();
- return new AliyunSmsSender(aliYunSmsSetting);
+ return new AliyunSmsSender(aliYunSmsSetting, sender);
}
@Override
- public EmailSender createEmailSender(ChannelProviderConfigDO config) throws Exception {
+ public EmailSender createEmailSender(ChannelProviderConfigDO config, Sender sender) {
AliYunMailSetting aliYunSmsSetting = AliYunMailSetting.builder()
.accessKeyId(config.getAppKey())
.accessKeySecret(config.getAppSecret())
.regionId("cn-hangzhou")
.endpoint("dm.aliyuncs.com")
.build();
- return new AliyunEmailSender(aliYunSmsSetting);
+ return new AliyunEmailSender(aliYunSmsSetting, sender);
}
@Override
- public AppPushSender createAppPushSender(ChannelProviderConfigDO config) {
+ public AppPushSender createAppPushSender(ChannelProviderConfigDO config, Sender sender) {
log.error("阿里云暂不支持app推送");
return null;
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/TelecomProviderFactory.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/TelecomProviderFactory.java
index c7c0027..ace40fc 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/TelecomProviderFactory.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/TelecomProviderFactory.java
@@ -3,11 +3,11 @@ package com.njcn.msgpush.module.push.client.factory.impl;
import com.njcn.msgpush.module.push.client.factory.MessageProviderFactory;
import com.njcn.msgpush.module.push.client.sender.AppPushSender;
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.sender.SmsSender;
import com.njcn.msgpush.module.push.client.sender.impl.TelecomSmsSender;
import com.njcn.msgpush.module.push.client.setting.impl.TelecomSmsSetting;
import com.njcn.msgpush.module.push.dal.dataobject.channel.ChannelProviderConfigDO;
-import com.njcn.msgpush.module.push.util.RestTemplateUtil;
import lombok.extern.slf4j.Slf4j;
/**
@@ -16,28 +16,27 @@ import lombok.extern.slf4j.Slf4j;
*/
@Slf4j
public class TelecomProviderFactory implements MessageProviderFactory {
- private RestTemplateUtil restTemplateUtil;
-
- public TelecomProviderFactory(RestTemplateUtil restTemplateUtil) {
- this.restTemplateUtil = restTemplateUtil;
- }
@Override
- public SmsSender createSmsSender(ChannelProviderConfigDO config) {
+ public SmsSender createSmsSender(ChannelProviderConfigDO config, Sender sender) {
TelecomSmsSetting telecomSmsSetting = TelecomSmsSetting.builder()
.account(config.getAppKey())
.password(config.getAppSecret())
+ .apiUrl(config.getApiUrl())
+ .extno(config.getExtno())
.build();
- return new TelecomSmsSender(telecomSmsSetting, restTemplateUtil);
+
+ return new TelecomSmsSender(telecomSmsSetting, sender);
}
@Override
- public EmailSender createEmailSender(ChannelProviderConfigDO config) throws Exception {
+ public EmailSender createEmailSender(ChannelProviderConfigDO config, Sender sender) {
+ log.error("电信暂不支持email推送");
return null;
}
@Override
- public AppPushSender createAppPushSender(ChannelProviderConfigDO config) {
+ public AppPushSender createAppPushSender(ChannelProviderConfigDO config, Sender sender) {
log.error("电信暂不支持app推送");
return null;
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/UniPushProviderFactory.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/UniPushProviderFactory.java
index eae32cc..a26814c 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/UniPushProviderFactory.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/factory/impl/UniPushProviderFactory.java
@@ -3,7 +3,10 @@ package com.njcn.msgpush.module.push.client.factory.impl;
import com.njcn.msgpush.module.push.client.factory.MessageProviderFactory;
import com.njcn.msgpush.module.push.client.sender.AppPushSender;
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.sender.SmsSender;
+import com.njcn.msgpush.module.push.client.sender.impl.UniPushAppPushSender;
+import com.njcn.msgpush.module.push.client.setting.impl.UniPushAppPushSetting;
import com.njcn.msgpush.module.push.dal.dataobject.channel.ChannelProviderConfigDO;
import lombok.extern.slf4j.Slf4j;
@@ -13,21 +16,27 @@ import lombok.extern.slf4j.Slf4j;
*/
@Slf4j
public class UniPushProviderFactory implements MessageProviderFactory {
+
@Override
- public SmsSender createSmsSender(ChannelProviderConfigDO config) {
+ public SmsSender createSmsSender(ChannelProviderConfigDO config,Sender sender) {
log.error("uniPush暂不支持短信推送");
return null;
}
@Override
- public EmailSender createEmailSender(ChannelProviderConfigDO config) throws Exception {
+ public EmailSender createEmailSender(ChannelProviderConfigDO config,Sender sender) {
log.error("uniPush暂不支持email推送");
return null;
}
@Override
- public AppPushSender createAppPushSender(ChannelProviderConfigDO config) {
- log.error("阿里云暂不支持app推送");
- return null;
+ public AppPushSender createAppPushSender(ChannelProviderConfigDO config,Sender sender) {
+ UniPushAppPushSetting uniPushAppPushSetting = UniPushAppPushSetting.builder()
+ .appId("")
+ .appKey(config.getAppKey())
+ .uniAppSecret(config.getAppSecret())
+ .masterSecret("")
+ .build();
+ return new UniPushAppPushSender(uniPushAppPushSetting, sender);
}
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/AppPushSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/AppPushSender.java
index 35438de..2df6a53 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/AppPushSender.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/AppPushSender.java
@@ -8,5 +8,9 @@ import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
*/
public interface AppPushSender {
+ /**
+ * @param message 消息
+ * @return 发送结果
+ */
boolean appPush(MessageRecordDO message);
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/EmailSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/EmailSender.java
index 4bc43b2..bb43c83 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/EmailSender.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/EmailSender.java
@@ -1,6 +1,7 @@
package com.njcn.msgpush.module.push.client.sender;
-import java.util.List;
+import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
+
import java.util.Map;
/**
@@ -9,11 +10,11 @@ import java.util.Map;
*/
public interface EmailSender {
/**
- * 发送邮件
+ * 发送单条邮件
*
- * @param params 参数
- * @param toAddressList 接收地址集合
+ * @param message 消息
+ * @param params 参数
* @return 发送结果
*/
- boolean sendEmail(Map params, List toAddressList);
+ boolean sendEmail(MessageRecordDO message, Map params);
}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/Sender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/Sender.java
new file mode 100644
index 0000000..cb0d3c9
--- /dev/null
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/Sender.java
@@ -0,0 +1,54 @@
+package com.njcn.msgpush.module.push.client.sender;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.njcn.msgpush.module.push.client.factory.MessageProviderFactory;
+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.ChannelProviderConfigDO;
+import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
+import com.njcn.msgpush.module.push.dal.mysql.message.MessageRecordMapper;
+import com.njcn.msgpush.module.push.service.channel.ChannelProviderConfigService;
+import com.njcn.msgpush.module.push.service.channel.ProviderErrorCodeMappingService;
+import com.njcn.msgpush.module.push.service.retry.MessageRetryQueueService;
+import com.njcn.msgpush.module.push.util.RestTemplateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.stereotype.Component;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author caozehui
+ * @data 2026-03-02
+ */
+@Component
+public class Sender {
+
+ @Autowired
+ public ChannelProviderConfigService channelProviderConfigService;
+ @Autowired
+ public MessageRetryQueueService messageRetryQueueService;
+ @Autowired
+ public ProviderErrorCodeMappingService providerErrorCodeMappingService;
+ @Autowired
+ public RestTemplateUtil restTemplateUtil;
+
+ public final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
+ 5,
+ 5,
+ 1000,
+ TimeUnit.MILLISECONDS,
+ new java.util.concurrent.ArrayBlockingQueue<>(1000),
+ r -> {
+ Thread thread = new Thread(r);
+ thread.setName("threadName-" + thread.getId());
+ thread.setDaemon(false);
+ return thread;
+ },
+ new ThreadPoolExecutor.CallerRunsPolicy()
+ );
+
+}
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/SmsSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/SmsSender.java
index 8d5c449..ca684fd 100644
--- a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/SmsSender.java
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/SmsSender.java
@@ -3,7 +3,6 @@ package com.njcn.msgpush.module.push.client.sender;
import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
import java.util.List;
-import java.util.Map;
/**
* @author caozehui
@@ -11,7 +10,7 @@ import java.util.Map;
*/
public interface SmsSender {
/**
- * 向单个手机号发送短信
+ * 向多个手机号发送单条短信
*
* @param message 消息
* @return 发送结果
@@ -19,7 +18,7 @@ public interface SmsSender {
boolean sendSms(MessageRecordDO message);
/**
- * 向多个手机号发送短信
+ * 向多个手机号发送短信,支持发送不同签名、不同的模板、不同模板变量的短信
*
* @param messageList 消息集合
* @return 发送结果
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 4c3bddf..c49d714 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
@@ -1,17 +1,18 @@
package com.njcn.msgpush.module.push.client.sender.impl;
import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
import com.aliyun.dm20151123.Client;
import com.aliyun.dm20151123.models.SingleSendMailRequest;
import com.aliyun.dm20151123.models.SingleSendMailResponse;
import com.aliyun.teaopenapi.models.Config;
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.dal.dataobject.message.MessageRecordDO;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -22,30 +23,18 @@ import java.util.concurrent.TimeUnit;
*/
@Slf4j
public class AliyunEmailSender implements EmailSender {
+
+ private Sender sender;
+
public static final String ACCOUNT_NAME = "accountName";
public static final String REPLY_TO_ADDRESS = "replyToAddress";
public static final String SUBJECT = "subject";
public static final String HTML_BODY = "htmlBody";
public static final String TEXT_BODY = "textBody";
-
private Client emailClient;
- private final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
- 5,
- 5,
- 1000,
- TimeUnit.MILLISECONDS,
- new java.util.concurrent.ArrayBlockingQueue<>(1000),
- r -> {
- Thread thread = new Thread(r);
- thread.setName("AliYunSmsClient-Pool-" + thread.getId());
- thread.setDaemon(false);
- return thread;
- },
- new ThreadPoolExecutor.CallerRunsPolicy()
- );
-
- public AliyunEmailSender(AliYunMailSetting aliYunMailSetting) throws Exception {
+ public AliyunEmailSender(AliYunMailSetting aliYunMailSetting, Sender sender) {
+ this.sender = sender;
if (ObjectUtil.isNotNull(aliYunMailSetting)) {
Config config = new Config()
.setAccessKeyId(aliYunMailSetting.getAccessKeyId())
@@ -57,35 +46,33 @@ public class AliyunEmailSender implements EmailSender {
this.emailClient = new com.aliyun.dm20151123.Client(config);
} catch (Exception e) {
log.error("阿里云-邮件服务初始化失败,请检查配置信息");
- throw e;
+ throw new RuntimeException(e);
}
}
}
@Override
- public boolean sendEmail(Map params, List toAddressList) {
+ public boolean sendEmail(MessageRecordDO message, Map params) {
RuntimeOptions runtimeOptions = new RuntimeOptions();
runtimeOptions.autoretry = true;
SingleSendMailRequest request = new SingleSendMailRequest()
.setAccountName(params.get(ACCOUNT_NAME).toString())
.setAddressType(1)
.setReplyToAddress((boolean) params.get(REPLY_TO_ADDRESS))
- .setToAddress(StrUtil.join(StrUtil.COMMA, toAddressList))
+ .setToAddress(message.getReceiver()) //目标地址,多个 email 地址可以用逗号分隔,最多 100 个地址(支持邮件组)。
.setSubject(params.get(SUBJECT).toString())
- .setHtmlBody(params.get(HTML_BODY).toString())
+ .setHtmlBody(params.get(HTML_BODY).toString()) //HtmlBody 和 TextBody 是针对不同类型的邮件
.setTextBody(params.get(TEXT_BODY).toString());
try {
SingleSendMailResponse response = this.emailClient.singleSendMailWithOptions(request, runtimeOptions);
+ if (HttpStatus.OK.value() == response.getStatusCode()) {
+ return true;
+ } else {
+ return false;
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
-// if(OK.equals(response.)){
-// return true;
-// }else {
-// return false;
-// }
- return false;
}
-
}
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 9e4fe06..d5577aa 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
@@ -6,17 +6,18 @@ import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
+import com.njcn.msgpush.module.push.client.sender.Sender;
import com.njcn.msgpush.module.push.client.sender.SmsSender;
import com.njcn.msgpush.module.push.client.setting.impl.AliYunMailSetting;
import com.njcn.msgpush.module.push.constant.MessageStatusConstant;
import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
+import com.njcn.msgpush.module.push.enums.RetryStrategyEnum;
import lombok.extern.slf4j.Slf4j;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.List;
import java.util.concurrent.Future;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static com.aliyun.teautil.Common.toJSONString;
@@ -27,29 +28,30 @@ import static com.aliyun.teautil.Common.toJSONString;
*/
@Slf4j
public class AliyunSmsSender implements SmsSender {
- public static final String SIGN_NAME = "signName";
- public static final String TEMPLATE_CODE = "templateCode";
- public static final String TEMPLATE_PARAM = "templateParam";
+
public static final String OK = "OK";
+ private Sender sender;
+
private Client smsClient;
- private final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
- 5,
- 5,
- 1000,
- TimeUnit.MILLISECONDS,
- new java.util.concurrent.ArrayBlockingQueue<>(1000),
- r -> {
- Thread thread = new Thread(r);
- thread.setName("AliyunSmsSender-Pool-" + thread.getId());
- thread.setDaemon(false);
- return thread;
- },
- new ThreadPoolExecutor.CallerRunsPolicy()
- );
+// private final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
+// 5,
+// 5,
+// 1000,
+// TimeUnit.MILLISECONDS,
+// new java.util.concurrent.ArrayBlockingQueue<>(1000),
+// r -> {
+// Thread thread = new Thread(r);
+// thread.setName("AliyunSmsSender-Pool-" + thread.getId());
+// thread.setDaemon(false);
+// return thread;
+// },
+// new ThreadPoolExecutor.CallerRunsPolicy()
+// );
- public AliyunSmsSender(AliYunMailSetting aliYunSmsSetting) {
+ public AliyunSmsSender(AliYunMailSetting aliYunSmsSetting, Sender sender) {
+ this.sender = sender;
if (ObjectUtil.isNotNull(aliYunSmsSetting)) {
Config config = new Config()
.setAccessKeyId(aliYunSmsSetting.getAccessKeyId())
@@ -66,16 +68,15 @@ public class AliyunSmsSender implements SmsSender {
}
}
-
@Override
public boolean sendSms(MessageRecordDO message) {
- Future future = THREAD_POOL_EXECUTOR.submit(() -> {
+ Future future = this.sender.THREAD_POOL_EXECUTOR.submit(() -> {
message.setStatus(MessageStatusConstant.SENDING);
RuntimeOptions runtimeOptions = new RuntimeOptions();
// 设置自动重试,默认是不开启的。重试次数默认是3次
runtimeOptions.autoretry = true;
SendSmsRequest request = new SendSmsRequest()
- .setPhoneNumbers(message.getReceiver())
+ .setPhoneNumbers(message.getReceiver()) //手机号码之间以半角逗号(,)分隔。上限为 1000 个手机号码。
.setSignName(message.getTitle())
.setTemplateCode(message.getTemplateCode())
.setTemplateParam(message.getTemplateParams());
@@ -90,11 +91,15 @@ public class AliyunSmsSender implements SmsSender {
if (OK.equals(response.body.code)) {
return true;
} else {
+ message.setErrorCode(response.body.code);
+ message.setErrorMsg(response.body.message);
+ this.sender.messageRetryQueueService.addRetryMessage(message, RetryStrategyEnum.EXPONENTIAL_BACKOFF);
+ this.sender.channelProviderConfigService.failureUpdate(message.getProviderType(), message.getChannel());
return false;
}
} catch (Exception e) {
log.error("阿里云-短信服务发送失败");
- throw new Exception(e);
+ throw new RuntimeException(e);
}
});
Boolean b = null;
@@ -104,11 +109,6 @@ public class AliyunSmsSender implements SmsSender {
throw new RuntimeException(e);
}
- if (b) {
- message.setStatus(MessageStatusConstant.SUCCESS);
- } else {
- message.setStatus(MessageStatusConstant.FAILED);
- }
return b;
}
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 156cb1a..9408345 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
@@ -1,12 +1,16 @@
package com.njcn.msgpush.module.push.client.sender.impl;
import com.alibaba.fastjson.JSON;
+import com.njcn.msgpush.module.push.client.sender.Sender;
import com.njcn.msgpush.module.push.client.sender.SmsSender;
import com.njcn.msgpush.module.push.client.setting.impl.TelecomSmsSetting;
import com.njcn.msgpush.module.push.constant.MessageStatusConstant;
+import com.njcn.msgpush.module.push.dal.dataobject.channel.ProviderErrorCodeMappingDO;
import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
-import com.njcn.msgpush.module.push.util.RestTemplateUtil;
+import com.njcn.msgpush.module.push.enums.RetryStrategyEnum;
+import lombok.Data;
import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import java.time.LocalDateTime;
@@ -15,53 +19,31 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Future;
-import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author caozehui
* @data 2026-02-11
*/
+@Data
public class TelecomSmsSender implements SmsSender {
- /**
- * 短信接口地址
- */
- private static final String API_URL = "https://sms.ymeeting.cn/smsv2";
- /**
- * 虚拟接入码
- */
- private static final String ACCESS_CODE = "106905631";
/**
* 短信接口内容类型
*/
private static final String CONTENT_TYPE = "application/json;charset=utf-8";
private TelecomSmsSetting telecomSmsSetting;
+ private Sender sender;
- private RestTemplateUtil restTemplateUtil;
-
- private final ThreadPoolExecutor THREAD_POOL_EXECUTOR = new ThreadPoolExecutor(
- 5,
- 5,
- 1000,
- TimeUnit.MILLISECONDS,
- new java.util.concurrent.ArrayBlockingQueue<>(1000),
- r -> {
- Thread thread = new Thread(r);
- thread.setName("TelecomSmsSender-Pool-" + thread.getId());
- thread.setDaemon(false);
- return thread;
- },
- new ThreadPoolExecutor.CallerRunsPolicy()
- );
-
- private class TelecomSmsResponse {
+ @Data
+ private static class TelecomSmsResponse {
private String status;
private Double balance;
private List list;
}
- private class TelecomSmsMessageRes {
+ @Data
+ private static class TelecomSmsMessageRes {
//消息ID(用于状态报告匹配)
private String mid;
//手机号码
@@ -71,14 +53,14 @@ public class TelecomSmsSender implements SmsSender {
}
- public TelecomSmsSender(TelecomSmsSetting telecomSmsSetting, RestTemplateUtil restTemplateUtil) {
+ public TelecomSmsSender(TelecomSmsSetting telecomSmsSetting, Sender sender) {
this.telecomSmsSetting = telecomSmsSetting;
- this.restTemplateUtil = restTemplateUtil;
+ this.sender = sender;
}
@Override
public boolean sendSms(MessageRecordDO message) {
- Future future = THREAD_POOL_EXECUTOR.submit(() -> {
+ Future future = this.sender.THREAD_POOL_EXECUTOR.submit(() -> {
message.setStatus(MessageStatusConstant.SENDING);
// 构建请求参数
Map request = new HashMap<>();
@@ -87,7 +69,7 @@ public class TelecomSmsSender implements SmsSender {
request.put("password", telecomSmsSetting.getPassword());
request.put("mobile", message.getReceiver());
request.put("content", message.getContent());
- request.put("extno", ACCESS_CODE);
+ request.put("extno", telecomSmsSetting.getExtno());
// 设置请求头
HttpHeaders headers = new HttpHeaders();
@@ -97,19 +79,24 @@ public class TelecomSmsSender implements SmsSender {
long start = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
message.setSendTime(now);
// 发送请求
- ResponseEntity response = restTemplateUtil.post(
- API_URL,
+ ResponseEntity response = this.sender.restTemplateUtil.post(
+ telecomSmsSetting.getApiUrl(),
request,
headers,
String.class
);
+ System.out.println(JSON.toJSONString(response));
LocalDateTime end = LocalDateTime.now();
message.setCostTime((int) (end.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli() - start));
TelecomSmsResponse telecomSmsResponse = JSON.parseObject(response.getBody(), TelecomSmsResponse.class);
- if (telecomSmsResponse.list.get(0).result == 0) {
+ if (response.getStatusCode() == HttpStatus.OK && telecomSmsResponse.list.get(0).result == 0) {
return true;
} else {
+ ProviderErrorCodeMappingDO providerErrorCodeMappingDO = this.sender.providerErrorCodeMappingService.getByProviderErrorCode(message.getProviderType(), message.getChannel(), telecomSmsResponse.list.get(0).result + "");
+ message.setErrorCode(telecomSmsResponse.list.get(0).result + "");
+ message.setErrorMsg(providerErrorCodeMappingDO.getOriginalMessage());
+ this.sender.messageRetryQueueService.addRetryMessage(message, RetryStrategyEnum.EXPONENTIAL_BACKOFF);
return false;
}
});
@@ -121,11 +108,6 @@ public class TelecomSmsSender implements SmsSender {
throw new RuntimeException(e);
}
- if (b) {
- message.setStatus(MessageStatusConstant.SUCCESS);
- } else {
- message.setStatus(MessageStatusConstant.FAILED);
- }
return b;
}
@@ -141,7 +123,7 @@ public class TelecomSmsSender implements SmsSender {
message.setStatus(MessageStatusConstant.SENDING);
}
request.put("mobileContentKvp", JSON.toJSONString(mobileContentKvp));
- request.put("extno", ACCESS_CODE);
+ request.put("extno", telecomSmsSetting.getExtno());
// 设置请求头
HttpHeaders headers = new HttpHeaders();
@@ -151,8 +133,8 @@ public class TelecomSmsSender implements SmsSender {
long start = now.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
// 发送请求
- ResponseEntity response = restTemplateUtil.post(
- API_URL,
+ ResponseEntity response = this.sender.restTemplateUtil.post(
+ telecomSmsSetting.getApiUrl(),
request,
headers,
String.class
diff --git a/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/UniPushAppPushSender.java b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/UniPushAppPushSender.java
new file mode 100644
index 0000000..0f846af
--- /dev/null
+++ b/msgpush-module-push/msgpush-module-push-server/src/main/java/com/njcn/msgpush/module/push/client/sender/impl/UniPushAppPushSender.java
@@ -0,0 +1,132 @@
+package com.njcn.msgpush.module.push.client.sender.impl;
+
+import com.getui.push.v2.sdk.ApiHelper;
+import com.getui.push.v2.sdk.GtApiConfiguration;
+import com.getui.push.v2.sdk.api.PushApi;
+import com.getui.push.v2.sdk.common.ApiResult;
+import com.getui.push.v2.sdk.dto.req.Audience;
+import com.getui.push.v2.sdk.dto.req.Settings;
+import com.getui.push.v2.sdk.dto.req.message.PushDTO;
+import com.getui.push.v2.sdk.dto.req.message.PushMessage;
+import com.getui.push.v2.sdk.dto.req.message.android.GTNotification;
+import com.njcn.msgpush.module.push.client.sender.AppPushSender;
+import com.njcn.msgpush.module.push.client.sender.Sender;
+import com.njcn.msgpush.module.push.client.setting.impl.UniPushAppPushSetting;
+import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
+
+import java.util.Map;
+
+/**
+ * @author caozehui
+ * @data 2026-02-26
+ */
+public class UniPushAppPushSender implements AppPushSender {
+ // private UniPushAppPushSetting uniPushAppPushSetting;
+ private Sender sender;
+
+ private ApiHelper apiHelper;
+
+ public UniPushAppPushSender(UniPushAppPushSetting uniPushAppPushSetting, Sender sender) {
+// this.uniPushAppPushSetting = uniPushAppPushSetting;
+ this.sender = sender;
+
+ GtApiConfiguration gtApiConfiguration = new GtApiConfiguration();
+ gtApiConfiguration.setAppId(uniPushAppPushSetting.getAppId());
+ gtApiConfiguration.setAppKey(uniPushAppPushSetting.getAppKey());
+ gtApiConfiguration.setMasterSecret(uniPushAppPushSetting.getMasterSecret());
+ gtApiConfiguration.setDomain("https://restapi.getui.com/v2/");
+ this.apiHelper = ApiHelper.build(gtApiConfiguration);
+ }
+
+ @Override
+ public boolean appPush(MessageRecordDO message) {
+ PushDTO pushDTO = this.buildPushDTO(message.getTitle(), message.getContent());
+ // 进行cid单推
+ PushApi pushApi = apiHelper.creatApi(PushApi.class);
+ // 设置接收人信息
+ Audience audience = new Audience();
+ audience.addCid(message.getReceiver());
+ pushDTO.setAudience(audience);
+
+ ApiResult