增加钉钉通知

This commit is contained in:
2025-11-04 17:19:28 +08:00
parent 1de86a2f46
commit 4845094577
11 changed files with 398 additions and 42 deletions
@@ -0,0 +1,70 @@
package com.pomelotea.hoperun.sign.service
import com.pomelotea.hoperun.sign.api.model.ScNotifyRequest
import com.pomelotea.hoperun.sign.api.model.ScNotifyResponse
import com.pomelotea.hoperun.sign.api.model.DingTalkNotifyResponse
import com.pomelotea.hoperun.sign.config.DingTalkConfig
import com.pomelotea.hoperun.sign.config.ServerChan3Config
import com.pomelotea.hoperun.sign.notify.DingTalkNotifyHelper
import com.pomelotea.hoperun.sign.notify.ServerChan3NotifyHelper
import com.pomelotea.hoperun.sign.scheduler.AutoDakaScheduler.Companion.logger
import org.springframework.stereotype.Service
@Service
open class NotificationService(
private val serverChan3NotifyHelper: ServerChan3NotifyHelper,
private val dingTalkNotifyHelper: DingTalkNotifyHelper,
private val serverChan3Config: ServerChan3Config,
private val dingTalkConfig: DingTalkConfig
) {
fun sendAllNotifications(title: String, content: String) {
// 发送 ServerChan3 通知
try {
val scResponse = sendServerChanNotification(title, content)
logger.info("ServerChan3 通知发送结果: ${scResponse.message}")
} catch (e: Exception) {
logger.error("ServerChan3 通知发送失败", e)
}
// 发送钉钉通知
try {
val dtResponse = sendDingTalkNotification(title, content)
logger.info("钉钉通知发送结果: ${dtResponse.errmsg}")
} catch (e: Exception) {
logger.error("钉钉通知发送失败", e)
}
}
fun sendServerChanNotification(title: String, content: String): ScNotifyResponse {
val request = ScNotifyRequest(title = title, desp = content)
return serverChan3NotifyHelper.push(request)
}
fun sendDingTalkNotification(title: String, content: String): DingTalkNotifyResponse {
// 如果内容包含markdown格式,使用markdown类型消息
return if (content.contains("**") || content.contains("#") || content.contains("*")) {
dingTalkNotifyHelper.sendMarkdown(title, content)
} else {
dingTalkNotifyHelper.sendText("$title\n\n$content")
}
}
fun sendDingTalkText(text: String): DingTalkNotifyResponse {
return dingTalkNotifyHelper.sendText(text)
}
fun sendDingTalkMarkdown(title: String, content: String): DingTalkNotifyResponse {
return dingTalkNotifyHelper.sendMarkdown(title, content)
}
fun isServerChanEnabled(): Boolean {
return serverChan3Config.uid.isNotEmpty() && serverChan3Config.sendKey.isNotEmpty()
}
fun isDingTalkEnabled(): Boolean {
return dingTalkConfig.enabled &&
dingTalkConfig.webhook.isNotEmpty() &&
!dingTalkConfig.webhook.contains("YOUR_ACCESS_TOKEN")
}
}