Compare commits

...

4 Commits

Author SHA1 Message Date
sk 808a2458fe Merge branch 'develop' of git.pogorockgames.com:mango-games/server/game into develop 2024-07-01 18:43:26 +08:00
sk 9a6ced171b 跨周问题 2024-07-01 18:43:00 +08:00
sk b067f07b2c 新邀请活动 2024-06-28 15:33:09 +08:00
sk 70768089da 跨周根据所在时区计算日期 2024-06-28 09:14:11 +08:00
8 changed files with 104 additions and 78 deletions

View File

@ -76,17 +76,15 @@ func InSameWeek(tNow, tPre time.Time) bool {
return true return true
} }
preYear, preWeek := tPre.ISOWeek() if GetWeekStartTs(tNow.Unix()) == GetWeekStartTs(tPre.Unix()) {
nowYear, nowWeek := tNow.ISOWeek()
if preYear == nowYear && preWeek == nowWeek {
return true return true
} }
return false return false
} }
func TsInSameWeek(tsNow, tsPre int64) bool { func TsInSameWeek(tsNow, tsPre int64) bool {
tNow := time.Unix(tsNow, 0) tNow := time.Unix(tsNow, 0).Local()
tPre := time.Unix(tsPre, 0) tPre := time.Unix(tsPre, 0).Local()
return InSameWeek(tNow, tPre) return InSameWeek(tNow, tPre)
} }
@ -144,22 +142,16 @@ func InTimeRange(beginHour, beginMinute, endHour, endMinute, checkHour, checkMin
return beginTime <= checkTime && checkTime <= endTime return beginTime <= checkTime && checkTime <= endTime
} }
func GetWeekTimestamp() []int64 { // GetWeekStartTs 获取本周开始的时间戳,周一为周的开始
now := time.Now().Local()
year, month, day := now.Date()
today := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
// 本周起始日期(周日)
st := today.AddDate(0, 0, -int(today.Weekday())).Unix()
et := today.AddDate(0, 0, 7-int(today.Weekday())).Unix()
return []int64{st, et}
}
func GetWeekStartTs(ts int64) int64 { func GetWeekStartTs(ts int64) int64 {
now := time.Unix(ts, 0).Local() now := time.Unix(ts, 0).Local()
year, month, day := now.Date() year, month, day := now.Date()
today := time.Date(year, month, day, 0, 0, 0, 0, time.Local) today := time.Date(year, month, day, 0, 0, 0, 0, time.Local)
// 本周起始日期(周日) n := today.Weekday()
st := today.AddDate(0, 0, -int(today.Weekday())).Unix() if today.Weekday() == 0 {
n = 7
}
st := today.AddDate(0, 0, -int(n-1)).Unix()
return st return st
} }

View File

@ -31,6 +31,15 @@ func init() {
} }
logger.Logger.Tracef("EvtInvite log:%+v", log) logger.Logger.Tracef("EvtInvite log:%+v", log)
var addRechargeScore bool
if log.Tp != common.InviteScoreCheckWeek {
addRechargeScore, err = svc.CheckInviteScore(&log.InviteScore)
if err != nil {
logger.Logger.Errorf("EvtInvite SaveInviteScore error:%v msg:%+v %+v", err, log.InviteScore, log)
return err
}
}
now := time.Unix(log.Ts, 0).Local() // 数据创建时间 now := time.Unix(log.Ts, 0).Local() // 数据创建时间
get := func(snid int32) (*model.EvtInviteAckMsg, error) { get := func(snid int32) (*model.EvtInviteAckMsg, error) {
@ -44,25 +53,6 @@ func init() {
return n, err return n, err
} }
// 增加积分
add := func(psnid, snid, level, tp int32, score, money, rate int64, addMoney bool) error {
if psnid <= 0 {
return nil
}
err = svc.AddInviteScore(log.Platform, psnid, snid, level, tp, score*rate/10000, rate, money, now, addMoney)
if err != nil {
logger.Logger.Errorf("EvtInvite add error:%v psnid:%v score:%v rate:%v", err, psnid, score, rate)
return err
}
msg, err := get(psnid)
if err != nil {
logger.Logger.Errorf("EvtInvite add find error:%v psnid:%v score:%v rate:%v", err, psnid, score, rate)
return err
}
mq.Send(model.EvtInviteAck, msg)
return nil
}
// 重置积分 // 重置积分
reset := func(snid int32) error { reset := func(snid int32) error {
if snid == 0 { if snid == 0 {
@ -110,28 +100,27 @@ func init() {
} }
} }
var addRechargeScore bool // 增加积分
if log.Tp != common.InviteScoreCheckWeek { add := func(psnid, snid, level, tp int32, score, money, rate int64, addMoney bool) error {
addRechargeScore, err = svc.CheckInviteScore(&log.InviteScore) if psnid <= 0 {
return nil
}
err = svc.AddInviteScore(log.Platform, psnid, snid, level, tp, score*rate/10000, rate, money, now, addMoney)
if err != nil { if err != nil {
logger.Logger.Errorf("EvtInvite SaveInviteScore error:%v msg:%+v %+v", err, log.InviteScore, log) logger.Logger.Errorf("EvtInvite add error:%v psnid:%v score:%v rate:%v", err, psnid, score, rate)
return err return err
} }
msg, err := get(psnid)
if err != nil {
logger.Logger.Errorf("EvtInvite add find error:%v psnid:%v score:%v rate:%v", err, psnid, score, rate)
return err
}
mq.Send(model.EvtInviteAck, msg)
return nil
} }
switch log.Tp { switch log.Tp {
case common.InviteScoreTypeBind: case common.InviteScoreTypeBind:
code, err := svc.GetCodeBySnId(log.Platform, log.InviteSnId)
if err != nil {
logger.Logger.Errorf("EvtInvite GetCodeBySnId error:%v %v", err, log.InviteSnId)
return err
}
// 绑定关系
err = svc.BindInviteSnId(log.Platform, log.SnId, log.InviteSnId, code)
if err != nil {
logger.Logger.Errorf("EvtInvite BindInviteSnId error:%v msg:%+v", err, log.InviteScore)
return err
}
// 更新绑定数量 // 更新绑定数量
// 更新邀请积分 // 更新邀请积分
// 1.邀请人增加积分 // 1.邀请人增加积分

View File

@ -56,13 +56,13 @@ func CheckInviteScore(req *model.InviteScore) (b bool, err error) {
} }
// 不能重复绑定 // 不能重复绑定
if req.Tp == common.InviteScoreTypeBind { //if req.Tp == common.InviteScoreTypeBind {
psnid, err := GetPSnId(req.Platform, req.SnId) // psnid, err := GetPSnId(req.Platform, req.SnId)
if err == nil && psnid > 0 { // if err == nil && psnid > 0 {
// 已经绑定 // // 已经绑定
return false, errors.New("already bind") // return false, errors.New("already bind")
} // }
} //}
// 必须已经绑定 // 必须已经绑定
if req.Tp != common.InviteScoreTypeBind { if req.Tp != common.InviteScoreTypeBind {
@ -260,7 +260,7 @@ func (b *BindScoreSvc) GetInviteList(req *model.InviteLisArgs, ret *model.Invite
now := time.Now().Local() now := time.Now().Local()
for _, v := range res { for _, v := range res {
if !common.InSameWeek(now, v.IScoreTs) { if !common.InSameWeek(now, v.IScoreTs.Local()) {
v.IScore = 0 v.IScore = 0
} }
roleId := common.DefaultRoleId roleId := common.DefaultRoleId

View File

@ -1548,6 +1548,15 @@ func (svc *PlayerDataSvc) GetPlayerInviteSnid(req *model.PlayerIsExistBySnIdArgs
return nil return nil
} }
func (svc *PlayerDataSvc) BindInviteSnId(args *model.BindArgs, ret *bool) error {
err := BindInviteSnId(args.Platform, args.SnId, args.PSnId, args.PCode)
if err != nil {
return err
}
*ret = true
return nil
}
func BindInviteSnId(platform string, snId, inviteSnId int32, code string) error { func BindInviteSnId(platform string, snId, inviteSnId int32, code string) error {
c := PlayerDataCollection(platform) c := PlayerDataCollection(platform)
if c == nil { if c == nil {
@ -1559,11 +1568,6 @@ func BindInviteSnId(platform string, snId, inviteSnId int32, code string) error
logger.Logger.Error("BindInviteSnId error ", err) logger.Logger.Error("BindInviteSnId error ", err)
return err return err
} }
err = c.Update(bson.M{"snid": inviteSnId}, bson.M{"$inc": bson.D{{"inum", 1}}})
if err != nil {
logger.Logger.Error("BindInviteSnId inc error ", err)
return err
}
return nil return nil
} }
@ -1619,7 +1623,12 @@ func AddInviteScore(platform string, psnId, snid, level, tp int32, num, rate, mo
myMoney = 0 myMoney = 0
} }
err = c.Update(bson.M{"snid": psnId}, bson.M{"$inc": bson.M{"iscore": num, "imoney": myMoney}, "$set": bson.M{"iscorets": now}}) addNum := int64(0)
if level == 0 && tp == common.InviteScoreTypeBind {
addNum = 1
}
err = c.Update(bson.M{"snid": psnId}, bson.M{"$inc": bson.M{"iscore": num, "imoney": myMoney, "inum": addNum}, "$set": bson.M{"iscorets": now}})
if err != nil { if err != nil {
i.RemoveId(id) i.RemoveId(id)
logger.Logger.Error("AddInviteScore error ", err) logger.Logger.Error("AddInviteScore error ", err)

View File

@ -2941,3 +2941,31 @@ func (this *PlayerData) GetRoleId() int32 {
} }
return common.DefaultRoleId return common.DefaultRoleId
} }
type BindArgs struct {
Platform string
PSnId, SnId int32
PCode string
}
func BindInviteSnId(platform string, snId, pSnId int32, code string) error {
if rpcCli == nil {
return fmt.Errorf("db may be close")
}
var args = &BindArgs{
Platform: platform,
PSnId: pSnId,
SnId: snId,
PCode: code,
}
var ret bool
err := rpcCli.CallWithTimeout("PlayerDataSvc.BindInviteSnId", args, &ret, time.Second*30)
if err != nil {
logger.Logger.Warnf("BindInviteSnId error:%v", err)
return err
}
if ret {
return nil
}
return errors.New("bind error")
}

View File

@ -440,15 +440,21 @@ func CSBindInvite(s *netlib.Session, packetid int, data interface{}, sid int64)
break break
} }
} }
SaveInviteScore(&model.InviteScore{
Platform: p.Platform, if err == nil {
SnId: p.SnId, err = model.BindInviteSnId(p.Platform, p.SnId, inviteSnId, msg.Code)
InviteSnId: inviteSnId, }
Tp: common.InviteScoreTypeBind, if err == nil {
Score: cfg.GetBindScore(), SaveInviteScore(&model.InviteScore{
Ts: now.Unix(), Platform: p.Platform,
Money: 0, SnId: p.SnId,
}) InviteSnId: inviteSnId,
Tp: common.InviteScoreTypeBind,
Score: cfg.GetBindScore(),
Ts: now.Unix(),
Money: 0,
})
}
return nil return nil
}), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) { }), task.CompleteNotifyWrapper(func(i interface{}, t task.Task) {
if err != nil { if err != nil {
@ -459,7 +465,7 @@ func CSBindInvite(s *netlib.Session, packetid int, data interface{}, sid int64)
p.PCode = msg.GetCode() p.PCode = msg.GetCode()
ret.OpRetCode = welfare.OpResultCode_OPRC_Sucess ret.OpRetCode = welfare.OpResultCode_OPRC_Sucess
send() send()
})).Start() })).StartByFixExecutor("invite_score")
})).Start() })).Start()
return nil return nil
} }

View File

@ -3,6 +3,7 @@ package main
import ( import (
"time" "time"
"mongo.games.com/game/common"
"mongo.games.com/goserver/core/module" "mongo.games.com/goserver/core/module"
) )
@ -114,9 +115,9 @@ func (this *ClockMgr) Update() {
this.LastDay = day this.LastDay = day
this.fireDayEvent() this.fireDayEvent()
_, week := tNow.ISOWeek() week := common.GetWeekStartTs(tNow.Unix())
if week != this.LastWeek { if week != int64(this.LastWeek) {
this.LastWeek = week this.LastWeek = int(week)
this.fireWeekEvent() this.fireWeekEvent()
} }

View File

@ -2269,6 +2269,7 @@ func (this *Player) OnMonthTimer() {
} }
func (this *Player) OnWeekTimer() { func (this *Player) OnWeekTimer() {
logger.Logger.Tracef("OnWeekTimer %v", time.Now())
//判断是否一天即可过滤0点多次切换 //判断是否一天即可过滤0点多次切换
if common.InSameDayNoZero(time.Now().Local(), this.lastOnWeekChange) { if common.InSameDayNoZero(time.Now().Local(), this.lastOnWeekChange) {
return return