package userlib import ( "app.yhyue.com/moapp/jyPoints/rpc/integral" "app.yhyue.com/moapp/jyPoints/rpc/integralclient" "app.yhyue.com/moapp/jy_docs/rpc/userlib/userlib" "app.yhyue.com/moapp/jy_docs/services/model" docRpcUtil "app.yhyue.com/moapp/jy_docs/services/util" "context" "errors" "github.com/tal-tech/go-zero/core/discov" "github.com/tal-tech/go-zero/zrpc" "gorm.io/gorm" "log" "time" ) //文档收藏 func UserDocCollect(userDoc *model.UserDoc, cost int) bool { log.Println("UserDocCollect exec ......") orm := docRpcUtil.GetJyDocsDB() docData := model.UserDocData{} err := orm.Transaction(func(tx *gorm.DB) error { err0 := orm.Select("id,userId,docId,docCategory,isDelete"). Where("userId = ? AND docId = ? AND (isDelete = 0 OR isDelete = 1)", userDoc.UserId, userDoc.DocId). Find(&docData).Error if err0 != nil { log.Println("查询已存在收藏记录失败") return err0 } //已下载数据处理 if docData.DocCategory == 1 { log.Println("该文档已下载,无法收藏") return err0 } //已收藏数据处理 if docData.IsDelete == 0 && docData.UserId != "" { log.Println("此文档,该用户已收藏,不可重复收藏") return err0 } //已取消收藏,再次进行收藏 if docData.IsDelete == 1 && docData.UserId != "" { err := orm.Exec("UPDATE user_doc SET isDelete = 0 WHERE id = ?", docData.Id).Error if err != nil { log.Println("文档再次收藏失败") tx.Rollback() return err } //无收藏记录,新增收藏 } else { //用户文库表添加记录(需要检查是否重复) timeData := time.Now() userDoc.CreateAt = timeData userDoc.UpdateAt = timeData userDoc.DeletedAt = timeData //查询文档基础信息 doc := model.Doc{} err0 := orm.Where("id = ?", userDoc.DocId). Find(&doc).Error if err0 != nil || doc.Id == "" { log.Println("文档不存在", err0) return err0 } userDoc.DocSourceUserId = doc.UserId userDoc.DocCategory = 2 userDoc.IsDelete = int(userlib.UserDocStatus_Normal) userDoc.DocName = doc.DocName userDoc.DocFileType = doc.DocFileType userDoc.DocFileSuffix = doc.DocFileSuffix userDoc.DocFileSize = doc.DocFileSize userDoc.DocPageSize = doc.DocPageSize userDoc.DocSummary = doc.DocSummary err := orm.Create(userDoc).Error if err != nil { log.Println("userDocCollect error:", err) tx.Rollback() return err } } //用户收藏、兑换记录表添加记录 err := orm.Exec("insert into download_collection_record (docId,userId,sourceUserId,category,cost) values (?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.DocSourceUserId, userDoc.DocCategory, cost).Error if err != nil { log.Println("userDocCollect record insert error:", err) tx.Rollback() return err } return err }) if err != nil { return false } return true } //文档取消收藏 func UserDocCancelCollect(userDocId string) bool { orm := docRpcUtil.GetJyDocsDB() err := orm.Transaction(func(tx *gorm.DB) error { err := orm.Exec("UPDATE user_doc SET isDelete = 1 WHERE id = ? AND docCategory = 2 AND isDelete = 0", userDocId).Error if err != nil { log.Println("文档取消收藏失败") tx.Rollback() return err } return nil }) if err != nil { return false } return true } //兑换操作 func UserDocDownload(userDoc *model.UserDoc, cost int, hosts []string, key string) (bool, string) { log.Println("UserDocCollect exec ......") msg := "兑换成功" err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { //用户文库表添加记录 //获取文档有关信息 //查询之前有无兑换记录 0和1只要有一条不能兑换,如果有未删除可以兑换 userDocDownloadList := []model.UserDoc{} err := docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and docId=? and isDownload=1 and (isDelete=? or isDelete=?) and appId=?", userDoc.UserId, userDoc.DocId, model.UserDocStatus_Normal, model.UserDocStatus_LogicDelete,userDoc.AppId).Find(&userDocDownloadList) if err.Error != nil { log.Println("查询兑换记录失败:", err) msg = "查询兑换记录失败" return err.Error } if len(userDocDownloadList) > 0 { msg = "之前已经兑换不能再次兑换" return errors.New("之前已经兑换不能再次兑换") } //先扣除积分 //rpc client := zrpc.MustNewClient(zrpc.RpcClientConf{ Etcd: discov.EtcdConf{ Hosts: hosts, Key: key, }, }) integralLib := integralclient.NewIntegral(client) req := &integral.Req{UserId: userDoc.UserId, PointType: 2003, BusinessTypeId: 1, BusinessType: "1", Point: int64(cost), AppId: userDoc.AppId} res, pointsErr := integralLib.IntegralConsume(context.Background(), req) log.Println("err ", pointsErr) log.Println("req ", res) if (pointsErr != nil) { log.Println("扣除积分失败:", pointsErr) msg = "扣除积分失败" return pointsErr } if (res.Code == 0) { log.Println("扣除积分失败:", pointsErr) msg = res.Message return errors.New(res.Message) } //查询之前有无收藏记录 有收藏记录类型改为兑换,状态改为未删除、有收藏记录插入一条新纪录 userDocCollectionList := []model.UserDoc{} err = docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and docId=? and appId=? ", userDoc.UserId, userDoc.DocId, userDoc.AppId).Find(&userDocCollectionList) if err.Error != nil { log.Println("收藏记录查询:", err) msg = "收藏记录查询" return err.Error } if len(userDocCollectionList) > 0 { //兑换记录修改 if err := tx.Exec("update user_doc set isDownload=? , isDelete=? ,update_at=? where id =?", 1, model.UserDocStatus_Normal, time.Now(), userDocCollectionList[0].ID).Error; err != nil { log.Println("兑换记录修改失败:", err) msg = "兑换记录修改失败" tx.Rollback() return err } if err.Error != nil { log.Println("兑换操作流水添加失败:", err) msg = "收藏记录更改为兑换记录失败" tx.Rollback() return err.Error } //用户收藏、兑换记录表添加记录 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()) if err.Error != nil { log.Println("兑换操作流水添加失败:", err) msg = "兑换操作流水添加失败" tx.Rollback() return err.Error } } else { //用户文库表添加记录 userDoc.CreateAt = time.Now() userDoc.UpdateAt = time.Now() userDoc.DeletedAt = time.Now() //获取文件基本信息 //查询文档基础信息 doc := model.Doc{} err0 := docRpcUtil.GetJyDocsDB(). Where("id = ?", userDoc.DocId). Find(&doc) if err0.Error != nil { log.Println("文档不存在") msg = "文档不存在" return errors.New("文档不存在") } userDoc.DocSourceUserId = doc.UserId userDoc.DocCategory = model.UserDocCategory_Download userDoc.IsDelete = int(userlib.UserDocStatus_Normal) userDoc.DocName = doc.DocName userDoc.DocFileType = doc.DocFileType userDoc.DocFileSuffix = doc.DocFileSuffix userDoc.DocFileSize = doc.DocFileSize userDoc.DocPageSize = doc.DocPageSize userDoc.DocSummary = doc.DocSummary err = docRpcUtil.GetJyDocsDB().Create(userDoc) if err.Error != nil { log.Println("兑换操作添加失败:", err) msg = "兑换操作添加失败" tx.Rollback() return err.Error } //用户收藏、兑换记录表添加记录 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()) if err.Error != nil { log.Println("兑换操作流水添加失败:", err) msg = "兑换操作流水添加失败" tx.Rollback() return err.Error } } return nil }) if err != nil { return false, msg } return true, msg } //文档删除 func UserDocDelete(userDocId int32,appId int64 ) (bool, string) { msg := "文档删除成功" err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { //逻辑删除 err := docRpcUtil.GetJyDocsDB().Exec("UPDATE user_doc SET isDelete = ? WHERE id = ?", model.UserDocStatus_LogicDelete, userDocId).Error if err != nil { msg = "文档删除失败" log.Println("文档删除失败:", err) tx.Rollback() return err } docData := model.UserDoc{} //查询用户文档详情 docRpcUtil.GetJyDocsDB().Select("userId,docId").First(&docData, userDocId) log.Println(docData.UserId) log.Println(docData.DocId) //删除记录新增 err = docRpcUtil.GetJyDocsDB().Exec("insert into del_record (docId, userId, date, operate, appId) values (?,?,?,?,?)", docData.DocId,docData.UserId, time.Now(), 1, appId).Error if err != nil { tx.Rollback() msg = "删除记录新增失败" log.Println("删除记录新增失败:", err) return err } return nil }) if err != nil { return false, msg } return true, msg } //文档回收 func UserDocRestore(userDocId int32,appId int64) (bool, string) { msg := "文档找回成功" err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { //逻辑删除 err := docRpcUtil.GetJyDocsDB().Exec("UPDATE user_doc SET isDelete = ? WHERE id = ?", model.UserDocStatus_Normal, userDocId).Error if err != nil { msg = "文档找回失败" log.Println("文档找回失败:", err) tx.Rollback() return err } docData := model.UserDoc{} //查询用户文档详情 docRpcUtil.GetJyDocsDB().Select("userId,docId").First(&docData, userDocId) log.Println(docData.UserId) log.Println(docData.DocId) //删除记录新增 err = docRpcUtil.GetJyDocsDB().Exec("insert into del_record (docId, userId, date, operate, appId) values (?,?,?,?,?)", docData.DocId,docData.UserId, time.Now(), 1, appId).Error if err != nil { tx.Rollback() msg = "删除记录新增失败" log.Println("删除记录新增失败:", err) return err } return nil }) if err != nil { return false, msg } return true, msg } //永久删除 func UserDocPermanentDelete(userDocId int32,appId int64) (bool, string) { msg := "永久删除成功" err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { //逻辑删除 err := docRpcUtil.GetJyDocsDB().Exec("UPDATE user_doc SET isDelete = ? WHERE id = ?", model.UserDocStatus_PermanentlyDelete, userDocId).Error if err != nil { msg = "永久删除失败" log.Println("永久删除失败:", err) tx.Rollback() return err } return nil }) if err != nil { return false, msg } return true, msg }