| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 | package modelimport (	"fmt"	"kpt-pasture/util"	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow")const PenBehaviorMinCowCount = 20type PenBehavior struct {	Id             int64                 `json:"id"`	PastureId      int64                 `json:"pastureId"`	HeatDate       string                `json:"heatDate"`	ActiveTime     string                `json:"activeTime"`	Frameid        int32                 `json:"frameid"`	PenId          int32                 `json:"penId"`	PenName        string                `json:"penName"`	CowCount       int32                 `json:"cowCount"`	AvgHigh        int32                 `json:"avgHigh"`	SumRumina      int32                 `json:"sumRumina"`	SumIntake      int32                 `json:"sumIntake"`	SumRest        int32                 `json:"sumRest"`	SumGasp        int32                 `json:"sumGasp"`	RuminaRate     int32                 `json:"ruminaRate"`	IntakeRate     int32                 `json:"intakeRate"`	RestRate       int32                 `json:"restRate"`	GaspRate       int32                 `json:"gaspRate"`	WeekRuminaRate int32                 `json:"weekRuminaRate"`	RuminaStd      int32                 `json:"ruminaStd"`	WeekIntakeRate int32                 `json:"weekIntakeRate"`	IntakeStd      int32                 `json:"intakeStd"`	WeekRestRate   int32                 `json:"weekRestRate"`	RestStd        int32                 `json:"restStd"`	WeekGaspRate   int32                 `json:"weekGaspRate"`	GaspStd        int32                 `json:"gaspStd"`	IsShow         pasturePb.IsShow_Kind `json:"isShow"`	CreatedAt      int64                 `json:"createdAt"`	UpdatedAt      int64                 `json:"updatedAt"`}func (p *PenBehavior) TableName() string {	return "pen_behavior"}func NewPenBehavior(data *PenBehaviorData, activeTime string) *PenBehavior {	return &PenBehavior{		PastureId:  data.PastureId,		HeatDate:   data.HeatDate,		ActiveTime: activeTime,		Frameid:    data.Frameid,		PenId:      data.PenId,		PenName:    data.PenName,		CowCount:   data.CowCount,		AvgHigh:    data.AvgHigh,		SumRumina:  data.SumRumina,		SumIntake:  data.SumIntake,		SumRest:    data.SumRest,		SumGasp:    data.SumGasp,		RuminaRate: data.RuminaRate,		IntakeRate: data.IntakeRate,		RestRate:   data.RestRate,		GaspRate:   data.GaspRate,		IsShow:     pasturePb.IsShow_No,	}}type PenBehaviorSlice []*PenBehaviortype BarnBehaviorCurveResponse struct {	Code int32                  `json:"code"`	Msg  string                 `json:"msg"`	Data *BarnBehaviorCurveItem `json:"data"`}func (p PenBehaviorSlice) ToPB() *pasturePb.BarnBehaviorCurveItem {	res := &pasturePb.BarnBehaviorCurveItem{		EventTime: &pasturePb.EventTime{			FeedTime: make([]string, 0),			MilkTime: make([]string, 0),		},		DateTime:      make([]string, 0),		Rumina:        make([]int32, 0),		Intake:        make([]int32, 0),		Rest:          make([]int32, 0),		WeekAvgRumina: make([]int32, 0),		WeekAvgIntake: make([]int32, 0),		WeekAvgReset:  make([]int32, 0),	}	for _, v := range p {		dateTime := ""		if v.ActiveTime != "" {			dt, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)			dateTime = dt.Format(LayoutMinute)		}		res.DateTime = append(res.DateTime, dateTime)		res.Rumina = append(res.Rumina, v.RuminaRate)		res.Intake = append(res.Intake, v.IntakeRate)		res.Rest = append(res.Rest, v.RestRate)		res.WeekAvgRumina = append(res.WeekAvgRumina, v.WeekRuminaRate)		res.WeekAvgIntake = append(res.WeekAvgIntake, v.WeekIntakeRate)		res.WeekAvgReset = append(res.WeekAvgReset, v.WeekRestRate)		ruminaMaxShadow := float32(v.WeekRuminaRate + v.RuminaStd) //- float32(v.WeekRuminaRate-v.RuminaStd)		ruminaMinShadow := float32(v.WeekRuminaRate - v.RuminaStd)		if ruminaMinShadow < 0 {			ruminaMinShadow = 0		}		res.WeekAvgRuminaMaxShadow = append(res.WeekAvgRuminaMaxShadow, ruminaMaxShadow)		res.WeekAvgRuminaMinShadow = append(res.WeekAvgRuminaMinShadow, ruminaMinShadow)		intakeMaxShadow := float32(v.WeekIntakeRate + v.IntakeStd) //- float32(v.WeekIntakeRate-v.IntakeStd)		intakeMinShadow := float32(v.WeekIntakeRate - v.IntakeStd)		if intakeMinShadow < 0 {			intakeMinShadow = 0		}		res.WeekAvgIntakeMaxShadow = append(res.WeekAvgIntakeMaxShadow, intakeMaxShadow)		res.WeekAvgIntakeMinShadow = append(res.WeekAvgIntakeMinShadow, intakeMinShadow)		restMaxShadow := float32(v.WeekRestRate + v.RestStd) //- float32(v.WeekRestRate-v.RestStd)		restMinShadow := float32(v.WeekRestRate - v.RestStd)		if restMinShadow < 0 {			restMinShadow = 0		}		res.WeekAvgRestMaxShadow = append(res.WeekAvgRestMaxShadow, restMaxShadow)		res.WeekAvgRestMinShadow = append(res.WeekAvgRestMinShadow, restMinShadow)	}	return res}type PenBehaviorModel struct {	Id         int64	PastureId  int64	ActiveDate string	PenId      int32	PenName    string	Frameid    int32	Rumina     int32	Intake     int32	Inactive   int32	Gasp       int32	High       int32	Active     int32}type PenBehaviorData struct {	PastureId  int64  `json:"pastureId"`	PenId      int32  `json:"penId"`	PenName    string `json:"penName"`	HeatDate   string `json:"heatDate"`	Frameid    int32  `json:"frameid"`	CowCount   int32  `json:"cowCount"`	AvgHigh    int32  `json:"avgHigh"`	SumRumina  int32  `json:"sumRumina"`	SumIntake  int32  `json:"sumIntake"`	SumRest    int32  `json:"sumRest"`	SumGasp    int32  `json:"sumGasp"`	RuminaRate int32  `json:"ruminaRate"`	IntakeRate int32  `json:"intakeRate"`	RestRate   int32  `json:"restRate"`	GaspRate   int32  `json:"gaspRate"`}type BarnBehaviorCurveItem struct {	EventTime     *EventTime `json:"eventTime"`	DateTime      []string   `json:"dateTime"`	Headers       []string   `json:"headers"`	Rumina        []int32    `json:"rumina"`	Intake        []int32    `json:"intake"`	Rest          []int32    `json:"rest"`	WeekAvgRumina [][]string `json:"weekAvgRumina"`	WeekAvgIntake [][]string `json:"weekAvgIntake"`	WeekAvgReset  [][]string `json:"weekAvgReset"`}type EventTime struct {	FeedTime []string `json:"feedTime"`	MilkTime []string `json:"milkTime"`}func (p PenBehaviorSlice) ToPB2() *BarnBehaviorCurveItem {	res := &BarnBehaviorCurveItem{		EventTime: &EventTime{			FeedTime: make([]string, 0),			MilkTime: make([]string, 0),		},		DateTime:      make([]string, 0),		Rumina:        make([]int32, 0),		Intake:        make([]int32, 0),		Rest:          make([]int32, 0),		WeekAvgRumina: make([][]string, 0),		WeekAvgIntake: make([][]string, 0),		WeekAvgReset:  make([][]string, 0),	}	for i, v := range p {		dateTime := ""		if v.ActiveTime != "" {			dt, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)			dateTime = dt.Format(LayoutMinute)		}		res.DateTime = append(res.DateTime, dateTime)		res.Rumina = append(res.Rumina, v.RuminaRate)		res.Intake = append(res.Intake, v.IntakeRate)		res.Rest = append(res.Rest, v.RestRate)		weekRuminaRate, weekIntakeRate, weekRestRate := make([]string, 0), make([]string, 0), make([]string, 0)		weekRuminaRate = append(weekRuminaRate, v.ActiveTime, fmt.Sprintf("%d", v.WeekRuminaRate), fmt.Sprintf("%d", v.PenId), v.HeatDate, fmt.Sprintf("%d", v.Frameid), fmt.Sprintf("%d", v.RuminaStd))		weekRuminaRate = append(weekRuminaRate, v.ActiveTime, fmt.Sprintf("%d", v.WeekIntakeRate), fmt.Sprintf("%d", v.PenId), v.HeatDate, fmt.Sprintf("%d", v.Frameid), fmt.Sprintf("%d", v.IntakeStd))		weekRestRate = append(weekRestRate, v.ActiveTime, fmt.Sprintf("%d", v.WeekRestRate), fmt.Sprintf("%d", v.PenId), v.HeatDate, fmt.Sprintf("%d", v.Frameid), fmt.Sprintf("%d", v.RestStd))		res.WeekAvgRumina[i] = append(res.WeekAvgRumina[i], weekRuminaRate...)		res.WeekAvgIntake[i] = append(res.WeekAvgIntake[i], weekIntakeRate...)		res.WeekAvgReset[i] = append(res.WeekAvgReset[i], weekRestRate...)	}	return res}type PenBehaviorWeekModel struct {	CowCount   int32     `json:"cowCount"`	SumRumina  int32     `json:"sumRumina"`	SumIntake  int32     `json:"sumIntake"`	SumRest    int32     `json:"sumRest"`	SumGasp    int32     `json:"sumGasp"`	RuminaRate []float64 `json:"ruminaRate"`	IntakeRate []float64 `json:"intakeRate"`	RestRate   []float64 `json:"restRate"`	GaspRate   []float64 `json:"gaspRate"`}
 |