package service import ( "apsClient/model" "errors" "gorm.io/gorm" ) type ProgressService struct { } func NewProgressService() *ProgressService { return &ProgressService{} } func (slf ProgressService) AddProgress(db *gorm.DB, procedure *model.Procedures, order *model.Order) error { progress := &model.ProductionProgress{ WorkOrderID: procedure.WorkOrderID, OrderID: procedure.OrderID, ProcedureID: procedure.ProceduresInfo.ProcedureID, DeviceID: procedure.DeviceID, TotalQuantity: order.Amount.IntPart(), } err := model.NewProductionProgressSearch(db).Create(progress) if err != nil { return err } ProgressCacheSet(progress) return nil } func (slf ProgressService) UpdateProgress(finishedQuantity int64) (err error) { progressCache, err := slf.GetCurrentProgress() if err != nil { return err } if progressCache == nil { return errors.New("progress cache not found") } if finishedQuantity > progressCache.FinishedQuantity { //当有变化时才更新 progressCache.FinishedQuantity = finishedQuantity ProgressCacheSet(progressCache) return model.NewProductionProgressSearch(nil).SetId(progressCache.ID).Save(progressCache) } 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 }