From f9fa6f0c912e1450ca506980d18021b7a1ca1559 Mon Sep 17 00:00:00 2001 From: "SGK\\17962" <1796293269@qq.com> Date: Sun, 6 Jul 2025 17:57:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=8A=E8=AD=A6=E9=80=9A=E7=9F=A5=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=9F=AD=E4=BF=A1=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/alarm/attribute/SmsAttribute.java | 11 ++++ .../core/alarm/sms/SnailJobSmsProperties.java | 17 +++++ .../common/core/alarm/strategy/SmsAlarm.java | 63 +++++++++++++++++++ .../common/core/enums/AlarmTypeEnum.java | 6 ++ .../src/main/resources/application.yml | 7 +++ 5 files changed, 104 insertions(+) create mode 100644 snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/attribute/SmsAttribute.java create mode 100644 snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/sms/SnailJobSmsProperties.java create mode 100644 snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/strategy/SmsAlarm.java diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/attribute/SmsAttribute.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/attribute/SmsAttribute.java new file mode 100644 index 00000000..1068dcbc --- /dev/null +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/attribute/SmsAttribute.java @@ -0,0 +1,11 @@ +package com.aizuda.snailjob.common.core.alarm.attribute; + +import lombok.Data; + +import java.util.List; + +@Data +public class SmsAttribute { + private List phoneNumbers; // 接收短信的手机号列表 +} + diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/sms/SnailJobSmsProperties.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/sms/SnailJobSmsProperties.java new file mode 100644 index 00000000..a56b2417 --- /dev/null +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/sms/SnailJobSmsProperties.java @@ -0,0 +1,17 @@ +package com.aizuda.snailjob.common.core.alarm.sms; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "snailjob.sms") +@Data +public class SnailJobSmsProperties { + private boolean enabled; + private String accountSid; + private String authToken; + private String appId; + private String smsServerUrl; +} + diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/strategy/SmsAlarm.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/strategy/SmsAlarm.java new file mode 100644 index 00000000..aacc4902 --- /dev/null +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/alarm/strategy/SmsAlarm.java @@ -0,0 +1,63 @@ +package com.aizuda.snailjob.common.core.alarm.strategy; + +import com.aizuda.snailjob.common.core.alarm.AlarmContext; +import com.aizuda.snailjob.common.core.alarm.attribute.SmsAttribute; +import com.aizuda.snailjob.common.core.alarm.sms.SnailJobSmsProperties; +import com.aizuda.snailjob.common.core.enums.AlarmTypeEnum; +import com.aizuda.snailjob.common.core.util.JsonUtil; +import com.aizuda.snailjob.common.log.SnailJobLog; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class SmsAlarm extends AbstractAlarm { + + private final SnailJobSmsProperties snailJobSmsProperties; + + @Override + public Integer getAlarmType() { + return AlarmTypeEnum.SMS.getValue(); // 返回短信类型的值 + } + + @Override + public boolean syncSendMessage(AlarmContext alarmContext) { + if (!snailJobSmsProperties.isEnabled()) { + SnailJobLog.LOCAL.warn("短信功能未启用"); + return false; + } + + try { + String notifyAttribute = alarmContext.getNotifyAttribute(); + SmsAttribute smsAttribute = JsonUtil.parseObject(notifyAttribute, SmsAttribute.class); + String message = alarmContext.getText(); + + // 示例:调用第三方短信发送API + sendSms(smsAttribute.getPhoneNumbers(), message); + } catch (Exception e) { + SnailJobLog.LOCAL.error("发送短信失败:", e); + return false; + } + + return true; + } + + @Override + public boolean asyncSendMessage(List alarmContexts) { + for (AlarmContext context : alarmContexts) { + asyncSendMessage(context); + } + return Boolean.TRUE; + } + + private void sendSms(List phoneNumbers, String message) { + // 这里应使用具体的短信服务SDK或HTTP请求来发送短信 + // 示例伪代码: + for (String phoneNumber : phoneNumbers) { + // 实际发送逻辑 + System.out.println("发送短信至 " + phoneNumber + ": " + message); + } + } +} diff --git a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/AlarmTypeEnum.java b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/AlarmTypeEnum.java index 6f31e153..a3c0d04d 100644 --- a/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/AlarmTypeEnum.java +++ b/snail-job-common/snail-job-common-core/src/main/java/com/aizuda/snailjob/common/core/enums/AlarmTypeEnum.java @@ -37,6 +37,12 @@ public enum AlarmTypeEnum { * Webhook */ WEBHOOK(5), + + /** + * 短信 + */ + SMS(6), + ; private final int value; diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml index 5444e860..6ed984dc 100644 --- a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml +++ b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml @@ -95,6 +95,13 @@ snail-job: log-storage: 7 # 日志保存时间(单位: day) rpc-type: grpc + sms: + enabled: true + account-sid: your_account_sid + auth-token: your_auth_token + app-id: your_app_id + sms-server-url: https://api.twilio.com/2010-04-01/Accounts/{account_sid}/Messages.json + mail: enabled: true host: smtp.qq.com