소스 검색

feeding:manageent update

baishaojie 5 일 전
부모
커밋
15cefe57e1
10개의 변경된 파일198개의 추가작업 그리고 38개의 파일을 삭제
  1. 1 1
      go.mod
  2. 10 2
      go.sum
  3. 32 10
      http/handler/feeding/feeding.go
  4. 2 2
      http/route/feeding.go
  5. 7 1
      migrator/v0001_demo.sql
  6. 2 0
      model/app_pasture_list.go
  7. 33 11
      model/feeding.go
  8. 3 3
      module/backend/event_health_more.go
  9. 102 8
      module/backend/feeding.go
  10. 6 0
      module/backend/interface.go

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20250616080546-3ebf4d3f0874
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250704074215-792bdf94697f
 	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

+ 10 - 2
go.sum

@@ -1317,8 +1317,16 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
 gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
 git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20230802054950-77dee3d12065/go.mod h1:cxbPefIf1o+cyQwvFaM3ndaoUeaK5aWzPV/eZQGJPgE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20250616080546-3ebf4d3f0874 h1:jD/wa9PorrqH0TDiasHboBdLgmlXw1oFOc0Fly7Fw/s=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20250616080546-3ebf4d3f0874/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704040136-9bb37db2fd82 h1:tjlVuE2RSasXxq0h5mT42VcWRDyNOUo38eokWdnDn/M=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704040136-9bb37db2fd82/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704060638-753d352ad24d h1:XRyt2bKwHVGEGltKksSZ/bZpAHwc742/Xjc8djuHhwM=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704060638-753d352ad24d/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704063647-dfa699f4c2ed h1:ZPBPfmvQhhOUwo5PvnpPb0J8mcZc2cntwo+1IXdXqzM=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704063647-dfa699f4c2ed/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704070236-b65a2653506d h1:ciLYFjEb1fDj/RlwWqMChDtnyNEOMN+ktxFL6x+/T20=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250704070236-b65a2653506d/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/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=

+ 32 - 10
http/handler/feeding/feeding.go

@@ -1,20 +1,42 @@
 package feeding
 
 import (
-	"fmt"
-	"kpt-pasture/module/backend"
+	"kpt-pasture/http/middleware"
+	"net/http"
 
+	feedingPb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	"gitee.com/xuyiping_admin/pkg/apierr"
+	"gitee.com/xuyiping_admin/pkg/ginutil"
 	"github.com/gin-gonic/gin"
 )
 
 func GetFeedingHomepage(c *gin.Context) {
-	// var req feedingPb.FeedingRequest
-	// if err := ginutil.BindProto(c, &req); err != nil {
-	// 	apierr.AbortBadRequest(c, http.StatusBadRequest, err)
-	// 	return
-	// }
+	var req feedingPb.FeedingHomepageRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+	res, err := middleware.BackendOperation(c).OpsService.GetFeedingHomepage(c, &req)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
+}
+
+// feeding/management
+
+func GetFeedingManagement(c *gin.Context) {
+	var req feedingPb.FeedingManagementRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
 
-	client := backend.NewFeedingService()
-	data, err := client.DoGet("http://192.168.1.85:8081/feeding/tmrdata")
-	fmt.Println(string(data), err)
+	res, err := middleware.BackendOperation(c).OpsService.GetFeedingManagement(c, &req)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+	ginutil.JSONResp(c, res)
 }

+ 2 - 2
http/route/feeding.go

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

+ 7 - 1
migrator/v0001_demo.sql

@@ -3,4 +3,10 @@ CREATE TABLE IF NOT EXISTS `demo` (
    `created_at` bigint(20) unsigned NOT NULL COMMENT '创建时间',
    `updated_at` bigint(20) unsigned NOT NULL COMMENT '更新时间',
    PRIMARY KEY (`id`)
-) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='demo';
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='demo';
+
+
+
+ALTER TABLE `kpt_pasture`.`app_pasture_list` 
+ADD COLUMN `pasture_id` int(11) NULL COMMENT '饲喂系统牧场id' AFTER `updated_at`,
+ADD COLUMN `pasture_url` varchar(80) NULL COMMENT '饲喂系统url' AFTER `pasture_id`;

+ 2 - 0
model/app_pasture_list.go

@@ -27,6 +27,8 @@ type AppPastureList struct {
 	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 {

+ 33 - 11
model/feeding.go

@@ -1,17 +1,39 @@
 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 PastureCommonResponse struct {
-	Code int32              `json:"code"`
-	Msg  string             `json:"msg"`
-	Data *PastureCommonData `json:"data"`
+type FeedingManagementResponse struct {
+	Code int32                    `json:"code"`
+	Msg  string                   `json:"msg"`
+	Data []*FeedingManagementData `json:"data"`
 }
 
-type PastureCommonData struct {
-	List     interface{} `json:"list"`
-	Data     interface{} `json:"data"`
-	PageSize int32       `json:"pageSize"`
-	Total    int32       `json:"total"`
-	PageNum  int32       `json:"pageNum"`
-}
+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"
+}

+ 3 - 3
module/backend/event_health_more.go

@@ -35,9 +35,9 @@ func (s *StoreEntry) CowDiseaseTreatmentDetail(ctx context.Context, req *pasture
 		pref.Where("disease_id = ?", req.DiseaseId)
 	}
 
-	if req.DiseaseStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseStartAt <= req.DiseaseEndAt {
-		pref.Where("disease_at BETWEEN ? AND ?", req.DiseaseStartAt, req.DiseaseEndAt)
-	}
+	// if req.DiseaseStartAt > 0 && req.DiseaseEndAt > 0 && req.DiseaseStartAt <= req.DiseaseEndAt {
+	// 	pref.Where("disease_at BETWEEN ? AND ?", req.DiseaseStartAt, req.DiseaseEndAt)
+	// }
 
 	if err = pref.Count(&count).
 		Limit(int(pagination.PageSize)).

+ 102 - 8
module/backend/feeding.go

@@ -2,29 +2,33 @@ 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 FeedingService struct {
+type FeedingHttp struct {
 	authClient *http.Client
 }
 
-func NewFeedingService() *FeedingService {
-	return &FeedingService{
+func NewFeedingService() *FeedingHttp {
+	return &FeedingHttp{
 		authClient: &http.Client{
 			Timeout: time.Duration(60) * time.Second,
 		},
 	}
 }
 
-func (c *FeedingService) doRequest(req *http.Request) ([]byte, error) {
+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))
@@ -42,10 +46,14 @@ func (c *FeedingService) doRequest(req *http.Request) ([]byte, error) {
 			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 *FeedingService) DoGet(url string) ([]byte, error) {
+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))
@@ -53,10 +61,10 @@ func (c *FeedingService) DoGet(url string) ([]byte, error) {
 	}
 	req.Header.Add("Accept", "application/json")
 	req.Header.Add("Content-Type", "application/json")
-	return c.doRequest(req)
+	return c.doRequest(req, response)
 }
 
-func (c *FeedingService) DoPost(url string, body interface{}) ([]byte, error) {
+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))
@@ -69,5 +77,91 @@ func (c *FeedingService) DoPost(url string, body interface{}) ([]byte, error) {
 	}
 	req.Header.Add("Accept", "application/json")
 	req.Header.Add("Content-Type", "application/json")
-	return c.doRequest(req)
+	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
 }

+ 6 - 0
module/backend/interface.go

@@ -57,6 +57,7 @@ type KptService interface {
 	UploadService        // 上传文件相关
 	WarningService       // 预警相关
 	TestService          // 测试相关
+	FeedingService       // 饲喂相关
 }
 
 //go:generate mockgen -destination mock/SystemService.go -package kptservicemock kpt-pasture/module/backend SystemService
@@ -370,3 +371,8 @@ 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)
+}