userDocService.go 8.0 KB

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