main.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. package main
  2. import (
  3. "dbutil/mongo"
  4. "dbutil/redis"
  5. "fmt"
  6. "log"
  7. mu "mfw/util"
  8. "os"
  9. qu "qfw/util"
  10. "regexp"
  11. "strconv"
  12. "strings"
  13. )
  14. var (
  15. MongoFrom /*抽取原*/, MongoTo /*保存库*/, MongoEnt /*企业库*/, MgoExt /*抽取信息库*/ *mongo.MongodbSim
  16. sysconfig map[string]interface{}
  17. extractcoll string
  18. Version string
  19. VersionColl string
  20. winnerent, winnererr string
  21. buyerent, buyererr string
  22. agencyent, agencyerr string
  23. winnerbd, buyerbd, agencybd int
  24. Addrs = make(map[string]interface{}, 0) //省市县
  25. winchanbool = make(chan bool, 3)
  26. buyerchanbool = make(chan bool, 3)
  27. agencychanbool = make(chan bool, 3)
  28. gochan = make(chan bool, 3)
  29. udpclient mu.UdpClient
  30. //异常表正则匹配处理
  31. WinnerRegOk, WinnerRegErr, AgencyRegOk, AgencyRegErr, BuyerRegOk, BuyerRegErr []regexp.Regexp
  32. )
  33. func init() {
  34. qu.ReadConfig(&sysconfig)
  35. extractcoll = qu.ObjToString(sysconfig["extractcoll"])
  36. Version = qu.ObjToString(sysconfig["extractversion"])
  37. VersionColl = qu.ObjToString(sysconfig["versioncoll"])
  38. if standardata, ok := sysconfig["standardata"].(map[string]interface{}); ok {
  39. winner, _ := standardata["winner"].(map[string]interface{})
  40. winnerent = qu.ObjToString(winner["standarent"])
  41. winnererr = qu.ObjToString(winner["standarerr"])
  42. winnerbd = qu.IntAll(winner["redisdb"])
  43. buyer, _ := standardata["buyer"].(map[string]interface{})
  44. buyerent = qu.ObjToString(buyer["standarent"])
  45. buyererr = qu.ObjToString(buyer["standarerr"])
  46. buyerbd = qu.IntAll(buyer["redisdb"])
  47. agency, _ := standardata["agency"].(map[string]interface{})
  48. agencyent = qu.ObjToString(agency["standarent"])
  49. agencyerr = qu.ObjToString(agency["standarerr"])
  50. agencybd = qu.IntAll(agency["redisdb"])
  51. } else {
  52. os.Exit(0)
  53. }
  54. MongoFrom = &mongo.MongodbSim{
  55. MongodbAddr: qu.ObjToString(sysconfig["mgofrom"]),
  56. Size: qu.IntAll(sysconfig["mgofromsize"]),
  57. DbName: qu.ObjToString(sysconfig["mgofromdb"]),
  58. UserName: qu.ObjToString(sysconfig["username"]),
  59. PassWord: qu.ObjToString(sysconfig["password"]),
  60. }
  61. MongoFrom.InitPool()
  62. MongoTo = &mongo.MongodbSim{
  63. MongodbAddr: qu.ObjToString(sysconfig["mgoto"]),
  64. Size: qu.IntAll(sysconfig["mgotosize"]),
  65. DbName: qu.ObjToString(sysconfig["mgotodb"]),
  66. UserName: qu.ObjToString(sysconfig["username"]),
  67. PassWord: qu.ObjToString(sysconfig["password"]),
  68. }
  69. MongoTo.InitPool()
  70. MongoEnt = &mongo.MongodbSim{
  71. MongodbAddr: qu.ObjToString(sysconfig["mgoent"]),
  72. Size: qu.IntAll(sysconfig["mgoentsize"]),
  73. DbName: qu.ObjToString(sysconfig["mgoentdb"]),
  74. UserName: qu.ObjToString(sysconfig["username"]),
  75. PassWord: qu.ObjToString(sysconfig["password"]),
  76. }
  77. MongoEnt.InitPool()
  78. MgoExt = &mongo.MongodbSim{
  79. MongodbAddr: qu.ObjToString(sysconfig["mgoto"]),
  80. Size: qu.IntAll(sysconfig["mgotosize"]),
  81. DbName: qu.ObjToString(sysconfig["extractdb"]),
  82. UserName: qu.ObjToString(sysconfig["username"]),
  83. PassWord: qu.ObjToString(sysconfig["password"]),
  84. }
  85. MgoExt.InitPool()
  86. redis.InitRedis(qu.ObjToString(sysconfig["redis"]))
  87. //加载省市县代码
  88. list, _ := MongoTo.Find("address", map[string]interface{}{}, nil, nil)
  89. for _, v := range list {
  90. code := v["code"]
  91. if code != nil && strings.TrimSpace(code.(string)) != "" {
  92. Addrs[fmt.Sprint(code)] = v
  93. }
  94. }
  95. log.Println("加载省市县代码加载完成", len(Addrs))
  96. initReg() //初始标记规则
  97. InitInfo() //初始化城市信息
  98. }
  99. func initReg() {
  100. list, _ := MongoTo.Find("rc_rule", map[string]interface{}{"delete": false, "isuse": true}, nil, nil)
  101. for _, v := range list {
  102. s_field, ok := v["s_field"].(string) //字段
  103. s_rule, ok2 := v["s_rule"].(string) //正则
  104. s_type, ok3 := v["s_type"].(string) //ok or err
  105. if !ok || !ok2 || !ok3 || s_field == "" || s_rule == "" || s_type == "" {
  106. continue
  107. }
  108. var pattern string
  109. if strings.Contains(s_rule, "\\u") {
  110. s_rule = strings.Replace(s_rule, "\\", "\\\\", -1)
  111. s_rule = strings.Replace(s_rule, "\\\\u", "\\u", -1)
  112. pattern, _ = strconv.Unquote(`"` + s_rule + `"`)
  113. } else {
  114. pattern = s_rule
  115. }
  116. regtmp := regexp.MustCompile(pattern)
  117. if s_field == "winner" {
  118. if s_type == "ok" {
  119. WinnerRegOk = append(WinnerRegOk, *regtmp)
  120. } else if s_type == "err" {
  121. WinnerRegErr = append(WinnerRegErr, *regtmp)
  122. }
  123. } else if s_field == "buyer" {
  124. if s_type == "ok" {
  125. BuyerRegOk = append(BuyerRegOk, *regtmp)
  126. } else if s_type == "err" {
  127. BuyerRegErr = append(BuyerRegErr, *regtmp)
  128. }
  129. } else if s_field == "agency" {
  130. if s_type == "ok" {
  131. AgencyRegOk = append(AgencyRegOk, *regtmp)
  132. } else if s_type == "err" {
  133. AgencyRegErr = append(AgencyRegErr, *regtmp)
  134. }
  135. }
  136. }
  137. log.Println(len(WinnerRegOk), len(WinnerRegErr), len(BuyerRegOk), len(BuyerRegErr), len(AgencyRegOk), len(AgencyRegErr))
  138. }
  139. func main() {
  140. //go historywinner(qu.ObjToString(sysconfig["mgofromdb"]), extractcoll)
  141. //go historybuyer(qu.ObjToString(sysconfig["mgofromdb"]), extractcoll)
  142. //go historyagency(qu.ObjToString(sysconfig["mgofromdb"]), extractcoll)
  143. // mgofromdb := qu.ObjToString(sysconfig["mgofromdb"])
  144. // query := map[string]interface{}{}
  145. // buyerStandarData(mgofromdb, query)
  146. go task_standarData()
  147. c := make(chan int, 1)
  148. <-c
  149. }