|
@@ -62,7 +62,7 @@ func (e *Entry) EntryCowEstrus(pastureId int64) (err error) {
|
|
|
}
|
|
|
nowTime := time.Now().Local()
|
|
|
e.CowEstrusWarning(pastureId, xToday, nowTime)
|
|
|
- e.UpdateNewNeckRingEstrus(pastureId, nowTime)
|
|
|
+ e.UpdateNewNeckRingEstrus(pastureId, xToday, nowTime)
|
|
|
return nil
|
|
|
}
|
|
|
|
|
@@ -186,11 +186,11 @@ func (e *Entry) CowEstrusWarning(pastureId int64, xToday *XToday, nowTime time.T
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (e *Entry) UpdateNewNeckRingEstrus(pastureId int64, nowTime time.Time) {
|
|
|
+func (e *Entry) UpdateNewNeckRingEstrus(pastureId int64, xToday *XToday, nowTime time.Time) {
|
|
|
// 更新牛只首次发情时间
|
|
|
e.UpdateEstrusFirstTime1(pastureId, nowTime)
|
|
|
e.UpdateEstrusIsPeak(pastureId, nowTime)
|
|
|
- e.UpdateEstrusFirstTime2(pastureId, nowTime)
|
|
|
+ e.UpdateEstrusFirstTime2(pastureId, xToday, nowTime)
|
|
|
e.UpdateEstrusFirstTime3(pastureId, nowTime)
|
|
|
}
|
|
|
|
|
@@ -213,10 +213,34 @@ func (e *Entry) UpdateEstrusFirstTime1(pastureId int64, xToday time.Time) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (e *Entry) UpdateEstrusFirstTime2(pastureId int64, xToday time.Time) {
|
|
|
+func (e *Entry) UpdateEstrusFirstTime2(pastureId int64, xToday *XToday, nowTime time.Time) {
|
|
|
neckRingEstrusList := e.FindNeckRingEstrusByFirstTimeEmpty(pastureId)
|
|
|
for _, v := range neckRingEstrusList {
|
|
|
- zaplog.Info("UpdateEstrusFirstTime2", zap.Any("v", v))
|
|
|
+ // 获取牛只最近12小时内的活动记录
|
|
|
+ activeTime, _ := util.TimeParseLocal(model.LayoutTime, v.ActiveTime)
|
|
|
+ startTime := activeTime.Add(-12 * time.Hour)
|
|
|
+
|
|
|
+ // 查询符合条件的活动记录
|
|
|
+ var firstTime string
|
|
|
+ if err := e.DB.Model(new(model.NeckActiveHabit)).
|
|
|
+ Select("MIN(active_time) as first_time").
|
|
|
+ Where("pasture_id = ?", pastureId).
|
|
|
+ Where("cow_id = ?", v.CowId).
|
|
|
+ Where("heat_date = ?", activeTime.Format(model.LayoutDate2)).
|
|
|
+ Where("active_time BETWEEN ? AND ?", startTime.Format(model.LayoutTime), v.ActiveTime).
|
|
|
+ Where("cft >= ?", xToday.ActiveLow).
|
|
|
+ Scan(&firstTime).Error; err != nil {
|
|
|
+ zaplog.Error("UpdateEstrusFirstTime2", zap.Any("FindFirstTime", err))
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ if firstTime != "" {
|
|
|
+ if err := e.DB.Model(new(model.NeckRingEstrus)).
|
|
|
+ Where("id = ?", v.Id).
|
|
|
+ Update("first_time", firstTime).Error; err != nil {
|
|
|
+ zaplog.Error("UpdateEstrusFirstTime2", zap.Any("Update", err))
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|