neck_active_habit.go 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package model
  2. import (
  3. "fmt"
  4. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  5. )
  6. const (
  7. InitChangeFilter = -10000
  8. DefaultChangeFilter = -99
  9. DefaultRuminaFilter = -99
  10. DefaultChewFilter = -99
  11. DefaultFilterCorrect = 100
  12. DefaultWeeklyActive = 1500
  13. )
  14. type NeckActiveHabit struct {
  15. Id int64 `json:"id"`
  16. PastureId int64 `json:"pastureId"`
  17. NeckRingNumber string `json:"neckRingNumber"`
  18. CowId int64 `json:"cowId"`
  19. Lact int32 `json:"lact"`
  20. CalvingAge int32 `json:"calvingAge"`
  21. ActiveTime string `json:"activeTime"`
  22. Frameid int32 `json:"frameid"`
  23. HeatDate string `json:"heatDate"`
  24. Rumina int32 `json:"rumina"`
  25. Intake int32 `json:"intake"`
  26. Inactive int32 `json:"inactive"`
  27. Gasp int32 `json:"gasp"`
  28. Other int32 `json:"other"`
  29. High int32 `json:"high"`
  30. Active int32 `json:"active"`
  31. FilterHigh int32 `json:"filterHigh"`
  32. FilterRumina int32 `json:"filterRumina"`
  33. FilterChew int32 `json:"filterChew"`
  34. WeekHigh int32 `json:"weekHigh"`
  35. WeekHighHabit int32 `json:"weekHighHabit"`
  36. WeekRuminaHabit int32 `json:"weekRuminaHabit"`
  37. WeekIntakeHabit int32 `json:"weekIntakeHabit"`
  38. WeekChewHabit int32 `json:"weekChewHabit"`
  39. WeekInactiveHabit int32 `json:"weekInactiveHabit"`
  40. WeekOtherHabit int32 `json:"weekOtherHabit"`
  41. ChangeHigh int32 `json:"changeHigh"`
  42. ChangeRumina int32 `json:"changeRumina"`
  43. ChangeChew int32 `json:"changeChew"`
  44. ChangeAdjust int32 `json:"changeAdjust"`
  45. ChangeFilter int32 `json:"changeFilter"`
  46. RuminaFilter int32 `json:"ruminaFilter"`
  47. ChewFilter int32 `json:"chewFilter"`
  48. FilterCorrect int32 `json:"filterCorrect"`
  49. SumRumina int32 `json:"sumRumina"`
  50. SumIntake int32 `json:"sumIntake"`
  51. SumInactive int32 `json:"sumInactive"`
  52. SumActive int32 `json:"sumActive"`
  53. SumMinHigh int32 `json:"sumMinHigh"`
  54. SumMaxHigh int32 `json:"sumMaxHigh"`
  55. SumMinChew int32 `json:"SumMinChew"`
  56. BeforeThreeSumRumina int32 `json:"beforeThreeSumRumina"`
  57. BeforeThreeSumIntake int32 `json:"beforeThreeSumIntake"`
  58. Score int32 `json:"score"`
  59. IsMaxTime pasturePb.IsShow_Kind `json:"isMaxTime"`
  60. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  61. RecordCount int32 `json:"recordCount"`
  62. FirmwareVersion int32 `json:"firmwareVersion"`
  63. CreatedAt int64 `json:"createdAt"`
  64. UpdatedAt int64 `json:"updatedAt"`
  65. }
  66. func (n *NeckActiveHabit) TableName() string {
  67. return "neck_active_habit"
  68. }
  69. func NewNeckActiveHabit(data *NeckRingOriginalMerge) *NeckActiveHabit {
  70. return &NeckActiveHabit{
  71. PastureId: data.PastureId,
  72. Frameid: data.XframeId,
  73. HeatDate: data.ActiveDate,
  74. NeckRingNumber: data.NeckRingNumber,
  75. Active: data.Active,
  76. Gasp: data.Gasp,
  77. High: data.High,
  78. Inactive: data.Inactive,
  79. Intake: data.Intake,
  80. Other: data.Other,
  81. Rumina: data.Rumina,
  82. IsShow: data.IsShow,
  83. WeekHigh: DefaultWeeklyActive,
  84. IsMaxTime: pasturePb.IsShow_No,
  85. ChangeFilter: InitChangeFilter,
  86. FilterCorrect: InitChangeFilter,
  87. RuminaFilter: InitChangeFilter,
  88. ChewFilter: InitChangeFilter,
  89. ActiveTime: fmt.Sprintf("%s %02d:00:00", data.ActiveDate, data.XframeId*2+1),
  90. RecordCount: data.RecordCount,
  91. FirmwareVersion: data.FirmwareVersion,
  92. }
  93. }
  94. type NeckActiveHabitSlice []*NeckActiveHabit
  95. func (n NeckActiveHabitSlice) ToPB(curveName string) *CowBehaviorCurveData {
  96. res := &CowBehaviorCurveData{
  97. OriginalDataList: make([]int32, 0),
  98. ChangeDataList: make([]int32, 0),
  99. SumDataList: make([]int32, 0),
  100. DataTimeList: make([]string, 0),
  101. EstrusList: make(map[pasturePb.EstrusLevel_Kind][]string, 0),
  102. EventList: make(map[string][]string),
  103. EventMap: make(map[pasturePb.EventType_Kind]string),
  104. }
  105. for _, v := range n {
  106. res.DataTimeList = append(res.DataTimeList, fmt.Sprintf("%s %02d", v.HeatDate, v.Frameid*2+1))
  107. switch curveName {
  108. case "active": // 活动量
  109. res.OriginalDataList = append(res.OriginalDataList, v.High)
  110. res.ChangeDataList = append(res.ChangeDataList, v.ChangeFilter)
  111. case "rumina": // 反刍
  112. res.OriginalDataList = append(res.OriginalDataList, v.Rumina)
  113. res.ChangeDataList = append(res.ChangeDataList, v.ChangeRumina)
  114. res.SumDataList = append(res.SumDataList, v.SumRumina)
  115. case "intake": // 采食
  116. res.OriginalDataList = append(res.OriginalDataList, v.Intake)
  117. res.SumDataList = append(res.SumDataList, v.SumIntake)
  118. case "inactive": // 休息
  119. res.OriginalDataList = append(res.OriginalDataList, v.Inactive)
  120. res.SumDataList = append(res.SumDataList, v.SumInactive)
  121. case "chew": // 咀嚼
  122. res.OriginalDataList = append(res.OriginalDataList, 0)
  123. res.ChangeDataList = append(res.ChangeDataList, v.ChangeChew)
  124. res.SumDataList = append(res.SumDataList, 0)
  125. case "immobility": // 静止
  126. res.OriginalDataList = append(res.OriginalDataList, 0)
  127. res.SumDataList = append(res.SumDataList, 0)
  128. }
  129. }
  130. return res
  131. }
  132. func (n *NeckActiveHabit) SumAvg() {
  133. n.Rumina = n.Rumina / n.RecordCount * n.RecordCount
  134. n.Inactive = n.Inactive / n.RecordCount * n.RecordCount
  135. n.Active = n.Active / n.RecordCount * n.RecordCount
  136. n.Intake = n.Intake / n.RecordCount * n.RecordCount
  137. n.Other = n.Other / n.RecordCount * n.RecordCount
  138. n.Gasp = n.Gasp / n.RecordCount * n.RecordCount
  139. n.High = n.High / n.RecordCount * n.RecordCount
  140. }
  141. type MaxHabitIdModel struct {
  142. Id int64 `json:"id"`
  143. }