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