init.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package main
  2. import (
  3. "createindex/oss"
  4. "fmt"
  5. "net"
  6. "strings"
  7. "time"
  8. util "utils"
  9. "utils/elastic"
  10. "utils/mongodb"
  11. "utils/udp"
  12. )
  13. var (
  14. Sysconfig map[string]interface{}
  15. biddingMgo *mongodb.MongodbSim
  16. extractMgo *mongodb.MongodbSim
  17. qyxyMgo *mongodb.MongodbSim
  18. projectMgo *mongodb.MongodbSim
  19. standardMgo *mongodb.MongodbSim
  20. Es1 *elastic.Elastic
  21. Es2 *elastic.Elastic
  22. currentColl string
  23. udpclient udp.UdpClient //udp对象
  24. updport string
  25. multiIndex []string
  26. biddingMgoFields []string
  27. biddingEsFields map[string]interface{}
  28. projectinfoFields map[string]interface{}
  29. purchasinglistFields map[string]interface{}
  30. procurementlisFields map[string]interface{}
  31. winnerorderlistFields map[string]interface{}
  32. updateBiddingPool chan []map[string]interface{}
  33. updateExtractPool chan []map[string]interface{}
  34. saveEsPool chan map[string]interface{}
  35. saveEsAllPool chan map[string]interface{}
  36. saveEsElsePool chan map[string]interface{}
  37. saveProjectEsPool chan map[string]interface{}
  38. updateBiddingSp chan bool
  39. updateExtractSp chan bool
  40. saveEsSp chan bool
  41. saveEsAllSp chan bool
  42. saveEsElseSp chan bool
  43. saveProjectSp chan bool
  44. JyUdpAddr *net.UDPAddr
  45. esAddr, esNode string
  46. FilterKeyword []string //正文竟品关键词过滤
  47. ProvinceDict map[string][]Province //省份-map
  48. CityDict map[string][]City //城市-map
  49. DistrictDict map[string][]District //区县-map
  50. bidding, extract, qyxy, project, standard, buyer, winner, biddingIndex map[string]interface{}
  51. MgoBulkSize = 200 // mgo批量保存大小
  52. EsBulkSize = 200 // es批量保存大小
  53. detailLength = 50000 // es保存detail长度
  54. fileLength = 50000 // es保存附件文本长度
  55. pscopeLength = 32766 // projectscope长度
  56. )
  57. var StopFlag = false // 程序生索引停止标志
  58. func init() {
  59. util.ReadConfig(&Sysconfig)
  60. updport, _ = Sysconfig["updport"].(string)
  61. bidding, _ = Sysconfig["mgo_bidding"].(map[string]interface{})
  62. extract, _ = Sysconfig["mgo_extract"].(map[string]interface{})
  63. qyxy, _ = Sysconfig["mgo_qyxy"].(map[string]interface{})
  64. project, _ = Sysconfig["mgo_project"].(map[string]interface{})
  65. standard, _ = Sysconfig["standard"].(map[string]interface{})
  66. buyer, _ = Sysconfig["buyer"].(map[string]interface{})
  67. winner, _ = Sysconfig["winner"].(map[string]interface{})
  68. currentColl = util.ObjToString(bidding["collect"])
  69. biddingIndex, _ = Sysconfig["bidding_index"].(map[string]interface{})
  70. biddingMgo = &mongodb.MongodbSim{
  71. MongodbAddr: bidding["addr"].(string),
  72. Size: util.IntAllDef(bidding["pool"], 5),
  73. DbName: bidding["db"].(string),
  74. UserName: bidding["uname"].(string),
  75. Password: bidding["upwd"].(string),
  76. }
  77. biddingMgo.InitPool()
  78. extractMgo = &mongodb.MongodbSim{
  79. MongodbAddr: extract["addr"].(string),
  80. Size: util.IntAllDef(extract["pool"], 5),
  81. DbName: extract["db"].(string),
  82. }
  83. extractMgo.InitPool()
  84. qyxyMgo = &mongodb.MongodbSim{
  85. MongodbAddr: qyxy["addr"].(string),
  86. Size: util.IntAllDef(qyxy["pool"], 5),
  87. DbName: qyxy["db"].(string),
  88. }
  89. qyxyMgo.InitPool()
  90. projectMgo = &mongodb.MongodbSim{
  91. MongodbAddr: project["addr"].(string),
  92. Size: util.IntAllDef(project["pool"], 5),
  93. DbName: project["db"].(string),
  94. }
  95. projectMgo.InitPool()
  96. standardMgo = &mongodb.MongodbSim{
  97. MongodbAddr: standard["addr"].(string),
  98. Size: util.IntAllDef(standard["pool"], 5),
  99. DbName: standard["db"].(string),
  100. UserName: bidding["uname"].(string),
  101. Password: bidding["upwd"].(string),
  102. }
  103. standardMgo.InitPool()
  104. econf1 := Sysconfig["elastic_1"].(map[string]interface{})
  105. Es1 = &elastic.Elastic{
  106. S_esurl: econf1["addr"].(string),
  107. I_size: util.IntAllDef(econf1["pool"], 5),
  108. }
  109. Es1.InitElasticSize()
  110. econf2 := Sysconfig["elastic_2"].(map[string]interface{})
  111. Es2 = &elastic.Elastic{
  112. S_esurl: econf2["addr"].(string),
  113. I_size: util.IntAllDef(econf2["pool"], 5),
  114. }
  115. Es2.InitElasticSize()
  116. if mi := util.ObjToString(biddingIndex["multiIndex"]); mi != "" {
  117. multiIndex = strings.Split(mi, ",")
  118. }
  119. util.Debug(multiIndex)
  120. biddingMgoFields = strings.Split(biddingIndex["mgofields"].(string), ",")
  121. biddingEsFields = biddingIndex["esfieldsmap"].(map[string]interface{}) // bidding es字段
  122. projectinfoFields = biddingIndex["projectinfomap"].(map[string]interface{}) // projectinfo
  123. purchasinglistFields = biddingIndex["purchasinglistmap"].(map[string]interface{}) //采购清单
  124. procurementlisFields = biddingIndex["procurementlistmap"].(map[string]interface{}) //采购意向
  125. winnerorderlistFields = biddingIndex["winnerordermap"].(map[string]interface{}) //中标候选
  126. FilterKeyword = util.ObjArrToStringArr(Sysconfig["filter-keyword"].([]interface{}))
  127. initCheckCity()
  128. //初始化oss
  129. oss.InitOss()
  130. InitFileInfo()
  131. m := Sysconfig["jyfb_udp"].(map[string]interface{})
  132. JyUdpAddr = &net.UDPAddr{
  133. IP: net.ParseIP(m["addr"].(string)),
  134. Port: util.IntAll(m["port"]),
  135. }
  136. updateBiddingPool = make(chan []map[string]interface{}, 5000)
  137. updateBiddingSp = make(chan bool, 5)
  138. updateExtractPool = make(chan []map[string]interface{}, 5000)
  139. updateExtractSp = make(chan bool, 5)
  140. saveEsPool = make(chan map[string]interface{}, 5000)
  141. saveEsSp = make(chan bool, 5)
  142. saveEsAllPool = make(chan map[string]interface{}, 5000)
  143. saveEsAllSp = make(chan bool, 5)
  144. saveEsElsePool = make(chan map[string]interface{}, 5000)
  145. saveEsElseSp = make(chan bool, 5)
  146. saveProjectEsPool = make(chan map[string]interface{}, 5000)
  147. saveProjectSp = make(chan bool, 5)
  148. }
  149. func NewTk(m map[string]interface{}) *TaskInfo {
  150. p := &TaskInfo{
  151. stype: m["stype"].(string),
  152. currentTime: time.Now().Unix(),
  153. }
  154. return p
  155. }
  156. type TaskInfo struct {
  157. stype string
  158. thread int
  159. currentTime int64
  160. bidding_count int
  161. extract_count int
  162. es_count int
  163. }
  164. type Province struct {
  165. P_Name string
  166. }
  167. type City struct {
  168. P_Name string
  169. C_Name string
  170. }
  171. type District struct {
  172. P_Name string
  173. C_Name string
  174. D_Name string
  175. }
  176. //初始化城市
  177. func initCheckCity() {
  178. //初始化-城市配置
  179. ProvinceDict = make(map[string][]Province, 0)
  180. CityDict = make(map[string][]City, 0)
  181. DistrictDict = make(map[string][]District, 0)
  182. q := map[string]interface{}{
  183. "town_code": map[string]interface{}{
  184. "$exists": 0,
  185. },
  186. }
  187. sess := standardMgo.GetMgoConn()
  188. defer standardMgo.DestoryMongoConn(sess)
  189. it := sess.DB(standardMgo.DbName).C(util.ObjToString(standard["coll_area"])).Find(&q).Iter()
  190. total := 0
  191. for tmp := make(map[string]interface{}); it.Next(&tmp); total++ {
  192. district_code := util.IntAll(tmp["district_code"])
  193. city_code := util.IntAll(tmp["city_code"])
  194. if district_code > 0 {
  195. province := util.ObjToString(tmp["province"])
  196. city := util.ObjToString(tmp["city"])
  197. district := util.ObjToString(tmp["district"])
  198. data := District{province, city, district}
  199. if DistrictDict[district] == nil {
  200. DistrictDict[district] = []District{data}
  201. } else {
  202. arr := DistrictDict[district]
  203. arr = append(arr, data)
  204. DistrictDict[district] = arr
  205. }
  206. } else {
  207. if city_code > 0 {
  208. province := util.ObjToString(tmp["province"])
  209. city := util.ObjToString(tmp["city"])
  210. data := City{province, city}
  211. if CityDict[city] == nil {
  212. CityDict[city] = []City{data}
  213. } else {
  214. arr := CityDict[city]
  215. arr = append(arr, data)
  216. CityDict[city] = arr
  217. }
  218. } else {
  219. province := util.ObjToString(tmp["province"])
  220. data := Province{province}
  221. if ProvinceDict[province] == nil {
  222. ProvinceDict[province] = []Province{data}
  223. } else {
  224. arr := ProvinceDict[province]
  225. arr = append(arr, data)
  226. ProvinceDict[province] = arr
  227. }
  228. }
  229. }
  230. tmp = make(map[string]interface{})
  231. }
  232. util.Debug(fmt.Sprintf("城市配置加载完毕...省~%d 市~%d 区~%d", len(ProvinceDict), len(CityDict), len(DistrictDict)))
  233. }