xlsx.go 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. )
  9. func dealXlsxData() {
  10. //url := "http://172.17.4.184:19908"
  11. ////url := "http://127.0.0.1:19908"
  12. //username := "jybid"
  13. //password := "Top2023_JEB01i@31"
  14. ////index := "bidding" //索引名称
  15. //// 创建 Elasticsearch 客户端
  16. //client, err := elastic.NewClient(
  17. // elastic.SetURL(url),
  18. // elastic.SetBasicAuth(username, password),
  19. // elastic.SetSniff(false),
  20. //)
  21. //if err != nil {
  22. // log.Fatalf("创建 Elasticsearch 客户端失败:%s", err)
  23. //}
  24. // 2. 读取 Excel
  25. f, err := excelize.OpenFile("投资入库项目_202504.xlsx")
  26. if err != nil {
  27. log.Fatal("❌ 无法打开 Excel 文件:", err)
  28. }
  29. defer func() {
  30. f.Save()
  31. if err := f.Close(); err != nil {
  32. fmt.Println(err)
  33. }
  34. }()
  35. // 3. 读取 B 列(项目名称)
  36. rows, err := f.GetRows("Sheet1") // 替换为正确的 Sheet 名称
  37. if err != nil {
  38. log.Fatal("❌ 无法读取 Excel:", err)
  39. }
  40. log.Println("开始处理数据--------")
  41. for i := 1; i < len(rows); i++ {
  42. p1_project_code := rows[i][0]
  43. p1_project_name := rows[i][1]
  44. p1_project_owner := rows[i][2]
  45. p1_project_owner_code := rows[i][3]
  46. p1_project_owner_area := rows[i][4]
  47. p1_project_total := rows[i][5]
  48. //
  49. log.Println("项目名称--------", p1_project_name)
  50. insert := map[string]interface{}{
  51. "p1_project_code": p1_project_code,
  52. "p1_project_name": p1_project_name,
  53. "p1_project_owner": p1_project_owner,
  54. "p1_project_owner_code": p1_project_owner_code,
  55. "p1_project_owner_area": p1_project_owner_area,
  56. "p1_project_total": p1_project_total,
  57. }
  58. start := 8
  59. row := rows[i]
  60. p1_biddings := make([]map[string]interface{}, 0)
  61. p1_bidding_ids := make([]string, 0)
  62. for i := start; i+3 < len(row); i += 4 {
  63. amount := row[i]
  64. title := row[i+1]
  65. href := row[i+2]
  66. score := row[i+3]
  67. bid := GetIdByURL(href)
  68. p1_bidding_ids = append(p1_bidding_ids, bid)
  69. bidding, _ := MgoB.FindById("bidding", bid, nil)
  70. data := map[string]interface{}{
  71. "bidding_id": bid,
  72. "href": href,
  73. "title": title,
  74. "socre": score,
  75. "amount": amount,
  76. "toptype": (*bidding)["toptype"],
  77. "subtype": (*bidding)["subtype"],
  78. }
  79. //log.Println("aa", insert, amount, title, href, score)
  80. p1_biddings = append(p1_biddings, data)
  81. }
  82. insert["biddings"] = p1_biddings
  83. p1_bidding_ids = removeDuplicates(p1_bidding_ids)
  84. p1_projects := make([]map[string]interface{}, 0)
  85. for _, vv := range p1_bidding_ids {
  86. where2 := map[string]interface{}{
  87. "ids": vv,
  88. }
  89. projectset, _ := MgoP.FindOne("projectset_20230904", where2)
  90. if projectset != nil && len(*projectset) > 0 {
  91. data := map[string]interface{}{
  92. "project_id": mongodb.BsonIdToSId((*projectset)["_id"]),
  93. "projectname": util.ObjToString((*projectset)["projectname"]),
  94. "bidamount": (*projectset)["bidamount"],
  95. "sortprice": (*projectset)["sortprice"],
  96. "area": (*projectset)["area"],
  97. "city": (*projectset)["city"],
  98. "district": (*projectset)["district"],
  99. }
  100. p1_projects = append(p1_projects, data)
  101. }
  102. }
  103. uniqueProjects := make([]map[string]interface{}, 0)
  104. seen := make(map[string]bool)
  105. for _, project := range p1_projects {
  106. pid := project["project_id"].(string)
  107. if !seen[pid] {
  108. seen[pid] = true
  109. uniqueProjects = append(uniqueProjects, project)
  110. }
  111. }
  112. if len(uniqueProjects) > 0 {
  113. insert["projects"] = uniqueProjects
  114. }
  115. MgoP.InsertOrUpdate("qfw", "wcc_dealXlsxData", insert)
  116. }
  117. log.Println("数据处理完毕--------")
  118. }
  119. // exportTestData 导出拓扑统计局 样例数据
  120. func exportTestData() {
  121. sess := MgoP.GetMgoConn()
  122. defer MgoP.DestoryMongoConn(sess)
  123. queryMgo := sess.DB("qfw").C("wcc_dealXlsxData").Find(nil).Select(nil).Iter()
  124. count := 0
  125. total_datas := make([][]interface{}, 0)
  126. for tmp := make(map[string]interface{}); queryMgo.Next(tmp); count++ {
  127. if count%1000 == 0 {
  128. log.Println("current", count)
  129. }
  130. //
  131. projectname := util.ObjToString(tmp["p1_project_name"])
  132. where := map[string]interface{}{
  133. "projectname": projectname,
  134. }
  135. pro_project, _ := MgoP.FindOne("projectset_proposed", where)
  136. ppid := ""
  137. if pro_project != nil {
  138. ppid = mongodb.BsonIdToSId((*pro_project)["_id"])
  139. }
  140. //1.拟建原始数据
  141. v1 := []interface{}{
  142. ppid,
  143. tmp["p1_project_code"],
  144. tmp["p1_project_name"],
  145. tmp["p1_project_name"],
  146. tmp["p1_project_owner"],
  147. tmp["p1_project_owner_code"],
  148. }
  149. //2.在建项目数据
  150. if projects, ok := tmp["projects"].([]interface{}); ok {
  151. log.Println(projects)
  152. }
  153. total_datas = append(total_datas, v1)
  154. }
  155. }