feeding.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package backend
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. "io/ioutil"
  8. "kpt-pasture/model"
  9. "net/http"
  10. "time"
  11. feedingPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
  12. "gitee.com/xuyiping_admin/pkg/logger/zaplog"
  13. "gitee.com/xuyiping_admin/pkg/xerr"
  14. "go.uber.org/zap"
  15. )
  16. type FeedingHttp struct {
  17. authClient *http.Client
  18. }
  19. func NewFeedingService() *FeedingHttp {
  20. return &FeedingHttp{
  21. authClient: &http.Client{
  22. Timeout: time.Duration(60) * time.Second,
  23. },
  24. }
  25. }
  26. func (c *FeedingHttp) doRequest(req *http.Request, response interface{}) ([]byte, error) {
  27. resp, err := http.DefaultClient.Do(req)
  28. if err != nil {
  29. zaplog.Error("ClientService", zap.Any("authClient.Do", err))
  30. return nil, xerr.WithStack(err)
  31. }
  32. b, err := ioutil.ReadAll(resp.Body)
  33. if err != nil {
  34. zaplog.Error("ClientService", zap.Any("ioutil.ReadAll", err))
  35. return nil, xerr.WithStack(err)
  36. }
  37. if resp.StatusCode != http.StatusOK {
  38. if len(b) > 0 {
  39. return nil, xerr.Customf("err:%v,body:%s", err, string(b))
  40. } else {
  41. return nil, xerr.Customf("err:%v", err)
  42. }
  43. }
  44. fmt.Println(string(b))
  45. if err = json.Unmarshal(b, response); err != nil {
  46. return nil, xerr.WithStack(err)
  47. }
  48. return b, nil
  49. }
  50. func (c *FeedingHttp) DoGet(url string, response interface{}) ([]byte, error) {
  51. req, err := http.NewRequest(http.MethodGet, url, nil)
  52. if err != nil {
  53. zaplog.Error("ClientService", zap.Any("DoGet", err))
  54. return nil, err
  55. }
  56. req.Header.Add("Accept", "application/json")
  57. req.Header.Add("Content-Type", "application/json")
  58. return c.doRequest(req, response)
  59. }
  60. func (c *FeedingHttp) DoPost(url string, body interface{}, response *interface{}) ([]byte, error) {
  61. b, err := json.Marshal(body)
  62. if err != nil {
  63. zaplog.Error("ClientService", zap.Any("DoPost-Marshal", err))
  64. return nil, xerr.WithStack(err)
  65. }
  66. req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(b))
  67. if err != nil {
  68. zaplog.Error("ClientService", zap.Any("NewRequest", err))
  69. return nil, xerr.WithStack(err)
  70. }
  71. req.Header.Add("Accept", "application/json")
  72. req.Header.Add("Content-Type", "application/json")
  73. return c.doRequest(req, response)
  74. }
  75. func (s *StoreEntry) GetFeedingHomepage(ctx context.Context, req *feedingPb.FeedingHomepageRequest) (*feedingPb.FeedingHomepageResponse, error) {
  76. var pasture model.AppPastureList
  77. if err := s.DB.Debug().Table(new(model.AppPastureList).TableName()).Where("farm_id = ?", req.FarmId).First(&pasture).Error; err != nil {
  78. return nil, xerr.WithStack(err)
  79. }
  80. if pasture.PastureId == 0 {
  81. return nil, xerr.Customf("牧场不存在")
  82. }
  83. url := fmt.Sprintf("%s/feeding/tmrdata", pasture.PastureUrl)
  84. fmt.Println(url)
  85. client := NewFeedingService()
  86. response := &model.FeedingHomepageResponse{Data: []*model.FeedingHomepageData{}}
  87. _, err := client.DoGet(url, response)
  88. if err != nil {
  89. return nil, xerr.WithStack(err)
  90. }
  91. fmt.Println(response)
  92. res := &feedingPb.FeedingHomepageResponse{
  93. Code: response.Code,
  94. Msg: response.Msg,
  95. Data: &feedingPb.FeedingHomepageData{},
  96. }
  97. for _, v := range response.Data {
  98. res.Data = &feedingPb.FeedingHomepageData{
  99. Cost: v.Cost,
  100. DoneTimes: v.DoneTimes,
  101. DoneWeight: v.DoneWeight,
  102. MonRateHL: v.MonRateHL,
  103. MonRateSL: v.MonRateSL,
  104. MonRateSLR: v.MonRateSLR,
  105. Montime: v.Montime,
  106. PlanTimes: v.PlanTimes,
  107. PlanWeight: v.PlanWeight,
  108. Temtime: v.Temtime,
  109. TotalCost: v.TotalCost,
  110. YesRateHL: v.YesRateHL,
  111. YesRateSL: v.YesRateSL,
  112. YesRateSLR: v.YesRateSLR,
  113. }
  114. }
  115. return res, nil
  116. }
  117. func (s *StoreEntry) GetFeedingManagement(ctx context.Context, req *feedingPb.FeedingManagementRequest) (*feedingPb.FeedingManagementResponse, error) {
  118. var pasture model.AppPastureList
  119. if err := s.DB.Debug().Table(new(model.AppPastureList).TableName()).Where("farm_id = ?", req.FarmId).First(&pasture).Error; err != nil {
  120. return nil, xerr.WithStack(err)
  121. }
  122. if pasture.PastureId == 0 {
  123. return nil, xerr.Customf("牧场不存在")
  124. }
  125. url := fmt.Sprintf("%s/feeding/management?typea=%s&startdate=%s&enddate=%s", pasture.PastureUrl, req.Typea, req.Startdate, req.Enddate)
  126. fmt.Println(url)
  127. client := NewFeedingService()
  128. response := &model.FeedingManagementResponse{Data: []*model.FeedingManagementData{}}
  129. _, err := client.DoGet(url, response)
  130. if err != nil {
  131. return nil, xerr.WithStack(err)
  132. }
  133. fmt.Println(response)
  134. res := &feedingPb.FeedingManagementResponse{
  135. Code: response.Code,
  136. Msg: response.Msg,
  137. Data: []*feedingPb.FeedingManagementData{},
  138. }
  139. for _, v := range response.Data {
  140. res.Data = append(res.Data, &feedingPb.FeedingManagementData{
  141. Actualweightminus: v.ActualWeightMinus,
  142. Ccount: v.CCount,
  143. Cost: v.Cost,
  144. Dryweight: v.DryWeight,
  145. Totalcost: v.TotalCost,
  146. Typea: v.TypeA,
  147. })
  148. }
  149. return res, nil
  150. }