feat: import services and standardize Go 1.26.5
This commit is contained in:
69
apps/finance/wallet/internal/logic/basic/wallet.go
Normal file
69
apps/finance/wallet/internal/logic/basic/wallet.go
Normal file
@@ -0,0 +1,69 @@
|
||||
// Package basic 钱包基础业务逻辑
|
||||
package basic
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"git.apinb.com/bsm-finance/wallet/internal/config"
|
||||
"git.apinb.com/bsm-finance/wallet/internal/excode"
|
||||
"git.apinb.com/bsm-finance/wallet/internal/impl"
|
||||
"git.apinb.com/bsm-finance/wallet/internal/models"
|
||||
"git.apinb.com/bsm-sdk/core/errcode"
|
||||
"git.apinb.com/bsm-sdk/core/utils"
|
||||
)
|
||||
|
||||
// WalletPay 钱包支付结构体
|
||||
type WalletPay struct {
|
||||
ctx context.Context
|
||||
Body *models.WalletBasic
|
||||
}
|
||||
|
||||
// NewWallet 创建钱包支付实例
|
||||
// 验证用户身份、钱包状态、支付密码和余额
|
||||
func NewWallet(passportIdentity, pwd string, amount int64) (*WalletPay, error) {
|
||||
// 检查钱包是否存在
|
||||
wallet := models.WalletExists(passportIdentity)
|
||||
if wallet == nil {
|
||||
return nil, errcode.ErrNotFound(404, "wallet")
|
||||
}
|
||||
|
||||
// 检查钱包状态
|
||||
if wallet.Status == -1 {
|
||||
return nil, errcode.ErrPermissionDenied
|
||||
}
|
||||
|
||||
// 验证支付密码
|
||||
encPassword := EncodePassword(pwd, passportIdentity)
|
||||
if encPassword != wallet.PayPassword {
|
||||
return nil, errcode.ErrPassword
|
||||
}
|
||||
|
||||
// 检查余额是否足够
|
||||
if amount > wallet.Balance {
|
||||
return nil, excode.ErrBalanceNotEnough
|
||||
}
|
||||
|
||||
return &WalletPay{
|
||||
Body: wallet,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TradeConsum 执行交易消费
|
||||
// 扣除钱包余额和可提现余额
|
||||
func (srv *WalletPay) TradeConsum(amount int64) error {
|
||||
data := map[string]interface{}{
|
||||
"balance": srv.Body.Balance - amount,
|
||||
"withdrawal_balance": srv.Body.WithdrawalBalance - amount,
|
||||
}
|
||||
err := impl.DBService.Model(&models.WalletBasic{}).Where("identity=?", srv.Body.Identity).UpdateColumns(data).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// EncodePassword 加密支付密码
|
||||
// 使用SHA256算法对密码进行加密
|
||||
func EncodePassword(pwd, passportIdentity string) string {
|
||||
return utils.Sha256(pwd, passportIdentity+config.Spec.Wallet.PublicKey)
|
||||
}
|
||||
Reference in New Issue
Block a user