package service import ( "apsClient/conf" "apsClient/constvar" "apsClient/model" "apsClient/model/request" "apsClient/pkg/logx" "apsClient/pkg/snowflake" "encoding/json" "errors" "github.com/jinzhu/gorm" "time" ) func ReportWorkList(procedureId uint, page, pageSize int) (list []*model.ReportWork, total int64, err error) { return model.NewReportWorkSearch(nil).SetProceduresId(procedureId).SetPage(page, pageSize).SetDeviceId(conf.Conf.CurrentDeviceID).SetOrder("id desc").Find() } func AddReportWork(params request.ReportWork) (err error) { procedure, err := model.NewProceduresSearch(nil).SetId(params.ProcedureId).First() if err != nil { return err } if procedure.Status != model.ProcedureStatusProcessing { return errors.New("当前工序未开始或已结束,不允许报工") } nowTs := time.Now().Unix() var startTs int64 var workerName string for _, worker := range procedure.ProceduresInfo.Workers { if params.WorkerID == worker.WorkerID { workerName = worker.WorkerName } } if workerName == "" { return errors.New("没有找到当前值班人员") } finishAmount := params.ReportAmount lastReportWork, err := GetLastReportWork(params.ProcedureId) if err == nil { if params.ReportAmount < lastReportWork.ReportAmount { return errors.New("报工数量不能少于上次报工数") } finishAmount = params.ReportAmount - lastReportWork.ReportAmount startTs = lastReportWork.EndTime } else { startTs = procedure.RealStartTime } record := &model.ReportWork{ ProceduresID: params.ProcedureId, ProductProcedureID: procedure.ProductProcedureID, WorkOrderID: procedure.WorkOrderID, DeviceID: procedure.DeviceID, DeviceName: procedure.ProceduresInfo.DeviceName, ProcedureID: procedure.ProcedureID, StartTime: startTs, EndTime: nowTs, ReportAmount: params.ReportAmount, FinishAmount: finishAmount, WorkerID: params.WorkerID, WorkerName: workerName, WorkerTime: nowTs - startTs, BarCode: snowflake.GenerateIdStr(), } err = model.WithTransaction(func(db *gorm.DB) error { err = model.NewReportWorkSearch(db).Create(record) if err != nil { return err } content, err := json.Marshal(record) if err != nil { return err } err = model.NewReportsToCloudSearch(db).Create(&model.ReportsToCloud{ ReportType: constvar.ReportTypeReportWork, Content: string(content), }) if err != nil { return err } return nil }) if err != nil { logx.Errorf("save report work transaction error: %v", err) return err } err = NewProgressService().UpdateProgressByProceduresId(procedure.ID, params.ReportAmount) return nil } // GetLastReportWork 获取最后一个报工 func GetLastReportWork(procedureId uint) (reportWork *model.ReportWork, err error) { return model.NewReportWorkSearch(nil).SetProceduresId(procedureId).SetDeviceId(conf.Conf.CurrentDeviceID).SetOrder("id desc").First() }