package call import ( "github.com/liangdas/mqant/log" "server/common" "server/db" "server/pb" "server/util" "time" ) const ( ModuleMail = "Mail" ) // UpsertRedPointAndNotify 更新红点并通知客户端 func UpsertRedPointAndNotify(uid, num int, module string) { //red := &common.PlayerRed{UID: uid} //db.Mysql().Get(red) //val := reflect.ValueOf(red).Elem().FieldByName(module) //diff := int(val.Int()) + num //if red.ID == 0 { // if diff < 0 { // diff = 0 // } // val.SetInt(int64(diff)) // db.Mysql().Create(red) //} else { // update := map[string]interface{}{} // if num == 0 || diff <= 0 { // update[module] = 0 // val.SetInt(0) // } else { // update[module] = gorm.Expr(fmt.Sprintf("%v + ?", strings.ToLower(module)), num) // val.SetInt(int64(diff)) // } // db.Mysql().Update(&common.PlayerRed{UID: uid}, update) //} //send := &pb.RedPoint{} switch module { case ModuleMail: PushMailRed(uid) } //send.List = append(send.List, &pb.RedInfo{ModuleName: pb.RedPointModule_RedPointMail, Num: uint32(diff)}) //SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), send, "common") } func PushMailRed(uid int) { //redPoints := &common.PlayerRed{UID: uid} //db.Mysql().Get(redPoints) var user common.PlayerDBInfo err := db.Mysql().C().Model(&common.PlayerDBInfo{}).Where("id = ?", uid).Find(&user).Error if err != nil { log.Error("get user err, %s", err.Error()) return } rechargeInfo := GetRechargeInfo(uid) list := []common.Mail{} unReadCount, err := db.Mysql().QueryMailList(uid, 0, 0, user.Birth, int64(user.ChannelID), rechargeInfo.TotalRecharge, -1, true, &list) if err != nil { log.Error("get un read mail count err, %s", err.Error()) return } var platform, personal bool one := &pb.RedPoint{ Mail: 1, } for _, v := range list { if v.Tag == 0 && !platform { platform = true one.List = append(one.List, &pb.RedInfo{ModuleName: pb.RedPointModule_RedPointMail, Num: uint32(unReadCount)}) } else if v.Tag == 1 && !personal { personal = true one.List = append(one.List, &pb.RedInfo{ModuleName: pb.RedPointModule_RedPointMailPersonal, Num: uint32(unReadCount)}) } if platform && personal { break } } if unReadCount > 0 { SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") } //if redPoints.Mail > 0 { // one := new(pb.RedPoint) // one.List = append(one.List, &pb.RedInfo{ModuleName: pb.RedPointModule_RedPointMail, Num: uint32(redPoints.Mail)}) // SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") //} } func PushVipRed(uid int) { vipInfo := GetVIP(uid) configVip := GetConfigVIPWithout0() var levelBonus []int for level := 1; level <= vipInfo.Level; level++ { flag := int64(1 << level) if vipInfo.Draws&flag == 0 { levelBonus = append(levelBonus, level) } } con := GetConfigVIPByLevel(vipInfo.Level) if con == nil { return } var weekBonus bool if con.BonusWeek != 0 { // 有周奖励 if vipInfo.WeekBonusAt == 0 { // 可以领取 weekBonus = true } else { weekBonus = !util.IsSameWeek(time.Now().Unix(), vipInfo.WeekBonusAt) } } var award bool for _, v := range configVip { if util.SliceContain(levelBonus, v.Level) && v.Bonus > 0 { award = true break } if v.Level == vipInfo.Level { if weekBonus && v.BonusWeek > 0 { award = true break } } } if award { PushRed(uid, pb.RedPointModule_RedPointVipReward, 1) } } func PushWeekCard(uid int) { cons := GetConfigWeekCard() if cons == nil { return } weekCardData, err := GetWeekCardData(uid) if err != nil { return } if weekCardData.ID == 0 { return } now := time.Now() var award bool if weekCardData.ID != 0 && weekCardData.BeginAt != 0 { // 已经购买周卡的情况下 if !util.IsSameDayTimeStamp(now.Unix(), weekCardData.AwardAt) { award = true } } if award { PushRed(uid, pb.RedPointModule_RedPointWeekCard, 1) } } func PushRed(uid int, module pb.RedPointModule, num uint32) { one := new(pb.RedPoint) one.List = append(one.List, &pb.RedInfo{ModuleName: module, Num: num}) log.Debug("redpoint,uid:%v,module:%v,info:%v", uid, module, one) SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") checkMail(uid, nil) }