go_dreamfactory/modules/pay/module.go
2023-11-23 17:25:42 +08:00

247 lines
6.9 KiB
Go

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 //海岛战令
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)
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
}
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
}
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(), 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) {
}