package backend import ( "context" "fmt" "kpt-tmr-group/model" "kpt-tmr-group/pkg/xerr" operationPb "kpt-tmr-group/proto/go/backend/operation" "net/http" "time" ) func (s *StoreEntry) SearchFormulaEstimateList(ctx context.Context, req *operationPb.SearchFormulaEstimateRequest) (*operationPb.SearchFormulaEstimateResponse, error) { startTime, err := time.Parse(model.LayoutTime, req.StartTime) if err != nil { return nil, xerr.WithStack(err) } endTime, err := time.Parse(model.LayoutTime, req.EndTime) if err != nil { return nil, xerr.WithStack(err) } startTimeUnix := startTime.Unix() endTimeUnix := endTime.Unix() formulaEstimate := make([]*model.FormulaEstimate, 0) var count int64 = 0 pref := s.DB.Model(new(model.FormulaEstimate)) if req.Name != "" { pref.Where("name like ?", fmt.Sprintf("%s%s%s", "%", req.Name, "%")) } if startTimeUnix > 0 && endTimeUnix > 0 && endTimeUnix >= startTimeUnix { pref.Where("created_at BETWEEN ? AND ?", startTimeUnix, endTimeUnix) } if req.SearchType == 1 { pref.Where("feed_formula_name = ?", req.Name) } else { pref.Where("barn_id = ?", req.Name) } if err = pref.Order("id desc").Count(&count).Limit(int(req.Pagination.PageSize)).Offset(int(req.Pagination.PageOffset)). Find(&formulaEstimate).Error; err != nil { return nil, xerr.WithStack(err) } return &operationPb.SearchFormulaEstimateResponse{ Code: http.StatusOK, Msg: "ok", Data: &operationPb.SearchFormulaEstimate{ Page: req.Pagination.Page, Total: int32(count), PageSize: req.Pagination.PageSize, List: model.FormulaEstimateSlice(formulaEstimate).ToPB(), }, }, nil }