Browse Source

neck_ring: 脖环数据

Yi 3 months ago
parent
commit
6155cbfc7e
1 changed files with 56 additions and 23 deletions
  1. 56 23
      module/crontab/neck_ring.go

+ 56 - 23
module/crontab/neck_ring.go

@@ -9,6 +9,16 @@ import (
 	"gitee.com/xuyiping_admin/pkg/xerr"
 )
 
+type SumData struct {
+	sumRemain   int32
+	sumIntake   int32
+	sumInactive int32
+	sumGasp     int32
+	sumOther    int32
+	sumActive   int32
+}
+
+// NeckRingMergeData 把
 func (e *Entry) NeckRingMergeData() error {
 	cfg := config.Options()
 	limit := cfg.NeckRingLimit
@@ -19,7 +29,8 @@ func (e *Entry) NeckRingMergeData() error {
 	neckRingList := make([]*model.NeckRingOriginal, 0)
 	if err := e.DB.Model(new(model.NeckRingOriginal)).
 		Where("h1.is_show = ?", pasturePb.IsShow_No).
-		Find(&neckRingList).Limit(int(limit)).Error; err != nil {
+		Limit(int(limit)).
+		Find(&neckRingList).Error; err != nil {
 		return xerr.WithStack(err)
 	}
 
@@ -27,42 +38,64 @@ func (e *Entry) NeckRingMergeData() error {
 		return nil
 	}
 
-	neckRingIds := make([]int64, len(neckRingList))
+	neckRingIds := make([]int64, 0)
 	// 更新已处理过的id
 	defer func() {
 		if len(neckRingIds) > 0 {
-			e.DB.Model(new(model.NeckRingOriginal)).
-				Where("id IN ?", neckRingIds).
-				Update("is_show", pasturePb.IsShow_Ok)
+			e.DB.Model(new(model.NeckRingOriginal)).Where("id IN ?", neckRingIds).Update("is_show", pasturePb.IsShow_Ok)
 		}
 	}()
 
 	originalMapData := make(map[string]*model.NeckRingOriginal)
+	baseHours := int32(6)
 	// 合并成2个小时的
-	for i, v := range neckRingList {
+	for _, v := range neckRingList {
 		if v.ActiveDate == "" {
 			continue
 		}
-		neckRingIds[i] = v.Id
-		if _, ok := originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)]; ok {
+		neckRingIds = append(neckRingIds, v.Id)
+		mapKey := fmt.Sprintf("%s-%s-%d", v.Imei, v.ActiveDate, v.FrameId)
+		if _, ok := originalMapData[mapKey]; ok {
 			if v.ActiveDateType == pasturePb.ActiveTimeType_Twenty_Minutes {
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Remain += v.Remain
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Intake += v.Intake
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Inactive += v.Inactive
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Gasp += v.Gasp
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Other += v.Other
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Active += v.Active
-			}
-			if v.ActiveDateType == pasturePb.ActiveTimeType_Two_Hours {
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Remain *= 6
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Intake *= 6
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Inactive *= 6
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Gasp *= 6
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Other *= 6
-				originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Active *= 6
+				baseHours = 1
 			}
+			originalMapData[mapKey].Remain *= baseHours
+			originalMapData[mapKey].Intake *= baseHours
+			originalMapData[mapKey].Inactive *= baseHours
+			originalMapData[mapKey].Gasp *= baseHours
+			originalMapData[mapKey].Other *= baseHours
+			originalMapData[mapKey].Active *= baseHours
 		} else {
-			originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)] = v
+			originalMapData[mapKey] = v
+		}
+	}
+
+	iemMap := make(map[string]*model.NeckRingOriginal)
+	for _, v := range originalMapData {
+		mapKey := fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)
+		if _, ok := iemMap[mapKey]; ok {
+			originalMapData[mapKey].Remain += v.Remain
+			originalMapData[mapKey].Intake += v.Intake
+			originalMapData[mapKey].Inactive += v.Inactive
+			originalMapData[mapKey].Gasp += v.Gasp
+			originalMapData[mapKey].Other += v.Other
+			originalMapData[mapKey].Active += v.Active
+		} else {
+			iemMap[mapKey] = v
+		}
+	}
+
+	sumIemMap := make(map[string]*SumData)
+	for k, v := range iemMap {
+		if sumIemMap[k] == nil {
+			sumIemMap[k] = &SumData{
+				sumRemain:   v.Remain / baseHours,
+				sumIntake:   v.Intake / baseHours,
+				sumInactive: v.Inactive / baseHours,
+				sumGasp:     v.Gasp / baseHours,
+				sumOther:    v.Other / baseHours,
+				sumActive:   v.Active / baseHours,
+			}
 		}
 	}