From d4243f398b84a8b8cdcd27c35ace72f6a30a6452 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期日, 08 十月 2023 10:45:09 +0800 Subject: [PATCH] 是否可以开始增加开始时间判断,考虑进程退出和断电情况 --- service/task.go | 2 +- service/cache_store.go | 16 ++++++++++++---- model/procedures.go | 5 +++++ api/v1/task.go | 3 ++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/api/v1/task.go b/api/v1/task.go index 2e2e8ea..ef93b90 100644 --- a/api/v1/task.go +++ b/api/v1/task.go @@ -111,8 +111,9 @@ return taskResponse.Tasks[i].Channel < taskResponse.Tasks[i].Channel }) + nowTs := time.Now().Unix() for _, task := range taskResponse.Tasks { - if !service.TaskFlagGet(task.Channel) { + if !service.TaskFlagGet(task.Channel) && task.Procedure.StartTime <= nowTs { task.CanStarted = true } } diff --git a/model/procedures.go b/model/procedures.go index 425a192..c4229a3 100644 --- a/model/procedures.go +++ b/model/procedures.go @@ -140,6 +140,11 @@ return slf } +func (slf *ProceduresSearch) SetChannel(channel int32) *ProceduresSearch { + slf.Channel = channel + return slf +} + func (slf *ProceduresSearch) build() *gorm.DB { var db = slf.Orm.Model(&Procedures{}) diff --git a/service/cache_store.go b/service/cache_store.go index 2f6c515..b957062 100644 --- a/service/cache_store.go +++ b/service/cache_store.go @@ -5,6 +5,7 @@ "apsClient/model" "fmt" "github.com/spf13/cast" + "gorm.io/gorm" "sync" "time" ) @@ -79,18 +80,25 @@ } func TaskFlagSet(channel int32) { - defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), struct{}{}) + defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), true) } func TaskFlagUnset(channel int32) { - defaultCacheStore.Remove(fmt.Sprintf(CurrentTaskCacheKey, channel)) + defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), false) } func TaskFlagGet(channel int32) bool { - if _, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok { + if v, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok { + return v.(bool) + } + _, err := model.NewProceduresSearch(nil).SetStatus(model.ProcedureStatusProcessing).SetChannel(channel).First() + if err == gorm.ErrRecordNotFound { + defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), false) + return false + } else { + defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), true) return true } - return false } func ProgressCacheGet(channel int32) (*model.ProductionProgress, bool) { diff --git a/service/task.go b/service/task.go index 113ebe6..f9413cc 100644 --- a/service/task.go +++ b/service/task.go @@ -49,7 +49,7 @@ SetOrder("start_time asc") } else if mode == constvar.TaskModeCurrent { search.SetStatus(model.ProcedureStatusProcessing). - SetOrder("status desc, start_time asc") + SetOrder("start_time asc") } else if mode == constvar.TaskModeLastFinished { search.SetStatus(model.ProcedureStatusFinished).SetOrder("updated_at desc") if len(channels) > 0 { -- Gitblit v1.8.0