userDocService.go 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. "github.com/tal-tech/go-zero/core/discov"
  9. "github.com/tal-tech/go-zero/zrpc"
  10. "gorm.io/gorm"
  11. "log"
  12. "time"
  13. )
  14. //文档收藏
  15. func UserDocCollect(userDoc *model.UserDoc, cost int) bool {
  16. log.Println("UserDocCollect exec ......")
  17. orm := docRpcUtil.GetJyDocsDB()
  18. docData := model.UserDocData{}
  19. err := orm.Transaction(func(tx *gorm.DB) error {
  20. err0 := orm.Select("id,userId,docId,docCategory,isDelete").
  21. Where("userId = ? AND docId = ? AND (isDelete = 0 OR isDelete = 1)",userDoc.UserId,userDoc.DocId).
  22. Find(&docData)
  23. if err0.Error != nil {
  24. log.Println("查询已存在收藏记录失败")
  25. return nil
  26. }
  27. //已下载数据处理
  28. if docData.DocCategory == 1 {
  29. log.Println("该文档已下载,无法收藏")
  30. return nil
  31. }
  32. //已收藏数据处理
  33. if docData.IsDelete == 0 && docData.UserId != "" {
  34. log.Println("此文档,该用户已收藏,不可重复收藏")
  35. return nil
  36. }
  37. //已取消收藏,再次进行收藏
  38. if docData.IsDelete == 1 && docData.UserId != "" {
  39. err := orm.Exec("UPDATE user_doc SET isDelete = 0 WHERE id = ?",docData.Id).Error
  40. if err != nil {
  41. log.Println("文档再次收藏失败")
  42. tx.Rollback()
  43. return nil
  44. }
  45. //无收藏记录,新增收藏
  46. }else{
  47. //用户文库表添加记录(需要检查是否重复)
  48. err := docRpcUtil.GetJyDocsDB().Create(userDoc).Error
  49. if err != nil {
  50. log.Println("userDocCollect error:", err)
  51. tx.Rollback()
  52. return nil
  53. }
  54. }
  55. //用户收藏、转存记录表添加记录
  56. 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
  57. if err != nil {
  58. log.Println("userDocCollect record insert error:", err)
  59. tx.Rollback()
  60. return nil
  61. }
  62. return nil
  63. })
  64. if err != nil {
  65. return false
  66. }
  67. return true
  68. }
  69. //文档取消收藏
  70. func UserDocCancelCollect(userDocId string) bool {
  71. orm := docRpcUtil.GetJyDocsDB()
  72. err := orm.Transaction(func(tx *gorm.DB) error {
  73. err := orm.Exec("UPDATE user_doc SET isDelete = 1 WHERE id = ?",userDocId).Error
  74. if err != nil {
  75. log.Println("文档取消收藏失败")
  76. tx.Rollback()
  77. return nil
  78. }
  79. return nil
  80. })
  81. if err != nil {
  82. return false
  83. }
  84. return true
  85. }
  86. //转存操作
  87. func UserDocDownload(userDoc *model.UserDoc, cost int,hosts []string,key string) bool {
  88. log.Println("UserDocCollect exec ......")
  89. err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error {
  90. //用户文库表添加记录
  91. //获取文档有关信息
  92. //查询之前有无下载记录 0和1只要有一条不能下载,如果有未删除可以下载
  93. userDocDownloadList := []model.UserDoc{}
  94. 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)
  95. if err.Error != nil {
  96. return err.Error
  97. }
  98. if len(userDocDownloadList) > 0 {
  99. return nil
  100. }
  101. //先扣除积分
  102. //rpc
  103. client := zrpc.MustNewClient(zrpc.RpcClientConf{
  104. Etcd: discov.EtcdConf{
  105. Hosts: hosts,
  106. Key: key,
  107. },
  108. })
  109. integralLib := integralclient.NewIntegral(client)
  110. req := &integral.Req{UserId: userDoc.UserId,
  111. PointType: 2003,
  112. BusinessTypeId: 1,
  113. BusinessType: "1",
  114. Point: int64(cost),
  115. AppId: 10000}
  116. res, pointsErr := integralLib.IntegralConsume(context.Background(), req)
  117. log.Println("err ", pointsErr)
  118. log.Println("req ", res)
  119. if (pointsErr != nil || res.Code == 0) {
  120. return pointsErr
  121. }
  122. //查询之前有无收藏记录 有收藏记录类型改为下载,状态改为未删除、有收藏记录插入一条新纪录
  123. userDocCollectionList := []model.UserDoc{}
  124. 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)
  125. if err.Error != nil {
  126. return err.Error
  127. }
  128. if len(userDocCollectionList) > 0 {
  129. //修改收藏为下载
  130. 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 {
  131. return err
  132. }
  133. if err.Error != nil {
  134. log.Println("userDocCollect error:", err)
  135. tx.Rollback()
  136. return err.Error
  137. }
  138. //用户收藏、转存记录表添加记录
  139. 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())
  140. if err.Error != nil {
  141. log.Println("userDocCollect record insert error:", err)
  142. tx.Rollback()
  143. return err.Error
  144. }
  145. } else {
  146. //用户文库表添加记录
  147. userDoc.CreateAt = time.Now()
  148. userDoc.UpdateAt = time.Now()
  149. userDoc.DeletedAt = time.Now()
  150. err = docRpcUtil.GetJyDocsDB().Create(userDoc)
  151. if err.Error != nil {
  152. log.Println("userDocCollect error:", err)
  153. tx.Rollback()
  154. return err.Error
  155. }
  156. //用户收藏、转存记录表添加记录
  157. 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())
  158. if err.Error != nil {
  159. log.Println("userDocCollect record insert error:", err)
  160. tx.Rollback()
  161. return err.Error
  162. }
  163. }
  164. return nil
  165. })
  166. if err != nil {
  167. return false
  168. }
  169. return true
  170. }
  171. func UserDocDelete(docId string) bool {
  172. err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error {
  173. orm := docRpcUtil.GetJyDocsDB()
  174. docData := model.UserDoc{}
  175. //查询用户文档详情
  176. orm.Select("userId,docId").First(&docData, docId)
  177. log.Println(docData.UserId)
  178. log.Println(docData.DocId)
  179. //逻辑删除
  180. err := docRpcUtil.GetJyDocsDB().Exec("UPDATE user_doc SET isDelete = 1 WHERE id = ?", docId).Error
  181. if err != nil {
  182. tx.Rollback()
  183. return err
  184. }
  185. //删除记录
  186. 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
  187. if err != nil {
  188. tx.Rollback()
  189. return err
  190. }
  191. return nil
  192. })
  193. if err != nil {
  194. return false
  195. }
  196. return true
  197. }