service.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package share
  2. import (
  3. qu "app.yhyue.com/moapp/jybase/common"
  4. "app.yhyue.com/moapp/jybase/redis"
  5. "app.yhyue.com/moapp/message/config"
  6. "app.yhyue.com/moapp/message/db"
  7. "encoding/base64"
  8. "fmt"
  9. "github.com/SKatiyar/qr"
  10. "github.com/gogf/gf/v2/frame/g"
  11. "github.com/gogf/gf/v2/net/ghttp"
  12. "go.mongodb.org/mongo-driver/bson/primitive"
  13. "log"
  14. "strings"
  15. )
  16. type ShareRouter struct{}
  17. func (c *ShareRouter) Info(r *ghttp.Request) {
  18. userid := r.Header.Get("userId")
  19. res := map[string]interface{}{}
  20. keyUser := fmt.Sprintf("SF_%s", userid)
  21. if value := redis.GetStr("other", keyUser); value != "" {
  22. varr := strings.Split(value, "#@#@")
  23. link := fmt.Sprintf("%s/front/followGift/%s", config.PushConfig.Webdomain, varr[3])
  24. r, _ := qr.Encode(link, qr.M)
  25. pngdat := r.PNG()
  26. res["data"] = map[string]interface{}{
  27. "shareId": varr[3], //口令
  28. "shareLink": link, //微信分享链接
  29. "erUrl": base64.StdEncoding.EncodeToString(pngdat),
  30. }
  31. res["error_code"] = 0
  32. res["error_msg"] = ""
  33. } else {
  34. nickname, headimageurl := "", ""
  35. if data := GetInfo(userid); data != nil {
  36. nickname = qu.ObjToString(data["nickname"])
  37. headimageurl = qu.ObjToString(data["headimageurl"])
  38. }
  39. shareId := VarLSCPool.GetJob()
  40. shareIdKey := fmt.Sprintf("shareId_%s", shareId)
  41. value := fmt.Sprintf("%s#@#@%s#@#@%s#@#@%s", userid, nickname, headimageurl, shareIdKey)
  42. redis.Put("other", shareIdKey, userid, -1)
  43. redis.Put("other", keyUser, value, -1)
  44. link := fmt.Sprintf("%s/front/followGift/%s", config.PushConfig.Webdomain, shareIdKey)
  45. r, _ := qr.Encode(link, qr.M)
  46. pngdat := r.PNG()
  47. res["data"] = map[string]interface{}{
  48. "shareId": shareIdKey, //口令
  49. "shareLink": link, //微信分享链接
  50. "erUrl": base64.StdEncoding.EncodeToString(pngdat),
  51. }
  52. res["error_code"] = 0
  53. res["error_msg"] = ""
  54. }
  55. r.Response.WriteJson(res)
  56. }
  57. func (c *ShareRouter) Receive(r *ghttp.Request) {
  58. userid := r.Header.Get("userId") //被分享者userid
  59. uid, _ := primitive.ObjectIDFromHex(userid)
  60. if db.Mgo.Count("user", map[string]interface{}{"_id": uid, "i_appid": 2}) > 0 {
  61. r.Response.WriteJson(g.Map{
  62. "error_code": -1,
  63. "error_msg": "老用户无法领取奖励",
  64. "data": map[string]interface{}{
  65. "status": false,
  66. },
  67. })
  68. return
  69. }
  70. shareId := r.Get("shareId").String()
  71. redisKey := fmt.Sprintf("rec_%s", userid)
  72. log.Println(userid, shareId, redisKey) //分享者和被分享者对应关系
  73. shareUserid := redis.GetStr("other", shareId) //获取分享者
  74. if shareUserid == "" {
  75. r.Response.WriteJson(g.Map{
  76. "error_code": -1,
  77. "error_msg": "领取失败",
  78. "data": map[string]interface{}{
  79. "status": false,
  80. },
  81. })
  82. return
  83. }
  84. r.Response.WriteJson(g.Map{
  85. "error_code": 0,
  86. "error_msg": "",
  87. "data": map[string]interface{}{
  88. "status": redis.Put("other", redisKey, shareUserid, timeOut()),
  89. },
  90. })
  91. }
  92. func (c *ShareRouter) List(r *ghttp.Request) {
  93. rdata := map[string]interface{}{
  94. "count": 0,
  95. "haveNextPage": false,
  96. "res": []map[string]interface{}{},
  97. }
  98. userid := r.Header.Get("userId")
  99. pNum := r.Get("pageNum").Int()
  100. pSize := r.Get("pageSize").Int()
  101. if pSize == 0 && pNum == 0 {
  102. pSize = -1
  103. pNum = 1
  104. }
  105. query := map[string]interface{}{
  106. "share_uid": userid,
  107. }
  108. count := db.Mgo.Count("user_share", query)
  109. if count == 0 {
  110. r.Response.WriteJson(g.Map{
  111. "error_code": 0,
  112. "error_msg": "",
  113. "data": rdata,
  114. })
  115. return
  116. }
  117. result, _ := db.Mgo.Find("user_share", query, `{"createtime":-1}`, `{"shared_uid":1}`, false, pNum*pSize, pSize)
  118. if pSize != -1 {
  119. haveNextPage := (pNum+1)*pSize < count
  120. rdata["haveNextPage"] = haveNextPage
  121. }
  122. rdata["count"] = count
  123. rdata["res"] = Info(result)
  124. r.Response.WriteJson(g.Map{
  125. "error_code": 0,
  126. "error_msg": "",
  127. "data": rdata,
  128. })
  129. }
  130. func (c *ShareRouter) Followgift(r *ghttp.Request) {
  131. shareid := r.Get("shareId").String()
  132. fdata := map[string]interface{}{
  133. "error_code": 0,
  134. "error_msg": "",
  135. }
  136. idata := map[string]interface{}{}
  137. if shareUserid := redis.GetStr("other", shareid); shareUserid == "" {
  138. r.Response.WriteJson(g.Map{
  139. "error_code": -1,
  140. "error_msg": "无数据",
  141. })
  142. return
  143. } else {
  144. infos := redis.GetStr("other", fmt.Sprintf("SF_%s", shareUserid))
  145. if infos != "" {
  146. nickname := strings.Split(infos, "#@#@")[1]
  147. if strings.Contains(nickname, "****") {
  148. idata["share_nickname"] = nickname
  149. } else if IsPhone(nickname) {
  150. idata["share_nickname"] = string(nickname[0:3]) + "****" + nickname[len(nickname)-4:]
  151. }
  152. idata["share_headImg"] = strings.Split(infos, "#@#@")[2]
  153. idata["isWeixin"] = CheckWxBrowser(r.Request)
  154. link := fmt.Sprintf("%s/front/followGift/%s", qu.ObjToString(config.PushConfig.Webdomain), strings.Split(infos, "#@#@")[3])
  155. p, _ := qr.Encode(link, qr.M)
  156. pngdat := p.PNG()
  157. idata["share_qr"] = base64.StdEncoding.EncodeToString(pngdat)
  158. idata["shareid"] = shareid
  159. fdata["data"] = idata
  160. r.Response.WriteJson(fdata)
  161. } else {
  162. r.Response.WriteJson(g.Map{
  163. "error_code": -1,
  164. "error_msg": "无数据",
  165. })
  166. }
  167. }
  168. }