neck_ring_health_warning.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package model
  2. import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  3. type NeckRingHealthWarning struct {
  4. Id int64 `json:"id"`
  5. NeckRingHealthId int64 `json:"neckRingHealthId"`
  6. PastureId int64 `json:"pastureId"`
  7. CowId int64 `json:"cowId"`
  8. EarNumber string `json:"earNumber"`
  9. NeckRingNumber string `json:"neckRingNumber"`
  10. HeatDate string `json:"heatDate"`
  11. MinHigh int32 `json:"minHigh"`
  12. MinChew int32 `json:"minChew"`
  13. MinIntake int32 `json:"minIntake"`
  14. ChewSum int32 `json:"chewSum"`
  15. BeforeThreeSumChew int32 `json:"beforeThreeSumChew"`
  16. Score int32 `json:"score"`
  17. Level pasturePb.WarningHealthLevel_Kind `json:"level"`
  18. IsShow pasturePb.IsShow_Kind `json:"is_show"`
  19. CreatedAt int64 `json:"created"`
  20. UpdatedAt int64 `json:"updated"`
  21. }
  22. func (n *NeckRingHealthWarning) TableName() string {
  23. return "neck_ring_health_warning"
  24. }
  25. func NewNeckRingHealthWarning(pastureId int64, neckRingHealth *NeckRingHealth, cow *Cow, newScore int32) *NeckRingHealthWarning {
  26. level := pasturePb.WarningHealthLevel_Preliminary
  27. if newScore < 60 {
  28. level = pasturePb.WarningHealthLevel_Height
  29. } else if newScore >= 60 && newScore <= 74 {
  30. level = pasturePb.WarningHealthLevel_Moderate
  31. }
  32. return &NeckRingHealthWarning{
  33. NeckRingHealthId: neckRingHealth.Id,
  34. PastureId: pastureId,
  35. CowId: cow.Id,
  36. EarNumber: cow.EarNumber,
  37. NeckRingNumber: cow.NeckRingNumber,
  38. HeatDate: neckRingHealth.HeatDate,
  39. MinHigh: neckRingHealth.MinHigh,
  40. MinChew: neckRingHealth.MinChew,
  41. MinIntake: neckRingHealth.MinInactive,
  42. ChewSum: neckRingHealth.SumChew,
  43. BeforeThreeSumChew: neckRingHealth.BeforeThreeSumChew,
  44. Score: newScore,
  45. Level: level,
  46. IsShow: pasturePb.IsShow_Ok,
  47. }
  48. }
  49. type NeckRingHealthWarningSlice []*NeckRingHealthWarning
  50. func (n NeckRingHealthWarningSlice) ToPB(
  51. warningHealthLevelMap map[pasturePb.WarningHealthLevel_Kind]string,
  52. cowMap map[int64]*Cow,
  53. eventLogMap map[int64]string,
  54. ) []*pasturePb.HealthWarningItem {
  55. res := make([]*pasturePb.HealthWarningItem, len(n))
  56. for i, v := range n {
  57. levelName := ""
  58. if ln, ok := warningHealthLevelMap[v.Level]; ok {
  59. levelName = ln
  60. }
  61. data := &pasturePb.HealthWarningItem{
  62. Id: int32(v.Id),
  63. CowId: int32(v.CowId),
  64. EarNumber: v.EarNumber,
  65. PenId: 0,
  66. PenName: "",
  67. Score: v.Score,
  68. HeatDate: v.HeatDate,
  69. MinHigh: v.MinHigh,
  70. MinChew: v.MinChew,
  71. MinIntake: v.MinIntake,
  72. SumChew: v.ChewSum,
  73. BeforeThreeDaysSumChew: v.ChewSum - v.BeforeThreeSumChew,
  74. LastBreedEventDetails: "",
  75. Level: v.Level,
  76. LevelName: levelName,
  77. ChangeChewTime: v.ChewSum - v.BeforeThreeSumChew,
  78. }
  79. if cow, ok := cowMap[v.CowId]; ok {
  80. data.PenId = cow.PenId
  81. data.PenName = cow.PenName
  82. data.Lact = cow.Lact
  83. }
  84. if desc, ok := eventLogMap[v.CowId]; ok {
  85. data.LastBreedEventDetails = desc
  86. }
  87. res[i] = data
  88. }
  89. return res
  90. }