pen_behavior.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. package model
  2. import (
  3. "fmt"
  4. "kpt-pasture/util"
  5. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  6. )
  7. const PenBehaviorMinCowCount = 20
  8. type PenBehavior struct {
  9. Id int64 `json:"id"`
  10. PastureId int64 `json:"pastureId"`
  11. HeatDate string `json:"heatDate"`
  12. ActiveTime string `json:"activeTime"`
  13. Frameid int32 `json:"frameid"`
  14. PenId int32 `json:"penId"`
  15. PenName string `json:"penName"`
  16. CowCount int32 `json:"cowCount"`
  17. AvgHigh int32 `json:"avgHigh"`
  18. SumRumina int32 `json:"sumRumina"`
  19. SumIntake int32 `json:"sumIntake"`
  20. SumRest int32 `json:"sumRest"`
  21. SumGasp int32 `json:"sumGasp"`
  22. RuminaRate int32 `json:"ruminaRate"`
  23. IntakeRate int32 `json:"intakeRate"`
  24. RestRate int32 `json:"restRate"`
  25. GaspRate int32 `json:"gaspRate"`
  26. WeekRuminaRate int32 `json:"weekRuminaRate"`
  27. RuminaStd int32 `json:"ruminaStd"`
  28. WeekIntakeRate int32 `json:"weekIntakeRate"`
  29. IntakeStd int32 `json:"intakeStd"`
  30. WeekRestRate int32 `json:"weekRestRate"`
  31. RestStd int32 `json:"restStd"`
  32. WeekGaspRate int32 `json:"weekGaspRate"`
  33. GaspStd int32 `json:"gaspStd"`
  34. IsShow pasturePb.IsShow_Kind `json:"isShow"`
  35. CreatedAt int64 `json:"createdAt"`
  36. UpdatedAt int64 `json:"updatedAt"`
  37. }
  38. func (p *PenBehavior) TableName() string {
  39. return "pen_behavior"
  40. }
  41. func NewPenBehavior(data *PenBehaviorData, activeTime string) *PenBehavior {
  42. return &PenBehavior{
  43. PastureId: data.PastureId,
  44. HeatDate: data.HeatDate,
  45. ActiveTime: activeTime,
  46. Frameid: data.Frameid,
  47. PenId: data.PenId,
  48. PenName: data.PenName,
  49. CowCount: data.CowCount,
  50. AvgHigh: data.AvgHigh,
  51. SumRumina: data.SumRumina,
  52. SumIntake: data.SumIntake,
  53. SumRest: data.SumRest,
  54. SumGasp: data.SumGasp,
  55. RuminaRate: data.RuminaRate,
  56. IntakeRate: data.IntakeRate,
  57. RestRate: data.RestRate,
  58. GaspRate: data.GaspRate,
  59. }
  60. }
  61. type PenBehaviorSlice []*PenBehavior
  62. type BarnBehaviorCurveResponse struct {
  63. Code int32 `json:"code"`
  64. Msg string `json:"msg"`
  65. Data *BarnBehaviorCurveItem `json:"data"`
  66. }
  67. func (p PenBehaviorSlice) ToPB() *pasturePb.BarnBehaviorCurveItem {
  68. res := &pasturePb.BarnBehaviorCurveItem{
  69. EventTime: &pasturePb.EventTime{
  70. FeedTime: make([]string, 0),
  71. MilkTime: make([]string, 0),
  72. },
  73. DateTime: make([]string, 0),
  74. Rumina: make([]int32, 0),
  75. Intake: make([]int32, 0),
  76. Rest: make([]int32, 0),
  77. WeekAvgRumina: make([]int32, 0),
  78. WeekAvgIntake: make([]int32, 0),
  79. WeekAvgReset: make([]int32, 0),
  80. }
  81. for _, v := range p {
  82. dateTime := ""
  83. if v.ActiveTime != "" {
  84. dt, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)
  85. dateTime = dt.Format(LayoutMinute)
  86. }
  87. res.DateTime = append(res.DateTime, dateTime)
  88. res.Rumina = append(res.Rumina, v.RuminaRate)
  89. res.Intake = append(res.Intake, v.IntakeRate)
  90. res.Rest = append(res.Rest, v.RestRate)
  91. res.WeekAvgRumina = append(res.WeekAvgRumina, v.WeekRuminaRate)
  92. res.WeekAvgIntake = append(res.WeekAvgIntake, v.WeekIntakeRate)
  93. res.WeekAvgReset = append(res.WeekAvgReset, v.WeekRestRate)
  94. ruminaMaxShadow := float32(v.WeekRuminaRate + v.RuminaStd) //- float32(v.WeekRuminaRate-v.RuminaStd)
  95. ruminaMinShadow := float32(v.WeekRuminaRate - v.RuminaStd)
  96. if ruminaMinShadow < 0 {
  97. ruminaMinShadow = 0
  98. }
  99. res.WeekAvgRuminaMaxShadow = append(res.WeekAvgRuminaMaxShadow, ruminaMaxShadow)
  100. res.WeekAvgRuminaMinShadow = append(res.WeekAvgRuminaMinShadow, ruminaMinShadow)
  101. intakeMaxShadow := float32(v.WeekIntakeRate + v.IntakeStd) //- float32(v.WeekIntakeRate-v.IntakeStd)
  102. intakeMinShadow := float32(v.WeekIntakeRate - v.IntakeStd)
  103. if intakeMinShadow < 0 {
  104. intakeMinShadow = 0
  105. }
  106. res.WeekAvgIntakeMaxShadow = append(res.WeekAvgIntakeMaxShadow, intakeMaxShadow)
  107. res.WeekAvgIntakeMinShadow = append(res.WeekAvgIntakeMinShadow, intakeMinShadow)
  108. restMaxShadow := float32(v.WeekRestRate + v.RestStd) //- float32(v.WeekRestRate-v.RestStd)
  109. restMinShadow := float32(v.WeekRestRate - v.RestStd)
  110. if restMinShadow < 0 {
  111. restMinShadow = 0
  112. }
  113. res.WeekAvgRestMaxShadow = append(res.WeekAvgRestMaxShadow, restMaxShadow)
  114. res.WeekAvgRestMinShadow = append(res.WeekAvgRestMinShadow, restMinShadow)
  115. }
  116. return res
  117. }
  118. type PenBehaviorModel struct {
  119. Id int64
  120. PastureId int64
  121. ActiveDate string
  122. PenId int32
  123. PenName string
  124. Frameid int32
  125. Rumina int32
  126. Intake int32
  127. Inactive int32
  128. Gasp int32
  129. High int32
  130. Active int32
  131. }
  132. type PenBehaviorData struct {
  133. PastureId int64 `json:"pastureId"`
  134. PenId int32 `json:"penId"`
  135. PenName string `json:"penName"`
  136. HeatDate string `json:"heatDate"`
  137. Frameid int32 `json:"frameid"`
  138. CowCount int32 `json:"cowCount"`
  139. AvgHigh int32 `json:"avgHigh"`
  140. SumRumina int32 `json:"sumRumina"`
  141. SumIntake int32 `json:"sumIntake"`
  142. SumRest int32 `json:"sumRest"`
  143. SumGasp int32 `json:"sumGasp"`
  144. RuminaRate int32 `json:"ruminaRate"`
  145. IntakeRate int32 `json:"intakeRate"`
  146. RestRate int32 `json:"restRate"`
  147. GaspRate int32 `json:"gaspRate"`
  148. }
  149. type BarnBehaviorCurveItem struct {
  150. EventTime *EventTime `json:"eventTime"`
  151. DateTime []string `json:"dateTime"`
  152. Headers []string `json:"headers"`
  153. Rumina []int32 `json:"rumina"`
  154. Intake []int32 `json:"intake"`
  155. Rest []int32 `json:"rest"`
  156. WeekAvgRumina [][]string `json:"weekAvgRumina"`
  157. WeekAvgIntake [][]string `json:"weekAvgIntake"`
  158. WeekAvgReset [][]string `json:"weekAvgReset"`
  159. }
  160. type EventTime struct {
  161. FeedTime []string `json:"feedTime"`
  162. MilkTime []string `json:"milkTime"`
  163. }
  164. func (p PenBehaviorSlice) ToPB2() *BarnBehaviorCurveItem {
  165. res := &BarnBehaviorCurveItem{
  166. EventTime: &EventTime{
  167. FeedTime: make([]string, 0),
  168. MilkTime: make([]string, 0),
  169. },
  170. DateTime: make([]string, 0),
  171. Rumina: make([]int32, 0),
  172. Intake: make([]int32, 0),
  173. Rest: make([]int32, 0),
  174. WeekAvgRumina: make([][]string, 0),
  175. WeekAvgIntake: make([][]string, 0),
  176. WeekAvgReset: make([][]string, 0),
  177. }
  178. for i, v := range p {
  179. dateTime := ""
  180. if v.ActiveTime != "" {
  181. dt, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)
  182. dateTime = dt.Format(LayoutMinute)
  183. }
  184. res.DateTime = append(res.DateTime, dateTime)
  185. res.Rumina = append(res.Rumina, v.RuminaRate)
  186. res.Intake = append(res.Intake, v.IntakeRate)
  187. res.Rest = append(res.Rest, v.RestRate)
  188. weekRuminaRate, weekIntakeRate, weekRestRate := make([]string, 0), make([]string, 0), make([]string, 0)
  189. 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))
  190. 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))
  191. 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))
  192. res.WeekAvgRumina[i] = append(res.WeekAvgRumina[i], weekRuminaRate...)
  193. res.WeekAvgIntake[i] = append(res.WeekAvgIntake[i], weekIntakeRate...)
  194. res.WeekAvgReset[i] = append(res.WeekAvgReset[i], weekRestRate...)
  195. }
  196. return res
  197. }
  198. type PenBehaviorWeekModel struct {
  199. CowCount int32 `json:"cowCount"`
  200. SumRumina int32 `json:"sumRumina"`
  201. SumIntake int32 `json:"sumIntake"`
  202. SumRest int32 `json:"sumRest"`
  203. SumGasp int32 `json:"sumGasp"`
  204. RuminaRate []float64 `json:"ruminaRate"`
  205. IntakeRate []float64 `json:"intakeRate"`
  206. RestRate []float64 `json:"restRate"`
  207. GaspRate []float64 `json:"gaspRate"`
  208. }