You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.2 KiB
53 lines
1.2 KiB
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.Mail = uint32(redPoints.Mail) |
|
SendNR(uid, int(pb.ServerCommonResp_CommonRedPointResp), one, "common") |
|
}
|
|
|