You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
6.4 KiB
228 lines
6.4 KiB
package short
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"live/app/lib"
|
|
"live/app/lib/recook"
|
|
"live/app/lib/tencent"
|
|
"live/app/logic/topic"
|
|
"live/app/logic/user"
|
|
"live/app/model/baiduapi"
|
|
"live/app/model/short"
|
|
topic2 "live/app/model/topic"
|
|
user2 "live/app/model/user"
|
|
"log"
|
|
)
|
|
|
|
type Short struct {
|
|
}
|
|
|
|
// @Title 短视频上传接口
|
|
// @Param userId uint true "会员id"
|
|
// @Param goodsId uint true "推荐商品id"
|
|
// @Param topicIc uint true "参与话题id 0=未参与话题"
|
|
// @Param fileId string true "腾讯云视频id"
|
|
// @Param content string true "发布内容"
|
|
func (s *Short) Publish(userId, goodsId, topicId uint, fileId, content string, loginId, token, deviceType string) error {
|
|
info, err := tencent.Short.GetInfo(fileId)
|
|
if err != nil {
|
|
return errors.New("上传视频错误")
|
|
}
|
|
if len(info.Response.MediaInfoSet) == 0 {
|
|
return errors.New("上传视频错误")
|
|
}
|
|
fileInfo := info.Response.MediaInfoSet[0]
|
|
id := (&short.Short{}).Create(&short.Short{
|
|
UserId: userId,
|
|
GoodsId: goodsId,
|
|
TopicId: topicId,
|
|
Content: content,
|
|
FileId: fileId,
|
|
MediaUrl: fileInfo.BasicInfo.MediaUrl,
|
|
CoverUrl: fileInfo.BasicInfo.CoverUrl,
|
|
})
|
|
if id > 0 {
|
|
err := (&user.Trend{}).AddTrend(userId, id, user.TREND_TYPE_short, 1, loginId, token, deviceType)
|
|
if err != nil {
|
|
log.Println("视频上传错误, err:", err)
|
|
}
|
|
// 话题统计
|
|
if topicId > 0 {
|
|
// 参与人数
|
|
(&topic.Substance{}).AddSubstance(userId, topicId)
|
|
|
|
// 添加内容
|
|
(&topic2.Topic{}).AddPartake(topicId)
|
|
}
|
|
go videoAudit(id, content, fileInfo.BasicInfo.MediaUrl, fileInfo.BasicInfo.MediaUrl)
|
|
return nil
|
|
|
|
}
|
|
|
|
return errors.New("网络异常")
|
|
}
|
|
|
|
//新增内容,过滤短视频是否合规
|
|
func videoAudit(id uint, name string, video string, exid string) {
|
|
b := baiduapi.BdAudit{}
|
|
rest := b.VideoAudit(name, video, exid)
|
|
fmt.Println(rest, "=========")
|
|
if rest.Conclusion != "合规" {
|
|
(&short.Short{}).GetDb().Model(&short.Short{}).Where("id=?", id).Update("compliance", 1)
|
|
}
|
|
}
|
|
|
|
type TopicInfoItem struct {
|
|
recook.ReplyUserItem
|
|
Content string `json:"content"`
|
|
CoverUrl string `json:"coverUrl"`
|
|
TrendId uint `json:"trendId"`
|
|
OriginId uint `json:"originId"`
|
|
TrendType int `json:"trendType"`
|
|
Praise uint `json:"praise"`
|
|
IsPraise int `json:"isPraise"`
|
|
Goods recook.TrendGoods `json:"goods"`
|
|
MediaUrl string `json:"mediaUrl"`
|
|
TopicId uint `json:"topicId"`
|
|
TopicName string `json:"topicName"`
|
|
IsFollow int `json:"isFollow"`
|
|
}
|
|
|
|
func (s *Short) List(userId uint, page lib.Page) (result *[]TopicInfoItem, count int64, err error) {
|
|
result = &[]TopicInfoItem{}
|
|
shortModel := &short.Short{}
|
|
count = shortModel.GetListCount()
|
|
start := (page.GetPage() - 1) * page.GetLimit()
|
|
if count <= int64(start) {
|
|
// 没有数据,不需要查库
|
|
return
|
|
}
|
|
|
|
lists := shortModel.GetList(start, page.GetLimit())
|
|
|
|
err = s.formtList(userId, lists, result)
|
|
return
|
|
}
|
|
|
|
// @Title 短视频话题列表
|
|
func (s *Short) ListByTopicId(userId, topicId uint, page lib.Page) (result *[]TopicInfoItem, count int64, err error) {
|
|
result = &[]TopicInfoItem{}
|
|
shortModel := &short.Short{}
|
|
count = shortModel.GetListCountByTopicId(topicId)
|
|
start := (page.GetPage() - 1) * page.GetLimit()
|
|
if count <= int64(start) {
|
|
// 没有数据,不需要查库
|
|
return
|
|
}
|
|
|
|
lists := shortModel.GetListByTopicId(topicId, start, page.GetLimit())
|
|
err = s.formtList(userId, lists, result)
|
|
return
|
|
}
|
|
|
|
// @Title 列表数据序列号
|
|
func (s *Short) formtList(userId uint, lists []short.Short, result *[]TopicInfoItem) (err error) {
|
|
userIds := []uint{}
|
|
shortIds := []uint{}
|
|
goodsIds := []uint{}
|
|
topicIds := []uint{}
|
|
for _, list := range lists {
|
|
userIds = append(userIds, list.UserId)
|
|
shortIds = append(shortIds, list.Id)
|
|
goodsIds = append(goodsIds, list.GoodsId)
|
|
if list.TopicId > 0 {
|
|
topicIds = append(topicIds, list.TopicId)
|
|
}
|
|
}
|
|
|
|
// 获取会员信息
|
|
users, err := recook.User.GetUsers(userIds)
|
|
if err != nil {
|
|
return
|
|
}
|
|
userMap := map[uint]recook.ReplyUserItem{}
|
|
for _, userItem := range *users {
|
|
userMap[userItem.UserId] = userItem
|
|
}
|
|
|
|
// 获取话题信息
|
|
topicMap := map[uint]topic2.Topic{}
|
|
if len(topicIds) > 0 {
|
|
topics := (&topic2.Topic{}).GetlistByIds(topicIds)
|
|
for _, item := range topics {
|
|
topicMap[item.Id] = item
|
|
}
|
|
}
|
|
|
|
// 获取会员动态信息
|
|
trendLists := recook.Trend.Infos(shortIds, user.TREND_TYPE_short)
|
|
trendIds := []uint{}
|
|
trendUserIds := []uint{}
|
|
trendMap := map[uint]recook.TrendInfo{}
|
|
for _, trendInfo := range *trendLists {
|
|
trendIds = append(trendIds, trendInfo.Id)
|
|
trendMap[trendInfo.OriginId] = trendInfo
|
|
trendUserIds = append(trendUserIds, trendInfo.UserId)
|
|
}
|
|
|
|
// 获取商品信息
|
|
goodsInfos := recook.Trend.GetGoods(goodsIds)
|
|
|
|
// 获取动态统计信息
|
|
userTrendDataModel := &user2.UserTrendData{}
|
|
userTrendDataLists := userTrendDataModel.GetListByTrendIds(trendIds)
|
|
userTrendDataMap := map[uint]user2.UserTrendData{}
|
|
for _, item := range userTrendDataLists {
|
|
userTrendDataMap[item.TrendId] = item
|
|
}
|
|
|
|
// 当前会员是否赞过当前列表的数据
|
|
userPraiseMap := map[uint]user2.UserTrendPraise{}
|
|
if userId > 0 {
|
|
userTrendPraise := &user2.UserTrendPraise{}
|
|
userPraises := userTrendPraise.GetPraiseByUserIdAndTrendIds(userId, trendIds)
|
|
for _, praise := range userPraises {
|
|
userPraiseMap[praise.TrendId] = praise
|
|
}
|
|
}
|
|
|
|
// 当前会员是否关注过当前列表的数据
|
|
userFollowMap := map[uint]user2.UserFollow{}
|
|
if userId > 0 {
|
|
userFollow := &user2.UserFollow{}
|
|
userFollows := userFollow.GetByUserIdAndFollowIds(userId, trendUserIds)
|
|
for _, follow := range userFollows {
|
|
userFollowMap[follow.FollowUserId] = follow
|
|
}
|
|
}
|
|
|
|
for _, list := range lists {
|
|
trendInfo := trendMap[list.Id]
|
|
hasPraise := 0
|
|
if _, ok := userPraiseMap[trendInfo.Id]; ok {
|
|
hasPraise = 1
|
|
}
|
|
hasFollow := 0
|
|
if _, ok := userFollowMap[trendInfo.UserId]; ok {
|
|
hasFollow = 1
|
|
}
|
|
*result = append(*result, TopicInfoItem{
|
|
ReplyUserItem: userMap[list.UserId],
|
|
Content: list.Content,
|
|
CoverUrl: list.CoverUrl,
|
|
TrendId: trendInfo.Id,
|
|
OriginId: trendInfo.OriginId,
|
|
TrendType: trendInfo.TrendType,
|
|
Praise: userTrendDataMap[trendInfo.Id].Praise,
|
|
IsPraise: hasPraise,
|
|
IsFollow: hasFollow,
|
|
Goods: goodsInfos[list.GoodsId],
|
|
MediaUrl: list.MediaUrl,
|
|
TopicId: list.TopicId,
|
|
TopicName: topicMap[list.TopicId].Title,
|
|
})
|
|
}
|
|
return
|
|
}
|