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