wangchuanjin преди 1 година
родител
ревизия
50ab517433
променени са 2 файла, в които са добавени 48 реда и са изтрити 2 реда
  1. 4 1
      matcher/paymatch.go
  2. 44 1
      p/struct.go

+ 4 - 1
matcher/paymatch.go

@@ -17,6 +17,7 @@ type PayUser struct {
 	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
 }
 
@@ -27,6 +28,7 @@ func NewPayUser() *PayUser {
 		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{},
 	}
 }
@@ -97,6 +99,7 @@ func (p *PayUser) ToMatch(info *map[string]interface{}) (*map[*UserInfo]*MatchUs
 		area = ""
 	}
 	city, _ := (*info)["city"].(string)
+	district, _ := (*info)["district"].(string)
 	subtype, _ := (*info)["subtype"].(string)
 	title := GetInfoTitle(info)
 	//订阅词
@@ -132,7 +135,7 @@ func (p *PayUser) ToMatch(info *map[string]interface{}) (*map[*UserInfo]*MatchUs
 			continue
 		}
 		if (!p.BuyerclassUsers[""][k] && !p.BuyerclassUsers[buyerclass][k]) ||
-			(!p.AreaUsers[""][k] && !p.AreaUsers[area][k] && !p.CityUsers[city][k]) {
+			(!p.AreaUsers[""][k] && !p.AreaUsers[area][k] && !p.CityUsers[city][k] && (p.DistrictUsers[city] == nil || !p.DistrictUsers[city][district])) {
 			continue
 		}
 		//关联项目不需要匹配信息类型

+ 44 - 1
p/struct.go

@@ -79,6 +79,7 @@ type SubSet struct {
 	OriginalKeys          []string                   //原始关键词
 	Areas                 []string                   //区域-省份
 	Area                  map[string]interface{}     //区域-省份
+	District              map[string]interface{}     //区域-区县
 	Subtype               []interface{}              //信息类型-二级分类
 	Subtypes              []string                   //信息类型-二级分类
 	Buyerclass            []interface{}              //采购单位行业
@@ -398,6 +399,7 @@ func (u *UserInfo) GetSubSet(isFreeUser bool, userId string, obj map[string]inte
 		subSet.Buyerclass, _ = obj["a_buyerclass"].([]interface{})
 		subSet.Subtype, _ = obj["a_infotype"].([]interface{})
 		subSet.Area, _ = obj["o_area"].(map[string]interface{})
+		subSet.District, _ = obj["o_district"].(map[string]interface{})
 	}
 	for _, v := range subSet.Buyerclass {
 		s_v, _ := v.(string)
@@ -582,7 +584,7 @@ func (u *UserInfo) AddArea(m *map[string]map[*UserInfo]bool) {
 	}
 }
 
-// 添加区域城市映射关系
+//添加省市映射关系
 func (u *UserInfo) AddAreaCity(area, city *map[string]map[*UserInfo]bool) {
 	if len(u.SubSet.Area) == 0 {
 		u.Add("", area)
@@ -607,6 +609,47 @@ func (u *UserInfo) AddAreaCity(area, city *map[string]map[*UserInfo]bool) {
 	}
 }
 
+//添加省市县映射关系
+func (u *UserInfo) AddAreaCityDistrict(area, city *map[string]map[*UserInfo]bool, district *map[string]map[string]map[*UserInfo]bool) {
+	if len(u.SubSet.Area) == 0 {
+		u.Add("", area)
+	} else {
+		for k, v := range u.SubSet.Area {
+			if k == "" {
+				continue
+			}
+			vs, _ := v.([]interface{})
+			if len(vs) == 0 {
+				u.Add(k, area)
+			} else {
+				for _, vv := range vs {
+					s_vv, _ := vv.(string)
+					if s_vv == "" {
+						continue
+					}
+					d_vv, _ := u.SubSet.District[s_vv].([]interface{})
+					if len(d_vv) == 0 {
+						u.Add(s_vv, city)
+					} else {
+						for _, vvv := range d_vv {
+							s_vvv, _ := vvv.(string)
+							if s_vvv == "" {
+								continue
+							}
+							d_mm := (*district)[s_vv]
+							if d_mm == nil {
+								d_mm = map[string]map[*UserInfo]bool{}
+							}
+							u.Add(s_vvv, &d_mm)
+							(*district)[s_vv] = d_mm
+						}
+					}
+				}
+			}
+		}
+	}
+}
+
 // 把用户挂在词下面
 func (u *UserInfo) MakeKeyUser(keys []string, key_user *map[string]*[]*UserInfo) {
 	mp := map[string]bool{}