package service import ( "github.com/gin-gonic/gin" "sparkteam-dash/internal/http/msg" "sparkteam-dash/orm/model" "sparkteam-dash/pkg/batchtask" "sparkteam-dash/pkg/utils/timext" "time" ) var EventLog = &EventLogService{} type EventLogService struct { } func (s *EventLogService) ReportEventLog(ctx *gin.Context, req *msg.EventLogReq) *msg.EventLogResp { var err error switch req.EventType { case msg.EventTypeLogin: err = s.eventLog(req) case msg.EventTypeWatchAd: err = s.adLog(req) case msg.EventTypeBattle: err = s.battleLog(req) case msg.EventTypeGuide: err = s.guideLog(req) case msg.EventTypeOnlineDuration: err = s.onlineDurationLog(req) default: return &msg.EventLogResp{ Code: 1, Msg: "event type not support", } } if err != nil { return &msg.EventLogResp{ Code: 1, Msg: err.Error(), } } return &msg.EventLogResp{ Code: 0, Msg: "success", } } func (s *EventLogService) eventLog(req *msg.EventLogReq) error { now := time.Now() data := &model.LoginLog{ PlayerID: req.PlayerId, EventType: req.SubType, Duration: int32(req.Duration), IsNew: s.isNewPlayer(req.PlayerCreateTime), EventID: req.EventId, EventTime: now, EventDay: now, Channel: req.Channel, } batchtask.Batch.Push(data.TableName(), data) return nil } func (s *EventLogService) battleLog(req *msg.EventLogReq) error { now := time.Now() data := &model.BattleLog{ ChapterID: int32(req.ChapterId), Wave: int32(req.Wave), PlayerID: req.PlayerId, BattleTime: int32(req.BattleTime), BattleResult: int32(req.BattleResult), IsNew: s.isNewPlayer(req.PlayerCreateTime), EventTime: now, EventDay: now, Channel: req.Channel, IsRevive: int32(req.IsRevive), ReviveWave: int32(req.ReviveWave), } batchtask.Batch.Push(data.TableName(), data) return nil } func (s *EventLogService) guideLog(req *msg.EventLogReq) error { now := time.Now() data := &model.GuideLog{ GuideID: int32(req.GuideId), StepID: int32(req.StepId), PlayerID: req.PlayerId, IsNew: s.isNewPlayer(req.PlayerCreateTime), EventTime: now, EventDay: now, Channel: req.Channel, } batchtask.Batch.Push(data.TableName(), data) return nil } func (s *EventLogService) onlineDurationLog(req *msg.EventLogReq) error { now := time.Now() data := &model.OnlineDurationLog{ PlayerID: req.PlayerId, LoginAt: req.LoginAt, LogoutAt: now.Unix(), IsNew: s.isNewPlayer(req.PlayerCreateTime), IsValid: int32(req.IsValid), Channel: req.Channel, } batchtask.Batch.Push(data.TableName(), data) return nil } func (s *EventLogService) adLog(req *msg.EventLogReq) error { now := time.Now() data := &model.AdLog{ AdID: int32(req.AdId), PlayerID: req.PlayerId, Status: int32(req.Status), Channel: req.Channel, IsNew: s.isNewPlayer(req.PlayerCreateTime), EventTime: now, EventDay: now, } batchtask.Batch.Push(data.TableName(), data) return nil } func (s *EventLogService) isNewPlayer(createTime int64) int32 { if timext.IsSameDateByTs(createTime, time.Now().Unix()) { return 1 } return 0 }