points.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package points
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "time"
  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. )
  22. type Points struct {
  23. }
  24. var funcMap = map[string]func(msg *model.Message){
  25. "jyapp_wx_register": jy_user_new,
  26. "jyapp_phone_register": jy_user_new,
  27. "jypc_phone_register": jy_user_new,
  28. "jywx_subscribe_new": jy_user_new,
  29. "jywx_subscribe_invite": jywx_subscribe_invite,
  30. "jywx_subscribe_invited": jywx_subscribe_invited,
  31. "jydocs_doc_open": jydocs_doc_open,
  32. "jyweb_article_open": jyweb_article_open,
  33. }
  34. //处理文库积分
  35. func (p *Points) HandleMessage(m *nsq.Message) error {
  36. defer common.Catch()
  37. if len(m.Body) == 0 {
  38. // Returning nil will automatically send a FIN command to NSQ to mark the message as processed.
  39. return nil
  40. }
  41. var msg *model.Message
  42. err := json.Unmarshal(m.Body, &msg)
  43. if err != nil {
  44. logger.Error(err)
  45. return err
  46. }
  47. logger.Info("接收到消息", fmt.Sprintf("%+v", msg))
  48. if msg.E_code == "" {
  49. logger.Info("缺少参数e_code", fmt.Sprintf("%+v", msg))
  50. return nil
  51. } else if msg.E_time == 0 {
  52. logger.Info("缺少参数e_time", fmt.Sprintf("%+v", msg))
  53. return nil
  54. }
  55. f, f_ok := funcMap[msg.E_code]
  56. if f_ok {
  57. f(msg)
  58. } else {
  59. logger.Info("无效的code值", msg)
  60. return nil
  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. jy_open(msg, Config.DocPoints.Open.Jydocs_doc_open)
  85. }
  86. //打开招投标信息文章页
  87. func jyweb_article_open(msg *model.Message) {
  88. jy_open(msg, Config.DocPoints.Open.Jyweb_article_open)
  89. }
  90. //
  91. func jy_open(msg *model.Message, point int64) {
  92. key := fmt.Sprintf("jypoints_share_article_open_%s", msg.E_userId)
  93. if redis.Incr(Redis_Main, key) <= Config.DocPoints.Open.Max {
  94. now := time.Now()
  95. redis.SetExpire(Redis_Main, key, int(time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, time.Local).Unix()-now.Unix()))
  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. }