|
@@ -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
|
|
|
+}
|