init.go 7.9 KB

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