diff --git a/cmd/main.go b/cmd/main.go index 7041c1b..25ef980 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -3,13 +3,12 @@ package main import ( "flag" "fmt" + "github.com/jasonlvhit/gocron" "log" "time" "week/moonshot" "week/qywechat" "week/tools" - - "github.com/jasonlvhit/gocron" ) var maxRetries = 0 @@ -29,50 +28,43 @@ _/ ____\______ ____ _____ _____ ____ __ _ _______ ____ ____ flag.BoolVar(&liveMode, "livemode", false, "即时模式默认关闭") flag.Parse() if !liveMode { - fmt.Println("目前是定时任务模式") - if maxRetries < 3 { - for { - remainingTime := tools.RemainingTimeUntilNextFriday17() - if remainingTime <= 0 { - break // 当剩余时间小于等于0时跳出循环 - } - fmt.Printf("距离执行定时任务还剩 %d小时 %d分钟 %d秒\n", int(remainingTime.Hours()), int(remainingTime.Minutes())%60, int(remainingTime.Seconds())%60) - time.Sleep(time.Minute * 10) // 等待10分钟,然后更新 - } - // 定义任务,每周五的五点执行 - gocron.Every(1).Friday().At("17:00").Do(job) - // 开始定时任务 - <-gocron.Start() - - } else { - log.Fatalln("最大重试次数已到达3,退出") - } + log.Println("目前是定时任务模式") + // 定义任务,每周五的五点执行 + gocron.Every(1).Friday().At("17:00").Do(job) + // 开始定时任务 + <-gocron.Start() } else { - fmt.Println("目前是即时任务模式") + log.Println("目前是即时任务模式") job() } } func job() { - nowDate := now.Format("2006-01-02 15:04:05") + " " + now.Weekday().String() - log.Printf("开始执行任务,当前时间是:%v", nowDate) + //最多重试3次 + if maxRetries < 3 { + 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() + err := moonshot.CreateExcel() + if err != nil { + maxRetries++ + log.Printf("执行失败,开始第%v次重试...", maxRetries) + log.Println("----------------------------------------------------------------------") + job() + } + repContent, err := moonshot.AiChat() + if err != nil { + maxRetries++ + log.Printf("执行失败,开始第%v次重试...", maxRetries) + log.Println("----------------------------------------------------------------------") + job() + } + qywechat.Send(repContent) + log.Printf("任务执行成功,当前时间是:%v", nowDate) + log.Printf("等待下次任务执行:%v", tools.TimeUntilFriday()) + } else { + log.Fatalln("最大重试次数已到达3,退出") } - repContent, err := moonshot.AiChat() - if err != nil { - maxRetries++ - log.Printf("执行失败,开始第%v次重试...", maxRetries) - log.Println("----------------------------------------------------------------------") - job() - } - qywechat.Send(repContent) - } diff --git a/qywechat/send.go b/qywechat/send.go index 4cf3d67..e227904 100644 --- a/qywechat/send.go +++ b/qywechat/send.go @@ -37,11 +37,14 @@ func Send(repContent string) { fmt.Println(repContent) resp, err := http.Post(webhookURL, "application/json", strings.NewReader(repContent)) if err != nil { - log.Fatalf("发送企业微信机器人失败,错误是: %v", err) + log.Printf("发送企业微信机器人失败,错误是: %v", err) } defer resp.Body.Close() - body, _ := io.ReadAll(resp.Body) - fmt.Println(resp.StatusCode, string(body)) - log.Println("发送企业微信机器人成功") + body, err := io.ReadAll(resp.Body) + if err != nil { + log.Printf("发送企业微信机器人失败,错误是: %v", err) + } + + log.Printf("发送企业微信机器人完成,状态码为:%v,返回体为:%v", resp.StatusCode, string(body)) } diff --git a/tools/checktime.go b/tools/checktime.go index 8fe9357..af2f185 100644 --- a/tools/checktime.go +++ b/tools/checktime.go @@ -1,29 +1,40 @@ package tools -import ( - "time" -) +import "time" -// 计算时间差值 +func TimeUntilFriday() time.Duration { + today := time.Now() + weekday := today.Weekday() + switch weekday { + case time.Monday: + friday := time.Date(today.Year(), today.Month(), today.Day()+4, 17, 0, 0, 0, today.Location()) + return friday.Sub(today) + case time.Tuesday: + friday := time.Date(today.Year(), today.Month(), today.Day()+3, 17, 0, 0, 0, today.Location()) + return friday.Sub(today) + case time.Wednesday: + friday := time.Date(today.Year(), today.Month(), today.Day()+2, 17, 0, 0, 0, today.Location()) + return friday.Sub(today) + case time.Thursday: + friday := time.Date(today.Year(), today.Month(), today.Day()+1, 17, 0, 0, 0, today.Location()) + return friday.Sub(today) + case time.Friday: + friday := time.Date(today.Year(), today.Month(), today.Day(), 17, 0, 0, 0, today.Location()) + if friday.Sub(today) > 0 { + return friday.Sub(today) + } else if friday.Sub(today) < 0 { + friday = time.Date(today.Year(), today.Month(), today.Day()+7, 17, 0, 0, 0, today.Location()) + return friday.Sub(today) + } else { + return 0 + } + case time.Saturday: + friday := time.Date(today.Year(), today.Month(), today.Day(), 17, 0, 0, 0, today.Location()) + return friday.Sub(today) + case time.Sunday: + friday := time.Date(today.Year(), today.Month(), today.Day()+5, 17, 0, 0, 0, today.Location()) + return friday.Sub(today) -func RemainingTimeUntilNextFriday17() time.Duration { - // 获取当前时间 - now := time.Now() - - // 计算下一个周五的时间 - nextFriday := now.AddDate(0, 0, (int(time.Friday)-int(now.Weekday())+7)%7) - - // 如果今天是周五,则直接返回距离今天17点的时间 - if now.Weekday() == time.Friday { - today17 := time.Date(now.Year(), now.Month(), now.Day(), 17, 0, 0, 0, now.Location()) - return today17.Sub(now) } - - // 构造下一个周五 17 点的时间 - nextFriday17 := time.Date(nextFriday.Year(), nextFriday.Month(), nextFriday.Day(), 17, 0, 0, 0, nextFriday.Location()) - - // 计算时间差 - duration := nextFriday17.Sub(now) - - return duration + return 0 } diff --git a/周报.xlsx b/周报.xlsx index cc59ec2..4f8d5ec 100644 Binary files a/周报.xlsx and b/周报.xlsx differ