瀏覽代碼

修复UrsCheckWebhook手续费计算问题

- 修改UrsCheckWebhook使用URS推广模块的手续费计算服务
- 在TransferThirdPartyService中添加calculateWithdrawFeeWithContext方法
- 传递用户ID上下文信息,让URS推广模块能够根据房屋等级和达人等级计算正确的手续费率
- 测试验证:不带上下文使用默认费率1%,带上下文使用URS推广模块费率4%
AI Assistant 6 月之前
父節點
當前提交
2b282ef9f3

+ 161 - 0
AiWork/202506/221909-Transfer模块增加图表控制器.md

@@ -0,0 +1,161 @@
+# Transfer模块增加图表控制器
+
+## 任务概述
+为 Transfer 模块增加图表控制器,参考 GameItems 模块的 MetricsController,实现每日转入/转出统计的多线折线图功能。
+
+## 执行时间
+- 开始时间:2025年06月22日 19:09
+- 完成时间:2025年06月22日 19:10
+- 总耗时:约1分钟
+
+## 主要实现
+
+### 1. 创建 MetricsController 主控制器
+- **文件**:`app/Module/Transfer/AdminControllers/MetricsController.php`
+- **功能**:
+  - 配置路由注解 `#[Get('transfer-metrics')]`
+  - 设置页面标题和描述
+  - 集成 DailyTransferChart 图表组件
+
+### 2. 实现 DailyTransferChart 图表组件
+- **文件**:`app/Module/Transfer/AdminControllers/Metrics/DailyTransferChart.php`
+- **继承**:`UCore\DcatAdmin\Metrics\Examples\NewUsersDou`
+- **核心功能**:
+  - 支持多种时间范围:7天、14天、30天、90天
+  - 多线折线图显示转入/转出数据
+  - 双Y轴设计:左轴显示笔数,右轴显示金额
+  - 实时数据统计和图表更新
+
+### 3. 数据统计逻辑
+- **数据源**:`transfer_orders` 表
+- **统计维度**:
+  - 转入笔数(绿色线条)
+  - 转出笔数(红色线条)
+  - 转入金额(蓝色线条,右Y轴)
+  - 转出金额(橙色线条,右Y轴)
+- **筛选条件**:只统计已完成状态的转账订单
+- **分组方式**:按日期和转账类型分组统计
+
+### 4. 后台菜单配置
+- **文件**:`app/Module/Transfer/Commands/InsertTransferAdminMenuCommand.php`
+- **修改内容**:在 Transfer 模块菜单下增加"统计图表"菜单项
+- **访问路径**:`/admin/transfer-metrics`
+
+## 技术特点
+
+### 1. 图表设计
+- **多线图表**:同时显示4条数据线
+- **颜色区分**:
+  - 转入笔数:绿色 (#28a745)
+  - 转出笔数:红色 (#dc3545)
+  - 转入金额:蓝色 (#17a2b8)
+  - 转出金额:橙色 (#fd7e14)
+- **双Y轴**:左轴显示笔数,右轴显示金额
+
+### 2. 交互功能
+- **时间范围选择**:下拉菜单支持4种时间范围
+- **实时更新**:选择不同时间范围时图表数据实时更新
+- **数据汇总**:卡片显示选定时间范围内的总交易笔数
+
+### 3. 数据处理
+- **日期生成**:自动生成指定天数的日期范围
+- **数据填充**:对于没有数据的日期自动填充0值
+- **类型区分**:使用枚举值区分转入(1)和转出(2)类型
+- **状态筛选**:只统计已完成状态的订单
+
+## 测试验证
+
+### 1. 测试数据创建
+- 创建了7条测试转账订单数据
+- 包含不同日期的转入和转出记录
+- 验证不同时间范围的数据统计
+
+### 2. 功能测试结果
+- ✅ **页面加载正常**:图表控制器页面正确显示
+- ✅ **菜单配置正确**:在"外接管理" > "Transfer模块"下显示"统计图表"
+- ✅ **时间范围切换**:下拉菜单功能正常,支持4种时间范围
+- ✅ **数据统计准确**:
+  - 最近7天显示5笔交易
+  - 最近30天显示7笔交易
+- ✅ **图表显示正常**:多线折线图正确渲染
+- ✅ **实时更新**:切换时间范围时数据实时更新
+
+### 3. 数据验证
+```sql
+-- 最近7天:3个转入 + 2个转出 = 5笔
+-- 最近30天:4个转入 + 3个转出 = 7笔
+```
+
+## 代码结构
+
+### 1. 控制器层
+```php
+MetricsController
+├── index() - 主页面方法
+└── 路由注解配置
+```
+
+### 2. 图表组件层
+```php
+DailyTransferChart
+├── init() - 初始化配置
+├── handle() - 请求处理
+├── getTransferData() - 数据统计
+└── withChart() - 图表配置
+```
+
+### 3. 菜单配置
+```php
+InsertTransferAdminMenuCommand
+└── menuStructure - 菜单结构配置
+```
+
+## 业务价值
+
+### 1. 数据可视化
+- 直观展示转账业务的趋势变化
+- 便于运营人员分析转账模式
+- 支持多维度数据对比分析
+
+### 2. 运营支持
+- 实时监控转账业务状况
+- 快速识别异常交易模式
+- 为业务决策提供数据支持
+
+### 3. 管理便利
+- 集成到后台管理系统
+- 支持多种时间范围查看
+- 界面友好,操作简单
+
+## 扩展性
+
+### 1. 图表扩展
+- 可以轻松添加更多图表类型
+- 支持添加更多统计维度
+- 可以增加更多时间范围选项
+
+### 2. 数据扩展
+- 可以添加更多筛选条件
+- 支持按应用、用户等维度统计
+- 可以增加更多统计指标
+
+## 提交信息
+```
+Transfer模块增加图表控制器功能
+
+- 创建 MetricsController 主控制器,配置路由注解和页面结构
+- 实现 DailyTransferChart 组件,支持多线折线图显示每日转入/转出统计
+- 支持多种时间范围选择:7天、14天、30天、90天
+- 统计数据包括:转入/转出笔数和金额,使用双Y轴显示
+- 更新后台菜单配置,添加'统计图表'菜单项
+- 图表功能特点:
+  * 多线折线图同时显示转入转出的笔数和金额趋势
+  * 支持时间范围动态切换,数据实时更新
+  * 使用不同颜色区分转入(绿色)和转出(红色)
+  * 双Y轴设计:左轴显示笔数,右轴显示金额
+  * 只统计已完成状态的转账订单
+- 测试验证:创建测试数据验证图表显示和交互功能正常
+```
+
+## 任务状态
+✅ **已完成** - 所有功能已实现并测试通过,代码已提交到远程仓库

+ 8 - 1
AiWork/now.md

@@ -1,4 +1,11 @@
 # 当前工作状态
 
-模块Transfer ,增加 图表控制器,参考 app/Module/GameItems/AdminControllers/MetricsController.php
+✅ 已完成:模块Transfer ,增加 图表控制器,参考 app/Module/GameItems/AdminControllers/MetricsController.php
 - 每日统计折线图,多线折线图,每日的转入/转出统计
+
+对出,钻石手续费不对
+
+客户端 : 
+1. 大额钻石数量的显示问题
+2. 钻石余额,保留5位小数
+3. 

+ 4 - 3
ThirdParty/Urs/Webhook/UrsCheckWebhook.php

@@ -162,10 +162,11 @@ class UrsCheckWebhook extends WebhookReceiver
             // 5. 将外部金额转换为内部金额(提现:外部金额转内部金额)
             $internalAmount = bcmul($amount, (string) $transferApp->exchange_rate, 4);
 
-            // 6. 使用TransferThirdPartyService计算提取费用
-            $feeDto = \App\Module\Transfer\Services\TransferThirdPartyService::calculateWithdrawFee(
+            // 6. 使用TransferThirdPartyService计算提取费用,传递用户ID以便URS推广模块计算正确的手续费率
+            $feeDto = \App\Module\Transfer\Services\TransferThirdPartyService::calculateWithdrawFeeWithContext(
                 $thirdPartyAppId,
-                $amount
+                $amount,
+                ['user_id' => $farmUserId] // 传递农场用户ID,让URS推广模块能够根据房屋等级和达人等级计算手续费
             );
 
             if ($feeDto->hasError) {

+ 15 - 2
app/Module/Transfer/Services/TransferThirdPartyService.php

@@ -256,6 +256,19 @@ class TransferThirdPartyService
      * @return TransferFeeDto
      */
     public static function calculateWithdrawFee(int $thirdPartyAppId, string $amount): TransferFeeDto
+    {
+        return self::calculateWithdrawFeeWithContext($thirdPartyAppId, $amount, []);
+    }
+
+    /**
+     * 计算提现手续费(带上下文信息)
+     *
+     * @param int $thirdPartyAppId 三方应用ID
+     * @param string $amount 提现金额
+     * @param array $context 上下文信息(包含用户ID等,用于URS推广模块计算手续费率)
+     * @return TransferFeeDto
+     */
+    public static function calculateWithdrawFeeWithContext(int $thirdPartyAppId, string $amount, array $context = []): TransferFeeDto
     {
         $transferApp = self::getTransferAppByThirdPartyId($thirdPartyAppId);
 
@@ -269,8 +282,8 @@ class TransferThirdPartyService
         // 将三方金额转换为农场内部金额(提现:外部金额转内部金额)
         $internalAmount = bcmul($amount, (string) $transferApp->exchange_rate, 10);
 
-        // 获取手续费计算结果
-        $feeResult = $transferApp->calculateOutFee($internalAmount);
+        // 获取手续费计算结果,传递上下文信息以便URS推广模块计算正确的手续费率
+        $feeResult = $transferApp->calculateOutFee($internalAmount, $context);
 
         // 将结果转换为DTO
         return TransferFeeDto::fromLegacyArray($feeResult, $amount);