|
@@ -414,6 +414,65 @@ func (n NeckActiveHabitSlice) ToPBApp() *pasturePb.CowNeckRingAppData {
|
|
return res
|
|
return res
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (n NeckActiveHabitSlice) ToOriginalDataList(curveName string) (originalDataList []int32, datetimeList []string) {
|
|
|
|
+ initFrameId := int32(0)
|
|
|
|
+ dateFrameMap := make(map[string][]int32)
|
|
|
|
+ for _, v := range n {
|
|
|
|
+ if dateFrameMap[v.HeatDate] == nil {
|
|
|
|
+ initFrameId = 0
|
|
|
|
+ dateFrameMap[v.HeatDate] = make([]int32, 0)
|
|
|
|
+ }
|
|
|
|
+ // 补全结尾不够的数据
|
|
|
|
+ if initFrameId == 0 && len(datetimeList) > 0 {
|
|
|
|
+ lastDateTime := datetimeList[len(datetimeList)-1]
|
|
|
|
+ lastDatePare := strings.Split(lastDateTime, " ")
|
|
|
|
+ if len(lastDatePare) == 2 {
|
|
|
|
+ lastDay := lastDatePare[0]
|
|
|
|
+ lastHourStr := lastDatePare[1]
|
|
|
|
+ lastHour, _ := strconv.ParseInt(lastHourStr, 10, 64)
|
|
|
|
+ maxHour := util.ExpectedFrameIDs[len(util.ExpectedFrameIDs)-1]
|
|
|
|
+ xframeId := int32(lastHour-1)/2 + 1
|
|
|
|
+ if xframeId != maxHour {
|
|
|
|
+ for ; xframeId <= maxHour; xframeId++ {
|
|
|
|
+ datetimeList = append(datetimeList, fmt.Sprintf("%s %02d", lastDay, util.ExpectedFrameIDs[xframeId]*2+1))
|
|
|
|
+ originalDataList = append(originalDataList, 0)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ expectedFrameId := util.ExpectedFrameIDs[initFrameId]
|
|
|
|
+ if expectedFrameId != v.Frameid {
|
|
|
|
+ maxFrameId := int32(math.Abs(float64(expectedFrameId - v.Frameid)))
|
|
|
|
+ for ; expectedFrameId < maxFrameId; expectedFrameId++ {
|
|
|
|
+ datetimeList = append(datetimeList, fmt.Sprintf("%s %02d", v.HeatDate, util.ExpectedFrameIDs[expectedFrameId]*2+1))
|
|
|
|
+ originalDataList = append(originalDataList, 0)
|
|
|
|
+ }
|
|
|
|
+ initFrameId = expectedFrameId
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 格式化为到小时的字符串
|
|
|
|
+ parsedTime, _ := util.TimeParseLocal(LayoutTime, v.ActiveTime)
|
|
|
|
+ hourStr := parsedTime.Format(LayoutHour)
|
|
|
|
+ datetimeList = append(datetimeList, hourStr)
|
|
|
|
+ switch curveName {
|
|
|
|
+ case "active": // 活动量
|
|
|
|
+ originalDataList = append(originalDataList, v.High)
|
|
|
|
+ case "rumina": // 反刍
|
|
|
|
+ originalDataList = append(originalDataList, v.Rumina)
|
|
|
|
+ case "intake": // 采食
|
|
|
|
+ originalDataList = append(originalDataList, v.Intake)
|
|
|
|
+ case "inactive": // 休息
|
|
|
|
+ originalDataList = append(originalDataList, v.Inactive)
|
|
|
|
+ case "chew": // 咀嚼
|
|
|
|
+ originalDataList = append(originalDataList, v.Rumina+v.Intake)
|
|
|
|
+ case "immobility": // 静止
|
|
|
|
+ originalDataList = append(originalDataList, 120-v.Active)
|
|
|
|
+ }
|
|
|
|
+ initFrameId++
|
|
|
|
+ }
|
|
|
|
+ return
|
|
|
|
+}
|
|
|
|
+
|
|
type MaxHabitIdModel struct {
|
|
type MaxHabitIdModel struct {
|
|
Id int64 `json:"id"`
|
|
Id int64 `json:"id"`
|
|
}
|
|
}
|