points.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. }
  61. Mgo_Log.Save("nsq_logs", map[string]interface{}{
  62. "createtime": time.Now().Unix(),
  63. "body": msg,
  64. "type": "consumer", //producer or consumer
  65. })
  66. // Returning a non-nil error will automatically send a REQ command to NSQ to re-queue the message.
  67. return nil
  68. }
  69. //产生新用户
  70. func jy_user_new(msg *model.Message) {
  71. integralHarvest(msg, Config.DocPoints.Jywx_subscribe_new, 1002)
  72. }
  73. //邀请人
  74. func jywx_subscribe_invite(msg *model.Message) {
  75. integralHarvest(msg, Config.DocPoints.Jywx_subscribe_invite, 1003)
  76. }
  77. //被邀请人
  78. func jywx_subscribe_invited(msg *model.Message) {
  79. integralHarvest(msg, Config.DocPoints.Jywx_subscribe_invited, 1002)
  80. }
  81. //打开文库文章页
  82. func jydocs_doc_open(msg *model.Message) {
  83. jy_open(msg, Config.DocPoints.Open.Jydocs_doc_open)
  84. }
  85. //打开招投标信息文章页
  86. func jyweb_article_open(msg *model.Message) {
  87. jy_open(msg, Config.DocPoints.Open.Jyweb_article_open)
  88. }
  89. //
  90. func jy_open(msg *model.Message, point int64) {
  91. key := fmt.Sprintf("jypoints_share_article_open_%s", msg.E_userId)
  92. if redis.Incr(Redis_Main, key) <= Config.DocPoints.Open.Max {
  93. now := time.Now()
  94. redis.SetExpire(Redis_Main, key, int(time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, time.Local).Unix()-now.Unix()))
  95. integralHarvest(msg, point, 1005)
  96. } else {
  97. logger.Info(fmt.Sprintf("%+v", msg), "超过一天最大次数", Config.DocPoints.Open.Max, "限制,不再增加积分")
  98. }
  99. }
  100. //增加积分
  101. func integralHarvest(msg *model.Message, point, pointType int64) bool {
  102. t := time.Unix(msg.E_time, 0).AddDate(1, 0, 0)
  103. req := &integral.Req{
  104. UserId: msg.E_userId,
  105. AppId: Config.DocPoints.AppId,
  106. PointType: pointType,
  107. Point: point,
  108. EndDate: date.FormatDate(&t, date.Date_Full_Layout),
  109. OperationType: false,
  110. }
  111. resp, err := integralclient.NewIntegral(ZrpcClient).IntegralHarvest(context.Background(), req)
  112. if err != nil {
  113. logger.Info(fmt.Sprintf("%+v", msg), "IntegralHarvest Resp error", err)
  114. return false
  115. }
  116. if resp.Code == 1 {
  117. logger.Info(fmt.Sprintf("%+v", msg), "已成功增加", point, "积分")
  118. return true
  119. } else {
  120. logger.Info(fmt.Sprintf("%+v", msg), "增加", point, "积分失败", "Code", resp.Code, "Message", resp.Message)
  121. return false
  122. }
  123. }