|
@@ -15,41 +15,41 @@ var MgoSaveCache = make(chan map[string]interface{}, 5000)
|
|
var SP = make(chan bool, 5)
|
|
var SP = make(chan bool, 5)
|
|
var updatePool = make(chan []map[string]interface{}, 5000)
|
|
var updatePool = make(chan []map[string]interface{}, 5000)
|
|
var updateSp = make(chan bool, 5)
|
|
var updateSp = make(chan bool, 5)
|
|
|
|
+var mutex sync.Mutex
|
|
|
|
|
|
-//GetData 增量数据
|
|
|
|
-func GetData() {
|
|
|
|
|
|
+//IncData 增量处理数据
|
|
|
|
+func IncData() {
|
|
defer util.Catch()
|
|
defer util.Catch()
|
|
sess := Mgo.GetMgoConn()
|
|
sess := Mgo.GetMgoConn()
|
|
defer Mgo.DestoryMongoConn(sess)
|
|
defer Mgo.DestoryMongoConn(sess)
|
|
|
|
|
|
- pool := make(chan bool, 10)
|
|
|
|
- wg := &sync.WaitGroup{}
|
|
|
|
-
|
|
|
|
- q := bson.M{"_id": bson.M{"$gt": lastId}}
|
|
|
|
- //q := bson.M{"_id": 368454367}
|
|
|
|
|
|
+ q := bson.M{"jy_updatetime": bson.M{"$gt": jyUpdatetime}}
|
|
var zid int
|
|
var zid int
|
|
it := sess.DB("mixdata").C("company_change").Find(q).Select(nil).Iter()
|
|
it := sess.DB("mixdata").C("company_change").Find(q).Select(nil).Iter()
|
|
count := 0
|
|
count := 0
|
|
|
|
+ ch := make(chan bool, 16)
|
|
|
|
+ wg := &sync.WaitGroup{}
|
|
|
|
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp); count++ {
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp); count++ {
|
|
- if count%20000 == 0 {
|
|
|
|
|
|
+ if count%2000 == 0 {
|
|
log.Println("current:", count)
|
|
log.Println("current:", count)
|
|
}
|
|
}
|
|
|
|
+
|
|
zid = util.IntAll(tmp["_id"])
|
|
zid = util.IntAll(tmp["_id"])
|
|
- pool <- true
|
|
|
|
|
|
+ ch <- true
|
|
wg.Add(1)
|
|
wg.Add(1)
|
|
- fmt.Println("zid =>", zid)
|
|
|
|
- if util.Int64All(zid) > lastId {
|
|
|
|
- lastId = util.Int64All(zid)
|
|
|
|
- }
|
|
|
|
go func(tmp map[string]interface{}) {
|
|
go func(tmp map[string]interface{}) {
|
|
defer func() {
|
|
defer func() {
|
|
- <-pool
|
|
|
|
|
|
+ <-ch
|
|
wg.Done()
|
|
wg.Done()
|
|
}()
|
|
}()
|
|
|
|
+ mutex.Lock()
|
|
|
|
+ defer mutex.Unlock()
|
|
|
|
+ //
|
|
currentTime := time.Now().Unix()
|
|
currentTime := time.Now().Unix()
|
|
query := bson.M{"company_id": tmp["company_id"]}
|
|
query := bson.M{"company_id": tmp["company_id"]}
|
|
info, b := MgoMix.FindOneByField(CollSave, query, bson.M{"changes": 1})
|
|
info, b := MgoMix.FindOneByField(CollSave, query, bson.M{"changes": 1})
|
|
|
|
+ //原来数据有changes 字段就更新,追加数据
|
|
if b && len(*info) > 0 {
|
|
if b && len(*info) > 0 {
|
|
if util.ObjToString(tmp["_operation_type"]) == "insert" {
|
|
if util.ObjToString(tmp["_operation_type"]) == "insert" {
|
|
update := make(map[string]interface{})
|
|
update := make(map[string]interface{})
|
|
@@ -62,10 +62,10 @@ func GetData() {
|
|
//update["changes"] = changes
|
|
//update["changes"] = changes
|
|
update["update_time"] = currentTime
|
|
update["update_time"] = currentTime
|
|
saveInfo := map[string]interface{}{"$set": update, "$push": map[string]interface{}{"changes": item}}
|
|
saveInfo := map[string]interface{}{"$set": update, "$push": map[string]interface{}{"changes": item}}
|
|
- //updatePool <- saveInfo
|
|
|
|
- MgoMix.UpdateById(CollSave, tmp["company_id"], saveInfo)
|
|
|
|
|
|
+ MgoMix.Update("qyxy_change", map[string]interface{}{"company_id": util.ObjToString(tmp["company_id"])}, saveInfo, true, false)
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
|
|
+ //没有的直接写入
|
|
query := bson.M{"_id": tmp["company_id"]}
|
|
query := bson.M{"_id": tmp["company_id"]}
|
|
qyxy, b1 := MgoMix.FindOne("qyxy_std", query)
|
|
qyxy, b1 := MgoMix.FindOne("qyxy_std", query)
|
|
if b1 && len(*qyxy) > 0 {
|
|
if b1 && len(*qyxy) > 0 {
|
|
@@ -79,85 +79,125 @@ func GetData() {
|
|
setMark(item) //change_name_new
|
|
setMark(item) //change_name_new
|
|
changes = append(changes, item)
|
|
changes = append(changes, item)
|
|
|
|
|
|
- save["company_name"] = (*qyxy)["company_name"]
|
|
|
|
|
|
+ //save["company_name"] = (*qyxy)["company_name"]
|
|
save["company_id"] = (*qyxy)["_id"]
|
|
save["company_id"] = (*qyxy)["_id"]
|
|
save["changes"] = changes
|
|
save["changes"] = changes
|
|
save["create_time"] = currentTime
|
|
save["create_time"] = currentTime
|
|
save["update_time"] = currentTime
|
|
save["update_time"] = currentTime
|
|
- //save["_id"] = primitive.NewObjectID()
|
|
|
|
- saveInfo := map[string]interface{}{"$set": save}
|
|
|
|
- //updatePool <- saveInfo
|
|
|
|
- MgoMix.Save(CollSave, saveInfo)
|
|
|
|
|
|
+ //saveInfo := map[string]interface{}{"$set": save}
|
|
|
|
+ MgoMix.Save(CollSave, save)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}(tmp)
|
|
}(tmp)
|
|
|
|
+ tmp = map[string]interface{}{}
|
|
}
|
|
}
|
|
|
|
+ wg.Wait()
|
|
util.Debug("over---", count, zid)
|
|
util.Debug("over---", count, zid)
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
-//IncData 增量处理数据
|
|
|
|
-func IncData() {
|
|
|
|
|
|
+//IncByID 通过传入id 更新数据
|
|
|
|
+func IncByID(mapinfo map[string]interface{}) {
|
|
defer util.Catch()
|
|
defer util.Catch()
|
|
sess := Mgo.GetMgoConn()
|
|
sess := Mgo.GetMgoConn()
|
|
defer Mgo.DestoryMongoConn(sess)
|
|
defer Mgo.DestoryMongoConn(sess)
|
|
|
|
|
|
- q := bson.M{"_id": bson.M{"$gt": lastId}}
|
|
|
|
- //q := bson.M{"_id": 368454367}
|
|
|
|
|
|
+ ch := make(chan bool, 16)
|
|
|
|
+ wg := &sync.WaitGroup{}
|
|
|
|
+
|
|
|
|
+ q := map[string]interface{}{
|
|
|
|
+ "_id": map[string]interface{}{
|
|
|
|
+ "$gt": util.Int64All(mapinfo["gtid"]),
|
|
|
|
+ },
|
|
|
|
+ }
|
|
|
|
+
|
|
var zid int
|
|
var zid int
|
|
it := sess.DB("mixdata").C("company_change").Find(q).Select(nil).Iter()
|
|
it := sess.DB("mixdata").C("company_change").Find(q).Select(nil).Iter()
|
|
count := 0
|
|
count := 0
|
|
|
|
+
|
|
|
|
+ total := 0
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp); count++ {
|
|
for tmp := make(map[string]interface{}); it.Next(&tmp); count++ {
|
|
- if count%2000 == 0 {
|
|
|
|
|
|
+ if count%20000 == 0 {
|
|
log.Println("current:", count)
|
|
log.Println("current:", count)
|
|
|
|
+ log.Println("current _id:", tmp["_id"], "total", total)
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ //表更时间
|
|
|
|
+ if util.ObjToString(tmp["change_date"]) < "2023-01-01" {
|
|
|
|
+ continue
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ if util.ObjToString(tmp["_operation_type"]) == "update" {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+ //废弃
|
|
|
|
+ if util.Int64All(tmp["use_flag"]) > 8 {
|
|
|
|
+ continue
|
|
|
|
+ }
|
|
|
|
+
|
|
zid = util.IntAll(tmp["_id"])
|
|
zid = util.IntAll(tmp["_id"])
|
|
- currentTime := time.Now().Unix()
|
|
|
|
- query := bson.M{"company_id": tmp["company_id"]}
|
|
|
|
- info, b := MgoMix.FindOneByField(CollSave, query, bson.M{"changes": 1})
|
|
|
|
- //原来数据有changes 字段就更新,追加数据
|
|
|
|
- if b && len(*info) > 0 {
|
|
|
|
- if util.ObjToString(tmp["_operation_type"]) == "insert" {
|
|
|
|
- update := make(map[string]interface{})
|
|
|
|
- item := make(map[string]interface{})
|
|
|
|
- item["change_field"] = tmp["change_field"]
|
|
|
|
- item["content_before"] = tmp["content_before"]
|
|
|
|
- item["content_after"] = tmp["content_after"]
|
|
|
|
- item["change_date"] = tmp["change_date"]
|
|
|
|
- setMark(item) //change_name_new
|
|
|
|
- //update["changes"] = changes
|
|
|
|
- update["update_time"] = currentTime
|
|
|
|
- saveInfo := map[string]interface{}{"$set": update, "$push": map[string]interface{}{"changes": item}}
|
|
|
|
- MgoMix.UpdateById(CollSave, tmp["company_id"], saveInfo)
|
|
|
|
- }
|
|
|
|
- } else {
|
|
|
|
- //没有的直接写入
|
|
|
|
- query := bson.M{"_id": tmp["company_id"]}
|
|
|
|
- qyxy, b1 := MgoMix.FindOne("qyxy_std", query)
|
|
|
|
- if b1 && len(*qyxy) > 0 {
|
|
|
|
- save := make(map[string]interface{})
|
|
|
|
- var changes []map[string]interface{}
|
|
|
|
- item := make(map[string]interface{})
|
|
|
|
- item["change_field"] = tmp["change_field"]
|
|
|
|
- item["content_before"] = tmp["content_before"]
|
|
|
|
- item["content_after"] = tmp["content_after"]
|
|
|
|
- item["change_date"] = tmp["change_date"]
|
|
|
|
- setMark(item) //change_name_new
|
|
|
|
- changes = append(changes, item)
|
|
|
|
|
|
+ ch <- true
|
|
|
|
+ wg.Add(1)
|
|
|
|
+ go func(tmp map[string]interface{}) {
|
|
|
|
+ defer func() {
|
|
|
|
+ <-ch
|
|
|
|
+ wg.Done()
|
|
|
|
+ }()
|
|
|
|
+ mutex.Lock()
|
|
|
|
+ defer mutex.Unlock()
|
|
|
|
+ currentTime := time.Now().Unix()
|
|
|
|
+ query := bson.M{"company_id": tmp["company_id"]}
|
|
|
|
+ info, b := MgoMix.FindOneByField(CollSave, query, bson.M{"changes": 1})
|
|
|
|
+ //原来数据有changes 字段就更新,追加数据
|
|
|
|
+ if b && len(*info) > 0 {
|
|
|
|
+ if util.ObjToString(tmp["_operation_type"]) == "insert" {
|
|
|
|
+ update := make(map[string]interface{})
|
|
|
|
+ item := make(map[string]interface{})
|
|
|
|
+ item["change_field"] = tmp["change_field"]
|
|
|
|
+ item["content_before"] = tmp["content_before"]
|
|
|
|
+ item["content_after"] = tmp["content_after"]
|
|
|
|
+ item["change_date"] = tmp["change_date"]
|
|
|
|
+ setMark(item) //change_name_new
|
|
|
|
+ //update["changes"] = changes
|
|
|
|
+ update["update_time"] = currentTime
|
|
|
|
+ saveInfo := map[string]interface{}{"$set": update, "$push": map[string]interface{}{"changes": item}}
|
|
|
|
+ MgoMix.Update("qyxy_change", map[string]interface{}{"company_id": util.ObjToString(tmp["company_id"])}, saveInfo, true, false)
|
|
|
|
+ total++
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ total++
|
|
|
|
+ //没有的直接写入
|
|
|
|
+ query := bson.M{"_id": tmp["company_id"]}
|
|
|
|
+ qyxy, b1 := MgoMix.FindOne("qyxy_std", query)
|
|
|
|
+ if b1 && len(*qyxy) > 0 {
|
|
|
|
+ save := make(map[string]interface{})
|
|
|
|
+ var changes []map[string]interface{}
|
|
|
|
+ item := make(map[string]interface{})
|
|
|
|
+ item["change_field"] = tmp["change_field"]
|
|
|
|
+ item["content_before"] = tmp["content_before"]
|
|
|
|
+ item["content_after"] = tmp["content_after"]
|
|
|
|
+ item["change_date"] = tmp["change_date"]
|
|
|
|
+ setMark(item) //change_name_new
|
|
|
|
+ changes = append(changes, item)
|
|
|
|
|
|
- save["company_name"] = (*qyxy)["company_name"]
|
|
|
|
- save["company_id"] = (*qyxy)["_id"]
|
|
|
|
- save["changes"] = changes
|
|
|
|
- save["create_time"] = currentTime
|
|
|
|
- save["update_time"] = currentTime
|
|
|
|
- saveInfo := map[string]interface{}{"$set": save}
|
|
|
|
- MgoMix.Save(CollSave, saveInfo)
|
|
|
|
|
|
+ //save["company_name"] = (*qyxy)["company_name"]
|
|
|
|
+ save["company_id"] = (*qyxy)["_id"]
|
|
|
|
+ save["changes"] = changes
|
|
|
|
+ save["create_time"] = currentTime
|
|
|
|
+ save["update_time"] = currentTime
|
|
|
|
+ //saveInfo := map[string]interface{}{"$set": save}
|
|
|
|
+ MgoMix.Save(CollSave, save)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
|
|
+ }(tmp)
|
|
|
|
+ tmp = map[string]interface{}{}
|
|
}
|
|
}
|
|
|
|
+ wg.Wait()
|
|
util.Debug("over---", count, zid)
|
|
util.Debug("over---", count, zid)
|
|
|
|
|
|
}
|
|
}
|
|
|
|
+
|
|
func setMark(tmp map[string]interface{}) {
|
|
func setMark(tmp map[string]interface{}) {
|
|
for _, v := range ChangeMap {
|
|
for _, v := range ChangeMap {
|
|
str := util.ObjToString(tmp["change_field"])
|
|
str := util.ObjToString(tmp["change_field"])
|
|
@@ -223,7 +263,9 @@ func TaskAll() {
|
|
disposeFuc(*info, tmp)
|
|
disposeFuc(*info, tmp)
|
|
}
|
|
}
|
|
}(tmp)
|
|
}(tmp)
|
|
|
|
+ tmp = map[string]interface{}{}
|
|
}
|
|
}
|
|
|
|
+ wg.Wait()
|
|
}
|
|
}
|
|
|
|
|
|
func taskInfo(id string) {
|
|
func taskInfo(id string) {
|
|
@@ -268,6 +310,7 @@ func disposeFuc(maps []map[string]interface{}, tmp map[string]interface{}) {
|
|
MgoSaveCache <- tmp
|
|
MgoSaveCache <- tmp
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+//SaveData 存量保存
|
|
func SaveData() {
|
|
func SaveData() {
|
|
log.Println("Mgo Save...")
|
|
log.Println("Mgo Save...")
|
|
arru := make([]map[string]interface{}, 200)
|
|
arru := make([]map[string]interface{}, 200)
|