فهرست منبع

analysis: 栏舍饲喂监测

Yi 3 روز پیش
والد
کامیت
efadde3416
9فایلهای تغییر یافته به همراه75 افزوده شده و 69 حذف شده
  1. 1 1
      dep/di_crontab.go
  2. 1 1
      go.mod
  3. 2 0
      go.sum
  4. 24 0
      http/handler/analysis/analysis.go
  5. 1 35
      http/middleware/log.go
  6. 13 11
      http/route/analysis_api.go
  7. 21 21
      model/milk_daily.go
  8. 11 0
      module/backend/analysis_more.go
  9. 1 0
      module/backend/interface.go

+ 1 - 1
dep/di_crontab.go

@@ -122,7 +122,7 @@ func EntryCrontab(dependency CrontabDependency) *cron.Crontab {
 		panic(err)
 	}
 
-	err = newCrontab.Bind("UpdatePenBehaviorDaily", cs.UpdatePenBehavior, dependency.CrontabHub.UpdatePenBehaviorDaily)
+	err = newCrontab.Bind("UpdatePenBehaviorDaily", cs.UpdatePenBehaviorDaily, dependency.CrontabHub.UpdatePenBehaviorDaily)
 	if err != nil {
 		zaplog.Error("EntryCrontab", zap.Any("UpdatePenBehaviorDaily", err))
 		panic(err)

+ 1 - 1
go.mod

@@ -3,7 +3,7 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20250325011618-727f0797ea27
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250325071609-113a7f4c6da5
 	gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eclipse/paho.mqtt.golang v1.4.3

+ 2 - 0
go.sum

@@ -84,6 +84,8 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20250324120913-88e4f53314db h1:QLLT24YP
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250324120913-88e4f53314db/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250325011618-727f0797ea27 h1:DruuERLrwZPshZoCQjgRDTYzsQd1CgAFJmoSq8PdVVk=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250325011618-727f0797ea27/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250325071609-113a7f4c6da5 h1:gOfJObe2DLEfFjO+8+atJ2mLWAo6HAkOnYQIFW4P7tk=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250325071609-113a7f4c6da5/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b h1:w05MxH7yqveRlaRbxHhbif5YjPrJFodRPfOjYhXn7Zk=
 gitee.com/xuyiping_admin/pkg v0.0.0-20241108060137-caea58c59f5b/go.mod h1:8tF25X6pE9WkFCczlNAC0K2mrjwKvhhp02I7o0HtDxY=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 24 - 0
http/handler/analysis/analysis.go

@@ -332,3 +332,27 @@ func PenBehaviorAnalysis(c *gin.Context) {
 
 	c.JSON(http.StatusOK, res)
 }
+
+func PenBehaviorDaily(c *gin.Context) {
+	var req pasturePb.BarnMonitorRequest
+	if err := ginutil.BindProto(c, &req); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	if err := valid.ValidateStruct(&req,
+		valid.Field(&req.StartAt, valid.Required),
+		valid.Field(&req.EndAt, valid.Required),
+	); err != nil {
+		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
+		return
+	}
+
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.PenBehaviorDaily(c, &req)
+	if err != nil {
+		apierr.ClassifiedAbort(c, err)
+		return
+	}
+
+	c.JSON(http.StatusOK, res)
+}

+ 1 - 35
http/middleware/log.go

@@ -58,6 +58,7 @@ func GinLogger() gin.HandlerFunc {
 			zap.String("time", cost.String()),
 			zap.String("Request body", string(requestBody)),
 			zap.String("Response body", w.body.String()),
+			zap.String("x-request-id", c.GetHeader("X-Request-ID")),
 		}
 		if len(c.Errors) > 0 {
 			logFields = append(logFields, zap.Any("stack", string(debug.Stack())))
@@ -74,41 +75,6 @@ func GinRecovery(stack bool) gin.HandlerFunc {
 	return func(c *gin.Context) {
 		defer func() {
 			if err := recover(); err != nil {
-				/*// Check for a broken connection, as it is not really a
-				// condition that warrants a panic stack trace.
-				var brokenPipe bool
-				if ne, ok := err.(*net.OpError); ok {
-					if se, ok := ne.Err.(*os.SyscallError); ok {
-						if strings.Contains(strings.ToLower(se.Error()), "broken pipe") || strings.Contains(strings.ToLower(se.Error()), "connection reset by peer") {
-							brokenPipe = true
-						}
-					}
-				}
-
-				httpRequest, _ := httputil.DumpRequest(c.Request, false)
-				if brokenPipe {
-					zaplog.Error(c.Request.URL.Path,
-						zap.Any("error", err),
-						zap.String("request", string(httpRequest)),
-					)
-					// If the connection is dead, we can't write a status to it.
-					c.Error(err.(error)) // nolint: errcheck
-					c.Abort()
-					return
-				}
-
-				if stack {
-					zaplog.Error("[Recovery from panic]",
-						zap.Any("error", err),
-						zap.String("request", string(httpRequest)),
-						zap.String("stack", string(debug.Stack())),
-					)
-				} else {
-					zaplog.Error("[Recovery from panic]",
-						zap.Any("error", err),
-						zap.String("request", string(httpRequest)),
-					)
-				}*/
 				defer func() {
 					if err = recover(); err != nil {
 						body, _ := ioutil.ReadAll(c.Request.Body)

+ 13 - 11
http/route/analysis_api.go

@@ -13,19 +13,21 @@ func AnalysisAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		}
 		// analysis API 组
 		analysisRoute := authRouteGroup(s, "/api/v1/analysis/")
-		analysisRoute.POST("/weight/scatter/plot", analysis.WeightScatterPlot)                        // 体重散点图
-		analysisRoute.POST("/weight/range", analysis.WeightRange)                                     // 体重区间图
-		analysisRoute.POST("/mating/timely", analysis.MatingTimeLy)                                   // 配种及时性
-		analysisRoute.POST("/pen/weight", analysis.PenWeight)                                         // 栏舍体重
-		analysisRoute.POST("/abortion/rate", analysis.AbortionRate)                                   // 流产率
-		analysisRoute.POST("/twenty/one/pregnant/rate", analysis.TwentyOnePregnantRate)               // 21天怀孕率
-		analysisRoute.POST("/pregnancy/report", analysis.PregnancyReport)                             // 孕检报告
-		analysisRoute.POST("/calving/report", analysis.CalvingReport)                                 // 产犊报告
-		analysisRoute.POST("/disease/cure/report", analysis.DiseaseCureReport)                        // 疾病治疗报告
-		analysisRoute.POST("/sale/cow/report", analysis.SaleCowReport)                                // 销售牛牛报告
+		analysisRoute.POST("/weight/scatter/plot", analysis.WeightScatterPlot)          // 体重散点图
+		analysisRoute.POST("/weight/range", analysis.WeightRange)                       // 体重区间图
+		analysisRoute.POST("/mating/timely", analysis.MatingTimeLy)                     // 配种及时性
+		analysisRoute.POST("/pen/weight", analysis.PenWeight)                           // 栏舍体重
+		analysisRoute.POST("/abortion/rate", analysis.AbortionRate)                     // 流产率
+		analysisRoute.POST("/twenty/one/pregnant/rate", analysis.TwentyOnePregnantRate) // 21天怀孕率
+		analysisRoute.POST("/pregnancy/report", analysis.PregnancyReport)               // 孕检报告
+		analysisRoute.POST("/calving/report", analysis.CalvingReport)                   // 产犊报告
+		analysisRoute.POST("/disease/cure/report", analysis.DiseaseCureReport)          // 疾病治疗报告
+		analysisRoute.POST("/sale/cow/report", analysis.SaleCowReport)                  // 销售牛牛报告
+
 		analysisRoute.POST("/single/factor/pregnant/report", analysis.SingleFactorInfantSurvivalRate) // 单因素受胎率
 		analysisRoute.POST("/multi/factor/pregnant/report", analysis.MultiFactorInfantSurvivalRate)   // 多因素受胎率
 
-		analysisRoute.POST("/pen/behavior", analysis.PenBehaviorAnalysis)
+		analysisRoute.POST("/pen/behavior", analysis.PenBehaviorAnalysis)      // 栏舍行为数据
+		analysisRoute.POST("/pen/behavior/monitor", analysis.PenBehaviorDaily) // 栏舍饲喂监测
 	}
 }

+ 21 - 21
model/milk_daily.go

@@ -3,27 +3,27 @@ package model
 import pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 
 type MilkDaily struct {
-	Id              int64                      `json:"id"`
-	PastureId       int64                      `json:"pastureId"`
-	HeatDate        string                     `json:"heatDate"`
-	CowId           int64                      `json:"cowId"`
-	Lact            int32                      `json:"lact"`
-	BreedStatus     pasturePb.BreedStatus_Kind `json:"breedStatus"`
-	LactationAge    int32                      `json:"lactationAge"`
-	PenId           int32                      `json:"penId"`
-	PenName         string                     `json:"penName"`
-	Conductivity    float32                    `json:"conductivity"`
-	DayYield        float32                    `json:"dayYield"`
-	MilkingDuration float32                    `json:"milkingDuration"`
-	DayHigh         int32                      `json:"dayHigh"`
-	WeekAvg         float32                    `json:"weekAvg"`
-	DayRumina       int32                      `json:"dayRumina"`
-	DayIntake       int32                      `json:"dayIntake"`
-	DayInactive     int32                      `json:"dayInactive"`
-	DayGasp         int32                      `json:"dayGasp"`
-	DayActive       int32                      `json:"dayActive"`
-	CreatedAt       int64                      `json:"createdAt"`
-	UpdatedAt       int64                      `json:"updatedAt"`
+	Id           int64                      `json:"id"`
+	PastureId    int64                      `json:"pastureId"`
+	HeatDate     string                     `json:"heatDate"`
+	CowId        int64                      `json:"cowId"`
+	Lact         int32                      `json:"lact"`
+	BreedStatus  pasturePb.BreedStatus_Kind `json:"breedStatus"`
+	LactationAge int32                      `json:"lactationAge"`
+	PenId        int32                      `json:"penId"`
+	PenName      string                     `json:"penName"`
+	Conductivity float32                    `json:"conductivity"`
+	DayYield     float32                    `json:"dayYield"`
+	MilkDuration float32                    `json:"milkDuration"`
+	DayHigh      int32                      `json:"dayHigh"`
+	WeekAvg      float32                    `json:"weekAvg"`
+	DayRumina    int32                      `json:"dayRumina"`
+	DayIntake    int32                      `json:"dayIntake"`
+	DayInactive  int32                      `json:"dayInactive"`
+	DayGasp      int32                      `json:"dayGasp"`
+	DayActive    int32                      `json:"dayActive"`
+	CreatedAt    int64                      `json:"createdAt"`
+	UpdatedAt    int64                      `json:"updatedAt"`
 }
 
 func (m *MilkDaily) TableName() string {

+ 11 - 0
module/backend/analysis_more.go

@@ -2,6 +2,7 @@ package backend
 
 import (
 	"context"
+	"fmt"
 	"kpt-pasture/model"
 	"net/http"
 	"time"
@@ -37,3 +38,13 @@ func (s *StoreEntry) PenBehavior(ctx context.Context, req *pasturePb.BarnBehavio
 		Data: model.PenBehaviorSlice(penBehaviorList).ToPB(),
 	}, nil
 }
+
+func (s *StoreEntry) PenBehaviorDaily(ctx context.Context, req *pasturePb.BarnMonitorRequest) (*pasturePb.BarnMonitorResponse, error) {
+	userModel, err := s.GetUserModel(ctx)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	fmt.Println("userModel", userModel)
+	return nil, err
+}

+ 1 - 0
module/backend/interface.go

@@ -286,6 +286,7 @@ type AnalyseService interface {
 	MultipleFactorAnalysis(ctx context.Context, req *pasturePb.MultiFactorPregnancyRateRequest) (*model.MultiFactorPregnancyRateResponse, error)
 
 	PenBehavior(ctx context.Context, req *pasturePb.BarnBehaviorCurveRequest) (*pasturePb.BarnBehaviorCurveResponse, error)
+	PenBehaviorDaily(ctx context.Context, req *pasturePb.BarnMonitorRequest) (*pasturePb.BarnMonitorResponse, error)
 }
 
 //go:generate mockgen -destination mock/DashboardService.go -package kptservicemock kpt-pasture/module/backend DashboardService