|
@@ -0,0 +1,167 @@
|
|
|
+package backend
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "context"
|
|
|
+ "encoding/json"
|
|
|
+ "fmt"
|
|
|
+ "io/ioutil"
|
|
|
+ "kpt-pasture/model"
|
|
|
+ "net/http"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ feedingPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
|
|
|
+ "gitee.com/xuyiping_admin/pkg/logger/zaplog"
|
|
|
+ "gitee.com/xuyiping_admin/pkg/xerr"
|
|
|
+ "go.uber.org/zap"
|
|
|
+)
|
|
|
+
|
|
|
+type FeedingHttp struct {
|
|
|
+ authClient *http.Client
|
|
|
+}
|
|
|
+
|
|
|
+func NewFeedingService() *FeedingHttp {
|
|
|
+ return &FeedingHttp{
|
|
|
+ authClient: &http.Client{
|
|
|
+ Timeout: time.Duration(60) * time.Second,
|
|
|
+ },
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (c *FeedingHttp) doRequest(req *http.Request, response interface{}) ([]byte, error) {
|
|
|
+ resp, err := http.DefaultClient.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("authClient.Do", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ b, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("ioutil.ReadAll", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ if resp.StatusCode != http.StatusOK {
|
|
|
+ if len(b) > 0 {
|
|
|
+ return nil, xerr.Customf("err:%v,body:%s", err, string(b))
|
|
|
+ } else {
|
|
|
+ return nil, xerr.Customf("err:%v", err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ fmt.Println(string(b))
|
|
|
+ if err = json.Unmarshal(b, response); err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ return b, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (c *FeedingHttp) DoGet(url string, response interface{}) ([]byte, error) {
|
|
|
+ req, err := http.NewRequest(http.MethodGet, url, nil)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("DoGet", err))
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ req.Header.Add("Accept", "application/json")
|
|
|
+ req.Header.Add("Content-Type", "application/json")
|
|
|
+ return c.doRequest(req, response)
|
|
|
+}
|
|
|
+
|
|
|
+func (c *FeedingHttp) DoPost(url string, body interface{}, response *interface{}) ([]byte, error) {
|
|
|
+ b, err := json.Marshal(body)
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("DoPost-Marshal", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(b))
|
|
|
+ if err != nil {
|
|
|
+ zaplog.Error("ClientService", zap.Any("NewRequest", err))
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ req.Header.Add("Accept", "application/json")
|
|
|
+ req.Header.Add("Content-Type", "application/json")
|
|
|
+ return c.doRequest(req, response)
|
|
|
+}
|
|
|
+
|
|
|
+func (s *StoreEntry) GetFeedingHomepage(ctx context.Context, req *feedingPb.FeedingHomepageRequest) (*feedingPb.FeedingHomepageResponse, error) {
|
|
|
+ var pasture model.AppPastureList
|
|
|
+ if err := s.DB.Debug().Table(new(model.AppPastureList).TableName()).Where("farm_id = ?", req.FarmId).First(&pasture).Error; err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ if pasture.PastureId == 0 {
|
|
|
+ return nil, xerr.Customf("牧场不存在")
|
|
|
+ }
|
|
|
+
|
|
|
+ url := fmt.Sprintf("%s/feeding/tmrdata", pasture.PastureUrl)
|
|
|
+ fmt.Println(url)
|
|
|
+ client := NewFeedingService()
|
|
|
+
|
|
|
+ response := &model.FeedingHomepageResponse{Data: []*model.FeedingHomepageData{}}
|
|
|
+ _, err := client.DoGet(url, response)
|
|
|
+ if err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ fmt.Println(response)
|
|
|
+ res := &feedingPb.FeedingHomepageResponse{
|
|
|
+ Code: response.Code,
|
|
|
+ Msg: response.Msg,
|
|
|
+ Data: &feedingPb.FeedingHomepageData{},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range response.Data {
|
|
|
+ res.Data = &feedingPb.FeedingHomepageData{
|
|
|
+ Cost: v.Cost,
|
|
|
+ DoneTimes: v.DoneTimes,
|
|
|
+ DoneWeight: v.DoneWeight,
|
|
|
+ MonRateHL: v.MonRateHL,
|
|
|
+ MonRateSL: v.MonRateSL,
|
|
|
+ MonRateSLR: v.MonRateSLR,
|
|
|
+ Montime: v.Montime,
|
|
|
+ PlanTimes: v.PlanTimes,
|
|
|
+ PlanWeight: v.PlanWeight,
|
|
|
+ Temtime: v.Temtime,
|
|
|
+ TotalCost: v.TotalCost,
|
|
|
+ YesRateHL: v.YesRateHL,
|
|
|
+ YesRateSL: v.YesRateSL,
|
|
|
+ YesRateSLR: v.YesRateSLR,
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return res, nil
|
|
|
+}
|
|
|
+
|
|
|
+func (s *StoreEntry) GetFeedingManagement(ctx context.Context, req *feedingPb.FeedingManagementRequest) (*feedingPb.FeedingManagementResponse, error) {
|
|
|
+ var pasture model.AppPastureList
|
|
|
+ if err := s.DB.Debug().Table(new(model.AppPastureList).TableName()).Where("farm_id = ?", req.FarmId).First(&pasture).Error; err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ if pasture.PastureId == 0 {
|
|
|
+ return nil, xerr.Customf("牧场不存在")
|
|
|
+ }
|
|
|
+
|
|
|
+ url := fmt.Sprintf("%s/feeding/management?typea=%s&startdate=%s&enddate=%s", pasture.PastureUrl, req.Typea, req.Startdate, req.Enddate)
|
|
|
+ fmt.Println(url)
|
|
|
+ client := NewFeedingService()
|
|
|
+
|
|
|
+ response := &model.FeedingManagementResponse{Data: []*model.FeedingManagementData{}}
|
|
|
+ _, err := client.DoGet(url, response)
|
|
|
+ if err != nil {
|
|
|
+ return nil, xerr.WithStack(err)
|
|
|
+ }
|
|
|
+ fmt.Println(response)
|
|
|
+ res := &feedingPb.FeedingManagementResponse{
|
|
|
+ Code: response.Code,
|
|
|
+ Msg: response.Msg,
|
|
|
+ Data: []*feedingPb.FeedingManagementData{},
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, v := range response.Data {
|
|
|
+ res.Data = append(res.Data, &feedingPb.FeedingManagementData{
|
|
|
+ Actualweightminus: v.ActualWeightMinus,
|
|
|
+ Ccount: v.CCount,
|
|
|
+ Cost: v.Cost,
|
|
|
+ Dryweight: v.DryWeight,
|
|
|
+ Totalcost: v.TotalCost,
|
|
|
+ Typea: v.TypeA,
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return res, nil
|
|
|
+}
|