diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/MessageTypeSmsConfig.java b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/MessageTypeSmsConfig.java index d831854..7fcfe8e 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/MessageTypeSmsConfig.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/MessageTypeSmsConfig.java @@ -22,6 +22,11 @@ public class MessageTypeSmsConfig { */ private Integer weights; + /** + * 短信模板若指定了账号,则该字段有值 + */ + private Integer sendAccount; + /** * script名称 */ 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 827b26d..728aa56 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 @@ -24,12 +24,20 @@ public class SmsParam { */ private Set phones; + + /** + * 发送账号的id(如果短信模板指定了发送账号,则该字段有值) + *

+ * 如果有账号id,那就用账号id 检索 + * 如果没有账号id,那就根据 com.java3y.austin.handler.domain.sms.SmsParam#scriptName 检索 + */ + private Integer sendAccountId; + /** * 渠道账号的脚本名标识 */ private String scriptName; - /** * 发送文案 */ 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 332d1e2..e279178 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 @@ -24,6 +24,7 @@ import org.springframework.stereotype.Component; import java.io.File; import java.util.Objects; + /** * 邮件发送处理 * 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 3e6b8e1..dfefcb0 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 @@ -154,7 +154,7 @@ public class PushHandler extends BaseHandler implements Handler { SendPushParam param = SendPushParam.builder() .requestId(String.valueOf(IdUtil.getSnowflake().nextId())) .pushMessage(SendPushParam.PushMessageVO.builder().notification(SendPushParam.PushMessageVO.NotificationVO.builder() - .title(pushContentModel.getTitle()).body(pushContentModel.getContent()).clickType("startapp").build()) + .title(pushContentModel.getTitle()).body(pushContentModel.getContent()).clickType("startapp").build()) .build()) .build(); if (CollUtil.isNotEmpty(cid)) { 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 c4e1e7f..9423304 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 @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONArray; import com.google.common.base.Throwables; import com.java3y.austin.common.constant.CommonConstant; import com.java3y.austin.common.domain.TaskInfo; +import com.java3y.austin.common.dto.account.sms.SmsAccount; import com.java3y.austin.common.dto.model.SmsContentModel; import com.java3y.austin.common.enums.ChannelType; import com.java3y.austin.handler.domain.sms.MessageTypeSmsConfig; @@ -18,13 +19,12 @@ import com.java3y.austin.support.dao.SmsRecordDao; import com.java3y.austin.support.domain.MessageTemplate; import com.java3y.austin.support.domain.SmsRecord; import com.java3y.austin.support.service.ConfigService; +import com.java3y.austin.support.utils.AccountUtils; 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; -import java.util.Random; +import java.util.*; /** * 短信发送处理 @@ -48,6 +48,14 @@ public class SmsHandler extends BaseHandler implements Handler { @Autowired private Map smsScripts; + @Autowired + private AccountUtils accountUtils; + + /** + * 流量自动分配策略 + */ + private static final Integer AUTO_FLOW_RULE = 0; + private static final String FLOW_KEY = "msgTypeSmsConfig"; private static final String FLOW_KEY_PREFIX = "message_type_"; @@ -63,9 +71,10 @@ public class SmsHandler extends BaseHandler implements Handler { * 1、动态配置做流量负载 * 2、发送短信 */ - MessageTypeSmsConfig[] messageTypeSmsConfigs = loadBalance(getMessageTypeSmsConfig(taskInfo.getMsgType())); + MessageTypeSmsConfig[] messageTypeSmsConfigs = loadBalance(getMessageTypeSmsConfig(taskInfo)); for (MessageTypeSmsConfig messageTypeSmsConfig : messageTypeSmsConfigs) { smsParam.setScriptName(messageTypeSmsConfig.getScriptName()); + smsParam.setSendAccountId(messageTypeSmsConfig.getSendAccount()); List recordList = smsScripts.get(messageTypeSmsConfig.getScriptName()).send(smsParam); if (CollUtil.isNotEmpty(recordList)) { smsRecordDao.saveAll(recordList); @@ -115,7 +124,9 @@ public class SmsHandler extends BaseHandler implements Handler { } /** - * 每种类型都会有其下发渠道账号的配置(流量占比也会配置里面) + * 如模板指定具体的明确账号,则优先发其账号,否则走到流量配置 + *

+ * 流量配置每种类型都会有其下发渠道账号的配置(流量占比也会配置里面) *

* 样例: * key:msgTypeSmsConfig @@ -124,20 +135,31 @@ public class SmsHandler extends BaseHandler implements Handler { * 营销类短信只有一个发送渠道 YunPianSmsScript * 验证码短信只有一个发送渠道 TencentSmsScript * - * @param msgType + * @param taskInfo * @return */ - private List getMessageTypeSmsConfig(Integer msgType) { + private List getMessageTypeSmsConfig(TaskInfo taskInfo) { + + /** + * 如果模板指定了账号,则优先使用具体的账号进行发送 + */ + if (!taskInfo.getSendAccount().equals(AUTO_FLOW_RULE)) { + SmsAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), SmsAccount.class); + return Arrays.asList(MessageTypeSmsConfig.builder().sendAccount(taskInfo.getSendAccount()).scriptName(account.getScriptName()).weights(100).build()); + } + + /** + * 读取流量配置 + */ 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(FLOW_KEY_PREFIX + msgType); + JSONArray array = jsonArray.getJSONObject(i).getJSONArray(FLOW_KEY_PREFIX + taskInfo.getMsgType()); if (CollUtil.isNotEmpty(array)) { - List result = JSON.parseArray(JSON.toJSONString(array), MessageTypeSmsConfig.class); - return result; + return JSON.parseArray(JSON.toJSONString(array), MessageTypeSmsConfig.class); } } - return null; + return new ArrayList<>(); } /** 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 a10fcc3..dea82aa 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 @@ -46,7 +46,8 @@ public class TencentSmsScript implements SmsScript { @Override public List send(SmsParam smsParam) { try { - TencentSmsAccount tencentSmsAccount = accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), TencentSmsAccount.class); + TencentSmsAccount tencentSmsAccount = Objects.nonNull(smsParam.getSendAccountId()) ? accountUtils.getAccountById(smsParam.getSendAccountId(), TencentSmsAccount.class) + : accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), TencentSmsAccount.class); SmsClient client = init(tencentSmsAccount); SendSmsRequest request = assembleSendReq(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 882d0c6..2a5f584 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 @@ -38,7 +38,8 @@ public class YunPianSmsScript implements SmsScript { public List send(SmsParam smsParam) { try { - YunPianSmsAccount account = accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), YunPianSmsAccount.class); + YunPianSmsAccount account = Objects.nonNull(smsParam.getSendAccountId()) ? accountUtils.getAccountById(smsParam.getSendAccountId(), YunPianSmsAccount.class) + : accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), YunPianSmsAccount.class); Map params = assembleParam(smsParam, account); String result = HttpRequest.post(account.getUrl()) diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/shield/impl/ShieldServiceImpl.java b/austin-handler/src/main/java/com/java3y/austin/handler/shield/impl/ShieldServiceImpl.java index bc61fa7..e3b9f69 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/shield/impl/ShieldServiceImpl.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/shield/impl/ShieldServiceImpl.java @@ -51,7 +51,7 @@ public class ShieldServiceImpl implements ShieldService { } if (ShieldType.NIGHT_SHIELD_BUT_NEXT_DAY_SEND.getCode().equals(taskInfo.getShieldType())) { redisUtils.lPush(NIGHT_SHIELD_BUT_NEXT_DAY_SEND_KEY, JSON.toJSONString(taskInfo, - SerializerFeature.WriteClassName), + SerializerFeature.WriteClassName), (DateUtil.offsetDay(new Date(), 1).getTime() / 1000) - DateUtil.currentSeconds()); logUtils.print(AnchorInfo.builder().state(AnchorState.NIGHT_SHIELD_NEXT_SEND.getCode()).businessId(taskInfo.getBusinessId()).ids(taskInfo.getReceiver()).build()); } diff --git a/austin-support/src/main/java/com/java3y/austin/support/utils/OssUtils.java b/austin-support/src/main/java/com/java3y/austin/support/utils/OssUtils.java index 7fba986..c37b50a 100644 --- a/austin-support/src/main/java/com/java3y/austin/support/utils/OssUtils.java +++ b/austin-support/src/main/java/com/java3y/austin/support/utils/OssUtils.java @@ -21,14 +21,15 @@ public class OssUtils { public static void main(String[] args) throws UnsupportedEncodingException { //upload(); - String fmnBLE4QtkwlErXIAh9pYS029GZk = getFileUrl("FmnBLE4QtkwlErXIAh9pYS029GZk"); - System.out.println(fmnBLE4QtkwlErXIAh9pYS029GZk); + String s = getFileUrl("FmnBLE4QtkwlErXIAh9pYS029GZk"); + System.out.println(s); } private static void upload() { //构造一个带指定 Region 对象的配置类 Configuration cfg = new Configuration(Region.autoRegion()); - cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本 + // 指定分片上传版本 + cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2; //...其他参数参考类注释 UploadManager uploadManager = new UploadManager(cfg); 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 3a284fc..62b06c4 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 @@ -66,7 +66,7 @@ public class ChannelAccountController { creator = StrUtil.isBlank(creator) ? AustinConstant.DEFAULT_CREATOR : creator; List channelAccounts = channelAccountService.queryByChannelType(channelType, creator); - return Convert4Amis.getChannelAccountVo(channelAccounts); + return Convert4Amis.getChannelAccountVo(channelAccounts, channelType); } /** diff --git a/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java b/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java index a28c4d5..c77c6d1 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java +++ b/austin-web/src/main/java/com/java3y/austin/web/controller/DataController.java @@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; + import java.util.Objects; /** diff --git a/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java b/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java index e1edf8c..6d1a144 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java +++ b/austin-web/src/main/java/com/java3y/austin/web/controller/MessageTemplateController.java @@ -203,7 +203,7 @@ public class MessageTemplateController { file.transferTo(localFile); } catch (Exception e) { log.error("MessageTemplateController#upload fail! e:{},params{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(file)); - throw new CommonException(RespStatusEnum.SERVICE_ERROR); + throw new CommonException(RespStatusEnum.SERVICE_ERROR); } return MapUtil.of(new String[][]{{"value", filePath}}); } diff --git a/austin-web/src/main/java/com/java3y/austin/web/exception/ExceptionHandlerAdvice.java b/austin-web/src/main/java/com/java3y/austin/web/exception/ExceptionHandlerAdvice.java index 6b02614..6f576eb 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/exception/ExceptionHandlerAdvice.java +++ b/austin-web/src/main/java/com/java3y/austin/web/exception/ExceptionHandlerAdvice.java @@ -33,7 +33,7 @@ public class ExceptionHandlerAdvice { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); - BasicResultVO result = BasicResultVO.fail(RespStatusEnum.ERROR_500,"\r\n" + sw + "\r\n"); + BasicResultVO result = BasicResultVO.fail(RespStatusEnum.ERROR_500, "\r\n" + sw + "\r\n"); log.error(e.getMessage(), e); return result; } diff --git a/austin-web/src/main/java/com/java3y/austin/web/utils/Convert4Amis.java b/austin-web/src/main/java/com/java3y/austin/web/utils/Convert4Amis.java index 9d47f7b..296c32d 100644 --- a/austin-web/src/main/java/com/java3y/austin/web/utils/Convert4Amis.java +++ b/austin-web/src/main/java/com/java3y/austin/web/utils/Convert4Amis.java @@ -9,6 +9,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.java3y.austin.common.enums.AnchorState; +import com.java3y.austin.common.enums.ChannelType; import com.java3y.austin.common.enums.SmsStatus; import com.java3y.austin.support.domain.ChannelAccount; import com.java3y.austin.support.domain.SmsRecord; @@ -361,8 +362,12 @@ public class Convert4Amis { * * @return */ - public static List getChannelAccountVo(List channelAccounts) { + public static List getChannelAccountVo(List channelAccounts, Integer channelType) { List result = new ArrayList<>(); + if (ChannelType.SMS.getCode().equals(channelType)) { + CommonAmisVo commonAmisVo = CommonAmisVo.builder().label("AUTO").value("0").build(); + result.add(commonAmisVo); + } for (ChannelAccount channelAccount : channelAccounts) { CommonAmisVo commonAmisVo = CommonAmisVo.builder().label(channelAccount.getName()).value(String.valueOf(channelAccount.getId())).build(); result.add(commonAmisVo);