userDocService.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package userlib
  2. import (
  3. "app.yhyue.com/moapp/jyPoints/rpc/integral"
  4. "app.yhyue.com/moapp/jyPoints/rpc/integralclient"
  5. "app.yhyue.com/moapp/jy_docs/services/model"
  6. docRpcUtil "app.yhyue.com/moapp/jy_docs/services/util"
  7. "context"
  8. "errors"
  9. "github.com/tal-tech/go-zero/core/discov"
  10. "github.com/tal-tech/go-zero/zrpc"
  11. "gorm.io/gorm"
  12. "log"
  13. "time"
  14. )
  15. func UserDocCollect(userDoc *model.UserDoc, cost int) bool {
  16. log.Println("UserDocCollect exec ......")
  17. err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error {
  18. //用户文库表添加记录(需要检查是否重复)
  19. err := docRpcUtil.GetJyDocsDB().Create(userDoc).Error
  20. if err != nil {
  21. log.Println("userDocCollect error:", err)
  22. tx.Rollback()
  23. return err
  24. }
  25. //用户收藏、转存记录表添加记录
  26. err = docRpcUtil.GetJyDocsDB().Exec("insert into download_collection_record (docId,userId,sourceUserId,category,cost) values (?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.DocSourceUserId, userDoc.DocCategory, cost).Error
  27. if err != nil {
  28. log.Println("userDocCollect record insert error:", err)
  29. tx.Rollback()
  30. return err
  31. }
  32. return nil
  33. })
  34. if err != nil {
  35. return false
  36. }
  37. return true
  38. }
  39. //转存操作
  40. func UserDocDownload(userDoc *model.UserDoc, cost int,hosts []string,key string) (bool,string) {
  41. log.Println("UserDocCollect exec ......")
  42. msg:="转存成功"
  43. err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error {
  44. //用户文库表添加记录
  45. //获取文档有关信息
  46. //查询之前有无下载记录 0和1只要有一条不能下载,如果有未删除可以下载
  47. userDocDownloadList := []model.UserDoc{}
  48. err := docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and docId=? and docCategory=? and (isDelete=? or isDelete=?)", userDoc.UserId, userDoc.DocId, model.UserDocCategory_Download, model.UserDocStatus_Normal, model.UserDocStatus_LogicDelete).Find(&userDocDownloadList)
  49. if err.Error != nil {
  50. log.Println("查询转存记录失败:",err)
  51. msg="查询转存记录失败"
  52. return err.Error
  53. }
  54. if len(userDocDownloadList) > 0 {
  55. msg="之前已经下载不能再次下载"
  56. return errors.New("之前已经下载不能再次下载")}
  57. //先扣除积分
  58. //rpc
  59. client := zrpc.MustNewClient(zrpc.RpcClientConf{
  60. Etcd: discov.EtcdConf{
  61. Hosts: hosts,
  62. Key: key,
  63. },
  64. })
  65. integralLib := integralclient.NewIntegral(client)
  66. req := &integral.Req{UserId: userDoc.UserId,
  67. PointType: 2003,
  68. BusinessTypeId: 1,
  69. BusinessType: "1",
  70. Point: int64(cost),
  71. AppId: 10000}
  72. res, pointsErr := integralLib.IntegralConsume(context.Background(), req)
  73. log.Println("err ", pointsErr)
  74. log.Println("req ", res)
  75. if (pointsErr != nil ) {
  76. log.Println("扣除积分失败:",pointsErr)
  77. msg="扣除积分失败"
  78. return pointsErr
  79. }
  80. if (res.Code == 0) {
  81. log.Println("扣除积分失败:",pointsErr)
  82. msg=res.Message
  83. return errors.New(res.Message)
  84. }
  85. //查询之前有无收藏记录 有收藏记录类型改为下载,状态改为未删除、有收藏记录插入一条新纪录
  86. userDocCollectionList := []model.UserDoc{}
  87. err = docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and docId=? and docCategory=? and (isDelete=? or isDelete=?)", userDoc.UserId, userDoc.DocId, model.UserDocCategory_Collect, model.UserDocStatus_Normal, model.UserDocStatus_LogicDelete).Find(&userDocCollectionList)
  88. if err.Error != nil {
  89. log.Println("收藏记录查询:",err)
  90. msg="收藏记录查询"
  91. return err.Error
  92. }
  93. if len(userDocCollectionList) > 0 {
  94. //修改收藏为下载
  95. if err := tx.Exec("update user_doc set docCategory=? , isDelete=? ,update_at=? where id =?", model.UserDocCategory_Download, model.UserDocStatus_Normal, time.Now(), userDocCollectionList[0].ID).Error; err != nil {
  96. log.Println("收藏记录更改为转存记录失败:",err)
  97. msg="收藏记录更改为转存记录失败"
  98. tx.Rollback()
  99. return err
  100. }
  101. if err.Error != nil {
  102. log.Println("转存操作流水添加失败:", err)
  103. msg="收藏记录更改为转存记录失败"
  104. tx.Rollback()
  105. return err.Error
  106. }
  107. //用户收藏、转存记录表添加记录
  108. err := docRpcUtil.GetJyDocsDB().Exec("insert into download_collection_record (docId,userId,sourceUserId,category,cost,date) values (?,?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.DocSourceUserId, model.UserDocCategory_Download, cost, time.Now())
  109. if err.Error != nil {
  110. log.Println("转存操作流水添加失败:", err)
  111. msg="转存操作流水添加失败"
  112. tx.Rollback()
  113. return err.Error
  114. }
  115. } else {
  116. //用户文库表添加记录
  117. userDoc.CreateAt = time.Now()
  118. userDoc.UpdateAt = time.Now()
  119. userDoc.DeletedAt = time.Now()
  120. //获取文件基本信息
  121. err = docRpcUtil.GetJyDocsDB().Create(userDoc)
  122. if err.Error != nil {
  123. log.Println("转存操作添加失败:", err)
  124. msg="转存操作添加失败"
  125. tx.Rollback()
  126. return err.Error
  127. }
  128. //用户收藏、转存记录表添加记录
  129. err := docRpcUtil.GetJyDocsDB().Exec("insert into download_collection_record (docId,userId,sourceUserId,category,cost,date) values (?,?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.DocSourceUserId, model.UserDocCategory_Download, cost, time.Now())
  130. if err.Error != nil {
  131. log.Println("转存操作流水添加失败:", err)
  132. msg="转存操作流水添加失败"
  133. tx.Rollback()
  134. return err.Error
  135. }
  136. }
  137. return nil
  138. })
  139. if err != nil {
  140. return false,msg
  141. }
  142. return true,msg
  143. }
  144. func UserDocDelete(docId string) bool {
  145. err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error {
  146. orm := docRpcUtil.GetJyDocsDB()
  147. docData := model.UserDoc{}
  148. //查询用户文档详情
  149. orm.Select("userId,docId").First(&docData, docId)
  150. log.Println(docData.UserId)
  151. log.Println(docData.DocId)
  152. //逻辑删除
  153. err := docRpcUtil.GetJyDocsDB().Exec("UPDATE user_doc SET isDelete = 1 WHERE id = ?", docId).Error
  154. if err != nil {
  155. tx.Rollback()
  156. return err
  157. }
  158. //删除记录
  159. err = docRpcUtil.GetJyDocsDB().Exec("insert into del_record (docId, userId, date, operate, viewType, source, shareUserId) values (?,?,?,?,?,?,?)", docId, docData.UserId, time.Now(), 1, 1, 1, 1).Error
  160. if err != nil {
  161. tx.Rollback()
  162. return err
  163. }
  164. return nil
  165. })
  166. if err != nil {
  167. return false
  168. }
  169. return true
  170. }