wangchuanjin 1 gadu atpakaļ
vecāks
revīzija
376e62de19
2 mainītis faili ar 62 papildinājumiem un 19 dzēšanām
  1. 33 11
      matcher/paymatch.go
  2. 29 8
      p/struct.go

+ 33 - 11
matcher/paymatch.go

@@ -9,16 +9,18 @@ import (
 
 //付费用户
 type PayUser struct {
-	Users           map[*UserInfo]bool
-	Title_KeyDfa    *KeyDfa
-	Detail_KeyDfa   *KeyDfa
-	Filetext_KeyDfa *KeyDfa
-	PnP_KeyDfa      *KeyDfa
-	BuyerclassUsers map[string]map[*UserInfo]bool
-	AreaUsers       map[string]map[*UserInfo]bool
-	CityUsers       map[string]map[*UserInfo]bool
-	DistrictUsers   map[string]map[string]map[*UserInfo]bool
-	SubtypeUsers    map[string]map[*UserInfo]bool
+	Users                map[*UserInfo]bool
+	Title_KeyDfa         *KeyDfa
+	Detail_KeyDfa        *KeyDfa
+	Filetext_KeyDfa      *KeyDfa
+	PnP_KeyDfa           *KeyDfa
+	BuyerclassUsers      map[string]map[*UserInfo]bool
+	AreaUsers            map[string]map[*UserInfo]bool
+	CityUsers            map[string]map[*UserInfo]bool
+	DistrictUsers        map[string]map[string]map[*UserInfo]bool
+	SubtypeUsers         map[string]map[*UserInfo]bool
+	TopBusinessTypeUsers map[string]map[*UserInfo]bool
+	SubBusinessTypeUsers map[string]map[*UserInfo]bool
 }
 
 //
@@ -54,6 +56,8 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 	} else if info["budget"] != nil {
 		amount = util.Float64All(info["budget"])
 	}
+	tag_topinformation, _ := info["tag_topinformation"].([]interface{})
+	tag_subinformation, _ := info["tag_subinformation"].([]interface{})
 	notUsers := map[*UserInfo]bool{}
 	yesUsers := &map[*UserInfo]*MatchUser{}
 	//匹配标题
@@ -128,7 +132,8 @@ func (p *PayUser) ToMatch(info map[string]interface{}) (*map[*UserInfo]*MatchUse
 	for k, _ := range p.Users {
 		if notUsers[k] {
 			continue
-		} else if (!p.BuyerclassUsers[""][k] && !p.BuyerclassUsers[buyerclass][k]) ||
+		} else if !p.MatchArray(tag_topinformation, k, p.TopBusinessTypeUsers) || !p.MatchArray(tag_subinformation, k, p.SubBusinessTypeUsers) ||
+			(!p.BuyerclassUsers[""][k] && !p.BuyerclassUsers[buyerclass][k]) ||
 			(!p.AreaUsers[""][k] && !p.AreaUsers[area][k] && !p.CityUsers[city][k] && (p.DistrictUsers[city] == nil || !p.DistrictUsers[city][district][k])) {
 			continue
 		}
@@ -214,3 +219,20 @@ func (p *PayUser) GetFinalUser(matchWay string, keys, notkeys []string, key_user
 	}
 	return &users
 }
+
+//
+func (p *PayUser) MatchArray(values []interface{}, u *UserInfo, all map[string]map[*UserInfo]bool) bool {
+	if all[""][u] {
+		return true
+	}
+	for _, v := range values {
+		vs, _ := v.(string)
+		if vs == "" {
+			continue
+		}
+		if all[vs][u] {
+			return true
+		}
+	}
+	return false
+}

+ 29 - 8
p/struct.go

@@ -92,8 +92,10 @@ type SubSet struct {
 	Amount                string                     //金额
 	StartAmount           float64                    //开始金额
 	EndAmount             float64                    //结束金额
-	BusinessType          []interface{}              //业务类型
-	BusinessTypes         []string                   //业务类型
+	TopBusinessType       []interface{}              //业务类型
+	TopBusinessTypes      []string                   //业务类型
+	SubBusinessType       []interface{}              //业务类型
+	SubBusinessTypes      []string                   //业务类型
 	AreaCityDistrict      map[string]interface{}     //省市区
 }
 
@@ -545,7 +547,8 @@ func (u *UserInfo) GetSubSet(isFreeUser bool, userId string, obj map[string]inte
 		subSet.Area, _ = obj["o_area"].(map[string]interface{})
 		subSet.District, _ = obj["o_district"].(map[string]interface{})
 	}
-	subSet.BusinessType, _ = obj["a_businesstype"].([]interface{})
+	subSet.TopBusinessType, _ = obj["a_topbusinesstype"].([]interface{})
+	subSet.SubBusinessType, _ = obj["a_subbusinesstype"].([]interface{})
 	for _, v := range subSet.Buyerclass {
 		s_v, _ := v.(string)
 		if s_v == "" {
@@ -582,12 +585,19 @@ func (u *UserInfo) GetSubSet(isFreeUser bool, userId string, obj map[string]inte
 		}
 		subSet.Areas = append(subSet.Areas, area)
 	}
-	for _, v := range subSet.BusinessType {
+	for _, v := range subSet.TopBusinessType {
 		s_v, _ := v.(string)
 		if s_v == "" {
 			continue
 		}
-		subSet.BusinessTypes = append(subSet.BusinessTypes, s_v)
+		subSet.TopBusinessTypes = append(subSet.TopBusinessTypes, s_v)
+	}
+	for _, v := range subSet.SubBusinessType {
+		s_v, _ := v.(string)
+		if s_v == "" {
+			continue
+		}
+		subSet.SubBusinessTypes = append(subSet.SubBusinessTypes, s_v)
 	}
 	////////////////
 	for _, vs := range keySets {
@@ -718,11 +728,22 @@ func (u *UserInfo) Add(k string, m *map[string]map[*UserInfo]bool) {
 }
 
 // 添加业务类型
-func (u *UserInfo) AddBusinessType(m *map[string]map[*UserInfo]bool) {
-	if len(u.SubSet.BusinessType) == 0 {
+func (u *UserInfo) AddTopBusinessType(m *map[string]map[*UserInfo]bool) {
+	if len(u.SubSet.TopBusinessTypes) == 0 {
+		u.Add("", m)
+	} else {
+		for _, v := range u.SubSet.TopBusinessTypes {
+			u.Add(v, m)
+		}
+	}
+}
+
+//
+func (u *UserInfo) AddSubBusinessType(m *map[string]map[*UserInfo]bool) {
+	if len(u.SubSet.SubBusinessTypes) == 0 {
 		u.Add("", m)
 	} else {
-		for _, v := range u.SubSet.BusinessTypes {
+		for _, v := range u.SubSet.SubBusinessTypes {
 			u.Add(v, m)
 		}
 	}