From e9601931519587f43361a5e5eeabf2c6ec47b68f Mon Sep 17 00:00:00 2001 From: Administrator Date: Thu, 2 May 2024 12:38:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AE=9A=E6=97=B6?= =?UTF-8?q?=E5=99=A8=E5=92=8C=E5=90=AF=E5=8A=A8=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/main.go | 41 ++++++++++++++++++++++++++++++++++------- qywechat/send.go | 4 ++-- tools/checktime.go | 37 ++++++++++++++++++++++++++----------- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index 00f5920..401fdbd 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,21 +1,40 @@ package main import ( + "fmt" "log" "time" "week/moonshot" "week/qywechat" + "week/tools" "github.com/jasonlvhit/gocron" ) -var maxRetries = 3 +var maxRetries = 0 +var now = time.Now() func main() { - now := time.Now() - nowDate := now.Format("2006-01-02 15:04:05") + " " + now.Weekday().String() - log.Printf("等待执行定时任务中...当前时间是:%s", nowDate) - if maxRetries != 0 { + fmt.Println("-----------------------------------------------------------------------------------------") + fmt.Println("-----------------------------------------------------------------------------------------") + log.Println(` + _____ +_/ ____\______ ____ _____ _____ ____ __ _ _______ ____ ____ +\ __\\_ __ \/ _ \ / \ \__ \ / _ \ \ \/ \/ /\__ \ / \ / ___\ + | | | | \( <_> ) Y Y \ / __ \( <_> ) \ / / __ \| | \/ /_/ > + |__| |__| \____/|__|_| / (____ /\____/ \/\_/ (____ /___| /\___ / + \/ \/ \/ \//_____/`) + fmt.Println("-----------------------------------------------------------------------------------------") + fmt.Println("-----------------------------------------------------------------------------------------") + if maxRetries < 3 { + for { + remainingTime := tools.RemainingTimeUntilNextFriday17() + if remainingTime <= 0 { + break // 当剩余时间小于等于0时跳出循环 + } + fmt.Printf("\r距离执行定时任务还剩 %d小时 %d分钟 %d秒", int(remainingTime.Hours()), int(remainingTime.Minutes())%60, int(remainingTime.Seconds())%60) + time.Sleep(time.Second) // 等待一秒钟,然后更新 + } // 定义任务,每周五的五点执行 gocron.Every(1).Friday().At("17:00").Do(job) // 开始定时任务 @@ -27,15 +46,23 @@ func main() { } func job() { + nowDate := now.Format("2006-01-02 15:04:05") + " " + now.Weekday().String() + log.Printf("开始执行任务,当前时间是:%v", nowDate) + err := moonshot.CreateExcel() if err != nil { + maxRetries++ + log.Printf("执行失败,开始第%v次重试...", maxRetries) + log.Println("----------------------------------------------------------------------") job() - maxRetries-- + } repContent, err := moonshot.AiChat() if err != nil { + maxRetries++ + log.Printf("执行失败,开始第%v次重试...", maxRetries) + log.Println("----------------------------------------------------------------------") job() - maxRetries-- } qywechat.Send(repContent) diff --git a/qywechat/send.go b/qywechat/send.go index 7acb64a..1ea796b 100644 --- a/qywechat/send.go +++ b/qywechat/send.go @@ -24,10 +24,10 @@ func Send(repContent string) { // 发送HTTP POST请求到企业微信机器人Webhook resp, err := http.Post(webhookURL, "application/json", bytes.NewBuffer(requestBody)) if err != nil { - log.Fatalf("Failed to send message: %v", err) + log.Fatalf("发送企业微信机器人失败,错误是: %v", err) } defer resp.Body.Close() - log.Println("Message sent successfully!") + log.Println("发送企业微信机器人成功") } diff --git a/tools/checktime.go b/tools/checktime.go index ef6a306..70fc336 100644 --- a/tools/checktime.go +++ b/tools/checktime.go @@ -1,18 +1,33 @@ package tools import ( - "fmt" "time" ) -// 当前时间是否为周五5点 -func CheckTime() bool { - nowTime := time.Now() - if nowTime.Weekday().String() == "Friday" && nowTime.Format("15:04:05") == "17:00:00" { - fmt.Println("当前时间是周五5点") - return true - } else { - fmt.Println("当前时间不是周五5点") - return false - } +// 计算时间差值 + +func RemainingTimeUntilNextFriday17() time.Duration { + // 获取当前时间 + now := time.Now() + + // 计算下一个周五的时间 + nextFriday := GetNextWeekday(now, time.Friday) + + // 构造下一个周五 17 点的时间 + nextFriday17 := time.Date(nextFriday.Year(), nextFriday.Month(), nextFriday.Day(), 17, 0, 0, 0, nextFriday.Location()) + + // 计算时间差 + duration := nextFriday17.Sub(now) + + return duration +} + +// 获取下一个指定星期几的时间 + +func GetNextWeekday(t time.Time, weekday time.Weekday) time.Time { + daysUntil := (int(weekday) - int(t.Weekday()) + 7) % 7 + if daysUntil == 0 { + daysUntil = 7 + } + return t.AddDate(0, 0, daysUntil) }