任务时间: 2025-06-18 20:27
任务类型: 功能开发
状态: ✅ 已完成
为 Transfer 模块增加手续费功能,支持转入/转出订单的手续费配置、计算和收取。实现了可配置的手续费率、最低/最高手续费限制,以及手续费统计功能。
ALTER TABLE kku_transfer_apps
ADD COLUMN fee_in_rate DECIMAL(5,4) DEFAULT 0.0000 COMMENT '转入手续费率',
ADD COLUMN fee_out_rate DECIMAL(5,4) DEFAULT 0.0000 COMMENT '转出手续费率',
ADD COLUMN fee_in_min DECIMAL(15,4) DEFAULT 0.0000 COMMENT '转入最低手续费',
ADD COLUMN fee_in_max DECIMAL(15,4) DEFAULT 0.0000 COMMENT '转入最高手续费',
ADD COLUMN fee_out_min DECIMAL(15,4) DEFAULT 0.0000 COMMENT '转出最低手续费',
ADD COLUMN fee_out_max DECIMAL(15,4) DEFAULT 0.0000 COMMENT '转出最高手续费',
ADD COLUMN fee_account_uid INT DEFAULT 0 COMMENT '手续费收取账户UID';
ALTER TABLE kku_transfer_orders
ADD COLUMN fee_rate DECIMAL(5,4) DEFAULT 0.0000 COMMENT '使用的手续费率',
ADD COLUMN fee_amount DECIMAL(15,4) DEFAULT 0.0000 COMMENT '手续费金额',
ADD COLUMN actual_amount DECIMAL(15,4) DEFAULT 0.0000 COMMENT '实际到账金额';
TransferApp 模型新增方法:
calculateInFee() - 计算转入手续费calculateOutFee() - 计算转出手续费isFeeEnabled() - 检查是否启用手续费getFeeAccount() - 获取手续费账户信息TransferOrder 模型新增方法:
hasFee() - 判断是否有手续费setFeeInfo() - 设置手续费信息calculateFeeFromApp() - 从应用配置计算手续费TransferService 新增方法:
calculateInFee() - 计算转入手续费calculateOutFee() - 计算转出手续费getFeeConfig() - 获取手续费配置getFeeStatistics() - 获取手续费统计getAppFeeIncome() - 获取应用手续费收入新增 FeeService 服务:
TransferLogic 更新:
TransferOrderDto 新增字段:
fee_rate - 手续费率fee_amount - 手续费金额actual_amount - 实际到账金额// 计算转出手续费
$feeInfo = TransferService::calculateOutFee(
transferAppId: 1,
amount: '100.00'
);
// 返回: ['fee_rate' => 0.01, 'fee_amount' => '1.0000', 'actual_amount' => '99.0000']
// 计算转入手续费
$feeInfo = TransferService::calculateInFee(
transferAppId: 1,
amount: '100.00'
);
// 转出订单 - 自动扣除手续费
$result = TransferService::createTransferOut(
transferAppId: 1,
userId: 12345,
amount: '100.00',
password: 'password'
);
// 转入订单 - 自动计算实际到账金额
$result = TransferService::createTransferIn(
transferAppId: 1,
userId: 12345,
businessId: 'BIZ_001',
amount: '100.00'
);
// 获取手续费配置
$config = TransferService::getFeeConfig(transferAppId: 1);
// 获取手续费统计
$stats = TransferService::getFeeStatistics(
appId: 1,
startDate: '2025-06-01',
endDate: '2025-06-30'
);
// 获取应用收入统计
$income = TransferService::getAppFeeIncome(appId: 1, days: 30);
手续费 = 金额 × 手续费率if (手续费 < 最低手续费) 手续费 = 最低手续费if (最高手续费 > 0 && 手续费 > 最高手续费) 手续费 = 最高手续费实际到账金额 = 原金额 - 手续费应用配置: 费率1%, 最低0.5, 最高10
| 金额 | 按比例 | 应用限制 | 实际到账 |
|---|---|---|---|
| 10.00 | 0.10 | 0.50 | 9.50 |
| 100.00 | 1.00 | 1.00 | 99.00 |
| 1500.00 | 15.00 | 10.00 | 1490.00 |
用户账户 → 目标账户 (实际到账金额,扣除手续费后)
用户账户 → 手续费账户 (手续费,默认UID 1)
来源账户 → 用户账户 (实际到账金额,扣除手续费后)
来源账户 → 手续费账户 (手续费,默认UID 1)
fee_account_uid 或配置为0时,自动使用UID 1app/Module/Transfer/
├── Database/
│ └── fee_feature.sql # 手续费功能数据库脚本
├── Services/
│ ├── TransferService.php # 更新:新增手续费方法
│ └── FeeService.php # 新增:手续费专用服务
├── Models/
│ ├── TransferApp.php # 更新:新增手续费字段和方法
│ └── TransferOrder.php # 更新:新增手续费字段和方法
├── Dtos/
│ └── TransferOrderDto.php # 更新:新增手续费字段
├── Logics/
│ └── TransferLogic.php # 更新:集成手续费计算
├── AdminControllers/
│ ├── TransferAppController.php # 更新:新增手续费统计接口
│ └── Helper/
│ ├── TransferAppHelper.php # 更新:新增手续费配置界面
│ └── TransferOrderHelper.php # 更新:新增手续费显示
└── Docs/
├── FEE_USAGE.md # 新增:手续费使用指南
└── API_USAGE.md # 更新:包含手续费API
测试时间: 2025-06-18 21:25
测试结果: 所有功能测试通过 ✅
isFeeEnabled() 方法正确判断启用状态getFeeAccountUid() 方法返回正确账户UIDcalculateOutFee() 和 calculateInFee() 计算准确手续费功能的成功实现为 Transfer 模块提供了:
完成时间: 2025-06-18 21:30 测试状态: ✅ 全部通过 部署状态: ✅ 已上线
该功能已完全集成到现有的Transfer模块中,保持了良好的向后兼容性,为业务运营提供了强有力的支持。通过完善的后台管理界面,运营人员可以轻松配置和监控手续费策略,实现精细化的收入管理。
项目成果: