diff --git a/README.md b/README.md
index 18b2d62..bf70fd4 100644
--- a/README.md
+++ b/README.md
@@ -124,7 +124,7 @@ curl -XPOST "127.0.0.1:8080/send" -H 'Content-Type: application/json' -d '{"co
5、除了项目,还可以问我些学习经验、学习路线、简历编写、面试经验等等问题,技术和学习上的知识**知无不言**
-详情可以看戳:[我开通了付费渠道](https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247505577&idx=1&sn=5114f8f583755899c2946fbea0b22e4b&chksm=ebd497a8dca31ebe8f98344483a00c860863dfc3586e51eed95b25988151427fee8101311f4f&token=319992632&lang=zh_CN#rd)
+详情可以看戳:[我开通了付费渠道](https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247507166&idx=1&sn=d4437089c2db18b90a6d3ec742380554&chksm=ebd49ddfdca314c94d49a02da2ecb1358ac08d86616b6f1fce34720cc96e81d3006a51e86beb&token=28465847&lang=zh_CN#rd)
## 项目交流
diff --git a/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java b/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java
index cb23a55..026887a 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/constant/AustinConstant.java
@@ -2,30 +2,16 @@ package com.java3y.austin.common.constant;
/**
- * 基础的常量信息
+ * Austin常量信息
*
* @author 3y
*/
public class AustinConstant {
/**
- * boolean转换
+ * 跨域地址端口
*/
- public final static Integer TRUE = 1;
- public final static Integer FALSE = 0;
-
- /**
- * cron时间格式
- */
- public final static String CRON_FORMAT = "ss mm HH dd MM ? yyyy-yyyy";
-
-
- /**
- * apollo默认的值
- */
- public final static String APOLLO_DEFAULT_VALUE_JSON_OBJECT = "{}";
- public final static String APOLLO_DEFAULT_VALUE_JSON_ARRAY = "[]";
-
+ public static final String ORIGIN_VALUE = "http://localhost:3000";
/**
* businessId默认的长度
@@ -33,6 +19,10 @@ public class AustinConstant {
*/
public final static Integer BUSINESS_ID_LENGTH = 16;
+ /**
+ * 接口限制 最多的人数
+ */
+ public static final Integer BATCH_RECEIVER_SIZE = 100;
/**
* 消息发送给全部人的标识
@@ -43,23 +33,5 @@ public class AustinConstant {
public static final String SEND_ALL = "@all";
- /**
- * 加密算法
- */
- public static final String HMAC_SHA256_ENCRYPTION_ALGO = "HmacSHA256";
-
- /**
- * 编码格式
- */
- public static final String CHARSET_NAME = "UTF-8";
-
-
- /**
- * HTTP 请求方法
- */
- public static final String REQUEST_METHOD_GET = "GET";
- public static final String REQUEST_METHOD_POST = "POST";
-
-
}
diff --git a/austin-common/src/main/java/com/java3y/austin/common/constant/CommonConstant.java b/austin-common/src/main/java/com/java3y/austin/common/constant/CommonConstant.java
index ffc9088..8f41ae7 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/constant/CommonConstant.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/constant/CommonConstant.java
@@ -1,6 +1,7 @@
package com.java3y.austin.common.constant;
public class CommonConstant {
+
public final static String PERIOD = ".";
public final static String COMMA = ",";
public final static String COLON = ":";
@@ -9,10 +10,54 @@ public class CommonConstant {
public final static String SLASH = "/";
public final static String BACKSLASH = "\\";
public final static String EMPTY_STRING = "";
- //
+ public final static String RADICAL = "|";
+
+ public final static String QM_STRING = "?";
+ public final static String EQUAL_STRING = "=";
+ public final static String AND_STRING = "&";
+
+
public final static String ONE = "1";
public final static String ZERO = "0";
public final static String MINUS_ONE = "-1";
public final static String YES = "Y";
public final static String NO = "N";
+
+
+ public final static char QM = '?';
+
+ /**
+ * boolean转换
+ */
+ public final static Integer TRUE = 1;
+ public final static Integer FALSE = 0;
+
+
+ /**
+ * 加密算法
+ */
+ public static final String HMAC_SHA256_ENCRYPTION_ALGO = "HmacSHA256";
+
+ /**
+ * 编码格式
+ */
+ public static final String CHARSET_NAME = "UTF-8";
+
+ /**
+ * HTTP 请求方法
+ */
+ public static final String REQUEST_METHOD_GET = "GET";
+ public static final String REQUEST_METHOD_POST = "POST";
+
+ /**
+ * JSON默认值
+ */
+ public final static String EMPTY_JSON_OBJECT = "{}";
+ public final static String EMPTY_VALUE_JSON_ARRAY = "[]";
+
+ /**
+ * cron时间格式
+ */
+ public final static String CRON_FORMAT = "ss mm HH dd MM ? yyyy-yyyy";
+
}
\ No newline at end of file
diff --git a/austin-common/src/main/java/com/java3y/austin/common/constant/SendAccountConstant.java b/austin-common/src/main/java/com/java3y/austin/common/constant/SendAccountConstant.java
index 3f90cc2..67b5df8 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/constant/SendAccountConstant.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/constant/SendAccountConstant.java
@@ -3,92 +3,19 @@ package com.java3y.austin.common.constant;
/**
* 发送账号的常量信息汇总
- *
- * (读取apollo的key和前缀)
- *
- * 约定:所有的账号都从10开始,步长为10
- *
* @author 3y
*/
public class SendAccountConstant {
- /**
- * 账号约定:所有的账号都从10开始,步长为10
- */
- public static final Integer START = 10;
- public static final Integer STEP = 10;
-
-
/**
* 钉钉 工作应用消息 账号
*/
- public static final String DING_DING_WORK_NOTICE_ACCOUNT_KEY = "dingDingWorkNoticeAccount";
- public static final String DING_DING_WORK_NOTICE_PREFIX = "ding_ding_work_notice_";
public static final String DING_DING_ACCESS_TOKEN_PREFIX = "ding_ding_access_token_";
/**
* 个推PUSH 消息账号
*/
- public static final String GE_TUI_ACCOUNT_KEY = "geTuiAccount";
- public static final String GE_TUI_ACCOUNT_PREFIX = "ge_tui_account_";
public static final String GE_TUI_ACCESS_TOKEN_PREFIX = "ge_tui_access_token_";
-
- /**
- * 邮件 账号
- */
- public static final String EMAIL_ACCOUNT_KEY = "emailAccount";
- public static final String EMAIL_ACCOUNT_PREFIX = "email_";
-
-
- /**
- * 钉钉群自定义机器人 账号
- */
- public static final String DING_DING_ROBOT_ACCOUNT_KEY = "dingDingRobotAccount";
- public static final String DING_DING_ROBOT_PREFIX = "ding_ding_robot_";
-
- /**
- * 企业微信群机器人 账号
- */
- public static final String ENTERPRISE_WECHAT_ROBOT_ACCOUNT_KEY = "enterpriseWechatAccountRobot";
- public static final String ENTERPRISE_WECHAT_ROBOT_PREFIX = "enterprise_wechat_robot_";
-
- /**
- * 飞书群机器人 账号
- */
- public static final String FEI_SHU_ROBOT_ACCOUNT_KEY = "feiShuAccountRobot";
- public static final String FEI_SHU_ROBOT_PREFIX = "fei_shu_robot_";
-
- /**
- * 企业微信 应用消息 账号
- */
- public static final String ENTERPRISE_WECHAT_ACCOUNT_KEY = "enterpriseWechatAccount";
- public static final String ENTERPRISE_WECHAT_PREFIX = "enterprise_wechat_";
-
- /**
- * 微信服务号 应用消息 账号
- */
- public static final String WECHAT_OFFICIAL_ACCOUNT_KEY = "officialAccount";
- public static final String WECHAT_OFFICIAL__PREFIX = "official_";
-
- /**
- * 微信小程序 应用消息 账号
- */
- public static final String WECHAT_MINI_PROGRAM_ACCOUNT_KEY = "miniProgramAccount";
- public static final String WECHAT_MINI_PROGRAM_PREFIX = "mini_program_";
-
- /**
- * 短信 账号
- */
- public static final String SMS_ACCOUNT_KEY = "smsAccount";
- public static final String SMS_PREFIX = "sms_";
-
-
- /**
- * 短信账号code
- */
- public static final Integer YUN_PIAN_SMS_CODE = 20;
-
-
}
diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/account/AlipayMiniProgramAccount.java b/austin-common/src/main/java/com/java3y/austin/common/dto/account/AlipayMiniProgramAccount.java
new file mode 100644
index 0000000..9dfa247
--- /dev/null
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/AlipayMiniProgramAccount.java
@@ -0,0 +1,42 @@
+package com.java3y.austin.common.dto.account;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author jwq
+ * 支付宝小程序订阅消息账号配置
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AlipayMiniProgramAccount {
+
+ /**
+ * 应用私钥
+ */
+ private String privateKey;
+
+ /**
+ * 支付宝公钥
+ */
+ private String alipayPublicKey;
+
+ /**
+ * 支付宝小程序的AppID
+ */
+ private String appId;
+
+ /**
+ * 订阅模版Id
+ */
+ private String userTemplateId;
+
+ /**
+ * 点击跳转到的小程序页面
+ */
+ private String page;
+}
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
new file mode 100644
index 0000000..31a5215
--- /dev/null
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/SmsAccount.java
@@ -0,0 +1,28 @@
+package com.java3y.austin.common.dto.account.sms;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SmsAccount {
+ /**
+ * 标识渠道商Id
+ */
+ protected Integer supplierId;
+
+ /**
+ * 标识渠道商名字
+ */
+ protected String supplierName;
+
+ /**
+ * 【重要】类名,定位到具体的处理下发和回执逻辑
+ *
+ * 依据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
new file mode 100644
index 0000000..1f28379
--- /dev/null
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/TencentSmsAccount.java
@@ -0,0 +1,35 @@
+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"}
+ *
+ * @author 3y
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class TencentSmsAccount extends SmsAccount {
+
+ /**
+ * api相关
+ */
+ private String url;
+ private String region ;
+
+ /**
+ * 账号相关
+ */
+ private String secretId;
+ private String secretKey;
+ private String smsSdkAppId;
+ private String templateId;
+ private String signName;
+}
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
new file mode 100644
index 0000000..1421569
--- /dev/null
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/YunPianSmsAccount.java
@@ -0,0 +1,35 @@
+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"}
+ *
+ * @author 3y
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class YunPianSmsAccount extends SmsAccount {
+
+ /**
+ * apikey
+ */
+ private String apikey;
+ /**
+ * tplId
+ */
+ private String tplId;
+
+ /**
+ * api相关
+ */
+ private String url;
+
+}
diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/model/AlipayMiniProgramContentModel.java b/austin-common/src/main/java/com/java3y/austin/common/dto/model/AlipayMiniProgramContentModel.java
new file mode 100644
index 0000000..5ee780f
--- /dev/null
+++ b/austin-common/src/main/java/com/java3y/austin/common/dto/model/AlipayMiniProgramContentModel.java
@@ -0,0 +1,25 @@
+package com.java3y.austin.common.dto.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Map;
+
+/**
+ * @author jwq
+ * 支付宝小程序订阅消息内容
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AlipayMiniProgramContentModel extends ContentModel{
+
+ /**
+ * 模板消息发送的数据
+ */
+ Map map;
+
+}
diff --git a/austin-common/src/main/java/com/java3y/austin/common/enums/ChannelType.java b/austin-common/src/main/java/com/java3y/austin/common/enums/ChannelType.java
index 965b857..c81882d 100644
--- a/austin-common/src/main/java/com/java3y/austin/common/enums/ChannelType.java
+++ b/austin-common/src/main/java/com/java3y/austin/common/enums/ChannelType.java
@@ -28,6 +28,7 @@ public enum ChannelType {
DING_DING_WORK_NOTICE(90, "dingDingWorkNotice(钉钉工作通知)", DingDingWorkContentModel.class, "ding_ding_work_notice"),
ENTERPRISE_WE_CHAT_ROBOT(100, "enterpriseWeChat(企业微信机器人)", EnterpriseWeChatRobotContentModel.class, "enterprise_we_chat_robot"),
FEI_SHU_ROBOT(110, "feiShuRoot(飞书机器人)", FeiShuRobotContentModel.class, "fei_shu_robot"),
+ ALIPAY_MINI_PROGRAM(120,"alipayMiniProgram(支付宝小程序)",AlipayMiniProgramContentModel.class,"alipay_mini_program"),
;
/**
diff --git a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java
index 5bb1478..84b5c59 100644
--- a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java
+++ b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshDingDingAccessTokenHandler.java
@@ -8,6 +8,7 @@ import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
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.constant.SendAccountConstant;
import com.java3y.austin.common.dto.account.DingDingWorkNoticeAccount;
import com.java3y.austin.common.enums.ChannelType;
@@ -52,7 +53,7 @@ public class RefreshDingDingAccessTokenHandler {
public void execute() {
log.info("refreshAccessTokenJob#execute!");
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
- List accountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(AustinConstant.FALSE, ChannelType.DING_DING_WORK_NOTICE.getCode());
+ List accountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(CommonConstant.FALSE, ChannelType.DING_DING_WORK_NOTICE.getCode());
for (ChannelAccount channelAccount : accountList) {
DingDingWorkNoticeAccount account = JSON.parseObject(channelAccount.getAccountConfig(), DingDingWorkNoticeAccount.class);
String accessToken = getAccessToken(account);
@@ -76,7 +77,7 @@ public class RefreshDingDingAccessTokenHandler {
OapiGettokenRequest req = new OapiGettokenRequest();
req.setAppkey(account.getAppKey());
req.setAppsecret(account.getAppSecret());
- req.setHttpMethod(AustinConstant.REQUEST_METHOD_GET);
+ req.setHttpMethod(CommonConstant.REQUEST_METHOD_GET);
OapiGettokenResponse rsp = client.execute(req);
accessToken = rsp.getAccessToken();
} catch (Exception e) {
diff --git a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java
index a978e52..94977fe 100644
--- a/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java
+++ b/austin-cron/src/main/java/com/java3y/austin/cron/handler/RefreshGeTuiAccessTokenHandler.java
@@ -8,6 +8,7 @@ import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
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.constant.SendAccountConstant;
import com.java3y.austin.common.dto.account.GeTuiAccount;
import com.java3y.austin.common.enums.ChannelType;
@@ -51,14 +52,12 @@ public class RefreshGeTuiAccessTokenHandler {
public void execute() {
log.info("refreshGeTuiAccessTokenJob#execute!");
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
- List accountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(AustinConstant.FALSE, ChannelType.PUSH.getCode());
- for (int index = SendAccountConstant.START; true; index = index + SendAccountConstant.STEP) {
- for (ChannelAccount channelAccount : accountList) {
- GeTuiAccount account = JSON.parseObject(channelAccount.getAccountConfig(), GeTuiAccount.class);
- String accessToken = getAccessToken(account);
- if (StrUtil.isNotBlank(accessToken)) {
- redisTemplate.opsForValue().set(SendAccountConstant.GE_TUI_ACCESS_TOKEN_PREFIX + index, accessToken);
- }
+ List accountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(CommonConstant.FALSE, ChannelType.PUSH.getCode());
+ for (ChannelAccount channelAccount : accountList) {
+ GeTuiAccount account = JSON.parseObject(channelAccount.getAccountConfig(), GeTuiAccount.class);
+ String accessToken = getAccessToken(account);
+ if (StrUtil.isNotBlank(accessToken)) {
+ redisTemplate.opsForValue().set(SendAccountConstant.GE_TUI_ACCESS_TOKEN_PREFIX + channelAccount.getId(), accessToken);
}
}
});
diff --git a/austin-cron/src/main/java/com/java3y/austin/cron/pending/CrowdBatchTaskPending.java b/austin-cron/src/main/java/com/java3y/austin/cron/pending/CrowdBatchTaskPending.java
index 50339ab..7b420df 100644
--- a/austin-cron/src/main/java/com/java3y/austin/cron/pending/CrowdBatchTaskPending.java
+++ b/austin-cron/src/main/java/com/java3y/austin/cron/pending/CrowdBatchTaskPending.java
@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
+import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.cron.config.CronAsyncThreadPoolConfig;
import com.java3y.austin.cron.constants.PendingConstant;
import com.java3y.austin.cron.vo.CrowdInfoVo;
@@ -40,9 +41,9 @@ public class CrowdBatchTaskPending extends AbstractLazyPending {
public CrowdBatchTaskPending() {
PendingParam pendingParam = new PendingParam<>();
- pendingParam.setNumThreshold(PendingConstant.NUM_THRESHOLD)
- .setQueue(new LinkedBlockingQueue(PendingConstant.QUEUE_SIZE))
+ pendingParam.setQueue(new LinkedBlockingQueue(PendingConstant.QUEUE_SIZE))
.setTimeThreshold(PendingConstant.TIME_THRESHOLD)
+ .setNumThreshold(AustinConstant.BATCH_RECEIVER_SIZE)
.setExecutorService(CronAsyncThreadPoolConfig.getConsumePendingThreadPool());
this.pendingParam = pendingParam;
}
diff --git a/austin-cron/src/main/java/com/java3y/austin/cron/xxl/utils/XxlJobUtils.java b/austin-cron/src/main/java/com/java3y/austin/cron/xxl/utils/XxlJobUtils.java
index cb6de84..4df140c 100644
--- a/austin-cron/src/main/java/com/java3y/austin/cron/xxl/utils/XxlJobUtils.java
+++ b/austin-cron/src/main/java/com/java3y/austin/cron/xxl/utils/XxlJobUtils.java
@@ -3,6 +3,7 @@ package com.java3y.austin.cron.xxl.utils;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.java3y.austin.common.constant.AustinConstant;
+import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.cron.xxl.constants.XxlJobConstant;
@@ -44,8 +45,8 @@ public class XxlJobUtils {
String scheduleConf = messageTemplate.getExpectPushTime();
// 如果没有指定cron表达式,说明立即执行(给到xxl-job延迟5秒的cron表达式)
- if (messageTemplate.getExpectPushTime().equals(String.valueOf(AustinConstant.FALSE))) {
- scheduleConf = DateUtil.format(DateUtil.offsetSecond(new Date(), XxlJobConstant.DELAY_TIME), AustinConstant.CRON_FORMAT);
+ if (messageTemplate.getExpectPushTime().equals(String.valueOf(CommonConstant.FALSE))) {
+ scheduleConf = DateUtil.format(DateUtil.offsetSecond(new Date(), XxlJobConstant.DELAY_TIME), CommonConstant.CRON_FORMAT);
}
XxlJobInfo xxlJobInfo = XxlJobInfo.builder()
@@ -61,7 +62,7 @@ public class XxlJobUtils {
.executorTimeout(XxlJobConstant.TIME_OUT)
.executorFailRetryCount(XxlJobConstant.RETRY_COUNT)
.glueType(GlueTypeEnum.BEAN.name())
- .triggerStatus(AustinConstant.FALSE)
+ .triggerStatus(CommonConstant.FALSE)
.glueRemark(StrUtil.EMPTY)
.glueSource(StrUtil.EMPTY)
.alarmEmail(StrUtil.EMPTY)
@@ -80,7 +81,7 @@ public class XxlJobUtils {
private Integer queryJobGroupId() {
BasicResultVO basicResultVO = cronTaskService.getGroupId(appName, jobHandlerName);
if (basicResultVO.getData() == null) {
- XxlJobGroup xxlJobGroup = XxlJobGroup.builder().appname(appName).title(jobHandlerName).addressType(AustinConstant.FALSE).build();
+ XxlJobGroup xxlJobGroup = XxlJobGroup.builder().appname(appName).title(jobHandlerName).addressType(CommonConstant.FALSE).build();
if (RespStatusEnum.SUCCESS.getCode().equals(cronTaskService.createGroup(xxlJobGroup).getStatus())) {
return (int) cronTaskService.getGroupId(appName, jobHandlerName).getData();
}
diff --git a/austin-handler/pom.xml b/austin-handler/pom.xml
index 7f542c6..eb6ef31 100644
--- a/austin-handler/pom.xml
+++ b/austin-handler/pom.xml
@@ -57,6 +57,11 @@
com.github.binarywang
weixin-java-cp
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/alipay/AlipayMiniProgramAccountService.java b/austin-handler/src/main/java/com/java3y/austin/handler/alipay/AlipayMiniProgramAccountService.java
new file mode 100644
index 0000000..6b5c957
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/alipay/AlipayMiniProgramAccountService.java
@@ -0,0 +1,18 @@
+package com.java3y.austin.handler.alipay;
+
+import com.alipay.api.AlipayApiException;
+import com.java3y.austin.handler.domain.alipay.AlipayMiniProgramParam;
+
+/**
+ * @author jwq
+ * 支付宝小程序发送订阅消息接口
+ */
+public interface AlipayMiniProgramAccountService {
+ /**
+ * 发送订阅消息
+ *
+ * @param miniProgramParam 订阅消息参数
+ * @throws AlipayApiException alipay异常
+ */
+ void send(AlipayMiniProgramParam miniProgramParam) throws AlipayApiException;
+}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/alipay/impl/AlipayMiniProgramAccountServiceImpl.java b/austin-handler/src/main/java/com/java3y/austin/handler/alipay/impl/AlipayMiniProgramAccountServiceImpl.java
new file mode 100644
index 0000000..4fa1d56
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/alipay/impl/AlipayMiniProgramAccountServiceImpl.java
@@ -0,0 +1,86 @@
+package com.java3y.austin.handler.alipay.impl;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.AlipayConfig;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.domain.AlipayOpenAppMiniTemplatemessageSendModel;
+import com.alipay.api.request.AlipayOpenAppMiniTemplatemessageSendRequest;
+import com.java3y.austin.common.constant.SendAccountConstant;
+import com.java3y.austin.common.dto.account.AlipayMiniProgramAccount;
+import com.java3y.austin.handler.alipay.AlipayMiniProgramAccountService;
+import com.java3y.austin.handler.domain.alipay.AlipayMiniProgramParam;
+import com.java3y.austin.support.utils.AccountUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author jwq
+ * 支付宝小程序发送订阅消息实现
+ */
+@Service
+@Slf4j
+public class AlipayMiniProgramAccountServiceImpl implements AlipayMiniProgramAccountService {
+
+ @Autowired
+ private AccountUtils accountUtils;
+
+ /**
+ * 发送订阅消息
+ *
+ * @param miniProgramParam 订阅消息参数
+ * @throws AlipayApiException alipay异常
+ */
+ @Override
+ public void send(AlipayMiniProgramParam miniProgramParam) throws AlipayApiException {
+ AlipayMiniProgramAccount miniProgramAccount = accountUtils.getAccountById(miniProgramParam.getSendAccount(), AlipayMiniProgramAccount.class);
+
+ AlipayClient client = initService(miniProgramAccount);
+ List request = assembleReq(miniProgramParam, miniProgramAccount);
+ for(AlipayOpenAppMiniTemplatemessageSendRequest req : request){
+ client.execute(req);
+ }
+ }
+
+ /**
+ * 组装模板消息的参数
+ */
+ private List assembleReq(AlipayMiniProgramParam alipayMiniProgramParam, AlipayMiniProgramAccount alipayMiniProgramAccount){
+ Set receiver = alipayMiniProgramParam.getToUserId();
+ List requestList = new ArrayList<>(receiver.size());
+
+ for(String toUserId : receiver){
+ AlipayOpenAppMiniTemplatemessageSendRequest request = new AlipayOpenAppMiniTemplatemessageSendRequest();
+ AlipayOpenAppMiniTemplatemessageSendModel model = new AlipayOpenAppMiniTemplatemessageSendModel();
+ model.setToUserId(toUserId);
+ model.setUserTemplateId(alipayMiniProgramAccount.getUserTemplateId());
+ model.setPage(alipayMiniProgramAccount.getPage());
+ model.setData(alipayMiniProgramParam.getData().toString());
+ request.setBizModel(model);
+ requestList.add(request);
+ }
+ return requestList;
+ }
+
+ /**
+ * 初始化支付宝小程序
+ */
+ private AlipayClient initService(AlipayMiniProgramAccount alipayMiniProgramAccount) throws AlipayApiException {
+ AlipayConfig alipayConfig = new AlipayConfig();
+ alipayConfig.setServerUrl("https://openapi.alipaydev.com/gateway.do");
+ alipayConfig.setAppId(alipayMiniProgramAccount.getAppId());
+ alipayConfig.setPrivateKey(alipayMiniProgramAccount.getPrivateKey());
+ alipayConfig.setFormat("json");
+ alipayConfig.setAlipayPublicKey(alipayMiniProgramAccount.getAlipayPublicKey());
+ alipayConfig.setCharset("utf-8");
+ alipayConfig.setSignType("RSA2");
+ return new DefaultAlipayClient(alipayConfig);
+ }
+
+
+}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/DeduplicationRuleService.java b/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/DeduplicationRuleService.java
index 1fbb90b..bf254b2 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/DeduplicationRuleService.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/DeduplicationRuleService.java
@@ -1,6 +1,7 @@
package com.java3y.austin.handler.deduplication;
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.enums.DeduplicationType;
import com.java3y.austin.support.service.ConfigService;
@@ -27,7 +28,7 @@ public class DeduplicationRuleService {
public void duplication(TaskInfo taskInfo) {
// 配置样例:{"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}}
- String deduplicationConfig = config.getProperty(DEDUPLICATION_RULE_KEY, AustinConstant.APOLLO_DEFAULT_VALUE_JSON_OBJECT);
+ String deduplicationConfig = config.getProperty(DEDUPLICATION_RULE_KEY, CommonConstant.EMPTY_JSON_OBJECT);
// 去重
List deduplicationList = DeduplicationType.getDeduplicationList();
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/limit/SimpleLimitService.java b/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/limit/SimpleLimitService.java
index c543a5f..569188b 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/limit/SimpleLimitService.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/deduplication/limit/SimpleLimitService.java
@@ -2,6 +2,7 @@ package com.java3y.austin.handler.deduplication.limit;
import cn.hutool.core.collection.CollUtil;
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.handler.deduplication.DeduplicationParam;
import com.java3y.austin.handler.deduplication.service.AbstractDeduplicationService;
@@ -66,7 +67,7 @@ public class SimpleLimitService extends AbstractLimitService {
if (inRedisValue.get(key) != null) {
keyValues.put(key, String.valueOf(Integer.valueOf(inRedisValue.get(key)) + 1));
} else {
- keyValues.put(key, String.valueOf(AustinConstant.TRUE));
+ keyValues.put(key, String.valueOf(CommonConstant.TRUE));
}
}
if (CollUtil.isNotEmpty(keyValues)) {
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/discard/DiscardMessageService.java b/austin-handler/src/main/java/com/java3y/austin/handler/discard/DiscardMessageService.java
index 49850b2..e056ed6 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/discard/DiscardMessageService.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/discard/DiscardMessageService.java
@@ -3,6 +3,7 @@ package com.java3y.austin.handler.discard;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.java3y.austin.common.constant.AustinConstant;
+import com.java3y.austin.common.constant.CommonConstant;
import com.java3y.austin.common.domain.AnchorInfo;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.enums.AnchorState;
@@ -33,8 +34,7 @@ public class DiscardMessageService {
*/
public boolean isDiscard(TaskInfo taskInfo) {
// 配置示例: ["1","2"]
- JSONArray array = JSON.parseArray(config.getProperty(DISCARD_MESSAGE_KEY,
- AustinConstant.APOLLO_DEFAULT_VALUE_JSON_ARRAY));
+ JSONArray array = JSON.parseArray(config.getProperty(DISCARD_MESSAGE_KEY, CommonConstant.EMPTY_VALUE_JSON_ARRAY));
if (array.contains(String.valueOf(taskInfo.getMessageTemplateId()))) {
logUtils.print(AnchorInfo.builder().businessId(taskInfo.getBusinessId()).ids(taskInfo.getReceiver()).state(AnchorState.DISCARD.getCode()).build());
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/domain/alipay/AlipayMiniProgramParam.java b/austin-handler/src/main/java/com/java3y/austin/handler/domain/alipay/AlipayMiniProgramParam.java
new file mode 100644
index 0000000..469641c
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/domain/alipay/AlipayMiniProgramParam.java
@@ -0,0 +1,43 @@
+package com.java3y.austin.handler.domain.alipay;
+
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author jwq
+ * 支付宝小程序参数
+ */
+@Data
+@Builder
+public class AlipayMiniProgramParam {
+ /**
+ * 业务Id
+ */
+ private Long messageTemplateId;
+
+ /**
+ * 发送账号
+ */
+ private Integer sendAccount;
+
+ /**
+ * 接收者(用户)的 UserId
+ */
+ private Set toUserId;
+
+ /**
+ * 模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
+ */
+ private Map data;
+
+// /**
+// * 支付消息模板:需传入用户发生的交易行为的支付宝交易号 trade_no;
+// * 表单提交模板:需传入用户在小程序触发表单提交事件获得的表单号;
+// * 刷脸消息模板:需传入在IOT刷脸后得到的ftoken等,用于信息发送的校验。
+// * 说明:订阅消息模板无需传入本参数。
+// */
+// private String formId;
+}
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 96a5881..f9cf01a 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,9 +25,9 @@ public class SmsParam {
private Set phones;
/**
- * 发送渠道账号的Id
+ * 发送渠道账号的脚本名标识
*/
- private Integer sendAccountId;
+ private String scriptName;
/**
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/flowcontrol/FlowControlFactory.java b/austin-handler/src/main/java/com/java3y/austin/handler/flowcontrol/FlowControlFactory.java
index 92b22da..217b790 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/flowcontrol/FlowControlFactory.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/flowcontrol/FlowControlFactory.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.util.concurrent.RateLimiter;
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.enums.ChannelType;
import com.java3y.austin.handler.enums.RateLimitStrategy;
@@ -76,7 +77,7 @@ public class FlowControlFactory implements ApplicationContextAware {
* @param channelCode
*/
private Double getRateLimitConfig(Integer channelCode) {
- String flowControlConfig = config.getProperty(FLOW_CONTROL_KEY, AustinConstant.APOLLO_DEFAULT_VALUE_JSON_OBJECT);
+ String flowControlConfig = config.getProperty(FLOW_CONTROL_KEY, CommonConstant.EMPTY_JSON_OBJECT);
JSONObject jsonObject = JSON.parseObject(flowControlConfig);
if (jsonObject.getDouble(FLOW_CONTROL_PREFIX + channelCode) == null) {
return null;
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/AlipayMiniProgramAccountHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/AlipayMiniProgramAccountHandler.java
new file mode 100644
index 0000000..6b90bae
--- /dev/null
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/AlipayMiniProgramAccountHandler.java
@@ -0,0 +1,67 @@
+package com.java3y.austin.handler.handler.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.google.common.base.Throwables;
+import com.java3y.austin.common.domain.TaskInfo;
+import com.java3y.austin.common.dto.model.AlipayMiniProgramContentModel;
+import com.java3y.austin.common.enums.ChannelType;
+import com.java3y.austin.handler.alipay.AlipayMiniProgramAccountService;
+import com.java3y.austin.handler.domain.alipay.AlipayMiniProgramParam;
+import com.java3y.austin.handler.handler.BaseHandler;
+import com.java3y.austin.handler.handler.Handler;
+import com.java3y.austin.support.domain.MessageTemplate;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author jwq
+ * 支付宝小程序发送订阅消息
+ */
+@Component
+@Slf4j
+public class AlipayMiniProgramAccountHandler extends BaseHandler implements Handler {
+
+ @Autowired
+ private AlipayMiniProgramAccountService alipayMiniProgramAccountService;
+
+ public AlipayMiniProgramAccountHandler() {
+ channelCode = ChannelType.ALIPAY_MINI_PROGRAM.getCode();
+ }
+
+ @Override
+ public boolean handler(TaskInfo taskInfo) {
+ AlipayMiniProgramParam miniProgramParam = buildMiniProgramParam(taskInfo);
+ try {
+ alipayMiniProgramAccountService.send(miniProgramParam);
+ }catch (Exception e) {
+ log.error("AlipayMiniProgramAccountHandler#handler fail:{},params:{}",
+ Throwables.getStackTraceAsString(e), JSON.toJSONString(taskInfo));
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * 通过taskInfo构建小程序订阅消息
+ *
+ * @param taskInfo 任务信息
+ * @return AlipayMiniProgramParam
+ */
+ private AlipayMiniProgramParam buildMiniProgramParam(TaskInfo taskInfo){
+ AlipayMiniProgramParam param = AlipayMiniProgramParam.builder()
+ .toUserId(taskInfo.getReceiver())
+ .messageTemplateId(taskInfo.getMessageTemplateId())
+ .sendAccount(taskInfo.getSendAccount())
+ .build();
+
+ AlipayMiniProgramContentModel contentModel = (AlipayMiniProgramContentModel) taskInfo.getContentModel();
+ param.setData(contentModel.getMap());
+ return param;
+ }
+
+ @Override
+ public void recall(MessageTemplate messageTemplate) {
+
+ }
+}
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java
index e378215..997db58 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/DingDingRobotHandler.java
@@ -6,6 +6,7 @@ import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
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.constant.SendAccountConstant;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.account.DingDingRobotAccount;
@@ -48,7 +49,7 @@ public class DingDingRobotHandler extends BaseHandler implements Handler {
@Override
public boolean handler(TaskInfo taskInfo) {
try {
- DingDingRobotAccount account = accountUtils.getAccount(taskInfo.getSendAccount(), SendAccountConstant.DING_DING_ROBOT_ACCOUNT_KEY, SendAccountConstant.DING_DING_ROBOT_PREFIX, DingDingRobotAccount.class);
+ DingDingRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), DingDingRobotAccount.class);
DingDingRobotParam dingDingRobotParam = assembleParam(taskInfo);
String httpResult = HttpUtil.post(assembleParamUrl(account), JSON.toJSONString(dingDingRobotParam));
DingDingRobotResult dingDingRobotResult = JSON.parseObject(httpResult, DingDingRobotResult.class);
@@ -126,10 +127,10 @@ public class DingDingRobotHandler extends BaseHandler implements Handler {
String sign = "";
try {
String stringToSign = currentTimeMillis + String.valueOf(StrUtil.C_LF) + secret;
- Mac mac = Mac.getInstance(AustinConstant.HMAC_SHA256_ENCRYPTION_ALGO);
- mac.init(new SecretKeySpec(secret.getBytes(AustinConstant.CHARSET_NAME), AustinConstant.HMAC_SHA256_ENCRYPTION_ALGO));
- byte[] signData = mac.doFinal(stringToSign.getBytes(AustinConstant.CHARSET_NAME));
- sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), AustinConstant.CHARSET_NAME);
+ Mac mac = Mac.getInstance(CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO);
+ mac.init(new SecretKeySpec(secret.getBytes(CommonConstant.CHARSET_NAME), CommonConstant.HMAC_SHA256_ENCRYPTION_ALGO));
+ byte[] signData = mac.doFinal(stringToSign.getBytes(CommonConstant.CHARSET_NAME));
+ sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), CommonConstant.CHARSET_NAME);
} catch (Exception e) {
log.error("DingDingHandler#assembleSign fail!:{}", Throwables.getStackTraceAsString(e));
}
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 7b47c2a..4f484d9 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
@@ -65,7 +65,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
@Override
public boolean handler(TaskInfo taskInfo) {
try {
- DingDingWorkNoticeAccount account = accountUtils.getAccount(taskInfo.getSendAccount(), SendAccountConstant.DING_DING_WORK_NOTICE_ACCOUNT_KEY, SendAccountConstant.DING_DING_WORK_NOTICE_PREFIX, DingDingWorkNoticeAccount.class);
+ DingDingWorkNoticeAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), DingDingWorkNoticeAccount.class);
OapiMessageCorpconversationAsyncsendV2Request request = assembleParam(account, taskInfo);
String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + taskInfo.getSendAccount());
OapiMessageCorpconversationAsyncsendV2Response response = new DefaultDingTalkClient(SEND_URL).execute(request, accessToken);
@@ -179,7 +179,7 @@ public class DingDingWorkNoticeHandler extends BaseHandler implements Handler {
public void recall(MessageTemplate messageTemplate) {
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
try {
- DingDingWorkNoticeAccount account = accountUtils.getAccount(messageTemplate.getSendAccount(), SendAccountConstant.DING_DING_WORK_NOTICE_ACCOUNT_KEY, SendAccountConstant.DING_DING_WORK_NOTICE_PREFIX, DingDingWorkNoticeAccount.class);
+ DingDingWorkNoticeAccount account = accountUtils.getAccountById(messageTemplate.getSendAccount(), DingDingWorkNoticeAccount.class);
String accessToken = redisTemplate.opsForValue().get(SendAccountConstant.DING_DING_ACCESS_TOKEN_PREFIX + messageTemplate.getSendAccount());
while (redisTemplate.opsForList().size(DING_DING_RECALL_KEY_PREFIX + messageTemplate.getId()) > 0) {
String taskId = redisTemplate.opsForList().leftPop(DING_DING_RECALL_KEY_PREFIX + messageTemplate.getId());
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EmailHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EmailHandler.java
index db2c7cf..a9512b2 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EmailHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EmailHandler.java
@@ -63,7 +63,7 @@ public class EmailHandler extends BaseHandler implements Handler {
* @return
*/
private MailAccount getAccountConfig(Integer sendAccount) {
- MailAccount account = accountUtils.getAccount(sendAccount, SendAccountConstant.EMAIL_ACCOUNT_KEY, SendAccountConstant.EMAIL_ACCOUNT_PREFIX, MailAccount.class);
+ MailAccount account = accountUtils.getAccountById(sendAccount, MailAccount.class);
try {
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatHandler.java
index 15d34e6..4b6a6ae 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatHandler.java
@@ -1,9 +1,11 @@
package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
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.constant.SendAccountConstant;
import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.model.EnterpriseWeChatContentModel;
@@ -38,11 +40,6 @@ import java.util.Map;
@Slf4j
public class EnterpriseWeChatHandler extends BaseHandler implements Handler {
- /**
- * 切割userId 的分隔符
- */
- private static final String DELIMITER = "|";
-
@Autowired
private AccountUtils accountUtils;
@@ -53,7 +50,7 @@ public class EnterpriseWeChatHandler extends BaseHandler implements Handler {
@Override
public boolean handler(TaskInfo taskInfo) {
try {
- WxCpDefaultConfigImpl accountConfig = accountUtils.getAccount(taskInfo.getSendAccount(), SendAccountConstant.ENTERPRISE_WECHAT_ACCOUNT_KEY, SendAccountConstant.ENTERPRISE_WECHAT_PREFIX, WxCpDefaultConfigImpl.class);
+ WxCpDefaultConfigImpl accountConfig = accountUtils.getAccountById(taskInfo.getSendAccount(), WxCpDefaultConfigImpl.class);
WxCpMessageServiceImpl messageService = new WxCpMessageServiceImpl(initService(accountConfig));
WxCpMessageSendResult result = messageService.send(buildWxCpMessage(taskInfo, accountConfig.getAgentId()));
if (Integer.valueOf(WxMpErrorMsgEnum.CODE_0.getCode()).equals(result.getErrCode())) {
@@ -93,7 +90,7 @@ public class EnterpriseWeChatHandler extends BaseHandler implements Handler {
if (AustinConstant.SEND_ALL.equals(CollUtil.getFirst(taskInfo.getReceiver()))) {
userId = CollUtil.getFirst(taskInfo.getReceiver());
} else {
- userId = StringUtils.join(taskInfo.getReceiver(), DELIMITER);
+ userId = StringUtils.join(taskInfo.getReceiver(), CommonConstant.RADICAL);
}
EnterpriseWeChatContentModel contentModel = (EnterpriseWeChatContentModel) taskInfo.getContentModel();
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatRobotHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatRobotHandler.java
index f2ddae4..e66c3eb 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatRobotHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EnterpriseWeChatRobotHandler.java
@@ -51,7 +51,7 @@ public class EnterpriseWeChatRobotHandler extends BaseHandler implements Handler
@Override
public boolean handler(TaskInfo taskInfo) {
try {
- EnterpriseWeChatRobotAccount account = accountUtils.getAccount(taskInfo.getSendAccount(), SendAccountConstant.ENTERPRISE_WECHAT_ROBOT_ACCOUNT_KEY, SendAccountConstant.ENTERPRISE_WECHAT_ROBOT_PREFIX, EnterpriseWeChatRobotAccount.class);
+ EnterpriseWeChatRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), EnterpriseWeChatRobotAccount.class);
EnterpriseWeChatRobotParam enterpriseWeChatRobotParam = assembleParam(taskInfo);
String result = HttpRequest.post(account.getWebhook()).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.body(JSON.toJSONString(enterpriseWeChatRobotParam))
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/FeiShuRobotHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/FeiShuRobotHandler.java
index dc80ae4..a18ff07 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/FeiShuRobotHandler.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/FeiShuRobotHandler.java
@@ -50,7 +50,7 @@ public class FeiShuRobotHandler extends BaseHandler implements Handler {
@Override
public boolean handler(TaskInfo taskInfo) {
try {
- FeiShuRobotAccount account = accountUtils.getAccount(taskInfo.getSendAccount(), SendAccountConstant.FEI_SHU_ROBOT_ACCOUNT_KEY, SendAccountConstant.FEI_SHU_ROBOT_PREFIX, FeiShuRobotAccount.class);
+ FeiShuRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), FeiShuRobotAccount.class);
FeiShuRobotParam feiShuRobotParam = assembleParam(taskInfo);
String result = HttpRequest.post(account.getWebhook())
.header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
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 fed2a1d..e131431 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.getAccount(taskInfo.getSendAccount(), SendAccountConstant.GE_TUI_ACCOUNT_KEY, SendAccountConstant.GE_TUI_ACCOUNT_PREFIX, 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();
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 4db4632..8b2cb55 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
@@ -4,10 +4,9 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
-import com.ctrip.framework.apollo.Config;
-import com.ctrip.framework.apollo.spring.annotation.ApolloConfig;
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;
import com.java3y.austin.common.enums.ChannelType;
@@ -15,7 +14,7 @@ import com.java3y.austin.handler.domain.sms.MessageTypeSmsConfig;
import com.java3y.austin.handler.domain.sms.SmsParam;
import com.java3y.austin.handler.handler.BaseHandler;
import com.java3y.austin.handler.handler.Handler;
-import com.java3y.austin.handler.script.SmsScriptHolder;
+import com.java3y.austin.handler.script.SmsScript;
import com.java3y.austin.support.dao.SmsRecordDao;
import com.java3y.austin.support.domain.MessageTemplate;
import com.java3y.austin.support.domain.SmsRecord;
@@ -25,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
+import java.util.Map;
import java.util.Random;
/**
@@ -44,11 +44,13 @@ public class SmsHandler extends BaseHandler implements Handler {
private SmsRecordDao smsRecordDao;
@Autowired
- private SmsScriptHolder smsScriptHolder;
+ private ConfigService config;
@Autowired
- private ConfigService config;
+ private Map smsScripts;
+ private static final String FLOW_KEY = "msgTypeSmsConfig";
+ private static final String FLOW_KEY_PREFIX = "message_type_";
@Override
public boolean handler(TaskInfo taskInfo) {
@@ -56,9 +58,7 @@ public class SmsHandler extends BaseHandler implements Handler {
.phones(taskInfo.getReceiver())
.content(getSmsContent(taskInfo))
.messageTemplateId(taskInfo.getMessageTemplateId())
- .sendAccountId(taskInfo.getSendAccount())
.build();
-
try {
/**
* 1、动态配置做流量负载
@@ -66,15 +66,15 @@ public class SmsHandler extends BaseHandler implements Handler {
*/
MessageTypeSmsConfig[] messageTypeSmsConfigs = loadBalance(getMessageTypeSmsConfig(taskInfo.getMsgType()));
for (MessageTypeSmsConfig messageTypeSmsConfig : messageTypeSmsConfigs) {
- List recordList = smsScriptHolder.route(messageTypeSmsConfig.getScriptName()).send(smsParam);
+ smsParam.setScriptName(messageTypeSmsConfig.getScriptName());
+ List recordList = smsScripts.get(messageTypeSmsConfig.getScriptName()).send(smsParam);
if (CollUtil.isNotEmpty(recordList)) {
smsRecordDao.saveAll(recordList);
return true;
}
}
} catch (Exception e) {
- log.error("SmsHandler#handler fail:{},params:{}",
- Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
+ log.error("SmsHandler#handler fail:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam));
}
return false;
}
@@ -129,14 +129,10 @@ public class SmsHandler extends BaseHandler implements Handler {
* @return
*/
private List getMessageTypeSmsConfig(Integer msgType) {
-
- String apolloKey = "msgTypeSmsConfig";
- String messagePrefix = "message_type_";
-
- String property = config.getProperty(apolloKey, AustinConstant.APOLLO_DEFAULT_VALUE_JSON_ARRAY);
+ String property = config.getProperty(FLOW_KEY, CommonConstant.EMPTY_VALUE_JSON_ARRAY);
JSONArray jsonArray = JSON.parseArray(property);
for (int i = 0; i < jsonArray.size(); i++) {
- JSONArray array = jsonArray.getJSONObject(i).getJSONArray(messagePrefix + msgType);
+ JSONArray array = jsonArray.getJSONObject(i).getJSONArray(FLOW_KEY_PREFIX + msgType);
if (CollUtil.isNotEmpty(array)) {
List result = JSON.parseArray(JSON.toJSONString(array), MessageTypeSmsConfig.class);
return result;
@@ -154,7 +150,7 @@ public class SmsHandler extends BaseHandler implements Handler {
private String getSmsContent(TaskInfo taskInfo) {
SmsContentModel smsContentModel = (SmsContentModel) taskInfo.getContentModel();
if (StrUtil.isNotBlank(smsContentModel.getUrl())) {
- return smsContentModel.getContent() + " " + smsContentModel.getUrl();
+ return smsContentModel.getContent() + StrUtil.SPACE + smsContentModel.getUrl();
} else {
return smsContentModel.getContent();
}
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
index 8420a07..50092f1 100644
--- 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
@@ -32,7 +32,7 @@ public class DingDingWorkReceipt {
public void pull() {
// try {
// for (int index = SendAccountConstant.START; true; index = index + SendAccountConstant.STEP) {
-// DingDingWorkNoticeAccount account = accountUtils.getAccount(index, SendAccountConstant.DING_DING_WORK_NOTICE_ACCOUNT_KEY, SendAccountConstant.DING_DING_WORK_NOTICE_PREFIX, DingDingWorkNoticeAccount.class);
+// DingDingWorkNoticeAccount account = accountUtils.getAccountById(index, SendAccountConstant.DING_DING_WORK_NOTICE_ACCOUNT_KEY, SendAccountConstant.DING_DING_WORK_NOTICE_PREFIX, DingDingWorkNoticeAccount.class);
// if (account == null) {
// break;
// }
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
index bb7dd2c..94ef07f 100644
--- 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
@@ -5,9 +5,9 @@ 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.AustinConstant;
-import com.java3y.austin.common.dto.account.TencentSmsAccount;
-import com.java3y.austin.common.dto.account.YunPianSmsAccount;
+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;
@@ -52,7 +52,7 @@ public class SmsPullReceipt {
* 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(AustinConstant.FALSE, ChannelType.SMS.getCode());
+ 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)) {
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 8df4d12..32cfec0 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
@@ -6,13 +6,10 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
-import com.java3y.austin.common.constant.SendAccountConstant;
-import com.java3y.austin.common.dto.account.TencentSmsAccount;
+import com.java3y.austin.common.dto.account.sms.TencentSmsAccount;
import com.java3y.austin.common.enums.SmsStatus;
import com.java3y.austin.handler.domain.sms.SmsParam;
-import com.java3y.austin.handler.script.BaseSmsScript;
import com.java3y.austin.handler.script.SmsScript;
-import com.java3y.austin.handler.script.SmsScriptHandler;
import com.java3y.austin.support.domain.SmsRecord;
import com.java3y.austin.support.utils.AccountUtils;
import com.tencentcloudapi.common.Credential;
@@ -24,6 +21,7 @@ import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
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;
@@ -38,8 +36,8 @@ import java.util.List;
*/
@Slf4j
-@SmsScriptHandler("TencentSmsScript")
-public class TencentSmsScript extends BaseSmsScript implements SmsScript {
+@Component("TencentSmsScript")
+public class TencentSmsScript implements SmsScript {
private static final Integer PHONE_NUM = 11;
@@ -49,7 +47,7 @@ public class TencentSmsScript extends BaseSmsScript implements SmsScript {
@Override
public List send(SmsParam smsParam) {
try {
- TencentSmsAccount tencentSmsAccount = accountUtils.getAccount(smsParam.getSendAccountId(), SendAccountConstant.SMS_ACCOUNT_KEY, SendAccountConstant.SMS_PREFIX, TencentSmsAccount.class);
+ TencentSmsAccount tencentSmsAccount = accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), TencentSmsAccount.class);
SmsClient client = init(tencentSmsAccount);
SendSmsRequest request = assembleReq(smsParam, tencentSmsAccount);
SendSmsResponse response = client.SendSms(request);
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 19f6f9e..021e789 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
@@ -8,19 +8,18 @@ import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
-import com.java3y.austin.common.constant.SendAccountConstant;
-import com.java3y.austin.common.dto.account.YunPianSmsAccount;
+import com.java3y.austin.common.constant.CommonConstant;
+import com.java3y.austin.common.dto.account.sms.YunPianSmsAccount;
import com.java3y.austin.common.enums.SmsStatus;
import com.java3y.austin.handler.domain.sms.SmsParam;
import com.java3y.austin.handler.domain.sms.YunPianSendResult;
-import com.java3y.austin.handler.script.BaseSmsScript;
import com.java3y.austin.handler.script.SmsScript;
-import com.java3y.austin.handler.script.SmsScriptHandler;
import com.java3y.austin.support.domain.SmsRecord;
import com.java3y.austin.support.utils.AccountUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
import java.util.*;
@@ -30,8 +29,8 @@ import java.util.*;
* 发送短信接入文档:https://www.yunpian.com/official/document/sms/zh_CN/domestic_list
*/
@Slf4j
-@SmsScriptHandler("YunPianSmsScript")
-public class YunPianSmsScript extends BaseSmsScript implements SmsScript {
+@Component("YunPianSmsScript")
+public class YunPianSmsScript implements SmsScript {
@Autowired
private AccountUtils accountUtils;
@@ -39,7 +38,7 @@ public class YunPianSmsScript extends BaseSmsScript implements SmsScript {
public List send(SmsParam smsParam) {
try {
- YunPianSmsAccount account = accountUtils.getAccount(smsParam.getSendAccountId(), SendAccountConstant.SMS_ACCOUNT_KEY, SendAccountConstant.SMS_PREFIX, YunPianSmsAccount.class);
+ YunPianSmsAccount account = accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), YunPianSmsAccount.class);
Map params = assembleParam(smsParam, account);
String result = HttpRequest.post(account.getUrl())
@@ -91,7 +90,7 @@ public class YunPianSmsScript extends BaseSmsScript implements SmsScript {
.msgContent(smsParam.getContent())
.seriesId(datum.getSid())
.chargingNum(Math.toIntExact(datum.getCount()))
- .status("0".equals(datum.getCode()) ? SmsStatus.SEND_SUCCESS.getCode() : SmsStatus.SEND_FAIL.getCode())
+ .status(CommonConstant.ZERO.equals(datum.getCode()) ? SmsStatus.SEND_SUCCESS.getCode() : SmsStatus.SEND_FAIL.getCode())
.reportContent(datum.getMsg())
.created(Math.toIntExact(DateUtil.currentSeconds()))
.updated(Math.toIntExact(DateUtil.currentSeconds()))
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/MiniProgramAccountServiceImpl.java b/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/MiniProgramAccountServiceImpl.java
index 6c400bf..a7f83d5 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/MiniProgramAccountServiceImpl.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/MiniProgramAccountServiceImpl.java
@@ -33,9 +33,7 @@ public class MiniProgramAccountServiceImpl implements MiniProgramAccountService
@Override
public void send(WeChatMiniProgramParam miniProgramParam) throws Exception {
- WeChatMiniProgramAccount miniProgramAccount = accountUtils.getAccount(miniProgramParam.getSendAccount(),
- SendAccountConstant.WECHAT_MINI_PROGRAM_ACCOUNT_KEY,
- SendAccountConstant.WECHAT_MINI_PROGRAM_PREFIX,
+ WeChatMiniProgramAccount miniProgramAccount = accountUtils.getAccountById(miniProgramParam.getSendAccount(),
WeChatMiniProgramAccount.class);
WxMaSubscribeService wxMaSubscribeService = initService(miniProgramAccount);
diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/OfficialAccountServiceImpl.java b/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/OfficialAccountServiceImpl.java
index 7766713..a4359d2 100644
--- a/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/OfficialAccountServiceImpl.java
+++ b/austin-handler/src/main/java/com/java3y/austin/handler/wechat/impl/OfficialAccountServiceImpl.java
@@ -31,7 +31,7 @@ public class OfficialAccountServiceImpl implements OfficialAccountService {
@Override
public List send(WeChatOfficialParam officialParam) throws Exception {
- WeChatOfficialAccount officialAccount = accountUtils.getAccount(officialParam.getSendAccount(), SendAccountConstant.WECHAT_OFFICIAL_ACCOUNT_KEY, SendAccountConstant.WECHAT_OFFICIAL__PREFIX, WeChatOfficialAccount.class);
+ WeChatOfficialAccount officialAccount = accountUtils.getAccountById(officialParam.getSendAccount(),WeChatOfficialAccount.class);
WxMpService wxMpService = initService(officialAccount);
List messages = assembleReq(officialParam, officialAccount);
List messageIds = new ArrayList<>(messages.size());
diff --git a/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AssembleAction.java b/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AssembleAction.java
index 9e0692c..c70d95c 100644
--- a/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AssembleAction.java
+++ b/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/AssembleAction.java
@@ -8,6 +8,7 @@ import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
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.ContentModel;
import com.java3y.austin.common.enums.ChannelType;
@@ -38,6 +39,8 @@ import java.util.*;
@Service
public class AssembleAction implements BusinessProcess {
+ private static final String LINK_NAME = "url";
+
@Autowired
private MessageTemplateDao messageTemplateDao;
@@ -48,7 +51,7 @@ public class AssembleAction implements BusinessProcess {
try {
Optional messageTemplate = messageTemplateDao.findById(messageTemplateId);
- if (!messageTemplate.isPresent() || messageTemplate.get().getIsDeleted().equals(AustinConstant.TRUE)) {
+ if (!messageTemplate.isPresent() || messageTemplate.get().getIsDeleted().equals(CommonConstant.TRUE)) {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.TEMPLATE_NOT_FOUND));
return;
}
@@ -126,10 +129,10 @@ public class AssembleAction implements BusinessProcess {
}
// 如果 url 字段存在,则在url拼接对应的埋点参数
- String url = (String) ReflectUtil.getFieldValue(contentModel, "url");
+ String url = (String) ReflectUtil.getFieldValue(contentModel, LINK_NAME);
if (StrUtil.isNotBlank(url)) {
String resultUrl = TaskInfoUtils.generateUrl(url, messageTemplate.getId(), messageTemplate.getTemplateType());
- ReflectUtil.setFieldValue(contentModel, "url", resultUrl);
+ ReflectUtil.setFieldValue(contentModel, LINK_NAME, resultUrl);
}
return contentModel;
}
diff --git a/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/PreParamCheckAction.java b/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/PreParamCheckAction.java
index 4e48e07..6255859 100644
--- a/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/PreParamCheckAction.java
+++ b/austin-service-api-impl/src/main/java/com/java3y/austin/service/api/impl/action/PreParamCheckAction.java
@@ -2,6 +2,7 @@ package com.java3y.austin.service.api.impl.action;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
+import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.enums.RespStatusEnum;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.service.api.domain.MessageParam;
@@ -24,11 +25,6 @@ import java.util.stream.Collectors;
@Service
public class PreParamCheckAction implements BusinessProcess {
- /**
- * 最大的人数
- */
- private static final Integer BATCH_RECEIVER_SIZE = 100;
-
@Override
public void process(ProcessContext context) {
SendTaskModel sendTaskModel = context.getProcessModel();
@@ -50,13 +46,14 @@ public class PreParamCheckAction implements BusinessProcess {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.CLIENT_BAD_PARAMETERS));
return;
}
- sendTaskModel.setMessageParamList(resultMessageParamList);
// 3.过滤receiver大于100的请求
- if (messageParamList.stream().anyMatch(messageParam -> messageParam.getReceiver().split(StrUtil.COMMA).length > BATCH_RECEIVER_SIZE)) {
+ if (resultMessageParamList.stream().anyMatch(messageParam -> messageParam.getReceiver().split(StrUtil.COMMA).length > AustinConstant.BATCH_RECEIVER_SIZE)) {
context.setNeedBreak(true).setResponse(BasicResultVO.fail(RespStatusEnum.TOO_MANY_RECEIVER));
return;
}
+ sendTaskModel.setMessageParamList(resultMessageParamList);
+
}
}
diff --git a/austin-support/src/main/java/com/java3y/austin/support/dao/ChannelAccountDao.java b/austin-support/src/main/java/com/java3y/austin/support/dao/ChannelAccountDao.java
index d149aea..42b3bb6 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/dao/ChannelAccountDao.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/dao/ChannelAccountDao.java
@@ -35,4 +35,5 @@ public interface ChannelAccountDao extends JpaRepository {
* @return
*/
Long countByIsDeletedEquals(Integer deleted);
+
}
diff --git a/austin-support/src/main/java/com/java3y/austin/support/dao/MessageTemplateDao.java b/austin-support/src/main/java/com/java3y/austin/support/dao/MessageTemplateDao.java
index a856f68..cf1bb62 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/dao/MessageTemplateDao.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/dao/MessageTemplateDao.java
@@ -20,7 +20,7 @@ public interface MessageTemplateDao extends JpaRepository
* @param pageable 分页对象
* @return
*/
- List findAllByIsDeletedEquals(Integer deleted, Pageable pageable);
+ List findAllByIsDeletedEqualsOrderByUpdatedDesc(Integer deleted, Pageable pageable);
/**
diff --git a/austin-support/src/main/java/com/java3y/austin/support/pending/AbstractLazyPending.java b/austin-support/src/main/java/com/java3y/austin/support/pending/AbstractLazyPending.java
index 6e5f313..e3d6075 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/pending/AbstractLazyPending.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/pending/AbstractLazyPending.java
@@ -40,7 +40,7 @@ public abstract class AbstractLazyPending {
/**
* 是否终止线程
*/
- private Boolean stop = false;
+ private volatile Boolean stop = false;
/**
* 单线程消费 阻塞队列的数据
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 37ce656..afd5d75 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
@@ -5,6 +5,9 @@ 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;
import com.java3y.austin.support.dao.ChannelAccountDao;
import com.java3y.austin.support.domain.ChannelAccount;
import com.java3y.austin.support.service.ConfigService;
@@ -12,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import java.util.List;
import java.util.Optional;
/**
@@ -31,6 +35,7 @@ public class AccountUtils {
/**
+ * local.properties配置格式
* (key:smsAccount)短信参数示例:[{"sms_10":{"url":"sms.tencentcloudapi.com","region":"ap-guangzhou","secretId":"AKIDhDxxxxxxxx1WljQq","secretKey":"B4hwww39yxxxrrrrgxyi","smsSdkAppId":"1423123125","templateId":"1182097","signName":"Java3y公众号","supplierId":10,"supplierName":"腾讯云"}},{"sms_20":{"url":"https://sms.yunpian.com/v2/sms/tpl_batch_send.json","apikey":"caffff8234234231b5cd7","tpl_id":"523333332","supplierId":20,"supplierName":"云片"}}]
* (key:emailAccount)邮件参数示例:[{"email_10":{"host":"smtp.qq.com","port":465,"user":"23423423@qq.com","pass":"23423432432423423","from":"234@qq.com","starttlsEnable":true,"auth":true,"sslEnable":true}},{"email_20":{"host":"smtp.163.com","port":465,"user":"22222@163.com","pass":"23432423","from":"234324324234@163.com","starttlsEnable":false,"auth":true,"sslEnable":true}}]
* (key:enterpriseWechatAccount)企业微信参数示例:[{"enterprise_wechat_10":{"corpId":"wwf87603333e00069c","corpSecret":"-IFWxS2222QxzPIorNV11144D915DM","agentId":10044442,"token":"rXROB3333Kf6i","aesKey":"MKZtoFxHIM44444M7ieag3r9ZPUsl"}}]
@@ -38,12 +43,10 @@ public class AccountUtils {
* (key:dingDingWorkNoticeAccount) 钉钉工作消息参数示例:[{"ding_ding_work_notice_10":{"appKey":"dingh6yyyyyyycrlbx","appSecret":"tQpvmkR863333yyyyyHP3QHyyyymy9Ao1yoL1oQX5NsdfsWHvWKbTu","agentId":"1523123123183622"}}]
* (key:officialAccount) 微信服务号模板消息参数示例:[{"official_10":{"appId":"wxecb4693d2eef1ea7","secret":"624asdfsa1640d769ba20120821","templateId":"JHUk6eE9T5Ts7asdfsadfiKNDQsk-Q","url":"http://weixin.qq.com/download","miniProgramId":"xiaochengxuappid12345","path":"index?foo=bar"}}]
* (key:miniProgramAccount) 微信小程序订阅消息参数示例:[{"mini_program_10":{"appId":"wxecb4693d2eef1ea7","appSecret":"6240870f4d91701640d769ba20120821","templateId":"JHUk6eE9T5TasdfCrQsk-Q","grantType":"client_credential","miniProgramState":"trial","page":"index?foo=bar"}}]
+ * (key:alipayMiniProgramAccount) 支付宝小程序订阅消息参数实例:[{"alipay_mini_program_10":{"privateKey":"MIIEvQIBADANB......","alipayPublicKey":"MIIBIjANBg...","appId":"2014********7148","userTemplateId":"MDI4YzIxMDE2M2I5YTQzYjUxNWE4MjA4NmU1MTIyYmM=","page":"page/component/index"}}]
*/
- public T getAccount(Integer sendAccountId, String apolloKey, String prefix, Class clazz) {
+ public T getAccountById(Integer sendAccountId, Class clazz) {
- /**
- * 优先读数据库的,数据库没有才读配置
- */
try {
Optional optionalChannelAccount = channelAccountDao.findById(Long.valueOf(sendAccountId));
if (optionalChannelAccount.isPresent()) {
@@ -51,19 +54,39 @@ public class AccountUtils {
return JSON.parseObject(channelAccount.getAccountConfig(), clazz);
}
} catch (Exception e) {
- log.warn("AccountUtils#getAccount not found:{}", Throwables.getStackTraceAsString(e));
+ log.error("AccountUtils#getAccount fail!", Throwables.getStackTraceAsString(e));
}
+ log.error("AccountUtils#getAccount not found!:{}", sendAccountId);
+ return null;
+ }
- String accountValues = config.getProperty(apolloKey, AustinConstant.APOLLO_DEFAULT_VALUE_JSON_ARRAY);
- JSONArray jsonArray = JSON.parseArray(accountValues);
- for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject jsonObject = jsonArray.getJSONObject(i);
- T object = jsonObject.getObject(prefix + sendAccountId, clazz);
- if (object != null) {
- return object;
+ /**
+ * 通过脚本名 匹配到对应的短信账号
+ * @param scriptName 脚本名
+ * @param clazz
+ * @param
+ * @return
+ */
+ public T getSmsAccountByScriptName(String scriptName, Class clazz) {
+ try {
+ List channelAccountList = channelAccountDao.findAllByIsDeletedEqualsAndSendChannelEquals(CommonConstant.FALSE, ChannelType.SMS.getCode());
+ for (ChannelAccount channelAccount : channelAccountList) {
+ try {
+ SmsAccount smsAccount = JSON.parseObject(channelAccount.getAccountConfig(), SmsAccount.class);
+ if (smsAccount.getScriptName().equals(scriptName)) {
+ return JSON.parseObject(channelAccount.getAccountConfig(), clazz);
+ }
+ } catch (Exception e) {
+ log.error("AccountUtils#getSmsAccount parse fail! e:{},account:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(channelAccount));
+ }
}
+ } catch (Exception e) {
+ log.error("AccountUtils#getSmsAccount fail! e:{}", Throwables.getStackTraceAsString(e));
}
+
+ log.error("AccountUtils#getSmsAccount not found!:{}", scriptName);
return null;
}
+
}
diff --git a/austin-support/src/main/java/com/java3y/austin/support/utils/NacosUtils.java b/austin-support/src/main/java/com/java3y/austin/support/utils/NacosUtils.java
index dc6a54a..10f7707 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/utils/NacosUtils.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/utils/NacosUtils.java
@@ -24,6 +24,10 @@ import java.util.Properties;
public class NacosUtils {
@Value("${austin.nacos.server}")
private String nacosServer;
+ @Value("${austin.nacos.username}")
+ private String nacosUsername;
+ @Value("${austin.nacos.password}")
+ private String nacosPassword;
@Value("${austin.nacos.group}")
private String nacosGroup;
@Value("${austin.nacos.dataId}")
@@ -51,6 +55,8 @@ public class NacosUtils {
try {
request.put(PropertyKeyConst.SERVER_ADDR, nacosServer);
request.put(PropertyKeyConst.NAMESPACE, nacosNamespace);
+ request.put(PropertyKeyConst.USERNAME,nacosUsername);
+ request.put(PropertyKeyConst.PASSWORD,nacosPassword);
context = NacosFactory.createConfigService(request)
.getConfig(nacosDataId, nacosGroup, 5000);
} catch (NacosException e) {
diff --git a/austin-support/src/main/java/com/java3y/austin/support/utils/RedisUtils.java b/austin-support/src/main/java/com/java3y/austin/support/utils/RedisUtils.java
index 38d23b4..f8977de 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/utils/RedisUtils.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/utils/RedisUtils.java
@@ -3,6 +3,7 @@ package com.java3y.austin.support.utils;
import cn.hutool.core.collection.CollUtil;
import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.AustinConstant;
+import com.java3y.austin.common.constant.CommonConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback;
@@ -170,7 +171,7 @@ public class RedisUtils {
try {
Long execute = redisTemplate.execute(redisScript, keys, args);
- return AustinConstant.TRUE.equals(execute.intValue());
+ return CommonConstant.TRUE.equals(execute.intValue());
} catch (Exception e) {
log.error("redis execLimitLua fail! e:{}", Throwables.getStackTraceAsString(e));
diff --git a/austin-support/src/main/java/com/java3y/austin/support/utils/TaskInfoUtils.java b/austin-support/src/main/java/com/java3y/austin/support/utils/TaskInfoUtils.java
index d3d9272..87936f9 100644
--- a/austin-support/src/main/java/com/java3y/austin/support/utils/TaskInfoUtils.java
+++ b/austin-support/src/main/java/com/java3y/austin/support/utils/TaskInfoUtils.java
@@ -2,6 +2,8 @@ package com.java3y.austin.support.utils;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import com.java3y.austin.common.constant.CommonConstant;
import java.util.Date;
@@ -13,7 +15,7 @@ import java.util.Date;
public class TaskInfoUtils {
private static final int TYPE_FLAG = 1000000;
- private static final char PARAM = '?';
+ private static final String CODE = "track_code_bid";
/**
* 生成BusinessId
@@ -45,10 +47,10 @@ public class TaskInfoUtils {
public static String generateUrl(String url, Long templateId, Integer templateType) {
url = url.trim();
Long businessId = generateBusinessId(templateId, templateType);
- if (url.indexOf(PARAM) == -1) {
- return url + "?track_code_bid=" + businessId;
+ if (url.indexOf(CommonConstant.QM) == -1) {
+ return url + CommonConstant.QM_STRING + CODE + CommonConstant.EQUAL_STRING + businessId;
} else {
- return url + "&track_code_bid=" + businessId;
+ return url + CommonConstant.AND_STRING + CODE + CommonConstant.EQUAL_STRING + businessId;
}
}
diff --git a/austin-web/src/main/java/com/java3y/austin/web/config/SwaggerConfiguration.java b/austin-web/src/main/java/com/java3y/austin/web/config/SwaggerConfiguration.java
index 10fa89f..fb0a879 100644
--- a/austin-web/src/main/java/com/java3y/austin/web/config/SwaggerConfiguration.java
+++ b/austin-web/src/main/java/com/java3y/austin/web/config/SwaggerConfiguration.java
@@ -23,6 +23,8 @@ public class SwaggerConfiguration {
/**
* 对C端用户的接口文档
*
+ * 地址:http://localhost:8080/swagger-ui/index.html
+ *
* @return
*/
@Bean
diff --git a/austin-web/src/main/java/com/java3y/austin/web/controller/ChannelAccountController.java b/austin-web/src/main/java/com/java3y/austin/web/controller/ChannelAccountController.java
index 308beb6..f1f5e0e 100644
--- a/austin-web/src/main/java/com/java3y/austin/web/controller/ChannelAccountController.java
+++ b/austin-web/src/main/java/com/java3y/austin/web/controller/ChannelAccountController.java
@@ -2,6 +2,7 @@ package com.java3y.austin.web.controller;
import cn.hutool.core.util.StrUtil;
+import com.java3y.austin.common.constant.AustinConstant;
import com.java3y.austin.common.vo.BasicResultVO;
import com.java3y.austin.support.domain.ChannelAccount;
import com.java3y.austin.web.service.ChannelAccountService;
@@ -11,8 +12,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
import java.util.stream.Collectors;
/**
@@ -24,7 +24,7 @@ import java.util.stream.Collectors;
@RestController
@RequestMapping("/account")
@Api("渠道账号管理接口")
-@CrossOrigin(origins = "http://localhost:3000", allowCredentials = "true", allowedHeaders = "*")
+@CrossOrigin(origins = AustinConstant.ORIGIN_VALUE, allowCredentials = "true", allowedHeaders = "*")
public class ChannelAccountController {
@Autowired
@@ -47,7 +47,16 @@ public class ChannelAccountController {
@GetMapping("/queryByChannelType")
@ApiOperation("/根据渠道标识查询相关的记录")
public BasicResultVO query(Integer channelType) {
- return BasicResultVO.success(channelAccountService.queryByChannelType(channelType));
+ List channelAccounts = channelAccountService.queryByChannelType(channelType);
+
+ List