|
@@ -2,10 +2,7 @@ package matcher
|
|
|
|
|
|
import (
|
|
|
"strings"
|
|
|
- "sync"
|
|
|
|
|
|
- util "app.yhyue.com/moapp/jybase/common"
|
|
|
- "app.yhyue.com/moapp/jybase/logger"
|
|
|
. "bp.jydev.jianyu360.cn/BaseService/pushpkg/p"
|
|
|
)
|
|
|
|
|
@@ -33,62 +30,9 @@ func NewPayUser() *PayUser {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//遍历数据
|
|
|
+//
|
|
|
func (p *PayUser) Match(poolSize int, datas *[]map[string]interface{}) (*map[*UserInfo]*SortList, *map[*UserInfo]*[]string) {
|
|
|
- defer util.Catch()
|
|
|
- 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 := p.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,
|
|
|
- })
|
|
|
- userMap[k] = l
|
|
|
- }
|
|
|
- }
|
|
|
- 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
|
|
|
- }
|
|
|
- }
|
|
|
- }(temp)
|
|
|
- index++
|
|
|
- if index%500 == 0 {
|
|
|
- logger.Info("匹配数据", index)
|
|
|
- }
|
|
|
- }
|
|
|
- matchWaitGroup.Wait()
|
|
|
- logger.Info("匹配数据结束。。。", index)
|
|
|
- return &userMap, &projectUserMap
|
|
|
+ return EachFoMatch(p, poolSize, datas)
|
|
|
}
|
|
|
|
|
|
//
|