|
@@ -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
|
|
|
+}
|