|  | @@ -47,7 +47,6 @@ func (e *Entry) EntryUpdateActiveHabit(pastureId int64) (err error) {
 | 
	
		
			
				|  |  |  		zaplog.Error("NeckRingCalculate", zap.Any("pastureId", pastureId), zap.Any("FirstFilterUpdate", err), zap.Any("xToday", xToday))
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	zaplog.Info("NeckRingCalculate", zap.Any("pastureId", pastureId), zap.Any("xToday", xToday), zap.Any("processIds", processIds))
 | 
	
		
			
				|  |  |  	if len(processIds) <= 0 {
 | 
	
		
			
				|  |  |  		return nil
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -67,7 +66,7 @@ func (e *Entry) EntryUpdateActiveHabit(pastureId int64) (err error) {
 | 
	
		
			
				|  |  |  	e.UpdateFilterCorrect(pastureId, processIds)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// 插入群体校正表
 | 
	
		
			
				|  |  | -	e.UpdateChangeAdJust(pastureId, xToday)
 | 
	
		
			
				|  |  | +	e.UpdateChangeAdJust(pastureId, processIds)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	// 更新 Cft
 | 
	
		
			
				|  |  |  	e.UpdateCft(pastureId, processIds)
 | 
	
	
		
			
				|  | @@ -171,7 +170,7 @@ func (e *Entry) FirstFilterUpdate(pastureId int64, xToDay *XToday) (processIds [
 | 
	
		
			
				|  |  |  		processIds = append(processIds, v.Id)
 | 
	
		
			
				|  |  |  		// 更新过滤值
 | 
	
		
			
				|  |  |  		if err = e.DB.Model(new(model.NeckActiveHabit)).
 | 
	
		
			
				|  |  | -			Select("filter_high", "filter_rumina", "filter_chew", "cow_id", "lact", "calving_age", "ear_number", "week_high").
 | 
	
		
			
				|  |  | +			Select("filter_high", "filter_rumina", "filter_chew", "cow_id", "lact", "calving_age", "ear_number", "pen_id", "week_high").
 | 
	
		
			
				|  |  |  			Where("id = ?", v.Id).
 | 
	
		
			
				|  |  |  			Updates(map[string]interface{}{
 | 
	
		
			
				|  |  |  				"filter_high":   firstFilterData.FilterHigh,
 | 
	
	
		
			
				|  | @@ -181,6 +180,7 @@ func (e *Entry) FirstFilterUpdate(pastureId int64, xToDay *XToday) (processIds [
 | 
	
		
			
				|  |  |  				"lact":          cowInfo.Lact,
 | 
	
		
			
				|  |  |  				"calving_age":   cowInfo.CalvingAge,
 | 
	
		
			
				|  |  |  				"ear_number":    cowInfo.EarNumber,
 | 
	
		
			
				|  |  | +				"pen_id":        cowInfo.PenId,
 | 
	
		
			
				|  |  |  				"week_high":     cowWeeklyActive,
 | 
	
		
			
				|  |  |  			}).Error; err != nil {
 | 
	
		
			
				|  |  |  			zaplog.Error("FirstFilterUpdate",
 | 
	
	
		
			
				|  | @@ -330,7 +330,6 @@ func (e *Entry) FilterCorrectAndScoreUpdate(pastureId int64, processIds []int64,
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		if activityVolume != nil && activityVolume.NeckRingNumber != "" {
 | 
	
		
			
				|  |  | -			//filterCorrect := model.DefaultFilterCorrect - int(math.Floor(activityVolume.AvgFilter/3+float64(activityVolume.StdFilter)/2))
 | 
	
		
			
				|  |  |  			filterCorrect := model.DefaultFilterCorrect - int(math.Round(activityVolume.AvgFilter/3+float64(int(math.Round(activityVolume.StdFilter))/2)))
 | 
	
		
			
				|  |  |  			// 活动量校正系数
 | 
	
		
			
				|  |  |  			if err := e.DB.Model(new(model.NeckActiveHabit)).
 | 
	
	
		
			
				|  | @@ -373,34 +372,94 @@ func (e *Entry) UpdateFilterCorrect(pastureId int64, processIds []int64) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // UpdateChangeAdJust 更新群体校正数据
 | 
	
		
			
				|  |  | -func (e *Entry) UpdateChangeAdJust(pastureId int64, xToday *XToday) {
 | 
	
		
			
				|  |  | -	res := make([]*model.NeckRingBarChange, 0)
 | 
	
		
			
				|  |  | +func (e *Entry) UpdateChangeAdJust(pastureId int64, processIds []int64) {
 | 
	
		
			
				|  |  | +	neckRingPenChangeList := make([]*model.NeckRingPenChange, 0)
 | 
	
		
			
				|  |  |  	yesterday := time.Now().Local().AddDate(0, 0, -1).Format(model.LayoutDate2)
 | 
	
		
			
				|  |  | -	if err := e.DB.Table(fmt.Sprintf("%s as h", new(model.NeckActiveHabit).TableName())).
 | 
	
		
			
				|  |  | -		Select(`h.neck_ring_number,h.heat_date, h.frameid, c.pen_id, c.pen_name, COUNT(*) as nb,
 | 
	
		
			
				|  |  | -		ROUND(AVG(h.change_high)) as change_high, ROUND(AVG(h.change_filter)) as change_filter`).
 | 
	
		
			
				|  |  | -		Joins("JOIN cow as c ON h.cow_id = c.id").
 | 
	
		
			
				|  |  | -		Where("h.pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | -		Where("h.heat_date >= ?", yesterday).
 | 
	
		
			
				|  |  | -		Where("h.cow_id > ?", 0).
 | 
	
		
			
				|  |  | -		Where("c.pen_id > ?", 0).
 | 
	
		
			
				|  |  | -		Group("h.heat_date, h.frameid, c.pen_id").
 | 
	
		
			
				|  |  | -		Order("h.heat_date, h.frameid, c.pen_id").
 | 
	
		
			
				|  |  | -		Find(&res).Error; err != nil {
 | 
	
		
			
				|  |  | -		zaplog.Error("UpdateChangeAdJust", zap.Any("error", err), zap.Any("xToday", xToday))
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	for _, v := range res {
 | 
	
		
			
				|  |  | -		if math.Abs(float64(v.ChangeFilter)) < 10 {
 | 
	
		
			
				|  |  | -			continue
 | 
	
		
			
				|  |  | +	if err := e.DB.Model(new(model.NeckActiveHabit)).
 | 
	
		
			
				|  |  | +		Select(`heat_date,frameid,pen_id,COUNT(*) AS cow_count,ROUND(AVG(change_high)) AS change_high,ROUND(AVG(change_filter)) AS change_filter`).
 | 
	
		
			
				|  |  | +		Where("pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | +		Where("heat_date >= ?", yesterday).
 | 
	
		
			
				|  |  | +		Where("cow_id > ?", 0).
 | 
	
		
			
				|  |  | +		Where("pen_id > ?", 0).
 | 
	
		
			
				|  |  | +		Group("heat_date,frameid,pen_id").
 | 
	
		
			
				|  |  | +		Order("heat_date,frameid,pen_id").
 | 
	
		
			
				|  |  | +		Find(&neckRingPenChangeList).Error; err != nil {
 | 
	
		
			
				|  |  | +		zaplog.Error("UpdateChangeAdJust", zap.Any("error", err), zap.Any("pastureId", pastureId))
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for _, v := range neckRingPenChangeList {
 | 
	
		
			
				|  |  | +		var count int64
 | 
	
		
			
				|  |  | +		if err := e.DB.Model(new(model.NeckRingPenChange)).
 | 
	
		
			
				|  |  | +			Where("pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | +			Where("heat_date = ?", v.HeatDate).
 | 
	
		
			
				|  |  | +			Where("frameid = ?", v.Frameid).
 | 
	
		
			
				|  |  | +			Where("pen_id = ?", v.PenId).
 | 
	
		
			
				|  |  | +			Count(&count).Error; err != nil {
 | 
	
		
			
				|  |  | +			zaplog.Error("UpdateChangeAdJust", zap.Any("error", err), zap.Any("v", v), zap.Any("pastureId", pastureId))
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		// 有就更新,没有就新增
 | 
	
		
			
				|  |  | +		if count > 0 {
 | 
	
		
			
				|  |  | +			if err := e.DB.Model(new(model.NeckRingPenChange)).
 | 
	
		
			
				|  |  | +				Where("pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | +				Where("heat_date = ?", v.HeatDate).
 | 
	
		
			
				|  |  | +				Where("frameid = ?", v.Frameid).
 | 
	
		
			
				|  |  | +				Where("pen_id = ?", v.PenId).
 | 
	
		
			
				|  |  | +				Updates(map[string]interface{}{
 | 
	
		
			
				|  |  | +					"cow_count":     v.CowCount,
 | 
	
		
			
				|  |  | +					"change_high":   v.ChangeHigh,
 | 
	
		
			
				|  |  | +					"change_filter": v.ChangeFilter,
 | 
	
		
			
				|  |  | +				}).Error; err != nil {
 | 
	
		
			
				|  |  | +				zaplog.Error("UpdateChangeAdJust", zap.Any("error", err), zap.Any("v", v), zap.Any("pastureId", pastureId))
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +		} else {
 | 
	
		
			
				|  |  | +			neckRingPenChange := model.NewNeckRingPenChange(pastureId, v.HeatDate, v.CowCount, v.Frameid, v.PenId, v.ChangeHigh, v.ChangeFilter)
 | 
	
		
			
				|  |  | +			if err := e.DB.Model(new(model.NeckRingPenChange)).
 | 
	
		
			
				|  |  | +				Create(neckRingPenChange).Error; err != nil {
 | 
	
		
			
				|  |  | +				zaplog.Error("UpdateChangeAdJust",
 | 
	
		
			
				|  |  | +					zap.Any("error", err),
 | 
	
		
			
				|  |  | +					zap.Any("neckRingPenChange", neckRingPenChange),
 | 
	
		
			
				|  |  | +					zap.Any("pastureId", pastureId),
 | 
	
		
			
				|  |  | +				)
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		if err := e.DB.Model(new(model.NeckActiveHabit)).
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	neckActiveHabitList := make([]*model.NeckActiveHabit, 0)
 | 
	
		
			
				|  |  | +	if err := e.DB.Model(new(model.NeckActiveHabit)).
 | 
	
		
			
				|  |  | +		Where("id IN (?)", processIds).
 | 
	
		
			
				|  |  | +		Where("pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | +		Find(&neckActiveHabitList).Error; err != nil {
 | 
	
		
			
				|  |  | +		zaplog.Error("UpdateChangeAdJust", zap.Any("error", err))
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if len(neckActiveHabitList) <= 0 {
 | 
	
		
			
				|  |  | +		return
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for _, v := range neckActiveHabitList {
 | 
	
		
			
				|  |  | +		neckRingPenChange := &model.NeckRingPenChange{}
 | 
	
		
			
				|  |  | +		if err := e.DB.Model(new(model.NeckRingPenChange)).
 | 
	
		
			
				|  |  |  			Where("pasture_id = ?", pastureId).
 | 
	
		
			
				|  |  | -			Where("neck_ring_number = ?", v.NeckRingNumber).
 | 
	
		
			
				|  |  |  			Where("heat_date = ?", v.HeatDate).
 | 
	
		
			
				|  |  | -			Where("frameid = ?", v.FrameId).
 | 
	
		
			
				|  |  | -			Update("change_adjust", v.ChangeFilter).Error; err != nil {
 | 
	
		
			
				|  |  | -			zaplog.Error("UpdateChangeAdJust-1", zap.Any("error", err), zap.Any("xToday", xToday))
 | 
	
		
			
				|  |  | +			Where("frameid = ?", v.Frameid).
 | 
	
		
			
				|  |  | +			Where("pen_id = ?", v.PenId).
 | 
	
		
			
				|  |  | +			First(&neckRingPenChange).Error; err != nil {
 | 
	
		
			
				|  |  | +			zaplog.Error("UpdateChangeAdJust", zap.Any("error", err), zap.Any("v", v), zap.Any("pastureId", pastureId))
 | 
	
		
			
				|  |  | +			continue
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if neckRingPenChange == nil || neckRingPenChange.Id <= 0 {
 | 
	
		
			
				|  |  | +			continue
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if neckRingPenChange.ChangeFilter < 10 {
 | 
	
		
			
				|  |  | +			continue
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if err := e.DB.Model(new(model.NeckActiveHabit)).
 | 
	
		
			
				|  |  | +			Where("id = ?", v.Id).
 | 
	
		
			
				|  |  | +			Update("change_adjust", neckRingPenChange.ChangeFilter).Error; err != nil {
 | 
	
		
			
				|  |  | +			zaplog.Error("UpdateChangeAdJust", zap.Any("error", err), zap.Any("v", v), zap.Any("neckRingPenChange", neckRingPenChange))
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 |