Эх сурвалжийг харах

Merge branch 'dev3.4' of http://192.168.3.207:10080/qmx/jy-data-extract into dev3.4

maxiaoshan 4 жил өмнө
parent
commit
ba54b198fc

+ 1 - 1
src/jy/cluster/ssh.go

@@ -49,7 +49,7 @@ var sshstr = `
 cd /opt
 kill -9 $(pidof extract_v3)
 rm -rf extract_v3*
-wget http://172.17.4.196:9080/res/extract_v3.tgz
+wget http://172.17.145.179:9080/res/extract_v3.tgz
 tar -xzvf extract_v3.tgz
 cd /opt/extract_v3
 chmod 777 extract_v3

+ 397 - 12
src/res/sv.txt

@@ -2094,7 +2094,8 @@
 色达县 4 n
 雷山县 4 n
 新兴县 4 n
-城区 4 n
+晋城市城区 4 n
+汕尾市城区 4 n
 石阡县 4 n
 厦门市 4 n
 开化县 4 n
@@ -2268,7 +2269,7 @@
 吉利区 4 n
 高密市 4 n
 徐闻县 4 n
-当阳市 4 n
+当阳市 5 n
 明光市 4 n
 云岩区 4 n
 沂源县 4 n
@@ -2876,6 +2877,8 @@
 沧县 4 n
 惠水县 4 n
 莱芜市 4 n
+莱芜区 4 n
+从化市 4 n
 宜黄县 4 n
 金堂县 4 n
 绵阳市 4 n
@@ -3409,7 +3412,6 @@
 景泰 3 n
 仙居 3 n
 海淀 3 n
-市北 3 n
 银海 3 n
 岭东 3 n
 玛多 3 n
@@ -4137,7 +4139,7 @@
 涪城 3 n
 解放 3 n
 连州 3 n
-大厂	 3 n
+大厂 3 n
 大连 3 n
 金湾 3 n
 门头沟 3 n
@@ -4486,7 +4488,6 @@
 鼎湖 3 n
 定兴 3 n
 定南 3 n
-市南 3 n
 科右前旗 3 n
 讷河 3 n
 天峻 3 n
@@ -5441,6 +5442,7 @@
 于田 3 n
 桐城 3 n
 弥渡 3 n
+沧源县 4 n
 沧源 3 n
 日照 3 n
 新和 3 n
@@ -5774,7 +5776,6 @@
 惠州 3 n
 沈阳 3 n
 富蕴 3 n
-市中 3 n
 南岸 3 n
 西藏 3 n
 宾阳 3 n
@@ -5961,7 +5962,6 @@
 甘洛 3 n
 南安 3 n
 屯昌 3 n
-资源 3 n
 渌口 3 n
 平江 3 n
 牧野 3 n
@@ -14133,6 +14133,7 @@
 旺丹乡 4 n
 右三村委会 4 n
 西参村委会 4 n
+杏市村村民委员会 4 n
 王胡村民委员会 4 n
 西迷堤村委会 4 n
 青泥湖办事处 4 n
@@ -110082,6 +110083,7 @@
 生研所社区居委会 4 n
 石狗村委会 4 n
 豪园社区居委会 4 n
+石滩镇故县村委会 4 n
 龙埚村委会 4 n
 麻丘镇居委会(南昌高新开发区) 4 n
 东流村委会 4 n
@@ -122303,7 +122305,7 @@
 河石村民委员会 4 n
 菜利社区村民委员会 4 n
 卞李村委会 4 n
-鱼嘴镇人民政府 4 n
+鱼嘴镇 4 n
 月家村村委会 4 n
 海湾村村委会 4 n
 刘坑头村委会 4 n
@@ -293909,7 +293911,6 @@
 青坑岙村村委会 4 n
 小东流村委会 4 n
 车田村 4 n
-庄村 4 n
 达卧村民委员会 4 n
 城头盖村委会 4 n
 李花园村委会 4 n
@@ -328654,6 +328655,7 @@
 孙家社区居委会 4 n
 柴家庙村民委员会 4 n
 李磨村委会 4 n
+上草市村委会 4 n
 北小路村民委员会 4 n
 铁牛里社区居委会 4 n
 贺家巷村委会 4 n
@@ -392042,7 +392044,6 @@ IT家园社区居委会 4 n
 马堑村民委员会 4 n
 里变村委会 4 n
 大丰居委会 4 n
-县园艺场 4 n
 泉边村 4 n
 史家占村委会 4 n
 枫桥居民委员会 4 n
@@ -394323,7 +394324,6 @@ IT家园社区居委会 4 n
 河东社区小杨庄村民委员会 4 n
 翠竹社区居民委员会 4 n
 西群社区居委会 4 n
-县良种场 4 n
 信号村委会 4 n
 元柏村委会 4 n
 金玉路社区居民委员会 4 n
@@ -409009,4 +409009,389 @@ IT家园社区居委会 4 n
 德安县园艺场 4 n
 长春西汀 4 n
 北京朝阳 5 n
-教育资源 5 n
+教育资源 5 n
+国土资源 5 n
+彬县 4 n
+开县 4 n
+盘县 4 n
+户县 4 n
+郫县 4 n
+海安县 4 n
+章丘市 4 n
+清新县 4 n
+潜山县 4 n
+威宁自治县 4 n
+蓟州县 4 n
+苍山县 4 n
+门源县 4 n
+永年县 4 n
+藁城市 4 n
+金平县 4 n
+燕郊市 4 n
+通州湾示范区 4 n
+九台市 4 n
+文登市 4 n
+江东区 4 n
+庐陵新区 4 n
+襄樊市 4 n
+通安镇 3 n
+昆玉市 4 n
+湄洲岛市 4 n
+托县市 4 n
+大丰市 4 n
+即墨市 4 n
+汩罗 3 n
+汩罗市 4 n
+峨嵋山市 4 n
+米泉市 4 n
+龙港市 4 n
+人力资源 5 n
+自然资源 5 n
+普兰店市 4 n
+佟二堡新市 4 n
+监利市 4 n
+鹿泉市 4 n
+上土市 4 n
+洵口市 4 n
+制锦市 4 n
+长乐市 4 n
+永定县 4 n
+双河市 4 n
+高要市 4 n
+子长市 4 n
+射洪市 4 n
+顺德市 4 n
+东菀市 4 n
+嫩江市 4 n
+丰林县市 4 n
+临安市 4 n
+东中市 4 n
+阳东县 4 n
+海州市 4 n
+胶南市 4 n
+宜州市 4 n
+彭水自治县 4 n
+北屯市 4 n
+屯留县 4 n
+新兴市 4 n
+文家市 4 n
+金坛市 4 n
+库车市 4 n
+星子县 4 n
+南康市 4 n
+兖州市 4 n
+辽县 4 n
+建阳市 4 n
+澄江市 4 n
+广德市 4 n
+无为市 4 n
+龙南市 4 n
+东乡县 4 n
+姜堰市 4 n
+华县市 4 n
+长垣市 4 n 
+达县 4 n
+候马市 4 n
+奉化市 4 n
+察布查尔县 4 n
+道真县 4 n
+洪泽县 4 n
+天祝县 4 n
+橫峰县 4 n
+双江县 4 n
+耿马县 4 n
+宁蒗县 4 n
+玉龙县 4 n
+南涧县 4 n
+巍山县 4 n
+兰坪县 4 n
+贡山县 4 n
+石林县 4 n
+禄劝县 4 n
+墨江县 4 n
+孟连县 4 n
+宁洱县 4 n
+景东县 4 n
+景谷县 4 n
+西盟县 4 n
+镇沅县 4 n
+元江县 4 n
+峨山县 4 n
+新平县 4 n
+屏边县 4 n
+维西县 4 n
+寻甸县 4 n
+江城县 4 n
+漾濞县 4 n
+马龙县 4 n
+澜沧县 4 n
+晋宁县 4 n
+新晃县 4 n
+芷江县 4 n
+通道县 4 n
+靖州县 4 n
+麻阳县 4 n
+江华县 4 n
+城步县 4 n
+宽甸县 4 n
+新宾县 4 n
+清原县 4 n
+喀左县 4 n
+桓仁县 4 n
+阜新县 4 n
+岫岩县 4 n
+阜蒙县 4 n
+武鸣县 4 n
+玉环县 4 n
+长阳县 4 n
+五峰县 4 n
+邹县 4 n
+林县 4 n
+陕县 4 n
+民和回族自治县 4 n
+安县 4 n
+木里县 4 n
+峨边县 4 n
+马边县 4 n
+北川县 4 n
+金秀县 4 n
+三江县 4 n
+融水县 4 n
+恭城县 4 n
+龙胜县 4 n
+大化县 4 n
+巴马县 4 n
+环江县 4 n
+罗城县 4 n
+都安县 4 n
+隆林县 4 n
+富川县 4 n
+辽中县 4 n
+道真自治县 4 n
+张川县 4 n
+肃南县 4 n
+肃北县 4 n
+阿克塞县 4 n
+滦县 4 n
+唐海县 4 n
+连山县 4 n
+连南县 4 n
+乳源县 4 n
+宁乡县 4 n
+香格里拉县 4 n
+泸水县 4 n
+荣昌县 4 n
+铜梁县 4 n
+酉阳县 4 n
+广丰县 4 n
+水富县 4 n
+东乡族县 4 n
+靖西县 4 n
+乐都县 4 n
+宣化县 4 n
+达孜县 4 n
+栾城县 4 n
+双流县 4 n
+塔什库尔干县 4 n
+巴里坤县 4 n
+察布查尔锡伯县 4 n
+和布克赛尔县 4 n
+焉耆县 4 n
+松桃县 4 n
+关岭县 4 n
+紫云县 4 n
+镇宁县 4 n
+务川县 4 n
+玉屏县 4 n
+沿河县 4 n
+印江县 4 n
+三都县 4 n
+定陶县 4 n
+梁平县 4 n
+潮安县 4 n
+大箐山县 4 n
+东宁县 4 n
+耿马自治县 4 n
+抚远县 4 n
+大洼县 4 n
+延庆县 4 n
+镇宁自治县 4 n
+务川自治县 4 n
+隆孜县 4 n
+高陵县 4 n
+横山县 4 n
+临桂县 4 n
+马尔康县 4 n
+怀仁县 4 n
+武隆县 4 n
+潼南县 4 n
+关岭自治县 4 n
+印江自治县 4 n
+丰宁县 4 n
+围场自治县 4 n
+宽城县 4 n
+孟村县 4 n
+青龙县 4 n
+满城县 4 n
+肥乡县 4 n
+平泉县 4 n
+江川县 4 n
+沾益县 4 n
+汤旺县 4 n
+大足县 4 n
+神木县 4 n
+崇明县 4 n
+济阳县 4 n
+垦利县 4 n
+溧水县 4 n
+兴仁县 4 n
+邹平县 4 n
+蓟县 4 n
+通州市 4 n
+宣章县 4 n
+吴江市 4 n
+上虞市 4 n
+富阳市 4 n
+可克达拉市 4 n
+邵东市 4 n
+冀州市 4 n
+茂港区 4 n
+石柱土家族县 4 n
+石柱自治县 4 n
+秀山自治县 4 n
+秀山 3 n
+酉阳自治县 4 n
+景宁县 4 n
+景宁自治县 4 n
+五峰自治县 4 n
+长阳自治县 4 n
+伊通县 4 n
+伊通自治县 4 n
+长白自治县 4 n
+积石山自治 4 n
+积石山县 4 n
+杜尔伯特县 4 n
+新站区 4 n
+达茂联合旗 4 n
+峡山区 4 n
+托县 4 n
+南郑县 4 n
+安塞县 4 n
+漷县 4 n
+密云县 4 n
+康定县 4 n
+隆昌县 4 n
+彭山县 4 n
+罗江县 4 n
+中共 5 n
+万全县 4 n
+围场县 4 n
+清苑县 4 n
+抚宁县 4 n
+徐水县 4 n
+崇礼县 4 n
+陵县 4 n
+沾化县 4 n
+杜蒙县 4 n
+漠河县 4 n
+睛隆县 4 n
+遵义县 4 n
+石仟县 4 n
+平坝县 4 n
+双江自治县 4 n
+浙川县 4 n
+沁阳县 4 n
+荔浦县 4 n
+新建县 4 n
+余江县 4 n
+洞头县 4 n
+京山县 4 n
+静海县 4 n
+堆龙德庆县 4 n
+高淳县 4 n
+揭东县 4 n
+綦江县 4 n
+璧山县 4 n
+蓉江新区 4 n
+宝水新区 4 n
+万州江南新区 4 n
+万盛区 4 n
+万盛经济技术开发区 4 n
+沈抚新区 4 n
+东戴河新区 4 n
+金普新区 4 n
+辽东湾新区 4 n
+金港新区 4 n
+萝岗区 4 n
+漳河新区 4 n
+龙华新区 4 n
+大鹏新区 4 n
+光明新区 4 n
+石岐区 4 n
+常州经济开发区 4 n
+戚墅堰区 4 n
+新海城区 4 n
+碧溪新区 4 n
+沧浪区 4 n
+太仓港区 4 n
+金阊区 4 n
+江北新区 4 n
+金洞管理区 4 n
+洪江区 4 n
+洞庭湖区 4 n
+察北管理区 4 n
+渤海新区 4 n
+塞北管理区 4 n
+汉沽管理区 4 n
+信都区 4 n
+滹沱新区 4 n
+柳东新区 4 n
+玉东新区 4 n
+临桂新区 4 n
+福绵管理区 4 n
+淮滨新区 4 n
+毛集区 4 n
+毛集实验区 4 n
+郑蒲港新区 4 n
+池北区 4 n
+康巴什新区 4 n
+乌拉盖管理区 4 n
+柳梧新区 4 n
+杨凌区 4 n
+岷东新区 4 n
+鸡公山管理区 4 n
+郑东新区 4 n
+濮阳新区 4 n
+濮北新区 4 n
+新蒲新区 4 n
+万山特区 4 n
+石岛管理区 4 n
+金林区 4 n
+大沽区 4 n
+钱塘新区 4 n
+道理区 4 n
+广信区 4 n
+洋河新区 4 n
+金海湖新区 4 n
+万盛经开区 4 n
+伊滨区 4 n
+翠亨新区 4 n
+红谷滩区 4 n
+东陵区 4 n
+元坝区 4 n
+滇中新区 4 n
+台商区 4 n
+海门临江新区 4 n
+金明区 4 n
+邢东新区 4 n
+袍江新区 4 n
+东津新区 4 n
+和横琴新区 4 n
+正定新区 4 n
+乌翠区 4 n
+普湾新区 4 n
+北部新区 4 n
+冀南新区 4 n
+任泽区 4 n
+西洞庭管理区 4 n
+羊山新区 4 n

+ 1 - 1
standardata/src/config.json

@@ -9,7 +9,7 @@
   "mgoentsize":5,
   "mgoentdb":"mxs",
   "extractcoll":"extract",
-  "extractdb": "extract_kf",
+  "extractdb": "extract_v3xs",
   "versioncoll": "tagdetailinfo",
   "extractversion": "V3.1.2",
   "standardata":{

+ 40 - 28
standardata/src/standaragency.go

@@ -38,7 +38,7 @@ func agencyStandarData(db string, query map[string]interface{}) {
 		agencytel := qu.ObjToString(tmp["agencytel"])
 		if entid == "" { //redis 未存
 			savetoerr := true
-			if agencytel != "" {
+			if agencytel != "" || agencyperson != "" {
 				v := map[string]interface{}{
 					"contact_person": agencyperson,
 					"phone":          agencytel,
@@ -48,6 +48,28 @@ func agencyStandarData(db string, query map[string]interface{}) {
 				ps = append(ps, v)
 				data := comHisMegerNewData(agency, "agency", ps)
 				if data != nil {
+					province, city, district := "", "", ""
+					province = qu.ObjToString(data["province"])
+					if province == "" { //省份为空,buyer优先提取区域信息再company_address
+						province, city, district = GetProvinceCityDistrict([]string{agency}) //先buyer
+						if province == "" {                                                  //再address
+							if address := qu.ObjToString(data["company_address"]); address != "" {
+								province, city, district = GetProvinceCityDistrict([]string{address})
+							}
+						}
+						data["province"] = province
+						data["city"] = city
+						data["district"] = district
+					}
+					//提取固话和手机号
+					contactArr := []interface{}{}
+					contactArr = append(contactArr, v)
+					latestFixedPhone, latestMobilePhone, timesFixedPhone, timesMobilePhone := getPhone(contactArr)
+					data["latestfixedphone"] = latestFixedPhone
+					data["latestmobilephone"] = latestMobilePhone
+					data["fixedphone"] = timesFixedPhone
+					data["mobilephone"] = timesMobilePhone
+					data["institute_type"] = "企业"
 					_id := MongoTo.Save(agencyent, data)
 					redis.PutRedis("agency", agencybd, agency, _id.(primitive.ObjectID).Hex(), -1)
 					savetoerr = false
@@ -56,42 +78,32 @@ func agencyStandarData(db string, query map[string]interface{}) {
 			if savetoerr {
 				t := MongoTo.FindOne(agencyerr, map[string]interface{}{"name": agency})
 				if len(t) < 1 {
+					province, city, district := GetProvinceCityDistrict([]string{agency})
 					MongoTo.Save(agencyerr, map[string]interface{}{
 						"name":       agency,
 						"check":      comMarkdata(agency, "agency"),
 						"updatetime": time.Now().Unix(),
+						"province":   province,
+						"city":       city,
+						"district":   district,
 					})
 				}
 			}
 		} else {
-			if agencytel != "" {
-				is_exist := false //电话是否存在
-				for _, v := range ps {
-					if v["phone"] == agencytel {
-						is_exist = true
-						if agencyperson != "" && v["contact_person"] != agencyperson {
-							v["contact_person"] = agencyperson
-							v["infoid"] = infoid
-							bs, _ := json.Marshal(ps) //替换数据,更新
-							redis.PutRedis("agency", agencybd, agency, bs, -1)
-						}
-						continue
-					}
-				}
-				if !is_exist {
-					v := map[string]interface{}{
-						"contact_person": agencyperson,
-						"phone":          agencytel,
-						"topscopeclass":  comRepTopscopeclass(topscopeclass),
-						"infoid":         infoid,
-					}
-					MongoTo.UpdateById(agencyent, entid,
-						map[string]interface{}{
-							"$set":  map[string]interface{}{"updatetime": time.Now().Unix()},
-							"$push": map[string]interface{}{"contact": v},
-						},
-					)
+			if agencytel != "" && agencyperson != "" {
+				v := map[string]interface{}{
+					"contact_person": agencyperson,
+					"phone":          agencytel,
+					"topscopeclass":  comRepTopscopeclass(topscopeclass),
+					"infoid":         infoid,
 				}
+				data := winMegerIndustry(entid, v)
+				MongoTo.UpdateById(agencyent, entid,
+					map[string]interface{}{
+						"$set":  data,
+						//"$push": map[string]interface{}{"contact": v},
+					},
+				)
 			}
 		}
 		tmp = map[string]interface{}{}

+ 10 - 2
standardata/src/standarbuyer.go

@@ -92,7 +92,7 @@ func buyerStandarData(db string, query map[string]interface{}) {
 				}
 			}
 		} else {
-			if buyerperson != "" || buyertel != "" {
+			if buyerperson != "" && buyertel != "" {
 				v := map[string]interface{}{
 					"contact_person": buyerperson,
 					"phone":          buyertel,
@@ -104,7 +104,7 @@ func buyerStandarData(db string, query map[string]interface{}) {
 				MongoTo.UpdateById(buyerent, entid,
 					map[string]interface{}{
 						"$set":  data,
-						"$push": map[string]interface{}{"contact": v},
+						//"$push": map[string]interface{}{"contact": v},
 					},
 				)
 			}
@@ -262,6 +262,14 @@ func buyerMegerBuyerclass(id string, ps map[string]interface{}) map[string]inter
 	//contact
 	contact := tmp["contact"].(primitive.A)
 	contact = append(contact, ps)
+	//bid_contact
+	bid_contacts,contacts := bid_contact(contact)
+	if len(bid_contacts) > 0 {
+		data["bid_contact"] = bid_contacts
+	}
+	//sort 200
+	contact = contacts
+	data["contact"] = contact
 	//提取固话和手机号
 	latestFixedPhone, latestMobilePhone, timesFixedPhone, timesMobilePhone := getPhone(contact)
 	data["latestfixedphone"] = latestFixedPhone

+ 61 - 16
standardata/src/standarwinner.go

@@ -46,6 +46,28 @@ func winnerStandarData(db string, query map[string]interface{}) {
 				}
 				data := comHisMegerNewData(winner, "winner", []map[string]interface{}{v})
 				if data != nil {
+					province, city, district := "", "", ""
+					province = qu.ObjToString(data["province"])
+					if province == "" { //省份为空,buyer优先提取区域信息再company_address
+						province, city, district = GetProvinceCityDistrict([]string{winner}) //先buyer
+						if province == "" {                                                 //再address
+							if address := qu.ObjToString(data["company_address"]); address != "" {
+								province, city, district = GetProvinceCityDistrict([]string{address})
+							}
+						}
+						data["province"] = province
+						data["city"] = city
+						data["district"] = district
+					}
+					//提取固话和手机号
+					contactArr := []interface{}{}
+					contactArr = append(contactArr, v)
+					latestFixedPhone, latestMobilePhone, timesFixedPhone, timesMobilePhone := getPhone(contactArr)
+					data["latestfixedphone"] = latestFixedPhone
+					data["latestmobilephone"] = latestMobilePhone
+					data["fixedphone"] = timesFixedPhone
+					data["mobilephone"] = timesMobilePhone
+					data["institute_type"] = "企业"
 					_id := MongoTo.Save(winnerent, data)
 					redis.PutRedis("winner", winnerbd, winner, _id.(primitive.ObjectID).Hex(), -1)
 					savetoerr = false
@@ -54,16 +76,20 @@ func winnerStandarData(db string, query map[string]interface{}) {
 			if savetoerr {
 				t := MongoTo.FindOne(winnererr, map[string]interface{}{"name": winner})
 				if len(t) < 1 {
+					province, city, district := GetProvinceCityDistrict([]string{winner})
 					MongoTo.Save(winnererr, map[string]interface{}{
 						"name":          winner,
 						"topscopeclass": comRepTopscopeclass(topscopeclass),
 						"check":         comMarkdata(winner, "winner"),
 						"updatetime":    time.Now().Unix(),
+						"province":   province,
+						"city":       city,
+						"district":   district,
 					})
 				}
 			}
 		} else { //更新标准库
-			if winnerperson != "" || winnertel != "" {
+			if winnerperson != "" && winnertel != "" {
 				v := map[string]interface{}{
 					"contact_person": winnerperson,
 					"phone":          winnertel,
@@ -74,7 +100,7 @@ func winnerStandarData(db string, query map[string]interface{}) {
 				MongoTo.UpdateById(winnerent, entid,
 					map[string]interface{}{
 						"$set":  data,
-						"$push": map[string]interface{}{"contact": v},
+						//"$push": map[string]interface{}{"contact": v},
 					},
 				)
 			}
@@ -231,29 +257,48 @@ func winStandarHistory(db string) {
 
 //企业数据整合(已有标注信息)
 func winMegerIndustry(id string, ps map[string]interface{}) map[string]interface{} {
-	tmp := MongoEnt.FindById(winnerent, id, bson.M{"industry": 1})
+	tmp := MongoEnt.FindById(winnerent, id, bson.M{"industry": 1, "contact": 1})
 	if len(tmp) < 1 {
 		return nil
 	}
 	data := map[string]interface{}{}
-	industry := tmp["industry"].(primitive.A)
-	tmpindustry := map[string]bool{}
-	for _, v := range industry {
-		tt := qu.ObjToString(v)
-		tmpindustry[tt] = true
-	}
-	if topscopeclass, ok := ps["topscopeclass"].([]interface{}); ok {
-		for _, v := range topscopeclass {
+	industry,ok := tmp["industry"].(primitive.A)
+	if ok{
+		tmpindustry := map[string]bool{}
+		for _, v := range industry {
 			tt := qu.ObjToString(v)
 			tmpindustry[tt] = true
 		}
+		if topscopeclass, ok := ps["topscopeclass"].([]interface{}); ok {
+			for _, v := range topscopeclass {
+				tt := qu.ObjToString(v)
+				tmpindustry[tt] = true
+			}
+		}
+		newindustry := []interface{}{}
+		for k, _ := range tmpindustry {
+			newindustry = append(newindustry, k)
+		}
+		data["industry"] = newindustry
 	}
-	newindustry := []interface{}{}
-	for k, _ := range tmpindustry {
-		newindustry = append(newindustry, k)
-	}
-	data["industry"] = newindustry
 	data["updatetime"] = time.Now().Unix()
+	//contact
+	contact := tmp["contact"].(primitive.A)
+	contact = append(contact, ps)
+	//bid_contact
+	bid_contacts,contacts := bid_contact(contact)
+	if len(bid_contacts) > 0 {
+		data["bid_contact"] = bid_contacts
+	}
+	//sort 200
+	contact = contacts
+	data["contact"] = contact
+	//提取固话和手机号
+	latestFixedPhone, latestMobilePhone, timesFixedPhone, timesMobilePhone := getPhone(contact)
+	data["latestfixedphone"] = latestFixedPhone
+	data["latestmobilephone"] = latestMobilePhone
+	data["fixedphone"] = timesFixedPhone
+	data["mobilephone"] = timesMobilePhone
 	return data
 }
 

+ 73 - 1
standardata/src/util.go

@@ -2,11 +2,15 @@ package main
 
 import (
 	"fmt"
+	"go.mongodb.org/mongo-driver/bson/primitive"
 	"log"
+	"qfw/common/src/qfw/util"
 	qu "qfw/util"
 	"regexp"
+	"sort"
 	"strconv"
 	"strings"
+	"unicode/utf8"
 )
 
 var (
@@ -765,7 +769,7 @@ func NewGetDistrict(area, city, district string, finishD, tmpcity []string) (str
 					district = d
 					return city, district
 				}
-			} else { //多个city
+			} else {                         //多个city
 				for _, tc := range tmpcity { //多个city根据district最高分取
 					if tc == c.Name && len(finishD) == 1 {
 						city = c.Name
@@ -864,3 +868,71 @@ func PCDScoreByDistrictSim(stype, t string, score float64, ps, cs, ds *map[strin
 		}
 	}
 }
+
+//bid_contact
+func bid_contact(tc primitive.A) ([]contactPersonPhone, []interface{}) {
+	contact_person_phone := make(map[string]uint32)
+	contact_person_phone_time := make(map[string]int64)
+	tmps := make([]interface{}, 0)
+	for _, v := range tc {
+		if km, ok := v.(map[string]interface{}); ok {
+			contact_person := util.ObjToString(km["contact_person"])
+			phone := util.ObjToString(km["phone"])
+			if contact_person == "" || phone == "" || utf8.RuneCountInString(phone) < 5 {
+				continue
+			}
+			if contact_person_phone[contact_person+"+_+"+phone] == 0 {
+				tmps = append(tmps, v)
+				contact_person_phone[contact_person+"+_+"+phone]++
+			}
+		}
+	}
+	ttmps := make([]interface{}, 0)
+	ttnum := 0
+	for i := len(tmps) - 1; i >= 0; i-- {
+		ttnum++
+		if ttnum > 200 {
+			break
+		}
+		ttmps = append(ttmps, tmps[i])
+	}
+	//t["contact"] = ttmps
+	contact_person_phone = make(map[string]uint32)
+	for _, v := range ttmps {
+		if km, ok := v.(map[string]interface{}); ok {
+			contact_person := util.ObjToString(km["contact_person"])
+			phone := util.ObjToString(km["phone"])
+			infoid := util.ObjToString(km["infoid"])
+			contact_person_phone[contact_person+"+_+"+phone]++
+			_id, _ := primitive.ObjectIDFromHex(infoid)
+			contact_person_phone_time[contact_person+"+_+"+phone] = _id.Timestamp().Unix()
+		}
+	}
+	contactPersonPhoneSlices := make(contactPersonPhoneSlice, 0)
+	if len(contact_person_phone) > 0 {
+		for k, v := range contact_person_phone {
+			pp := strings.Split(k, "+_+")
+			contactPersonPhoneSlices = append(contactPersonPhoneSlices, contactPersonPhone{Str: k, SNum: v, ContactPerson: pp[0], Phone: pp[1], UTime: contact_person_phone_time[k]})
+		}
+		sort.Sort(contactPersonPhoneSlices)
+		//t["bid_contact"] = contactPersonPhoneSlices
+		if contactPersonPhoneSlices.Len() > 200 {
+			contactPersonPhoneSlices = contactPersonPhoneSlices[:200]
+		}
+	}
+	return contactPersonPhoneSlices, ttmps
+}
+
+type contactPersonPhone struct {
+	Str           string `json:"str" bson:"-"`
+	SNum          uint32 `json:"s_num" bson:"-"`
+	ContactPerson string `json:"contact_person"`
+	Phone         string `json:"phone"`
+	UTime         int64  `json:"u_time"`
+}
+
+type contactPersonPhoneSlice []contactPersonPhone
+
+func (p contactPersonPhoneSlice) Len() int           { return len(p) }
+func (p contactPersonPhoneSlice) Less(i, j int) bool { return p[i].UTime >= p[j].UTime }
+func (p contactPersonPhoneSlice) Swap(i, j int)      { p[i], p[j] = p[j], p[i] }