diff --git a/comm/imodule.go b/comm/imodule.go index be7dfa42b..18c6c68f1 100644 --- a/comm/imodule.go +++ b/comm/imodule.go @@ -238,6 +238,8 @@ type ( // 续费特权卡 RenewPrivilegeCard(session IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode) // 检查特权 - CheckPrivilege(session IUserSession) + CheckPrivilege(session IUserSession, cId string) (privilege *pb.DBPrivilege) + // 查询玩家当前所有特权 返回特权id + QueryPrivilege(session IUserSession) (privilegeID []int32) } ) diff --git a/modules/privilege/module.go b/modules/privilege/module.go index f41593f04..aeb21f692 100644 --- a/modules/privilege/module.go +++ b/modules/privilege/module.go @@ -3,11 +3,13 @@ package privilege import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" + "go_dreamfactory/lego/sys/event" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/sys/db" + "go_dreamfactory/utils" "go.mongodb.org/mongo-driver/bson/primitive" ) @@ -22,6 +24,8 @@ type Privilege struct { api_comp *apiComp configure *configureComp modelPrivilege *ModelPrivilege + mail comm.Imail + service core.IService } //模块名 @@ -43,6 +47,17 @@ func (this *Privilege) OnInstallComp() { this.configure = this.RegisterComp(new(configureComp)).(*configureComp) } +func (this *Privilege) Start() (err error) { + var module core.IModule + if module, err = this.service.GetModule(comm.ModuleMail); err != nil { + return + } + this.mail = module.(comm.Imail) + err = this.ModuleBase.Start() + event.RegisterGO(comm.EventUserOffline, this.EventUserOffline) + return +} + //Event------------------------------------------------------------------------------------------------------------ func (this *Privilege) EventUserOffline(session comm.IUserSession) { this.modelPrivilege.DelByUId(session.GetUserId(), db.SetDBMgoLog(false)) @@ -127,7 +142,7 @@ func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string) atn := &pb.UserAssets{ A: "vip", T: "", - N: 1, + N: 1, // 暂时只支持一次续费一次 } list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) if err != nil { @@ -169,18 +184,94 @@ func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string) return } -// 清除到期的特权 -func (this *Privilege) CheckPrivilege(session comm.IUserSession) { +// 查询特权特权 +func (this *Privilege) CheckPrivilege(session comm.IUserSession, cId string) (privilege *pb.DBPrivilege) { list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) if err != nil { return } for _, v := range list { - if v.ETime > configure.Now().Unix() { + if v.CId == cId { + if v.ETime < configure.Now().Unix() { // 判断当前特权是否过期 + if err := this.modelPrivilege.DelListlds(session.GetUserId(), v.Id); err != nil { + this.Errorf("delete privilege failed:%v", err) + } + privilege = nil + return + } + privilege = v + return + } + } + return +} + +// 查询特权信息,把过期的特权清除掉 +func (this *Privilege) QueryPrivilege(session comm.IUserSession) (privilegeID []int32) { + list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) + if err != nil { + return + } + for _, v := range list { + if v.ETime < configure.Now().Unix() { // 判断当前特权是否过期 if err := this.modelPrivilege.DelListlds(session.GetUserId(), v.Id); err != nil { this.Errorf("delete privilege failed:%v", err) } + } else { + + privilegeID = append(privilegeID, v.PrivilegeID...) + // 检查 每日奖励是否发放 + if !utils.IsToday(v.RewardTime) { + v.RewardTime = configure.Now().Unix() + if err = this.modelPrivilege.Change(session.GetUserId(), map[string]interface{}{ + "rewardTime": v.RewardTime, + }); err != nil { + this.Errorf("err:%v", err) + return + } + // 检查离上次领奖过去几天 + dt := configure.Now().Unix() - utils.GetZeroTime(v.RewardTime) + count := dt / (24 * 3600) + this.SendDailyMail(session, v.Id, int32(count+1)) + } } } return } + +func (this *Privilege) SendDailyMail(session comm.IUserSession, cId string, count int32) { + conf, err := this.configure.GetPrivilegeCard(cId) + if err != nil { + return + } + var ( + res []*pb.UserAssets + ) + for _, v := range conf.DayReward { + res = append(res, &pb.UserAssets{ + A: v.A, + T: v.T, + N: v.N, + }) + } + + // 构建一个每日奖励邮件对象 + mail := &pb.DBMailData{ + ObjId: "", + Uid: session.GetUserId(), + Title: "", + Contex: "", + CreateTime: uint64(configure.Now().Unix()), + DueTime: uint64(configure.Now().Unix() + 30*24*3600), + Check: false, + Reward: false, + Items: res, + Cid: "", + Param: []string{}, + } + for i := 0; i < int(count); i++ { + mail.ObjId = primitive.NewObjectID().Hex() + this.mail.CreateNewMail(session, mail) + } + +} diff --git a/modules/user/api_login.go b/modules/user/api_login.go index 5bf7a0fc2..cf9807b42 100644 --- a/modules/user/api_login.go +++ b/modules/user/api_login.go @@ -146,6 +146,8 @@ func (this *apiComp) Login(session comm.IUserSession, req *pb.UserLoginReq) (cod this.module.modelSign.checkResetSignData(session) this.Sign(session, &pb.UserSignReq{}) + // 检查特权 并发送每日邮件 + this.module.ModulePrivilege.QueryPrivilege(session) //推送登录公告 this.chat.SendSysChatToUser(session, comm.UserLoginNotice, 0) mail := &pb.DBMailData{