package call import ( "fmt" "reflect" "server/common" "server/db" "server/pb" "strings" "gorm.io/gorm" ) 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{} reflect.ValueOf(send).Elem().FieldByName(module).SetUint(uint64(diff)) SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), send, "common") } func PushRed(uid int) { redPoints := &common.PlayerRed{UID: uid} db.Mysql().Get(redPoints) checkMail(uid, redPoints) one := new(pb.RedPoint) one.List = append(one.List, &pb.RedInfo{ModuleName: "mail", Num: uint32(redPoints.Mail)}) SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") }