sql_more.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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() ([]*model.IndicatorsDetails, error) {
  129. list := make([]*model.IndicatorsDetails, 0)
  130. if err := s.DB.Model(new(model.IndicatorsDetails)).
  131. Where("is_show = ?", pasturePb.IsShow_Ok).
  132. Find(&list).Error; err != nil {
  133. return nil, xerr.WithStack(err)
  134. }
  135. return list, nil
  136. }
  137. func (s *StoreEntry) GetCowLastEvent(pastureId, cowId int64, eventCategoryId pasturePb.EventCategory_Kind) *model.EventCowLog {
  138. newEventCowLog := &model.EventCowLog{CowId: cowId}
  139. pref := s.DB.Table(newEventCowLog.TableName()).
  140. Where("cow_id = ?", cowId).
  141. Where("pasture_id = ?", pastureId)
  142. if eventCategoryId > 0 {
  143. pref.Where("event_category_kind = ?", eventCategoryId)
  144. }
  145. if err := pref.Order("id desc").
  146. First(newEventCowLog); err != nil {
  147. return nil
  148. }
  149. return newEventCowLog
  150. }
  151. func (s *StoreEntry) GetCowLastEventByCowIds(pastureId int64, cowIds []int64, eventCategoryId pasturePb.EventCategory_Kind) []*model.EventCowLog {
  152. newEventCowLogList := make([]*model.EventCowLog, 0)
  153. pref := s.DB.Model(new(model.EventCowLog)).
  154. Where("cow_id IN ?", cowIds).
  155. Where("pasture_id = ?", pastureId)
  156. if eventCategoryId > 0 {
  157. pref.Where("event_category_kind = ?", eventCategoryId)
  158. }
  159. if err := pref.Order("id desc").
  160. Find(&newEventCowLogList); err != nil {
  161. return nil
  162. }
  163. return newEventCowLogList
  164. }
  165. // IsExistCalvingCalf 根据cowId查询犊牛信息
  166. func (s *StoreEntry) IsExistCalvingCalf(pastureId, cowId int64) (*model.CalvingCalf, bool) {
  167. calvingCalf := &model.CalvingCalf{}
  168. if err := s.DB.Model(new(model.CalvingCalf)).
  169. Where("cow_id = ?", cowId).
  170. Where("pasture_id = ?", pastureId).
  171. First(calvingCalf).Error; err != nil {
  172. if errors.Is(err, gorm.ErrRecordNotFound) {
  173. return nil, false
  174. } else {
  175. return nil, false
  176. }
  177. }
  178. return calvingCalf, true
  179. }
  180. func (s *StoreEntry) GetAppPastureListByFarmId(ctx context.Context, farmId string) (*model.AppPastureList, error) {
  181. res := &model.AppPastureList{}
  182. if err := s.DB.Model(new(model.AppPastureList)).
  183. Where("farm_id = ?", farmId).
  184. First(res).Error; err != nil {
  185. if errors.Is(err, gorm.ErrRecordNotFound) {
  186. return nil, xerr.Custom("请选择牧场信息")
  187. } else {
  188. return nil, xerr.WithStack(err)
  189. }
  190. }
  191. if res.Id == 0 {
  192. return nil, xerr.Custom("请选择牧场信息")
  193. }
  194. if res.IsShow != pasturePb.IsShow_Ok {
  195. return nil, xerr.Custom("改牧场已禁用")
  196. }
  197. return res, nil
  198. }
  199. func (s *StoreEntry) SystemUserList(ctx context.Context, pastureId int64) ([]*model.SystemUser, error) {
  200. systemUserList := make([]*model.SystemUser, 0)
  201. if err := s.DB.Model(new(model.SystemUser)).
  202. Where("pasture_id = ?", pastureId).
  203. Where("is_delete = ?", pasturePb.IsShow_Ok).
  204. Where("is_show = ? ", pasturePb.IsShow_Ok).
  205. Find(&systemUserList).Error; err != nil {
  206. return nil, xerr.WithStack(err)
  207. }
  208. return systemUserList, nil
  209. }