package privilege import ( "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/sys/db" "go.mongodb.org/mongo-driver/bson/primitive" ) func NewModule() core.IModule { m := new(Privilege) return m } type Privilege struct { modules.ModuleBase api_comp *apiComp configure *configureComp modelPrivilege *ModelPrivilege } //模块名 func (this *Privilege) GetType() core.M_Modules { return comm.ModulePrivilege } //模块初始化接口 注册用户创建角色事件 func (this *Privilege) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) return } //装备组件 func (this *Privilege) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api_comp = this.RegisterComp(new(apiComp)).(*apiComp) this.modelPrivilege = this.RegisterComp(new(ModelPrivilege)).(*ModelPrivilege) this.configure = this.RegisterComp(new(configureComp)).(*configureComp) } //Event------------------------------------------------------------------------------------------------------------ func (this *Privilege) EventUserOffline(session comm.IUserSession) { this.modelPrivilege.DelByUId(session.GetUserId(), db.SetDBMgoLog(false)) } // 购买了一个新的特权 func (this *Privilege) CreatePrivilegeCard(session comm.IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode) { var ( data *pb.DBPrivilege bFind bool ) atn := &pb.UserAssets{ A: "vip", T: "", N: 1, } conf, err := this.configure.GetPrivilegeCard(cId) if err != nil { code = pb.ErrorCode_ConfigNoFound return nil, code } // 是不是购买过 list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) if err != nil { code = pb.ErrorCode_DBError return } for _, v := range list { if v.CId == cId { if v.ETime > configure.Now().Unix() { // 加时间 v.ETime += int64(conf.AssertDay) * 24 * 3600 } else { v.ETime = configure.Now().Unix() + int64(conf.AssertDay)*24*3600 } if err = this.modelPrivilege.Change(session.GetUserId(), map[string]interface{}{ "eTime": v.ETime, }); err != nil { this.Errorf("err:%v", err) return } data = v bFind = true break } } if !bFind { data = &pb.DBPrivilege{ Id: primitive.NewObjectID().Hex(), Uid: session.GetUserId(), CId: cId, PrivilegeID: []int32{}, CTime: configure.Now().Unix(), ETime: 0, RewardTime: configure.Now().Unix(), } data.ETime = configure.Now().Unix() + int64(conf.AssertDay*24*3600) // 设置过期时间 for _, v := range conf.PrivilegeId { data.PrivilegeID = append(data.PrivilegeID, v) } this.modelPrivilege.addNewPrivilegeData(session.GetUserId(), data) } if code = this.DispenseRes(session, []*cfg.Gameatn{conf.DisposableReward}, true); code != pb.ErrorCode_Success { return } atn.T = conf.Id res = append(res, atn) // 加资源 res = append(res, &pb.UserAssets{ A: conf.DisposableReward.A, T: conf.DisposableReward.T, N: conf.DisposableReward.N, }) // 推送 session.SendMsg(string(this.GetType()), PrivilegeGetListResp, &pb.PrivilegeGetListResp{Data: []*pb.DBPrivilege{data}}) return } // 续费特权 func (this *Privilege) RenewPrivilegeCard(session comm.IUserSession, cId string) (res []*pb.UserAssets, code pb.ErrorCode) { atn := &pb.UserAssets{ A: "vip", T: "", N: 1, } list, err := this.modelPrivilege.getPrivilegeList(session.GetUserId()) if err != nil { return } for _, v := range list { if v.CId == cId { conf, err := this.configure.GetPrivilegeCard(cId) if err != nil { code = pb.ErrorCode_ConfigNoFound return nil, code } if conf.RenewDay >= int32(configure.Now().Unix()-v.ETime)/(24*3600) { v.ETime += int64(conf.AssertDay) * 24 * 3600 mapData := make(map[string]interface{}, 0) mapData["eTime"] = v.ETime this.modelPrivilege.modifyPrivilegeData(session.GetUserId(), v.Id, mapData) // 发放奖励 if code = this.DispenseRes(session, []*cfg.Gameatn{conf.DisposableReward}, true); code != pb.ErrorCode_Success { break } session.SendMsg(string(this.GetType()), PrivilegeGetListResp, &pb.PrivilegeGetListResp{Data: []*pb.DBPrivilege{v}}) atn.T = conf.Id res = append(res, atn) // 加资源 res = append(res, &pb.UserAssets{ A: conf.DisposableReward.A, T: conf.DisposableReward.T, N: conf.DisposableReward.N, }) } else { code = pb.ErrorCode_PrivilegeRenewTime } break } } code = pb.ErrorCode_PrivilegeNotFound return } // 清除到期的特权 func (this *Privilege) CheckPrivilege(session comm.IUserSession) { 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) } } } return }