event_pregnant_check.go 7.8 KB

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