wangchuanjin 1 éve
szülő
commit
22b4217112
1 módosított fájl, 62 hozzáadás és 2 törlés
  1. 62 2
      ownermonitor/ownermonitor.go

+ 62 - 2
ownermonitor/ownermonitor.go

@@ -1,16 +1,17 @@
 package ownermonitor
 
 import (
+	"encoding/json"
 	"fmt"
+	"sort"
 	"strings"
 	"time"
 
-	"app.yhyue.com/moapp/jybase/redis"
-
 	util "app.yhyue.com/moapp/jybase/common"
 	"app.yhyue.com/moapp/jybase/logger"
 	. "app.yhyue.com/moapp/jybase/mongodb"
 	. "app.yhyue.com/moapp/jybase/mysql"
+	"app.yhyue.com/moapp/jybase/redis"
 	. "bp.jydev.jianyu360.cn/BaseService/pushpkg/p"
 	. "bp.jydev.jianyu360.cn/BaseService/userCenter/identity"
 )
@@ -140,3 +141,62 @@ func OwnerMonitorSplit(list []*OwnerMonitor, f func(v interface{})) {
 		i += Mgo_ListSize
 	}
 }
+
+//
+func ToOwnerMonitors(list interface{}) []*OwnerMonitor {
+	sl := []*OwnerMonitor{}
+	if list == nil {
+		return sl
+	}
+	b, err := json.Marshal(list)
+	if err != nil {
+		return sl
+	}
+	err = json.Unmarshal(b, &sl)
+	if err != nil {
+		return sl
+	}
+	return sl
+}
+
+//第一个参数是老数据,第二个参数是新进数据
+func MergeOwnerMonitors(o, n interface{}, maxPushSize int) []*OwnerMonitor {
+	of, oo := o.([]*OwnerMonitor)
+	if !oo {
+		of = ToOwnerMonitors(o)
+	}
+	nf, no := n.([]*OwnerMonitor)
+	if !no {
+		nf = ToOwnerMonitors(n)
+	}
+	key := func(e, v string) string {
+		return fmt.Sprintf("%s_%s", e, v)
+	}
+	m := map[string]*OwnerMonitor{}
+	idMap := map[string]bool{}
+	for _, v := range nf {
+		m[key(v.EntName, "")] = v
+		for _, vv := range v.Infos {
+			idMap[key(v.EntName, util.ObjToString(vv["_id"]))] = true
+		}
+	}
+	//去重
+	for _, v := range of {
+		follow := m[key(v.EntName, "")]
+		if follow == nil {
+			nf = append(nf, v)
+			continue
+		}
+		for _, vv := range v.Infos {
+			if idMap[key(v.EntName, util.ObjToString(vv["_id"]))] {
+				continue
+			}
+			follow.Infos = append(follow.Infos, vv)
+			sort.Sort(follow.Infos)
+			if len(follow.Infos) > maxPushSize {
+				follow.Infos = follow.Infos[:maxPushSize]
+			}
+		}
+	}
+	return nf
+}