event_pregnant_check.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. package model
  2. import (
  3. "kpt-pasture/util"
  4. "time"
  5. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  6. )
  7. type EventPregnantCheck struct {
  8. Id int64 `json:"id"`
  9. PastureId int64 `json:"pastureId"`
  10. CowId int64 `json:"cowId"`
  11. EarNumber string `json:"earNumber"`
  12. CowType pasturePb.CowType_Kind `json:"cowType"`
  13. PenId int32 `json:"penId"`
  14. PenName string `json:"penName"`
  15. DayAge int32 `json:"dayAge"`
  16. Lact int8 `json:"lact"`
  17. MatingAge int32 `json:"matingAge"`
  18. PlanDay int64 `json:"planDay"`
  19. RealityDay int64 `json:"realityDay"`
  20. EndDay int64 `json:"endDay"`
  21. PregnantCheckName string `json:"pregnantCheckName"`
  22. PregnantCheckResult pasturePb.PregnantCheckResult_Kind `json:"pregnantCheckResult"`
  23. PregnantCheckMethod pasturePb.PregnantCheckMethod_Kind `json:"pregnantCheckMethod"`
  24. BullId string `json:"bullId"`
  25. Status pasturePb.IsShow_Kind `json:"status"`
  26. OperationId int64 `json:"operationId"`
  27. OperationName string `json:"operationName"`
  28. MessageId int64 `json:"messageId"`
  29. MessageName string `json:"messageName"`
  30. Remarks string `json:"remarks"`
  31. CreatedAt int64 `json:"createdAt"`
  32. UpdatedAt int64 `json:"updatedAt"`
  33. }
  34. func (e *EventPregnantCheck) TableName() string {
  35. return "event_pregnant_check"
  36. }
  37. func (e *EventPregnantCheck) EventUpdate(
  38. pregnantCheckAt int64,
  39. pregnantCheckResult pasturePb.PregnantCheckResult_Kind,
  40. pregnantCheckMethod pasturePb.PregnantCheckMethod_Kind,
  41. operationUser, currentUser *SystemUser,
  42. remarks string,
  43. cowInfo *Cow,
  44. ) {
  45. e.RealityDay = pregnantCheckAt
  46. e.PregnantCheckResult = pregnantCheckResult
  47. e.PregnantCheckMethod = pregnantCheckMethod
  48. e.OperationId = operationUser.Id
  49. e.OperationName = operationUser.Name
  50. e.MessageId = currentUser.Id
  51. e.MessageName = currentUser.Name
  52. e.Remarks = remarks
  53. e.Status = pasturePb.IsShow_Ok
  54. e.DayAge = cowInfo.GetEventDayAge(pregnantCheckAt)
  55. }
  56. func NewEventPregnantCheck(pastureId int64, cow *Cow, penMap map[int32]*Pen, pregnantCheckName, startDay, endDay string) *EventPregnantCheck {
  57. penName := ""
  58. if pen, ok := penMap[cow.PenId]; ok {
  59. penName = pen.Name
  60. }
  61. return &EventPregnantCheck{
  62. PastureId: pastureId,
  63. CowId: cow.Id,
  64. EarNumber: cow.EarNumber,
  65. CowType: cow.CowType,
  66. PenId: cow.PenId,
  67. PenName: penName,
  68. DayAge: 0,
  69. Lact: int8(cow.Lact),
  70. PlanDay: util.TimeParseLocalUnix(startDay),
  71. EndDay: util.TimeParseLocalEndUnix(endDay),
  72. PregnantCheckName: pregnantCheckName,
  73. BullId: cow.LastBullNumber,
  74. Status: pasturePb.IsShow_No,
  75. }
  76. }
  77. func NewEventPregnantCheckList(pastureId int64, cowList []*Cow, penMap map[int32]*Pen, pregnantCheckName, startDay, endDay string) []*EventPregnantCheck {
  78. res := make([]*EventPregnantCheck, len(cowList))
  79. for i, cow := range cowList {
  80. if cow.BreedStatus != pasturePb.BreedStatus_Breeding && cow.BreedStatus != pasturePb.BreedStatus_Pregnant {
  81. continue
  82. }
  83. res[i] = NewEventPregnantCheck(pastureId, cow, penMap, pregnantCheckName, startDay, endDay)
  84. }
  85. return res
  86. }
  87. type EventPregnantCheck2 struct {
  88. Cow *Cow
  89. OperationUser *SystemUser
  90. CurrentUser *SystemUser
  91. PregnantCheckAt int64
  92. PregnantCheckMethod pasturePb.PregnantCheckMethod_Kind
  93. PregnantCheckResult pasturePb.PregnantCheckResult_Kind
  94. Remarks string
  95. }
  96. func NewEventPregnantCheck2(req *EventPregnantCheck2, penMap map[int32]*Pen) *EventPregnantCheck {
  97. penName := ""
  98. if pen, ok := penMap[req.Cow.PenId]; ok {
  99. penName = pen.Name
  100. }
  101. return &EventPregnantCheck{
  102. CowId: req.Cow.Id,
  103. CowType: req.Cow.CowType,
  104. PenId: req.Cow.PenId,
  105. PenName: penName,
  106. DayAge: req.Cow.GetDayAge(),
  107. Lact: int8(req.Cow.Lact),
  108. PlanDay: req.PregnantCheckAt,
  109. RealityDay: req.PregnantCheckAt,
  110. EndDay: req.PregnantCheckAt,
  111. PregnantCheckResult: req.PregnantCheckResult,
  112. PregnantCheckMethod: req.PregnantCheckMethod,
  113. PregnantCheckName: PregnantCheckForFirst,
  114. BullId: req.Cow.LastBullNumber,
  115. Status: pasturePb.IsShow_Ok,
  116. OperationId: req.OperationUser.Id,
  117. OperationName: req.OperationUser.Name,
  118. Remarks: req.Remarks,
  119. MessageId: req.CurrentUser.Id,
  120. MessageName: req.CurrentUser.Name,
  121. }
  122. }
  123. type EventPregnantCheckSlice []*EventPregnantCheck
  124. func (e EventPregnantCheckSlice) ToPB(
  125. pregnantCheckResultMap map[pasturePb.PregnantCheckResult_Kind]string,
  126. pregnantCheckMethodMap map[pasturePb.PregnantCheckMethod_Kind]string,
  127. ) []*pasturePb.SearchPregnantCheckList {
  128. result := make([]*pasturePb.SearchPregnantCheckList, len(e))
  129. for i, v := range e {
  130. result[i] = &pasturePb.SearchPregnantCheckList{
  131. Id: int32(v.Id),
  132. CowId: int32(v.CowId),
  133. DayAge: v.DayAge,
  134. Lact: int32(v.Lact),
  135. EarNumber: v.EarNumber,
  136. PregnantCheckAt: int32(v.RealityDay),
  137. PregnantCheckResult: v.PregnantCheckResult,
  138. PregnantCheckResultName: pregnantCheckResultMap[v.PregnantCheckResult],
  139. PregnantCheckMethod: v.PregnantCheckMethod,
  140. PregnantCheckMethodName: pregnantCheckMethodMap[v.PregnantCheckMethod],
  141. Remarks: v.Remarks,
  142. OperationId: int32(v.OperationId),
  143. OperationName: v.OperationName,
  144. CreatedAt: int32(v.CreatedAt),
  145. UpdatedAt: int32(v.UpdatedAt),
  146. }
  147. }
  148. return result
  149. }
  150. func (e EventPregnantCheckSlice) ToPB3(
  151. pregnantCheckResultMap map[pasturePb.PregnantCheckResult_Kind]string,
  152. pregnantCheckMethodMap map[pasturePb.PregnantCheckMethod_Kind]string,
  153. ) []*pasturePb.PregnancyReportTable {
  154. res := make([]*pasturePb.PregnancyReportTable, len(e))
  155. for i, v := range e {
  156. pregnancyCheckName := ""
  157. if checkName, ok := PregnantCheckNameKeyMap[v.PregnantCheckName]; ok {
  158. pregnancyCheckName = checkName
  159. }
  160. pregnantCheckMethodName := ""
  161. if checkMethodName, ok := pregnantCheckMethodMap[v.PregnantCheckMethod]; ok {
  162. pregnantCheckMethodName = checkMethodName
  163. }
  164. pregnantCheckResultName := ""
  165. if checkResultName, ok := pregnantCheckResultMap[v.PregnantCheckResult]; ok {
  166. pregnantCheckResultName = checkResultName
  167. }
  168. res[i] = &pasturePb.PregnancyReportTable{
  169. Id: int32(v.Id),
  170. CowId: int32(v.CowId),
  171. EarNumber: v.EarNumber,
  172. Lact: int32(v.Lact),
  173. PregnancyCheckName: pregnancyCheckName,
  174. PregnancyCheckAtFormat: time.Unix(v.RealityDay, 0).Local().Format(LayoutDate2),
  175. MatingAge: v.MatingAge,
  176. PregnantCheckMethod: v.PregnantCheckMethod,
  177. PregnantCheckMethodName: pregnantCheckMethodName,
  178. PregnantCheckResult: v.PregnantCheckResult,
  179. PregnantCheckResultName: pregnantCheckResultName,
  180. OperationName: v.OperationName,
  181. }
  182. }
  183. return res
  184. }