diff --git a/services/report/implments/FilterDataInfo.service.impl.go b/services/report/implments/FilterDataInfo.service.impl.go index 163fe75..732a43a 100644 --- a/services/report/implments/FilterDataInfo.service.impl.go +++ b/services/report/implments/FilterDataInfo.service.impl.go @@ -327,10 +327,18 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM workShiftDao := baseDal.NewWorkShiftDAO(localSession, baseModel.PlantNr, user) todayString := time.Now().Format(grmi.DateOutFormat) today, _ := time.ParseInLocation(grmi.DateOutFormat, time.Now().Format(grmi.DateOutFormat), utils.TimezoneLocation) + yesterday, err := time.ParseInLocation(grmi.DateOutFormat, time.Now().AddDate(0, 0, -1).Format(grmi.DateOutFormat), utils.TimezoneLocation) + if err != nil { + return nil, err + } todayBegin, err := time.ParseInLocation(grmi.DateOutFormat, time.Now().Format(grmi.DateOutFormat), utils.TimezoneLocation) if err != nil { return nil, err } + yesterdayBegin, err := time.ParseInLocation(grmi.DateOutFormat, time.Now().AddDate(0, 0, -1).Format(grmi.DateOutFormat), utils.TimezoneLocation) + if err != nil { + return nil, err + } //todayBegin, err := time.ParseInLocation(grmi.DateOutFormat, "2021-06-12", utils.TimezoneLocation) //if err != nil { // return nil, err @@ -397,7 +405,10 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM if workPlace == nil { return nil, grmi.NewBusinessError("该工位不存在") } + // 获取今天和昨天的日模型 var dayModelNr int + var yesterdayModelNr int + if workPlace.WorkCalendarNr != 0 { workCalendar, err := calendarHeadDao.SelectOne(workPlace.WorkCalendarNr) if err != nil { @@ -413,10 +424,16 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM for _, calendar := range calendarLstLi { if calendar.WorkDate.Restore().Equal(today) { dayModelNr = calendar.DayModelNr + } else if calendar.WorkDate.Restore().Equal(yesterday) { + yesterdayModelNr = calendar.DayModelNr + } + if dayModelNr != 0 && yesterdayModelNr != 0 { break } } } + var weekModelLstLi []baseModel.WeekModelLst + if dayModelNr == 0 { weekModel, err := weekModelHeadDao.SelectOne(workPlace.WeekModelNr) if err != nil { @@ -425,8 +442,8 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM if weekModel == nil { return nil, grmi.NewBusinessError("不存在工位对应的周模型") } - weekModelLstLi, err := weekModelLstDao.Select([]grmi.Predicate{baseMeta.WeekModelLst_WeekModelNr.NewPredicate(grmi.Equal, weekModel.WeekModelNr)}, []grmi.Field{baseMeta.WeekModelLst_WorkDate}) - weekDay := time.Now().Weekday() + weekModelLstLi, err = weekModelLstDao.Select([]grmi.Predicate{baseMeta.WeekModelLst_WeekModelNr.NewPredicate(grmi.Equal, weekModel.WeekModelNr)}, []grmi.Field{baseMeta.WeekModelLst_WorkDate}) + weekDay := today.Weekday() for _, weekModelLst := range weekModelLstLi { if weekDay == weekModelLst.WorkDate.Restore().Weekday() { dayModelNr = weekModelLst.DayModelNr @@ -434,25 +451,110 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM } } } - if dayModelNr == 0 { - return nil, grmi.NewBusinessError("为获取到该工位的日模型主数据") + if yesterdayModelNr == 0 { + weekModel, err := weekModelHeadDao.SelectOne(workPlace.WeekModelNr) + if err != nil { + return nil, err + } + if weekModel == nil { + return nil, grmi.NewBusinessError("不存在工位对应的周模型") + } + if weekModelLstLi == nil { + weekModelLstLi, err = weekModelLstDao.Select([]grmi.Predicate{baseMeta.WeekModelLst_WeekModelNr.NewPredicate(grmi.Equal, weekModel.WeekModelNr)}, []grmi.Field{baseMeta.WeekModelLst_WorkDate}) + } + weekDay := yesterday.Weekday() + for _, weekModelLst := range weekModelLstLi { + if weekDay == weekModelLst.WorkDate.Restore().Weekday() { + yesterdayModelNr = weekModelLst.DayModelNr + break + } + } + } + if dayModelNr == 0 || yesterdayModelNr == 0{ + return nil, grmi.NewBusinessError("未获取到该工位的日模型主数据") } dayModel, err := dayModelDao.SelectOne(dayModelNr) if err != nil { return nil, err } if dayModel == nil { - return nil, grmi.NewBusinessError("为获取到该工位的日模型主数据") + return nil, grmi.NewBusinessError("未获取到该工位的今天日模型主数据") } - + yesterdayModel, err := dayModelDao.SelectOne(yesterdayModelNr) + if err != nil { + return nil, err + } + if yesterdayModel == nil { + return nil, grmi.NewBusinessError("未获取到该工位的昨天日模型主数据") + } + var yesterdayEnd int + var yesterdayStart int + var yesterdayLength int var start time.Time var end time.Time + // 求取昨天的开始 结束时间和工作时长 + if yesterdayModel.WorkShiftToggle { + if yesterdayModel.S1WorkShiftNr == 0 { + return nil, grmi.NewBusinessError("绑定的日模型错误") + } + + s1WorkShift, err := workShiftDao.SelectOne(yesterdayModel.S1WorkShiftNr) + if err != nil { + return nil, err + } + if s1WorkShift == nil { + return nil, grmi.NewBusinessError("绑定的日模型错误, 人员班组不存在") + } + yesterdayLength += s1WorkShift.SLen + yesterdayStart = s1WorkShift.SBeg + yesterdayEnd = s1WorkShift.SEnd + if yesterdayModel.S2WorkShiftNr != 0 { + s2WorkShift, err := workShiftDao.SelectOne(yesterdayModel.S2WorkShiftNr) + if err != nil { + return nil, err + } + if s2WorkShift == nil { + return nil, grmi.NewBusinessError("绑定的日模型错误, 人员班组不存在") + } + yesterdayEnd = s2WorkShift.SEnd + yesterdayLength += s2WorkShift.SLen + } + if yesterdayModel.S3WorkShiftNr != 0 { + s3WorkShift, err := workShiftDao.SelectOne(yesterdayModel.S3WorkShiftNr) + if err != nil { + return nil, err + } + if s3WorkShift == nil { + return nil, grmi.NewBusinessError("绑定的日模型错误, 人员班组不存在") + } + yesterdayEnd = s3WorkShift.SEnd + yesterdayLength += s3WorkShift.SLen + } + } else { + yesterdayStart = yesterdayModel.S1Beg + yesterdayEnd = yesterdayModel.S1End + yesterdayLength += yesterdayModel.S1Len + if yesterdayModel.S2End != 0 { + yesterdayEnd = yesterdayModel.S2End + yesterdayLength += yesterdayModel.S2Len + } + if yesterdayModel.S3End != 0 { + yesterdayEnd = yesterdayModel.S3End + yesterdayLength += yesterdayModel.S3Len + } + } + yesterdayStartStr := yesterdayBegin.Add(time.Duration(yesterdayStart) * time.Second).Format(grmi.DatetimeOutFormat) + yesterdayEndStr := yesterdayBegin.Add(time.Duration(yesterdayEnd) * time.Second).Format(grmi.DatetimeOutFormat) + + + // 求取今天的开始 结束时间 var startInt int if dayModel.WorkShiftToggle { if dayModel.S1WorkShiftNr == 0 { return nil, grmi.NewBusinessError("绑定的日模型错误") } + s1WorkShift, err := workShiftDao.SelectOne(dayModel.S1WorkShiftNr) if err != nil { return nil, err @@ -491,7 +593,6 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM endTime = time.Now().Format(grmi.DatetimeOutFormat) endTime = endTime[11:len(endTime)] } - if startTime != "" { startTimeStr := todayString + " " + startTime start, err = time.ParseInLocation(grmi.DatetimeOutFormat, startTimeStr, utils.TimezoneLocation) @@ -506,8 +607,8 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM if err != nil { return nil, err } - dayModelList := impl.InitDayModelList(dayModel, today) - duration := impl.GetValidDuration(dayModelList, start, end) + //dayModelList := impl.InitDayModelList(dayModel, today) + //duration := impl.GetValidDuration(dayModelList, start, end) startStr := start.Format(grmi.DatetimeOutFormat) endStr := end.Format(grmi.DatetimeOutFormat) var displayData model.AWMDisplay @@ -515,6 +616,39 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM if err != nil { return result, err } + + yesterdayArcLi, err := dao.SelectDisplayData(descCN, yesterdayStartStr, yesterdayEndStr) + if err != nil { + return result, err + } + // 计算昨天的mu + var mu float64 + yesterdayCapacity := 0 + for _, dataInfo := range yesterdayArcLi { + targetValue := reflect.ValueOf(dataInfo).FieldByName(statisticField).String() + target, err := strconv.ParseFloat(targetValue, 64) + if err != nil { + return result, err + } + if max != 0 && target > max { + continue + } + if min != 0 && target < min { + continue + } + yesterdayCapacity++ + } + + if yesterdayCapacity == 0 { + mu = 0 + } else { + mu = float64(yesterdayCapacity) / (float64(yesterdayLength) / 3600) + } + mu, err = strconv.ParseFloat(fmt.Sprintf("%.2f", mu), 64) + if err != nil { + return result, err + } + // 处理今天的数据 displayArcLi := make([]model.FilterDataInfo, 0) var sum float64 for _, dataInfo := range arcLi { @@ -533,23 +667,19 @@ func (impl *FilterDataInfoServiceImplement) GetDisplayData() (result []model.AWM sum += target } var avg float64 - var mu float64 - capacity := len(arcLi) - if len(arcLi) == 0 { + + capacity := len(displayArcLi) + if capacity == 0 { avg = 0 - mu = 0 } else { avg = sum / float64(capacity) - mu = float64(capacity) / duration.Hours() + } avg, err = strconv.ParseFloat(fmt.Sprintf("%.2f", avg), 64) if err != nil { return result, err } - mu, err = strconv.ParseFloat(fmt.Sprintf("%.2f", mu), 64) - if err != nil { - return result, err - } + displayData.MuTitle = muTitle displayData.MuUom = muUom displayData.Capacity = capacity