db.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. NsqAppMsgName string
  29. NsqAddress string
  30. }
  31. type mgoConf struct {
  32. Address string
  33. Size int
  34. DbName string
  35. ReplSet string
  36. UserName string
  37. Password string
  38. Collection string
  39. Collection_back string
  40. }
  41. type redisConf struct {
  42. Address string
  43. }
  44. func init() {
  45. common.ReadConfig("./db.json", &DbConf)
  46. if DbConf != nil {
  47. if DbConf.Mongodb.Main != nil {
  48. log.Println("初始化 mongodb main")
  49. MQFW = mongodb.MongodbSim{
  50. MongodbAddr: DbConf.Mongodb.Main.Address,
  51. Size: DbConf.Mongodb.Main.Size,
  52. DbName: DbConf.Mongodb.Main.DbName,
  53. ReplSet: DbConf.Mongodb.Main.ReplSet,
  54. }
  55. MQFW.InitPool()
  56. }
  57. if DbConf.Mongodb.Log != nil {
  58. log.Println("初始化 mongodb log")
  59. Mgo_Log = mongodb.MongodbSim{
  60. MongodbAddr: DbConf.Mongodb.Log.Address,
  61. Size: DbConf.Mongodb.Log.Size,
  62. DbName: DbConf.Mongodb.Log.DbName,
  63. ReplSet: DbConf.Mongodb.Log.ReplSet,
  64. UserName: DbConf.Mongodb.Log.UserName,
  65. Password: DbConf.Mongodb.Log.Password,
  66. }
  67. Mgo_Log.InitPool()
  68. }
  69. //初始化redis
  70. if DbConf.Redis.Main != nil {
  71. log.Println("初始化 redis")
  72. redis.InitRedisBySize(DbConf.Redis.Main.Address, 100, 30, 300)
  73. }
  74. if DbConf.NsqAddress != "" {
  75. log.Println("初始化 nsq")
  76. var NsqErr error
  77. NSQ_Producer, NsqErr = nsq.NewProducer("192.168.3.240:4260", nsq.NewConfig())
  78. if NsqErr != nil {
  79. log.Printf("初始化 nsq 异常 %v\n", NsqErr)
  80. }
  81. }
  82. }
  83. }
  84. //分享打开文库赚积分
  85. func OpenShareJydoc(fromId, openId, docId string) {
  86. fromId = encrypt.SE.DecodeString(fromId)
  87. if fromId == "" || openId == fromId || openId == "" || docId == "" {
  88. return
  89. }
  90. //判断是否是合法用户
  91. if MQFW.Count("user", map[string]interface{}{
  92. "_id": mongodb.StringTOBsonId(fromId),
  93. }) == 0 {
  94. return
  95. }
  96. if redis.Get("other", fmt.Sprintf("integral_article_%s_%s", fromId, docId)) == nil {
  97. pushErr := func() error {
  98. b, _ := json.Marshal(&model.Message{
  99. E_code: "jydocs_doc_open",
  100. E_userId: fromId,
  101. E_time: time.Now().Unix(),
  102. E_app: DbConf.NsqAppMsgName,
  103. })
  104. if err := NSQ_Producer.Publish("jy_event", b); err != nil {
  105. log.Printf("消息发布异常%v\n", err)
  106. return err
  107. }
  108. return nil
  109. }()
  110. if pushErr != nil {
  111. log.Printf("%s分享%s打开%s Publish nsq队列 异常%v\n", fromId, openId, docId, pushErr)
  112. } else {
  113. log.Printf("%s分享%s打开%s Publish nsq队列 成功\n", fromId, openId, docId)
  114. redis.Put("other", fmt.Sprintf("integral_article_%s_%s", fromId, docId), 1, 60*60*24)
  115. }
  116. }
  117. }