|
@@ -9,6 +9,16 @@ import (
|
|
"gitee.com/xuyiping_admin/pkg/xerr"
|
|
"gitee.com/xuyiping_admin/pkg/xerr"
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+type SumData struct {
|
|
|
|
+ sumRemain int32
|
|
|
|
+ sumIntake int32
|
|
|
|
+ sumInactive int32
|
|
|
|
+ sumGasp int32
|
|
|
|
+ sumOther int32
|
|
|
|
+ sumActive int32
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
func (e *Entry) NeckRingMergeData() error {
|
|
func (e *Entry) NeckRingMergeData() error {
|
|
cfg := config.Options()
|
|
cfg := config.Options()
|
|
limit := cfg.NeckRingLimit
|
|
limit := cfg.NeckRingLimit
|
|
@@ -19,7 +29,8 @@ func (e *Entry) NeckRingMergeData() error {
|
|
neckRingList := make([]*model.NeckRingOriginal, 0)
|
|
neckRingList := make([]*model.NeckRingOriginal, 0)
|
|
if err := e.DB.Model(new(model.NeckRingOriginal)).
|
|
if err := e.DB.Model(new(model.NeckRingOriginal)).
|
|
Where("h1.is_show = ?", pasturePb.IsShow_No).
|
|
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)
|
|
return xerr.WithStack(err)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -27,42 +38,64 @@ func (e *Entry) NeckRingMergeData() error {
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
- neckRingIds := make([]int64, len(neckRingList))
|
|
+ neckRingIds := make([]int64, 0)
|
|
|
|
|
|
defer func() {
|
|
defer func() {
|
|
if len(neckRingIds) > 0 {
|
|
if len(neckRingIds) > 0 {
|
|
- e.DB.Model(new(model.NeckRingOriginal)).
|
|
+ e.DB.Model(new(model.NeckRingOriginal)).Where("id IN ?", neckRingIds).Update("is_show", pasturePb.IsShow_Ok)
|
|
- Where("id IN ?", neckRingIds).
|
|
|
|
- Update("is_show", pasturePb.IsShow_Ok)
|
|
|
|
}
|
|
}
|
|
}()
|
|
}()
|
|
|
|
|
|
originalMapData := make(map[string]*model.NeckRingOriginal)
|
|
originalMapData := make(map[string]*model.NeckRingOriginal)
|
|
|
|
+ baseHours := int32(6)
|
|
|
|
|
|
- for i, v := range neckRingList {
|
|
+ for _, v := range neckRingList {
|
|
if v.ActiveDate == "" {
|
|
if v.ActiveDate == "" {
|
|
continue
|
|
continue
|
|
}
|
|
}
|
|
- neckRingIds[i] = v.Id
|
|
+ neckRingIds = append(neckRingIds, v.Id)
|
|
- if _, ok := originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)]; ok {
|
|
+ mapKey := fmt.Sprintf("%s-%s-%d", v.Imei, v.ActiveDate, v.FrameId)
|
|
|
|
+ if _, ok := originalMapData[mapKey]; ok {
|
|
if v.ActiveDateType == pasturePb.ActiveTimeType_Twenty_Minutes {
|
|
if v.ActiveDateType == pasturePb.ActiveTimeType_Twenty_Minutes {
|
|
- originalMapData[fmt.Sprintf("%s-%s", v.Imei, v.ActiveDate)].Remain += v.Remain
|
|
+ baseHours = 1
|
|
- 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
|
|
|
|
}
|
|
}
|
|
|
|
+ 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 {
|
|
} 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,
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|