stdDoc.go 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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/encrypt"
  6. "app.yhyue.com/moapp/jybase/go-xweb/xweb"
  7. "fmt"
  8. "jy-docs/config"
  9. "jy-docs/public"
  10. "jy-docs/rpc"
  11. "log"
  12. "strings"
  13. )
  14. type StdDoc struct {
  15. *xweb.Action
  16. search xweb.Mapper `xweb:"/search"` //检索文库
  17. indexTag xweb.Mapper `xweb:"/indexTag"` //首页搜索标签
  18. detail xweb.Mapper `xweb:"/detail"` //文库详情
  19. getDoc xweb.Mapper `xweb:"/get(Show|Down)"` //文库在线查看 or 下载
  20. topList xweb.Mapper `xweb:"/topList"` //最新文档&热门下载
  21. activityList xweb.Mapper `xweb:"/activityList"` //活动文库(精品推荐、兑换榜)
  22. }
  23. func (stdDoc *StdDoc) Search() {
  24. userId := common.ObjToString(stdDoc.GetSession("userId"))
  25. rData, errMsg := func() (interface{}, error) {
  26. keyWord := strings.TrimSpace(stdDoc.GetString("keyWord")) //关键词
  27. tag := stdDoc.GetString("tag") //标签
  28. sort := stdDoc.GetString("sort") //排序 tSort dSort vSort
  29. pageNumReq, _ := stdDoc.GetInt("num") //页码 从1开始
  30. pageSizeReq, _ := stdDoc.GetInt("size") //每页数量
  31. pageNum, pageSize, err := public.PageNumParse(pageNumReq, pageSizeReq, 20*10)
  32. if err != nil {
  33. return nil, err
  34. }
  35. if keyWord == "" {
  36. return nil, fmt.Errorf("检索内容不能为空")
  37. }
  38. if tag == "全部" {
  39. tag = ""
  40. }
  41. list, total, err := rpc.GetDocQuery(userId, keyWord, tag, pageNum, pageSize, sort)
  42. if err != nil {
  43. return nil, err
  44. }
  45. return map[string]interface{}{
  46. "total": total,
  47. "list": list,
  48. }, nil
  49. }()
  50. if errMsg != nil {
  51. log.Printf("%s StdDoc search err:%s\n", userId, errMsg.Error())
  52. }
  53. stdDoc.ServeJson(NewResult(rData, errMsg))
  54. }
  55. func (stdDoc *StdDoc) IndexTag() {
  56. stdDoc.ServeJson(NewResult(config.JyDocsAppConfig.IndexSearchTag, nil))
  57. }
  58. func (stdDoc *StdDoc) Detail() {
  59. userId := common.ObjToString(stdDoc.GetSession("userId"))
  60. rData, errMsg := func() (interface{}, error) {
  61. docId := stdDoc.GetString("docId")
  62. from := stdDoc.GetString("from")
  63. if docId == "" {
  64. return nil, fmt.Errorf("参数异常")
  65. }
  66. if from != "" { //分享赚积分
  67. go public.OpenShareJydoc(encrypt.SE.DecodeString(from), userId, docId)
  68. }
  69. detail, isBuy, err := rpc.GetDocDetail(userId, docId)
  70. if err != nil {
  71. return nil, err
  72. }
  73. //ossId清除
  74. detail.OssPdfId = ""
  75. detail.OssDocId = ""
  76. detail.PreviewImgId = fmt.Sprintf("https://%s.%s/%s", config.JyDocsAppConfig.OssBucket.Priv, config.JyDocsAppConfig.OssAdmin, detail.PreviewImgId)
  77. return map[string]interface{}{
  78. "status": common.If(isBuy, 1, 0),
  79. "detail": detail,
  80. }, nil
  81. }()
  82. if errMsg != nil {
  83. log.Printf("%s StdDoc detail err:%s\n", userId, errMsg.Error())
  84. }
  85. stdDoc.ServeJson(NewResult(rData, errMsg))
  86. }
  87. func (stdDoc *StdDoc) GetDoc(sign string) {
  88. userId := common.ObjToString(stdDoc.GetSession("userId"))
  89. rData, errMsg := func() (interface{}, error) {
  90. docId := stdDoc.GetString("docId")
  91. if docId == "" {
  92. return nil, fmt.Errorf("参数异常")
  93. }
  94. detail, isBuy, err := rpc.GetDocDetail(userId, docId)
  95. if err != nil {
  96. return nil, err
  97. }
  98. if !isBuy {
  99. return nil, fmt.Errorf("请先兑换文档")
  100. }
  101. fileId := detail.OssPdfId
  102. if sign == "Down" {
  103. fileId = detail.OssDocId
  104. }
  105. url, err := rpc.GetFileContext(userId, fileId)
  106. if err != nil {
  107. return nil, err
  108. }
  109. return url, nil
  110. }()
  111. if errMsg != nil {
  112. log.Printf("%s StdDoc content err:%s\n", userId, errMsg.Error())
  113. }
  114. stdDoc.ServeJson(NewResult(rData, errMsg))
  115. }
  116. func (stdDoc *StdDoc) TopList() {
  117. userId := common.ObjToString(stdDoc.GetSession("userId"))
  118. rData, errMsg := func() (interface{}, error) {
  119. num, _ := stdDoc.GetInt("num") //返回数量
  120. sign := stdDoc.GetString("sign") //类别
  121. reqSort := ""
  122. if num > 50 {
  123. num = 50
  124. }
  125. if sign == "hot" {
  126. reqSort = "dSort"
  127. } else if sign == "new" {
  128. reqSort = "tSort"
  129. } else {
  130. return nil, fmt.Errorf("未知请求")
  131. }
  132. //存入redis缓存
  133. list, _, err := rpc.GetDocQuery(userId, "", "", 1, num, reqSort)
  134. if err != nil {
  135. return nil, err
  136. }
  137. return list, nil
  138. }()
  139. if errMsg != nil {
  140. log.Printf("%s StdDoc topList err:%s\n", userId, errMsg.Error())
  141. }
  142. stdDoc.ServeJson(NewResult(rData, errMsg))
  143. }
  144. func (stdDoc *StdDoc) ActivityList() {
  145. userId := common.ObjToString(stdDoc.GetSession("userId"))
  146. rData, errMsg := func() (interface{}, error) {
  147. code, _ := stdDoc.GetInt("code")
  148. pageNumReq, _ := stdDoc.GetInt("num") //页码 从1开始
  149. pageSizeReq, _ := stdDoc.GetInt("size") //每页数量
  150. pageNum, pageSize, err := public.PageNumParse(pageNumReq, pageSizeReq, 20*10)
  151. if err != nil {
  152. return nil, err
  153. }
  154. //存入redis缓存
  155. list, err := rpc.GeActivityList(userId, code, pageNum, pageSize)
  156. if err != nil {
  157. return nil, err
  158. }
  159. for i := 0; i < len(list); i++ {
  160. list[i].DocImg = fmt.Sprintf("https://%s.%s/%s", config.JyDocsAppConfig.OssBucket.Priv, config.JyDocsAppConfig.OssAdmin, list[i].DocImg)
  161. }
  162. return list, nil
  163. }()
  164. if errMsg != nil {
  165. log.Printf("%s StdDoc activityList err:%s\n", userId, errMsg.Error())
  166. }
  167. stdDoc.ServeJson(NewResult(rData, errMsg))
  168. }