192 lines
5.3 KiB
Go
192 lines
5.3 KiB
Go
package reportser
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"91jd-server/common/dataReport"
|
|
"91jd-server/common/db"
|
|
"91jd-server/common/log"
|
|
"91jd-server/middleware/ua"
|
|
"91jd-server/models/v/moduleconfmod"
|
|
"91jd-server/models/v/usermod"
|
|
"91jd-server/models/v/vidmod"
|
|
|
|
"go.mongodb.org/mongo-driver/bson/primitive"
|
|
)
|
|
|
|
type videoMeta struct {
|
|
mediaID string
|
|
videoTypeID string
|
|
videoTypeName string
|
|
videoContentType string
|
|
}
|
|
|
|
func (m videoMeta) toEventCore(videoID, title string, recommendTraceID string) dataReport.VideoEventCore {
|
|
return dataReport.VideoEventCore{
|
|
MediaID: m.mediaID,
|
|
VideoID: videoID,
|
|
VideoTitle: title,
|
|
VideoTypeID: m.videoTypeID,
|
|
VideoTypeName: m.videoTypeName,
|
|
VideoContentType: m.videoContentType,
|
|
RecommendTraceID: recommendTraceID,
|
|
}
|
|
}
|
|
|
|
func ReportVideoLikeEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string, video *vidmod.VideoModel, cancel bool) error {
|
|
if user == nil || video == nil || video.ID.IsZero() {
|
|
return nil
|
|
}
|
|
flag := int64(1)
|
|
if cancel {
|
|
flag = 2
|
|
}
|
|
meta := extractVideoMeta(video)
|
|
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoLike, user.UID, user.DistrictCode, ua, ip)
|
|
event.Payload = jsonRawMessage(&dataReport.VideoLikeEvent{
|
|
VideoEventCore: meta.toEventCore(video.ID.Hex(), video.Title, ""),
|
|
Flag: jsonNumber(flag),
|
|
})
|
|
return persistEvent(t, event)
|
|
}
|
|
|
|
func ReportVideoCollectEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string, video *vidmod.VideoModel, cancel bool) error {
|
|
if user == nil || video == nil || video.ID.IsZero() {
|
|
return nil
|
|
}
|
|
flag := int64(1)
|
|
if cancel {
|
|
flag = 2
|
|
}
|
|
meta := extractVideoMeta(video)
|
|
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoCollect, user.UID, user.DistrictCode, ua, ip)
|
|
event.Payload = jsonRawMessage(&dataReport.VideoCollectEvent{
|
|
VideoEventCore: meta.toEventCore(video.ID.Hex(), video.Title, ""),
|
|
Flag: jsonNumber(flag),
|
|
})
|
|
return persistEvent(t, event)
|
|
}
|
|
|
|
func ReportVideoCommentEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string, video *vidmod.VideoModel, comment string) error {
|
|
if user == nil || video == nil || video.ID.IsZero() {
|
|
return nil
|
|
}
|
|
meta := extractVideoMeta(video)
|
|
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoComment, user.UID, user.DistrictCode, ua, ip)
|
|
event.Payload = jsonRawMessage(&dataReport.VideoCommentEvent{
|
|
VideoEventCore: meta.toEventCore(video.ID.Hex(), video.Title, ""),
|
|
CommentContent: comment,
|
|
})
|
|
return persistEvent(t, event)
|
|
}
|
|
|
|
func ReportVideoStatusChangeEvent(video *vidmod.VideoModel, flag int64) {
|
|
if video == nil || video.ID.IsZero() || flag == 0 {
|
|
return
|
|
}
|
|
user, err := usermod.FindUserByUID(video.PublisherID)
|
|
if err != nil || user == nil {
|
|
return
|
|
}
|
|
meta := extractVideoMeta(video)
|
|
uaInfo := ua.UA{SysType: "PC"}
|
|
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoStatusChange, user.UID, user.DistrictCode, uaInfo, "")
|
|
event.Payload = jsonRawMessage(&dataReport.VideoStatusChangeEvent{
|
|
MediaID: meta.mediaID,
|
|
VideoID: video.ID.Hex(),
|
|
VideoTitle: video.Title,
|
|
VideoTypeID: meta.videoTypeID,
|
|
VideoTypeName: meta.videoTypeName,
|
|
Flag: jsonNumber(flag),
|
|
})
|
|
if err := persistEvent(nil, event); err != nil {
|
|
log.Error("ReportVideoStatusChangeEvent fail", log.Any("video", video.ID.Hex()), log.E(err))
|
|
}
|
|
}
|
|
|
|
func ReportVideoStatusChangeByIDs(ids []primitive.ObjectID, flag int64) {
|
|
if len(ids) == 0 || flag == 0 {
|
|
return
|
|
}
|
|
videos, err := vidmod.GetVideoListByIDsNoStatus(ids)
|
|
if err != nil {
|
|
log.Error("ReportVideoStatusChangeByIDs fail", log.E(err))
|
|
return
|
|
}
|
|
for _, video := range videos {
|
|
if video == nil || video.ID.IsZero() {
|
|
continue
|
|
}
|
|
videoCopy := *video
|
|
ReportVideoStatusChangeEvent(&videoCopy, flag)
|
|
}
|
|
}
|
|
|
|
func ReportVideoStatusByStatus(ids []primitive.ObjectID, status int) {
|
|
if flag := VideoStatusFlag(status); flag != 0 {
|
|
ReportVideoStatusChangeByIDs(ids, flag)
|
|
}
|
|
}
|
|
|
|
func extractVideoMeta(video *vidmod.VideoModel) videoMeta {
|
|
if video == nil {
|
|
return videoMeta{}
|
|
}
|
|
meta := videoMeta{
|
|
mediaID: videoMediaID(video),
|
|
videoContentType: resolveVideoContentType(video),
|
|
}
|
|
if strings.TrimSpace(video.MID) != "" {
|
|
oid, err := primitive.ObjectIDFromHex(video.MID)
|
|
if err == nil {
|
|
module, _ := moduleconfmod.GetByID(oid)
|
|
if !module.ID.IsZero() {
|
|
meta.videoTypeID = module.ID.Hex()
|
|
meta.videoTypeName = module.ModuleName
|
|
}
|
|
}
|
|
}
|
|
if meta.videoTypeID == "" || meta.videoTypeName == "" {
|
|
meta.videoTypeID = "default"
|
|
meta.videoTypeName = "默认分类"
|
|
}
|
|
return meta
|
|
}
|
|
|
|
func videoMediaID(video *vidmod.VideoModel) string {
|
|
if video == nil {
|
|
return ""
|
|
}
|
|
if strings.EqualFold(strings.TrimSpace(video.Via), "laosiji") {
|
|
return strings.TrimSpace(video.SourceID)
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func resolveVideoContentType(video *vidmod.VideoModel) string {
|
|
if video == nil {
|
|
return ""
|
|
}
|
|
switch video.NewsType {
|
|
case vidmod.SHORT:
|
|
return "short_video"
|
|
default:
|
|
return "video"
|
|
}
|
|
}
|
|
|
|
func VideoStatusFlag(status int) int64 {
|
|
switch status {
|
|
case vidmod.OnlinePass:
|
|
return 1
|
|
case vidmod.OffShelf, vidmod.IsDeleted:
|
|
return 2
|
|
case vidmod.CheckPass, vidmod.Free:
|
|
return 3
|
|
case vidmod.CheckFailure:
|
|
return 4
|
|
default:
|
|
return 0
|
|
}
|
|
}
|