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