| 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"`
 
- }
 
 
  |