260 lines
6.5 KiB
Go
260 lines
6.5 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"
|
|
"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 //月卡
|
|
warorder comm.IWarorder //战令
|
|
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)
|
|
if module, err = this.service.GetModule(comm.ModuleWarorder); err != nil {
|
|
return
|
|
}
|
|
this.warorder = module.(comm.IWarorder)
|
|
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
|
|
case 4:
|
|
if errdata, items = this.warorder.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, args.Price)
|
|
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
|
|
case 4:
|
|
if errdata, items = this.warorder.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
|
|
}
|