bidding.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/xuri/excelize/v2"
  5. util "jygit.jydev.jianyu360.cn/data_processing/common_utils"
  6. "jygit.jydev.jianyu360.cn/data_processing/common_utils/mongodb"
  7. "log"
  8. "strings"
  9. )
  10. // getCountBidding 根据企业名称,获取企业的招标信息总数
  11. func getCountBidding() {
  12. f, err := excelize.OpenFile("./银行业金融机构法人名单.xlsx")
  13. if err != nil {
  14. fmt.Println(err)
  15. return
  16. }
  17. defer func() {
  18. f.Save()
  19. if err := f.Close(); err != nil {
  20. fmt.Println(err)
  21. }
  22. }()
  23. rows, err := f.GetRows("Sheet3")
  24. if err != nil {
  25. fmt.Println(err)
  26. return
  27. }
  28. ///
  29. MgoB := &mongodb.MongodbSim{
  30. MongodbAddr: "172.31.31.202:27081,172.20.45.128:27080",
  31. //MongodbAddr: "127.0.0.1:27083",
  32. Size: 10,
  33. DbName: "qfw",
  34. UserName: "SJZY_RWbid_ES",
  35. Password: "SJZY@B4i4D5e6S",
  36. //Direct: true,
  37. }
  38. MgoB.InitPool()
  39. //url := "http://172.17.4.184:19908"
  40. //url := "http://127.0.0.1:19908"
  41. //username := "jybid"
  42. //password := "Top2023_JEB01i@31"
  43. //index := "bidding" //索引名称
  44. //// 创建 Elasticsearch 客户端
  45. //client, err := elastic.NewClient(
  46. // elastic.SetURL(url),
  47. // elastic.SetBasicAuth(username, password),
  48. // elastic.SetSniff(false),
  49. //)
  50. //if err != nil {
  51. // log.Fatalf("创建 Elasticsearch 客户端失败:%s", err)
  52. //}
  53. buyers := make([]string, 0)
  54. numMap := make(map[string]int)
  55. for i := 1; i < len(rows); i++ {
  56. companyName := rows[i][0]
  57. numMap[companyName] = 0
  58. buyers = append(buyers, companyName)
  59. }
  60. sess := MgoB.GetMgoConn()
  61. defer MgoB.DestoryMongoConn(sess)
  62. query := sess.DB("qfw").C("bidding").Find(nil).Iter()
  63. count := 0
  64. for tmp := make(map[string]interface{}); query.Next(tmp); count++ {
  65. buyer := util.ObjToString(tmp["buyer"])
  66. if count%1000 == 0 {
  67. log.Println("curren:", count, buyer)
  68. }
  69. res := buyerContains(buyers, buyer)
  70. if res != "" {
  71. numMap[res]++
  72. }
  73. }
  74. for i := 1; i < len(rows); i++ {
  75. companyName := rows[i][0]
  76. log.Println("companyName", companyName)
  77. f.SetCellValue("Sheet3", fmt.Sprintf("%s%d", "B", i+1), numMap[companyName])
  78. }
  79. //for i := 1; i < len(rows); i++ {
  80. // companyName := rows[i][0]
  81. // numMap[companyName]++
  82. // //if i%100 == 0 {
  83. // // log.Println("iiii", i, companyName)
  84. // // f.Save()
  85. // //}
  86. //
  87. // //
  88. //
  89. // // 构建查询条件
  90. // //query := elastic.NewBoolQuery().
  91. // // Must(elastic.NewMatchQuery("buyer", companyName)). // buyer = "中国建筑股份有限公司"
  92. // // Should(
  93. // // elastic.NewMatchQuery("subtype", "合同"),
  94. // // elastic.NewMatchQuery("toptype", "结果"),
  95. // // elastic.NewMatchQuery("toptype", "招标"),
  96. // // ).
  97. // // MinimumShouldMatch("1"). // 至少满足一个Should条件 // buyer = "中国建筑股份有限公司"
  98. // // Must(elastic.NewRangeQuery("publishtime").Gte(1704038400).Lt(1735660800)) // publishtime 2024年
  99. // ////Must(elastic.NewRangeQuery("bidamount").Gt(1000000)). // bidamount > 1000000
  100. // ////MustNot(elastic.NewMatchQuery("s_winner", companyName)) // s_winner != "中国建筑股份有限公司"
  101. // //
  102. // //// 执行查询,返回所有匹配的数据
  103. // //searchResult, err := client.Search().
  104. // // Index(index). // 查询的索引名称
  105. // // Query(query). // 使用上述构建的查询
  106. // // Do(context.Background()) // 执行查询
  107. // //if err != nil {
  108. // // log.Fatalf("Error executing search: %s", err)
  109. // //}
  110. // //
  111. // //f.SetCellValue("Sheet3", fmt.Sprintf("%s%d", "B", i+1), searchResult.Hits.TotalHits.Value)
  112. //
  113. //}
  114. log.Println("数据处理完毕")
  115. }
  116. // buyerContains 判断 buyer 是否完全包含 buyers 列表中的某个字符串
  117. // 如果找到完全包含的字符串,则返回该字符串;否则返回空字符串
  118. func buyerContains(buyers []string, buyer string) string {
  119. for _, b := range buyers {
  120. if strings.Contains(buyer, b) { // 判断 buyer 是否包含 buyers 里的某个字符串
  121. return b // 找到第一个匹配的就返回
  122. }
  123. }
  124. return "" // 没有找到匹配项,返回空字符串
  125. }