From ba442a966e3a0a79182f32110e6849d20c79fb28 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期四, 30 十一月 2023 21:18:26 +0800
Subject: [PATCH] 重构生产进度存储和同步

---
 service/progress.go |   97 ++++++++++++++++++++----------------------------
 1 files changed, 40 insertions(+), 57 deletions(-)

diff --git a/service/progress.go b/service/progress.go
index 4205413..cc67368 100644
--- a/service/progress.go
+++ b/service/progress.go
@@ -3,7 +3,7 @@
 import (
 	"apsClient/model"
 	"errors"
-	"github.com/jinzhu/gorm"
+	"github.com/mitchellh/mapstructure"
 )
 
 type ProgressService struct {
@@ -13,71 +13,32 @@
 	return &ProgressService{}
 }
 
-func (slf ProgressService) Add(db *gorm.DB, procedure *model.Procedures, order *model.Order) error {
-	_, err := model.NewProductionProgressSearch(db).SetProceduresId(procedure.ID).First()
-	if err == gorm.ErrRecordNotFound {
-		progress := &model.ProductionProgress{
-			ProceduresID:       procedure.ID,
-			WorkOrderID:        procedure.WorkOrderID,
-			OrderID:            procedure.OrderID,
-			ProcedureID:        procedure.ProceduresInfo.ProcedureID,
-			ProductProcedureID: procedure.ProductProcedureID,
-			DeviceID:           procedure.DeviceID,
-			TotalQuantity:      order.Amount.IntPart(),
-			Channel:            procedure.Channel,
-		}
-		err := model.NewProductionProgressSearch(db).Create(progress)
-		if err != nil {
-			return err
-		}
-		ProgressCacheSet(procedure.DeviceID, procedure.Channel, progress)
-	}
-
-	return nil
-}
-
 // UpdateProgress 浠呴檺plc鏁版嵁閲囬泦瀹氭椂浠诲姟鐢�(缂哄皯宸ュ簭id鍙傛暟)
-func (slf ProgressService) UpdateProgress(deviceID string, channel int32, finishedQuantity int64) (err error) {
-	progressCache, err := slf.GetCurrentProgress(deviceID, channel)
+func (slf ProgressService) UpdateProgress(deviceID string, channel int32, finishedQuantity int) (err error) {
+	progress, err := slf.GetCurrentProgress(deviceID, channel)
 	if err != nil {
 		return err
 	}
-	if progressCache == nil {
+	if progress == nil {
 		return errors.New("progress cache not found")
 	}
-	if finishedQuantity > progressCache.FinishedQuantity { //褰撴湁鍙樺寲鏃舵墠鏇存柊
-		progressCache.FinishedQuantity = finishedQuantity
-		ProgressCacheSet(deviceID, channel, progressCache)
-		return model.NewProductionProgressSearch(nil).SetId(progressCache.ID).Save(progressCache)
+	if finishedQuantity > progress.FinishedQuantity { //褰撴湁鍙樺寲鏃舵墠鏇存柊
+		return model.NewProceduresSearch(nil).SetId(progress.ID).UpdateByMap(map[string]interface{}{"finished_quantity": finishedQuantity})
 	}
 	return nil
 }
 
 // GetCurrentProgress 浠呴檺plc鏁版嵁閲囬泦瀹氭椂浠诲姟鐢�(缂哄皯宸ュ簭id鍙傛暟)
-func (slf ProgressService) GetCurrentProgress(deviceID string, channel int32) (progressCache *model.ProductionProgress, err error) {
-	var ok bool
-	progressCache, ok = ProgressCacheGet(deviceID, channel)
-	if !ok {
-		progressCache, err = model.NewProductionProgressSearch(nil).SetDeviceId(deviceID).SetChannel(channel).SetOrder("id asc").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(deviceID, channel, progressCache)
-		}
+func (slf ProgressService) GetCurrentProgress(deviceID string, channel int32) (progress *model.Procedures, err error) {
+	progress, err = model.NewProceduresSearch(nil).SetDeviceId(deviceID).SetChannels([]int32{channel}).SetStatus(model.ProcedureStatusProcessing).SetOrder("id desc").First()
+	if err != nil {
+		return nil, err
 	}
 	return
 }
 
-func (slf ProgressService) UpdateProgressByProceduresId(proceduresId uint, finishedQuantity int64) (err error) {
-	progress, err := slf.GetCurrentProgressByProceduresId(proceduresId)
+func (slf ProgressService) UpdateProgressByProceduresId(proceduresId uint, finishedQuantity int) (err error) {
+	progress, err := slf.GetProcedureByProceduresId(proceduresId)
 	if err != nil {
 		return err
 	}
@@ -85,22 +46,44 @@
 		return errors.New("progress not exists")
 	}
 	if finishedQuantity > progress.FinishedQuantity { //褰撴湁鍙樺寲鏃舵墠鏇存柊
-		progress.FinishedQuantity = finishedQuantity
-		return model.NewProductionProgressSearch(nil).SetId(progress.ID).Save(progress)
+		return model.NewProceduresSearch(nil).SetId(progress.ID).UpdateByMap(map[string]interface{}{"finished_quantity": finishedQuantity})
 	}
+
 	return nil
 }
 
-func (slf ProgressService) GetCurrentProgressByProceduresId(proceduresId uint) (progress *model.ProductionProgress, err error) {
-	progress, err = model.NewProductionProgressSearch(nil).SetProceduresId(proceduresId).First()
+func (slf ProgressService) GetProcedureByProceduresId(proceduresId uint) (progress *model.Procedures, err error) {
+	progress, err = model.NewProceduresSearch(nil).SetId(proceduresId).First()
 	if err != nil {
 		return nil, err
 	}
 	return
 }
 
+type ProductionProgress struct {
+	WorkOrderID        string `json:"workOrderID"`
+	OrderID            string `json:"orderID"`
+	ProcedureID        string `json:"procedureId"`
+	ProductProcedureID string `json:"productProcedureID"` //浜у搧宸ュ簭id
+	DeviceID           string `json:"deviceId"`
+	FinishedQuantity   int64  `json:"finishedQuantity"`
+}
+
 // GetProgressList 鑾峰彇寰呭悓姝ヨ繘搴﹀伐搴�
-func (slf ProgressService) GetProgressList() (progressList []*model.ProductionProgress, err error) {
-	progressList, err = model.NewProductionProgressSearch(nil).SetUnFinished().SetOrder("id desc").SetPage(1, 100).FindNotTotal()
+func (slf ProgressService) GetProgressList() (progressList []*ProductionProgress, err error) {
+	var procedureList []*model.Procedures
+	procedureList, err = model.NewProceduresSearch(nil).
+		SetFields([]string{"id",
+			"finished_quantity",
+			"work_order_id",
+			"order_id",
+			"procedure_id",
+			"product_procedure_id",
+			"device_id",
+		}).SetStatus(model.ProcedureStatusProcessing).SetOrder("id desc").FindNotTotal()
+	if err != nil {
+		return
+	}
+	err = mapstructure.Decode(procedureList, procedureList)
 	return
 }

--
Gitblit v1.8.0