db.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package public
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/encrypt"
  5. "app.yhyue.com/moapp/jybase/mongodb"
  6. "app.yhyue.com/moapp/jybase/redis"
  7. "app.yhyue.com/moapp/message/model"
  8. "encoding/json"
  9. "fmt"
  10. "github.com/nsqio/go-nsq"
  11. "log"
  12. "time"
  13. )
  14. var (
  15. DbConf *dbConf
  16. MQFW mongodb.MongodbSim
  17. Mgo_Log mongodb.MongodbSim
  18. NSQ_Producer *nsq.Producer
  19. )
  20. type dbConf struct {
  21. Mongodb struct {
  22. Main *mgoConf
  23. Log *mgoConf
  24. }
  25. Redis struct {
  26. Main *redisConf
  27. }
  28. NsqConfig *NsqConfig
  29. }
  30. type mgoConf struct {
  31. Address string
  32. Size int
  33. DbName string
  34. ReplSet string
  35. UserName string
  36. Password string
  37. Collection string
  38. Collection_back string
  39. }
  40. type NsqConfig struct {
  41. Address string
  42. AppName string
  43. }
  44. type redisConf struct {
  45. Address string
  46. }
  47. func init() {
  48. common.ReadConfig("./db.json", &DbConf)
  49. if DbConf != nil {
  50. if DbConf.Mongodb.Main != nil {
  51. log.Println("初始化 mongodb main")
  52. MQFW = mongodb.MongodbSim{
  53. MongodbAddr: DbConf.Mongodb.Main.Address,
  54. Size: DbConf.Mongodb.Main.Size,
  55. DbName: DbConf.Mongodb.Main.DbName,
  56. ReplSet: DbConf.Mongodb.Main.ReplSet,
  57. }
  58. MQFW.InitPool()
  59. }
  60. if DbConf.Mongodb.Log != nil {
  61. log.Println("初始化 mongodb log")
  62. Mgo_Log = mongodb.MongodbSim{
  63. MongodbAddr: DbConf.Mongodb.Log.Address,
  64. Size: DbConf.Mongodb.Log.Size,
  65. DbName: DbConf.Mongodb.Log.DbName,
  66. ReplSet: DbConf.Mongodb.Log.ReplSet,
  67. UserName: DbConf.Mongodb.Log.UserName,
  68. Password: DbConf.Mongodb.Log.Password,
  69. }
  70. Mgo_Log.InitPool()
  71. }
  72. //初始化redis
  73. if DbConf.Redis.Main != nil {
  74. log.Println("初始化 redis")
  75. redis.InitRedisBySize(DbConf.Redis.Main.Address, 100, 30, 300)
  76. }
  77. if DbConf.NsqConfig != nil {
  78. log.Println("初始化 nsq")
  79. var NsqErr error
  80. NSQ_Producer, NsqErr = nsq.NewProducer(DbConf.NsqConfig.Address, nsq.NewConfig())
  81. if NsqErr != nil {
  82. log.Printf("初始化 nsq 异常 %v\n", NsqErr)
  83. }
  84. }
  85. }
  86. }
  87. //分享打开文库赚积分
  88. func OpenShareJydoc(fromId, openId, docId string) {
  89. fromId = encrypt.SE.Decode4Hex(fromId)
  90. if fromId == "" || openId == fromId || openId == "" || docId == "" {
  91. return
  92. }
  93. //判断是否是合法用户
  94. if MQFW.Count("user", map[string]interface{}{
  95. "_id": mongodb.StringTOBsonId(fromId),
  96. }) == 0 {
  97. log.Printf("%s分享%s打开%s 未找到用户\n", fromId, openId, docId)
  98. return
  99. }
  100. key := fmt.Sprintf("integral_article_%s_%s_%s", docId, fromId, openId)
  101. if redis.Incr("other", key) == 1 {
  102. _ = redis.SetExpire("other", key, 24*60*60)
  103. pushErr := func() error {
  104. b, _ := json.Marshal(&model.Message{
  105. E_code: "jydocs_doc_open",
  106. E_userId: fromId,
  107. E_time: time.Now().Unix(),
  108. E_app: DbConf.NsqConfig.AppName,
  109. })
  110. if err := NSQ_Producer.Publish("jy_event", b); err != nil {
  111. log.Printf("消息发布异常%v\n", err)
  112. return err
  113. }
  114. return nil
  115. }()
  116. if pushErr != nil {
  117. log.Printf("%s分享%s打开%s Publish nsq队列 异常%v\n", fromId, openId, docId, pushErr)
  118. } else {
  119. log.Printf("%s分享%s打开%s Publish nsq队列 成功\n", fromId, openId, docId)
  120. redis.Put("other", fmt.Sprintf("integral_article_%s_%s", fromId, docId), 1, 60*60*24)
  121. }
  122. }
  123. }