|
@@ -14,14 +14,14 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
-type Province struct {
|
|
|
+type S_Province struct {
|
|
|
P_Name string
|
|
|
}
|
|
|
-type City struct {
|
|
|
+type S_City struct {
|
|
|
P_Name string
|
|
|
C_Name string
|
|
|
}
|
|
|
-type District struct {
|
|
|
+type S_District struct {
|
|
|
P_Name string
|
|
|
C_Name string
|
|
|
D_Name string
|
|
@@ -35,12 +35,12 @@ var (
|
|
|
udpclient mu.UdpClient //udp对象
|
|
|
nextNode []map[string]interface{} //节点信息
|
|
|
coll_name, qy_coll_name, jy_coll_name string
|
|
|
- check_lock sync.Mutex //更新锁
|
|
|
- check_thread int //线程数
|
|
|
- UpdateTask *updateInfo //更新池
|
|
|
- ProvinceDict map[string][]Province //省份-map
|
|
|
- CityDict map[string][]City //城市-map
|
|
|
- DistrictDict map[string][]District //区县-map
|
|
|
+ check_lock sync.Mutex //更新锁
|
|
|
+ check_thread int //线程数
|
|
|
+ UpdateTask *updateInfo //更新池
|
|
|
+ S_ProvinceDict map[string][]S_Province //省份-map
|
|
|
+ S_CityDict map[string][]S_City //城市-map
|
|
|
+ S_DistrictDict map[string][]S_District //区县-map
|
|
|
|
|
|
//删除字段
|
|
|
unset_dict = map[string]interface{}{"winner": 1, "s_winner": 1, "bidamount": 1, "winnerorder": 1}
|
|
@@ -51,9 +51,9 @@ var (
|
|
|
//初始化城市
|
|
|
func initCheckCity() {
|
|
|
//初始化-城市配置
|
|
|
- ProvinceDict = make(map[string][]Province, 0)
|
|
|
- CityDict = make(map[string][]City, 0)
|
|
|
- DistrictDict = make(map[string][]District, 0)
|
|
|
+ S_ProvinceDict = make(map[string][]S_Province, 0)
|
|
|
+ S_CityDict = make(map[string][]S_City, 0)
|
|
|
+ S_DistrictDict = make(map[string][]S_District, 0)
|
|
|
|
|
|
q := map[string]interface{}{
|
|
|
"town_code": map[string]interface{}{
|
|
@@ -74,41 +74,41 @@ func initCheckCity() {
|
|
|
province := qu.ObjToString(tmp["province"])
|
|
|
city := qu.ObjToString(tmp["city"])
|
|
|
district := qu.ObjToString(tmp["district"])
|
|
|
- data := District{province, city, district}
|
|
|
- if DistrictDict[district] == nil {
|
|
|
- DistrictDict[district] = []District{data}
|
|
|
+ data := S_District{province, city, district}
|
|
|
+ if S_DistrictDict[district] == nil {
|
|
|
+ S_DistrictDict[district] = []S_District{data}
|
|
|
} else {
|
|
|
- arr := DistrictDict[district]
|
|
|
+ arr := S_DistrictDict[district]
|
|
|
arr = append(arr, data)
|
|
|
- DistrictDict[district] = arr
|
|
|
+ S_DistrictDict[district] = arr
|
|
|
}
|
|
|
} else {
|
|
|
if city_code > 0 {
|
|
|
province := qu.ObjToString(tmp["province"])
|
|
|
city := qu.ObjToString(tmp["city"])
|
|
|
- data := City{province, city}
|
|
|
- if CityDict[city] == nil {
|
|
|
- CityDict[city] = []City{data}
|
|
|
+ data := S_City{province, city}
|
|
|
+ if S_CityDict[city] == nil {
|
|
|
+ S_CityDict[city] = []S_City{data}
|
|
|
} else {
|
|
|
- arr := CityDict[city]
|
|
|
+ arr := S_CityDict[city]
|
|
|
arr = append(arr, data)
|
|
|
- CityDict[city] = arr
|
|
|
+ S_CityDict[city] = arr
|
|
|
}
|
|
|
} else {
|
|
|
province := qu.ObjToString(tmp["province"])
|
|
|
- data := Province{province}
|
|
|
- if ProvinceDict[province] == nil {
|
|
|
- ProvinceDict[province] = []Province{data}
|
|
|
+ data := S_Province{province}
|
|
|
+ if S_ProvinceDict[province] == nil {
|
|
|
+ S_ProvinceDict[province] = []S_Province{data}
|
|
|
} else {
|
|
|
- arr := ProvinceDict[province]
|
|
|
+ arr := S_ProvinceDict[province]
|
|
|
arr = append(arr, data)
|
|
|
- ProvinceDict[province] = arr
|
|
|
+ S_ProvinceDict[province] = arr
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
tmp = make(map[string]interface{})
|
|
|
}
|
|
|
- log.Println(fmt.Sprintf("城市配置加载完毕...省~%d 市~%d 区~%d", len(ProvinceDict), len(CityDict), len(DistrictDict)))
|
|
|
+ log.Println(fmt.Sprintf("城市配置加载完毕...省~%d 市~%d 区~%d", len(S_ProvinceDict), len(S_CityDict), len(S_DistrictDict)))
|
|
|
}
|
|
|
|
|
|
//mgo-配置等
|
|
@@ -182,7 +182,7 @@ func main() {
|
|
|
func mainT() {
|
|
|
sid := "12982d658fa2ac55ba96517d"
|
|
|
eid := "92982d658fa2ac55ba96517e"
|
|
|
- startCheckData(sid, eid)
|
|
|
+ testCheckData(sid, eid)
|
|
|
time.Sleep(99999 * time.Hour)
|
|
|
}
|
|
|
|
|
@@ -215,10 +215,11 @@ func startCheckData(sid, eid string) {
|
|
|
}()
|
|
|
//更新-
|
|
|
update_check := make(map[string]interface{}, 0)
|
|
|
+
|
|
|
//审查-城市
|
|
|
- getCheckDataCity(tmp, &update_check)
|
|
|
+ //getCheckDataCity(tmp, &update_check)
|
|
|
//审查-中标金额
|
|
|
- getCheckDataBidamount(tmp, &update_check)
|
|
|
+ //getCheckDataBidamount(tmp, &update_check)
|
|
|
//验证是否修复发布时间 - 对比开标日期,投标截止日期
|
|
|
getCheckDataPublishtime(tmp, &update_check)
|
|
|
//清洗分类~
|
|
@@ -369,3 +370,57 @@ func getRepeatTask() {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+//测试版
|
|
|
+func testCheckData(sid, eid string) {
|
|
|
+ defer qu.Catch()
|
|
|
+ q := map[string]interface{}{
|
|
|
+ "_id": map[string]interface{}{
|
|
|
+ "$gt": StringTOBsonId(sid),
|
|
|
+ "$lte": StringTOBsonId(eid),
|
|
|
+ },
|
|
|
+ }
|
|
|
+ check_pool := make(chan bool, check_thread)
|
|
|
+ check_wg := &sync.WaitGroup{}
|
|
|
+ sess := data_mgo.GetMgoConn()
|
|
|
+ defer data_mgo.DestoryMongoConn(sess)
|
|
|
+ it := sess.DB(data_mgo.DbName).C(coll_name).Find(&q).Iter()
|
|
|
+ total, isRepair := 0, 0
|
|
|
+ for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
|
|
|
+ if total%10000 == 0 {
|
|
|
+ log.Println("当前数量:", total, isRepair, tmp["_id"])
|
|
|
+ }
|
|
|
+ update_id := map[string]interface{}{"_id": tmp["_id"]}
|
|
|
+ check_pool <- true
|
|
|
+ check_wg.Add(1)
|
|
|
+ go func(tmp map[string]interface{}, update_id map[string]interface{}) {
|
|
|
+ defer func() {
|
|
|
+ <-check_pool
|
|
|
+ check_wg.Done()
|
|
|
+ }()
|
|
|
+ //更新-
|
|
|
+ update_check := make(map[string]interface{}, 0)
|
|
|
+
|
|
|
+ //审查-城市
|
|
|
+ getCheckDataCity(tmp, &update_check)
|
|
|
+ //最终计算是否清洗
|
|
|
+ update_dict := make(map[string]interface{}, 0)
|
|
|
+ if len(update_check) > 0 {
|
|
|
+ update_check["is_standard"] = 1
|
|
|
+ update_dict["$set"] = update_check
|
|
|
+ }
|
|
|
+ if len(update_dict) > 0 {
|
|
|
+ //注意事项~更新key 不能与 删除key 同时存在
|
|
|
+ isRepair++
|
|
|
+ UpdateTask.updatePool <- []map[string]interface{}{
|
|
|
+ update_id,
|
|
|
+ update_dict,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }(tmp, update_id)
|
|
|
+ tmp = make(map[string]interface{})
|
|
|
+ }
|
|
|
+ check_wg.Wait()
|
|
|
+
|
|
|
+ log.Println("data_clean is over ", total, "~", isRepair)
|
|
|
+}
|