123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- package model
- import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
- type PenBehaviorDay struct {
- Id int64 `json:"id"`
- PastureId int64 `json:"pastureId"`
- HeatDate string `json:"heatDate"`
- PenId int32 `json:"penId"`
- PenName string `json:"penName"`
- CowCount int32 `json:"cowCount"`
- DayMilk float32 `json:"dayMilk"`
- DayHigh int32 `json:"dayHigh"`
- DayRumina int32 `json:"dayRumina"`
- DayIntake int32 `json:"dayIntake"`
- DayInactive int32 `json:"dayInactive"`
- DayGasp int32 `json:"dayGasp"`
- DayActive int32 `json:"dayActive"`
- WeekMilk float32 `json:"weekMilk"`
- RuminaStd float64 `json:"ruminaStd"`
- CreatedAt int64 `json:"createdAt"`
- UpdatedAt int64 `json:"updatedAt"`
- }
- func (p *PenBehaviorDay) TableName() string {
- return "pen_behavior_day"
- }
- func NewPenBehaviorDay(pastureId int64, heatDate string, penId int32, penName string, cowCount int32, dayAvgMilk float32,
- dayHigh int32, dayRumina int32, dayIntake int32, dayInactive int32, dayGasp int32, dayActive int32, weekAvgMilk float32,
- ruminaStd float64) *PenBehaviorDay {
- return &PenBehaviorDay{
- PastureId: pastureId,
- HeatDate: heatDate,
- PenId: penId,
- PenName: penName,
- CowCount: cowCount,
- DayMilk: dayAvgMilk,
- DayHigh: dayHigh,
- DayRumina: dayRumina,
- DayIntake: dayIntake,
- DayInactive: dayInactive,
- DayGasp: dayGasp,
- DayActive: dayActive,
- WeekMilk: weekAvgMilk,
- RuminaStd: ruminaStd,
- }
- }
- type PenBehaviorDaySlice []*PenBehaviorDay
- type PenBehaviorDayModel struct {
- HeatDate string `json:"heatDate"`
- PenId int32 `json:"penId"`
- PenName string `json:"penName"`
- CowCount int32 `json:"cowCount"`
- DayMilk float32 `json:"dayMilk"`
- DayHigh int32 `json:"dayHigh"`
- DayRumina int32 `json:"dayRumina"`
- DayIntake int32 `json:"dayIntake"`
- DayInactive int32 `json:"dayInactive"`
- DayChew int32 `json:"dayChew"`
- DayActive int32 `json:"dayActive"`
- DayImmobility int32 `json:"dayImmobility"`
- RuminaStd float64 `json:"ruminaStd"`
- }
- type PenBehaviorDayModelSlice []*PenBehaviorDayModel
- func (p PenBehaviorDayModelSlice) ToPB(dataTimeRange, headers []string, behaviorKind pasturePb.Behavior_Kind) *BarnMonitorItem {
- res := &BarnMonitorItem{
- Headers: headers,
- DateTime: dataTimeRange,
- DataList: make([][]int32, len(headers)),
- }
- // 预分配内存
- for i := range res.DataList {
- res.DataList[i] = make([]int32, len(dataTimeRange))
- }
- // 创建日期到索引的映射,避免重复查找
- dateIndexMap := make(map[string]int, len(dataTimeRange))
- for i, dt := range dataTimeRange {
- dateIndexMap[dt] = i
- }
- // 创建牛舍名称到索引的映射
- headerIndexMap := make(map[string]int, len(headers))
- for i, h := range headers {
- headerIndexMap[h] = i
- }
- if behaviorKind == pasturePb.Behavior_Invalid {
- // 使用映射优化查找
- for _, v := range p {
- if dateIdx, exists := dateIndexMap[v.HeatDate]; exists {
- for i, header := range headers {
- switch header {
- case "反刍":
- res.DataList[i][dateIdx] = v.DayRumina
- case "采食":
- res.DataList[i][dateIdx] = v.DayIntake
- case "休息":
- res.DataList[i][dateIdx] = v.DayInactive
- case "咀嚼":
- res.DataList[i][dateIdx] = v.DayChew
- case "静止":
- res.DataList[i][dateIdx] = v.DayImmobility
- case "方差":
- res.DataList[i][dateIdx] = int32(v.RuminaStd)
- }
- }
- }
- }
- } else {
- // 使用映射优化查找
- for _, v := range p {
- if dateIdx, exists := dateIndexMap[v.HeatDate]; exists {
- if headerIdx, exists := headerIndexMap[v.PenName]; exists {
- switch behaviorKind {
- case pasturePb.Behavior_Rumina:
- res.DataList[headerIdx][dateIdx] = v.DayRumina
- case pasturePb.Behavior_Intake:
- res.DataList[headerIdx][dateIdx] = v.DayIntake
- case pasturePb.Behavior_Reset:
- res.DataList[headerIdx][dateIdx] = v.DayInactive
- case pasturePb.Behavior_Immobility:
- res.DataList[headerIdx][dateIdx] = v.DayImmobility
- case pasturePb.Behavior_Chew:
- res.DataList[headerIdx][dateIdx] = v.DayChew
- }
- }
- }
- }
- }
- return res
- }
- type BarnMonitorResponse struct {
- Code int32 `json:"code"`
- Msg string `json:"msg"`
- Data *BarnMonitorItem `json:"data"`
- }
- type BarnMonitorItem struct {
- DateTime []string `json:"dateTime"`
- Headers []string `json:"headers"`
- DataList [][]int32 `json:"dataList"`
- }
|