userDoc.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package servers
  2. import (
  3. . "app.yhyue.com/moapp/jybase/api"
  4. "app.yhyue.com/moapp/jybase/common"
  5. "app.yhyue.com/moapp/jybase/go-xweb/xweb"
  6. "encoding/json"
  7. "errors"
  8. "fmt"
  9. "jy-docs/public"
  10. "jy-docs/rpc"
  11. "log"
  12. "time"
  13. )
  14. type UserDoc struct {
  15. *xweb.Action
  16. userList xweb.Mapper `xweb:"/user/list"` //用户列表
  17. collectAdd xweb.Mapper `xweb:"/user/collect/add"` //收藏文库
  18. collectRemove xweb.Mapper `xweb:"/user/collect/remove"` //取消收藏
  19. docBuy xweb.Mapper `xweb:"/user/buy"` //文库购买
  20. info xweb.Mapper `xweb:"/user/info"` //文库购买
  21. }
  22. // 用户文库列表
  23. func (userDoc *UserDoc) UserList() {
  24. userId := common.ObjToString(userDoc.GetSession("userId"))
  25. rData, errMsg := func() (interface{}, error) {
  26. pageNumReq, _ := userDoc.GetInt("num")
  27. pageSizeReq, _ := userDoc.GetInt("size")
  28. sign, _ := userDoc.GetInt("sign") // 0兑换的 1收藏的 2回收站的
  29. pageNum, pageSize, _ := public.PageNumParse(pageNumReq, pageSizeReq, -1)
  30. if sign < 0 || sign > 2 {
  31. return nil, fmt.Errorf("请求参数异常")
  32. }
  33. collectList, total, err := rpc.GetUserDocs(userId, pageNum, pageSize, sign)
  34. if err != nil {
  35. return nil, err
  36. }
  37. return map[string]interface{}{
  38. "total": total,
  39. "list": collectList,
  40. }, nil
  41. }()
  42. if errMsg != nil {
  43. log.Printf("%s UserDoc collectList err:%s\n", userId, errMsg.Error())
  44. }
  45. userDoc.ServeJson(NewResult(rData, errMsg))
  46. }
  47. func (userDoc *UserDoc) CollectAdd() {
  48. userId := common.ObjToString(userDoc.GetSession("userId"))
  49. rData, errMsg := func() (interface{}, error) {
  50. docId := userDoc.GetString("docId")
  51. if docId == "" {
  52. return nil, fmt.Errorf("参数异常")
  53. }
  54. err := rpc.SetUserCollect(userId, docId)
  55. if err != nil {
  56. return nil, err
  57. }
  58. return "success", nil
  59. }()
  60. if errMsg != nil {
  61. log.Printf("%s UserDoc collectAdd err:%s\n", userId, errMsg.Error())
  62. }
  63. userDoc.ServeJson(NewResult(rData, errMsg))
  64. }
  65. func (userDoc *UserDoc) CollectRemove() {
  66. userId := common.ObjToString(userDoc.GetSession("userId"))
  67. rData, errMsg := func() (interface{}, error) {
  68. docId := userDoc.GetString("docId")
  69. if docId == "" {
  70. return nil, fmt.Errorf("参数异常")
  71. }
  72. err := rpc.DelUserCollect(userId, docId)
  73. if err != nil {
  74. return nil, err
  75. }
  76. return "success", nil
  77. }()
  78. if errMsg != nil {
  79. log.Printf("%s UserDoc collectRemove err:%s\n", userId, errMsg.Error())
  80. }
  81. userDoc.ServeJson(NewResult(rData, errMsg))
  82. }
  83. func (userDoc *UserDoc) DocBuy() {
  84. userId := common.ObjToString(userDoc.GetSession("userId"))
  85. rData, errMsg := func() (interface{}, error) {
  86. docId := userDoc.GetString("docId")
  87. phone := userDoc.GetString("phone")
  88. if docId == "" {
  89. return nil, fmt.Errorf("参数异常")
  90. }
  91. var userPoint, docPoint int64 = 0, 0
  92. var err error
  93. //查询用户剩余积分
  94. userPoint, err = rpc.GetUserPointValue(userId)
  95. if err != nil {
  96. return nil, err
  97. }
  98. //查询文档所需积分
  99. docInfo, isBuy, _, err := rpc.GetDocDetail(userId, docId)
  100. if err != nil {
  101. return nil, err
  102. }
  103. if isBuy {
  104. return nil, fmt.Errorf("已兑换,请勿重复操作")
  105. }
  106. docPoint = docInfo.Price
  107. //积分够调扣积分
  108. if userPoint < docPoint {
  109. return nil, fmt.Errorf("剩余积分不足")
  110. }
  111. bytes, err := json.Marshal(map[string]interface{}{
  112. "name": docInfo.DocName,
  113. "summary": docInfo.DocSummary,
  114. "img": docInfo.PreviewImgId,
  115. "fType": docInfo.DocFileType,
  116. })
  117. if err != nil {
  118. return nil, fmt.Errorf("文库异常")
  119. }
  120. serialNumber, err := rpc.SpendUserPoint(userId, docInfo.DocId, string(bytes), docPoint)
  121. if err != nil {
  122. return nil, err
  123. }
  124. //转存文库
  125. err = rpc.PayDoc(userId, docId)
  126. if err != nil {
  127. return nil, err
  128. }
  129. //手机号采集
  130. go func() {
  131. if phone != "" {
  132. public.MQFW.Save("user_msg", map[string]interface{}{
  133. "s_userId": userId,
  134. "s_phone": phone,
  135. "i_phoneCheck": -1, //未验证
  136. "i_time": time.Now().Unix(),
  137. "s_source": "jydoc",
  138. })
  139. }
  140. rpc.DocStatistics(userId, docId, rpc.Down)
  141. }()
  142. return map[string]interface{}{
  143. "code": serialNumber,
  144. "balance": userPoint - docPoint,
  145. "payTime": time.Now().Unix(),
  146. "payWay": "剑鱼币",
  147. }, nil
  148. }()
  149. if errMsg != nil {
  150. log.Printf("%s UserDoc docBuy err:%s\n", userId, errMsg.Error())
  151. }
  152. userDoc.ServeJson(NewResult(rData, errMsg))
  153. }
  154. // Info 剑鱼文库会员信息
  155. func (userDoc *UserDoc) Info() {
  156. userId := common.ObjToString(userDoc.GetSession("userId"))
  157. rData, errMsg := func() (interface{}, error) {
  158. mData := public.Compatible.Select(userId, `{"i_doc_status":1,"l_doc_endtime":1,"l_doc_starttime":1}`)
  159. if mData != nil && len(*mData) > 0 {
  160. vipStatus := common.IntAll((*mData)["i_doc_status"])
  161. return map[string]interface{}{
  162. "docMemberStatus": vipStatus > 0,
  163. "startTime": (*mData)["l_doc_starttime"],
  164. "endTime": (*mData)["l_doc_endtime"],
  165. }, nil
  166. }
  167. return nil, errors.New("获取文库会员状态失败")
  168. }()
  169. if errMsg != nil {
  170. log.Printf("%s UserDoc Info err:%s\n", userId, errMsg.Error())
  171. }
  172. userDoc.ServeJson(NewResult(rData, errMsg))
  173. }