326 lines
8.8 KiB
Go
Executable File
326 lines
8.8 KiB
Go
Executable File
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
|
|
}
|