@@ -0,0 +1,218 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/log"
|
||||
"91porn-server/common/stderr"
|
||||
"91porn-server/models/commod"
|
||||
"91porn-server/models/v/modulesectionmod"
|
||||
"91porn-server/models/v/modulevidmod"
|
||||
"91porn-server/models/v/tagmod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
"91porn-server/models/v/vidtimeonlinemod"
|
||||
"91porn-server/web/service/video_media_service"
|
||||
"fmt"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type vidTimeOnlineInfo struct {
|
||||
VidId primitive.ObjectID `json:"vidId"`
|
||||
VidType string `json:"vidType"`
|
||||
SourceURL string `json:"sourceURL"`
|
||||
ReviewAccount string `json:"reviewAccount"`
|
||||
}
|
||||
|
||||
var vidTimeOnlineIsRuining = false
|
||||
|
||||
// 视频自动上架
|
||||
func VidTimeOnline() {
|
||||
common.Go(func() {
|
||||
log.Info("video time online start...")
|
||||
if vidTimeOnlineIsRuining {
|
||||
log.Info("video time online already executed")
|
||||
return
|
||||
}
|
||||
vidTimeOnlineIsRuining = true
|
||||
defer func() {
|
||||
vidTimeOnlineIsRuining = false
|
||||
}()
|
||||
log.Info("video time online execute")
|
||||
handleVidTimeOnline()
|
||||
log.Info("video time online end...")
|
||||
})
|
||||
}
|
||||
|
||||
func handleVidTimeOnline() {
|
||||
//每次取十条数据,定期上线
|
||||
vidInfs, err := vidtimeonlinemod.GetByPage(commod.Page{PageNumber: 1, PageSize: 100})
|
||||
if err != nil {
|
||||
log.Error("video time online eonlinemod.GetByPage err", log.E(err))
|
||||
return
|
||||
}
|
||||
if len(vidInfs) == 0 {
|
||||
log.Info("video time online vidInfs == 0")
|
||||
return
|
||||
}
|
||||
|
||||
//上架
|
||||
resIds := passVids(vidInfs)
|
||||
//从自动上架表中移除已经上架的帖子数据
|
||||
if len(resIds) > 0 {
|
||||
if err = vidtimeonlinemod.DeleteByVids(resIds); err != nil {
|
||||
log.Warn("video time online vidtimeonlinemod.DeleteByVids err", log.Any("err", err))
|
||||
return
|
||||
}
|
||||
}
|
||||
log.Info("video time online resIds", log.Any("resIds", resIds))
|
||||
}
|
||||
|
||||
// passVids 批量自动上架
|
||||
func passVids(vidIds []vidtimeonlinemod.VidTimeOnlineModel) (resIds []primitive.ObjectID) {
|
||||
var uploadRecord []vidmod.UploadMediaVideo
|
||||
var records []modulevidmod.SectionVideo
|
||||
for _, vid := range vidIds {
|
||||
//非图集才需要同步
|
||||
isCover := vid.VidType == vidmod.COVER || vid.VidType == vidmod.PIC
|
||||
log.Info("vid time online", log.Any("isCover", isCover), log.Any("vid", vid))
|
||||
// 查询视频信息
|
||||
videoInfo, err := vidmod.GetVideoInfo(vid.VidId.Hex())
|
||||
if err != nil {
|
||||
log.Warn("vid time online passVids vidmod.GetVideoInfo err,", log.Any("err", err), log.Any("vid", vid.VidId))
|
||||
return resIds
|
||||
}
|
||||
log.Info("vid time online", log.Any("status", videoInfo.Status), log.Any("MDSID", videoInfo.MDSID), log.Any("videoInfo.Filename", videoInfo.Filename))
|
||||
// 媒资库的不做任何校验,因为给过来的这部分数据的sourceID有问题
|
||||
if videoInfo.MDSID == "" && !isCover && !strings.Contains(videoInfo.Filename, "mzk_") {
|
||||
if code := SyncFileFromFs(vid.VidId.Hex()); code != stderr.UpLoadFileComplete {
|
||||
log.Warn("vid time online passVids syncFileFromFs err,", log.Any("code", code), log.Any("vid", vid.VidId))
|
||||
continue
|
||||
}
|
||||
}
|
||||
tagSort := make(bson.M, len(videoInfo.Tags))
|
||||
for _, v := range videoInfo.Tags {
|
||||
tagSort[v.Hex()] = 0
|
||||
}
|
||||
|
||||
if videoInfo.Status == 1 {
|
||||
resIds = append(resIds, videoInfo.ID)
|
||||
continue
|
||||
}
|
||||
if (videoInfo.NewsType == vidmod.SP || videoInfo.NewsType == vidmod.SHORT) && !strings.Contains(videoInfo.Filename, "mzk_") {
|
||||
var width, height int
|
||||
resolutions := strings.Split(videoInfo.Resolution, "*")
|
||||
if len(resolutions) >= 2 {
|
||||
width, _ = strconv.Atoi(resolutions[0])
|
||||
height, _ = strconv.Atoi(resolutions[1])
|
||||
}
|
||||
if len(resolutions) != 2 {
|
||||
resolutions = strings.Split(videoInfo.Resolution, "x")
|
||||
if len(resolutions) >= 2 {
|
||||
width, _ = strconv.Atoi(resolutions[0])
|
||||
height, _ = strconv.Atoi(resolutions[1])
|
||||
}
|
||||
}
|
||||
var tags string
|
||||
if len(videoInfo.Tags) > 0 {
|
||||
for _, v := range videoInfo.Tags {
|
||||
tagData, err := tagmod.FindOneTagByID(v)
|
||||
if err == nil {
|
||||
if tags != "" {
|
||||
tags += "," + tagData.TagName
|
||||
} else {
|
||||
tags += tagData.TagName
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
uploadRecord = append(uploadRecord, vidmod.UploadMediaVideo{
|
||||
FsResourceId: videoInfo.SourceID,
|
||||
HashId: videoInfo.MD5,
|
||||
Title: videoInfo.Title,
|
||||
Length: int(videoInfo.PlayTime),
|
||||
FileSize: videoInfo.Size,
|
||||
M3u8Src: videoInfo.SourceURL,
|
||||
Height: height,
|
||||
Width: width,
|
||||
CoverImage: videoInfo.Cover,
|
||||
TagsText: tags,
|
||||
})
|
||||
}
|
||||
video, err := vidmod.PassVidsOnlineTime(vid.VidId, 1, "", vid.ReviewAccount, vid.OnlineTime, tagSort)
|
||||
if err != nil {
|
||||
log.Warn("vid time online passVids vidmod.PassVids err,", log.Any("err", err), log.Any("vid", video.ID))
|
||||
return resIds
|
||||
}
|
||||
if !vid.SectionId.IsZero() {
|
||||
// 获取专题
|
||||
section, err := modulesectionmod.GetBySectionByID(vid.SectionId)
|
||||
if err != nil {
|
||||
log.Error("vid time online modulesectionmod.GetBySectionByID fail", log.Any("vid.SectionId", vid.SectionId), log.E(err))
|
||||
continue
|
||||
}
|
||||
if !section.ID.IsZero() {
|
||||
// 判断当前专题下是否已经有该记录,没有则添加
|
||||
sectionVids, err := modulevidmod.GetBySectionIDAndVids(section.ID, []primitive.ObjectID{vid.VidId})
|
||||
if err != nil {
|
||||
log.Error("vid time online modulevidmod.GetBySectionIDAndVids( fail", log.Any("vid.SectionId", vid.SectionId), log.Any("vid.VidId", vid.VidId), log.E(err))
|
||||
continue
|
||||
}
|
||||
if len(sectionVids) == 0 {
|
||||
records = append(records, modulevidmod.SectionVideo{
|
||||
SectionID: section.ID,
|
||||
VideoID: vid.VidId,
|
||||
VideoReviewedAt: vid.OnlineTime,
|
||||
})
|
||||
}
|
||||
// 修改帖子的mId
|
||||
update := bson.M{}
|
||||
update["updatedAt"] = time.Now()
|
||||
update["mId"] = section.SubModuleID.Hex()
|
||||
vidmod.UpdateOneByID(vid.VidId, update)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
resIds = append(resIds, video.ID)
|
||||
}
|
||||
|
||||
if len(records) > 0 {
|
||||
err := modulevidmod.InsertMany(records)
|
||||
if err != nil {
|
||||
log.Error("vid time online AddVidTimeOnlineInfo moduleVidMod InsertMany error", log.Any("records", records), log.Any("err", err))
|
||||
return resIds
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
log.Info("vid time online", log.Any("uploadRecord", uploadRecord))
|
||||
// 处理上传媒资库
|
||||
if len(uploadRecord) > 0 {
|
||||
var err error
|
||||
var sourceIDs []string
|
||||
var errSourceIDs []string
|
||||
for _, info := range uploadRecord {
|
||||
if info.Length > 300 {
|
||||
err = video_media_service.UploadSkdVideoMedia(info)
|
||||
} else {
|
||||
err = video_media_service.UploadSkdShortVideoMedia(info)
|
||||
}
|
||||
if err != nil {
|
||||
errSourceIDs = append(errSourceIDs, info.FsResourceId)
|
||||
log.Info(fmt.Sprintf("vid time online UploadVideoMedia err%v;errSourceIDs%v", err, errSourceIDs))
|
||||
continue
|
||||
}
|
||||
sourceIDs = append(sourceIDs, info.FsResourceId)
|
||||
}
|
||||
if err != nil {
|
||||
log.Info(fmt.Sprintf("vid time online UploadVideoMedia err%v;errSourceIDs%v", err, errSourceIDs))
|
||||
return resIds
|
||||
}
|
||||
log.Info(fmt.Sprintf("vid time online UploadVideoMedia sucess sourceIDs%v", sourceIDs))
|
||||
}
|
||||
|
||||
return resIds
|
||||
}
|
||||
Reference in New Issue
Block a user