Kaynağa Gözat

cow: neckRingGroupComparison update

Yi 2 ay önce
ebeveyn
işleme
fd7088d3fd
4 değiştirilmiş dosya ile 55 ekleme ve 5 silme
  1. 1 1
      go.mod
  2. 4 0
      go.sum
  3. 32 0
      model/neck_active_habit.go
  4. 18 4
      module/backend/cow_more.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-20250905075804-317725621249
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20250908022339-e9d9f19403e8
 	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

+ 4 - 0
go.sum

@@ -1355,6 +1355,10 @@ gitee.com/xuyiping_admin/go_proto v0.0.0-20250905070832-566f6cc39123 h1:aiwgZ4QJ
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250905070832-566f6cc39123/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250905075804-317725621249 h1:mBZ25jc4szOQ7lyhTG3M5qbQyaNnXWSbYAJkNgoJZy0=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20250905075804-317725621249/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250908021214-0b0a0a501b87 h1:pi2uqAIu/ANKro8a22I8v/d4gXBfnpQCR3ZqESZee7A=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250908021214-0b0a0a501b87/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250908022339-e9d9f19403e8 h1:UgJCyRGDRarvtFJ/kjaXqR9UmgbTp2TmaJGuxQx3wLk=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20250908022339-e9d9f19403e8/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.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=

+ 32 - 0
model/neck_active_habit.go

@@ -414,6 +414,38 @@ func (n NeckActiveHabitSlice) ToPBApp() *pasturePb.CowNeckRingAppData {
 	return res
 }
 
+func (n NeckActiveHabitSlice) ToOriginalDataList(curveName string, dateTimeList []string) []int32 {
+	originalDataList := make([]int32, 0)
+	dateTimeMap := make(map[string]*NeckActiveHabit)
+	for _, v := range n {
+		dateTime := fmt.Sprintf("%s %02d", v.HeatDate, util.ExpectedFrameIDs[v.Frameid]*2+1)
+		dateTimeMap[dateTime] = v
+	}
+
+	for _, v := range dateTimeList {
+		if originalData, ok := dateTimeMap[v]; ok {
+			switch curveName {
+			case "active": // 活动量
+				originalDataList = append(originalDataList, originalData.High)
+			case "rumina": // 反刍
+				originalDataList = append(originalDataList, originalData.Rumina)
+			case "intake": // 采食
+				originalDataList = append(originalDataList, originalData.Intake)
+			case "inactive": // 休息
+				originalDataList = append(originalDataList, originalData.Inactive)
+			case "chew": // 咀嚼
+				originalDataList = append(originalDataList, originalData.Rumina+originalData.Intake)
+			case "immobility": // 静止
+				originalDataList = append(originalDataList, 120-originalData.Active)
+			}
+		} else {
+			originalDataList = append(originalDataList, 0)
+		}
+	}
+
+	return originalDataList
+}
+
 type MaxHabitIdModel struct {
 	Id int64 `json:"id"`
 }

+ 18 - 4
module/backend/cow_more.go

@@ -451,6 +451,19 @@ func (s *StoreEntry) BehaviorCurveGroupComparison(ctx context.Context, req *past
 		return nil, xerr.Customf(messageId)
 	}
 
+	// 行为曲线数据
+	neckActiveHabitList := make([]*model.NeckActiveHabit, 0)
+	if err = s.DB.Table(new(model.NeckActiveHabit).TableName()).
+		Where("neck_ring_number = ?", cowInfo.NeckRingNumber).
+		Where("pasture_id = ?", userModel.AppPasture.Id).
+		Where("is_show = ?", pasturePb.IsShow_Ok).
+		Where("cow_id > ?", 0).
+		Where("heat_date IN (?)", dayRange).
+		Order("heat_date, frameid").
+		Find(&neckActiveHabitList).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
 	dataTimeList := make([]string, 0)
 	for _, v := range dayRange {
 		for i := 0; i <= 23; i++ {
@@ -460,15 +473,16 @@ func (s *StoreEntry) BehaviorCurveGroupComparison(ctx context.Context, req *past
 			dataTimeList = append(dataTimeList, fmt.Sprintf("%s %02d", v, i))
 		}
 	}
-
+	originalDataList := model.NeckActiveHabitSlice(neckActiveHabitList).ToOriginalDataList(req.CurveName, dataTimeList)
 	q1, q3 := s.CowIQR(cowInfo, req.CurveName, dayRange, dataTimeList)
 	return &pasturePb.BehaviorCurveGroupComparisonResponse{
 		Code: http.StatusOK,
 		Msg:  "ok",
 		Data: &pasturePb.CowNeckRingGroupComparisonData{
-			IQR1:     q1,
-			IQR3:     q3,
-			DateTime: dataTimeList,
+			DateTime:         dataTimeList,
+			OriginalDataList: originalDataList,
+			IQR1:             q1,
+			IQR3:             q3,
 		},
 	}, nil
 }