|
@@ -7,6 +7,13 @@
|
|
|
*/
|
|
*/
|
|
|
package postgre
|
|
package postgre
|
|
|
|
|
|
|
|
|
|
+import (
|
|
|
|
|
+ "github.com/sirupsen/logrus"
|
|
|
|
|
+ "sportfitness/base/assembly/heartRate/model"
|
|
|
|
|
+ "sync"
|
|
|
|
|
+ "time"
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
type PGHr struct {
|
|
type PGHr struct {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -121,3 +128,80 @@ func (PGHr) HrClassGiveUpConfirm(optUserId int64, objectShopId int64, jsonStr st
|
|
|
|
|
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+const hrSaveCount = 1000
|
|
|
|
|
+const hrSaveTime = time.Second * 10
|
|
|
|
|
+
|
|
|
|
|
+// key: sn
|
|
|
|
|
+var hrSaveMap = map[string][]model.BandData{}
|
|
|
|
|
+var hrSaveMapMu = sync.Mutex{}
|
|
|
|
|
+
|
|
|
|
|
+func (PGHr) getSNByBandId(id int) (sn string) {
|
|
|
|
|
+ //TODO 实现
|
|
|
|
|
+ return
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (p PGHr) SaveHrBatch(data []model.BandData) {
|
|
|
|
|
+ hrSaveMapMu.Lock()
|
|
|
|
|
+ defer hrSaveMapMu.Unlock()
|
|
|
|
|
+
|
|
|
|
|
+ for _, one := range data {
|
|
|
|
|
+ sn := p.getSNByBandId(one.BandId)
|
|
|
|
|
+ if list, ok := hrSaveMap[sn]; ok {
|
|
|
|
|
+ hrSaveMap[sn] = append(list, one)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ hrSaveMap[sn] = []model.BandData{one}
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ p.trySaveHrSaveMap()
|
|
|
|
|
+}
|
|
|
|
|
+func (PGHr) saveOneBandToDB(sn string, data []model.BandData) {
|
|
|
|
|
+ //TODO 保存
|
|
|
|
|
+}
|
|
|
|
|
+func (p PGHr) workSaveHrSaveMapLoop() {
|
|
|
|
|
+ defer func() {
|
|
|
|
|
+ if p := recover(); p != nil {
|
|
|
|
|
+ logrus.Errorf("workSaveHrSaveMapLoop: %s", p)
|
|
|
|
|
+ }
|
|
|
|
|
+ }()
|
|
|
|
|
+
|
|
|
|
|
+ hrSaveMapMu.Lock()
|
|
|
|
|
+ defer hrSaveMapMu.Unlock()
|
|
|
|
|
+
|
|
|
|
|
+ p.trySaveHrSaveMap()
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (p PGHr) workSaveHrSaveMap() {
|
|
|
|
|
+ logrus.Info("心率保存循环开启")
|
|
|
|
|
+
|
|
|
|
|
+ for {
|
|
|
|
|
+ time.Sleep(time.Second * 30)
|
|
|
|
|
+ p.workSaveHrSaveMapLoop()
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (p PGHr) trySaveHrSaveMap() {
|
|
|
|
|
+ var deleteKeys []string
|
|
|
|
|
+ for sn, v := range hrSaveMap {
|
|
|
|
|
+ needSave := false
|
|
|
|
|
+
|
|
|
|
|
+ if len(v) >= hrSaveCount {
|
|
|
|
|
+ needSave = true
|
|
|
|
|
+ }
|
|
|
|
|
+ if len(v) > 0 {
|
|
|
|
|
+ firstTime := time.Unix(0, v[0].TimeMiles*1000000)
|
|
|
|
|
+ if time.Now().Sub(firstTime) > hrSaveTime {
|
|
|
|
|
+ needSave = true
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if needSave {
|
|
|
|
|
+ p.saveOneBandToDB(sn, v)
|
|
|
|
|
+ deleteKeys = append(deleteKeys, sn)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ for _, sn := range deleteKeys {
|
|
|
|
|
+ delete(hrSaveMap, sn)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+}
|