Files
2026-10-08 16:50:13 +08:00

262 lines
7.2 KiB
Go

package reportser
import (
"91jd-server/common/dataReport"
"91jd-server/common/db"
"91jd-server/middleware/ua"
"91jd-server/models/v/eventmod"
"91jd-server/models/v/mediamod"
"91jd-server/models/v/moduleconfmod"
"91jd-server/models/v/usermod"
"encoding/json"
"time"
)
//
// 漫画事件
//
// ReportComicPurchaseEvent 购买事件
func ReportComicPurchaseEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string,
media *mediamod.Media, orderId string) (err error) {
mediaTypeId, mediaTypeName := extractMediaModule(media)
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeComicPurchase, user.UID, user.DistrictCode, ua, ip)
event.Payload = jsonRawMessage(&dataReport.ComicPurchaseEvent{
ComicEventPub: dataReport.ComicEventPub{
MediaId: media.LsjId,
ComicId: media.ID.Hex(),
ComicTitle: media.Title,
ComicTypeId: mediaTypeId,
ComicTypeName: mediaTypeName,
RecommendTraceId: "",
},
CoinQuantity: jsonNumber(media.Price),
OrderId: orderId,
PageNo: jsonNumber(0),
})
b, _ := json.Marshal(event)
// 写入数据库
return eventmod.Insert(t, &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
}
// ReportComicCollectOrLikeEvent 收藏或者点赞事件上报
func ReportComicCollectOrLikeEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string,
media *mediamod.Media, isCollect bool, cancel bool) (err error) {
mediaTypeId, mediaTypeName := extractMediaModule(media)
var flag int64 = 1 // 点赞/收藏
if cancel {
flag = 2 // 取消点赞/取消收藏
}
eventKey := dataReport.EventTypeComicLike
if isCollect {
eventKey = dataReport.EventTypeComicCollect
}
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), eventKey, user.UID, user.DistrictCode, ua, ip)
event.Payload = jsonRawMessage(&dataReport.ComicCollectOrLikeEvent{
ComicEventPub: dataReport.ComicEventPub{
MediaId: media.LsjId,
ComicId: media.ID.Hex(),
ComicTitle: media.Title,
ComicTypeId: mediaTypeId,
ComicTypeName: mediaTypeName,
RecommendTraceId: "",
},
Flag: jsonNumber(flag),
PageNo: jsonNumber(0),
})
b, _ := json.Marshal(event)
// 写入数据库
return eventmod.Insert(t, &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
}
// ReportComicCommentEvent 评论事件
func ReportComicCommentEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string,
media *mediamod.Media, content string) (err error) {
mediaTypeId, mediaTypeName := extractMediaModule(media)
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeComicComment, user.UID, user.DistrictCode, ua, ip)
event.Payload = jsonRawMessage(&dataReport.ComicCommentEvent{
ComicEventPub: dataReport.ComicEventPub{
MediaId: media.LsjId,
ComicId: media.ID.Hex(),
ComicTitle: media.Title,
ComicTypeId: mediaTypeId,
ComicTypeName: mediaTypeName,
RecommendTraceId: "",
},
CommentContent: content,
PageNo: jsonNumber(0),
})
b, _ := json.Marshal(event)
// 写入数据库
return eventmod.Insert(t, &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
}
//
// 小说事件
//
// ReportNovelPurchaseEvent 购买事件
func ReportNovelPurchaseEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string,
media *mediamod.Media, orderId string) (err error) {
mediaTypeId, mediaTypeName := extractMediaModule(media)
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeNovelPurchase, user.UID, user.DistrictCode, ua, ip)
event.Payload = jsonRawMessage(&dataReport.NovelPurchaseEvent{
NovelEventPub: dataReport.NovelEventPub{
MediaId: media.LsjId,
NovelId: media.ID.Hex(),
NovelTitle: media.Title,
NovelTypeId: mediaTypeId,
NovelTypeName: mediaTypeName,
RecommendTraceId: "",
},
CoinQuantity: jsonNumber(media.Price),
OrderId: orderId,
PageNo: jsonNumber(0),
})
b, _ := json.Marshal(event)
// 写入数据库
return eventmod.Insert(t, &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
}
// ReportNovelCollectOrLikeEvent 收藏或者点赞事件上报
func ReportNovelCollectOrLikeEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string,
media *mediamod.Media, isCollect bool, cancel bool) (err error) {
mediaTypeId, mediaTypeName := extractMediaModule(media)
var flag int64 = 1 // 点赞/收藏
if cancel {
flag = 2 // 取消点赞/取消收藏
}
eventKey := dataReport.EventTypeNovelLike //点赞
if isCollect {
eventKey = dataReport.EventTypeNovelCollect // 收藏
}
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), eventKey, user.UID, user.DistrictCode, ua, ip)
event.Payload = jsonRawMessage(&dataReport.NovelCollectOrLikeEvent{
NovelEventPub: dataReport.NovelEventPub{
MediaId: media.LsjId,
NovelId: media.ID.Hex(),
NovelTitle: media.Title,
NovelTypeId: mediaTypeId,
NovelTypeName: mediaTypeName,
RecommendTraceId: "",
},
Flag: jsonNumber(flag),
PageNo: jsonNumber(0),
})
b, _ := json.Marshal(event)
// 写入数据库
return eventmod.Insert(t, &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
}
// ReportNovelCommentEvent 评论事件
func ReportNovelCommentEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string,
media *mediamod.Media, content string) (err error) {
mediaTypeId, mediaTypeName := extractMediaModule(media)
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeNovelComment, user.UID, user.DistrictCode, ua, ip)
event.Payload = jsonRawMessage(&dataReport.NovelCommentEvent{
NovelEventPub: dataReport.NovelEventPub{
MediaId: media.LsjId,
NovelId: media.ID.Hex(),
NovelTitle: media.Title,
NovelTypeId: mediaTypeId,
NovelTypeName: mediaTypeName,
RecommendTraceId: "",
},
CommentContent: content,
PageNo: jsonNumber(0),
})
b, _ := json.Marshal(event)
// 写入数据库
return eventmod.Insert(t, &eventmod.Event{
EventId: event.EventID,
EventType: event.Event,
Data: string(b),
Status: eventmod.Default,
CreatedAt: time.Now(),
UpdatedAt: time.Now(),
})
}
// extractMediaModule 通过media的MID获取模块ID和名称
func extractMediaModule(media *mediamod.Media) (typeID, typeName string) {
if media == nil {
return
}
if !media.MID.IsZero() {
module, _ := moduleconfmod.GetByID(media.MID)
if !module.ID.IsZero() {
typeID = module.ID.Hex()
typeName = module.ModuleName
return
}
}
typeID = "default"
typeName = "默认分类"
return
}