时间: 2025-06-19 03:35
任务: 修复划转订单44金额转换错误问题,并改进手续费收取逻辑
0000000000问题:
TransferThirdPartyService::createWithdrawOrder中转换一次TransferLogic::createTransferOutForThirdParty中再转换一次修复:
TransferThirdPartyService中的金额转换TransferLogic::createTransferOutForThirdParty中进行转换修改文件:
app/Module/Transfer/Logics/TransferLogic.phpapp/Module/Transfer/Models/TransferApp.phpapp/Module/Transfer/Validators/TransferBalanceValidator.php核心变更:
// 原逻辑:转账扣除手续费后的金额
$tradeResult = $userFundService->trade(
$app->fund_to_uid,
$order->actual_amount, // 2990(扣除手续费后)
'transfer_out',
$order->id,
"转出到{$app->title}"
);
// 新逻辑:转账完整金额,手续费额外收取
$tradeResult = $userFundService->trade(
$app->fund_to_uid,
$order->amount, // 3000(完整金额)
'transfer_out',
$order->id,
"转出到{$app->title}"
);
新增方法: TransferApp::calculateOutFeeWithExtraCharge
// 计算用户总支付金额(转出金额 + 手续费)
$actualAmount = bcadd($amountDecimal, $feeAmount, 4);
保持原方法: TransferApp::calculateFee(用于转入)
// 计算实际到账金额(扣除手续费后)
$actualAmount = bcsub($amountDecimal, $feeAmount, 4);
| 项目 | 订单44(错误) | 订单51(原逻辑) | 订单52(修复后) |
|---|---|---|---|
| 外部金额输入 | 2500 | 10 | 10 |
| 外部金额存储 | 8.3333 | 10.0000 | 10.0000 |
| 内部金额存储 | 2500.0000 | 3000.0000 | 3000.0000 |
| 转出到目标账户 | - | 2990钻石 | 3000钻石 |
| 手续费收取 | - | 10钻石 | 10钻石 |
| 用户总扣减 | - | 3000钻石 | 3010钻石 |
| 外部实际收到 | - | 2990钻石 | 3000钻石 |
转出操作: -3000钻石 (transfer_out-52)
手续费操作: -10钻石 (transfer_out_fee-52)
总扣减: 3010钻石 ✅
Commit: eccbff93
Message: 修改转出订单手续费逻辑为额外收取模式
✅ 金额转换问题完全修复
✅ 手续费逻辑改为额外收取模式
✅ 验证器与执行逻辑保持一致
✅ 第三方应用金额处理正确
用户现在可以正确理解:转出3000钻石需要额外支付10钻石手续费,总共扣除3010钻石,外部系统收到完整的3000钻石。