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