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.

232 lines
6.5 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 != "合规" {
var st = short.Short{
Compliance: 1,
Emg: rest.ErrorMsg,
}
(&short.Short{}).GetDb().Model(&short.Short{}).Where("id=?", id).Updates(&st)
}
}
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
}