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
|
}
|