|
@@ -50,13 +50,22 @@ func (s *StoreEntry) NeckRingWarningEstrusOrAbortionCowList(ctx context.Context,
|
|
|
pref.Where("b.pen_id IN ?", req.PenIds)
|
|
|
}
|
|
|
|
|
|
- if err = pref.Group("a.cow_id").
|
|
|
- Order("a.date_time,a.level DESC").
|
|
|
- Count(&count).
|
|
|
- Limit(int(pagination.PageSize)).
|
|
|
- Offset(int(pagination.PageOffset)).
|
|
|
- Find(&neckRingEstrusList).Error; err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
+ // 按照发情时间和发情等级倒叙排序
|
|
|
+ if req.MatingWindowPeriod > 0 {
|
|
|
+ if err = pref.Group("a.cow_id").
|
|
|
+ Order("DATE_FORMAT(a.first_time, '%Y-%m-%d') DESC,a.level DESC").
|
|
|
+ Find(&neckRingEstrusList).Error; err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if err = pref.Group("a.cow_id").
|
|
|
+ Order("DATE_FORMAT(a.first_time, '%Y-%m-%d') DESC,a.level DESC").
|
|
|
+ Count(&count).
|
|
|
+ Limit(int(pagination.PageSize)).
|
|
|
+ Offset(int(pagination.PageOffset)).
|
|
|
+ Find(&neckRingEstrusList).Error; err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
cowMap := make(map[int64]*model.Cow)
|
|
@@ -79,11 +88,22 @@ func (s *StoreEntry) NeckRingWarningEstrusOrAbortionCowList(ctx context.Context,
|
|
|
cowMap[cow.Id] = cow
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
list := model.NeckRingEstrusWarningSlice(neckRingEstrusList).ToPB(cowMap, eventLogMap, req.MatingWindowPeriod)
|
|
|
+ // 分页
|
|
|
if req.MatingWindowPeriod > 0 {
|
|
|
count = int64(len(list))
|
|
|
+ if int32(count) > pagination.PageOffset {
|
|
|
+ end := pagination.PageOffset + pagination.PageSize
|
|
|
+ if end > int32(count) {
|
|
|
+ end = int32(count)
|
|
|
+ }
|
|
|
+ list = list[pagination.PageOffset:end]
|
|
|
+ } else {
|
|
|
+ // 如果偏移量已超过列表长度,返回空列表
|
|
|
+ list = list[:0]
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
return &pasturePb.EstrusResponse{
|
|
|
Code: http.StatusOK,
|
|
|
Msg: "ok",
|