wangchuanjin 5 сар өмнө
parent
commit
5f95a9d248
2 өөрчлөгдсөн 59 нэмэгдсэн , 59 устгасан
  1. 2 2
      matcher/freematch.go
  2. 57 57
      matcher/paymatch.go

+ 2 - 2
matcher/freematch.go

@@ -60,7 +60,7 @@ func (f *FreeUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUs
 
 //获取最终的用户,排除词、信息范围、信息类型之后的
 //返回匹配上的用户和没有匹配到的用户
-func (f *FreeUser) GetFinalUser(keys, notkeys []string, key_user *map[string]*[]*UserInfo, info map[string]interface{}) *map[*UserInfo]*MatchUser {
+func (f *FreeUser) GetFinalUser(keys, notkeys []string, keyUser *map[string]*[]*UserInfo, info map[string]interface{}) *map[*UserInfo]*MatchUser {
 	area, _ := info["area"].(string)
 	toptype, _ := info["toptype"].(string)
 	keyMap := map[string]bool{}
@@ -69,7 +69,7 @@ func (f *FreeUser) GetFinalUser(keys, notkeys []string, key_user *map[string]*[]
 	}
 	users := map[*UserInfo]*MatchUser{} //匹配到用户
 	//遍历所有用户
-	for k, us := range *key_user {
+	for k, us := range *keyUser {
 		if !keyMap[k] { //该关键词没有匹配到的用户
 			continue
 		}

+ 57 - 57
matcher/paymatch.go

@@ -60,16 +60,17 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 	}
 	tag_topinformation, _ := info["tag_topinformation"].([]interface{})
 	tag_subinformation, _ := info["tag_subinformation"].([]interface{})
-	notUsers := map[*UserInfo]bool{}
-	yesUsers := &map[*UserInfo]*MatchUser{}
+	yesUsers := map[*UserInfo]*MatchUser{}
+	allKeys, notkeys := []string{}, []string{}
 	//匹配标题
 	if p.Title_KeyDfa != nil {
 		if title := GetInfoTitle(info); title != "" {
 			//订阅词
 			keys := p.Title_KeyDfa.Key.Analy(title)
+			allKeys = append(allKeys, keys...)
 			//排除词
-			notkeys := p.Title_KeyDfa.NotKey.Analy(title)
-			yesUsers = p.GetFinalUser(MatchWay_Title, keys, notkeys, p.Title_KeyDfa.Key_user, &notUsers)
+			notkeys = append(notkeys, p.Title_KeyDfa.NotKey.Analy(title)...)
+			p.GetKeyUser(MatchWay_Title, keys, p.Title_KeyDfa.Key_user, yesUsers)
 		}
 	}
 	//匹配项目名称/标的物
@@ -77,26 +78,16 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 		if projectname, _ := info["projectname"].(string); projectname != "" {
 			projectname = strings.ToUpper(projectname)
 			keys := p.PnP_KeyDfa.Key.Analy(projectname)
-			notkeys := p.PnP_KeyDfa.NotKey.Analy(projectname)
-			projectname_users := p.GetFinalUser(MatchWay_Projectname, keys, notkeys, p.PnP_KeyDfa.Key_user, &notUsers)
-			for d_k, d_u := range *projectname_users {
-				if (*yesUsers)[d_k] != nil {
-					continue
-				}
-				(*yesUsers)[d_k] = d_u
-			}
+			allKeys = append(allKeys, keys...)
+			notkeys = append(notkeys, p.PnP_KeyDfa.NotKey.Analy(projectname)...)
+			p.GetKeyUser(MatchWay_Projectname, keys, p.PnP_KeyDfa.Key_user, yesUsers)
 		}
 		if purchasing, _ := info["purchasing"].(string); purchasing != "" {
 			purchasing = strings.ToUpper(purchasing)
 			keys := p.PnP_KeyDfa.Key.Analy(purchasing)
-			notkeys := p.PnP_KeyDfa.NotKey.Analy(purchasing)
-			purchasing_users := p.GetFinalUser(MatchWay_Purchasing, keys, notkeys, p.PnP_KeyDfa.Key_user, &notUsers)
-			for d_k, d_u := range *purchasing_users {
-				if (*yesUsers)[d_k] != nil {
-					continue
-				}
-				(*yesUsers)[d_k] = d_u
-			}
+			allKeys = append(allKeys, keys...)
+			notkeys = append(notkeys, p.PnP_KeyDfa.NotKey.Analy(purchasing)...)
+			p.GetKeyUser(MatchWay_Purchasing, keys, p.PnP_KeyDfa.Key_user, yesUsers)
 		}
 	}
 	//匹配附件
@@ -104,14 +95,9 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 		if filetext, _ := info["filetext"].(string); filetext != "" {
 			filetext = strings.ToUpper(filetext)
 			keys := p.Filetext_KeyDfa.Key.Analy(filetext)
-			notkeys := p.Filetext_KeyDfa.NotKey.Analy(filetext)
-			filetext_users := p.GetFinalUser(MatchWay_Filetext, keys, notkeys, p.Filetext_KeyDfa.Key_user, &notUsers)
-			for d_k, d_u := range *filetext_users {
-				if (*yesUsers)[d_k] != nil {
-					continue
-				}
-				(*yesUsers)[d_k] = d_u
-			}
+			allKeys = append(allKeys, keys...)
+			notkeys = append(notkeys, p.Filetext_KeyDfa.NotKey.Analy(filetext)...)
+			p.GetKeyUser(MatchWay_Filetext, keys, p.Filetext_KeyDfa.Key_user, yesUsers)
 		}
 	}
 	//匹配正文
@@ -119,16 +105,12 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 		if detail, _ := info["detail"].(string); detail != "" {
 			detail = strings.ToUpper(detail)
 			keys := p.Detail_KeyDfa.Key.Analy(detail)
-			notkeys := p.Detail_KeyDfa.NotKey.Analy(detail)
-			detail_users := p.GetFinalUser(MatchWay_Detail, keys, notkeys, p.Detail_KeyDfa.Key_user, &notUsers)
-			for d_k, d_u := range *detail_users {
-				if (*yesUsers)[d_k] != nil {
-					continue
-				}
-				(*yesUsers)[d_k] = d_u
-			}
+			allKeys = append(allKeys, keys...)
+			notkeys = append(notkeys, p.Detail_KeyDfa.NotKey.Analy(detail)...)
+			p.GetKeyUser(MatchWay_Detail, keys, p.Detail_KeyDfa.Key_user, yesUsers)
 		}
 	}
+	notUsers := p.GetFinalUser(allKeys, notkeys, p.Title_KeyDfa, p.PnP_KeyDfa, p.Filetext_KeyDfa, p.Detail_KeyDfa)
 	users := map[*UserInfo]*MatchUser{}
 	var projectUsers []*UserInfo
 	for k, _ := range p.Users {
@@ -160,7 +142,7 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 		}
 		var matchUser *MatchUser
 		if len(k.SubSet.Keys) > 0 {
-			matchUser = (*yesUsers)[k]
+			matchUser = yesUsers[k]
 			if matchUser == nil {
 				continue
 			}
@@ -172,34 +154,20 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 	return &users, &projectUsers
 }
 
-//获取最终的用户,排除词、信息范围、信息类型之后的
-//返回匹配上的用户和没有匹配到的用户
-func (p *PayUser) GetFinalUser(matchWay string, keys, notkeys []string, key_user *map[string]*[]*UserInfo, notUsers *map[*UserInfo]bool) *map[*UserInfo]*MatchUser {
+//返回匹配上的用户
+func (p *PayUser) GetKeyUser(matchWay string, keys []string, keyUser *map[string]*[]*UserInfo, yesUsers map[*UserInfo]*MatchUser) {
 	keyMap := map[string]bool{}
 	for _, v := range keys {
 		keyMap[v] = true
 	}
-	users := map[*UserInfo]*MatchUser{} //匹配到用户
 	//遍历所有用户
-	for k, us := range *key_user {
+	for k, us := range *keyUser {
 		if !keyMap[k] { //该关键词没有匹配到的用户
 			continue
 		}
 		for _, u := range *us {
 			//获取该词下面所有的用户
-			//遍历我的排除词,如果存在的话,排除自己
-			isContinue := false
-			for _, notkey := range notkeys {
-				if u.SubSet.Key_notkey[k][notkey] {
-					isContinue = true
-					break
-				}
-			}
-			if isContinue {
-				(*notUsers)[u] = true
-				continue
-			}
-			matchUser := users[u]
+			matchUser := yesUsers[u]
 			if matchUser == nil {
 				matchUser = &MatchUser{
 					Keys:      []string{},
@@ -221,10 +189,42 @@ func (p *PayUser) GetFinalUser(matchWay string, keys, notkeys []string, key_user
 				matchUser.MatchWays = append(matchUser.MatchWays, matchWay)
 			}
 			matchUser.MatchWay[matchWay] = true
-			users[u] = matchUser
+			yesUsers[u] = matchUser
+		}
+	}
+}
+
+//获取最终的用户,排除词、信息范围、信息类型之后的
+//返回匹配上的用户和没有匹配到的用户
+func (p *PayUser) GetFinalUser(keys, notkeys []string, keyUsers ...*KeyDfa) map[*UserInfo]bool {
+	notUsers := map[*UserInfo]bool{}
+	keyMap := map[string]bool{}
+	for _, v := range keys {
+		keyMap[v] = true
+	}
+	//遍历所有用户
+	for _, keyUser := range keyUsers {
+		if keyUser == nil {
+			continue
+		}
+		for k, us := range *keyUser.Key_user {
+			if !keyMap[k] { //该关键词没有匹配到的用户
+				continue
+			}
+		L:
+			for _, u := range *us {
+				//获取该词下面所有的用户
+				//遍历我的排除词,如果存在的话,排除自己
+				for _, notkey := range notkeys {
+					if u.SubSet.Key_notkey[k][notkey] {
+						notUsers[u] = true
+						continue L
+					}
+				}
+			}
 		}
 	}
-	return &users
+	return notUsers
 }
 
 //