Prechádzať zdrojové kódy

feeding: 饲喂模块更新

Yi 2 mesiacov pred
rodič
commit
ef9ce946bd

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20250704074215-792bdf94697f
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250708055755-eca7bde9521e
 	gitee.com/xuyiping_admin/pkg v0.0.0-20250613101634-36c36a2d27d0
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eclipse/paho.mqtt.golang v1.4.3

+ 2 - 0
go.sum

@@ -1321,6 +1321,8 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20250704015606-a7700f1dd25c h1:w4zzRgZm
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250704015606-a7700f1dd25c/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250704074215-792bdf94697f h1:T8pnxQrMhpNZE06hiiK+EQinW7R8ttfbEUtTjTPUrLM=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250704074215-792bdf94697f/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250708055755-eca7bde9521e h1:6J5ou2TgMj+zX910ELsJj0XRq1uVKGyNcdSx3Uoj2NE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250708055755-eca7bde9521e/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20250613101634-36c36a2d27d0 h1:ZCOqEAnGm6+DTAhACigzWKbwMKtleb8/7OzP2xfHG7g=
 gitee.com/xuyiping_admin/pkg v0.0.0-20250613101634-36c36a2d27d0/go.mod h1:8tF25X6pE9WkFCczlNAC0K2mrjwKvhhp02I7o0HtDxY=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 1 - 1
http/route/feeding.go → http/route/feeding_api.go

@@ -13,7 +13,7 @@ func FeedingAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		}
 		feedingRoute := authRouteGroup(s, "/api/v1/feeding/")
 
-		feedingRoute.GET("tmrdata", feeding.GetFeedingHomepage)
+		feedingRoute.GET("tmr/data", feeding.GetFeedingHomepage)
 		feedingRoute.GET("management", feeding.GetFeedingManagement)
 	}
 }

+ 2 - 2
model/app_pasture_list.go

@@ -21,14 +21,14 @@ type AppPastureList struct {
 	PlanScale            string                         `json:"planScale"`
 	AppId                string                         `json:"appId"`
 	Status               int32                          `json:"status"`
+	FeedPastureId        int64                          `json:"feedPastureId"`
+	FeedPastureUrl       string                         `json:"feedPastureUrl"`
 	IsShow               pasturePb.IsShow_Kind          `json:"isShow"`
 	ProductionModel      int32                          `json:"productionModel"`
 	Remarks              string                         `json:"remarks"`
 	CreatedName          string                         `json:"createdName"`
 	CreatedAt            int64                          `json:"createdAt"`
 	UpdatedAt            string                         `json:"updatedAt"`
-	PastureId            int64                          `json:"pastureId"`
-	PastureUrl           string                         `json:"pastureUrl"`
 }
 
 func (a *AppPastureList) TableName() string {

+ 0 - 39
model/feeding.go

@@ -1,39 +0,0 @@
-package model
-
-type FeedingHomepageResponse struct {
-	Code int32                  `json:"code"`
-	Msg  string                 `json:"msg"`
-	Data []*FeedingHomepageData `json:"data"`
-}
-
-type FeedingHomepageData struct {
-	Cost       string `json:"cost"`       // "0.00"
-	DoneTimes  string `json:"doneTimes"`  // "23"
-	DoneWeight string `json:"doneWeight"` // "0.00"
-	MonRateHL  string `json:"monRateHL"`  // "100.03%"
-	MonRateSL  string `json:"monRateSL"`  // "98.66%"
-	MonRateSLR string `json:"monRateSLR"` // "69.59%"
-	Montime    string `json:"montime"`    // "5.41"
-	PlanTimes  string `json:"planTimes"`  // "41"
-	PlanWeight string `json:"planWeight"` // "0.00"
-	Temtime    string `json:"temtime"`    // "7.04"
-	TotalCost  string `json:"totalCost"`  // "0.00"
-	YesRateHL  string `json:"yesRateHL"`  // "99.92%"
-	YesRateSL  string `json:"yesRateSL"`  // "99.92%"
-	YesRateSLR string `json:"yesRateSLR"` // "72.54%"
-}
-
-type FeedingManagementResponse struct {
-	Code int32                    `json:"code"`
-	Msg  string                   `json:"msg"`
-	Data []*FeedingManagementData `json:"data"`
-}
-
-type FeedingManagementData struct {
-	ActualWeightMinus string `json:"actualweightminus"` // "15456.23"
-	CCount            string `json:"ccount"`            // "147"
-	Cost              string `json:"cost"`              // "0.00"
-	DryWeight         string `json:"dryweight"`         // "0.00"
-	TotalCost         string `json:"totalcost"`         // "0.00"
-	TypeA             string `json:"typea"`             // "11"
-}

+ 35 - 127
module/backend/feeding.go

@@ -1,167 +1,75 @@
 package backend
 
 import (
-	"bytes"
 	"context"
 	"encoding/json"
 	"fmt"
-	"io/ioutil"
-	"kpt-pasture/model"
-	"net/http"
-	"time"
+	"kpt-pasture/service/httpclient"
 
 	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
+var FeedingHeaders = []*httpclient.Header{
+	{
+		Key:   "Content-Type",
+		Value: "application/json",
+	}, {
+		Key:   "Accept",
+		Value: "application/json",
+	},
 }
 
-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)
+func (s *StoreEntry) GetFeedingHomepage(ctx context.Context, req *feedingPb.FeedingHomepageRequest) (*feedingPb.FeedingHomepageResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
 	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
+	pasture := userModel.AppPasture
+	if pasture.FeedPastureId == 0 {
+		return nil, xerr.Customf("饲喂数据未配置")
 	}
-	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)
+	url := fmt.Sprintf("%d/feeding/tmrdata", pasture.FeedPastureId)
+	res := &feedingPb.FeedingHomepageResponse{
+		Code: 0,
+		Msg:  "",
+		Data: make([]*feedingPb.FeedingHomepageData, 0),
 	}
-	req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(b))
+	result, err := s.HttpClient.DoGet(url, FeedingHeaders)
 	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 {
+	if err = json.Unmarshal(result, res); 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 {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
 		return nil, xerr.WithStack(err)
 	}
-	if pasture.PastureId == 0 {
-		return nil, xerr.Customf("牧场不存在")
+	pasture := userModel.AppPasture
+	if pasture.FeedPastureId == 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)
+	url := fmt.Sprintf("%d/feeding/management?typea=%s&startdate=%s&enddate=%s", pasture.FeedPastureId, req.Typea, req.Startdate, req.Enddate)
 	res := &feedingPb.FeedingManagementResponse{
-		Code: response.Code,
-		Msg:  response.Msg,
+		Code: 0,
+		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,
-		})
+	result, err := s.HttpClient.DoGet(url, FeedingHeaders)
+	if err != nil {
+		return nil, xerr.WithStack(err)
 	}
 
+	if err = json.Unmarshal(result, res); err != nil {
+		return nil, xerr.WithStack(err)
+	}
 	return res, nil
 }

+ 6 - 6
module/backend/interface.go

@@ -60,8 +60,8 @@ type KptService interface {
 	MilkHallService      // 奶厅数据相关
 	UploadService        // 上传文件相关
 	WarningService       // 预警相关
-	TestService          // 测试相关
 	FeedingService       // 饲喂相关
+	TestService          // 测试相关
 }
 
 //go:generate mockgen -destination mock/SystemService.go -package kptservicemock kpt-pasture/module/backend SystemService
@@ -367,6 +367,11 @@ type UploadService interface {
 	ImportExcel2(ctx context.Context, data [][]string, excelHeader []string) error
 }
 
+type FeedingService interface {
+	GetFeedingHomepage(ctx context.Context, req *pasturePb.FeedingHomepageRequest) (*pasturePb.FeedingHomepageResponse, error)
+	GetFeedingManagement(ctx context.Context, req *pasturePb.FeedingManagementRequest) (*pasturePb.FeedingManagementResponse, error)
+}
+
 type TestService interface {
 	CowNeckRingNumberBound(ctx context.Context, pagination *pasturePb.PaginationModel) error
 	CowNeckRingNumberBound2(ctx context.Context, pagination *pasturePb.PaginationModel) error
@@ -378,8 +383,3 @@ type TestService interface {
 	CalvingAge(ctx context.Context) error
 	SystemMenuInit(ctx context.Context) error
 }
-
-type FeedingService interface {
-	GetFeedingHomepage(ctx context.Context, req *pasturePb.FeedingHomepageRequest) (*pasturePb.FeedingHomepageResponse, error)
-	GetFeedingManagement(ctx context.Context, req *pasturePb.FeedingManagementRequest) (*pasturePb.FeedingManagementResponse, error)
-}

+ 1 - 1
service/httpclient/http.go

@@ -21,7 +21,7 @@ type Service struct {
 func NewClientService() *Service {
 	return &Service{
 		authClient: &http.Client{
-			Timeout: time.Duration(5) * time.Second,
+			Timeout: time.Duration(60) * time.Second,
 		},
 	}
 }