时间: 2025年06月20日 18:23
任务: 修复Transfer模块手续费计算异常问题
用户反馈订单67的手续费异常:
-- 用户房屋等级确认
SELECT * FROM kku_farm_users WHERE user_id = 39075;
-- 结果:house_level = 4
-- 手续费配置确认
SELECT * FROM kku_urs_promotion_transfer_fee_configs WHERE house_level = 4 AND transfer_type = 'out';
-- 结果:fee_rate = 0.3000 (30%)
-- 订单记录确认
SELECT * FROM kku_transfer_orders WHERE id = 67;
-- 结果:fee_rate = 0.0100, fee_amount = 10.0000 (异常)
通过代码审查和日志分析发现三个问题:
TransferApp模型问题:
calculateOutFee方法没有使用事件机制FeeCalculatingEvent事件上下文传递问题:
calculateOutFee时没有传递用户ID监听器逻辑错误:
// 修改前
public function calculateOutFee(string $amount): array
{
return $this->calculateOutFeeWithExtraCharge($amount, $this->fee_out_rate, $this->fee_out_min, $this->fee_out_max);
}
// 修改后
public function calculateOutFee(string $amount, array $context = []): FeeCalculatedEvent
{
// 使用FeeService来计算手续费,这样可以触发事件机制
return \App\Module\Transfer\Services\FeeService::calculateOutFee($this, $amount, $context);
}
// 修改前
$feeInfo = $app->calculateOutFee($amount);
// 修改后
$feeInfo = $app->calculateOutFee($amount, ['user_id' => $data['user_id']]);
// 修改前:只在更优惠时应用
if ($ursFeeRate < $event->feeRate) {
// 应用优惠费率
}
// 修改后:应用正确费率
if ($ursFeeRate !== $event->feeRate) {
// 应用URS费率(无论是否更优惠)
}
创建测试脚本验证修复效果:
php test_transfer_fee.php
测试结果:
查看应用日志确认事件触发:
[2025-06-20T18:36:40] laravel.INFO: URS转出手续费已调整 {
"user_id":39075,
"old_fee_rate":0.01,
"new_fee_rate":0.3,
"adjustment_type":"increase"
}
Commit: 3751f0dd
文件变更:
app/Module/Transfer/Models/TransferApp.phpapp/Module/Transfer/Logics/TransferLogic.phpapp/Module/UrsPromotion/Listeners/UrsTransferFeeListener.php成功修复了Transfer模块手续费计算异常问题,确保用户根据房屋等级收取正确的转出手续费。修复涉及事件机制完善、上下文传递和监听器逻辑优化,提升了系统的准确性和可靠性。