package backend import ( "context" "kpt-pasture/model" "kpt-pasture/util" "net/http" "time" "gitee.com/xuyiping_admin/pkg/xerr" pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow" ) func (s *StoreEntry) PenBehavior(ctx context.Context, req *pasturePb.BarnBehaviorCurveRequest) (*pasturePb.BarnBehaviorCurveResponse, error) { userModel, err := s.GetUserModel(ctx) if err != nil { return nil, err } if req.StartAt == 0 || req.EndAt == 0 || req.EndAt < req.StartAt { return nil, xerr.Customf("时间范围错误") } startTime := time.Unix(int64(req.StartAt), 0).Local().Format(model.LayoutDate2) endTime := time.Unix(int64(req.EndAt), 0).Local().Format(model.LayoutDate2) penBehaviorList := make([]*model.PenBehavior, 0) if err = s.DB.Model(new(model.PenBehavior)). Where("pasture_id = ?", userModel.AppPasture.Id). Where("pen_id = ?", req.PenId). Where("heat_date BETWEEN ? AND ?", startTime, endTime). Find(&penBehaviorList).Error; err != nil { return nil, err } return &pasturePb.BarnBehaviorCurveResponse{ Code: http.StatusOK, Msg: "ok", Data: model.PenBehaviorSlice(penBehaviorList).ToPB(), }, nil } func (s *StoreEntry) PenBehaviorDaily(ctx context.Context, req *pasturePb.BarnMonitorRequest) (*pasturePb.BarnMonitorResponse, error) { userModel, err := s.GetUserModel(ctx) if err != nil { return nil, xerr.WithStack(err) } if req.StartAt == 0 || req.EndAt == 0 || req.EndAt < req.StartAt { return nil, xerr.Customf("时间范围错误") } startDate := time.Unix(int64(req.StartAt), 0).Local().Format(model.LayoutDate2) endDate := time.Unix(int64(req.EndAt), 0).Local().Format(model.LayoutDate2) dataTimeRange, err := util.GetDaysBetween(startDate, endDate) if err != nil { return nil, xerr.WithStack(err) } penBehaviorDayModelList := make([]*model.PenBehaviorDayModel, 0) pref := s.DB.Model(new(model.PenBehaviorDay)). Select(`distinct(heat_date) as heat_date,pen_id,pen_name,rumina_std,cow_count,day_rumina,day_intake, day_inactive,day_milk,day_rumina+day_intake as day_chew,24*60 - day_active as day_immobility`). Where("pasture_id = ?", userModel.AppPasture.Id). Where("heat_date BETWEEN ? AND ?", startDate, endDate) if len(req.BarnIds) == 0 && req.BehaviorKind > 0 { if err = pref.Where("pen_id IN (?)", req.BarnIds). Order("heat_date"). Find(penBehaviorDayModelList).Error; err != nil { return nil, xerr.WithStack(err) } } else { if err = pref.Group("heat_date,pen_id"). Order("heat_date,pen_id"). Find(penBehaviorDayModelList).Error; err != nil { return nil, xerr.WithStack(err) } } return &pasturePb.BarnMonitorResponse{ Code: http.StatusOK, Msg: "ok", Data: model.PenBehaviorDayModelSlice(penBehaviorDayModelList).ToPB(dataTimeRange), }, err }