pen_behavior.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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. IsShow: pasturePb.IsShow_No,
  60. }
  61. }
  62. type PenBehaviorSlice []*PenBehavior
  63. type BarnBehaviorCurveResponse struct {
  64. Code int32 `json:"code"`
  65. Msg string `json:"msg"`
  66. Data *BarnBehaviorCurveItem `json:"data"`
  67. }
  68. func (p PenBehaviorSlice) ToPB() *pasturePb.BarnBehaviorCurveItem {
  69. res := &pasturePb.BarnBehaviorCurveItem{
  70. EventTime: &pasturePb.EventTime{
  71. FeedTime: make([]string, 0),
  72. MilkTime: make([]string, 0),
  73. },
  74. DateTime: make([]string, 0),
  75. Rumina: make([]int32, 0),
  76. Intake: make([]int32, 0),
  77. Rest: make([]int32, 0),
  78. WeekAvgRumina: make([]int32, 0),
  79. WeekAvgIntake: make([]int32, 0),
  80. WeekAvgReset: make([]int32, 0),
  81. }
  82. for _, v := range p {
  83. dateTime := ""
  84. if v.ActiveTime != "" {
  85. dt, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)
  86. dateTime = dt.Format(LayoutMinute)
  87. }
  88. res.DateTime = append(res.DateTime, dateTime)
  89. res.Rumina = append(res.Rumina, v.RuminaRate)
  90. res.Intake = append(res.Intake, v.IntakeRate)
  91. res.Rest = append(res.Rest, v.RestRate)
  92. res.WeekAvgRumina = append(res.WeekAvgRumina, v.WeekRuminaRate)
  93. res.WeekAvgIntake = append(res.WeekAvgIntake, v.WeekIntakeRate)
  94. res.WeekAvgReset = append(res.WeekAvgReset, v.WeekRestRate)
  95. ruminaMaxShadow := float32(v.WeekRuminaRate + v.RuminaStd) //- float32(v.WeekRuminaRate-v.RuminaStd)
  96. ruminaMinShadow := float32(v.WeekRuminaRate - v.RuminaStd)
  97. if ruminaMinShadow < 0 {
  98. ruminaMinShadow = 0
  99. }
  100. res.WeekAvgRuminaMaxShadow = append(res.WeekAvgRuminaMaxShadow, ruminaMaxShadow)
  101. res.WeekAvgRuminaMinShadow = append(res.WeekAvgRuminaMinShadow, ruminaMinShadow)
  102. intakeMaxShadow := float32(v.WeekIntakeRate + v.IntakeStd) //- float32(v.WeekIntakeRate-v.IntakeStd)
  103. intakeMinShadow := float32(v.WeekIntakeRate - v.IntakeStd)
  104. if intakeMinShadow < 0 {
  105. intakeMinShadow = 0
  106. }
  107. res.WeekAvgIntakeMaxShadow = append(res.WeekAvgIntakeMaxShadow, intakeMaxShadow)
  108. res.WeekAvgIntakeMinShadow = append(res.WeekAvgIntakeMinShadow, intakeMinShadow)
  109. restMaxShadow := float32(v.WeekRestRate + v.RestStd) //- float32(v.WeekRestRate-v.RestStd)
  110. restMinShadow := float32(v.WeekRestRate - v.RestStd)
  111. if restMinShadow < 0 {
  112. restMinShadow = 0
  113. }
  114. res.WeekAvgRestMaxShadow = append(res.WeekAvgRestMaxShadow, restMaxShadow)
  115. res.WeekAvgRestMinShadow = append(res.WeekAvgRestMinShadow, restMinShadow)
  116. }
  117. return res
  118. }
  119. type PenBehaviorModel struct {
  120. Id int64
  121. PastureId int64
  122. ActiveDate string
  123. PenId int32
  124. PenName string
  125. Frameid int32
  126. Rumina int32
  127. Intake int32
  128. Inactive int32
  129. Gasp int32
  130. High int32
  131. Active int32
  132. }
  133. type PenBehaviorData struct {
  134. PastureId int64 `json:"pastureId"`
  135. PenId int32 `json:"penId"`
  136. PenName string `json:"penName"`
  137. HeatDate string `json:"heatDate"`
  138. Frameid int32 `json:"frameid"`
  139. CowCount int32 `json:"cowCount"`
  140. AvgHigh int32 `json:"avgHigh"`
  141. SumRumina int32 `json:"sumRumina"`
  142. SumIntake int32 `json:"sumIntake"`
  143. SumRest int32 `json:"sumRest"`
  144. SumGasp int32 `json:"sumGasp"`
  145. RuminaRate int32 `json:"ruminaRate"`
  146. IntakeRate int32 `json:"intakeRate"`
  147. RestRate int32 `json:"restRate"`
  148. GaspRate int32 `json:"gaspRate"`
  149. }
  150. type BarnBehaviorCurveItem struct {
  151. EventTime *EventTime `json:"eventTime"`
  152. DateTime []string `json:"dateTime"`
  153. Headers []string `json:"headers"`
  154. Rumina []int32 `json:"rumina"`
  155. Intake []int32 `json:"intake"`
  156. Rest []int32 `json:"rest"`
  157. WeekAvgRumina [][]string `json:"weekAvgRumina"`
  158. WeekAvgIntake [][]string `json:"weekAvgIntake"`
  159. WeekAvgReset [][]string `json:"weekAvgReset"`
  160. }
  161. type EventTime struct {
  162. FeedTime []string `json:"feedTime"`
  163. MilkTime []string `json:"milkTime"`
  164. }
  165. func (p PenBehaviorSlice) ToPB2() *BarnBehaviorCurveItem {
  166. res := &BarnBehaviorCurveItem{
  167. EventTime: &EventTime{
  168. FeedTime: make([]string, 0),
  169. MilkTime: make([]string, 0),
  170. },
  171. DateTime: make([]string, 0),
  172. Rumina: make([]int32, 0),
  173. Intake: make([]int32, 0),
  174. Rest: make([]int32, 0),
  175. WeekAvgRumina: make([][]string, 0),
  176. WeekAvgIntake: make([][]string, 0),
  177. WeekAvgReset: make([][]string, 0),
  178. }
  179. for i, v := range p {
  180. dateTime := ""
  181. if v.ActiveTime != "" {
  182. dt, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)
  183. dateTime = dt.Format(LayoutMinute)
  184. }
  185. res.DateTime = append(res.DateTime, dateTime)
  186. res.Rumina = append(res.Rumina, v.RuminaRate)
  187. res.Intake = append(res.Intake, v.IntakeRate)
  188. res.Rest = append(res.Rest, v.RestRate)
  189. weekRuminaRate, weekIntakeRate, weekRestRate := make([]string, 0), make([]string, 0), make([]string, 0)
  190. 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))
  191. 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))
  192. 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))
  193. res.WeekAvgRumina[i] = append(res.WeekAvgRumina[i], weekRuminaRate...)
  194. res.WeekAvgIntake[i] = append(res.WeekAvgIntake[i], weekIntakeRate...)
  195. res.WeekAvgReset[i] = append(res.WeekAvgReset[i], weekRestRate...)
  196. }
  197. return res
  198. }
  199. type PenBehaviorWeekModel struct {
  200. CowCount int32 `json:"cowCount"`
  201. SumRumina int32 `json:"sumRumina"`
  202. SumIntake int32 `json:"sumIntake"`
  203. SumRest int32 `json:"sumRest"`
  204. SumGasp int32 `json:"sumGasp"`
  205. RuminaRate []float64 `json:"ruminaRate"`
  206. IntakeRate []float64 `json:"intakeRate"`
  207. RestRate []float64 `json:"restRate"`
  208. GaspRate []float64 `json:"gaspRate"`
  209. }