go-common/app/admin/main/videoup/service/track.go
2019-04-22 18:49:16 +08:00

139 lines
3.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"context"
"sort"
"go-common/app/admin/main/videoup/model/archive"
"go-common/app/admin/main/videoup/model/track"
"go-common/library/log"
)
const (
historyTimeMin = 0
historyTimeMax = 0x7fffffffffffffff
)
// TrackArchive get archive list.
func (s *Service) TrackArchive(c context.Context, aid int64) (archive []*track.Archive, err error) {
if archive, err = s.track.ArchiveTrack(c, aid); err != nil {
log.Error("s.track.ArchiveTrack(%d) error(%v)", aid, err)
return
}
sort.Sort(track.Archives(archive))
return
}
//TrackArchiveInfo 稿件信息追踪
func (s *Service) TrackArchiveInfo(c context.Context, aid int64) (info *track.ArcTrackInfo, err error) {
relation := [][]int{}
editHistory, err := s.AllEditHistory(c, aid)
if err != nil {
log.Error("TrackArchiveInfo s.AllEditHistory(aid(%d)) error(%v)", aid, err)
return
}
tr, err := s.TrackArchive(c, aid)
if err != nil {
log.Error("TrackArchiveInfo s.TrackArchive(aid(%d)) error(%v)", aid, err)
return
}
//2个降序数组track根据history聚合
cpHistoryTime := []int64{historyTimeMax}
for _, h := range editHistory {
cpHistoryTime = append(cpHistoryTime, int64(h.ArcHistory.CTime))
}
cpHistoryTime = append(cpHistoryTime, historyTimeMin)
index := 0
histlen := len(cpHistoryTime) - 1
for i := 1; i <= histlen; i++ {
rela := []int{}
for ; index < len(tr); index++ {
t := int64(tr[index].Timestamp)
if t >= cpHistoryTime[i] && t < cpHistoryTime[i-1] {
rela = append(rela, index)
continue
}
break
}
if i == histlen && len(rela) == 0 {
continue
}
relation = append(relation, rela)
}
info = &track.ArcTrackInfo{
EditHistory: editHistory,
Track: tr,
Relation: relation,
}
return
}
//TrackHistoryDetail 稿件某条编辑历史的详细情况
func (s *Service) TrackHistoryDetail(c context.Context, hid int64) (h *archive.EditHistory, err error) {
if h, err = s.EditHistory(c, hid); err != nil {
log.Error("TrackHistoryDetail s.EditHistory(hid(%d)) error(%v)", hid, err)
return
}
if h == nil {
return
}
//获取最新的src_type
cids := []int64{}
for _, vh := range h.VHistory {
cids = append(cids, vh.CID)
}
srcTypes, err := s.arc.VideoSrcTypeByIDs(c, cids)
if err != nil {
log.Error("TrackHistoryDetail s.arc.VideoSrcTypeByID(hid(%d)) error(%v)", hid, err)
return
}
for _, vh := range h.VHistory {
vh.SRCType = srcTypes[vh.CID]
}
return
}
// TrackVideo get video process.
func (s *Service) TrackVideo(c context.Context, filename string, aid int64) (video []*track.Video, err error) {
if video, err = s.track.VideoTrack(c, filename, aid); err != nil {
log.Error("s.track.VideoTrack(%s) error(%v)", filename, err)
return
}
//以下努力均为获取当时视频审核的属性
vid, err := s.arc.VIDByAIDFilename(c, aid, filename)
if err != nil {
log.Error("s.arc.VIDByAIDFilename error(%v), filename(%s)", err, filename)
return
}
if vid <= 0 {
return
}
attrs, ctimes, err := s.arc.VideoOperAttrsCtimes(c, vid)
if err != nil {
log.Error("s.arc.VideoOperAttrsCtimes error(%v) vid(%d)", err, vid)
return
}
for _, tk := range video {
i := 0
for ; i < len(attrs); i++ {
if ctimes[i] > int64(tk.Timestamp) {
continue
}
tk.Attribute = attrs[i]
break
}
}
return
}