|
@@ -19,55 +19,57 @@ func EachFoMatch(matcher Matcher, poolSize int, datas *[]map[string]interface{})
|
|
|
logger.Info("开始匹配数据。。。")
|
|
|
userMap := map[*UserInfo]*SortList{}
|
|
|
projectUserMap := map[*UserInfo]*[]string{}
|
|
|
- lock := &sync.Mutex{}
|
|
|
var index int
|
|
|
- matchPool := make(chan bool, poolSize)
|
|
|
- matchWaitGroup := &sync.WaitGroup{}
|
|
|
- for _, temp := range *datas {
|
|
|
- matchPool <- true
|
|
|
- matchWaitGroup.Add(1)
|
|
|
- go func(info map[string]interface{}) {
|
|
|
- defer util.Catch()
|
|
|
- defer func() {
|
|
|
- matchWaitGroup.Done()
|
|
|
- <-matchPool
|
|
|
- }()
|
|
|
- users, projectUsers := matcher.ToMatch(info)
|
|
|
- lock.Lock()
|
|
|
- defer lock.Unlock()
|
|
|
- if users != nil && len(*users) > 0 {
|
|
|
- for k, v := range *users {
|
|
|
- l := userMap[k]
|
|
|
- if l == nil {
|
|
|
- l = &SortList{}
|
|
|
+ if datas != nil {
|
|
|
+ lock := &sync.Mutex{}
|
|
|
+ matchPool := make(chan bool, poolSize)
|
|
|
+ matchWaitGroup := &sync.WaitGroup{}
|
|
|
+ for _, temp := range *datas {
|
|
|
+ matchPool <- true
|
|
|
+ matchWaitGroup.Add(1)
|
|
|
+ go func(info map[string]interface{}) {
|
|
|
+ defer util.Catch()
|
|
|
+ defer func() {
|
|
|
+ matchWaitGroup.Done()
|
|
|
+ <-matchPool
|
|
|
+ }()
|
|
|
+ users, projectUsers := matcher.ToMatch(info)
|
|
|
+ lock.Lock()
|
|
|
+ defer lock.Unlock()
|
|
|
+ if users != nil && len(*users) > 0 {
|
|
|
+ for k, v := range *users {
|
|
|
+ l := userMap[k]
|
|
|
+ if l == nil {
|
|
|
+ l = &SortList{}
|
|
|
+ }
|
|
|
+ *l = append(*l, &MatchInfo{
|
|
|
+ Info: info,
|
|
|
+ Keys: v.Keys,
|
|
|
+ Items: v.Items,
|
|
|
+ MatchWays: v.MatchWays,
|
|
|
+ Extend: map[string]interface{}{},
|
|
|
+ })
|
|
|
+ userMap[k] = l
|
|
|
}
|
|
|
- *l = append(*l, &MatchInfo{
|
|
|
- Info: info,
|
|
|
- Keys: v.Keys,
|
|
|
- Items: v.Items,
|
|
|
- MatchWays: v.MatchWays,
|
|
|
- Extend: map[string]interface{}{},
|
|
|
- })
|
|
|
- userMap[k] = l
|
|
|
}
|
|
|
- }
|
|
|
- if projectUsers != nil && len(*projectUsers) > 0 {
|
|
|
- for _, v := range *projectUsers {
|
|
|
- l := projectUserMap[v]
|
|
|
- if l == nil {
|
|
|
- l = &[]string{}
|
|
|
+ if projectUsers != nil && len(*projectUsers) > 0 {
|
|
|
+ for _, v := range *projectUsers {
|
|
|
+ l := projectUserMap[v]
|
|
|
+ if l == nil {
|
|
|
+ l = &[]string{}
|
|
|
+ }
|
|
|
+ *l = append(*l, util.ObjToString(info["_id"]))
|
|
|
+ projectUserMap[v] = l
|
|
|
}
|
|
|
- *l = append(*l, util.ObjToString(info["_id"]))
|
|
|
- projectUserMap[v] = l
|
|
|
}
|
|
|
+ }(temp)
|
|
|
+ index++
|
|
|
+ if index%500 == 0 {
|
|
|
+ logger.Info("匹配数据", index)
|
|
|
}
|
|
|
- }(temp)
|
|
|
- index++
|
|
|
- if index%500 == 0 {
|
|
|
- logger.Info("匹配数据", index)
|
|
|
}
|
|
|
+ matchWaitGroup.Wait()
|
|
|
}
|
|
|
- matchWaitGroup.Wait()
|
|
|
logger.Info("匹配数据结束。。。", index)
|
|
|
return &userMap, &projectUserMap
|
|
|
}
|