From a99ef6ccb92c0132ba731872af15199a83469fe9 Mon Sep 17 00:00:00 2001 From: topsuder Date: Fri, 10 Mar 2023 10:09:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(SmsScript):#21=20LinTong=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E7=9A=84SMSScript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/account/sms/LinTongSmsAccount.java | 46 ++++++ .../domain/sms/LinTongSendMessage.java | 22 +++ .../handler/domain/sms/LinTongSendResult.java | 41 ++++++ .../handler/script/impl/LinTongSmsScript.java | 136 ++++++++++++++++++ .../src/main/resources/local.properties | 2 +- 5 files changed, 246 insertions(+), 1 deletion(-) create mode 100644 austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/LinTongSmsAccount.java create mode 100644 austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendMessage.java create mode 100644 austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendResult.java create mode 100644 austin-handler/src/main/java/com/java3y/austin/handler/script/impl/LinTongSmsScript.java diff --git a/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/LinTongSmsAccount.java b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/LinTongSmsAccount.java new file mode 100644 index 0000000..767b265 --- /dev/null +++ b/austin-common/src/main/java/com/java3y/austin/common/dto/account/sms/LinTongSmsAccount.java @@ -0,0 +1,46 @@ +package com.java3y.austin.common.dto.account.sms; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * Form File + *

Description

+ *

Company:QQ 752340543

+ * + * @author topsuder + * @version v1.0.0 + * @DATE 2022/11/24-14:39 + * @Description + * @see com.java3y.austin.common.dto.account austin + */ +@EqualsAndHashCode(callSuper = true) +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class LinTongSmsAccount extends SmsAccount{ + /** + * api相关 + */ + private String url; + + /** + * 账号相关 + */ + private String userName; + private String password; + + /** + * 标识渠道商Id + */ + private Integer supplierId; + + /** + * 标识渠道商名字 + */ + private String supplierName; +} diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendMessage.java b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendMessage.java new file mode 100644 index 0000000..6bbf4d6 --- /dev/null +++ b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendMessage.java @@ -0,0 +1,22 @@ +package com.java3y.austin.handler.domain.sms; + +import lombok.Builder; +import lombok.Data; + +/** + * Form File + *

Description

+ *

Company:QQ 752340543

+ * + * @author topsuder + * @version v1.0.0 + * @DATE 2022/11/24-15:58 + * @Description + * @see com.java3y.austin.handler.domain.sms austin + */ +@Data +@Builder +public class LinTongSendMessage { + String phone; + String content; +} diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendResult.java b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendResult.java new file mode 100644 index 0000000..602f969 --- /dev/null +++ b/austin-handler/src/main/java/com/java3y/austin/handler/domain/sms/LinTongSendResult.java @@ -0,0 +1,41 @@ +package com.java3y.austin.handler.domain.sms; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * Form File + *

Description

+ *

Company:QQ 752340543

+ * + * @author topsuder + * @version v1.0.0 + * @DATE 2022/11/24-15:24 + * @Description + * @see com.java3y.austin.handler.domain.sms austin + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LinTongSendResult { + + Integer code; + + String message; + @JSONField(name = "data") + List dataDTOS; + + @Data + @AllArgsConstructor + @NoArgsConstructor + public class DataDTO{ + Integer code; + String message; + Long msgId; + String phone; + } +} diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/LinTongSmsScript.java b/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/LinTongSmsScript.java new file mode 100644 index 0000000..afc70f8 --- /dev/null +++ b/austin-handler/src/main/java/com/java3y/austin/handler/script/impl/LinTongSmsScript.java @@ -0,0 +1,136 @@ +package com.java3y.austin.handler.script.impl; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.crypto.SecureUtil; +import cn.hutool.http.Header; +import cn.hutool.http.HttpRequest; +import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; +import com.google.common.base.Throwables; +import com.java3y.austin.common.dto.account.sms.LinTongSmsAccount; +import com.java3y.austin.common.enums.SmsStatus; +import com.java3y.austin.handler.domain.sms.LinTongSendMessage; +import com.java3y.austin.handler.domain.sms.LinTongSendResult; +import com.java3y.austin.handler.domain.sms.SmsParam; +import com.java3y.austin.handler.script.SmsScript; +import com.java3y.austin.support.domain.SmsRecord; +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.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Form File + *

Description

+ *

Company:QQ 752340543

+ * + * @author topsuder + * @version v1.0.0 + * @DATE 2022/11/24-14:29 + * @Description + * @see com.java3y.austin.handler.script.impl austin + */ +@Slf4j +@Component("LinTongSmsScript") +public class LinTongSmsScript implements SmsScript { + + @Autowired + private AccountUtils accountUtils; + + /** + * 发送短信 + * + * @param smsParam + * @return 渠道商接口返回值 + */ + @Override + public List send(SmsParam smsParam) { + + try { + LinTongSmsAccount linTongSmsAccount = accountUtils.getSmsAccountByScriptName(smsParam.getScriptName(), LinTongSmsAccount.class); + String request = assembleReq(smsParam, linTongSmsAccount); + String response = HttpRequest.post(linTongSmsAccount.getUrl()).body(request) + .header(Header.ACCEPT.getValue(),"application/json") + .header(Header.CONTENT_TYPE.getValue(),"application/json;charset=utf-8") + .timeout(2000) + .execute().body(); + LinTongSendResult linTongSendResult = JSON.parseObject(response, LinTongSendResult.class); + return assembleSmsRecord(smsParam, linTongSendResult, linTongSmsAccount); + }catch (Exception e){ + log.error("LinTongSmsAccount#send fail:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(smsParam)); + return null; + } + + } + + /** + * 拉取回执 + * + * @param id 渠道账号的ID + * @return 渠道商回执接口返回值 + */ + @Override + public List pull(Integer id) { + return null; + } + + + + + /** + * 组装发送短信参数 + */ + private String assembleReq(SmsParam smsParam, LinTongSmsAccount account) { + Map map = new HashMap<>(5); + final long time = DateUtil.date().getTime(); + String sign = SecureUtil.md5( account.getUserName()+time+SecureUtil.md5(account.getPassword())); + map.put("userName", account.getUserName()); + //获取当前时间戳 + map.put("timestamp", time); + List linTongSendMessages = new ArrayList<>(smsParam.getPhones().size()); + for (String phone : smsParam.getPhones()) { + linTongSendMessages.add(LinTongSendMessage.builder().phone(phone).content(smsParam.getContent()).build()); + } + map.put("messageList", linTongSendMessages); + map.put("sign", sign); + return JSONUtil.toJsonStr(map); + } + + private List assembleSmsRecord(SmsParam smsParam, LinTongSendResult response, LinTongSmsAccount account) { + if (response == null || ArrayUtil.isEmpty(response.getDataDTOS())) { + return null; + } + + List smsRecordList = new ArrayList<>(); + + for (LinTongSendResult.DataDTO datum : response.getDataDTOS()) { + SmsRecord smsRecord = SmsRecord.builder() + .sendDate(Integer.valueOf(DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN))) + .messageTemplateId(smsParam.getMessageTemplateId()) + .phone(Long.valueOf(datum.getPhone())) + .supplierId(account.getSupplierId()) + .supplierName(account.getSupplierName()) + .msgContent(smsParam.getContent()) + .seriesId(datum.getMsgId().toString()) + .chargingNum(1) + .status(datum.getCode()==0 ? SmsStatus.SEND_SUCCESS.getCode() : SmsStatus.SEND_FAIL.getCode()) + .reportContent(datum.getMessage()) + .created(Math.toIntExact(DateUtil.currentSeconds())) + .updated(Math.toIntExact(DateUtil.currentSeconds())) + .build(); + + smsRecordList.add(smsRecord); + } + + return smsRecordList; + } + +} diff --git a/austin-web/src/main/resources/local.properties b/austin-web/src/main/resources/local.properties index b2bafc8..466fb18 100644 --- a/austin-web/src/main/resources/local.properties +++ b/austin-web/src/main/resources/local.properties @@ -1,4 +1,4 @@ discardMsgIds = [] deduplicationRule = {"deduplication_10":{"num":1,"time":300},"deduplication_20":{"num":5}} -msgTypeSmsConfig = [{"message_type_10":[{"weights":99,"scriptName":"TencentSmsScript"},{"weights":1,"scriptName":"YunPianSmsScript"}]},{"message_type_20":[{"weights":99,"scriptName":"TencentSmsScript"},{"weights":1,"scriptName":"YunPianSmsScript"}]},{"message_type_30":[{"weights":20,"scriptName":"TencentSmsScript"}]},{"message_type_40":[{"weights":20,"scriptName":"TencentSmsScript"}]}] +msgTypeSmsConfig = [{"message_type_10":[{"weights":99,"scriptName":"TencentSmsScript"},{"weights":1,"scriptName":"YunPianSmsScript"}]},{"message_type_20":[{"weights":99,"scriptName":"TencentSmsScript"},{"weights":1,"scriptName":"YunPianSmsScript"}]},{"message_type_30":[{"weights":20,"scriptName":"TencentSmsScript"}]},{"message_type_40":[{"weights":20,"scriptName":"TencentSmsScript"}]},{"message_type_50":[{"weights":20,"scriptName":"LinTongSmsScript"}]}] flowControl = {"flow_control_40":1} \ No newline at end of file