points.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. package points
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "context"
  7. "app.yhyue.com/moapp/jyPoints/rpc/integral"
  8. "app.yhyue.com/moapp/jyPoints/rpc/integralclient"
  9. "app.yhyue.com/moapp/jybase/common"
  10. "app.yhyue.com/moapp/jybase/date"
  11. "app.yhyue.com/moapp/jybase/go-logger/logger"
  12. "app.yhyue.com/moapp/jybase/redis"
  13. . "app.yhyue.com/moapp/message/client"
  14. . "app.yhyue.com/moapp/message/config"
  15. . "app.yhyue.com/moapp/message/db"
  16. "app.yhyue.com/moapp/message/model"
  17. "github.com/nsqio/go-nsq"
  18. )
  19. const (
  20. Redis_Main = "main"
  21. OneDay = 86400
  22. )
  23. type Points struct {
  24. }
  25. var funcMap = map[string]func(msg *model.Message){
  26. "jyapp_wx_register": jy_user_new,
  27. "jyapp_phone_register": jy_user_new,
  28. "jypc_phone_register": jy_user_new,
  29. "jywx_subscribe_new": jy_user_new,
  30. "jywx_subscribe_invite": jywx_subscribe_invite,
  31. "jywx_subscribe_invited": jywx_subscribe_invited,
  32. "jydocs_doc_open": jydocs_doc_open,
  33. "jyweb_article_open": jyweb_article_open,
  34. }
  35. //处理文库积分
  36. func (p *Points) HandleMessage(m *nsq.Message) error {
  37. defer common.Catch()
  38. if len(m.Body) == 0 {
  39. // Returning nil will automatically send a FIN command to NSQ to mark the message as processed.
  40. return nil
  41. }
  42. var msg *model.Message
  43. err := json.Unmarshal(m.Body, &msg)
  44. if err != nil {
  45. logger.Error(err)
  46. return err
  47. }
  48. logger.Info("接收到消息", fmt.Sprintf("%+v", msg))
  49. if msg.E_code == "" {
  50. logger.Info("缺少参数e_code", fmt.Sprintf("%+v", msg))
  51. return nil
  52. } else if msg.E_time == 0 {
  53. logger.Info("缺少参数e_time", fmt.Sprintf("%+v", msg))
  54. return nil
  55. }
  56. f, f_ok := funcMap[msg.E_code]
  57. if f_ok {
  58. f(msg)
  59. } else {
  60. logger.Info("无效的code值", msg)
  61. }
  62. Mgo_Log.Save("nsq_logs", map[string]interface{}{
  63. "createtime": time.Now().Unix(),
  64. "body": msg,
  65. "type": "consumer", //producer or consumer
  66. })
  67. // Returning a non-nil error will automatically send a REQ command to NSQ to re-queue the message.
  68. return nil
  69. }
  70. //产生新用户
  71. func jy_user_new(msg *model.Message) {
  72. integralHarvest(msg, Config.DocPoints.Jywx_subscribe_new, 1002)
  73. }
  74. //邀请人
  75. func jywx_subscribe_invite(msg *model.Message) {
  76. integralHarvest(msg, Config.DocPoints.Jywx_subscribe_invite, 1003)
  77. }
  78. //被邀请人
  79. func jywx_subscribe_invited(msg *model.Message) {
  80. integralHarvest(msg, Config.DocPoints.Jywx_subscribe_invited, 1002)
  81. }
  82. //打开文库文章页
  83. func jydocs_doc_open(msg *model.Message) {
  84. key := fmt.Sprintf("jypoints_share_jydocs_doc_open_%s_%s", date.NowFormat(date.Date_yyyyMMdd), msg.E_userId)
  85. jy_open(msg, key, Config.DocPoints.Open.Jydocs_doc_open)
  86. }
  87. //打开招投标信息文章页
  88. func jyweb_article_open(msg *model.Message) {
  89. key := fmt.Sprintf("jypoints_share_jyweb_article_open_%s_%s", date.NowFormat(date.Date_yyyyMMdd), msg.E_userId)
  90. jy_open(msg, key, Config.DocPoints.Open.Jyweb_article_open)
  91. }
  92. //
  93. func jy_open(msg *model.Message, key string, point int64) {
  94. if redis.Incr(Redis_Main, key) <= Config.DocPoints.Open.Max {
  95. redis.SetExpire(Redis_Main, key, OneDay)
  96. integralHarvest(msg, point, 1005)
  97. } else {
  98. logger.Info(fmt.Sprintf("%+v", msg), "超过一天最大次数", Config.DocPoints.Open.Max, "限制,不再增加积分")
  99. }
  100. }
  101. //增加积分
  102. func integralHarvest(msg *model.Message, point, pointType int64) bool {
  103. t := time.Unix(msg.E_time, 0).AddDate(1, 0, 0)
  104. req := &integral.Req{
  105. UserId: msg.E_userId,
  106. AppId: Config.DocPoints.AppId,
  107. PointType: pointType,
  108. Point: point,
  109. EndDate: date.FormatDate(&t, date.Date_Full_Layout),
  110. OperationType: false,
  111. }
  112. resp, err := integralclient.NewIntegral(ZrpcClient).IntegralHarvest(context.Background(), req)
  113. if err != nil {
  114. logger.Info(fmt.Sprintf("%+v", msg), "IntegralHarvest Resp error", err)
  115. return false
  116. }
  117. if resp.Code == 1 {
  118. logger.Info(fmt.Sprintf("%+v", msg), "已成功增加", point, "积分")
  119. return true
  120. } else {
  121. logger.Info(fmt.Sprintf("%+v", msg), "增加", point, "积分失败", "Code", resp.Code, "Message", resp.Message)
  122. return false
  123. }
  124. }