package service import ( "apsClient/model" "errors" "github.com/mitchellh/mapstructure" ) type ProgressService struct { } func NewProgressService() *ProgressService { return &ProgressService{} } // UpdateProgress 仅限plc数据采集定时任务用(缺少工序id参数) func (slf ProgressService) UpdateProgress(deviceID string, channel int32, finishedQuantity int) (err error) { progress, err := slf.GetCurrentProgress(deviceID, channel) if err != nil { return err } if progress == nil { return errors.New("progress cache not found") } 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) (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 int) (err error) { progress, err := slf.GetProcedureByProceduresId(proceduresId) if err != nil { return err } if progress == nil { return errors.New("progress not exists") } if finishedQuantity > progress.FinishedQuantity { //当有变化时才更新 return model.NewProceduresSearch(nil).SetId(progress.ID).UpdateByMap(map[string]interface{}{"finished_quantity": finishedQuantity}) } return nil } 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 []*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, &progressList) return }