2024-05-18 01:46:35 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"aiweek/aichat"
|
|
|
|
|
"aiweek/notifer"
|
2024-05-20 01:00:09 +08:00
|
|
|
|
"aiweek/option"
|
2024-05-18 01:46:35 +08:00
|
|
|
|
"aiweek/tools"
|
|
|
|
|
"aiweek/udesk/reply"
|
|
|
|
|
"flag"
|
|
|
|
|
"fmt"
|
|
|
|
|
"github.com/jasonlvhit/gocron"
|
|
|
|
|
"log"
|
|
|
|
|
"os"
|
|
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var liveMode bool
|
|
|
|
|
var operateTime = 1
|
|
|
|
|
|
|
|
|
|
func main() {
|
2024-05-20 01:00:09 +08:00
|
|
|
|
fmt.Println(`
|
2024-05-18 01:46:35 +08:00
|
|
|
|
_____
|
|
|
|
|
_/ ____\______ ____ _____ _____ ____ __ _ _______ ____ ____
|
|
|
|
|
\ __\\_ __ \/ _ \ / \ \__ \ / _ \ \ \/ \/ /\__ \ / \ / ___\
|
|
|
|
|
| | | | \( <_> ) Y Y \ / __ \( <_> ) \ / / __ \| | \/ /_/ >
|
|
|
|
|
|__| |__| \____/|__|_| / (____ /\____/ \/\_/ (____ /___| /\___ /
|
|
|
|
|
\/ \/ \/ \//_____/ `)
|
|
|
|
|
flag.BoolVar(&liveMode, "livemode", false, "即时模式默认关闭")
|
|
|
|
|
flag.Parse()
|
|
|
|
|
if !liveMode {
|
|
|
|
|
log.Println("目前是定时任务模式")
|
2024-05-20 01:00:09 +08:00
|
|
|
|
log.Printf("等待任务的第%v次执行...\n", operateTime)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
// 定义任务,每周五的五点执行
|
2024-05-26 09:15:34 +08:00
|
|
|
|
gocron.Every(1).Friday().At("16:00").Do(retryJob)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
// 开始定时任务
|
|
|
|
|
<-gocron.Start()
|
|
|
|
|
} else {
|
|
|
|
|
log.Println("目前是即时任务模式")
|
2024-05-20 01:00:09 +08:00
|
|
|
|
err := job()
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Printf("执行任务失败,错误是:%v\n", err)
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-05-18 01:46:35 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func job() error {
|
2024-06-01 23:48:00 +08:00
|
|
|
|
ExcelName := "weeklyReport" + time.Now().Format("2006-01-02") + "_" + time.Now().Format("15-04-05") + ".xlsx"
|
|
|
|
|
excel := reply.NewExcelObj(ExcelName)
|
2024-05-20 01:00:09 +08:00
|
|
|
|
excel.SetReplyContent().CreateNewExcel()
|
|
|
|
|
err := reply.CopyFile(excel.ExcelPath, option.VOLUMEPATH+excel.ExcelName)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2024-05-20 01:00:09 +08:00
|
|
|
|
err = os.Remove(excel.ExcelPath)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
//校验文件数量,超过4个删除最老的文件
|
2024-05-20 01:00:09 +08:00
|
|
|
|
fileCount, err := tools.CountFilesInDir(option.VOLUMEPATH)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2024-06-01 23:48:00 +08:00
|
|
|
|
if fileCount > option.PRESERVATION {
|
2024-05-20 01:00:09 +08:00
|
|
|
|
cleanFile := tools.ReadFilename(option.VOLUMEPATH)
|
|
|
|
|
err := os.Remove(option.VOLUMEPATH + cleanFile)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
if err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-06-01 23:48:00 +08:00
|
|
|
|
remainder := fmt.Sprintf("文件同步完成,地址是%v,稍后将发送ai分析结果%v", option.FILESERVER_ADDRESS+excel.ExcelName, ">_<~")
|
2024-05-20 11:28:59 +08:00
|
|
|
|
notifer.SendWechat(remainder)
|
2024-05-26 09:15:34 +08:00
|
|
|
|
|
|
|
|
|
result := aichat.NewAiReq(excel.ExcelAddress).StartChat(option.MODEL_API).PrepareWechatBody()
|
2024-05-18 01:46:35 +08:00
|
|
|
|
notifer.SendWechat(result)
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func retryJob() {
|
|
|
|
|
// 设置最大重试次数
|
|
|
|
|
maxRetries := 3
|
|
|
|
|
// 设置重试间隔
|
|
|
|
|
retryInterval := 20 * time.Second
|
|
|
|
|
// 重试逻辑
|
|
|
|
|
for attempt := 0; attempt < maxRetries; attempt++ {
|
|
|
|
|
err := job()
|
|
|
|
|
if err == nil {
|
2024-05-20 01:00:09 +08:00
|
|
|
|
operateTime++
|
2024-05-18 01:46:35 +08:00
|
|
|
|
log.Println("执行成功")
|
2024-05-20 01:00:09 +08:00
|
|
|
|
log.Printf("等待第%v次任务执行\n", operateTime)
|
2024-05-18 01:46:35 +08:00
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
fmt.Printf("尝试 %d 次失败,错误是: %s\n", attempt+1, err)
|
|
|
|
|
if attempt < maxRetries-1 {
|
|
|
|
|
// 如果不是最后一次重试,等待一段时间后重试
|
|
|
|
|
time.Sleep(retryInterval)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 如果所有重试都失败了,这里可以处理失败的情况
|
|
|
|
|
log.Fatal("所有任务均失败!")
|
|
|
|
|
}
|