From f2d80dbaa80a1283bf1c0fe9ae1d280832652d7f Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 02 十一月 2023 18:14:22 +0800
Subject: [PATCH] 增加问题诊断定时任务和查询接口,增加按channel查询工序开始和结束时间

---
 service/cache_store.go |   55 ++++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 48 insertions(+), 7 deletions(-)

diff --git a/service/cache_store.go b/service/cache_store.go
index 1d9b7d1..2ac4594 100644
--- a/service/cache_store.go
+++ b/service/cache_store.go
@@ -52,6 +52,8 @@
 	CurrentTaskCacheKey     = "current_task:%v"              //current_task:channel
 	CurrentProgressCacheKey = "current_progress:%v"          //current_progress:channel
 	PlcCacheKeyUpdateTime   = "finish_number_update_time:%v" //finish_number_update_time:channel
+	TaskStartTimeCache      = "task_start_time:%v"           //task_start_time:channel
+	TaskEndTimeCache        = "task_end_time:%v"             //task_end_time:channel
 )
 
 func PlcCacheGet(channel int32, key string) (interface{}, bool) {
@@ -76,28 +78,67 @@
 	return 0
 }
 
+func TaskStartTimeSet(channel int32, ts int64) {
+	defaultCacheStore.Add(fmt.Sprintf(TaskStartTimeCache, channel), ts)
+}
+
+func TaskStartTimeGet(channel int32) int64 {
+	if v, ok := defaultCacheStore.Get(fmt.Sprintf(TaskStartTimeCache, channel)); ok {
+		return v.(int64)
+	}
+	procedure, err := model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID).SetStatus(model.ProcedureStatusProcessing).SetChannels([]int32{channel}).First() //杩涜涓换鍔�
+	if err == gorm.ErrRecordNotFound {
+		procedure, err = model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID).
+			SetStatus(model.ProcedureStatusFinished).SetChannels([]int32{channel}).SetOrder("real_end_time desc").First() //涓婁竴涓粨鏉熺殑浠诲姟
+		if err == gorm.ErrRecordNotFound { //杩涜涓拰缁撴潫鐨勯兘娌℃湁锛屽紑濮嬫椂闂村拰缁撴潫鏃堕棿閮借缃�0
+			TaskStartTimeSet(channel, int64(0))
+			TaskEndTimeSet(channel, int64(0))
+			return 0
+		} else {
+			TaskStartTimeSet(channel, procedure.RealStartTime)
+			TaskStartTimeSet(channel, procedure.RealEndTime)
+			return 0
+		}
+	} else {
+		TaskStartTimeSet(channel, procedure.RealStartTime)
+		TaskStartTimeSet(channel, int64(0))
+		return procedure.RealStartTime
+	}
+}
+
+func TaskEndTimeSet(channel int32, ts int64) {
+	defaultCacheStore.Add(fmt.Sprintf(TaskEndTimeCache, channel), ts)
+}
+
+func TaskEndTimeGet(channel int32) int64 {
+	if v, ok := defaultCacheStore.Get(fmt.Sprintf(TaskEndTimeCache, channel)); ok {
+		return v.(int64)
+	}
+	return 0
+}
+
 func FinishUpdateTimeSet(channel int32, value interface{}) {
 	defaultCacheStore.Add(fmt.Sprintf(PlcCacheKeyUpdateTime, channel), value)
 }
 
-func TaskFlagSet(channel int32) {
-	defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), true)
+func TaskFlagSet(channel int32, taskId int) {
+	defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), taskId)
 }
 
 func TaskFlagUnset(channel int32) {
-	defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), false)
+	defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), 0)
 }
 
 func TaskFlagGet(channel int32) bool {
 	if v, ok := defaultCacheStore.Get(fmt.Sprintf(CurrentTaskCacheKey, channel)); ok {
-		return v.(bool)
+		return v.(int) > 0
 	}
-	_, err := model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID).SetStatus(model.ProcedureStatusProcessing).SetChannels([]int32{channel}).First()
+	procedure, err := model.NewProceduresSearch(nil).SetDeviceId(conf.Conf.CurrentDeviceID).SetStatus(model.ProcedureStatusProcessing).SetChannels([]int32{channel}).First()
 	if err == gorm.ErrRecordNotFound {
-		defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), false)
+		defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), 0)
 		return false
 	} else {
-		defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), true)
+		defaultCacheStore.Add(fmt.Sprintf(CurrentTaskCacheKey, channel), int(procedure.ID))
 		return true
 	}
 }

--
Gitblit v1.8.0