indicators.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package backend
  2. import (
  3. "context"
  4. "kpt-pasture/model"
  5. "net/http"
  6. pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  7. "gitee.com/xuyiping_admin/pkg/xerr"
  8. )
  9. func (s *StoreEntry) IndicatorsComparison(ctx context.Context, req *pasturePb.IndicatorsComparisonRequest) (*model.IndicatorsComparisonResponse, error) {
  10. userModel, err := s.GetUserModel(ctx)
  11. if err != nil {
  12. return nil, xerr.WithStack(err)
  13. }
  14. indicatorsDataList := make([]*model.IndicatorsData, 0)
  15. pref := s.DB.Model(new(model.IndicatorsData)).
  16. Where("pasture_id = ?", userModel.AppPasture.Id).
  17. Where("date IN (?)", req.DateList)
  18. if req.CategoryKind > 0 {
  19. pref.Where("category_type = ?", req.CategoryKind)
  20. }
  21. if len(req.KindList) > 0 {
  22. pref.Where("kind IN (?)", req.KindList)
  23. }
  24. if err = pref.Order("date,kind").Find(&indicatorsDataList).Error; err != nil {
  25. return nil, xerr.WithStack(err)
  26. }
  27. indicatorsDetailsMap, err := s.GetIndicatorsDetailsMap(ctx)
  28. if err != nil {
  29. return nil, xerr.WithStack(err)
  30. }
  31. return &model.IndicatorsComparisonResponse{
  32. Code: http.StatusOK,
  33. Msg: "ok",
  34. Data: model.IndicatorsDataSlice(indicatorsDataList).ToPB(indicatorsDetailsMap),
  35. }, nil
  36. }
  37. func (s *StoreEntry) GetIndicatorsDetailsMap(ctx context.Context) (map[string]*model.IndicatorsDetails, error) {
  38. indicatorsDetails := make(map[string]*model.IndicatorsDetails)
  39. indicatorsDetailsList, err := s.FindIndicatorsDetailsList(ctx)
  40. if err != nil {
  41. return nil, xerr.WithStack(err)
  42. }
  43. for _, v := range indicatorsDetailsList {
  44. indicatorsDetails[v.Kind] = v
  45. }
  46. return indicatorsDetails, err
  47. }
  48. func (s *StoreEntry) GetIndicatorsDataByDate(pastureId int64, Kind, date string) (*model.IndicatorsData, error) {
  49. res := &model.IndicatorsData{}
  50. if err := s.DB.Model(new(model.IndicatorsData)).
  51. Where("pasture_id = ?", pastureId).
  52. Where("kind = ?", Kind).
  53. Where("date = ?", date).
  54. First(&res).Error; err != nil {
  55. return nil, xerr.WithStack(err)
  56. }
  57. return res, nil
  58. }