db.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  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/mysql"
  7. "app.yhyue.com/moapp/jybase/redis"
  8. "app.yhyue.com/moapp/jypkg/compatible"
  9. "app.yhyue.com/moapp/message/model"
  10. "encoding/json"
  11. "fmt"
  12. "github.com/nsqio/go-nsq"
  13. "jy-docs/config"
  14. "log"
  15. "time"
  16. )
  17. var (
  18. DbConf *dbConf
  19. MQFW mongodb.MongodbSim
  20. Mgo_Log mongodb.MongodbSim
  21. NSQ_Producer *nsq.Producer
  22. Mysql *mysql.Mysql
  23. BaseMysql *mysql.Mysql
  24. Compatible *compatible.Compatible
  25. )
  26. type dbConf struct {
  27. Mongodb struct {
  28. Main *mgoConf
  29. Log *mgoConf
  30. }
  31. Redis struct {
  32. Main *redisConf
  33. }
  34. NsqConfig *NsqConfig
  35. Mysql struct {
  36. DbName string
  37. Address string
  38. UserName string
  39. PassWord string
  40. MaxOpenConns int
  41. MaxIdleConns int
  42. }
  43. BaseMysql struct {
  44. DbName string
  45. Address string
  46. UserName string
  47. PassWord string
  48. MaxOpenConns int
  49. MaxIdleConns int
  50. }
  51. }
  52. type mgoConf struct {
  53. Address string
  54. Size int
  55. DbName string
  56. ReplSet string
  57. UserName string
  58. Password string
  59. Collection string
  60. Collection_back string
  61. }
  62. type NsqConfig struct {
  63. Address string
  64. AppName string
  65. }
  66. type redisConf struct {
  67. Address string
  68. }
  69. func init() {
  70. common.ReadConfig("./db.json", &DbConf)
  71. if DbConf != nil {
  72. if DbConf.Mongodb.Main != nil {
  73. log.Println("初始化 mongodb main")
  74. MQFW = mongodb.MongodbSim{
  75. MongodbAddr: DbConf.Mongodb.Main.Address,
  76. Size: DbConf.Mongodb.Main.Size,
  77. DbName: DbConf.Mongodb.Main.DbName,
  78. ReplSet: DbConf.Mongodb.Main.ReplSet,
  79. }
  80. MQFW.InitPool()
  81. }
  82. if DbConf.Mongodb.Log != nil {
  83. log.Println("初始化 mongodb log")
  84. Mgo_Log = mongodb.MongodbSim{
  85. MongodbAddr: DbConf.Mongodb.Log.Address,
  86. Size: DbConf.Mongodb.Log.Size,
  87. DbName: DbConf.Mongodb.Log.DbName,
  88. ReplSet: DbConf.Mongodb.Log.ReplSet,
  89. UserName: DbConf.Mongodb.Log.UserName,
  90. Password: DbConf.Mongodb.Log.Password,
  91. }
  92. Mgo_Log.InitPool()
  93. }
  94. //初始化redis
  95. if DbConf.Redis.Main != nil {
  96. log.Println("初始化 redis")
  97. redis.InitRedisBySize(DbConf.Redis.Main.Address, 100, 30, 300)
  98. }
  99. if DbConf.NsqConfig != nil {
  100. log.Println("初始化 nsq")
  101. var NsqErr error
  102. NSQ_Producer, NsqErr = nsq.NewProducer(DbConf.NsqConfig.Address, nsq.NewConfig())
  103. if NsqErr != nil {
  104. log.Printf("初始化 nsq 异常 %v\n", NsqErr)
  105. }
  106. }
  107. if DbConf.Mysql.Address != "" {
  108. log.Println("初始化 mysql jianyu")
  109. Mysql = &mysql.Mysql{
  110. Address: DbConf.Mysql.Address,
  111. UserName: DbConf.Mysql.UserName,
  112. PassWord: DbConf.Mysql.PassWord,
  113. DBName: DbConf.Mysql.DbName,
  114. MaxOpenConns: DbConf.Mysql.MaxOpenConns,
  115. MaxIdleConns: DbConf.Mysql.MaxIdleConns,
  116. }
  117. Mysql.Init()
  118. }
  119. if DbConf.BaseMysql.Address != "" {
  120. log.Println("初始化 mysql baseService")
  121. BaseMysql = &mysql.Mysql{
  122. Address: DbConf.BaseMysql.Address,
  123. UserName: DbConf.BaseMysql.UserName,
  124. PassWord: DbConf.BaseMysql.PassWord,
  125. DBName: DbConf.BaseMysql.DbName,
  126. MaxOpenConns: DbConf.BaseMysql.MaxOpenConns,
  127. MaxIdleConns: DbConf.BaseMysql.MaxIdleConns,
  128. }
  129. BaseMysql.Init()
  130. }
  131. }
  132. Compatible = compatible.NewCompatible(&MQFW, BaseMysql, Mysql, config.Middleground)
  133. //分类信息初始化
  134. docClassInit(BaseMysql)
  135. }
  136. // 分享打开文库赚积分
  137. func OpenShareJydoc(fromId, openId, docId string) {
  138. fromId = encrypt.SE.Decode4Hex(fromId)
  139. if fromId == "" || openId == fromId || openId == "" || docId == "" {
  140. return
  141. }
  142. //判断是否是合法用户
  143. if MQFW.Count("user", map[string]interface{}{
  144. "_id": mongodb.StringTOBsonId(fromId),
  145. }) == 0 {
  146. log.Printf("%s分享%s打开%s 未找到用户\n", fromId, openId, docId)
  147. return
  148. }
  149. key := fmt.Sprintf("integral_article_%s_%s_%s", docId, fromId, openId)
  150. if redis.Incr("other", key) == 1 {
  151. _ = redis.SetExpire("other", key, 24*60*60)
  152. pushErr := func() error {
  153. b, _ := json.Marshal(&model.Message{
  154. E_code: "jydocs_doc_open",
  155. E_userId: fromId,
  156. E_time: time.Now().Unix(),
  157. E_app: DbConf.NsqConfig.AppName,
  158. })
  159. if err := NSQ_Producer.Publish("jy_event", b); err != nil {
  160. log.Printf("消息发布异常%v\n", err)
  161. return err
  162. }
  163. return nil
  164. }()
  165. if pushErr != nil {
  166. log.Printf("%s分享%s打开%s Publish nsq队列 异常%v\n", fromId, openId, docId, pushErr)
  167. } else {
  168. log.Printf("%s分享%s打开%s Publish nsq队列 成功\n", fromId, openId, docId)
  169. redis.Put("other", fmt.Sprintf("integral_article_%s_%s", fromId, docId), 1, 60*60*24)
  170. }
  171. }
  172. }