From 96536e0052cc29e9fb9fab729fe2f50f53bcc084 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期五, 10 十一月 2023 17:56:53 +0800
Subject: [PATCH] 切换设备时不需要重启任务

---
 crontask/cron_task.go |   60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/crontask/cron_task.go b/crontask/cron_task.go
index 230d38e..c38ef9d 100644
--- a/crontask/cron_task.go
+++ b/crontask/cron_task.go
@@ -3,11 +3,14 @@
 import (
 	"apsClient/conf"
 	"apsClient/constvar"
+	"apsClient/model"
 	"apsClient/model/common"
 	"apsClient/nsq"
 	"apsClient/pkg/ecode"
 	"apsClient/pkg/logx"
+	"apsClient/serf"
 	"apsClient/service"
+	"apsClient/service/problem"
 	"fmt"
 	"github.com/go-co-op/gocron"
 	"github.com/spf13/cast"
@@ -16,6 +19,9 @@
 
 var s *gocron.Scheduler
 
+func init() {
+	s = gocron.NewScheduler(time.UTC)
+}
 func StartTask(isMaster bool) error {
 	finishNumberTimeInterval := conf.Conf.PLC.FinishNumberTimeInterval
 	totalNumberTimeInterval := conf.Conf.PLC.TotalNumberTimeInterval
@@ -25,7 +31,6 @@
 	if totalNumberTimeInterval == 0 {
 		totalNumberTimeInterval = 60
 	}
-	s = gocron.NewScheduler(time.UTC)
 	_, err := s.Every(finishNumberTimeInterval).Seconds().Do(func() {
 		plcConfig, code := service.NewDevicePlcService().GetDevicePlc()
 		if code != ecode.OK {
@@ -78,7 +83,13 @@
 	if isMaster {
 		s.Every(60).Seconds().Do(SyncProductionProgress) //鍚屾鐢熶骇鏁版嵁
 		s.Every(30).Seconds().Do(SyncTaskStatus)         //鍚屾浠诲姟鐘舵��
+		s.Every(10).Seconds().Do(CheckNsqConn)           //鏌ヨnsq杩炴帴
+
 	}
+
+	s.Every(20).Seconds().Do(QueryClusterStatus) //鏌ヨ闆嗙兢鑺傜偣鏁伴噺
+	s.Every(30).Seconds().Do(ProblemCheck)       //闂璇婃柇
+
 	s.StartAsync()
 	return nil
 }
@@ -130,8 +141,15 @@
 func RestartTask(isMaster bool) error {
 	if s != nil {
 		s.Stop()
+		s.Clear()
 	}
-	return StartTask(isMaster)
+	err := StartTask(isMaster)
+	if err != nil {
+		logx.Errorf("restart task failed:%v", err)
+		return err
+	}
+	logx.Infof("restart task ok, isMaster:", isMaster)
+	return nil
 }
 
 // Once 涓�娆℃�т换鍔�
@@ -151,4 +169,42 @@
 	if err != nil {
 		logx.Errorf("send pull data msg error:%v, msg:%+v", err.Error(), msg)
 	}
+	msg = &common.MsgPullDataRequest{DataType: common.PullDataTypeProcessModelPlcAddress}
+	caller = nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicPullDataRequest, conf.Conf.NsqConf.NodeId), constvar.NsqTopicPullDataResponse)
+	err = caller.Send(msg)
+	if err != nil {
+		logx.Errorf("send pull data msg error:%v, msg:%+v", err.Error(), msg)
+	}
+}
+
+func QueryClusterStatus() {
+	clusterStatus, nodeQuantity := serf.QueryClusterStatusAndNodeQuantity()
+	conf.Conf.SerfClusterStatus = clusterStatus
+	conf.Conf.ClusterNodeQuantity = nodeQuantity
+}
+
+func ProblemCheck() {
+	problem.Check()
+}
+
+func CheckNsqConn() {
+	var err error
+	var status constvar.SystemStatusValue
+	if nsq.Ping() {
+		status = constvar.SystemStatusValueNormal
+	} else {
+		status = constvar.SystemStatusValueUnNormal
+	}
+	old, err := model.NewSystemStatusSearch().SetKey(constvar.SystemStatusKeyNsq).First()
+	if err != nil {
+		logx.Errorf("get nsq status err:%v", err)
+		return
+	}
+	if old.Value == status {
+		return
+	}
+	err = model.NewSystemStatusSearch().SetKey(constvar.SystemStatusKeyNsq).Updates(map[string]interface{}{"value": status})
+	if err != nil {
+		logx.Errorf("update nsq status err:%v", err)
+	}
 }

--
Gitblit v1.8.0