package model import ( "fmt" "kpt-pasture/util" pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow" ) type 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"` 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, } } type PenBehaviorSlice []*PenBehavior type 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 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 }