From 46d841d93d20773dd2cf31fa1caa7199c65fe037 Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期四, 07 九月 2023 11:25:37 +0800 Subject: [PATCH] 定时同步生产进度到云端 --- constvar/const.go | 5 +- service/progress.go | 38 ++++++++++++------ crontask/cron_task.go | 21 ++++++++++ 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/constvar/const.go b/constvar/const.go index 9f21401..d92f9f9 100644 --- a/constvar/const.go +++ b/constvar/const.go @@ -6,8 +6,9 @@ NsqTopicSendPlcAddress = "aps.%v.sendPlcAddress" NsqTopicProcessParamsRequest = "aps.%v.processParams.request" NsqTopicProcessParamsResponse = "aps.%v.processParams.response" - NsqTopicApsProcessParams = "aps.%v.aps.processParams" //鏈変簡鏂扮殑宸ヨ壓妯″瀷 - NsqTopicTaskProcedureStatusUpdate = "aps.%v.task.procedure.status" //宸ュ簭鐘舵�佹洿鏂� + NsqTopicApsProcessParams = "aps.%v.aps.processParams" //鏈変簡鏂扮殑宸ヨ壓妯″瀷 + NsqTopicTaskProcedureStatusUpdate = "aps.%v.task.procedure.status" //宸ュ簭鐘舵�佹洿鏂� + NsqTopicSyncTaskProgress = "aps.%v.task.procedure.progress" //宸ュ簭鐢熶骇杩涘害 ) type PlcStartAddressType int diff --git a/crontask/cron_task.go b/crontask/cron_task.go index 35fde2b..28301bf 100644 --- a/crontask/cron_task.go +++ b/crontask/cron_task.go @@ -3,9 +3,11 @@ 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" @@ -39,7 +41,7 @@ return err } - s.Every(totalNumberTimeInterval).Seconds().StartImmediately().Do(func() { + s.Every(totalNumberTimeInterval).Seconds().Do(func() { plcConfig, code := service.NewDevicePlcService().GetDevicePlc() if code != ecode.OK { return @@ -51,6 +53,23 @@ logx.Infof("plc read total number:%v, err:%v", totalNumber, err) }) + s.Every(60).Seconds().StartImmediately().Do(SyncProductionProgress) //鍚屾鐢熶骇鏁版嵁 s.StartAsync() return nil } + +func SyncProductionProgress() { + progress, err := service.NewProgressService().GetCurrentProgress() + 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()) + } +} diff --git a/service/progress.go b/service/progress.go index bb0d859..5ebd638 100644 --- a/service/progress.go +++ b/service/progress.go @@ -30,19 +30,9 @@ } func (slf ProgressService) UpdateProgress(finishedQuantity int64) (err error) { - var progressCache *model.ProductionProgress - progressCache, ok := ProgressCacheGet() - if !ok { - progressCache, err = model.NewProductionProgressSearch(nil).SetOrder("id desc").First() - if err == gorm.ErrRecordNotFound { - return errors.New("progress cache not found") - } - if err != nil { - return err - } - if progressCache.FinishedQuantity < progressCache.TotalQuantity { - ProgressCacheSet(progressCache) - } + progressCache, err := slf.GetCurrentProgress() + if err != nil { + return err } if progressCache == nil { return errors.New("progress cache not found") @@ -54,3 +44,25 @@ } return nil } + +func (slf ProgressService) GetCurrentProgress() (progressCache *model.ProductionProgress, err error) { + var ok bool + progressCache, ok = ProgressCacheGet() + if !ok { + progressCache, err = model.NewProductionProgressSearch(nil).SetOrder("id desc").First() + if err == gorm.ErrRecordNotFound { + return nil, errors.New("progress not found") + } + if err != nil { + return nil, err + } + + if progressCache.FinishedQuantity >= progressCache.TotalQuantity { //濡傛灉瀹屾垚閲忓ぇ浜庣瓑浜庢�婚噺灏辫鏄庢槸涓婁竴涓凡瀹屾垚鐨勪换鍔★紝涓嶆槸褰撳墠杩涜涓殑浠诲姟銆� + progressCache = nil + } + if progressCache != nil { + ProgressCacheSet(progressCache) + } + } + return +} -- Gitblit v1.8.0