package pay import ( "context" "go_dreamfactory/comm" "go_dreamfactory/lego/base" "go_dreamfactory/lego/core" "go_dreamfactory/lego/sys/log" "go_dreamfactory/modules" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go.mongodb.org/mongo-driver/bson/primitive" ) /* 模块名:支付系统 描述:充值商城 开发:李伟 */ func NewModule() core.IModule { m := new(Pay) return m } type Pay struct { modules.ModuleBase service base.IRPCXService api *apiComp modelPay *modelPayComp modelPayUser *modelPayUserComp modelDaily *modelDailyComp privilege comm.IPayDelivery //月卡 configure *configureComp } //模块名 func (this *Pay) GetType() core.M_Modules { return comm.ModulePay } //模块初始化接口 注册用户创建角色事件 func (this *Pay) Init(service core.IService, module core.IModule, options core.IModuleOptions) (err error) { err = this.ModuleBase.Init(service, module, options) this.service = service.(base.IRPCXService) return } func (this *Pay) Start() (err error) { err = this.ModuleBase.Start() var module core.IModule if module, err = this.service.GetModule(comm.ModulePrivilege); err != nil { return } this.privilege = module.(comm.IPayDelivery) this.service.RegisterFunctionName(string(comm.Rpc_ModulePayDelivery), this.Rpc_ModulePayDelivery) return } //装备组件 func (this *Pay) OnInstallComp() { this.ModuleBase.OnInstallComp() this.api = this.RegisterComp(new(apiComp)).(*apiComp) this.modelPay = this.RegisterComp(new(modelPayComp)).(*modelPayComp) this.modelPayUser = this.RegisterComp(new(modelPayUserComp)).(*modelPayUserComp) this.modelDaily = this.RegisterComp(new(modelDailyComp)).(*modelDailyComp) this.configure = this.RegisterComp(new(configureComp)).(*configureComp) } //RPC----------------------------------------------------------------------------------------------------------------------- func (this *Pay) Rpc_ModulePayDelivery(ctx context.Context, args *pb.PayDeliveryReq, reply *pb.PayDeliveryResp) (err error) { this.Debug("Rpc_ModulePayDelivery", log.Field{Key: "args", Value: args.String()}) var ( conf *cfg.GameRechargeData info *pb.DBUserPay res []*cfg.Gameatn items []*pb.UserAssets session comm.IUserSession errdata *pb.ErrorData online bool ) if conf, err = this.configure.getGameRecharge(args.Productid); err != nil { reply.Code = pb.ErrorCode_ConfigNoFound return } if info, err = this.modelPayUser.queryUserPay(args.Uid); err != nil { reply.Code = pb.ErrorCode_DBError return } if info.Record[args.Productid] > 0 { res = conf.Vipexp } else { res = conf.DiamondNumDouble } info.Record[args.Productid]++ defer func() { this.PutUserSession(session) }() if session, online = this.GetUserSession(args.Uid); online { if errdata = this.DispenseRes(session, res, true); errdata != nil { reply.Code = errdata.Code return } } else { if errdata = this.DispenseRes(session, res, false); errdata != nil { reply.Code = errdata.Code return } } if err = this.modelPay.addUserPayOrder(&pb.DBPayOrder{ Orderid: args.Orderid, Uid: args.Uid, Productid: args.Productid, Ctime: configure.Now().Unix(), }); err != nil { reply.Code = pb.ErrorCode_DBError return } this.modelPayUser.updateUserPay(info) switch conf.RechargeType { case 1: break case 2: if errdata, items = this.modelDaily.delivery(session, args.Productid); errdata != nil { reply.Code = errdata.Code return } break case 3: if errdata, items = this.privilege.Delivery(session, args.Productid); errdata != nil { reply.Code = errdata.Code return } break } for _, v := range res { items = append(items, &pb.UserAssets{A: v.A, T: v.T, N: v.N}) } session.SendMsg(string(this.GetType()), "shipped", &pb.PayShippedPush{ Pid: args.Productid, Orderid: args.Orderid, Items: items, Info: info, }) if online { if err = session.Push(); err != nil { this.Errorln(err) return } } go this.ModuleHero.RechargeMoney(args.Uid, conf.Amount) return } //发货 func (this *Pay) ModulePayDelivery(session comm.IUserSession, Productid string, Price int32) (errdata *pb.ErrorData) { var ( conf *cfg.GameRechargeData info *pb.DBUserPay res []*cfg.Gameatn items []*pb.UserAssets err error online bool ) if conf, err = this.configure.getGameRecharge(Productid); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_ConfigNoFound, Title: pb.ErrorCode_ConfigNoFound.ToString(), Message: err.Error(), } return } if info, err = this.modelPayUser.queryUserPay(session.GetUserId()); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } if info.Record[Productid] > 0 { res = conf.Vipexp } else { res = conf.DiamondNumDouble } info.Record[Productid]++ if errdata = this.DispenseRes(session, res, true); errdata != nil { return } orderid := primitive.NewObjectID().Hex() if err = this.modelPay.addUserPayOrder(&pb.DBPayOrder{ Orderid: orderid, Uid: session.GetUserId(), Productid: Productid, Ctime: configure.Now().Unix(), }); err != nil { errdata = &pb.ErrorData{ Code: pb.ErrorCode_DBError, Title: pb.ErrorCode_DBError.ToString(), Message: err.Error(), } return } this.modelPayUser.updateUserPay(info) switch conf.RechargeType { case 1: break case 2: if errdata, items = this.modelDaily.delivery(session, Productid); errdata != nil { return } break case 3: if errdata, items = this.privilege.Delivery(session, Productid); errdata != nil { return } break } for _, v := range res { items = append(items, &pb.UserAssets{A: v.A, T: v.T, N: v.N}) } session.SendMsg(string(this.GetType()), "shipped", &pb.PayShippedPush{ Pid: Productid, Orderid: orderid, Items: items, Info: info, }) if online { if err = session.Push(); err != nil { this.Errorln(err) return } } go this.ModuleHero.RechargeMoney(session.GetUserId(), conf.Amount) return }