| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 | 
							- package model
 
- import (
 
- 	"math"
 
- 	"time"
 
- 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
- )
 
- type EventWeight struct {
 
- 	ID            int64  `json:"id"`
 
- 	PastureId     int64  `json:"pastureId"`
 
- 	CowId         int64  `json:"cowId"`
 
- 	EarNumber     string `json:"earNumber"`
 
- 	DayAge        int32  `json:"dayAge"`
 
- 	LactationDay  int64  `json:"lactationDay"`
 
- 	PenId         int32  `json:"penId"`
 
- 	Lact          int32  `json:"lact"`
 
- 	Weight        int32  `json:"weight"`
 
- 	Height        int32  `json:"height"`
 
- 	WeightAt      int64  `json:"weightAt"`
 
- 	Remarks       string `json:"remarks"`
 
- 	OperationId   int32  `json:"operationId"`
 
- 	OperationName string `json:"operationName"`
 
- 	MessageId     int64  `json:"messageId"`
 
- 	MessageName   string `json:"messageName"`
 
- 	CreatedAt     int64  `json:"created_at"`
 
- 	UpdatedAt     int64  `json:"updated_at"`
 
- }
 
- func (c *EventWeight) TableName() string {
 
- 	return "event_weight"
 
- }
 
- func NewEventWeight(pastureId int64, cow *Cow, currentUser *SystemUser, item *pasturePb.EventWeight) *EventWeight {
 
- 	return &EventWeight{
 
- 		PastureId:     pastureId,
 
- 		CowId:         cow.Id,
 
- 		EarNumber:     cow.EarNumber,
 
- 		Weight:        int32(item.Weight * 1000),
 
- 		Height:        item.Height,
 
- 		Lact:          cow.Lact,
 
- 		DayAge:        cow.GetEventDayAge(int64(item.WeightAt)),
 
- 		WeightAt:      int64(item.WeightAt),
 
- 		Remarks:       item.Remarks,
 
- 		MessageId:     currentUser.Id,
 
- 		MessageName:   currentUser.Name,
 
- 		OperationId:   item.OperationId,
 
- 		OperationName: item.OperationName,
 
- 	}
 
- }
 
- type EventWeightSlice []*EventWeight
 
- func (e EventWeightSlice) ToPB(cowInfo *Cow, eventCowLogList []*EventCowLog) *pasturePb.CowGrowthCurveData {
 
- 	res := &pasturePb.CowGrowthCurveData{
 
- 		Chart: &pasturePb.CowBehaviorCurveChart{
 
- 			Headers:   make([]string, 0),
 
- 			Weight:    make([]float32, 0),
 
- 			EventList: make([]*pasturePb.EventHappen, 0),
 
- 		},
 
- 		Table: make([]*pasturePb.CowBehaviorCurveTable, len(e)),
 
- 	}
 
- 	for i, v := range e {
 
- 		weightAtFormat := ""
 
- 		if v.WeightAt > 0 {
 
- 			weightAtFormat = time.Unix(v.WeightAt, 0).Local().Format(LayoutDate2)
 
- 		}
 
- 		weight := float32(0)
 
- 		if v.Weight > 0 {
 
- 			weight = float32(v.Weight) / 1000
 
- 		}
 
- 		avgWeight := float32(0)
 
- 		if i > 0 {
 
- 			avgWeight = float32(v.Weight-e[i-1].Weight) / float32(v.WeightAt-e[i-1].WeightAt) / 24 / 1000
 
- 		}
 
- 		// 阶段日增重
 
- 		stageDayAddWeight, monthAvgAddWeight := float32(0), float32(0)
 
- 		if i > 0 {
 
- 			stageWeight := float64(v.Weight-e[i-1].Weight) / 1000
 
- 			t1 := time.Unix(v.WeightAt, 0).Local().Truncate(24 * time.Hour)
 
- 			t2 := time.Unix(e[i-1].WeightAt, 0).Local().Truncate(24 * time.Hour)
 
- 			diff := t1.Sub(t2)
 
- 			days := int32(diff.Hours() / 24)
 
- 			stageDayAddWeight = float32(math.Round(stageWeight/float64(days)*100) / 100)
 
- 		}
 
- 		if stageDayAddWeight > 0 {
 
- 			monthAvgAddWeight = stageDayAddWeight * 30
 
- 		}
 
- 		res.Table[i] = &pasturePb.CowBehaviorCurveTable{
 
- 			Weight:            weight,
 
- 			AvgWeight:         avgWeight,
 
- 			StageDayAddWeight: stageDayAddWeight,
 
- 			MonthAvgAddWeight: monthAvgAddWeight,
 
- 			WeightAtFormat:    weightAtFormat,
 
- 			AdmissionAge:      cowInfo.AdmissionAge,
 
- 		}
 
- 		res.Chart.Headers = append(res.Chart.Headers, weightAtFormat)
 
- 		res.Chart.Weight = append(res.Chart.Weight, weight)
 
- 	}
 
- 	for _, event := range eventCowLogList {
 
- 		dateTime := ""
 
- 		if event.EventAt > 0 {
 
- 			dateTime = time.Unix(event.EventAt, 0).Local().Format(LayoutDate2)
 
- 		}
 
- 		res.Chart.EventList = append(res.Chart.EventList, &pasturePb.EventHappen{
 
- 			Name:          event.EventTypeName,
 
- 			DateTime:      dateTime,
 
- 			EventTypeKind: event.EventType,
 
- 		})
 
- 	}
 
- 	return res
 
- }
 
 
  |