Jianghan 4 жил өмнө
parent
commit
cc4e47c25a
1 өөрчлөгдсөн 217 нэмэгдсэн , 0 устгасан
  1. 217 0
      qyxy/src_supplement/main.go

+ 217 - 0
qyxy/src_supplement/main.go

@@ -0,0 +1,217 @@
+package main
+
+import (
+	"encoding/json"
+	"mongodb"
+	"qfw/util"
+	"qfw/util/redis"
+	"sort"
+	"strings"
+	"sync"
+)
+
+var (
+	MongoTool		*mongodb.MongodbSim
+)
+
+func init() {
+	MongoTool = &mongodb.MongodbSim{
+		MongodbAddr: "172.17.4.85:27080",
+		Size:        10,
+		DbName:      "qfw",
+	}
+	MongoTool.InitPool()
+	redis.InitRedis("qyxy_winner=127.0.0.1:6379")
+}
+
+func main() {
+	sess := MongoTool.GetMgoConn()
+	defer MongoTool.DestoryMongoConn(sess)
+
+	ch := make(chan bool, 10)
+	wg := &sync.WaitGroup{}
+
+	//q := map[string]interface{}{
+	//	"_id": map[string]interface{}{
+	//		"$gte": mongodb.StringTOBsonId("5c2a3d000000000000000000"),
+	//		"$lte": mongodb.StringTOBsonId("5e0a1f000000000000000000"),
+	//	},
+	//}
+	field := map[string]interface{}{"agency": 1, "buyer": 1, "s_winner": 1, "projectname": 1, "purchasing": 1,
+		"area": 1}
+	query := sess.DB("qfw").C("project").Find(nil).Select(field).Iter()
+	count := 0
+	for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
+		if count%2000 == 0 {
+			util.Debug("current ---", count)
+		}
+		ch <- true
+		wg.Add(1)
+		go func(tmp map[string]interface{}) {
+			defer func() {
+				<-ch
+				wg.Done()
+			}()
+			taskinfo(tmp)
+		}(tmp)
+		tmp = make(map[string]interface{})
+	}
+	wg.Wait()
+	util.Debug("over ---", count)
+}
+
+func taskinfo(tmp map[string]interface{}) {
+	winners := strings.Split(util.ObjToString(tmp["s_winner"]), ",")
+	for _, v := range winners{
+		winnermap := make(map[string]interface{})
+		if b, err := redis.Exists("qyxy_winner", v); err == nil && b {
+			text := redis.GetStr("qyxy_winner", v)
+			err1 := json.Unmarshal([]byte(text), &winnermap)
+			if err1 != nil {
+				util.Debug(v, "winner-----map解析异常")
+			}
+			// bid_projectname
+			pname := util.ObjToString(tmp["projectname"])
+			if pname != "" {
+				if winnermap["bid_projectname"] != nil {
+					arr := winnermap["bid_projectname"].([]interface{})
+					pnameArr := util.ObjArrToStringArr(arr)
+					if BinarySearch(pnameArr, util.ObjToString(tmp["projectname"])) == -1 {
+						pnameArr = append(pnameArr, util.ObjToString(tmp["projectname"]))
+					}
+					winnermap["bid_projectname"] = pnameArr
+				}else {
+					pname := []string{util.ObjToString(tmp["projectname"])}
+					winnermap["bid_projectname"] = pname
+				}
+			}
+			// bid_purchasing
+			if util.ObjToString(tmp["purchasing"]) != "" {
+				if winnermap["bid_purchasing"] != nil {
+					arr := winnermap["bid_purchasing"].([]interface{})
+					purs := util.ObjArrToStringArr(arr)
+					if BinarySearch(purs, util.ObjToString(tmp["purchasing"])) == -1 {
+						purs = append(purs, util.ObjToString(tmp["purchasing"]))
+					}
+					winnermap["bid_purchasing"] = purs
+				}else {
+					purs := []string{util.ObjToString(tmp["purchasing"])}
+					winnermap["bid_purchasing"] = purs
+				}
+			}
+			// bid_area
+			if winnermap["bid_area"] != nil {
+				arr := winnermap["bid_area"].([]interface{})
+				areas := util.ObjArrToStringArr(arr)
+				if BinarySearch(areas, util.ObjToString(tmp["area"])) == -1 {
+					areas = append(areas, util.ObjToString(tmp["area"]))
+				}
+				winnermap["bid_area"] = areas
+			}else {
+				areas := []string{util.ObjToString(tmp["area"])}
+				winnermap["bid_area"] = areas
+			}
+			// bid_unittype
+			if winnermap["bid_unittype"] != nil {
+				arr := winnermap["bid_unittype"].([]interface{})
+				types := util.ObjArrToStringArr(arr)
+				if BinarySearch(types, "2") == -1 {
+					types = append(types, "2")
+				}
+				winnermap["bid_unittype"] = types
+			}else {
+				types := []string{"2"}
+				winnermap["bid_unittype"] = types
+			}
+		}else {
+			// bid_projectname
+			if tmp["projectname"] != nil && tmp["projectname"] != "" {
+				winnermap["bid_projectname"] = []string{util.ObjToString(tmp["projectname"])}
+			}
+			// bid_purchasing
+			if tmp["purchasing"] != nil && tmp["purchasing"] != "" {
+				winnermap["bid_purchasing"] = strings.Split(util.ObjToString(tmp["purchasing"]), ",")
+			}
+			// bid_area
+			winnermap["bid_area"] = []string{util.ObjToString(tmp["area"])}
+			// bid_unittype
+			winnermap["bid_unittype"] = []string{"2"}
+		}
+		if len(winnermap) > 0 {
+			data , _ := json.Marshal(winnermap)
+			redis.Put("qyxy_winner", v, string(data), 0)
+		}
+	}
+	if buyer := util.ObjToString(tmp["buyer"]); buyer != "" {
+		buyermap := make(map[string]interface{})
+		if b, err := redis.Exists("qyxy_winner", buyer); err == nil && b {
+			text := redis.GetStr("qyxy_winner", buyer)
+			err1 := json.Unmarshal([]byte(text), &buyermap)
+			if err1 != nil {
+				util.Debug(buyer, "buyer-----map解析异常")
+			}
+			// bid_unittype
+			if buyermap["bid_unittype"] != nil {
+				arr := buyermap["bid_unittype"].([]interface{})
+				types := util.ObjArrToStringArr(arr)
+				if BinarySearch(types, "2") == -1 {
+					types = append(types, "2")
+				}
+				buyermap["bid_unittype"] = types
+			}else {
+				types := []string{"1"}
+				buyermap["bid_unittype"] = types
+			}
+		}else {
+			buyermap["bid_unittype"] = []string{"1"}
+		}
+		if len(buyermap) > 0 {
+			data , _ := json.Marshal(buyermap)
+			redis.Put("qyxy_winner", buyer, string(data), 0)
+		}
+	}
+	if agency := util.ObjToString(tmp["agency"]); agency != "" {
+		agencymap := make(map[string]interface{})
+		if b, err := redis.Exists("qyxy_winner", agency); err == nil && b {
+			text := redis.GetStr("qyxy_winner", agency)
+			err1 := json.Unmarshal([]byte(text), &agencymap)
+			if err1 != nil {
+				util.Debug(agency, "agency----map解析异常")
+			}
+			// bid_unittype
+			if agencymap["bid_unittype"] != nil {
+				arr := agencymap["bid_unittype"].([]interface{})
+				types := util.ObjArrToStringArr(arr)
+				if BinarySearch(types, "3") == -1 {
+					types = append(types, "3")
+				}
+				agencymap["bid_unittype"] = types
+			}else {
+				types := []string{"3"}
+				agencymap["bid_unittype"] = types
+			}
+		}else {
+			agencymap["bid_unittype"] = []string{"3"}
+		}
+		if len(agencymap) > 0 {
+			data , _ := json.Marshal(agencymap)
+			redis.Put("qyxy_winner", agency, string(data), 0)
+		}
+	}
+}
+
+func BinarySearch(s []string, k string) int {
+	sort.Strings(s)
+	lo, hi := 0, len(s)-1
+	for lo <= hi {
+		m := (lo + hi) >> 1
+		if s[m] < k {
+			lo = m + 1
+		} else if s[m] > k {
+			hi = m - 1
+		} else {
+			return m
+		}
+	}
+	return -1
+}