package aiplazaser import ( "91porn-server/common/log" "91porn-server/common/stderr" "91porn-server/models/cache/aiplazadata" "91porn-server/models/commod" "91porn-server/models/v/aiUnDressmod" "91porn-server/models/v/aichangefaceimgmod" "91porn-server/models/v/aichangefacemod" "91porn-server/models/v/aiimagetovideomod" "91porn-server/models/v/aiplazamod" "91porn-server/models/v/aitexttoimagemod" "fmt" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson" ) type AppQueryListReq struct { Type *int `json:"type" form:"type"` // 1-ai图片换脸 2-ai视频换脸 3-ai脱衣 4-ai图生视频 5-ai绘画 不传则查看全部 SortType int `json:"sortType" form:"sortType"` // 1-推荐 2-最新上架 3-最多观看 4-最多收藏 commod.Page } type AppListRes struct { Total int64 `json:"total"` HasNext bool `json:"hasNext"` List []*aiplazamod.AiPlazaInfo `json:"list"` } // GetList 获取列表 func (p *AppQueryListReq) GetList() AppListRes { var res AppListRes var err error filter := bson.M{ "status": 1, } if p.Type != nil { filter["type"] = p.Type } sort := bson.D{{"reviewAt", -1}} switch p.SortType { case 2: // 最新上架 sort = bson.D{{"reviewAt", -1}} case 3: // 最多观看 sort = bson.D{{"viewCount", -1}, {"reviewAt", -1}} case 4: // 最多收藏 sort = bson.D{{"collectCount", -1}, {"reviewAt", -1}} default: // 1 // 推荐 //filter["reviewAt"] = bson.M{"$gt": carbon.NewCarbon().StartOfDay().SubDays(30).StdTime()} sort = bson.D{{"sortCode", -1}, {"reviewAt", -1}} } // 获取列表 var data []aiplazamod.AiPlaza data, res.Total, res.HasNext, err = aiplazadata.GetListFromCache(filter, int64(p.Skip()), int64(p.Limit()), sort) if err != nil { log.Error("获取ai广场帖子列表数据错误", log.Any("Params", *p), log.E(err)) return res } res.List = aiplazadata.FormatAppDataList(data) return res } type AppQueryInfoReq struct { ID string `json:"id" form:"id"` // id } type AppQueryInfoResp struct { Detail *aiplazamod.AiPlazaInfo } // GetInfo 获取详情 func (p *AppQueryInfoReq) GetInfo(uid uint64) (res AppQueryInfoResp, err error) { oid, err := primitive.ObjectIDFromHex(p.ID) if err != nil { return res, err } var item aiplazamod.AiPlaza item, err = aiplazadata.GetInfoFromCache(oid) if err != nil { log.Error("获取ai广场帖子详情数据错误", log.Any("ID", p.ID), log.E(err)) return } res.Detail = aiplazadata.FormatAppData(uid, item) return } type ShareReq struct { Type int `json:"type" form:"type" binding:"required"` // 1-ai图片换脸 2-ai视频换脸 3-ai脱衣 4-ai图生视频 5-ai绘画 OrderId primitive.ObjectID `json:"orderId" form:"orderId" binding:"required"` Title string `json:"title" form:"title"` } // Create 发布数据 func (p *ShareReq) Create(uid uint64) error { // 根据类型获取订单 switch p.Type { case 1: // ai图片换脸 return p.shareAiImageChangeFace(uid) case 2: // ai视频换脸 return p.shareAiVideoChangeFace(uid) case 3: // ai脱衣 return p.shareAiUndress(uid) case 4: // ai图生视频 return p.shareAiImageToVideo(uid) case 5: // ai绘画 return p.shareAiTextToImage(uid) default: // 其他类型的不处理 return nil } } func (p *ShareReq) shareAiImageChangeFace(uid uint64) (err error) { // ai图片换脸 aichangeFaceInfo, err := aichangefaceimgmod.FindByID(nil, p.OrderId) if aichangeFaceInfo == nil && err != nil { return stderr.ErrDbQueryError } if aichangeFaceInfo.UID != uid || aichangeFaceInfo.Status != aichangefaceimgmod.SUCCESS { return stderr.ErrDbQueryError } // 修改状态 if err = aichangefaceimgmod.Update(nil, p.OrderId, bson.M{ "shareStatus": 1, "shareTitle": p.Title, }); err != nil { return stderr.ErrDbUpdateError } // 新增一个分享 alPlaza := aiplazamod.AiPlaza{ Type: 1, OrderId: aichangeFaceInfo.ID, Template: aichangeFaceInfo.MId, Uid: aichangeFaceInfo.UID, Title: p.Title, OriginalImage: aichangeFaceInfo.ModPic, OriginalVideo: "", OriginContent: "", GenerateVideo: "", Status: aiplazamod.DefaultStatus, } if len(aichangeFaceInfo.NewPic) > 0 { alPlaza.GenerateImage = aichangeFaceInfo.NewPic[0] } _, err = aiplazamod.Insert(nil, alPlaza) if err != nil { log.Error("新增ai广场帖子失败", log.Any("alPlaza", alPlaza), log.E(err)) return } return } func (p *ShareReq) shareAiVideoChangeFace(uid uint64) (err error) { //查询该笔订单是否存在 aichangeFaceInfo, err := aichangefacemod.FindByID(nil, p.OrderId) if aichangeFaceInfo == nil && err != nil { return stderr.ErrDbQueryError } if aichangeFaceInfo.Uid != uid || aichangeFaceInfo.Status != aichangefacemod.StatusComplete { return stderr.ErrDbQueryError } if err = aichangefacemod.Update(nil, p.OrderId, bson.M{"$set": bson.M{ "shareStatus": 1, "shareTitle": p.Title, }}); err != nil { return stderr.ErrDbUpdateError } // 新增一个分享 alPlaza := aiplazamod.AiPlaza{ Type: 2, OrderId: aichangeFaceInfo.ID, Template: aichangeFaceInfo.VidID.Hex(), Uid: aichangeFaceInfo.Uid, Title: p.Title, OriginalImage: "", OriginalVideo: aichangeFaceInfo.ModVideo, OriginalVideoCover: aichangeFaceInfo.ModCover, OriginContent: "", GenerateVideo: aichangeFaceInfo.Url, Status: aiplazamod.DefaultStatus, } if len(aichangeFaceInfo.Pic) > 0 { alPlaza.GenerateVideoCover = aichangeFaceInfo.Pic[0] } _, err = aiplazamod.Insert(nil, alPlaza) if err != nil { log.Error("新增ai广场帖子失败", log.Any("alPlaza", alPlaza), log.E(err)) return } return } func (p *ShareReq) shareAiUndress(uid uint64) (err error) { data, err := aiUnDressmod.FindDataByID(p.OrderId.Hex()) if err != nil { return stderr.ErrDbQueryError } if data.UID != uid || data.Status != aiUnDressmod.SUCCESS { return stderr.ErrDbQueryError } // 修改订单状态 if err = aiUnDressmod.Edit(nil, bson.M{"_id": p.OrderId}, bson.M{"$set": bson.M{ "shareStatus": 1, "shareTitle": p.Title, }}); err != nil { log.Error(fmt.Sprintf("Handle AiUnDress CallBackOrder aiUnDressmod.Edit error:%+v:", err), log.Any("uid", uid)) return stderr.ErrDbUpdateError } // 新增一个分享 alPlaza := aiplazamod.AiPlaza{ Type: 3, OrderId: data.ID, Template: "", Uid: data.UID, Title: p.Title, OriginalImage: data.OriginPic, OriginalVideo: "", OriginContent: "", //GenerateImage: data.NewPic[0], GenerateVideo: "", Status: aiplazamod.DefaultStatus, } if len(data.NewPic) > 0 { alPlaza.GenerateImage = data.NewPic[0] } _, err = aiplazamod.Insert(nil, alPlaza) if err != nil { log.Error("新增ai广场帖子失败", log.Any("alPlaza", alPlaza), log.E(err)) return } return } func (p *ShareReq) shareAiImageToVideo(uid uint64) (err error) { // 查询该笔订单是否存在 data, err := aiimagetovideomod.GetInfo(p.OrderId) if err != nil { return stderr.ErrDbQueryError } if data.UID != uid || data.Status != int(aiimagetovideomod.StatusGenerationSuccess) { return stderr.ErrDbQueryError } // 修改订单状态 if _, err = aiimagetovideomod.UpdateByID(nil, p.OrderId, bson.M{ "shareStatus": 1, "shareTitle": p.Title, }); err != nil { return stderr.ErrDbUpdateError } // 新增一个分享 alPlaza := aiplazamod.AiPlaza{ Type: 4, OrderId: data.ID, Template: "", Uid: data.UID, Title: p.Title, OriginalImage: data.ImgUrl, OriginalVideo: "", OriginContent: "", GenerateImage: data.NewImgUrl, GenerateVideo: "", Status: aiplazamod.DefaultStatus, } _, err = aiplazamod.Insert(nil, alPlaza) if err != nil { log.Error("新增ai广场帖子失败", log.Any("alPlaza", alPlaza), log.E(err)) return } return } func (p *ShareReq) shareAiTextToImage(uid uint64) (err error) { // 查询该笔订单是否存在 data, err := aitexttoimagemod.GetInfo(p.OrderId) if err != nil { return stderr.ErrDbQueryError } if data.UID != uid || data.Status != int(aitexttoimagemod.StatusGenerationSuccess) { return stderr.ErrDbQueryError } // 修改订单状态 if _, err = aitexttoimagemod.UpdateByID(nil, p.OrderId, bson.M{ "shareStatus": 1, "shareTitle": p.Title, }); err != nil { return stderr.ErrDbUpdateError } // 新增一个分享 alPlaza := aiplazamod.AiPlaza{ Type: 5, OrderId: data.ID, Template: "", Uid: data.UID, Title: p.Title, OriginalImage: "", OriginalVideo: "", OriginContent: data.Text, GenerateImage: data.NewImgUrl, GenerateVideo: "", Status: aiplazamod.DefaultStatus, } _, err = aiplazamod.Insert(nil, alPlaza) if err != nil { log.Error("新增ai广场帖子失败", log.Any("alPlaza", alPlaza), log.E(err)) return } return }