diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/account/TencentSmsAccount.java b/austin-common/src/main/java/com/java3y/austin/common/dto/account/TencentSmsAccount.java
deleted file mode 100644
index 81a1353..0000000
--- a/austin-common/src/main/java/com/java3y/austin/common/dto/account/TencentSmsAccount.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.java3y.austin.common.dto.account;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * 腾讯短信参数
- *
- * 参数示例:
- * [{"sms_10":{"url":"sms.tencentcloudapi.com","region":"ap-guangzhou","secretId":"AKIDhDUUDfffffMEqBF1WljQq","secretKey":"B4h39yWnfffff7D2btue7JErDJ8gxyi","smsSdkAppId":"140025","templateId":"11897","signName":"Java3y公众号","supplierId":10,"supplierName":"腾讯云"}}]
- *
- * @author 3y
- */
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class TencentSmsAccount {
-
- /**
- * api相关
- */
- private String url;
- private String region ;
-
- /**
- * 账号相关
- */
- private String secretId;
- private String secretKey;
- private String smsSdkAppId;
- private String templateId;
- private String signName;
-
- /**
- * 标识渠道商Id
- */
- private Integer supplierId;
-
- /**
- * 标识渠道商名字
- */
- private String supplierName;
-
-}
diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/SmsAccount.java b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/SmsAccount.java
index 31a5215..9d1c99f 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/SmsAccount.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/SmsAccount.java
@@ -1,7 +1,6 @@
package com.java3y.austin.common.dto.account.sms;
import lombok.AllArgsConstructor;
-import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -20,9 +19,10 @@ public class SmsAccount {
protected String supplierName;
/**
- * 【重要】类名,定位到具体的处理下发和回执逻辑
- *
- * 依据scriptName对应具体的某一个短信账号
+ * 【重要】类名,定位到具体的处理"下发"/"回执"逻辑
+ * 依据ScriptName对应具体的某一个短信账号
*/
protected String scriptName;
+
+
}
diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/TencentSmsAccount.java b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/TencentSmsAccount.java
index 1f28379..73fe7cf 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/TencentSmsAccount.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/TencentSmsAccount.java
@@ -1,13 +1,12 @@
package com.java3y.austin.common.dto.account.sms;
import lombok.AllArgsConstructor;
-import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 腾讯短信参数
- *
+ *
* 账号参数示例:
* {"url":"sms.tencentcloudapi.com","region":"ap-guangzhou","secretId":"AKIDhDxxxxxxxx1WljQq","secretKey":"B4hwww39yxxxrrrrgxyi","smsSdkAppId":"1423123125","templateId":"1182097","signName":"Java3y公众号","supplierId":10,"supplierName":"腾讯云","scriptName":"TencentSmsScript"}
*
@@ -22,7 +21,7 @@ public class TencentSmsAccount extends SmsAccount {
* api相关
*/
private String url;
- private String region ;
+ private String region;
/**
* 账号相关
diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/YunPianSmsAccount.java b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/YunPianSmsAccount.java
index 1421569..f33e369 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/YunPianSmsAccount.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/YunPianSmsAccount.java
@@ -1,13 +1,12 @@
package com.java3y.austin.common.dto.account.sms;
import lombok.AllArgsConstructor;
-import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 云片账号信息
- *
+ *
* 账号参数示例:
* {"url":"https://sms.yunpian.com/v2/sms/tpl_batch_send.json","apikey":"caffff8234234231b5cd7","tpl_id":"523333332","supplierId":20,"supplierName":"云片","scriptName":"YunPianSmsScript"}
*
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/SmsParam.java b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/SmsParam.java
index f9cf01a..827b26d 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/SmsParam.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/SmsParam.java
@@ -25,7 +25,7 @@ public class SmsParam {
private Set phones;
/**
- * 发送渠道账号的脚本名标识
+ * 渠道账号的脚本名标识
*/
private String scriptName;
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/Handler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/Handler.java
index d9c3165..88291b5 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/Handler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/Handler.java
@@ -24,5 +24,4 @@ public interface Handler {
*/
void recall(MessageTemplate messageTemplate);
-
}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java
index 4f484d9..19e5954 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingWorkNoticeHandler.java
@@ -59,6 +59,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
private static final String SEND_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2";
private static final String RECALL_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/recall";
+ private static final String PULL_URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult";
private static final String DING_DING_RECALL_KEY_PREFIX = "RECALL_";
private static final String RECALL_BIZ_TYPE = "DingDingWorkNoticeHandler#recall";
@@ -195,5 +196,23 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
}
});
}
+
+ /**
+ * 拉取回执
+ */
+ public void pull(Long accountId) {
+ try {
+// DingDingWorkNoticeAccount account = accountUtils.getAccountById(accountId, DingDingWorkNoticeAccount.class);
+// String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + accountId);
+// DingTalkClient client = new DefaultDingTalkClient(PULL_URL);
+// OapiMessageCorpconversationGetsendresultRequest req = new OapiMessageCorpconversationGetsendresultRequest();
+// req.setAgentId(Long.valueOf(account.getAgentId()));
+// req.setTaskId(456L);
+// OapiMessageCorpconversationGetsendresultResponse rsp = client.execute(req, accessToken);
+// System.out.println(rsp.getBody());
+ } catch (Exception e) {
+ log.error("DingDingWorkNoticeHandler#pull fail:{}", Throwables.getStackTraceAsString(e));
+ }
+ }
}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java
index e131431..8856452 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/PushHandler.java
@@ -58,7 +58,7 @@ public class PushHandler extends BaseHandler implements Handler {
public boolean handler(TaskInfo taskInfo) {
try {
- GeTuiAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(),GeTuiAccount.class);
+ GeTuiAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), GeTuiAccount.class);
String token = redisTemplate.opsForValue().get(SendAccountConstant.GE_TUI_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount());
PushParam pushParam = PushParam.builder().token(token).appId(account.getAppId()).taskInfo(taskInfo).build();
@@ -83,6 +83,7 @@ public class PushHandler extends BaseHandler implements Handler {
/**
* 单推
+ *
* @param pushParam
* @return http result
*/
@@ -101,7 +102,7 @@ public class PushHandler extends BaseHandler implements Handler {
/**
* 批量推送
*
- * @param taskId 个推 返回的任务Id
+ * @param taskId 个推 返回的任务Id
* @param pushParam
* @return
*/
@@ -122,6 +123,7 @@ public class PushHandler extends BaseHandler implements Handler {
/**
* 群推前需要构建taskId
+ *
* @param pushParam
* @return http result
*/
@@ -161,6 +163,7 @@ public class PushHandler extends BaseHandler implements Handler {
}
return param;
}
+
@Override
public void recall(MessageTemplate messageTemplate) {
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/SmsHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/SmsHandler.java
index 8b2cb55..c4e1e7f 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/SmsHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/SmsHandler.java
@@ -5,7 +5,6 @@ import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.google.common.base.Throwables;
-import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.model.SmsContentModel;
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/DingDingWorkReceipt.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/DingDingWorkReceipt.java
deleted file mode 100644
index 50092f1..0000000
--- a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/DingDingWorkReceipt.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.java3y.austin.handler.receipt;
-
-
-import cn.hutool.core.util.StrUtil;
-import com.dingtalk.api.DefaultDingTalkClient;
-import com.dingtalk.api.DingTalkClient;
-import com.dingtalk.api.request.OapiMessageCorpconversationGetsendresultRequest;
-import com.dingtalk.api.response.OapiMessageCorpconversationGetsendresultResponse;
-import com.java3y.austin.common.constant.SendAccountConstant;
-import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount;
-import com.java3y.austin.support.utils.AccountUtils;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.stereotype.Component;
-
-/**
- * 拉取钉钉工作消息回执信息
- *
- * @author 3y
- */
-@Component
-@Slf4j
-public class DingDingWorkReceipt {
-
- private static final String URL = "https://oapi.dingtalk.com/topapi/message/corpconversation/getsendresult";
- @Autowired
- private StringRedisTemplate redisTemplate;
-
- @Autowired
- private AccountUtils accountUtils;
- public void pull() {
-// try {
-// for (int index = SendAccountConstant.START; true; index = index + SendAccountConstant.STEP) {
-// DingDingWorkNoticeAccount account = accountUtils.getAccountById(index, SendAccountConstant.DING_DING_WORK_NOTICE_ACCOUNT_KEY, SendAccountConstant.DING_DING_WORK_NOTICE_PREFIX, DingDingWorkNoticeAccount.class);
-// if (account == null) {
-// break;
-// }
-// String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + index);
-// DingTalkClient client = new DefaultDingTalkClient(URL);
-// OapiMessageCorpconversationGetsendresultRequest req = new OapiMessageCorpconversationGetsendresultRequest();
-// req.setAgentId(Long.valueOf(account.getAgentId()));
-// req.setTaskId(456L);
-// OapiMessageCorpconversationGetsendresultResponse rsp = client.execute(req, accessToken);
-// System.out.println(rsp.getBody());
-// }
-// } catch (Exception e) {
-// log.error("DingDingWorkReceipt#pull");
-// }
- }
-}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java
index 1ad7ce3..a5cd6c9 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java
@@ -1,15 +1,18 @@
package com.java3y.austin.handler.receipt;
+import com.google.common.base.Throwables;
+import com.java3y.austin.handler.receipt.stater.ReceiptMessageStater;
import com.java3y.austin.support.config.SupportThreadPoolConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
+import java.util.List;
/**
- * 拉取回执信息
+ * 拉取回执信息 入口
*
* @author 3y
*/
@@ -18,18 +21,20 @@ import javax.annotation.PostConstruct;
public class MessageReceipt {
@Autowired
- private SmsPullReceipt smsPullReceipt;
+ private List receiptMessageStaterList;
@PostConstruct
private void init() {
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
while (true) {
- // TODO 回执这里自行打开(免得报错)
- // smsPullReceipt.pull();
try {
- Thread.sleep(200);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ for (ReceiptMessageStater receiptMessageStater : receiptMessageStaterList) {
+ // 拉取回执需要打开下面一行注释
+ //receiptMessageStater.start();
+ }
+ Thread.sleep(2000);
+ } catch (Exception e) {
+ log.error("MessageReceiptApplication#fail:{}", Throwables.getStackTraceAsString(e));
}
}
});
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsPullReceipt.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsPullReceipt.java
deleted file mode 100644
index 94ef07f..0000000
--- a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/SmsPullReceipt.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package com.java3y.austin.handler.receipt;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DatePattern;
-import cn.hutool.core.date.DateUtil;
-import com.alibaba.fastjson.JSON;
-import com.google.common.base.Throwables;
-import com.java3y.austin.common.constant.CommonConstant;
-import com.java3y.austin.common.dto.account.sms.TencentSmsAccount;
-import com.java3y.austin.common.dto.account.sms.YunPianSmsAccount;
-import com.java3y.austin.common.enums.ChannelType;
-import com.java3y.austin.common.enums.SmsStatus;
-import com.java3y.austin.common.enums.SmsSupplier;
-import com.java3y.austin.support.dao.ChannelAccountDao;
-import com.java3y.austin.support.dao.SmsRecordDao;
-import com.java3y.austin.support.domain.ChannelAccount;
-import com.java3y.austin.support.domain.SmsRecord;
-import com.tencentcloudapi.common.Credential;
-import com.tencentcloudapi.common.profile.ClientProfile;
-import com.tencentcloudapi.common.profile.HttpProfile;
-import com.tencentcloudapi.sms.v20210111.SmsClient;
-import com.tencentcloudapi.sms.v20210111.models.PullSmsSendStatus;
-import com.tencentcloudapi.sms.v20210111.models.PullSmsSendStatusRequest;
-import com.tencentcloudapi.sms.v20210111.models.PullSmsSendStatusResponse;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-
-/**
- * 拉取短信回执信息
- *
- * @author 3y
- */
-@Component
-@Slf4j
-public class SmsPullReceipt {
-
- @Autowired
- private ChannelAccountDao channelAccountDao;
-
- @Autowired
- private SmsRecordDao smsRecordDao;
-
- /**
- * 拉取消息并入库
- *
- * eg accountList:[{"sms_10":{"url":"sms.tencentcloudapi.com","region":"ap-guangzhou","secretId":"234234","secretKey":"234324324","smsSdkAppId":"2343242","templateId":"234234","signName":"Java3y公众号","supplierId":10,"supplierName":"腾讯云"}},{"sms_20":{"url":"https://sms.yunpian.com/v2/sms/tpl_batch_send.json","apikey":"23423432","tpl_id":"23423432","supplierId":20,"supplierName":"云片"}}]
- */
- public void pull() {
- List channelAccountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(CommonConstant.FALSE, ChannelType.SMS.getCode());
- for (ChannelAccount channelAccount : channelAccountList) {
- Integer supplierId = JSON.parseObject(channelAccount.getAccountConfig()).getInteger("supplierId");
- if (SmsSupplier.TENCENT.getCode().equals(supplierId)) {
- TencentSmsAccount tencentSmsAccount = JSON.parseObject(channelAccount.getAccountConfig(), TencentSmsAccount.class);
- pullTencent(tencentSmsAccount);
- } else if (SmsSupplier.YUN_PAIN.getCode().equals(supplierId)) {
- YunPianSmsAccount yunPianSmsAccount = JSON.parseObject(channelAccount.getAccountConfig(), YunPianSmsAccount.class);
- pullYunPain(yunPianSmsAccount);
- }
- }
- }
-
- /**
- * 拉取腾讯的回执
- *
- * @param account
- */
- private void pullTencent(TencentSmsAccount account) {
- try {
- /**
- * 初始化客户端
- */
- HttpProfile httpProfile = new HttpProfile();
- httpProfile.setEndpoint(account.getUrl());
- ClientProfile clientProfile = new ClientProfile();
- clientProfile.setHttpProfile(httpProfile);
- SmsClient client = new SmsClient(new Credential(account.getSecretId(), account.getSecretKey()), account.getRegion(), clientProfile);
-
- /**
- * 每次拉取10条
- */
- PullSmsSendStatusRequest req = new PullSmsSendStatusRequest();
- req.setLimit(10L);
- req.setSmsSdkAppId(account.getSmsSdkAppId());
-
- /**
- * 拉取回执后入库
- */
- PullSmsSendStatusResponse resp = client.PullSmsSendStatus(req);
- List smsRecordList = new ArrayList<>();
- if (resp != null && resp.getPullSmsSendStatusSet() != null && resp.getPullSmsSendStatusSet().length > 0) {
- for (PullSmsSendStatus pullSmsSendStatus : resp.getPullSmsSendStatusSet()) {
- SmsRecord smsRecord = SmsRecord.builder()
- .sendDate(Integer.valueOf(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)))
- .messageTemplateId(0L)
- .phone(Long.valueOf(pullSmsSendStatus.getSubscriberNumber()))
- .supplierId(account.getSupplierId())
- .supplierName(account.getSupplierName())
- .msgContent("")
- .seriesId(pullSmsSendStatus.getSerialNo())
- .chargingNum(0)
- .status("SUCCESS".equals(pullSmsSendStatus.getReportStatus()) ? SmsStatus.RECEIVE_SUCCESS.getCode() : SmsStatus.RECEIVE_FAIL.getCode())
- .reportContent(pullSmsSendStatus.getDescription())
- .updated(Math.toIntExact(pullSmsSendStatus.getUserReceiveTime()))
- .created(Math.toIntExact(DateUtil.currentSeconds()))
- .build();
- smsRecordList.add(smsRecord);
- }
- }
- if (!CollUtil.isEmpty(smsRecordList)) {
- smsRecordDao.saveAll(smsRecordList);
- }
- } catch (Exception e) {
- log.error("TencentSmsReceipt#init fail!{}", Throwables.getStackTraceAsString(e));
- }
- }
-
- private void pullYunPain(YunPianSmsAccount yunPianSmsAccount) {
-
- }
-}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/ReceiptMessageStater.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/ReceiptMessageStater.java
new file mode 100644
index 0000000..5895227
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/ReceiptMessageStater.java
@@ -0,0 +1,14 @@
+package com.java3y.austin.handler.receipt.stater;
+
+/**
+ * 拉取回执信息 启动器
+ *
+ * @author 3y
+ */
+public interface ReceiptMessageStater {
+
+ /**
+ * 启动拉取回执
+ */
+ void start();
+}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/impl/DingDingWorkReceiptStaterImpl.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/impl/DingDingWorkReceiptStaterImpl.java
new file mode 100644
index 0000000..aca3495
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/impl/DingDingWorkReceiptStaterImpl.java
@@ -0,0 +1,33 @@
+package com.java3y.austin.handler.receipt.stater.impl;
+
+import com.java3y.austin.common.constant.CommonConstant;
+import com.java3y.austin.common.enums.ChannelType;
+import com.java3y.austin.handler.handler.impl.DingDingWorkNoticeHandler;
+import com.java3y.austin.handler.receipt.stater.ReceiptMessageStater;
+import com.java3y.austin.support.dao.ChannelAccountDao;
+import com.java3y.austin.support.domain.ChannelAccount;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * 拉取 钉钉工作消息的回执 内容 【未完成】
+ *
+ * @author 3y
+ */
+public class DingDingWorkReceiptStaterImpl implements ReceiptMessageStater {
+
+ @Autowired
+ private DingDingWorkNoticeHandler workNoticeHandler;
+
+ @Autowired
+ private ChannelAccountDao channelAccountDao;
+
+ @Override
+ public void start() {
+ List accountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(CommonConstant.FALSE, ChannelType.DING_DING_WORK_NOTICE.getCode());
+ for (ChannelAccount channelAccount : accountList) {
+ workNoticeHandler.pull(channelAccount.getId());
+ }
+ }
+}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/impl/SmsPullReceiptStarterImpl.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/impl/SmsPullReceiptStarterImpl.java
new file mode 100644
index 0000000..39e8728
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/stater/impl/SmsPullReceiptStarterImpl.java
@@ -0,0 +1,60 @@
+package com.java3y.austin.handler.receipt.stater.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.google.common.base.Throwables;
+import com.java3y.austin.common.constant.CommonConstant;
+import com.java3y.austin.common.dto.account.sms.SmsAccount;
+import com.java3y.austin.common.enums.ChannelType;
+import com.java3y.austin.handler.receipt.stater.ReceiptMessageStater;
+import com.java3y.austin.handler.script.SmsScript;
+import com.java3y.austin.support.dao.ChannelAccountDao;
+import com.java3y.austin.support.dao.SmsRecordDao;
+import com.java3y.austin.support.domain.ChannelAccount;
+import com.java3y.austin.support.domain.SmsRecord;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * 拉取短信回执信息
+ *
+ * @author 3y
+ */
+@Component
+@Slf4j
+public class SmsPullReceiptStarterImpl implements ReceiptMessageStater {
+
+ @Autowired
+ private ChannelAccountDao channelAccountDao;
+
+ @Autowired
+ private Map scriptMap;
+
+ @Autowired
+ private SmsRecordDao smsRecordDao;
+
+ /**
+ * 拉取消息并入库
+ */
+ public void start() {
+ try {
+ List channelAccountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(CommonConstant.FALSE, ChannelType.SMS.getCode());
+ for (ChannelAccount channelAccount : channelAccountList) {
+ SmsAccount smsAccount = JSON.parseObject(channelAccount.getAccountConfig(), SmsAccount.class);
+ List smsRecordList = scriptMap.get(smsAccount.getScriptName()).pull(smsAccount.getScriptName());
+ if (CollUtil.isNotEmpty(smsRecordList)) {
+ smsRecordDao.saveAll(smsRecordList);
+ }
+ }
+ } catch (Exception e) {
+ log.error("SmsPullReceiptStarter#start fail:{}", Throwables.getStackTraceAsString(e));
+
+ }
+
+ }
+}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/BaseSmsScript.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/BaseSmsScript.java
deleted file mode 100644
index 931cb5c..0000000
--- a/austin-handler/src/main/java/com/java3y/austin/handler/script/BaseSmsScript.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.java3y.austin.handler.script;
-
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import javax.annotation.PostConstruct;
-import java.lang.annotation.Annotation;
-
-/**
- * sms发送脚本的抽象类
- *
- * @author 3y
- */
-@Slf4j
-public abstract class BaseSmsScript implements SmsScript {
-
- @Autowired
- private SmsScriptHolder smsScriptHolder;
-
- @PostConstruct
- public void registerProcessScript() {
- if (ArrayUtils.isEmpty(this.getClass().getAnnotations())) {
- log.error("BaseSmsScript can not find annotation!");
- return;
- }
- Annotation handlerAnnotations = null;
- for (Annotation annotation : this.getClass().getAnnotations()) {
- if (annotation instanceof SmsScriptHandler) {
- handlerAnnotations = annotation;
- break;
- }
- }
- if (handlerAnnotations == null) {
- log.error("handler annotations not declared");
- return;
- }
- //注册handler
- smsScriptHolder.putHandler(((SmsScriptHandler) handlerAnnotations).value(), this);
- }
-}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScript.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScript.java
index 35d6e98..4facaba 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScript.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScript.java
@@ -9,16 +9,25 @@ import java.util.List;
/**
* 短信脚本 接口
+ *
* @author 3y
*/
public interface SmsScript {
/**
* 发送短信
+ *
* @param smsParam
- * @return 渠道商接口返回值
-
+ * @return 渠道商发送接口返回值
*/
List send(SmsParam smsParam);
+
+ /**
+ * 拉取回执
+ * @param scriptName 标识账号的脚本名
+ * @return 渠道商回执接口返回值
+ */
+ List pull(String scriptName);
+
}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScriptHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScriptHandler.java
deleted file mode 100644
index 7b285e8..0000000
--- a/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScriptHandler.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.java3y.austin.handler.script;
-
-import org.springframework.stereotype.Component;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-
-/**
- * 标识 短信渠道
- *
- * @author 3y
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.TYPE})
-@Component
-public @interface SmsScriptHandler {
-
- /**
- * 这里输入脚本名
- *
- * @return
- */
- String value();
-}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScriptHolder.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScriptHolder.java
deleted file mode 100644
index b02244e..0000000
--- a/austin-handler/src/main/java/com/java3y/austin/handler/script/SmsScriptHolder.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.java3y.austin.handler.script;
-
-
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * sendAccount->SmsScript的映射关系
- *
- * @author 3y
- */
-@Component
-public class SmsScriptHolder {
-
- private Map handlers = new HashMap<>(8);
-
- public void putHandler(String scriptName, SmsScript handler) {
- handlers.put(scriptName, handler);
- }
- public SmsScript route(String scriptName) {
- return handlers.get(scriptName);
- }
-}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/TencentSmsScript.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/TencentSmsScript.java
index 32cfec0..4681020 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/TencentSmsScript.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/TencentSmsScript.java
@@ -16,9 +16,7 @@ import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20210111.SmsClient;
-import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
-import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
-import com.tencentcloudapi.sms.v20210111.models.SendStatus;
+import com.tencentcloudapi.sms.v20210111.models.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -49,17 +47,38 @@ public class TencentSmsScript implements SmsScript {
try {
TencentSmsAccount tencentSmsAccount = accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), TencentSmsAccount.class);
SmsClient client = init(tencentSmsAccount);
- SendSmsRequest request = assembleReq(smsParam, tencentSmsAccount);
+ SendSmsRequest request = assembleSendReq(smsParam, tencentSmsAccount);
SendSmsResponse response = client.SendSms(request);
- return assembleSmsRecord(smsParam, response, tencentSmsAccount);
+ return assembleSendSmsRecord(smsParam, response, tencentSmsAccount);
} catch (Exception e) {
log.error("TencentSmsScript#send fail:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
return null;
}
}
+ @Override
+ public List pull(String scriptName) {
+ try {
+ TencentSmsAccount account = accountUtils.getSmsAccountByScriptName(scriptName, TencentSmsAccount.class);
+ SmsClient client = init(account);
+ PullSmsSendStatusRequest req = assemblePullReq(account);
+ PullSmsSendStatusResponse resp = client.PullSmsSendStatus(req);
+ return assemblePullSmsRecord(account, resp);
+ } catch (Exception e) {
+ log.error("TencentSmsReceipt#pull fail!{}", Throwables.getStackTraceAsString(e));
+ return null;
+ }
+ }
- private List assembleSmsRecord(SmsParam smsParam, SendSmsResponse response, TencentSmsAccount tencentSmsAccount) {
+ /**
+ * 组装 发送消息的 返回值
+ *
+ * @param smsParam
+ * @param response
+ * @param tencentSmsAccount
+ * @return
+ */
+ private List assembleSendSmsRecord(SmsParam smsParam, SendSmsResponse response, TencentSmsAccount tencentSmsAccount) {
if (response == null || ArrayUtil.isEmpty(response.getSendStatusSet())) {
return null;
}
@@ -94,7 +113,7 @@ public class TencentSmsScript implements SmsScript {
/**
* 组装发送短信参数
*/
- private SendSmsRequest assembleReq(SmsParam smsParam, TencentSmsAccount account) {
+ private SendSmsRequest assembleSendReq(SmsParam smsParam, TencentSmsAccount account) {
SendSmsRequest req = new SendSmsRequest();
String[] phoneNumberSet1 = smsParam.getPhones().toArray(new String[smsParam.getPhones().size() - 1]);
req.setPhoneNumberSet(phoneNumberSet1);
@@ -122,5 +141,50 @@ public class TencentSmsScript implements SmsScript {
return client;
}
+ /**
+ * 组装 拉取回执信息
+ *
+ * @param account
+ * @param resp
+ * @return
+ */
+ private List assemblePullSmsRecord(TencentSmsAccount account, PullSmsSendStatusResponse resp) {
+ List smsRecordList = new ArrayList<>();
+ if (resp != null && resp.getPullSmsSendStatusSet() != null && resp.getPullSmsSendStatusSet().length > 0) {
+ for (PullSmsSendStatus pullSmsSendStatus : resp.getPullSmsSendStatusSet()) {
+ SmsRecord smsRecord = SmsRecord.builder()
+ .sendDate(Integer.valueOf(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN)))
+ .messageTemplateId(0L)
+ .phone(Long.valueOf(pullSmsSendStatus.getSubscriberNumber()))
+ .supplierId(account.getSupplierId())
+ .supplierName(account.getSupplierName())
+ .msgContent("")
+ .seriesId(pullSmsSendStatus.getSerialNo())
+ .chargingNum(0)
+ .status("SUCCESS".equals(pullSmsSendStatus.getReportStatus()) ? SmsStatus.RECEIVE_SUCCESS.getCode() : SmsStatus.RECEIVE_FAIL.getCode())
+ .reportContent(pullSmsSendStatus.getDescription())
+ .updated(Math.toIntExact(pullSmsSendStatus.getUserReceiveTime()))
+ .created(Math.toIntExact(DateUtil.currentSeconds()))
+ .build();
+ smsRecordList.add(smsRecord);
+ }
+ }
+ return smsRecordList;
+ }
+
+ /**
+ * 组装 拉取回执 入参
+ *
+ * @param account
+ * @return
+ */
+ private PullSmsSendStatusRequest assemblePullReq(TencentSmsAccount account) {
+ PullSmsSendStatusRequest req = new PullSmsSendStatusRequest();
+ req.setLimit(10L);
+ req.setSmsSdkAppId(account.getSmsSdkAppId());
+ return req;
+ }
+
+
}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/YunPianSmsScript.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/YunPianSmsScript.java
index 021e789..991096f 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/YunPianSmsScript.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/YunPianSmsScript.java
@@ -56,6 +56,13 @@ public class YunPianSmsScript implements SmsScript {
}
+ @Override
+ public List pull(String scriptName) {
+ YunPianSmsAccount account = accountUtils.getSmsAccountByScriptName(scriptName, YunPianSmsAccount.class);
+ // .....
+ return null;
+ }
+
/**
* 组装参数
*
diff --git a/austin-support/src/main/java/com/java3y/austin/support/utils/AccountUtils.java b/austin-support/src/main/java/com/java3y/austin/support/utils/AccountUtils.java
index afd5d75..813641b 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/utils/AccountUtils.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/utils/AccountUtils.java
@@ -1,10 +1,7 @@
package com.java3y.austin.support.utils;
import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Throwables;
-import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.dto.account.sms.SmsAccount;
import com.java3y.austin.common.enums.ChannelType;
@@ -84,7 +81,6 @@ public class AccountUtils {
} catch (Exception e) {
log.error("AccountUtils#getSmsAccount fail! e:{}", Throwables.getStackTraceAsString(e));
}
-
log.error("AccountUtils#getSmsAccount not found!:{}", scriptName);
return null;
}