This commit is contained in:
2026-04-22 17:49:20 +08:00
parent a2fad4a095
commit f545aee45e
15 changed files with 268 additions and 140 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"math"
"bdrp-server/app/main/api/internal/svc"
"bdrp-server/app/main/api/internal/types"
@@ -14,6 +15,10 @@ import (
"github.com/zeromicro/go-zero/core/stores/sqlx"
)
func roundMoney(v float64) float64 {
return math.Round(v*100) / 100
}
type AdminUpdateAgentWalletBalanceLogic struct {
logx.Logger
ctx context.Context
@@ -47,7 +52,8 @@ func (l *AdminUpdateAgentWalletBalanceLogic) AdminUpdateAgentWalletBalance(req *
}
// 计算新余额
newBalance := wallet.Balance + req.Amount
adjustAmount := roundMoney(req.Amount)
newBalance := roundMoney(wallet.Balance + adjustAmount)
// 校验余额不能为负数
if newBalance < 0 {
@@ -68,20 +74,20 @@ func (l *AdminUpdateAgentWalletBalanceLogic) AdminUpdateAgentWalletBalance(req *
}
// 创建钱包交易流水记录(手动调整)
remark := fmt.Sprintf("管理员手动调整余额,金额: %.2f", req.Amount)
remark := fmt.Sprintf("管理员手动调整余额,金额: %.2f", adjustAmount)
transErr := l.svcCtx.AgentService.CreateWalletTransaction(
transCtx,
session,
req.AgentId,
model.WalletTransactionTypeAdjust,
req.Amount, // 变动金额(正数表示增加,负数表示减少)
balanceBefore, // 变动前余额
wallet.Balance, // 变动后余额
frozenBalanceBefore, // 变动前冻结余额
wallet.FrozenBalance, // 变动后冻结余额(保持不变)
"", // 关联交易ID无关联
0, // 关联用户ID无关联
remark, // 备注
adjustAmount, // 变动金额(正数表示增加,负数表示减少)
roundMoney(balanceBefore), // 变动前余额
roundMoney(wallet.Balance), // 变动后余额
roundMoney(frozenBalanceBefore), // 变动前冻结余额
roundMoney(wallet.FrozenBalance), // 变动后冻结余额(保持不变)
"", // 关联交易ID无关联
0, // 关联用户ID无关联
remark, // 备注
)
if transErr != nil {
l.Logger.Errorf("创建代理钱包流水记录失败: %+v", transErr)
@@ -89,7 +95,7 @@ func (l *AdminUpdateAgentWalletBalanceLogic) AdminUpdateAgentWalletBalance(req *
}
l.Logger.Infof("代理钱包余额变更 - AgentId: %d, 原余额: %.2f, 变更金额: %.2f, 新余额: %.2f",
req.AgentId, balanceBefore, req.Amount, wallet.Balance)
req.AgentId, roundMoney(balanceBefore), adjustAmount, roundMoney(wallet.Balance))
return nil
})
@@ -101,7 +107,7 @@ func (l *AdminUpdateAgentWalletBalanceLogic) AdminUpdateAgentWalletBalance(req *
resp = &types.AdminUpdateAgentWalletBalanceResp{
Success: true,
Balance: newBalance,
Balance: roundMoney(newBalance),
}
return
}