package userlib import ( "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" "errors" "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,isCollection"). Where("userId = ? AND docId = ? AND appId = ?", userDoc.UserId, userDoc.DocId,userDoc.AppId). Find(&docData).Error if err0 != nil { log.Println("查询已存在收藏记录失败") return err0 } //已收藏数据处理 if docData.IsCollection == 1 { log.Println("此文档,该用户已收藏,不可重复收藏") return err0 } //查询文档基础信息 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 userDoc.IsCollection = 1 //已取消收藏,再次进行收藏 if docData.IsCollection == 0 && docData.UserId != "" { err := orm.Exec("UPDATE user_doc SET isCollection = 1 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 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,appId,sourceUserId,category,cost) values (?,?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.AppId, userDoc.DocSourceUserId, 2, 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 { //收藏记录详情 userDoc := model.UserDoc{} err := orm.Where("id = ?", userDocId). Find(&userDoc).Error if err != nil || userDoc.ID == 0{ log.Println("无此收藏记录,取消收藏失败", err) return err } //文档取消收藏状态修改 err = orm.Exec("UPDATE user_doc SET isCollection = 0 WHERE id = ? AND isCollection = 1", userDocId).Error if err != nil { log.Println("文档取消收藏失败") tx.Rollback() return err } //记录文档取消收藏添加记录 err = orm.Exec("insert into download_collection_record (docId,userId,appId,sourceUserId,category,cost) values (?,?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.AppId, userDoc.DocSourceUserId, 3, 0).Error if err != nil { log.Println("userDocCollect record insert error:", err) 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,appId) values (?,?,?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.DocSourceUserId, model.UserDocCategory_Download, cost, time.Now(), userDoc.AppId) 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() userDoc.IsCollection = 0 userDoc.IsDownload = 1 //获取文件基本信息 //查询文档基础信息 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.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,appId) values (?,?,?,?,?,?,?)", userDoc.DocId, userDoc.UserId, userDoc.DocSourceUserId, model.UserDocCategory_Download, cost, time.Now(), userDoc.AppId) 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(), 2, 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 = ? ,isDownload=0 WHERE id = ?", model.UserDocStatus_PermanentlyDelete, 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(), 4, appId).Error if err != nil { tx.Rollback() msg = "删除记录新增失败" log.Println("删除记录新增失败:", err) return err } return nil }) if err != nil { return false, msg } return true, msg } //我的文库列表(包括回收站列表)0兑换的 1收藏的 2回收站的 func UserDocsList(in *userlib.UserDocsRequest) ([]*model.UserDoc, int64, bool, string) { msg := "查询成功" data := []*model.UserDoc{} count := int64(0) startIndex := (in.Page - 1) * in.PageSize err := docRpcUtil.GetJyDocsDB().Transaction(func(tx *gorm.DB) error { switch in.UserDocCategory { case int64(0): //兑换的 err := docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and isDownload=1 and isDelete=? and appId=? ", in.UserId, model.UserDocStatus_Normal, in.AppId).Find(&data) count = int64(len(data)) err = docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and isDownload=1 and isDelete=? and appId=? limit ?,?", in.UserId, model.UserDocStatus_Normal, in.AppId, startIndex, in.PageSize).Find(&data) if err.Error != nil { log.Println("查询兑换记录失败:", err) msg = "查询兑换记录失败" return err.Error } case int64(1): //收藏的 err := docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and isCollection=1 and appId=? ", in.UserId, model.UserDocStatus_Normal, in.AppId).Find(&data) count = int64(len(data)) err = docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and isCollection=1 and appId=? limit ?,?", in.UserId, model.UserDocStatus_Normal, in.AppId, startIndex, in.PageSize).Find(&data) if err.Error != nil { log.Println("查询收藏记录失败:", err) msg = "查询收藏记录失败" return err.Error } case int64(2): //回收站 err := docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and isDelete=? and appId=? ", in.UserId, model.UserDocStatus_LogicDelete, in.AppId).Find(&data) count = int64(len(data)) err = docRpcUtil.GetJyDocsDB().Table("user_doc").Where(" userId=? and isDelete=? and appId=? limit ?,?", in.UserId, model.UserDocStatus_LogicDelete, in.AppId, startIndex, in.PageSize).Find(&data) if err.Error != nil { log.Println("查询回收站记录失败:", err) msg = "查询回收站记录失败" return err.Error } } return nil }) if err != nil { return data, count, false, msg } return data, count, true, msg }