wangchuanjin 1 год назад
Родитель
Сommit
26db69a863
3 измененных файлов с 71 добавлено и 59 удалено
  1. 6 1
      matcher/freematch.go
  2. 63 0
      matcher/matcher.go
  3. 2 58
      matcher/paymatch.go

+ 6 - 1
matcher/freematch.go

@@ -22,7 +22,12 @@ func NewFreeUser() *FreeUser {
 }
 
 //
-func (f *FreeUser) Match(info map[string]interface{}) (*map[*UserInfo]*MatchUser, *[]*UserInfo) {
+func (f *FreeUser) Match(poolSize int, datas *[]map[string]interface{}) (*map[*UserInfo]*SortList, *map[*UserInfo]*[]string) {
+	return EachFoMatch(f, poolSize, datas)
+}
+
+//
+func (f *FreeUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUser, *[]*UserInfo) {
 	area, _ := info["area"].(string)
 	if area == "全国" {
 		area = ""

+ 63 - 0
matcher/matcher.go

@@ -1,9 +1,72 @@
 package matcher
 
 import (
+	"sync"
+
+	util "app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/logger"
 	. "bp.jydev.jianyu360.cn/BaseService/pushpkg/p"
 )
 
 type Matcher interface {
 	Match(poolSize int, datas *[]map[string]interface{}) (*map[*UserInfo]*SortList, *map[*UserInfo]*[]string)
+	ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUser, *[]*UserInfo)
+}
+
+//
+func EachFoMatch(matcher Matcher, 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 := 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,
+					})
+					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
 }

+ 2 - 58
matcher/paymatch.go

@@ -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)
 }
 
 //