config.go 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. package util
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. elastic "app.yhyue.com/moapp/jybase/es"
  5. "app.yhyue.com/moapp/jybase/log"
  6. "app.yhyue.com/moapp/jybase/mongodb"
  7. "app.yhyue.com/moapp/jybase/mysql"
  8. "app.yhyue.com/moapp/jybase/redis"
  9. "bytes"
  10. "fmt"
  11. "golang.org/x/text/encoding/simplifiedchinese"
  12. "golang.org/x/text/transform"
  13. "io"
  14. "os"
  15. "sort"
  16. )
  17. var (
  18. Sysconfig map[string]interface{} //配置文件
  19. Mgo *mongodb.MongodbSim
  20. MgoCus *mongodb.MongodbSim //企业服务库
  21. MgoEn *mongodb.MongodbSim
  22. EsIndex, EsType string
  23. EsAllIndex string
  24. InterimIndex string
  25. TotalIndex string
  26. MgoEnC string
  27. Subday float64
  28. PreviewHref string //数据预览地址
  29. CustomerApi string
  30. LatestId = "" //起始id
  31. MgoTag *mongodb.MongodbSim //标签库连接
  32. MgoSave *mongodb.MongodbSim //数据保存库连接
  33. MgoBuyer *mongodb.MongodbSim //医院等级信息
  34. MgoEnps *mongodb.MongodbSim //企业信息
  35. MgoExtract *mongodb.MongodbSim //抽取
  36. MgoBidding *mongodb.MongodbSim //bidding
  37. BiddingColl string
  38. SaveColl string
  39. HospColl string
  40. BuyerEntColl string
  41. EnpsColl string
  42. Es, EsCus elastic.Es //es
  43. Index string
  44. Itype string
  45. IndexCus 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. EntMysql *mysql.Mysql
  59. MgoSite *mongodb.MongodbSim
  60. SiteColl string
  61. IsNewSql int
  62. RpcJyServer, RpcProServer string
  63. )
  64. var (
  65. TopTypeArr []string //公告一级分类
  66. SubTypeArr []string //公告二级分类
  67. Province []string //省
  68. ProvinceCitys map[string][]string //省:[市1,市2]
  69. CityDistricts map[string][]string //市:[区1,区2]
  70. BuyerClass []string //采购单位行业
  71. BuyerClassMap map[string][]string //采购单位行业带拼音字母
  72. MatchTypeMap *[]map[string]interface{} //匹配方式
  73. MatchTypeMap2 map[string]interface{} //匹配方式
  74. MatchTypeMap3 *[]map[string]interface{} //匹配方式
  75. ExistFiled *[]map[string]interface{} //存在的字段
  76. ScopeClassMap *[]map[string]interface{} //公告行业
  77. TagFieldMap *[]map[string]interface{} //标签属性值
  78. TaskTypeMap *[]map[string]interface{} //任务类型
  79. BuryClassType map[string]interface{}
  80. ProvinceMap map[string]interface{}
  81. SiteArr []string //网站名称
  82. )
  83. func InitMgoPool() {
  84. Mgo = &mongodb.MongodbSim{
  85. MongodbAddr: common.ObjToString(Sysconfig["mgodb"]),
  86. Size: common.IntAll(Sysconfig["dbsize"]),
  87. DbName: common.ObjToString(Sysconfig["dbname"]),
  88. }
  89. Mgo.InitPool()
  90. customer := Sysconfig["customer"].(map[string]interface{})
  91. CustomerApi = common.ObjToString(customer["api"])
  92. MgoCus = &mongodb.MongodbSim{
  93. MongodbAddr: common.ObjToString(customer["mgodb"]),
  94. Size: common.IntAll(customer["dbsize"]),
  95. DbName: common.ObjToString(customer["dbname"]),
  96. }
  97. MgoCus.InitPool()
  98. }
  99. func initMgoEn() {
  100. MgoEn = &mongodb.MongodbSim{
  101. MongodbAddr: common.ObjToString(Sysconfig["mgodben"]),
  102. Size: common.IntAll(Sysconfig["dbsize"]),
  103. DbName: common.ObjToString(Sysconfig["dbnameen"]),
  104. }
  105. MgoEnC = common.ObjToString(Sysconfig["mongoenc"])
  106. MgoEn.InitPool()
  107. }
  108. func InitOther() {
  109. initCitys()
  110. initInfoType()
  111. initBuyerClass()
  112. initMatchType()
  113. initExitField()
  114. initScopeClass()
  115. initTaskType()
  116. initEs()
  117. InitLog()
  118. // initMgoEn()
  119. Subday = common.Float64All(Sysconfig["subday"])
  120. PreviewHref = common.ObjToString(Sysconfig["preview_href"])
  121. initTagField()
  122. initdb()
  123. initBuryClassType()
  124. initProvince()
  125. initSite()
  126. IsNewSql = common.IntAll(Sysconfig["isNewSql"])
  127. RpcJyServer = common.ObjToString(Sysconfig["rpcServer_jy"])
  128. RpcProServer = common.ObjToString(Sysconfig["rpcServer_project"])
  129. }
  130. func initCitys() {
  131. //map初始化
  132. if ProvinceCitys == nil {
  133. ProvinceCitys = make(map[string][]string)
  134. }
  135. if CityDistricts == nil {
  136. CityDistricts = make(map[string][]string)
  137. }
  138. datas, _ := Mgo.Find("code_city", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  139. for k, data := range *datas {
  140. brief := data["brief"].(string)
  141. if k != 0 {
  142. Province = append(Province, brief)
  143. }
  144. if data["citys"] != nil {
  145. citys := data["citys"].([]interface{})
  146. citytmp := []string{}
  147. for _, city := range citys {
  148. cityMap := city.(map[string]interface{})
  149. for cname, districts := range cityMap {
  150. citytmp = append(citytmp, cname)
  151. tmp := districts.([]interface{})
  152. districtarr := common.ObjArrToStringArr(tmp)
  153. CityDistricts[cname] = districtarr
  154. }
  155. }
  156. ProvinceCitys[brief] = citytmp
  157. }
  158. }
  159. Province = append(Province, common.ObjToString((*datas)[0]["brief"]))
  160. }
  161. func initSite() {
  162. if SiteArr == nil {
  163. SiteArr = []string{}
  164. }
  165. datas, _ := MgoSite.Find("site", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  166. for _, data := range *datas {
  167. name := data["site"].(string)
  168. SiteArr = append(SiteArr, name)
  169. }
  170. //log.Println("网站名称", SiteArr)
  171. }
  172. func initInfoType() {
  173. datas, _ := Mgo.Find("code_infotype", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  174. for _, data := range *datas {
  175. name := data["name"].(string)
  176. TopTypeArr = append(TopTypeArr, name)
  177. child := common.ObjArrToStringArr(data["child"].([]interface{}))
  178. SubTypeArr = append(SubTypeArr, child...)
  179. }
  180. //common.Debug(InfoTypeArr, InfoTypeMap)
  181. }
  182. func initBuyerClass() {
  183. if BuyerClassMap == nil {
  184. BuyerClassMap = make(map[string][]string)
  185. }
  186. datas, _ := Mgo.Find("code_buyerclass", `{}`, `{"name":1}`, `{}`, false, -1, -1)
  187. for _, data := range *datas {
  188. name := data["name"].(string)
  189. BuyerClass = append(BuyerClass, name)
  190. }
  191. sort.Sort(ByPinyin(BuyerClass))
  192. for _, name := range BuyerClass {
  193. str, _ := New(name).Mode(InitialsInCapitals).Convert()
  194. //fmt.Println(str, err)
  195. zimu := str[0:1]
  196. BuyerClassMap[zimu] = append(BuyerClassMap[zimu], name)
  197. }
  198. }
  199. func initMatchType() {
  200. //map初始化
  201. if MatchTypeMap2 == nil {
  202. MatchTypeMap2 = make(map[string]interface{})
  203. }
  204. MatchTypeMap, _ = Mgo.Find("code_matchtype", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  205. MatchTypeMap3, _ = Mgo.Find("code_matchtype", `{"type": 1}`, nil, nil, false, -1, -1)
  206. for _, d := range *MatchTypeMap {
  207. code := common.ObjToString(d["code"])
  208. name := common.ObjToString(d["name"])
  209. MatchTypeMap2[code] = name
  210. }
  211. }
  212. func initExitField() {
  213. ExistFiled, _ = Mgo.Find("code_field", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
  214. for _, data := range *ExistFiled {
  215. str, _ := New(data["name"].(string)).Mode(InitialsInCapitals).Convert()
  216. //fmt.Println(str, err)
  217. //zimu := str[0:1]
  218. data["zimu"] = str
  219. }
  220. for i := 0; i < len(*ExistFiled); i++ {
  221. for j := 0; j < len(*ExistFiled)-i-1; j++ {
  222. if (*ExistFiled)[j]["zimu"].(string) > (*ExistFiled)[j+1]["zimu"].(string) {
  223. (*ExistFiled)[j], (*ExistFiled)[j+1] = (*ExistFiled)[j+1], (*ExistFiled)[j]
  224. }
  225. }
  226. }
  227. //for _, data := range *datas {
  228. // name := data["name"].(string)
  229. // ExistFiled = append(ExistFiled, name)
  230. //}
  231. }
  232. func initScopeClass() {
  233. ScopeClassMap, _ = Mgo.Find("code_scopeclass", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
  234. }
  235. func initTaskType() {
  236. TaskTypeMap, _ = Mgo.Find("code_task", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
  237. }
  238. func initEs() {
  239. EsIndex, EsType = common.ObjToString(Sysconfig["elasticsearch_index"]), common.ObjToString(Sysconfig["elasticsearch_type"])
  240. EsAllIndex = common.ObjToString(Sysconfig["elasticsearch_all_index"])
  241. TotalIndex = common.ObjToString(Sysconfig["elasticsearch_total_index"])
  242. InterimIndex = common.ObjToString(Sysconfig["elasticsearch_interim_index"])
  243. // elastic.InitElasticSize(common.ObjToString(Sysconfig["elasticsearch"]), common.IntAllDef(common.Int64All(Sysconfig["elasticPoolSize"]), 30))
  244. es := Sysconfig["es"].(map[string]interface{})
  245. Es = elastic.NewEs(common.ObjToString(es["version"]), common.ObjToString(es["addr"]), common.IntAllDef(es["pool"], 15), common.ObjToString(es["userName"]), common.ObjToString(es["password"]))
  246. Index = common.ObjToString(es["index"])
  247. Itype = common.ObjToString(es["itype"])
  248. esCm := Sysconfig["es_customer"].(map[string]interface{})
  249. EsCus = elastic.NewEs(common.ObjToString(esCm["version"]), common.ObjToString(esCm["addr"]), common.IntAllDef(esCm["pool"], 15), common.ObjToString(esCm["userName"]), common.ObjToString(esCm["password"]))
  250. IndexCus = common.ObjToString(esCm["index"])
  251. }
  252. func initTagField() {
  253. TagFieldMap, _ = Mgo.Find("code_tagfield", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
  254. }
  255. func initBuryClassType() {
  256. infoType := JyMysql.SelectBySql("SELECT id,name FROM infotype")
  257. BuryClassType = make(map[string]interface{})
  258. for _, val := range *infoType {
  259. k := common.ObjToString(val["name"])
  260. BuryClassType[k] = val["id"]
  261. }
  262. }
  263. func initProvince() {
  264. proArr := JyMysql.SelectBySql("SELECT id,name FROM province")
  265. ProvinceMap = make(map[string]interface{})
  266. for _, val := range *proArr {
  267. k := common.ObjToString(val["name"])
  268. ProvinceMap[k] = val["id"]
  269. }
  270. }
  271. func initdb() {
  272. //mgo save
  273. save := Sysconfig["save"].(map[string]interface{})
  274. SaveColl = common.ObjToString(save["coll"])
  275. SaveCollProject = common.ObjToString(save["coll_project"])
  276. SaveCollbid = common.ObjToString(save["coll_bid"])
  277. SaveUserMail = common.ObjToString(save["coll_usermail"])
  278. MgoSave = &mongodb.MongodbSim{
  279. MongodbAddr: common.ObjToString(save["addr"]),
  280. DbName: common.ObjToString(save["db"]),
  281. Size: common.IntAllDef(save["size"], 15),
  282. }
  283. MgoSave.InitPool()
  284. //mgo buyerinfo
  285. buyerinfo := Sysconfig["buyerinfo"].(map[string]interface{})
  286. HospColl = common.ObjToString(buyerinfo["hospcoll"])
  287. BuyerEntColl = common.ObjToString(buyerinfo["buyerentcoll"])
  288. MgoBuyer = &mongodb.MongodbSim{
  289. MongodbAddr: common.ObjToString(buyerinfo["addr"]),
  290. DbName: common.ObjToString(buyerinfo["db"]),
  291. Size: common.IntAllDef(buyerinfo["size"], 15),
  292. UserName: common.ObjToString(buyerinfo["username"]),
  293. Password: common.ObjToString(buyerinfo["password"]),
  294. ReplSet: common.ObjToString(buyerinfo["replSet"]),
  295. }
  296. MgoBuyer.InitPool()
  297. //mgo enterprise
  298. enterprise := Sysconfig["enterprise"].(map[string]interface{})
  299. EnpsColl = common.ObjToString(enterprise["coll"])
  300. MgoEnps = &mongodb.MongodbSim{
  301. MongodbAddr: common.ObjToString(enterprise["addr"]),
  302. DbName: common.ObjToString(enterprise["db"]),
  303. Size: common.IntAllDef(enterprise["size"], 15),
  304. UserName: common.ObjToString(buyerinfo["username"]),
  305. Password: common.ObjToString(buyerinfo["password"]),
  306. ReplSet: common.ObjToString(buyerinfo["replSet"]),
  307. }
  308. MgoEnps.InitPool()
  309. extract := Sysconfig["extract"].(map[string]interface{})
  310. ExtractColl = common.ObjToString(extract["coll"])
  311. MgoExtract = &mongodb.MongodbSim{
  312. MongodbAddr: common.ObjToString(extract["addr"]),
  313. DbName: common.ObjToString(extract["db"]),
  314. Size: common.IntAllDef(extract["size"], 15),
  315. }
  316. MgoExtract.InitPool()
  317. //bidding库
  318. bidding := Sysconfig["bidding_mgo"].(map[string]interface{})
  319. BiddingColl = common.ObjToString(bidding["coll"])
  320. MgoBidding = &mongodb.MongodbSim{
  321. MongodbAddr: common.ObjToString(bidding["addr"]),
  322. DbName: common.ObjToString(bidding["db"]),
  323. Size: common.IntAll(bidding["size"]),
  324. UserName: common.ObjToString(bidding["username"]),
  325. Password: common.ObjToString(bidding["password"]),
  326. ReplSet: common.ObjToString(bidding["replSet"]),
  327. }
  328. MgoBidding.InitPool()
  329. site := Sysconfig["site_mgo"].(map[string]interface{})
  330. SiteColl = common.ObjToString(site["coll"])
  331. MgoSite = &mongodb.MongodbSim{
  332. MongodbAddr: common.ObjToString(site["addr"]),
  333. Size: common.IntAll(site["size"]),
  334. DbName: common.ObjToString(site["db"]),
  335. }
  336. MgoSite.InitPool()
  337. //es
  338. // Es = &elastic.Elastic{
  339. // S_esurl: common.ObjToString(es["addr"]),
  340. // I_size: common.IntAllDef(es["pool"], 15),
  341. // }
  342. redis.InitRedis(common.ObjToString(Sysconfig["redis_addrs"]))
  343. jyMysql := common.ObjToMap(Sysconfig["jyPushMysql"])
  344. JyMysql = &mysql.Mysql{
  345. Address: (*jyMysql)["address"].(string),
  346. UserName: (*jyMysql)["username"].(string),
  347. PassWord: (*jyMysql)["password"].(string),
  348. DBName: (*jyMysql)["dbName"].(string),
  349. }
  350. JyMysql.Init()
  351. jyPushMysql := common.ObjToMap(Sysconfig["pushMysql"])
  352. JyPushMysql = &mysql.Mysql{
  353. Address: (*jyPushMysql)["address"].(string),
  354. UserName: (*jyPushMysql)["username"].(string),
  355. PassWord: (*jyPushMysql)["password"].(string),
  356. DBName: (*jyPushMysql)["dbName"].(string),
  357. }
  358. JyPushMysql.Init()
  359. jyMysqls := common.ObjToMap(Sysconfig["jyMysql"])
  360. JyMysqls = &mysql.Mysql{
  361. Address: (*jyMysqls)["address"].(string),
  362. UserName: (*jyMysqls)["username"].(string),
  363. PassWord: (*jyMysqls)["password"].(string),
  364. DBName: (*jyMysqls)["dbName"].(string),
  365. }
  366. JyMysqls.Init()
  367. entMysql := common.ObjToMap(Sysconfig["entMysql"])
  368. EntMysql = &mysql.Mysql{
  369. Address: (*entMysql)["address"].(string),
  370. UserName: (*entMysql)["username"].(string),
  371. PassWord: (*entMysql)["password"].(string),
  372. DBName: (*entMysql)["dbName"].(string),
  373. }
  374. EntMysql.Init()
  375. }
  376. func InitLog() {
  377. err := log.InitLog(
  378. log.Path(common.ObjToString(Sysconfig["logpath"])),
  379. log.Level("debug"),
  380. log.Compress(true),
  381. log.MaxSize(20), // M
  382. log.MaxBackups(10),
  383. log.MaxAge(10),
  384. log.Format("text"), // text or json output
  385. )
  386. if err != nil {
  387. fmt.Printf("InitLog failed: %v\n", err)
  388. os.Exit(1)
  389. }
  390. }
  391. type ByPinyin []string
  392. func (s ByPinyin) Len() int { return len(s) }
  393. func (s ByPinyin) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
  394. func (s ByPinyin) Less(i, j int) bool {
  395. a, _ := UTF82GBK(s[i])
  396. b, _ := UTF82GBK(s[j])
  397. bLen := len(b)
  398. for idx, chr := range a {
  399. if idx > bLen-1 {
  400. return false
  401. }
  402. if chr != b[idx] {
  403. return chr < b[idx]
  404. }
  405. }
  406. return true
  407. }
  408. // UTF82GBK : transform UTF8 rune into GBK byte array
  409. func UTF82GBK(src string) ([]byte, error) {
  410. GB18030 := simplifiedchinese.All[0]
  411. return io.ReadAll(transform.NewReader(bytes.NewReader([]byte(src)), GB18030.NewEncoder()))
  412. }
  413. // 字段与释义对应关系
  414. var FieldMap = map[string]interface{}{
  415. "title": "公告标题",
  416. "content": "公告内容",
  417. "href": "公告地址",
  418. "jybxhref": "剑鱼标讯地址",
  419. "detail": "公告正文",
  420. "area": "省份",
  421. "city": "城市",
  422. "publishtime": "发布时间",
  423. "projectname": "项目名称",
  424. "projectcode": "项目编号",
  425. "buyer": "采购单位",
  426. "buyerperson": "采购单位联系人",
  427. "buyertel": "采购单位联系电话",
  428. "budget": "预算(元)",
  429. "bidopentime": "开标日期",
  430. "s_winner": "中标单位",
  431. "bidamount": "中标金额(元)",
  432. "agency": "招标代理机构",
  433. "projectscope": "项目范围",
  434. "currency": "币种",
  435. "subtype": "公告类别",
  436. "toptype": "公告类别一级",
  437. "industry": "行业",
  438. "matchkey": "信息匹配词",
  439. "matchtype": "匹配字段",
  440. "priority": "信息重要程度",
  441. "department": "部门名称",
  442. "excludetype": "排除类型",
  443. "winner_organcode": "中标单位征信代码",
  444. "subscopeclass": "信息二级分类",
  445. "bid2017": "2017年中标数",
  446. "bid2018": "2018年中标数",
  447. "bid2019": "2019年中标数",
  448. "bid2020": "2020年中标数",
  449. "winner_credit_no": "中标单位统一社会信用代码",
  450. "buyer_credit_no": "采购单位统一社会信用代码",
  451. "stock_name": "股东名单",
  452. "business_scope": "经营范围",
  453. "establish_date": "注册时间",
  454. "capital": "注册资金",
  455. "winneraddr": "中标单位地址",
  456. "purchasing": "中标产品信息",
  457. "rank": "医院等级",
  458. "winnertel": "中标单位联系电话",
  459. "winnerperson": "中标单位联系人",
  460. "district": "区县",
  461. "legal_person": "中标企业联系人",
  462. "company_phone": "中标企业联系电话",
  463. "company_email": "中标企业联系邮箱",
  464. "company_address": "中标企业注册地址",
  465. "tagname": "标签",
  466. "filetext": "附件内容",
  467. "buyerclass": "采购单位类型",
  468. "rulename": "规则名称",
  469. "departname": "部门名称",
  470. "projectId": "项目标识",
  471. "item": "分类",
  472. "winner_type": "中标人模型",
  473. "buyer_type": "行业归属",
  474. "purchasinglist": "产品信息",
  475. "ruleid": "规则标识",
  476. "filehref": "附件链接",
  477. "winner_style": "中标类型",
  478. "agency_fee": "中标服务费",
  479. "bidway": "投标方式",
  480. "docamount": "招标文件购买金额",
  481. "bidtype": "采购方式",
  482. "bidendtime": "投标截止日期",
  483. "yewu_type": "业务类型",
  484. "agencyrate": "招标代理费率",
  485. "s_subscopeclass": "公告行业二级",
  486. "s_topscopeclass": "公告行业一级",
  487. "createtime": "创建时间",
  488. "buyeraddr": "采购单位地址",
  489. "agencyperson": "招标代理机构联系人",
  490. "agencytel": "招标代理机构联系方式",
  491. "agencyaddr": "招标代理机构地址",
  492. "company_area": "中标单位省份",
  493. "company_city": "中标单位城市",
  494. "company_district": "中标单位区县",
  495. "agency_credit_no": "招标代理机构统一社会信用代码",
  496. "contact": "中标单位历史联系信息",
  497. "id": "唯一标识",
  498. }