package service
|
|
import (
|
"apsClient/conf"
|
"apsClient/model"
|
"errors"
|
"github.com/jinzhu/gorm"
|
)
|
|
type ProgressService struct {
|
}
|
|
func NewProgressService() *ProgressService {
|
return &ProgressService{}
|
}
|
|
func (slf ProgressService) Add(db *gorm.DB, procedure *model.Procedures, order *model.Order) error {
|
_, err := model.NewProductionProgressSearch(db).SetProcedureId(procedure.ProcedureID).SetWorkOrderId(procedure.WorkOrderID).First()
|
if err == gorm.ErrRecordNotFound {
|
progress := &model.ProductionProgress{
|
WorkOrderID: procedure.WorkOrderID,
|
OrderID: procedure.OrderID,
|
ProcedureID: procedure.ProceduresInfo.ProcedureID,
|
DeviceID: procedure.DeviceID,
|
TotalQuantity: order.Amount.IntPart(),
|
Channel: procedure.Channel,
|
}
|
err := model.NewProductionProgressSearch(db).Create(progress)
|
if err != nil {
|
return err
|
}
|
ProgressCacheSet(procedure.Channel, progress)
|
}
|
|
return nil
|
}
|
|
func (slf ProgressService) UpdateProgress(channel int32, finishedQuantity int64) (err error) {
|
progressCache, err := slf.GetCurrentProgress(channel)
|
if err != nil {
|
return err
|
}
|
if progressCache == nil {
|
return errors.New("progress cache not found")
|
}
|
if finishedQuantity > progressCache.FinishedQuantity { //当有变化时才更新
|
progressCache.FinishedQuantity = finishedQuantity
|
ProgressCacheSet(channel, progressCache)
|
return model.NewProductionProgressSearch(nil).SetId(progressCache.ID).Save(progressCache)
|
}
|
return nil
|
}
|
|
func (slf ProgressService) GetCurrentProgress(channel int32) (progressCache *model.ProductionProgress, err error) {
|
var ok bool
|
progressCache, ok = ProgressCacheGet(channel)
|
if !ok {
|
progressCache, err = model.NewProductionProgressSearch(nil).SetDeviceId(conf.Conf.System.DeviceId).SetChannel(channel).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(channel, progressCache)
|
}
|
}
|
return
|
}
|
|
// GetProgressList 获取待同步进度工序
|
func (slf ProgressService) GetProgressList() (progressList []*model.ProductionProgress, err error) {
|
progressList, err = model.NewProductionProgressSearch(nil).SetUnFinished().SetOrder("id desc").SetPage(1, 100).FindNotTotal()
|
return
|
}
|