main.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/go-redis/redis"
  6. "go.mongodb.org/mongo-driver/bson"
  7. "mongodb"
  8. "qfw/util"
  9. "reflect"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. var (
  15. MongoTool *mongodb.MongodbSim
  16. rdb *redis.Client
  17. )
  18. func init() {
  19. //MongoTool = &mongodb.MongodbSim{
  20. // MongodbAddr: "172.17.145.163:27083,172.17.4.187:27082",
  21. // Size: 10,
  22. // DbName: "mixdata",
  23. // UserName: "SJZY_RWESBid_Other",
  24. // Password: "SJZY@O17t8herB3B",
  25. //}
  26. //MongoTool.InitPool()
  27. MongoTool = &mongodb.MongodbSim{
  28. MongodbAddr: "172.17.4.85:27080",
  29. Size: 10,
  30. DbName: "qfw",
  31. }
  32. MongoTool.InitPool()
  33. }
  34. func initRedis() (err error) {
  35. ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
  36. defer cancel()
  37. rdb = redis.NewClient(&redis.Options{
  38. Addr: "127.0.0.1:8379",
  39. PoolSize: 200,
  40. DB: 5,
  41. })
  42. _, err = rdb.Ping(ctx).Result()
  43. if err != nil {
  44. fmt.Println("ping redis failed err:", err)
  45. return err
  46. }
  47. return nil
  48. }
  49. func main() {
  50. err := initRedis()
  51. if err != nil {
  52. fmt.Println("init redis failed err :", err)
  53. return
  54. }
  55. ctx := context.Background()
  56. var cursor uint64
  57. var keys []string
  58. n := 0
  59. for {
  60. keys, cursor, err = rdb.Scan(ctx, cursor, "*", 500).Result()
  61. if err != nil {
  62. fmt.Println("scan keys failed err:", err)
  63. return
  64. }
  65. util.Debug("---keys---", len(keys))
  66. n += len(keys)
  67. for _, key := range keys {
  68. val, err := rdb.Get(ctx, key).Result()
  69. if err != nil {
  70. fmt.Println("get key values failed err:", err)
  71. return
  72. }
  73. val, _ = strconv.Unquote(val)
  74. arr := strings.Split(key, ",")
  75. MongoTool.Save("first_cooperation", map[string]interface{}{"buyer": arr[0], "winner": arr[1], "project_id": val})
  76. //val, _ = strconv.Unquote(val) // 处理json字符串带转义符号
  77. //maps := make(map[string]interface{})
  78. //err1 := json.Unmarshal([]byte(val), &maps)
  79. //if err1 != nil {
  80. // util.Debug("-----map解析异常")
  81. //}
  82. //taskinfo(ctx, key, maps)
  83. }
  84. util.Debug("current---", n, cursor)
  85. if cursor == 0 {
  86. util.Debug("over---", n)
  87. break
  88. }
  89. }
  90. }
  91. func taskinfo(ctx context.Context, name string, tmp map[string]interface{}) {
  92. q := bson.M{"company_name": name}
  93. info, b := MongoTool.FindOneByField("qyxy_std", q, nil)
  94. if b && len(*info) > 0 {
  95. if types, ok := (*info)["bid_unittype"].([]interface{}); ok {
  96. t1 := util.ObjArrToStringArr(types)
  97. t2 := util.ObjArrToStringArr(tmp["bid_unittype"].([]interface{}))
  98. t2 = append(t2, t1...)
  99. tmp["bid_unittype"] = Duplicate(t2)
  100. }
  101. tmp["updatetime"] = time.Now().Unix()
  102. MongoTool.Update("qyxy_std", bson.M{"_id": (*info)["_id"]}, bson.M{"$set": tmp}, true, false)
  103. } else {
  104. tmp["company_name"] = name
  105. MongoTool.Save("qyxy_std_err", tmp)
  106. rdb.Del(ctx, name)
  107. }
  108. }
  109. func Duplicate(a interface{}) (ret []interface{}) {
  110. va := reflect.ValueOf(a)
  111. for i := 0; i < va.Len(); i++ {
  112. if i > 0 && reflect.DeepEqual(va.Index(i-1).Interface(), va.Index(i).Interface()) {
  113. continue
  114. }
  115. ret = append(ret, va.Index(i).Interface())
  116. }
  117. return ret
  118. }