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/handler/impl/EmailHandler.java b/austin-handler/src/main/java/com/java3y/austin/handler/handler/impl/EmailHandler.java index e279178..85e7a26 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 @@ -67,7 +67,7 @@ public class EmailHandler extends BaseHandler implements Handler { } /** - * 获取账号信息合配置 + * 获取账号信息和配置 * * @return */ 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-support/src/main/java/com/java3y/austin/support/utils/AustinFileUtils.java b/austin-support/src/main/java/com/java3y/austin/support/utils/AustinFileUtils.java index b9a4dcf..859f238 100644 --- a/austin-support/src/main/java/com/java3y/austin/support/utils/AustinFileUtils.java +++ b/austin-support/src/main/java/com/java3y/austin/support/utils/AustinFileUtils.java @@ -27,6 +27,7 @@ public class AustinFileUtils { URL url = new URL(remoteUrl); File file = new File(path, url.getPath()); if (!file.exists()) { + file.getParentFile().mkdirs(); IoUtil.copy(url.openStream(), new FileOutputStream(file)); } return file; 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