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 }