wangchuanjin vor 7 Monaten
Ursprung
Commit
e17b86168d
1 geänderte Dateien mit 43 neuen und 41 gelöschten Zeilen
  1. 43 41
      matcher/matcher.go

+ 43 - 41
matcher/matcher.go

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