sql_more.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package backend
  2. import (
  3. "context"
  4. "errors"
  5. "kpt-pasture/model"
  6. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  7. "gitee.com/xuyiping_admin/pkg/xerr"
  8. "gorm.io/gorm"
  9. )
  10. // FindLastEventMatingByCowId 根据cowId获取最近一次配种表信息
  11. func (s *StoreEntry) FindLastEventMatingByCowId(ctx context.Context, pastureId, cowId int64) (*model.EventMating, error) {
  12. newEventMating := &model.EventMating{}
  13. if err := s.DB.Model(new(model.EventMating)).
  14. Where("cow_id = ?", cowId).
  15. Where("pasture_id = ?", pastureId).
  16. Order("id desc").
  17. First(newEventMating).Error; err != nil {
  18. return nil, xerr.WithStack(err)
  19. }
  20. return newEventMating, nil
  21. }
  22. func (s *StoreEntry) FindEventEstrusByCowId(pastureId, cowId int64, startTime, endTime int64) bool {
  23. var count int64
  24. if err := s.DB.Model(new(model.EventEstrus)).
  25. Where("cow_id = ?", cowId).
  26. Where("pasture_id = ?", pastureId).
  27. Where("reality_day BETWEEN ? AND ?", startTime, endTime).
  28. Where("is_show = ? ", pasturePb.IsShow_Ok).
  29. Count(&count).Error; err != nil {
  30. return false
  31. }
  32. return count > 0
  33. }
  34. func (s *StoreEntry) FindEventMatingByCowId(pastureId, cowId int64) bool {
  35. var count int64
  36. if err := s.DB.Model(new(model.EventMating)).
  37. Where("cow_id = ?", cowId).
  38. Where("pasture_id = ?", pastureId).
  39. Where("is_show = ? ", pasturePb.IsShow_Ok).
  40. Count(&count).Error; err != nil {
  41. return false
  42. }
  43. return count > 0
  44. }
  45. func (s *StoreEntry) GetOutboundById(ctx context.Context, pastureId, id int64) (*model.Outbound, error) {
  46. res := &model.Outbound{}
  47. if err := s.DB.Model(new(model.Outbound)).Where("pasture_id = ?", pastureId).
  48. Where("id = ?", id).First(res).Error; err != nil {
  49. return nil, xerr.WithStack(err)
  50. }
  51. return res, nil
  52. }
  53. func (s *StoreEntry) GetOutboundDetailByOutboundId(ctx context.Context, id int64) ([]*model.OutboundDetail, error) {
  54. list := make([]*model.OutboundDetail, 0)
  55. if err := s.DB.Model(new(model.OutboundDetail)).
  56. Where("outbound_id = ?", id).
  57. Where("is_delete = ?", pasturePb.IsShow_Ok).
  58. Find(&list).Error; err != nil {
  59. return nil, xerr.WithStack(err)
  60. }
  61. return list, nil
  62. }
  63. func (s *StoreEntry) FindEventPregnantCheckIsExIstByCowId(ctx context.Context, cow *model.Cow) (*model.EventPregnantCheck, error) {
  64. newEventPregnantCheck := &model.EventPregnantCheck{}
  65. if err := s.DB.Model(new(model.EventPregnantCheck)).
  66. Where("cow_id = ?", cow.Id).
  67. Where("lact = ?", cow.Lact).
  68. Where("status = ?", pasturePb.IsShow_No).
  69. Order("id desc").
  70. First(newEventPregnantCheck).Error; err != nil {
  71. if errors.Is(err, gorm.ErrRecordNotFound) {
  72. return nil, xerr.Customf("该牛只: %d 孕检数据未找到", cow.Id)
  73. } else {
  74. return nil, xerr.WithStack(err)
  75. }
  76. }
  77. return newEventPregnantCheck, nil
  78. }
  79. func (s *StoreEntry) DiseaseMaps(ctx context.Context) (map[int64]*model.Disease, error) {
  80. res := make(map[int64]*model.Disease)
  81. list := make([]*model.Disease, 0)
  82. if err := s.DB.Model(new(model.Disease)).Where("is_show = ?", pasturePb.IsShow_Ok).Find(&list).Error; err != nil {
  83. return nil, xerr.WithStack(err)
  84. }
  85. for _, v := range list {
  86. res[v.Id] = v
  87. }
  88. return res, nil
  89. }
  90. // NeckRingIsExist 根据neckRingNumber判断该耳环是否存在
  91. func (s *StoreEntry) NeckRingIsExist(pastureId int64, number string) (*model.NeckRing, bool) {
  92. neckRing := &model.NeckRing{}
  93. if err := s.DB.Model(new(model.NeckRing)).
  94. Where("neck_ring_number = ?", number).
  95. Where("pasture_id = ?", pastureId).
  96. First(neckRing).Error; err != nil {
  97. if errors.Is(err, gorm.ErrRecordNotFound) {
  98. return nil, false
  99. } else {
  100. return nil, false
  101. }
  102. }
  103. return neckRing, true
  104. }
  105. func (s *StoreEntry) GetEventLogList(
  106. cowId int64, lact int32,
  107. eventCategoryId pasturePb.EventCategory_Kind,
  108. paginationModel *pasturePb.PaginationModel,
  109. ) ([]*model.EventCowLog, error) {
  110. eventLogList := make([]*model.EventCowLog, 0)
  111. newEventCowLog := &model.EventCowLog{CowId: cowId}
  112. pref := s.DB.Table(newEventCowLog.TableName()).
  113. Where("cow_id = ?", cowId)
  114. if lact >= 0 {
  115. pref.Where("lact = ?", lact)
  116. }
  117. if eventCategoryId > 0 {
  118. pref.Where("event_category_id = ?", eventCategoryId)
  119. }
  120. if err := pref.Order("id desc").
  121. Offset(int(paginationModel.PageOffset)).
  122. Limit(int(paginationModel.PageSize)).
  123. Find(&eventLogList).Error; err != nil {
  124. return nil, xerr.WithStack(err)
  125. }
  126. return eventLogList, nil
  127. }
  128. func (s *StoreEntry) FindIndicatorsDetailsList(ctx context.Context) ([]*model.IndicatorsDetails, error) {
  129. list := make([]*model.IndicatorsDetails, 0)
  130. if err := s.DB.Model(new(model.IndicatorsDetails)).Find(&list).Error; err != nil {
  131. return nil, xerr.WithStack(err)
  132. }
  133. return list, nil
  134. }
  135. func (s *StoreEntry) GetCowLastEvent(pastureId, cowId int64, eventCategoryId pasturePb.EventCategory_Kind) *model.EventCowLog {
  136. newEventCowLog := &model.EventCowLog{CowId: cowId}
  137. pref := s.DB.Table(newEventCowLog.TableName()).
  138. Where("cow_id = ?", cowId).Where("pasture_id = ?", pastureId)
  139. if eventCategoryId > 0 {
  140. pref.Where("event_category_kind = ?", eventCategoryId)
  141. }
  142. if err := pref.Order("id desc").
  143. First(newEventCowLog); err != nil {
  144. return nil
  145. }
  146. return newEventCowLog
  147. }
  148. // IsExistCalvingCalf 根据cowId查询犊牛信息
  149. func (s *StoreEntry) IsExistCalvingCalf(pastureId, cowId int64) (*model.CalvingCalf, bool) {
  150. calvingCalf := &model.CalvingCalf{}
  151. if err := s.DB.Model(new(model.CalvingCalf)).
  152. Where("cow_id = ?", cowId).
  153. Where("pasture_id = ?", pastureId).
  154. First(calvingCalf).Error; err != nil {
  155. if errors.Is(err, gorm.ErrRecordNotFound) {
  156. return nil, false
  157. } else {
  158. return nil, false
  159. }
  160. }
  161. return calvingCalf, true
  162. }
  163. func (s *StoreEntry) GetAppPastureListByFarmId(ctx context.Context, farmId string) (*model.AppPastureList, error) {
  164. res := &model.AppPastureList{}
  165. if err := s.DB.Model(new(model.AppPastureList)).
  166. Where("farm_id = ?", farmId).
  167. First(res).Error; err != nil {
  168. if errors.Is(err, gorm.ErrRecordNotFound) {
  169. return nil, xerr.Custom("请选择牧场信息")
  170. } else {
  171. return nil, xerr.WithStack(err)
  172. }
  173. }
  174. if res.Id == 0 {
  175. return nil, xerr.Custom("请选择牧场信息")
  176. }
  177. if res.IsShow != pasturePb.IsShow_Ok {
  178. return nil, xerr.Custom("改牧场已禁用")
  179. }
  180. return res, nil
  181. }