package v1 import ( "context" "designs/app/common/request" "designs/app/common/response" "designs/config" "designs/global" "designs/model" "github.com/gin-gonic/gin" "github.com/pkg/errors" "gorm.io/gorm" "strconv" "strings" "time" ) var ActionModes = map[string]string{ "login": "login", "alive": "alive", "close": "close", "seeAds": "seeAds", } func ReceiveGameMsg(c *gin.Context) { form := request.Check(c, &struct { //Gid string `form:"gid" json:"gid" binding:"required"` //Pf string `form:"pf" json:"pf" binding:"required"` UserId int `form:"userId" json:"userId" binding:"required"` Action string `form:"action" json:"action" binding:"required"` Timestamp int64 `form:"timestamp" json:"timestamp" binding:"required"` AdsId string `form:"adsId" json:"adsId" binding:""` AdsType string `form:"adsType" json:"adsType" binding:""` AdsScene string `form:"adsScene" json:"adsScene" binding:""` AdsState int `form:"adsState" json:"adsState" binding:""` }{}) gid := c.GetString("gid") pf := c.GetString("pf") now := time.UnixMilli(form.Timestamp) var err error if form.Action == "login" { //登录 err = login(gid, pf, form.UserId, now) } else if form.Action == "online" { //活跃 err = online(gid, pf, form.UserId, now) } else if form.Action == "offline" { //断开 err = offline(gid, pf, form.UserId, now) } else if form.Action == "seeAds" { //观看广告 err = seeAds(gid, pf, form.UserId, now, form.AdsId, form.AdsType, form.AdsScene, form.AdsState) } if err != nil { response.Fail(c, 1003, err.Error()) return } response.Success(c, gin.H{}) } func login(gid string, pf string, userId int, now time.Time) error { var user model.User err := global.App.DB.Table("user").Where("id", gid).Where("pf", pf).Where("userId", userId).Find(&user).Error if errors.Is(err, gorm.ErrRecordNotFound) { //没有用户,需要新增 user.UserId = userId user.Gid = gid user.Pf = pf user.CreatedAt = now err = global.App.DB.Table("user").Create(&user).Error if err != nil { global.App.Log.Error("创建用户失败", err.Error(), user) return err } } userLogin := model.UserLogin{ Gid: gid, Pf: pf, UserId: userId, LoginTime: now, } err = global.App.DB.Table("user_login").Create(&userLogin).Error if err != nil { global.App.Log.Error("存储用户登录信息失败", err.Error(), user) return err } userOnline := model.UserOnline{ Gid: gid, Pf: pf, UserId: userId, LogTime: now, Date: now.Format("20060102"), Type: 1, } err = global.App.DB.Table("user_online").Create(&userOnline).Error if err != nil { global.App.Log.Error("存储用户活跃信息失败", err.Error(), userOnline) return err } return nil } func online(gid string, pf string, userId int, now time.Time) error { userOnline := model.UserOnline{ Gid: gid, Pf: pf, UserId: userId, LogTime: now, Date: now.Format("20060102"), Type: 1, } err := global.App.DB.Table("user_online").Create(&userOnline).Error if err != nil { global.App.Log.Error("存储用户活跃信息失败", err.Error(), userOnline) return err } return nil } func offline(gid string, pf string, userId int, now time.Time) error { userOnline := model.UserOnline{ Gid: gid, Pf: pf, UserId: userId, LogTime: now, Date: now.Format("20060102"), Type: 2, } err := global.App.DB.Table("user_online").Create(&userOnline).Error if err != nil { global.App.Log.Error("存储用户活跃信息失败", err.Error(), userOnline) return err } return nil } func seeAds(gid string, pf string, userId int, now time.Time, AdsId string, AdsType string, AdsScene string, AdsState int) error { if AdsId == "" || AdsType == "" || AdsScene == "" { return errors.New("参数缺失") } userOnline := model.UserSeeAds{ Gid: gid, Pf: pf, UserId: userId, CreatedAt: now, Date: now.Format("20060102"), AdsId: AdsId, AdsType: AdsType, AdsState: AdsState, AdsScene: AdsScene, } err := global.App.DB.Table("user_see_ads").Create(&userOnline).Error if err != nil { global.App.Log.Error("存储用户活跃信息失败", err.Error(), userOnline) return err } return nil } func InitUser(c *gin.Context) { gidKey := config.Get("app.gid") + "*" keys, _ := global.App.Redis.Keys(context.Background(), gidKey).Result() for _, key := range keys { gid := strings.Split(key, ":")[1] userKeyWeb := gid + ":" + "web" + ":" + config.Get("app.user_table_key") + "*" //userKeyTt := gid + ":" + "tt" + ":" + config.Get("app.user_table_key") //userKeyWx := gid + ":" + "wx" + ":" + config.Get("app.user_table_key") webKey, _ := global.App.Redis.Keys(context.Background(), userKeyWeb).Result() for _, v := range webKey { res, err2 := global.App.Redis.HGetAll(context.Background(), v).Result() if err2 != nil { continue } userId, _ := strconv.Atoi(res["userId"]) global.App.DB.Table("user").Create(&model.User{ Gid: res["gid"], Pf: res["pf"], UserId: userId, CreatedAt: time.Now(), }) } } response.Success(c, gin.H{}) }