|
@@ -53,22 +53,20 @@ func NewNeckRingEstrusWarning(
|
|
|
// calculatePzHour 计算最佳配置时间
|
|
|
func (n *NeckRingEstrusWarning) calculatePzHour(lact int32) time.Time {
|
|
|
var pzHour time.Time
|
|
|
-
|
|
|
- dateTime := n.DateTime
|
|
|
- firstTime := n.FirstTime
|
|
|
+ dateTime, _ := time.Parse(LayoutTime, n.DateTime)
|
|
|
+ firstTime, _ := time.Parse(LayoutTime, n.FirstTime)
|
|
|
|
|
|
// 条件判断
|
|
|
- if n.IsPeak == pasturePb.IsShow_Ok || n.DateTime.Sub(n.FirstTime).Hours() >= 8 {
|
|
|
- pzHour = n.DateTime.Add(8 * time.Hour) // v.datetime + INTERVAL 8 HOUR
|
|
|
+ if n.IsPeak == pasturePb.IsShow_Ok || dateTime.Sub(firstTime).Hours() >= 8 {
|
|
|
+ pzHour = dateTime.Add(8 * time.Hour) // v.datetime + INTERVAL 8 HOUR
|
|
|
} else {
|
|
|
- pzHour = n.FirstTime.Add(16 * time.Hour) // v.firsttime + INTERVAL 16 HOUR
|
|
|
+ pzHour = firstTime.Add(16 * time.Hour) // v.firsttime + INTERVAL 16 HOUR
|
|
|
}
|
|
|
|
|
|
- // 时间调整
|
|
|
+ // 胎次调整
|
|
|
if lact >= 3 {
|
|
|
pzHour = pzHour.Add(-1 * time.Hour) // 减去 1 小时
|
|
|
}
|
|
|
-
|
|
|
return pzHour
|
|
|
}
|
|
|
|
|
@@ -99,11 +97,12 @@ func (n NeckRingEstrusWarningSlice) ToPB(cowMap map[int64]*Cow, eventLogMap map[
|
|
|
Lact: cow.Lact,
|
|
|
CalvingAge: cow.CalvingAge,
|
|
|
AbortionAge: cow.AbortionAge,
|
|
|
- OptimumMatingStartTime: "",
|
|
|
- OptimumMatingEndTime: "",
|
|
|
+ OptimumMatingStartTime: pzHour.Add(-4 * time.Hour).Format(LayoutTime),
|
|
|
+ OptimumMatingEndTime: pzHour.Add(4 * time.Hour).Format(LayoutTime),
|
|
|
LastBreedEventDetails: lastBreedEventDetails,
|
|
|
Level: v.Level,
|
|
|
EstrusInterval: 0,
|
|
|
+ BestMatingTime: pzHour.Format(LayoutTime),
|
|
|
}
|
|
|
}
|
|
|
return res
|