Browse Source

group: list

Yi 1 year ago
parent
commit
5c0d8dcb1a
2 changed files with 75 additions and 2 deletions
  1. 6 2
      model/analysis_accuracy.go
  2. 69 0
      module/backend/dashboard_service.go

+ 6 - 2
model/analysis_accuracy.go

@@ -46,8 +46,12 @@ type Chart1 struct {
 }
 
 type PastureTopData1 struct {
-	Title []string  `json:"title"`
-	Ratio []float64 `json:"ratio"`
+	MaxValue    string    `json:"max_value"`    // 最高值
+	MiddleValue string    `json:"middle_value"` // 中位值
+	MinValue    string    `json:"min_value"`    // 最低值
+	TopOneName  string    `json:"top_one_name"` // 最高值牧场名称
+	Title       []string  `json:"title"`
+	Ratio       []float64 `json:"ratio"`
 }
 
 type SearchAnalysisAccuracyResponse struct {

+ 69 - 0
module/backend/dashboard_service.go

@@ -185,6 +185,9 @@ func (s *StoreEntry) SearchAnalysisAccuracy(ctx context.Context, req *operationP
 	})
 
 	pastureAnalysisAccuracy, err := s.PasturePrefAnalysisData(ctx, req)
+	if err != nil {
+		return nil, xerr.WithStack(err)
+	}
 	res.Data.Table = s.TitleList(ctx, pastureAnalysisAccuracy)
 
 	dashboardTopData, err := s.DashboardTopPasture(ctx, req)
@@ -211,6 +214,72 @@ func (s *StoreEntry) SearchAnalysisAccuracy(ctx context.Context, req *operationP
 		},
 	}
 
+	maTitleValueList, mcTitleValueList, saTitleValueList, scTitleValueList := make([]float64, 0), make([]float64, 0), make([]float64, 0), make([]float64, 0)
+	for pastureId, data := range pastureAnalysisAccuracy {
+		if _, err = s.GetGroupPastureListById(ctx, pastureId); err != nil {
+			zaplog.Error("SearchAnalysisAccuracy GetGroupPastureListById",
+				zap.Any("pastureId", pastureId), zap.Any("error", err))
+			continue
+		}
+		if data == nil {
+			continue
+		}
+
+		mixedFodderAccurateRatioDataList := make([]string, 0)
+		for _, v := range data.MixedFodderAccurateRatio {
+			mixedFodderAccurateRatioDataList = append(mixedFodderAccurateRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
+			maTitleValueList = append(maTitleValueList, v.Ratio)
+		}
+
+		mixedFodderCorrectRatioDataList := make([]string, 0)
+		for _, v := range data.MixedFodderCorrectRatio {
+			mixedFodderCorrectRatioDataList = append(mixedFodderCorrectRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
+			mcTitleValueList = append(mcTitleValueList, v.Ratio)
+		}
+
+		sprinkleFodderRatioDataList := make([]string, 0)
+		for _, v := range data.SprinkleFodderAccurateRatio {
+			sprinkleFodderRatioDataList = append(sprinkleFodderRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
+			saTitleValueList = append(saTitleValueList, v.Ratio)
+		}
+
+		sprinkleFodderCorrectRatioDataList := make([]string, 0)
+		for _, v := range data.SprinkleFodderCorrectRatio {
+			sprinkleFodderCorrectRatioDataList = append(sprinkleFodderCorrectRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
+			scTitleValueList = append(scTitleValueList, v.Ratio)
+		}
+	}
+
+	pastureTopDataList, err := s.TopPasture(ctx, req)
+	if err != nil {
+		zaplog.Error("SearchAnalysisAccuracy", zap.Any("TopPasture", err), zap.Any("request", req))
+		return nil, xerr.WithStack(err)
+	}
+
+	sort.Float64s(maTitleValueList)
+	dashboardTopData1.MixedFodderAccurateRatio.MaxValue = fmt.Sprintf("%.2f", maTitleValueList[len(maTitleValueList)-1])
+	dashboardTopData1.MixedFodderAccurateRatio.MinValue = fmt.Sprintf("%.2f", maTitleValueList[0])
+	dashboardTopData1.MixedFodderAccurateRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(maTitleValueList))
+	dashboardTopData1.MixedFodderAccurateRatio.TopOneName = pastureTopDataList.Data.MixedFodderAccurateRatio[0].PastureName
+
+	sort.Float64s(mcTitleValueList)
+	dashboardTopData1.MixedFodderCorrectRatio.MaxValue = fmt.Sprintf("%.2f", mcTitleValueList[len(mcTitleValueList)-1])
+	dashboardTopData1.MixedFodderCorrectRatio.MinValue = fmt.Sprintf("%.2f", mcTitleValueList[0])
+	dashboardTopData1.MixedFodderCorrectRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(mcTitleValueList))
+	dashboardTopData1.MixedFodderCorrectRatio.TopOneName = pastureTopDataList.Data.MixedFodderCorrectRatio[0].PastureName
+
+	sort.Float64s(saTitleValueList)
+	dashboardTopData1.SprinkleFodderAccurateRatio.MaxValue = fmt.Sprintf("%.2f", saTitleValueList[len(saTitleValueList)-1])
+	dashboardTopData1.SprinkleFodderAccurateRatio.MinValue = fmt.Sprintf("%.2f", saTitleValueList[0])
+	dashboardTopData1.SprinkleFodderAccurateRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(saTitleValueList))
+	dashboardTopData1.SprinkleFodderAccurateRatio.TopOneName = pastureTopDataList.Data.SprinkleFodderAccurateRatio[0].PastureName
+
+	sort.Float64s(scTitleValueList)
+	dashboardTopData1.SprinkleFodderCorrectRatio.MaxValue = fmt.Sprintf("%.2f", scTitleValueList[len(scTitleValueList)-1])
+	dashboardTopData1.SprinkleFodderCorrectRatio.MinValue = fmt.Sprintf("%.2f", scTitleValueList[0])
+	dashboardTopData1.SprinkleFodderCorrectRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(scTitleValueList))
+	dashboardTopData1.SprinkleFodderCorrectRatio.TopOneName = pastureTopDataList.Data.SprinkleFodderCorrectRatio[0].PastureName
+
 	for _, v := range dashboardTopData.MixedFodderCorrectRatio {
 		dashboardTopData1.MixedFodderCorrectRatio.Title = append(dashboardTopData1.MixedFodderCorrectRatio.Title, v.PastureName)
 		dashboardTopData1.MixedFodderCorrectRatio.Ratio = append(dashboardTopData1.MixedFodderCorrectRatio.Ratio, v.Ratio)