package jobs import ( "IotAdmin/app/schedule/models" "IotAdmin/core/sdk" "IotAdmin/core/sdk/pkg/cronjob" "gorm.io/gorm" ) var ( // jobList 定义的job jobList map[string]JobExec ) // InitJob 初始化job func InitJob() { initJobList() Setup(sdk.Runtime.GetDb()) } // 需要将定义的struct 添加到字典中; // 字典 key 可以配置到 自动任务 调用目标 中; func initJobList() { jobList = map[string]JobExec{ "CleanLog": &CleanLog{}, "ExamplesOne": &ExamplesOne{}, } } // Setup 初始化 func Setup(dbs map[string]*gorm.DB) { jobLogger.Infof("STARTING...") for k, db := range dbs { sdk.Runtime.SetCrontab(k, cronjob.NewWithSecondsLogger(jobLogger)) setup(k, db) } } func setup(key string, db *gorm.DB) { crontab := sdk.Runtime.GetCrontabKey(key) sysJob := models.SysJob{} jobList := make([]models.SysJob, 0) err := sysJob.GetList(db, &jobList) if err != nil { jobLogger.Errorf("INIT ERROR:%s", err.Error()) } if len(jobList) == 0 { jobLogger.Infof("TOTAL:0") } _, err = sysJob.RemoveAllEntryID(db) if err != nil { jobLogger.Errorf("REMOVE ALL ENTRY ERROR ERROR: %s", err.Error()) } for i := 0; i < len(jobList); i++ { if jobList[i].JobType == 1 { j := &HttpJob{} j.InvokeTarget = jobList[i].InvokeTarget j.CronExpression = jobList[i].CronExpression j.JobId = jobList[i].JobId j.Name = jobList[i].JobName sysJob.EntryId, err = AddJob(crontab, j) } else if jobList[i].JobType == 2 { j := &ExecJob{} j.InvokeTarget = jobList[i].InvokeTarget j.CronExpression = jobList[i].CronExpression j.JobId = jobList[i].JobId j.Name = jobList[i].JobName j.Args = jobList[i].Args sysJob.EntryId, err = AddJob(crontab, j) } err = sysJob.Update(db, jobList[i].JobId) } // 其中任务 crontab.Start() jobLogger.Infof("START SUCCESS") // 关闭任务 defer crontab.Stop() select {} } // GetJobKeys 获取job key列表 func GetJobKeys() map[string]string { var mp = make(map[string]string) for k, v := range jobList { mp[k] = v.GetName() } return mp }