package service
|
|
import (
|
"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).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)
|
if err != nil {
|
return err
|
}
|
if progressCache == 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)
|
}
|
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)
|
}
|
}
|
return
|
}
|
|
func (slf ProgressService) UpdateProgressByProceduresId(proceduresId uint, finishedQuantity int64) (err error) {
|
progress, err := slf.GetCurrentProgressByProceduresId(proceduresId)
|
if err != nil {
|
return err
|
}
|
if progress == nil {
|
return errors.New("progress not exists")
|
}
|
if finishedQuantity > progress.FinishedQuantity { //当有变化时才更新
|
progress.FinishedQuantity = finishedQuantity
|
return model.NewProductionProgressSearch(nil).SetId(progress.ID).Save(progress)
|
}
|
return nil
|
}
|
|
func (slf ProgressService) GetCurrentProgressByProceduresId(proceduresId uint) (progress *model.ProductionProgress, err error) {
|
progress, err = model.NewProductionProgressSearch(nil).SetProceduresId(proceduresId).First()
|
if err != nil {
|
return nil, err
|
}
|
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
|
}
|