From c3247fcf668d8ebbd8b50f901a4630a4f7e15174 Mon Sep 17 00:00:00 2001 From: lwl0608 Date: Tue, 16 Apr 2024 21:49:18 +0800 Subject: [PATCH] fix checkwallet --- app/mix/dao/mysql.go | 14 ++++++++------ app/mix/service/apiservice.go | 2 +- app/mix/service/logic/vas.go | 22 +++++++++++----------- app/mix/service/logic/vas_zone.go | 7 ++++--- app/mix/service/vasservice.go | 2 +- 5 files changed, 25 insertions(+), 22 deletions(-) diff --git a/app/mix/dao/mysql.go b/app/mix/dao/mysql.go index 82aa56d4..1ac01ea6 100644 --- a/app/mix/dao/mysql.go +++ b/app/mix/dao/mysql.go @@ -332,12 +332,14 @@ func (m *Mysql) CreateWallet(ctx *gin.Context, tx *sqlx.Tx, mid int64) error { } // 获取钱包 -func (m *Mysql) GetWalletByMid(ctx *gin.Context, mid int64) (wallet *dbstruct.Wallet, err error) { - var ( - db = m.getDBVas() - tmpWallet dbstruct.Wallet - ) - err = db.GetContext(ctx, &tmpWallet, fmt.Sprintf("select * from %s where id = ?", TableWallet), mid) +func (m *Mysql) GetWalletByMid(ctx *gin.Context, tx *sqlx.Tx, mid int64) (wallet *dbstruct.Wallet, err error) { + var tmpWallet dbstruct.Wallet + if tx != nil { + err = tx.GetContext(ctx, &tmpWallet, fmt.Sprintf("select * from %s where id = ?", TableWallet), mid) + } else { + db := m.getDBVas() + err = db.GetContext(ctx, &tmpWallet, fmt.Sprintf("select * from %s where id = ?", TableWallet), mid) + } if err != nil { return } diff --git a/app/mix/service/apiservice.go b/app/mix/service/apiservice.go index 170e949f..83f6fd0b 100644 --- a/app/mix/service/apiservice.go +++ b/app/mix/service/apiservice.go @@ -390,7 +390,7 @@ func (s *Service) ApiGetAccountListByMid(ctx *gin.Context, req *accountproto.Api vo = &accountproto.ApiListVO{} vo.CopyAccount(account) - wallet, _ := _DefaultVas.CheckWalletExist(ctx, util.DerefInt64(req.Mid)) + wallet, _ := _DefaultVas.CheckWalletExist(ctx, nil, util.DerefInt64(req.Mid)) vo.CopyWallet(wallet) return } diff --git a/app/mix/service/logic/vas.go b/app/mix/service/logic/vas.go index f2ee8685..e447c891 100644 --- a/app/mix/service/logic/vas.go +++ b/app/mix/service/logic/vas.go @@ -328,20 +328,20 @@ func (v *Vas) CreateOrder(ctx *gin.Context, req *vasproto.CreateOrderReq) (data return } -func (v *Vas) CheckWalletExist(ctx *gin.Context, mid int64) (wallet *dbstruct.Wallet, exist bool) { +func (v *Vas) CheckWalletExist(ctx *gin.Context, tx *sqlx.Tx, mid int64) (wallet *dbstruct.Wallet, exist bool) { if mid <= 0 { return } - wallet, err := v.store.GetWalletByMid(ctx, mid) + wallet, err := v.store.GetWalletByMid(ctx, tx, mid) switch err { case sql.ErrNoRows: - err = v.store.CreateWallet(ctx, nil, mid) + err = v.store.CreateWallet(ctx, tx, mid) if err != nil { logger.Error("CreateWallet fail, mid: %v, err: %v", mid, err) return } logger.Info("CreateWallet success, mid: %v", mid) - wallet, err = v.store.GetWalletByMid(ctx, mid) + wallet, err = v.store.GetWalletByMid(ctx, tx, mid) if err != nil { logger.Error("GetWalletByMid after create fail, mid: %v, err: %v", mid, err) return @@ -388,7 +388,7 @@ func (v *Vas) OpCreateOrder(ctx *gin.Context, req *vasproto.OpCreateOrderReq) (e req.Money = coins / 10 // 检查钱包 - wallet, has := v.CheckWalletExist(ctx, mid) + wallet, has := v.CheckWalletExist(ctx, nil, mid) if !has { err = errs.ErrVasWalletNotExist return @@ -490,7 +490,7 @@ func (v *Vas) PreUnlockContact(ctx *gin.Context, req *vasproto.PreUnlockContactR ) // 获取用户钱包 - wallet, has := v.CheckWalletExist(ctx, mid) + wallet, has := v.CheckWalletExist(ctx, nil, mid) if !has { err = errs.ErrVasWalletNotExist return @@ -575,13 +575,13 @@ func (v *Vas) OneStepUnlockContact(ctx *gin.Context, req *vasproto.OneStepUnlock ) // 检查钱包 - _, has := v.CheckWalletExist(ctx, mid) + _, has := v.CheckWalletExist(ctx, nil, mid) if !has { err = errs.ErrVasWalletNotExist return } - v.CheckWalletExist(ctx, common.OfficialMid) + v.CheckWalletExist(ctx, nil, common.OfficialMid) // 是否已经解锁过 unlockInfo, _ := v.store.GetUserVasUnlock(ctx, nil, mid, uid, contactProductId) @@ -1041,7 +1041,7 @@ func (v *Vas) H5DirectUnlockWechat(ctx *gin.Context, req *vasproto.H5DirectUnloc } // 检查钱包 - wallet, _ := v.CheckWalletExist(ctx, req.Mid) + wallet, _ := v.CheckWalletExist(ctx, nil, req.Mid) // 金币够不够 if wallet.GetCoins() >= uVas.GetH5WechatCoinPrice() { @@ -1160,7 +1160,7 @@ func (v *Vas) PayCallback(ctx *gin.Context, p *vasproto.PayCallbackParamIn) { } // 钱包 - _, hasWallet := v.CheckWalletExist(ctx, checkOrder.GetMid()) + _, hasWallet := v.CheckWalletExist(ctx, nil, checkOrder.GetMid()) if !hasWallet { logger.Error("CheckWalletExist fail, mid: %v", checkOrder.GetMid()) return @@ -1428,7 +1428,7 @@ func (v *Vas) WithdrawApply(ctx *gin.Context, req *vasproto.WithdrawApplyReq) (t // todo 分布式锁 // 检查余额 - wallet, _ := v.CheckWalletExist(ctx, mid) + wallet, _ := v.CheckWalletExist(ctx, nil, mid) if wallet == nil { err = errs.ErrVasWalletNotExist return diff --git a/app/mix/service/logic/vas_zone.go b/app/mix/service/logic/vas_zone.go index 8ee941b7..f3b53452 100644 --- a/app/mix/service/logic/vas_zone.go +++ b/app/mix/service/logic/vas_zone.go @@ -30,7 +30,7 @@ func (v *Vas) CheckZoneUnlockExist(ctx *gin.Context, tx *sqlx.Tx, mid, zid int64 logger.Error("CreateZoneUnlock fail, mid: %v, zid: %v, err: %v", mid, zid, err) return } - logger.Info("CreateWallet success, mid: %v, zid: %v", mid, zid) + logger.Info("CreateZoneUnlock success, mid: %v, zid: %v", mid, zid) zu, err = v.store.GetZoneUnlock(ctx, tx, mid, zid) if err != nil { logger.Error("GetWalletByMid after create fail, mid: %v, zid: %v, err: %v", mid, zid, err) @@ -490,10 +490,11 @@ func (v *Vas) calcAndUpdateIncome(ctx *gin.Context, tx *sqlx.Tx, streamerMid, ui // 有空间,有代运营 list = v._calcWithZoneWithTp(streamerMid, totalDias, defaultIncomeSType, tp, zclrList) } + logger.Info("incomeList: %v", util.ToJson(list)) // 检查所有人钱包 for _, ii := range list { - _, exists := v.CheckWalletExist(ctx, ii.Mid) + _, exists := v.CheckWalletExist(ctx, tx, ii.Mid) if !exists { err = errs.ErrVasWalletNotExist return make([]IncomeInfo, 0), err @@ -503,7 +504,7 @@ func (v *Vas) calcAndUpdateIncome(ctx *gin.Context, tx *sqlx.Tx, streamerMid, ui // 写记录 for _, ii := range list { // 写消费记录 - wallet, _ := v.CheckWalletExist(ctx, ii.Mid) + wallet, _ := v.CheckWalletExist(ctx, tx, ii.Mid) ch := &dbstruct.ConsumeHistory{ Mid: goproto.Int64(ii.Mid), Uid: goproto.Int64(uid), diff --git a/app/mix/service/vasservice.go b/app/mix/service/vasservice.go index 413f2309..2cbf7b84 100644 --- a/app/mix/service/vasservice.go +++ b/app/mix/service/vasservice.go @@ -396,7 +396,7 @@ func (s *Service) PayCallback(ctx *gin.Context, req *vasproto.PayCallbackParamIn // 提现页面 func (s *Service) WithdrawPage(ctx *gin.Context, req *vasproto.WithdrawPageReq) (data *vasproto.WithdrawPageData, ec errcode.ErrCode) { data = new(vasproto.WithdrawPageData) - wallet, _ := _DefaultVas.CheckWalletExist(ctx, req.Mid) + wallet, _ := _DefaultVas.CheckWalletExist(ctx, nil, req.Mid) if wallet != nil { data.WithdrawDiamonds = wallet.GetWithdrawDiamonds() }