cgyx.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package main
  2. import (
  3. "fmt"
  4. log "github.com/donnie4w/go-logger/logger"
  5. "github.com/tealeg/xlsx"
  6. "go.mongodb.org/mongo-driver/bson/primitive"
  7. "os"
  8. qu "qfw/util"
  9. "sync"
  10. "time"
  11. )
  12. func exportExcle(){
  13. sess := save_mgo.GetMgoConn()
  14. defer save_mgo.DestoryMongoConn(sess)
  15. q,total := map[string]interface{}{},0
  16. os.Remove("rj_data.xlsx")
  17. f :=xlsx.NewFile()
  18. sheet, _ := f.AddSheet("标的物项目信息")
  19. row := sheet.AddRow()
  20. row.AddCell().Value = "信息匹配词"
  21. row.AddCell().Value = "大区"
  22. row.AddCell().Value = "省份(锐捷划分)"
  23. row.AddCell().Value = "省份"
  24. row.AddCell().Value = "城市"
  25. row.AddCell().Value = "行业"
  26. row.AddCell().Value = "项目名称"
  27. row.AddCell().Value = "项目金额(万元)"
  28. row.AddCell().Value = "公告地址"
  29. row.AddCell().Value = "剑鱼标讯地址"
  30. row.AddCell().Value = "采购意向名称"
  31. row.AddCell().Value = "采购内容"
  32. row.AddCell().Value = "采购单位"
  33. row.AddCell().Value = "采购时间"
  34. row.AddCell().Value = "附件下载地址"
  35. row.AddCell().Value = "采购单位联系人"
  36. row.AddCell().Value = "采购单位联系电话"
  37. row.AddCell().Value = "发布时间"
  38. it := sess.DB(save_mgo.DbName).C(export_coll).Find(&q).Sort("_id").Iter()
  39. for tmp := make(map[string]interface{}); it.Next(&tmp);total++ {
  40. if total%1000 == 0 {
  41. log.Debug("curent index ", total, tmp["_id"])
  42. }
  43. row = sheet.AddRow()
  44. row.AddCell().Value = qu.ObjToString(tmp["matchkey"])
  45. row.AddCell().Value = qu.ObjToString(tmp["region"])
  46. row.AddCell().Value = qu.ObjToString(tmp["region_pro"])
  47. row.AddCell().Value = qu.ObjToString(tmp["area"])
  48. row.AddCell().Value = qu.ObjToString(tmp["city"])
  49. row.AddCell().Value = qu.ObjToString(tmp["buyerclass"])
  50. row.AddCell().Value = qu.ObjToString(tmp["p_name"])
  51. row.AddCell().Value = qu.ObjToString(tmp["p_price"])
  52. row.AddCell().Value = qu.ObjToString(tmp["href"])
  53. row.AddCell().Value = qu.ObjToString(tmp["jybxhref"])
  54. row.AddCell().Value = qu.ObjToString(tmp["title"])
  55. row.AddCell().Value = qu.ObjToString(tmp["p_scope"])
  56. row.AddCell().Value = qu.ObjToString(tmp["buyer"])
  57. row.AddCell().Value = qu.ObjToString(tmp["p_time"])
  58. row.AddCell().Value = qu.ObjToString(tmp["file_url"])
  59. row.AddCell().Value = qu.ObjToString(tmp["buyerperson"])
  60. row.AddCell().Value = qu.ObjToString(tmp["buyertel"])
  61. row.AddCell().Value = qu.ObjToString(tmp["publishtime"])
  62. tmp = make(map[string]interface{})
  63. }
  64. err := f.Save("rj_data.xlsx")
  65. if err != nil {
  66. log.Debug("保存xlsx失败:", err)
  67. }else {
  68. log.Debug("保存xlsx成功:", err)
  69. }
  70. }
  71. func dealWithCgyxData() {
  72. sess := save_mgo.GetMgoConn()
  73. defer save_mgo.DestoryMongoConn(sess)
  74. q := map[string]interface{}{}
  75. log.Debug("查询条件~",q)
  76. total,isok:= 0,0
  77. repair_pool := make(chan bool, 5)
  78. repair_wg := &sync.WaitGroup{}
  79. it := sess.DB(save_mgo.DbName).C(save_coll).Find(&q).Sort("_id").Iter()
  80. for tmp := make(map[string]interface{}); it.Next(&tmp);total++{
  81. if total%1000==0 {
  82. log.Debug("curent index ",total,tmp["_id"],isok)
  83. }
  84. subtype := qu.ObjToString(tmp["subtype"])
  85. if subtype!="采购意向" {
  86. tmp = make(map[string]interface{})
  87. continue
  88. }
  89. repair_pool <- true
  90. repair_wg.Add(1)
  91. go func(tmp map[string]interface{}) {
  92. defer func() {
  93. <-repair_pool
  94. repair_wg.Done()
  95. }()
  96. p_list := []map[string]interface{}{}
  97. if purchasinglist, ok := tmp["purchasinglist"].(primitive.A); ok {
  98. p_list = qu.ObjArrToMapArr(purchasinglist)
  99. }else {
  100. if purchasinglist, ok := tmp["purchasinglist"].([]interface{}); ok {
  101. p_list = qu.ObjArrToMapArr(purchasinglist)
  102. }
  103. }
  104. f_list := []map[string]interface{}{}
  105. if filehref, ok := tmp["filehref"].(primitive.A); ok {
  106. f_list = qu.ObjArrToMapArr(filehref)
  107. }else {
  108. if filehref, ok := tmp["filehref"].([]interface{}); ok {
  109. f_list = qu.ObjArrToMapArr(filehref)
  110. }
  111. }
  112. //其他字段需要
  113. file_url := ""
  114. if len(f_list)>0 {
  115. file_url = qu.ObjToString(f_list[0]["url"])
  116. }
  117. area := qu.ObjToString(tmp["area"])
  118. city := qu.ObjToString(tmp["city"])
  119. publishtime := qu.Int64All(tmp["publishtime"])
  120. p_time_str := time.Unix(publishtime, 0).Format(timeLayout_1)
  121. region := ""
  122. region_pro := ""
  123. if city_map[city]!=nil {
  124. region = city_map[city]["region"]
  125. region_pro = city_map[city]["region_pro"]
  126. }else {
  127. if area_map[area]!=nil {
  128. region = area_map[area]["region"]
  129. region_pro = area_map[area]["region_pro"]
  130. }
  131. }
  132. if len(p_list)>0 {
  133. new_list := comparisonList(p_list,tmp)
  134. if len(new_list)>0 {
  135. isok+=len(new_list) //计数使用
  136. for _,list := range new_list {
  137. data := map[string]interface{}{}
  138. data["matchkey"] = qu.ObjToString(tmp["matchkey"])
  139. data["region"] = region
  140. data["region_pro"] = region_pro
  141. data["area"] = area
  142. data["city"] = city
  143. data["buyerclass"] = qu.ObjToString(tmp["buyerclass"])
  144. data["p_name"] = qu.ObjToString(list["p_name"])
  145. data["p_price"] = qu.ObjToString(list["p_price"])
  146. data["href"] = qu.ObjToString(tmp["href"])
  147. data["jybxhref"] = qu.ObjToString(tmp["jybxhref"])
  148. data["title"] = qu.ObjToString(tmp["title"])
  149. data["p_scope"] = qu.ObjToString(list["p_scope"])
  150. data["buyer"] = qu.ObjToString(tmp["buyer"])
  151. data["p_time"] = qu.ObjToString(list["p_time"])
  152. data["file_url"] = file_url
  153. data["buyerperson"] = qu.ObjToString(tmp["buyerperson"])
  154. data["buyertel"] = qu.ObjToString(tmp["buyertel"])
  155. data["publishtime"] = p_time_str
  156. save_mgo.Save(export_coll,data)
  157. }
  158. }
  159. }
  160. }(tmp)
  161. tmp = make(map[string]interface{})
  162. }
  163. repair_wg.Wait()
  164. log.Debug("is export over ",total,isok)
  165. }
  166. //对比-有效数据
  167. func comparisonList(p_list []map[string]interface{} ,tmp map[string]interface{}) []map[string]interface{} {
  168. new_list := []map[string]interface{}{}
  169. for _,list := range p_list {
  170. b,data := isValidList(list,tmp)
  171. if b {
  172. new_list = append(new_list,data)
  173. }
  174. }
  175. return new_list
  176. }
  177. func isValidList(list map[string]interface{},tmp map[string]interface{}) (bool,map[string]interface{}) {
  178. publishtime := qu.Int64All(tmp["publishtime"])
  179. expurasingtime := qu.ObjToString(list["expurasingtime"])
  180. totalprice := qu.Float64All(list["totalprice"])
  181. if expurasingtime=="" {
  182. return false,nil
  183. }
  184. //时间格式转换
  185. exp_time := cleanStrToTimestamp(expurasingtime,publishtime)
  186. if exp_time>0 && exp_time<end_time && exp_time>=start_time{
  187. }else {
  188. return false,nil
  189. }
  190. //时间格式转换
  191. if totalprice<300000.0 {
  192. return false,nil
  193. }
  194. //项目名称-过滤词相关 tmp 任意可选
  195. //for _,v :=range words_arr {
  196. // projectname:=""
  197. // keywords := qu.ObjToString(v["keywords"])
  198. // outwords := qu.ObjToString(v["outwords"])
  199. // k_reg := regexp.MustCompile(keywords)
  200. // o_reg := regexp.MustCompile(outwords)
  201. // if k_reg.MatchString(projectname) && !o_reg.MatchString(projectname) {
  202. // return true
  203. // }
  204. //}
  205. data := map[string]interface{}{}
  206. exp_time_str := time.Unix(exp_time, 0).Format(timeLayout)
  207. data["p_name"]= qu.ObjToString(list["projectname"])
  208. data["p_price"]= fmt.Sprintf("%.2f",totalprice/10000.0)
  209. data["p_scope"]= qu.ObjToString(list["projectscope"])
  210. data["p_time"] = exp_time_str
  211. return true,data
  212. }