123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- 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
- }
|