From cf96f6bc1fb484fde16bd5ed6d49534c96958022 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 25 九月 2023 15:43:12 +0800
Subject: [PATCH] fix

---
 crontask/cron_task.go |   84 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 74 insertions(+), 10 deletions(-)

diff --git a/crontask/cron_task.go b/crontask/cron_task.go
index e27df3e..9454dbe 100644
--- a/crontask/cron_task.go
+++ b/crontask/cron_task.go
@@ -1,44 +1,108 @@
 package crontask
 
 import (
+	"apsClient/conf"
 	"apsClient/constvar"
+	"apsClient/nsq"
 	"apsClient/pkg/ecode"
 	"apsClient/pkg/logx"
 	"apsClient/service"
+	"fmt"
 	"github.com/go-co-op/gocron"
+	"github.com/spf13/cast"
 	"time"
 )
 
 func InitTask() error {
+
+	finishNumberTimeInterval := conf.Conf.PLC.FinishNumberTimeInterval
+	totalNumberTimeInterval := conf.Conf.PLC.TotalNumberTimeInterval
+	if finishNumberTimeInterval == 0 {
+		finishNumberTimeInterval = 6
+	}
+	if totalNumberTimeInterval == 0 {
+		totalNumberTimeInterval = 60
+	}
 	s := gocron.NewScheduler(time.UTC)
-	_, err := s.Every(9).Seconds().StartImmediately().Do(func() {
+	_, err := s.Every(finishNumberTimeInterval).Seconds().Do(func() {
 		plcConfig, code := service.NewDevicePlcService().GetDevicePlc()
 		if code != ecode.OK {
 			return
 		}
-		finishNumber, err := service.PlcRead(plcConfig, constvar.PlcStartAddressTypeFinishNumber)
-		if err == nil && finishNumber != 0 {
-			service.PlcCacheSet(constvar.PlcCacheKeyFinishNumber, finishNumber)
+		for _, addressItem := range plcConfig.Details {
+			if addressItem.FieldName == constvar.PlcStartAddressTypeFinishNumber {
+				value, err := service.PlcReadDirect(plcConfig, addressItem.StartAddress, addressItem.Length, addressItem.Type)
+				if err != nil {
+					logx.Infof("plc read finish number err: %v", err)
+					continue
+				}
+				finishNumber := cast.ToInt64(value)
+				if finishNumber != 0 {
+					service.PlcCacheSet(addressItem.Channel, constvar.PlcCacheKeyFinishNumber, finishNumber)
+					_ = service.NewProgressService().UpdateProgress(addressItem.Channel, cast.ToInt64(finishNumber))
+				}
+				logx.Infof("plc read finish number: %v", finishNumber)
+			}
 		}
-		logx.Infof("plc read finish number:%v, err:%v", finishNumber, err)
 
 	})
 	if err != nil {
 		return err
 	}
 
-	s.Every(60).Seconds().StartImmediately().Do(func() {
+	s.Every(totalNumberTimeInterval).Seconds().Do(func() {
 		plcConfig, code := service.NewDevicePlcService().GetDevicePlc()
 		if code != ecode.OK {
 			return
 		}
-		totalNumber, err := service.PlcRead(plcConfig, constvar.PlcStartAddressTypeTotalNumber)
-		if err == nil && totalNumber != 0 {
-			service.PlcCacheSet(constvar.PlcCacheKeyTotalNumber, totalNumber)
+		for _, addressItem := range plcConfig.Details {
+			if addressItem.FieldName == constvar.PlcStartAddressTypeTotalNumber {
+				value, err := service.PlcReadDirect(plcConfig, addressItem.StartAddress, addressItem.Length, addressItem.Type)
+				if err != nil {
+					logx.Infof("plc read total number err: %v", err)
+					continue
+				}
+				totalNumber := cast.ToInt64(value)
+				if totalNumber != 0 {
+					service.PlcCacheSet(addressItem.Channel, constvar.PlcCacheKeyTotalNumber, totalNumber)
+					_ = service.NewProgressService().UpdateProgress(addressItem.Channel, cast.ToInt64(totalNumber))
+				}
+				logx.Infof("plc read total number: %v", totalNumber)
+			}
 		}
-		logx.Infof("plc read total number:%v, err:%v", totalNumber, err)
+
 	})
 
+	s.Every(180).Seconds().Do(SyncProductionProgress) //鍚屾鐢熶骇鏁版嵁
 	s.StartAsync()
 	return nil
 }
+
+func SyncProductionProgress() {
+	plcConfig, code := service.NewDevicePlcService().GetDevicePlc()
+	if code != ecode.OK {
+		return
+	}
+	var channels []int32
+	for _, item := range plcConfig.Details {
+		if item.FieldName == constvar.PlcStartAddressTypeFinishNumber {
+			channels = append(channels, item.Channel)
+		}
+	}
+	for _, channel := range channels {
+		progress, err := service.NewProgressService().GetCurrentProgress(channel)
+		if err != nil {
+			return
+		}
+		if progress == nil {
+			return
+		}
+
+		caller := nsq.NewCaller(fmt.Sprintf(constvar.NsqTopicSyncTaskProgress, conf.Conf.NsqConf.NodeId), "")
+		err = caller.Send(progress)
+		if err != nil {
+			logx.Errorf("SyncProductionProgress error:%v", err.Error())
+		}
+	}
+
+}

--
Gitblit v1.8.0