package task import ( "applet/app/db" taskMd "applet/app/task/md" "applet/app/utils/logx" "github.com/robfig/cron/v3" "time" ) var ( timer *cron.Cron jobs = map[string]func(){} baseEntryId cron.EntryID entryIds []cron.EntryID ch = make(chan int, 30) workerNum = 15 // 智盟跟单并发数量 ) func Init() { // 初始化任务列表 initTasks() var err error timer = cron.New() // reload为初始化数据库方法 if baseEntryId, err = timer.AddFunc("@every 15m", reload); err != nil { _ = logx.Fatal(err) } } func Run() { reload() timer.Start() _ = logx.Info("auto tasks running...") } func reload() { // 重新初始化数据库 sysCfgDb := db.SysCfgDb{} sysCfgDb.Set() cronList, _ := sysCfgDb.SysCfgGetCron() if cronList != nil { // 删除原有所有任务 if len(entryIds) > 0 { for _, v := range entryIds { if v != baseEntryId { timer.Remove(v) } } entryIds = nil } var ( entryId cron.EntryID err error ) for _, vv := range *cronList { if _, ok := jobs[vv.K]; ok && vv.V != "" { // fmt.Println(vv.Val) if entryId, err = timer.AddFunc(vv.V, doTask(vv.K)); err == nil { entryIds = append(entryIds, entryId) } } } } } func doTask(fnName string) func() { return func() { begin := time.Now().Local() jobs[fnName]() end := time.Now().Local() logx.Infof( " AutoTask <%s> started at <%s>, ended at <%s> duration <%s>", fnName, begin.Format("2006-01-02 15:04:05.000"), end.Format("2006-01-02 15:04:05.000"), time.Duration(end.UnixNano()-begin.UnixNano()).String(), ) } } // 增加自动任务队列 func initTasks() { jobs[taskMd.DataCollectCronHaodankuRealNews] = taskDataCollectCronHaodankuRealNews // jobs[taskMd.DataCollectCronHaodankuRealNews10] = taskDataCollectCronHaodankuRealNews10 // jobs[taskMd.DataCollectCronMiyuanRealNews] = taskDataCollectCronMiyuanRealNews // jobs[taskMd.DataCollectCronMiyuanRealNews1] = taskDataCollectCronMiyuanRealNews1 // jobs[taskMd.DataCollectCronMiyuanRealNews10] = taskDataCollectCronMiyuanRealNews10 // }