|
@@ -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, ¬Users)
|
|
|
+ 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, ¬Users)
|
|
|
- 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, ¬Users)
|
|
|
- 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, ¬Users)
|
|
|
- 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, ¬Users)
|
|
|
- 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
|
|
|
}
|
|
|
|
|
|
//
|