config.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. package util
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. m "mongodb"
  6. "qfw/mongodb"
  7. qu "qfw/util"
  8. // "qfw/util/elastic"
  9. elastic "es"
  10. "qfw/util/mysql"
  11. "qfw/util/redis"
  12. "sort"
  13. "util/chain-zhang/pinyin"
  14. mgo "util/mgodb"
  15. "golang.org/x/text/encoding/simplifiedchinese"
  16. "golang.org/x/text/transform"
  17. )
  18. var (
  19. Sysconfig map[string]interface{} //配置文件
  20. Mgo *mongodb.MongodbSim
  21. MgoCus *mongodb.MongodbSim //企业服务库
  22. MgoEn *mongodb.MongodbSim
  23. EsIndex, EsType string
  24. EsAllIndex string
  25. InterimIndex string
  26. TotalIndex string
  27. MgoEnC string
  28. Subday float64
  29. PreviewHref string //数据预览地址
  30. CustomerApi string
  31. LatestId = "" //起始id
  32. MgoTag *mgo.MongodbSim //标签库连接
  33. MgoSave *m.MongodbSim //数据保存库连接
  34. MgoBuyer *mgo.MongodbSim //医院等级信息
  35. MgoEnps *mgo.MongodbSim //企业信息
  36. MgoExtract *mgo.MongodbSim //抽取
  37. MgoBidding *mgo.MongodbSim //bidding
  38. BiddingColl string
  39. SaveColl string
  40. HospColl string
  41. BuyerEntColl string
  42. EnpsColl string
  43. Es elastic.Es //es
  44. Index string
  45. Itype string
  46. TaskTime int64 //定时任务时间
  47. //历史数据
  48. SId string
  49. EId string
  50. CustomerName string
  51. SaveCollProject string
  52. SaveCollbid string
  53. SaveUserMail string
  54. ExtractColl string
  55. JyMysql *mysql.Mysql
  56. JyPushMysql *mysql.Mysql
  57. JyMysqls *mysql.Mysql
  58. MgoSite *mongodb.MongodbSim
  59. SiteColl string
  60. IsNewSql int
  61. )
  62. var (
  63. TopTypeArr []string //公告一级分类
  64. SubTypeArr []string //公告二级分类
  65. Province []string //省
  66. ProvinceCitys map[string][]string //省:[市1,市2]
  67. CityDistricts map[string][]string //市:[区1,区2]
  68. BuyerClass []string //采购单位行业
  69. BuyerClassMap map[string][]string //采购单位行业带拼音字母
  70. MatchTypeMap *[]map[string]interface{} //匹配方式
  71. MatchTypeMap2 map[string]interface{} //匹配方式
  72. MatchTypeMap3 *[]map[string]interface{} //匹配方式
  73. ExistFiled *[]map[string]interface{} //存在的字段
  74. ScopeClassMap *[]map[string]interface{} //公告行业
  75. TagFieldMap *[]map[string]interface{} //标签属性值
  76. TaskTypeMap *[]map[string]interface{} //任务类型
  77. BuryClassType map[string]interface{}
  78. ProvinceMap map[string]interface{}
  79. SiteArr []string //网站名称
  80. )
  81. func InitMgoPool() {
  82. Mgo = &mongodb.MongodbSim{
  83. MongodbAddr: qu.ObjToString(Sysconfig["mgodb"]),
  84. Size: qu.IntAll(Sysconfig["dbsize"]),
  85. DbName: qu.ObjToString(Sysconfig["dbname"]),
  86. }
  87. Mgo.InitPool()
  88. customer := Sysconfig["customer"].(map[string]interface{})
  89. CustomerApi = qu.ObjToString(customer["api"])
  90. MgoCus = &mongodb.MongodbSim{
  91. MongodbAddr: qu.ObjToString(customer["mgodb"]),
  92. Size: qu.IntAll(customer["dbsize"]),
  93. DbName: qu.ObjToString(customer["dbname"]),
  94. }
  95. MgoCus.InitPool()
  96. }
  97. func initMgoEn() {
  98. MgoEn = &mongodb.MongodbSim{
  99. MongodbAddr: qu.ObjToString(Sysconfig["mgodben"]),
  100. Size: qu.IntAll(Sysconfig["dbsize"]),
  101. DbName: qu.ObjToString(Sysconfig["dbnameen"]),
  102. }
  103. MgoEnC = qu.ObjToString(Sysconfig["mongoenc"])
  104. MgoEn.InitPool()
  105. }
  106. func InitOther() {
  107. initCitys()
  108. initInfoType()
  109. initBuyerClass()
  110. initMatchType()
  111. initExitField()
  112. initScopeClass()
  113. initTaskType()
  114. initEs()
  115. // initMgoEn()
  116. Subday = qu.Float64All(Sysconfig["subday"])
  117. PreviewHref = qu.ObjToString(Sysconfig["preview_href"])
  118. initTagField()
  119. initdb()
  120. initBuryClassType()
  121. initProvince()
  122. initSite()
  123. IsNewSql = qu.IntAll(Sysconfig["isNewSql"])
  124. }
  125. func initCitys() {
  126. //map初始化
  127. if ProvinceCitys == nil {
  128. ProvinceCitys = make(map[string][]string)
  129. }
  130. if CityDistricts == nil {
  131. CityDistricts = make(map[string][]string)
  132. }
  133. datas, _ := Mgo.Find("code_city", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  134. for k, data := range *datas {
  135. brief := data["brief"].(string)
  136. if k != 0 {
  137. Province = append(Province, brief)
  138. }
  139. if data["citys"] != nil {
  140. citys := data["citys"].([]interface{})
  141. citytmp := []string{}
  142. for _, city := range citys {
  143. cityMap := city.(map[string]interface{})
  144. for cname, districts := range cityMap {
  145. citytmp = append(citytmp, cname)
  146. tmp := districts.([]interface{})
  147. districtarr := qu.ObjArrToStringArr(tmp)
  148. CityDistricts[cname] = districtarr
  149. }
  150. }
  151. ProvinceCitys[brief] = citytmp
  152. }
  153. }
  154. Province = append(Province, qu.ObjToString((*datas)[0]["brief"]))
  155. }
  156. func initSite() {
  157. if SiteArr == nil {
  158. SiteArr = []string{}
  159. }
  160. datas, _ := MgoSite.Find("site", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  161. for _, data := range *datas {
  162. name := data["site"].(string)
  163. SiteArr = append(SiteArr, name)
  164. }
  165. //log.Println("网站名称", SiteArr)
  166. }
  167. func initInfoType() {
  168. datas, _ := Mgo.Find("code_infotype", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  169. for _, data := range *datas {
  170. name := data["name"].(string)
  171. TopTypeArr = append(TopTypeArr, name)
  172. child := qu.ObjArrToStringArr(data["child"].([]interface{}))
  173. SubTypeArr = append(SubTypeArr, child...)
  174. }
  175. //qu.Debug(InfoTypeArr, InfoTypeMap)
  176. }
  177. func initBuyerClass() {
  178. if BuyerClassMap == nil {
  179. BuyerClassMap = make(map[string][]string)
  180. }
  181. datas, _ := Mgo.Find("code_buyerclass", `{}`, `{"name":1}`, `{}`, false, -1, -1)
  182. for _, data := range *datas {
  183. name := data["name"].(string)
  184. BuyerClass = append(BuyerClass, name)
  185. }
  186. sort.Sort(ByPinyin(BuyerClass))
  187. for _, name := range BuyerClass {
  188. str, _ := pinyin.New(name).Mode(pinyin.InitialsInCapitals).Convert()
  189. //fmt.Println(str, err)
  190. zimu := str[0:1]
  191. BuyerClassMap[zimu] = append(BuyerClassMap[zimu], name)
  192. }
  193. }
  194. func initMatchType() {
  195. //map初始化
  196. if MatchTypeMap2 == nil {
  197. MatchTypeMap2 = make(map[string]interface{})
  198. }
  199. MatchTypeMap, _ = Mgo.Find("code_matchtype", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  200. MatchTypeMap3, _ = Mgo.Find("code_matchtype", `{"type": 1}`, nil, nil, false, -1, -1)
  201. for _, d := range *MatchTypeMap {
  202. code := qu.ObjToString(d["code"])
  203. name := qu.ObjToString(d["name"])
  204. MatchTypeMap2[code] = name
  205. }
  206. }
  207. func initExitField() {
  208. ExistFiled, _ = Mgo.Find("code_field", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  209. for _, data := range *ExistFiled {
  210. str, _ := pinyin.New(data["name"].(string)).Mode(pinyin.InitialsInCapitals).Convert()
  211. //fmt.Println(str, err)
  212. //zimu := str[0:1]
  213. data["zimu"] = str
  214. }
  215. for i := 0; i < len(*ExistFiled); i++ {
  216. for j := 0; j < len(*ExistFiled)-i-1; j++ {
  217. if (*ExistFiled)[j]["zimu"].(string) > (*ExistFiled)[j+1]["zimu"].(string) {
  218. (*ExistFiled)[j], (*ExistFiled)[j+1] = (*ExistFiled)[j+1], (*ExistFiled)[j]
  219. }
  220. }
  221. }
  222. //for _, data := range *datas {
  223. // name := data["name"].(string)
  224. // ExistFiled = append(ExistFiled, name)
  225. //}
  226. }
  227. func initScopeClass() {
  228. ScopeClassMap, _ = Mgo.Find("code_scopeclass", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
  229. }
  230. func initTaskType() {
  231. TaskTypeMap, _ = Mgo.Find("code_task", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
  232. }
  233. func initEs() {
  234. EsIndex, EsType = qu.ObjToString(Sysconfig["elasticsearch_index"]), qu.ObjToString(Sysconfig["elasticsearch_type"])
  235. EsAllIndex = qu.ObjToString(Sysconfig["elasticsearch_all_index"])
  236. TotalIndex = qu.ObjToString(Sysconfig["elasticsearch_total_index"])
  237. InterimIndex = qu.ObjToString(Sysconfig["elasticsearch_interim_index"])
  238. // elastic.InitElasticSize(qu.ObjToString(Sysconfig["elasticsearch"]), qu.IntAllDef(qu.Int64All(Sysconfig["elasticPoolSize"]), 30))
  239. es := Sysconfig["es"].(map[string]interface{})
  240. Es = elastic.NewEs(qu.ObjToString(es["version"]), qu.ObjToString(es["addr"]), qu.IntAllDef(es["pool"], 15), qu.ObjToString(es["userName"]), qu.ObjToString(es["password"]))
  241. Index = qu.ObjToString(es["index"])
  242. Itype = qu.ObjToString(es["itype"])
  243. }
  244. func initTagField() {
  245. TagFieldMap, _ = Mgo.Find("code_tagfield", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
  246. }
  247. func initBuryClassType() {
  248. infoType := JyMysql.SelectBySql("SELECT id,name FROM infotype")
  249. BuryClassType = make(map[string]interface{})
  250. for _, val := range *infoType {
  251. k := qu.ObjToString(val["name"])
  252. BuryClassType[k] = val["id"]
  253. }
  254. }
  255. func initProvince() {
  256. proArr := JyMysql.SelectBySql("SELECT id,name FROM province")
  257. ProvinceMap = make(map[string]interface{})
  258. for _, val := range *proArr {
  259. k := qu.ObjToString(val["name"])
  260. ProvinceMap[k] = val["id"]
  261. }
  262. }
  263. func initdb() {
  264. //mgo save
  265. save := Sysconfig["save"].(map[string]interface{})
  266. SaveColl = qu.ObjToString(save["coll"])
  267. SaveCollProject = qu.ObjToString(save["coll_project"])
  268. SaveCollbid = qu.ObjToString(save["coll_bid"])
  269. SaveUserMail = qu.ObjToString(save["coll_usermail"])
  270. MgoSave = &m.MongodbSim{
  271. MongodbAddr: qu.ObjToString(save["addr"]),
  272. DbName: qu.ObjToString(save["db"]),
  273. Size: qu.IntAllDef(save["size"], 15),
  274. }
  275. MgoSave.InitPool()
  276. //mgo buyerinfo
  277. buyerinfo := Sysconfig["buyerinfo"].(map[string]interface{})
  278. HospColl = qu.ObjToString(buyerinfo["hospcoll"])
  279. BuyerEntColl = qu.ObjToString(buyerinfo["buyerentcoll"])
  280. MgoBuyer = &mgo.MongodbSim{
  281. MongodbAddr: qu.ObjToString(buyerinfo["addr"]),
  282. DbName: qu.ObjToString(buyerinfo["db"]),
  283. Size: qu.IntAllDef(buyerinfo["size"], 15),
  284. UserName: qu.ObjToString(buyerinfo["username"]),
  285. Password: qu.ObjToString(buyerinfo["password"]),
  286. ReplSet: qu.ObjToString(buyerinfo["replSet"]),
  287. }
  288. MgoBuyer.InitPool()
  289. //mgo enterprise
  290. enterprise := Sysconfig["enterprise"].(map[string]interface{})
  291. EnpsColl = qu.ObjToString(enterprise["coll"])
  292. MgoEnps = &mgo.MongodbSim{
  293. MongodbAddr: qu.ObjToString(enterprise["addr"]),
  294. DbName: qu.ObjToString(enterprise["db"]),
  295. Size: qu.IntAllDef(enterprise["size"], 15),
  296. UserName: qu.ObjToString(buyerinfo["username"]),
  297. Password: qu.ObjToString(buyerinfo["password"]),
  298. ReplSet: qu.ObjToString(buyerinfo["replSet"]),
  299. }
  300. MgoEnps.InitPool()
  301. extract := Sysconfig["extract"].(map[string]interface{})
  302. ExtractColl = qu.ObjToString(extract["coll"])
  303. MgoExtract = &mgo.MongodbSim{
  304. MongodbAddr: qu.ObjToString(extract["addr"]),
  305. DbName: qu.ObjToString(extract["db"]),
  306. Size: qu.IntAllDef(extract["size"], 15),
  307. }
  308. MgoExtract.InitPool()
  309. //bidding库
  310. bidding := Sysconfig["bidding_mgo"].(map[string]interface{})
  311. BiddingColl = qu.ObjToString(bidding["coll"])
  312. MgoBidding = &mgo.MongodbSim{
  313. MongodbAddr: qu.ObjToString(bidding["addr"]),
  314. DbName: qu.ObjToString(bidding["db"]),
  315. Size: qu.IntAll(bidding["size"]),
  316. UserName: qu.ObjToString(bidding["username"]),
  317. Password: qu.ObjToString(bidding["password"]),
  318. ReplSet: qu.ObjToString(bidding["replSet"]),
  319. }
  320. MgoBidding.InitPool()
  321. site := Sysconfig["site_mgo"].(map[string]interface{})
  322. SiteColl = qu.ObjToString(site["coll"])
  323. MgoSite = &mongodb.MongodbSim{
  324. MongodbAddr: qu.ObjToString(site["addr"]),
  325. Size: qu.IntAll(site["size"]),
  326. DbName: qu.ObjToString(site["db"]),
  327. }
  328. MgoSite.InitPool()
  329. //es
  330. // Es = &elastic.Elastic{
  331. // S_esurl: qu.ObjToString(es["addr"]),
  332. // I_size: qu.IntAllDef(es["pool"], 15),
  333. // }
  334. redis.InitRedis(qu.ObjToString(Sysconfig["redis_addrs"]))
  335. jyMysql := qu.ObjToMap(Sysconfig["jyPushMysql"])
  336. JyMysql = &mysql.Mysql{
  337. Address: (*jyMysql)["address"].(string),
  338. UserName: (*jyMysql)["username"].(string),
  339. PassWord: (*jyMysql)["password"].(string),
  340. DBName: (*jyMysql)["dbName"].(string),
  341. }
  342. JyMysql.Init()
  343. jyPushMysql := qu.ObjToMap(Sysconfig["pushMysql"])
  344. JyPushMysql = &mysql.Mysql{
  345. Address: (*jyPushMysql)["address"].(string),
  346. UserName: (*jyPushMysql)["username"].(string),
  347. PassWord: (*jyPushMysql)["password"].(string),
  348. DBName: (*jyPushMysql)["dbName"].(string),
  349. }
  350. JyPushMysql.Init()
  351. jyMysqls := qu.ObjToMap(Sysconfig["jyMysql"])
  352. JyMysqls = &mysql.Mysql{
  353. Address: (*jyMysqls)["address"].(string),
  354. UserName: (*jyMysqls)["username"].(string),
  355. PassWord: (*jyMysqls)["password"].(string),
  356. DBName: (*jyMysqls)["dbName"].(string),
  357. }
  358. JyMysqls.Init()
  359. }
  360. type ByPinyin []string
  361. func (s ByPinyin) Len() int { return len(s) }
  362. func (s ByPinyin) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  363. func (s ByPinyin) Less(i, j int) bool {
  364. a, _ := UTF82GBK(s[i])
  365. b, _ := UTF82GBK(s[j])
  366. bLen := len(b)
  367. for idx, chr := range a {
  368. if idx > bLen-1 {
  369. return false
  370. }
  371. if chr != b[idx] {
  372. return chr < b[idx]
  373. }
  374. }
  375. return true
  376. }
  377. // UTF82GBK : transform UTF8 rune into GBK byte array
  378. func UTF82GBK(src string) ([]byte, error) {
  379. GB18030 := simplifiedchinese.All[0]
  380. return ioutil.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
  381. }