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" cfg "go_dreamfactory/sys/configure/structs" ) /* 模块名:支付系统 描述:充值商城 开发:李伟 */ func NewModule() core.IModule { m := new(Pay) return m } type Pay struct { modules.ModuleBase service base.IRPCXService api *apiComp model *modelComp modelPayUser *modelPayUserComp modelDiamond *modelDiamondComp modelDaily *modelDailyComp modelActivity *modelActivityComp //活动礼包 privilege comm.IPayDelivery //月卡 warorder comm.IWarorder //战令 shopcenter comm.IPayDelivery //购物中心 addrecharge comm.IAddrecharge //累充系统 pushgiftbag comm.IPushgiftbag //推送礼包 island comm.IIsland //海岛战令 xxlPass comm.IEntertainment //三消战令 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) { if err = this.ModuleBase.Init(service, module, options); err != nil { return } this.service = service.(base.IRPCXService) return } func (this *Pay) Start() (err error) { if err = this.ModuleBase.Start(); err != nil { return } var module core.IModule if module, err = this.service.GetModule(comm.ModulePrivilege); err != nil { return } this.privilege = module.(comm.IPayDelivery) if module, err = this.service.GetModule(comm.ModuleWarorder); err != nil { return } this.warorder = module.(comm.IWarorder) if module, err = this.service.GetModule(comm.ModuleShopCenter); err != nil { return } this.shopcenter = module.(comm.IPayDelivery) if module, err = this.service.GetModule(comm.ModuleAddrecharge); err != nil { return } this.addrecharge = module.(comm.IAddrecharge) if module, err = this.service.GetModule(comm.ModulePushgiftbag); err != nil { return } this.pushgiftbag = module.(comm.IPushgiftbag) if module, err = this.service.GetModule(comm.ModuleIsLand); err != nil { return } this.island = module.(comm.IIsland) if module, err = this.service.GetModule(comm.ModuleEntertainment); err != nil { return } this.xxlPass = module.(comm.IEntertainment) 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.model = this.RegisterComp(new(modelComp)).(*modelComp) this.modelPayUser = this.RegisterComp(new(modelPayUserComp)).(*modelPayUserComp) this.modelDiamond = this.RegisterComp(new(modelDiamondComp)).(*modelDiamondComp) this.modelDaily = this.RegisterComp(new(modelDailyComp)).(*modelDailyComp) this.modelActivity = this.RegisterComp(new(modelActivityComp)).(*modelActivityComp) this.configure = this.RegisterComp(new(configureComp)).(*configureComp) } // RPC----------------------------------------------------------------------------------------------------------------------- func (this *Pay) Rpc_ModulePayDelivery(ctx context.Context, args *pb.HttpPayDeliveryReq, reply *pb.HttpPayDeliveryResp) (err error) { this.Debug("Rpc_ModulePayDelivery", log.Field{Key: "args", Value: args.String()}) var ( order *pb.DBPayOrder conf *cfg.GameRechargeData info *pb.DBUserPay res []*cfg.Gameatn items []*pb.UserAtno session comm.IUserSession errdata *pb.ErrorData online bool ) if order, err = this.model.getmodel(args.Orderid); err != nil { return } if conf, err = this.configure.getGameRecharge(order.Bpoints); err != nil { reply.Code = pb.ErrorCode_ConfigNoFound return } if info, err = this.modelPayUser.queryUserPay(order.Uid); err != nil { reply.Code = pb.ErrorCode_DBError return } if info.Record[order.Bpoints] > 0 { res = conf.Vipexp } else { res = conf.DiamondNumDouble } if conf.Integral > 0 { res = append(res, &cfg.Gameatn{A: comm.AttrType, T: comm.Integral, N: conf.Integral}) } info.Record[order.Bpoints]++ defer func() { this.PutUserSession(session) }() if session, online = this.GetUserSession(order.Uid); online { if errdata = this.DispenseRes(session, res, true); errdata != nil { reply.Code = errdata.Code reply.Msg = errdata.Message return } } else { if errdata = this.DispenseRes(session, res, false); errdata != nil { reply.Code = errdata.Code reply.Msg = errdata.Message return } } order.State = pb.DBPayOrderState_PayOrder_Paid if err = this.model.updateState(order.Orderid, order.State); err != nil { reply.Code = pb.ErrorCode_DBError reply.Msg = err.Error() return } this.modelPayUser.updateUserPay(info) switch order.Ptype { case pb.DBPayType_DiamondShop: if errdata, items = this.modelDiamond.delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_Packs: if errdata, items = this.modelDaily.delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_MonthlyPass: if errdata, items = this.privilege.Delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_PeachBattlePass: if errdata, items = this.warorder.Delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_PeachRecharge: if errdata, items = this.modelActivity.delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_ActivityFunds: if errdata, items = this.shopcenter.Delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_PushgiftBag: if errdata, items = this.pushgiftbag.Delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_IsLandBattlePass: if errdata, items = this.island.Delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break case pb.DBPayType_XxlPass: if errdata, items = this.xxlPass.Delivery(session, order.Pid); errdata != nil { reply.Code = errdata.Code return } break } this.addrecharge.RechargeIntegral(session, conf.Integral) //记录累充积分 for _, v := range res { items = append(items, &pb.UserAtno{A: v.A, T: v.T, N: v.N}) } session.SendMsg(string(this.GetType()), "shipped", &pb.PayShippedPush{ Order: order, Items: items, Info: info, }) if online { if err = session.Push(); err != nil { this.Errorln(err) return } } go this.AsynHandleSession(session.Clone(), func(session comm.IUserSession) { this.ModuleBuried.TriggerBuried(session, comm.GetBuriedParam(comm.Rtype229, 1, conf.Pid)) this.WriteUserLog(session.GetUserId(), args, 0, "Rpc_ModulePayDelivery", res) }) return } func (this *Pay) ActivityOpenNotice(hdlist *pb.DBHuodong) { switch hdlist.Itype { case pb.HdType_HdTypePay: this.modelActivity.setopentime(1, hdlist) break case pb.HdType_ShopCenterPayPakcge: this.modelActivity.setopentime(2, hdlist) break } } // 活动关闭 func (this *Pay) ActivityCloseNotice(hdlist *pb.DBHuodong) { } // 红点需求 func (this *Pay) Reddot(session comm.IUserSession, rid map[comm.ReddotType]struct{}) (items map[comm.ReddotType]*pb.ReddotItem) { var ( selfrid []comm.ReddotType = []comm.ReddotType{comm.Reddot31101} confs []*cfg.GamePayPackageData info *pb.DBPayDaily item *pb.PayDailyItem err error ok bool ) items = make(map[comm.ReddotType]*pb.ReddotItem) for _, v := range selfrid { if _, ok = rid[v]; ok { break } } if !ok { return } if confs, err = this.configure.getPayPackageDatas(1); err != nil { return } if info, err = this.modelDaily.queryUserDaily(session.GetUserId()); err != nil { return } for _, v := range selfrid { if _, ok = rid[v]; ok { switch v { case comm.Reddot31101: for _, v := range confs { if v.Packagetype == "" && len(v.Costitem) == 0 { //免费 if item, ok = info.Items[v.Id]; !ok || item.Buyunm == 0 { items[comm.Reddot31101] = &pb.ReddotItem{ Rid: int32(comm.Reddot31101), Activated: true, } } } } break } } } return }