|  | @@ -146,7 +146,6 @@ func (e *Entry) CowEstrusWarning(pastureId int64, xToday *XToday, nowTime time.T
 | 
	
		
			
				|  |  |  			dayHigh := int32(maxCft) + cow21Estrus.HadJust
 | 
	
		
			
				|  |  |  			lastEstrusDate := cow21Estrus.ActiveDate
 | 
	
		
			
				|  |  |  			checkResult := getResult(before3Data, maxCft, cow21Estrus)
 | 
	
		
			
				|  |  | -			isPeak := pasturePb.IsShow_Ok
 | 
	
		
			
				|  |  |  			activeTime := lastActiveDate.Format(model.LayoutTime)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			if e.HistoryNeckRingEstrus(pastureId, cowInfo.NeckRingNumber, activeTime) {
 | 
	
	
		
			
				|  | @@ -158,7 +157,6 @@ func (e *Entry) CowEstrusWarning(pastureId int64, xToday *XToday, nowTime time.T
 | 
	
		
			
				|  |  |  				zap.Any("b48", b48),
 | 
	
		
			
				|  |  |  				zap.Any("checkResult", checkResult),
 | 
	
		
			
				|  |  |  				zap.Any("isShow", isShow),
 | 
	
		
			
				|  |  | -				zap.Any("isPeak", isPeak),
 | 
	
		
			
				|  |  |  				zap.Any("lastEstrusDate", lastEstrusDate),
 | 
	
		
			
				|  |  |  				zap.Any("activeDate", lastActiveDate),
 | 
	
		
			
				|  |  |  				zap.Any("dayHigh", dayHigh),
 | 
	
	
		
			
				|  | @@ -174,7 +172,7 @@ func (e *Entry) CowEstrusWarning(pastureId int64, xToday *XToday, nowTime time.T
 | 
	
		
			
				|  |  |  			newNeckRingEstrus.ActiveTime = activeTime
 | 
	
		
			
				|  |  |  			newNeckRingEstrus.DayHigh = dayHigh
 | 
	
		
			
				|  |  |  			newNeckRingEstrus.MaxHigh = maxHigh
 | 
	
		
			
				|  |  | -			newNeckRingEstrus.IsPeak = isPeak
 | 
	
		
			
				|  |  | +			newNeckRingEstrus.IsPeak = pasturePb.IsShow_No
 | 
	
		
			
				|  |  |  			neckRingEstrusList = append(neckRingEstrusList, newNeckRingEstrus)
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -191,17 +189,20 @@ func (e *Entry) CowEstrusWarning(pastureId int64, xToday *XToday, nowTime time.T
 | 
	
		
			
				|  |  |  // UpdateNewNeckRingEstrus 更新牛只首次发情时间和是否是高峰期
 | 
	
		
			
				|  |  |  func (e *Entry) UpdateNewNeckRingEstrus(pastureId int64, xToday *XToday, nowTime time.Time) {
 | 
	
		
			
				|  |  |  	e.UpdateEstrusFirstTime1(pastureId)
 | 
	
		
			
				|  |  | -	e.UpdateEstrusIsPeak(pastureId)
 | 
	
		
			
				|  |  | -	e.UpdateEstrusFirstTime2(pastureId, xToday, nowTime)
 | 
	
		
			
				|  |  | +	e.UpdateEstrusFirstTime2(pastureId, xToday)
 | 
	
		
			
				|  |  |  	e.UpdateEstrusFirstTime3(pastureId, nowTime)
 | 
	
		
			
				|  |  | +	e.UpdateEstrusIsPeak(pastureId)
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // UpdateEstrusFirstTime1 更新牛只首次发情时间
 | 
	
		
			
				|  |  |  func (e *Entry) UpdateEstrusFirstTime1(pastureId int64) {
 | 
	
		
			
				|  |  |  	// 获取牛只首次发情时间为空的记录
 | 
	
		
			
				|  |  |  	neckRingEstrusList := e.FindNeckRingEstrusByFirstTimeEmpty(pastureId)
 | 
	
		
			
				|  |  | +	zaplog.Info("UpdateEstrusFirstTime1", zap.Any("neckRingEstrusList", neckRingEstrusList))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	for _, v := range neckRingEstrusList {
 | 
	
		
			
				|  |  | -		cowEstrusStartData := e.FindCowEstrusFirstTime1(pastureId, v.CowId)
 | 
	
		
			
				|  |  | +		cowEstrusStartData := e.FindCowEstrusFirstTime1(pastureId, v)
 | 
	
		
			
				|  |  | +		zaplog.Info("UpdateEstrusFirstTime1", zap.Any("cowEstrusStartData", cowEstrusStartData))
 | 
	
		
			
				|  |  |  		if cowEstrusStartData != nil && cowEstrusStartData.FirstTime != "" {
 | 
	
		
			
				|  |  |  			if err := e.DB.Model(new(model.NeckRingEstrus)).
 | 
	
		
			
				|  |  |  				Where("id = ?", v.Id).
 | 
	
	
		
			
				|  | @@ -216,20 +217,22 @@ func (e *Entry) UpdateEstrusFirstTime1(pastureId int64) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -func (e *Entry) UpdateEstrusFirstTime2(pastureId int64, xToday *XToday, nowTime time.Time) {
 | 
	
		
			
				|  |  | +func (e *Entry) UpdateEstrusFirstTime2(pastureId int64, xToday *XToday) {
 | 
	
		
			
				|  |  |  	neckRingEstrusList := e.FindNeckRingEstrusByFirstTimeEmpty(pastureId)
 | 
	
		
			
				|  |  |  	for _, v := range neckRingEstrusList {
 | 
	
		
			
				|  |  | +		if v.FirstTime != "" {
 | 
	
		
			
				|  |  | +			continue
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  		// 获取牛只最近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 {
 | 
	
	
		
			
				|  | @@ -336,17 +339,17 @@ func (e *Entry) UpdateEstrusIsPeak(pastureId int64) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // FindCowEstrusFirstTime1 查找牛只昨天是否有发情数据
 | 
	
		
			
				|  |  | -func (e *Entry) FindCowEstrusFirstTime1(pastureId, cowId int64) *EstrusStartData {
 | 
	
		
			
				|  |  | +func (e *Entry) FindCowEstrusFirstTime1(pastureId int64, neckRingEstrus *model.NeckRingEstrus) *EstrusStartData {
 | 
	
		
			
				|  |  |  	firstTimeEventEstrus := &EstrusStartData{}
 | 
	
		
			
				|  |  | -	nowTime := time.Now().Local()
 | 
	
		
			
				|  |  | -	startDate := fmt.Sprintf("%s 00:00:00", nowTime.AddDate(0, 0, -1).Format(model.LayoutDate2))
 | 
	
		
			
				|  |  | -	endDate := fmt.Sprintf("%s 23:59:59", nowTime.Format(model.LayoutDate2))
 | 
	
		
			
				|  |  | +	activeAt := util.DateTimeParseLocalUnix2(neckRingEstrus.ActiveTime)
 | 
	
		
			
				|  |  | +	startDate := fmt.Sprintf("%s 00:00:00", activeAt.AddDate(0, 0, -1).Format(model.LayoutDate2))
 | 
	
		
			
				|  |  |  	if err := e.DB.Model(new(model.NeckRingEstrus)).
 | 
	
		
			
				|  |  |  		Select("cow_id,first_time").
 | 
	
		
			
				|  |  | -		Where("active_time BETWEEN ? AND ?", startDate, endDate).
 | 
	
		
			
				|  |  | +		Where("active_time BETWEEN ? AND ?", startDate, neckRingEstrus.ActiveTime).
 | 
	
		
			
				|  |  |  		Where("pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | -		Where("cow_id = ?", cowId).
 | 
	
		
			
				|  |  | -		Order("first_time ASC").
 | 
	
		
			
				|  |  | +		Where("cow_id = ?", neckRingEstrus.CowId).
 | 
	
		
			
				|  |  | +		Where("id != ?", neckRingEstrus.Id).
 | 
	
		
			
				|  |  | +		Order("first_time,id ASC").
 | 
	
		
			
				|  |  |  		First(&firstTimeEventEstrus).Error; err != nil {
 | 
	
		
			
				|  |  |  		return nil
 | 
	
		
			
				|  |  |  	}
 |