|
@@ -19,7 +19,9 @@ import (
|
|
|
"go.uber.org/zap"
|
|
|
)
|
|
|
|
|
|
-const compareTime = 10 * 60
|
|
|
+const (
|
|
|
+ compareTime = 10 * 60
|
|
|
+)
|
|
|
|
|
|
// PasturePrefAnalysisData PasturePrefExecTimeData PastureSprinkleFeedTime TODO 后期三个函数封装一下
|
|
|
func (s *StoreEntry) PasturePrefAnalysisData(ctx context.Context, req *operationPb.SearchAnalysisAccuracyRequest) (map[int64]*model.PastureAnalysisAccuracyData, error) {
|
|
@@ -185,18 +187,12 @@ func (s *StoreEntry) SearchAnalysisAccuracy(ctx context.Context, req *operationP
|
|
|
Value: "牧场",
|
|
|
})
|
|
|
|
|
|
- pastureAnalysisAccuracy, err := s.PasturePrefAnalysisData(ctx, req)
|
|
|
+ dashboardTopData, pastureAnalysisAccuracy, err := s.DashboardTopPasture(ctx, req)
|
|
|
if err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
|
- zaplog.Info("SearchAnalysisAccuracy", zap.Any("pastureAnalysisAccuracy", pastureAnalysisAccuracy))
|
|
|
res.Data.Table = s.TitleList(ctx, pastureAnalysisAccuracy)
|
|
|
|
|
|
- dashboardTopData, err := s.DashboardTopPasture(ctx, req)
|
|
|
- if err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
dashboardTopData1 := &model.Chart1{
|
|
|
MixedFodderAccurateRatio: &model.PastureTopData1{
|
|
|
Title: make([]string, 0),
|
|
@@ -215,69 +211,54 @@ func (s *StoreEntry) SearchAnalysisAccuracy(ctx context.Context, req *operationP
|
|
|
Ratio: make([]float64, 0),
|
|
|
},
|
|
|
}
|
|
|
+ pastureDayTimeRatioList := make(map[operationPb.DashboardTopType_Kind][]*model.PastureDayTimeRatio)
|
|
|
|
|
|
- pastureDayTimeRatioList := make(map[operationPb.DashboardTopType_Kind][]*model.PastureDayTimeRatio, 0)
|
|
|
- for pastureId, data := range pastureAnalysisAccuracy {
|
|
|
- pastureInfo, err := s.GetGroupPastureListById(ctx, pastureId)
|
|
|
- if err != nil {
|
|
|
- zaplog.Error("SearchAnalysisAccuracy GetGroupPastureListById",
|
|
|
- zap.Any("pastureId", pastureId), zap.Any("error", err))
|
|
|
- continue
|
|
|
- }
|
|
|
- if data == nil {
|
|
|
- continue
|
|
|
- }
|
|
|
-
|
|
|
- for _, v := range data.MixedFodderAccurateRatio {
|
|
|
- pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE] =
|
|
|
- append(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE],
|
|
|
- &model.PastureDayTimeRatio{
|
|
|
- PastureId: pastureId,
|
|
|
- PastureName: pastureInfo.Name,
|
|
|
- DayTime: v.DayTime,
|
|
|
- Ratio: v.Ratio,
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- for _, v := range data.MixedFodderCorrectRatio {
|
|
|
- pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT] =
|
|
|
- append(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT],
|
|
|
- &model.PastureDayTimeRatio{
|
|
|
- PastureId: pastureId,
|
|
|
- PastureName: pastureInfo.Name,
|
|
|
- DayTime: v.DayTime,
|
|
|
- Ratio: v.Ratio,
|
|
|
- })
|
|
|
- }
|
|
|
+ for _, v := range dashboardTopData.MixedFodderCorrectRatio {
|
|
|
+ pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE] =
|
|
|
+ append(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE],
|
|
|
+ &model.PastureDayTimeRatio{
|
|
|
+ PastureId: v.PastureId,
|
|
|
+ PastureName: v.PastureName,
|
|
|
+ Ratio: v.Ratio,
|
|
|
+ })
|
|
|
+ dashboardTopData1.MixedFodderCorrectRatio.Title = append(dashboardTopData1.MixedFodderCorrectRatio.Title, v.PastureName)
|
|
|
+ dashboardTopData1.MixedFodderCorrectRatio.Ratio = append(dashboardTopData1.MixedFodderCorrectRatio.Ratio, v.Ratio)
|
|
|
+ }
|
|
|
|
|
|
- for _, v := range data.SprinkleFodderAccurateRatio {
|
|
|
- pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE] =
|
|
|
- append(pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE],
|
|
|
- &model.PastureDayTimeRatio{
|
|
|
- PastureId: pastureId,
|
|
|
- PastureName: pastureInfo.Name,
|
|
|
- DayTime: v.DayTime,
|
|
|
- Ratio: v.Ratio,
|
|
|
- })
|
|
|
- }
|
|
|
+ for _, v := range dashboardTopData.MixedFodderAccurateRatio {
|
|
|
+ pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT] =
|
|
|
+ append(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT],
|
|
|
+ &model.PastureDayTimeRatio{
|
|
|
+ PastureId: v.PastureId,
|
|
|
+ PastureName: v.PastureName,
|
|
|
+ Ratio: v.Ratio,
|
|
|
+ })
|
|
|
+ dashboardTopData1.MixedFodderAccurateRatio.Title = append(dashboardTopData1.MixedFodderAccurateRatio.Title, v.PastureName)
|
|
|
+ dashboardTopData1.MixedFodderAccurateRatio.Ratio = append(dashboardTopData1.MixedFodderAccurateRatio.Ratio, v.Ratio)
|
|
|
+ }
|
|
|
|
|
|
- for _, v := range data.SprinkleFodderCorrectRatio {
|
|
|
- pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT] =
|
|
|
- append(pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT],
|
|
|
- &model.PastureDayTimeRatio{
|
|
|
- PastureId: pastureId,
|
|
|
- PastureName: pastureInfo.Name,
|
|
|
- DayTime: v.DayTime,
|
|
|
- Ratio: v.Ratio,
|
|
|
- })
|
|
|
- }
|
|
|
+ for _, v := range dashboardTopData.SprinkleFodderAccurateRatio {
|
|
|
+ pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE] =
|
|
|
+ append(pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE],
|
|
|
+ &model.PastureDayTimeRatio{
|
|
|
+ PastureId: v.PastureId,
|
|
|
+ PastureName: v.PastureName,
|
|
|
+ Ratio: v.Ratio,
|
|
|
+ })
|
|
|
+ dashboardTopData1.SprinkleFodderAccurateRatio.Title = append(dashboardTopData1.SprinkleFodderAccurateRatio.Title, v.PastureName)
|
|
|
+ dashboardTopData1.SprinkleFodderAccurateRatio.Ratio = append(dashboardTopData1.SprinkleFodderAccurateRatio.Ratio, v.Ratio)
|
|
|
}
|
|
|
- zaplog.Info("SearchAnalysisAccuracyBefore", zap.Any("pastureDayTimeRatioList", pastureDayTimeRatioList))
|
|
|
|
|
|
- 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)
|
|
|
+ for _, v := range dashboardTopData.SprinkleFodderCorrectRatio {
|
|
|
+ pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT] =
|
|
|
+ append(pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT],
|
|
|
+ &model.PastureDayTimeRatio{
|
|
|
+ PastureId: v.PastureId,
|
|
|
+ PastureName: v.PastureName,
|
|
|
+ Ratio: v.Ratio,
|
|
|
+ })
|
|
|
+ dashboardTopData1.SprinkleFodderCorrectRatio.Title = append(dashboardTopData1.SprinkleFodderCorrectRatio.Title, v.PastureName)
|
|
|
+ dashboardTopData1.SprinkleFodderCorrectRatio.Ratio = append(dashboardTopData1.SprinkleFodderCorrectRatio.Ratio, v.Ratio)
|
|
|
}
|
|
|
// 排序 最大值。最小值。中位数
|
|
|
sort.Slice(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE], func(i, j int) bool {
|
|
@@ -292,187 +273,34 @@ func (s *StoreEntry) SearchAnalysisAccuracy(ctx context.Context, req *operationP
|
|
|
sort.Slice(pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT], func(i, j int) bool {
|
|
|
return pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT][i].Ratio < pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT][j].Ratio
|
|
|
})
|
|
|
-
|
|
|
- zaplog.Info("SearchAnalysisAccuracyAfter", zap.Any("pastureDayTimeRatioList", pastureDayTimeRatioList))
|
|
|
-
|
|
|
// 混料准确率
|
|
|
dashboardTopData1.MixedFodderAccurateRatio.MaxValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE][len(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE])-1].Ratio)
|
|
|
dashboardTopData1.MixedFodderAccurateRatio.MinValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE][0].Ratio)
|
|
|
dashboardTopData1.MixedFodderAccurateRatio.MiddleValue = fmt.Sprintf("%.2f", getPastureDayTimeRatioMiddleValue(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE]))
|
|
|
- dashboardTopData1.MixedFodderAccurateRatio.TopOneName = pastureTopDataList.Data.MixedFodderAccurateRatio[0].PastureName
|
|
|
+ dashboardTopData1.MixedFodderAccurateRatio.TopOneName = pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_ACCURATE][0].PastureName
|
|
|
|
|
|
// 混料正确率
|
|
|
dashboardTopData1.MixedFodderCorrectRatio.MaxValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT][len(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT])-1].Ratio)
|
|
|
dashboardTopData1.MixedFodderCorrectRatio.MinValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT][0].Ratio)
|
|
|
dashboardTopData1.MixedFodderCorrectRatio.MiddleValue = fmt.Sprintf("%.2f", getPastureDayTimeRatioMiddleValue(pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT]))
|
|
|
- dashboardTopData1.MixedFodderCorrectRatio.TopOneName = pastureTopDataList.Data.MixedFodderCorrectRatio[0].PastureName
|
|
|
+ dashboardTopData1.MixedFodderCorrectRatio.TopOneName = pastureDayTimeRatioList[operationPb.DashboardTopType_MIXED_CORRECT][0].PastureName
|
|
|
|
|
|
// 散料准确率
|
|
|
dashboardTopData1.SprinkleFodderAccurateRatio.MaxValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE][len(pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE])-1].Ratio)
|
|
|
dashboardTopData1.SprinkleFodderAccurateRatio.MinValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE][0].Ratio)
|
|
|
dashboardTopData1.SprinkleFodderAccurateRatio.MiddleValue = fmt.Sprintf("%.2f", getPastureDayTimeRatioMiddleValue(pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE]))
|
|
|
- dashboardTopData1.SprinkleFodderAccurateRatio.TopOneName = pastureTopDataList.Data.SprinkleFodderAccurateRatio[0].PastureName
|
|
|
+ dashboardTopData1.SprinkleFodderAccurateRatio.TopOneName = pastureDayTimeRatioList[operationPb.DashboardTopType_SPRINKLE_ACCURATE][0].PastureName
|
|
|
|
|
|
// 散料正确率
|
|
|
dashboardTopData1.SprinkleFodderCorrectRatio.MaxValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT][len(pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT])-1].Ratio)
|
|
|
dashboardTopData1.SprinkleFodderCorrectRatio.MinValue = fmt.Sprintf("%.2f", pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT][0].Ratio)
|
|
|
dashboardTopData1.SprinkleFodderCorrectRatio.MiddleValue = fmt.Sprintf("%.2f", getPastureDayTimeRatioMiddleValue(pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT]))
|
|
|
- dashboardTopData1.SprinkleFodderCorrectRatio.TopOneName = pastureTopDataList.Data.SprinkleFodderCorrectRatio[0].PastureName
|
|
|
- zaplog.Info("SearchAnalysisAccuracyAfter", zap.Any("dashboardTopData", dashboardTopData))
|
|
|
- for _, v := range dashboardTopData.MixedFodderCorrectRatio {
|
|
|
- dashboardTopData1.MixedFodderCorrectRatio.Title = append(dashboardTopData1.MixedFodderCorrectRatio.Title, v.PastureName)
|
|
|
- dashboardTopData1.MixedFodderCorrectRatio.Ratio = append(dashboardTopData1.MixedFodderCorrectRatio.Ratio, v.Ratio)
|
|
|
- }
|
|
|
+ dashboardTopData1.SprinkleFodderCorrectRatio.TopOneName = pastureDayTimeRatioList[operationPb.DashboardTopType_Sprinkle_CORRECT][0].PastureName
|
|
|
|
|
|
- for _, v := range dashboardTopData.MixedFodderAccurateRatio {
|
|
|
- dashboardTopData1.MixedFodderAccurateRatio.Title = append(dashboardTopData1.MixedFodderAccurateRatio.Title, v.PastureName)
|
|
|
- dashboardTopData1.MixedFodderAccurateRatio.Ratio = append(dashboardTopData1.MixedFodderAccurateRatio.Ratio, v.Ratio)
|
|
|
- }
|
|
|
-
|
|
|
- for _, v := range dashboardTopData.SprinkleFodderAccurateRatio {
|
|
|
- dashboardTopData1.SprinkleFodderAccurateRatio.Title = append(dashboardTopData1.SprinkleFodderAccurateRatio.Title, v.PastureName)
|
|
|
- dashboardTopData1.SprinkleFodderAccurateRatio.Ratio = append(dashboardTopData1.SprinkleFodderAccurateRatio.Ratio, v.Ratio)
|
|
|
- }
|
|
|
-
|
|
|
- for _, v := range dashboardTopData.SprinkleFodderCorrectRatio {
|
|
|
- dashboardTopData1.SprinkleFodderCorrectRatio.Title = append(dashboardTopData1.SprinkleFodderCorrectRatio.Title, v.PastureName)
|
|
|
- dashboardTopData1.SprinkleFodderCorrectRatio.Ratio = append(dashboardTopData1.SprinkleFodderCorrectRatio.Ratio, v.Ratio)
|
|
|
- }
|
|
|
res.Data.Chart = dashboardTopData1
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) SearchAnalysisAccuracyOld(ctx context.Context, req *operationPb.SearchAnalysisAccuracyRequest) (*model.SearchAnalysisAccuracyResponse, error) {
|
|
|
- res := &model.SearchAnalysisAccuracyResponse{
|
|
|
- Code: http.StatusOK,
|
|
|
- Msg: "ok",
|
|
|
- Data: &model.AnalysisAccuracyData{
|
|
|
- Chart: &model.Chart{},
|
|
|
- Table: &model.Table{
|
|
|
- TitleList: make([]*model.TableList, 0),
|
|
|
- DataList: &model.DataList{},
|
|
|
- },
|
|
|
- },
|
|
|
- }
|
|
|
- res.Data.Table.TitleList = append(res.Data.Table.TitleList, &model.TableList{
|
|
|
- Name: "title",
|
|
|
- Value: "牧场",
|
|
|
- })
|
|
|
- pastureAnalysisAccuracy, err := s.PasturePrefAnalysisData(ctx, req)
|
|
|
- if err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
- }
|
|
|
-
|
|
|
- mixedFodderAccurateRatio, mixedFodderCorrectRatio, sprinkleFodderAccurateRatio, sprinkleFodderCorrectRatio :=
|
|
|
- &model.CommonValueRatio{}, &model.CommonValueRatio{}, &model.CommonValueRatio{}, &model.CommonValueRatio{}
|
|
|
- maTitleValueList, mcTitleValueList, saTitleValueList, scTitleValueList := make([]float64, 0), make([]float64, 0), make([]float64, 0), make([]float64, 0)
|
|
|
- dayTimeList := tool.TimeBetween(req.StartDate, req.EndDate)
|
|
|
- for pastureId, data := range pastureAnalysisAccuracy {
|
|
|
- groupPasture, err := s.GetGroupPastureListById(ctx, pastureId)
|
|
|
- if 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))
|
|
|
- if len(mixedFodderAccurateRatio.DateDay) < len(dayTimeList) {
|
|
|
- mixedFodderAccurateRatio.DateDay = append(mixedFodderAccurateRatio.DateDay, v.DayTime)
|
|
|
- }
|
|
|
- maTitleValueList = append(maTitleValueList, v.Ratio)
|
|
|
- }
|
|
|
-
|
|
|
- mixedFodderAccurateRatio.DataList = append(mixedFodderAccurateRatio.DataList, mixedFodderAccurateRatioDataList)
|
|
|
- mixedFodderAccurateRatio.PastureIds = append(mixedFodderAccurateRatio.PastureIds, int32(pastureId))
|
|
|
- mixedFodderAccurateRatio.PastureName = append(mixedFodderAccurateRatio.PastureName, groupPasture.Name)
|
|
|
-
|
|
|
- mixedFodderCorrectRatioDataList := make([]string, 0)
|
|
|
- for _, v := range data.MixedFodderCorrectRatio {
|
|
|
- mixedFodderCorrectRatioDataList = append(mixedFodderCorrectRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
|
|
|
- if len(mixedFodderCorrectRatio.DateDay) < len(dayTimeList) {
|
|
|
- mixedFodderCorrectRatio.DateDay = append(mixedFodderCorrectRatio.DateDay, v.DayTime)
|
|
|
- }
|
|
|
- mcTitleValueList = append(mcTitleValueList, v.Ratio)
|
|
|
- }
|
|
|
-
|
|
|
- mixedFodderCorrectRatio.DataList = append(mixedFodderCorrectRatio.DataList, mixedFodderCorrectRatioDataList)
|
|
|
- mixedFodderCorrectRatio.PastureIds = append(mixedFodderCorrectRatio.PastureIds, int32(pastureId))
|
|
|
- mixedFodderCorrectRatio.PastureName = append(mixedFodderCorrectRatio.PastureName, groupPasture.Name)
|
|
|
-
|
|
|
- sprinkleFodderRatioDataList := make([]string, 0)
|
|
|
- for _, v := range data.SprinkleFodderAccurateRatio {
|
|
|
- sprinkleFodderRatioDataList = append(sprinkleFodderRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
|
|
|
- if len(sprinkleFodderAccurateRatio.DateDay) < len(dayTimeList) {
|
|
|
- sprinkleFodderAccurateRatio.DateDay = append(sprinkleFodderAccurateRatio.DateDay, v.DayTime)
|
|
|
- }
|
|
|
- saTitleValueList = append(saTitleValueList, v.Ratio)
|
|
|
- }
|
|
|
-
|
|
|
- sprinkleFodderAccurateRatio.DataList = append(sprinkleFodderAccurateRatio.DataList, sprinkleFodderRatioDataList)
|
|
|
- sprinkleFodderAccurateRatio.PastureIds = append(sprinkleFodderAccurateRatio.PastureIds, int32(pastureId))
|
|
|
- sprinkleFodderAccurateRatio.PastureName = append(sprinkleFodderAccurateRatio.PastureName, groupPasture.Name)
|
|
|
-
|
|
|
- sprinkleFodderCorrectRatioDataList := make([]string, 0)
|
|
|
- for _, v := range data.SprinkleFodderCorrectRatio {
|
|
|
- sprinkleFodderCorrectRatioDataList = append(sprinkleFodderCorrectRatioDataList, fmt.Sprintf("%.2f", v.Ratio))
|
|
|
- if len(sprinkleFodderCorrectRatio.DateDay) < len(dayTimeList) {
|
|
|
- sprinkleFodderCorrectRatio.DateDay = append(sprinkleFodderCorrectRatio.DateDay, v.DayTime)
|
|
|
- }
|
|
|
- scTitleValueList = append(scTitleValueList, v.Ratio)
|
|
|
- }
|
|
|
-
|
|
|
- sprinkleFodderCorrectRatio.DataList = append(sprinkleFodderCorrectRatio.DataList, sprinkleFodderCorrectRatioDataList)
|
|
|
- sprinkleFodderCorrectRatio.PastureIds = append(sprinkleFodderCorrectRatio.PastureIds, int32(pastureId))
|
|
|
- sprinkleFodderCorrectRatio.PastureName = append(sprinkleFodderCorrectRatio.PastureName, groupPasture.Name)
|
|
|
- }
|
|
|
-
|
|
|
- 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)
|
|
|
- mixedFodderAccurateRatio.MaxValue = fmt.Sprintf("%.2f", maTitleValueList[len(maTitleValueList)-1])
|
|
|
- mixedFodderAccurateRatio.MinValue = fmt.Sprintf("%.2f", maTitleValueList[0])
|
|
|
- mixedFodderAccurateRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(maTitleValueList))
|
|
|
- mixedFodderAccurateRatio.TopOneName = pastureTopDataList.Data.MixedFodderAccurateRatio[0].PastureName
|
|
|
-
|
|
|
- sort.Float64s(mcTitleValueList)
|
|
|
- mixedFodderCorrectRatio.MaxValue = fmt.Sprintf("%.2f", mcTitleValueList[len(mcTitleValueList)-1])
|
|
|
- mixedFodderCorrectRatio.MinValue = fmt.Sprintf("%.2f", mcTitleValueList[0])
|
|
|
- mixedFodderCorrectRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(mcTitleValueList))
|
|
|
- mixedFodderCorrectRatio.TopOneName = pastureTopDataList.Data.MixedFodderCorrectRatio[0].PastureName
|
|
|
-
|
|
|
- sort.Float64s(saTitleValueList)
|
|
|
- sprinkleFodderAccurateRatio.MaxValue = fmt.Sprintf("%.2f", saTitleValueList[len(saTitleValueList)-1])
|
|
|
- sprinkleFodderAccurateRatio.MinValue = fmt.Sprintf("%.2f", saTitleValueList[0])
|
|
|
- sprinkleFodderAccurateRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(saTitleValueList))
|
|
|
- sprinkleFodderAccurateRatio.TopOneName = pastureTopDataList.Data.SprinkleFodderAccurateRatio[0].PastureName
|
|
|
-
|
|
|
- sort.Float64s(scTitleValueList)
|
|
|
- sprinkleFodderCorrectRatio.MaxValue = fmt.Sprintf("%.2f", scTitleValueList[len(scTitleValueList)-1])
|
|
|
- sprinkleFodderCorrectRatio.MinValue = fmt.Sprintf("%.2f", scTitleValueList[0])
|
|
|
- sprinkleFodderCorrectRatio.MiddleValue = fmt.Sprintf("%.2f", tool.Median(scTitleValueList))
|
|
|
- sprinkleFodderCorrectRatio.TopOneName = pastureTopDataList.Data.SprinkleFodderCorrectRatio[0].PastureName
|
|
|
-
|
|
|
- chart := &model.Chart{
|
|
|
- MixedFodderAccurateRatio: mixedFodderAccurateRatio,
|
|
|
- MixedFodderCorrectRatio: mixedFodderCorrectRatio,
|
|
|
- SprinkleFodderAccurateRatio: sprinkleFodderAccurateRatio,
|
|
|
- SprinkleFodderCorrectRatio: sprinkleFodderCorrectRatio,
|
|
|
- }
|
|
|
-
|
|
|
- res.Data.Chart = chart
|
|
|
- res.Data.Table = s.TitleList(ctx, pastureAnalysisAccuracy)
|
|
|
- return res, nil
|
|
|
-}
|
|
|
-
|
|
|
// TopPasture 牧场排名
|
|
|
func (s *StoreEntry) TopPasture(ctx context.Context, req *operationPb.SearchAnalysisAccuracyRequest) (*model.GetPastureTopResponse, error) {
|
|
|
res := &model.GetPastureTopResponse{
|
|
@@ -480,7 +308,7 @@ func (s *StoreEntry) TopPasture(ctx context.Context, req *operationPb.SearchAnal
|
|
|
Msg: "ok",
|
|
|
Data: nil,
|
|
|
}
|
|
|
- dashboardTopData, err := s.DashboardTopPasture(ctx, req)
|
|
|
+ dashboardTopData, _, err := s.DashboardTopPasture(ctx, req)
|
|
|
if err != nil {
|
|
|
return nil, xerr.WithStack(err)
|
|
|
}
|
|
@@ -488,7 +316,7 @@ func (s *StoreEntry) TopPasture(ctx context.Context, req *operationPb.SearchAnal
|
|
|
return res, nil
|
|
|
}
|
|
|
|
|
|
-func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.SearchAnalysisAccuracyRequest) (*model.PastureTop, error) {
|
|
|
+func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.SearchAnalysisAccuracyRequest) (*model.PastureTop, map[int64]*model.PastureAnalysisAccuracyData, error) {
|
|
|
dashboardTopData := &model.PastureTop{
|
|
|
MixedFodderAccurateRatio: make([]*model.PastureTopData, 0),
|
|
|
MixedFodderCorrectRatio: make([]*model.PastureTopData, 0),
|
|
@@ -497,7 +325,7 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
}
|
|
|
analysisAccuracy, err := s.PasturePrefAnalysisData(ctx, req)
|
|
|
if err != nil {
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
+ return nil, nil, xerr.WithStack(err)
|
|
|
}
|
|
|
|
|
|
for pastureId, data := range analysisAccuracy {
|
|
@@ -506,6 +334,7 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
zaplog.Error("TopPasture", zap.Any("GetGroupPastureListById", pastureId), zap.Any("err", err))
|
|
|
continue
|
|
|
}
|
|
|
+
|
|
|
if data == nil {
|
|
|
continue
|
|
|
}
|
|
@@ -515,6 +344,7 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
allMaRatio += v.Ratio
|
|
|
}
|
|
|
dashboardTopData.MixedFodderAccurateRatio = append(dashboardTopData.MixedFodderAccurateRatio, &model.PastureTopData{
|
|
|
+ PastureId: pastureId,
|
|
|
PastureName: groupPasture.Name,
|
|
|
Ratio: tool.Decimal(allMaRatio / float64(len(data.MixedFodderAccurateRatio))),
|
|
|
})
|
|
@@ -523,6 +353,7 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
allMcRatio += v.Ratio
|
|
|
}
|
|
|
dashboardTopData.MixedFodderCorrectRatio = append(dashboardTopData.MixedFodderCorrectRatio, &model.PastureTopData{
|
|
|
+ PastureId: pastureId,
|
|
|
PastureName: groupPasture.Name,
|
|
|
Ratio: tool.Decimal(allMaRatio / float64(len(data.MixedFodderCorrectRatio))),
|
|
|
})
|
|
@@ -530,7 +361,9 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
for _, v := range data.SprinkleFodderAccurateRatio {
|
|
|
allSaRatio += v.Ratio
|
|
|
}
|
|
|
+
|
|
|
dashboardTopData.SprinkleFodderAccurateRatio = append(dashboardTopData.SprinkleFodderAccurateRatio, &model.PastureTopData{
|
|
|
+ PastureId: pastureId,
|
|
|
PastureName: groupPasture.Name,
|
|
|
Ratio: tool.Decimal(allSaRatio / float64(len(data.SprinkleFodderAccurateRatio))),
|
|
|
})
|
|
@@ -538,10 +371,13 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
for _, v := range data.SprinkleFodderCorrectRatio {
|
|
|
allScRatio += v.Ratio
|
|
|
}
|
|
|
+
|
|
|
dashboardTopData.SprinkleFodderCorrectRatio = append(dashboardTopData.SprinkleFodderCorrectRatio, &model.PastureTopData{
|
|
|
+ PastureId: pastureId,
|
|
|
PastureName: groupPasture.Name,
|
|
|
Ratio: tool.Decimal(allScRatio / float64(len(data.SprinkleFodderCorrectRatio))),
|
|
|
})
|
|
|
+
|
|
|
}
|
|
|
|
|
|
sort.Slice(dashboardTopData.MixedFodderAccurateRatio, func(i, j int) bool {
|
|
@@ -569,7 +405,8 @@ func (s *StoreEntry) DashboardTopPasture(ctx context.Context, req *operationPb.S
|
|
|
dashboardTopData.SprinkleFodderCorrectRatio = dashboardTopRand(req, dashboardTopData.SprinkleFodderCorrectRatio)
|
|
|
}
|
|
|
}
|
|
|
- return dashboardTopData, nil
|
|
|
+
|
|
|
+ return dashboardTopData, analysisAccuracy, nil
|
|
|
}
|
|
|
|
|
|
func (s *StoreEntry) TitleList(ctx context.Context, pastureAnalysisList map[int64]*model.PastureAnalysisAccuracyData) *model.Table {
|