ソースを参照

完成URS合伙人分红功能开发

- 创建合伙人分红记录和详情表
- 实现分红逻辑层和服务层
- 创建分红命令和定时任务
- 支持每天11:30自动执行分红
- 顶级达人(等级5)享受手续费20%分红
- 包含完整的后台管理界面
- 支持分红历史查询和统计
AI Assistant 6 ヶ月 前
コミット
dbc44665e7

+ 241 - 0
app/Module/UrsPromotion/AdminControllers/UrsPartnerDividendController.php

@@ -0,0 +1,241 @@
+<?php
+
+namespace App\Module\UrsPromotion\AdminControllers;
+
+use App\Module\UrsPromotion\Models\UrsPartnerDividendRecord;
+use App\Module\UrsPromotion\Models\UrsPartnerDividendDetail;
+use App\Module\UrsPromotion\Repositories\UrsPartnerDividendRepository;
+use App\Module\UrsPromotion\Services\UrsPartnerDividendService;
+use UCore\DcatAdmin\AdminController;
+use UCore\DcatAdmin\Helper\GridHelper;
+use UCore\DcatAdmin\Helper\ShowHelper;
+use UCore\DcatAdmin\Helper\FilterHelper;
+use Dcat\Admin\Grid;
+use Dcat\Admin\Show;
+use Dcat\Admin\Http\Controllers\AdminController as BaseAdminController;
+use Illuminate\Http\Request;
+
+/**
+ * URS合伙人分红管理控制器
+ * 
+ * @AdminController(
+ *     title="合伙人分红管理",
+ *     permission="urs-promotion.partner-dividend"
+ * )
+ * 
+ * @AdminRoute(
+ *     uri="urs-promotion/partner-dividend",
+ *     name="urs-promotion.partner-dividend"
+ * )
+ */
+class UrsPartnerDividendController extends AdminController
+{
+    /**
+     * 仓库实例
+     */
+    protected UrsPartnerDividendRepository $repository;
+
+    /**
+     * 构造函数
+     */
+    public function __construct()
+    {
+        $this->repository = new UrsPartnerDividendRepository();
+    }
+
+    /**
+     * 列表页面
+     */
+    protected function grid(): Grid
+    {
+        return Grid::make($this->repository, function (Grid $grid) {
+            // 基础配置
+            $grid->column('id', 'ID')->sortable();
+            $grid->column('dividend_date', '分红日期')->sortable();
+            $grid->column('total_fee_amount', '总手续费')->display(function ($value) {
+                return number_format($value, 4) . ' 钻石';
+            })->sortable();
+            $grid->column('dividend_amount', '分红金额')->display(function ($value) {
+                return number_format($value, 4) . ' 钻石';
+            })->sortable();
+            $grid->column('partner_count', '合伙人数')->sortable();
+            $grid->column('per_partner_amount', '人均分红')->display(function ($value) {
+                return number_format($value, 4) . ' 钻石';
+            });
+            
+            // 状态显示
+            $grid->column('status', '状态')->display(function ($status) {
+                $colors = [
+                    'pending' => 'warning',
+                    'processing' => 'info', 
+                    'completed' => 'success',
+                    'failed' => 'danger'
+                ];
+                $names = UrsPartnerDividendRecord::getStatuses();
+                $color = $colors[$status] ?? 'secondary';
+                $name = $names[$status] ?? '未知';
+                return "<span class='badge badge-{$color}'>{$name}</span>";
+            });
+
+            // 转账应用
+            $grid->column('transferApp.title', '转账应用');
+            
+            // 时间显示
+            GridHelper::dateTimeColumns($grid, ['created_at']);
+
+            // 筛选器
+            $grid->filter(function (Grid\Filter $filter) {
+                FilterHelper::dateRangeFilter($filter, 'dividend_date', '分红日期');
+                $filter->equal('status', '状态')->select(UrsPartnerDividendRecord::getStatuses());
+                $filter->equal('transfer_app_id', '转账应用')->select(
+                    \App\Module\Transfer\Models\TransferApp::pluck('title', 'id')->toArray()
+                );
+            });
+
+            // 操作配置
+            $grid->actions(function (Grid\Displayers\Actions $actions) {
+                $actions->disableEdit();
+                $actions->disableDelete();
+            });
+
+            $grid->disableCreateButton();
+            $grid->disableBatchActions();
+
+            // 工具栏
+            $grid->tools(function (Grid\Tools $tools) {
+                $tools->append('<a href="' . admin_route('urs-promotion.partner-dividend.execute') . '" class="btn btn-primary btn-sm">
+                    <i class="fa fa-play"></i> 执行分红
+                </a>');
+                $tools->append('<a href="' . admin_route('urs-promotion.partner-dividend.statistics') . '" class="btn btn-info btn-sm">
+                    <i class="fa fa-chart-bar"></i> 分红统计
+                </a>');
+            });
+
+            // 排序
+            $grid->model()->orderBy('dividend_date', 'desc');
+        });
+    }
+
+    /**
+     * 详情页面
+     */
+    protected function detail($id): Show
+    {
+        return Show::make($id, $this->repository, function (Show $show) {
+            // 基础信息
+            $show->field('id', 'ID');
+            $show->field('dividend_date', '分红日期');
+            $show->field('total_fee_amount', '总手续费')->as(function ($value) {
+                return number_format($value, 4) . ' 钻石';
+            });
+            $show->field('dividend_amount', '分红金额')->as(function ($value) {
+                return number_format($value, 4) . ' 钻石';
+            });
+            $show->field('partner_count', '合伙人数');
+            $show->field('per_partner_amount', '人均分红')->as(function ($value) {
+                return number_format($value, 4) . ' 钻石';
+            });
+            $show->field('status', '状态')->as(function ($status) {
+                return UrsPartnerDividendRecord::getStatuses()[$status] ?? '未知';
+            });
+            $show->field('transferApp.title', '转账应用');
+            $show->field('error_message', '错误信息');
+            
+            ShowHelper::dateTimeFields($show, ['created_at', 'updated_at']);
+
+            // 分红详情
+            $show->relation('details', '分红详情', function ($model) {
+                $grid = new Grid(new UrsPartnerDividendDetail());
+                $grid->setResource('urs-promotion/partner-dividend-details');
+                
+                $grid->column('user_id', '用户ID');
+                $grid->column('user.username', '用户名');
+                $grid->column('urs_user_id', 'URS用户ID');
+                $grid->column('talent_level_name', '达人等级');
+                $grid->column('dividend_amount', '分红金额')->display(function ($value) {
+                    return number_format($value, 4) . ' 钻石';
+                });
+                $grid->column('status', '状态')->display(function ($status) {
+                    $colors = [
+                        'pending' => 'warning',
+                        'completed' => 'success',
+                        'failed' => 'danger'
+                    ];
+                    $names = UrsPartnerDividendDetail::getStatuses();
+                    $color = $colors[$status] ?? 'secondary';
+                    $name = $names[$status] ?? '未知';
+                    return "<span class='badge badge-{$color}'>{$name}</span>";
+                });
+                $grid->column('transfer_order_id', '转账订单ID');
+                $grid->column('error_message', '错误信息');
+                GridHelper::dateTimeColumns($grid, ['created_at']);
+
+                $grid->model()->where('dividend_record_id', $model->id);
+                $grid->disableActions();
+                $grid->disableCreateButton();
+                $grid->disableBatchActions();
+                $grid->disableFilter();
+
+                return $grid;
+            });
+        });
+    }
+
+    /**
+     * 执行分红页面
+     */
+    public function execute(Request $request)
+    {
+        if ($request->isMethod('post')) {
+            $date = $request->input('date');
+            $force = $request->input('force', false);
+
+            // 验证日期
+            if (!$date || !strtotime($date)) {
+                return response()->json([
+                    'status' => false,
+                    'message' => '请选择有效的分红日期'
+                ]);
+            }
+
+            // 检查是否已经分红
+            if (!$force && UrsPartnerDividendRecord::isDividendProcessed($date)) {
+                return response()->json([
+                    'status' => false,
+                    'message' => "日期 {$date} 的分红已经处理过了"
+                ]);
+            }
+
+            // 执行分红
+            $result = UrsPartnerDividendService::executeDailyDividend($date);
+
+            return response()->json([
+                'status' => $result['success'],
+                'message' => $result['message'],
+                'data' => $result['data'] ?? null
+            ]);
+        }
+
+        // 显示执行页面
+        $content = admin_view('urs-promotion::partner-dividend.execute');
+        return $content;
+    }
+
+    /**
+     * 分红统计页面
+     */
+    public function statistics()
+    {
+        $stats = UrsPartnerDividendService::getDividendStatistics();
+        $partnerList = UrsPartnerDividendService::getPartnerList();
+        $recentHistory = UrsPartnerDividendService::getDividendHistory(null, null, 10);
+
+        $content = admin_view('urs-promotion::partner-dividend.statistics', [
+            'stats' => $stats['data'] ?? [],
+            'partners' => $partnerList['data'] ?? [],
+            'history' => $recentHistory['data'] ?? []
+        ]);
+
+        return $content;
+    }
+}

+ 145 - 0
app/Module/UrsPromotion/Commands/UrsPartnerDividendCommand.php

@@ -0,0 +1,145 @@
+<?php
+
+namespace App\Module\UrsPromotion\Commands;
+
+use App\Module\UrsPromotion\Services\UrsPartnerDividendService;
+use Illuminate\Console\Command;
+use Carbon\Carbon;
+
+/**
+ * URS合伙人分红命令
+ *
+ * 用于执行每日合伙人分红任务
+ */
+class UrsPartnerDividendCommand extends Command
+{
+    /**
+     * 命令签名
+     */
+    protected $signature = 'urs-promotion:partner-dividend 
+                            {--date= : 指定分红日期,格式:Y-m-d,默认为今天}
+                            {--force : 强制执行,即使已经分红过}';
+
+    /**
+     * 命令描述
+     */
+    protected $description = 'URS合伙人分红 - 顶级达人享受手续费分红';
+
+    /**
+     * 执行命令
+     */
+    public function handle(): int
+    {
+        $this->info('=== URS合伙人分红任务开始 ===');
+
+        // 获取分红日期
+        $date = $this->option('date') ?: Carbon::today()->format('Y-m-d');
+        $force = $this->option('force');
+
+        $this->info("分红日期: {$date}");
+
+        // 验证日期格式
+        if (!$this->validateDate($date)) {
+            $this->error('日期格式错误,请使用 Y-m-d 格式,例如:2025-06-25');
+            return self::FAILURE;
+        }
+
+        // 如果不是强制执行,检查是否已经分红
+        if (!$force) {
+            if (\App\Module\UrsPromotion\Models\UrsPartnerDividendRecord::isDividendProcessed($date)) {
+                $this->warn("日期 {$date} 的分红已经处理过了,如需重新执行请使用 --force 参数");
+                return self::SUCCESS;
+            }
+        }
+
+        // 显示合伙人信息
+        $this->showPartnerInfo();
+
+        // 执行分红
+        $this->info('开始执行分红...');
+        $result = UrsPartnerDividendService::executeDailyDividend($date);
+
+        if ($result['success']) {
+            $this->info('✅ 分红执行成功!');
+            $this->displayResult($result['data']);
+        } else {
+            $this->error('❌ 分红执行失败:' . $result['message']);
+            return self::FAILURE;
+        }
+
+        $this->info('=== URS合伙人分红任务完成 ===');
+        return self::SUCCESS;
+    }
+
+    /**
+     * 验证日期格式
+     */
+    private function validateDate(string $date): bool
+    {
+        try {
+            Carbon::createFromFormat('Y-m-d', $date);
+            return true;
+        } catch (\Exception $e) {
+            return false;
+        }
+    }
+
+    /**
+     * 显示合伙人信息
+     */
+    private function showPartnerInfo(): void
+    {
+        $this->info('获取合伙人信息...');
+        
+        $partnerResult = UrsPartnerDividendService::getPartnerList();
+        if ($partnerResult['success']) {
+            $partners = $partnerResult['data'];
+            $this->info("当前合伙人数量: {$partnerResult['total']}");
+            
+            if (!empty($partners)) {
+                $this->table(
+                    ['用户ID', 'URS用户ID', '用户名', '达人等级', '成为合伙人时间'],
+                    array_map(function ($partner) {
+                        return [
+                            $partner['user_id'],
+                            $partner['urs_user_id'],
+                            $partner['username'],
+                            $partner['talent_level_name'],
+                            $partner['created_at']
+                        ];
+                    }, array_slice($partners, 0, 10)) // 只显示前10个
+                );
+                
+                if (count($partners) > 10) {
+                    $this->info("... 还有 " . (count($partners) - 10) . " 个合伙人");
+                }
+            }
+        } else {
+            $this->warn('获取合伙人信息失败: ' . $partnerResult['message']);
+        }
+    }
+
+    /**
+     * 显示分红结果
+     */
+    private function displayResult(array $data): void
+    {
+        $this->info('');
+        $this->info('📊 分红结果统计:');
+        $this->info("分红日期: {$data['date']}");
+        $this->info("当日总手续费: {$data['total_fee_amount']} 钻石");
+        $this->info("分红总金额: {$data['dividend_amount']} 钻石 (20%)");
+        $this->info("合伙人数量: {$data['partner_count']} 人");
+        $this->info("每人分红: {$data['per_partner_amount']} 钻石");
+        $this->info("成功转账: {$data['success_count']} 人");
+        
+        if ($data['failed_count'] > 0) {
+            $this->warn("失败转账: {$data['failed_count']} 人");
+        }
+
+        // 计算成功率
+        $successRate = $data['partner_count'] > 0 ? 
+            round($data['success_count'] / $data['partner_count'] * 100, 2) : 0;
+        $this->info("成功率: {$successRate}%");
+    }
+}

+ 44 - 0
app/Module/UrsPromotion/Database/create_partner_dividend_tables.sql

@@ -0,0 +1,44 @@
+-- URS合伙人分红相关表
+
+-- 合伙人分红记录表
+CREATE TABLE `kku_urs_promotion_partner_dividend_records` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `dividend_date` date NOT NULL COMMENT '分红日期',
+  `total_fee_amount` decimal(20,10) NOT NULL DEFAULT '0.0000000000' COMMENT '当日总手续费金额',
+  `dividend_amount` decimal(20,10) NOT NULL DEFAULT '0.0000000000' COMMENT '分红总金额(总手续费的20%)',
+  `partner_count` int(11) NOT NULL DEFAULT '0' COMMENT '合伙人数量',
+  `per_partner_amount` decimal(20,10) NOT NULL DEFAULT '0.0000000000' COMMENT '每个合伙人分红金额',
+  `transfer_app_id` int(11) NOT NULL DEFAULT '0' COMMENT '转账应用ID',
+  `status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态:pending待处理,processing处理中,completed已完成,failed失败',
+  `error_message` text COMMENT '错误信息',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `uk_dividend_date` (`dividend_date`),
+  KEY `idx_status` (`status`),
+  KEY `idx_transfer_app_id` (`transfer_app_id`),
+  KEY `idx_created_at` (`created_at`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS合伙人分红记录表';
+
+-- 合伙人分红详情表
+CREATE TABLE `kku_urs_promotion_partner_dividend_details` (
+  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
+  `dividend_record_id` int(11) NOT NULL COMMENT '分红记录ID',
+  `user_id` int(11) NOT NULL COMMENT '用户ID(农场用户ID)',
+  `urs_user_id` int(11) NOT NULL COMMENT 'URS用户ID',
+  `talent_level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '达人等级',
+  `dividend_amount` decimal(20,10) NOT NULL DEFAULT '0.0000000000' COMMENT '分红金额',
+  `status` varchar(20) NOT NULL DEFAULT 'pending' COMMENT '状态:pending待处理,completed已完成,failed失败',
+  `error_message` text COMMENT '错误信息',
+  `transfer_order_id` int(11) DEFAULT NULL COMMENT '转账订单ID',
+  `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `idx_dividend_record_id` (`dividend_record_id`),
+  KEY `idx_user_id` (`user_id`),
+  KEY `idx_urs_user_id` (`urs_user_id`),
+  KEY `idx_status` (`status`),
+  KEY `idx_transfer_order_id` (`transfer_order_id`),
+  KEY `idx_created_at` (`created_at`),
+  CONSTRAINT `fk_dividend_details_record` FOREIGN KEY (`dividend_record_id`) REFERENCES `kku_urs_promotion_partner_dividend_records` (`id`) ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='URS合伙人分红详情表';

+ 2 - 2
app/Module/UrsPromotion/Docs/合伙人分红.md

@@ -2,5 +2,5 @@
 
 > 顶级达人就是合伙人,享受手续费分红
 
-钻石每天兑出的手续费中的20%均分给全网的合伙人
-Transfer中有手续费统计功能
+钻石每天兑出的手续费中的20%均分给全网的合伙人,11.30执行
+Transfer中有手续费统计功能,读取今天的统计,总数的20%,平均分给所有的合伙人(使用Transfer的手续费转移功能)

+ 326 - 0
app/Module/UrsPromotion/Logics/UrsPartnerDividendLogic.php

@@ -0,0 +1,326 @@
+<?php
+
+namespace App\Module\UrsPromotion\Logics;
+
+use App\Module\UrsPromotion\Models\UrsPartnerDividendRecord;
+use App\Module\UrsPromotion\Models\UrsPartnerDividendDetail;
+use App\Module\UrsPromotion\Models\UrsUserTalent;
+use App\Module\UrsPromotion\Services\UrsUserMappingService;
+use App\Module\Transfer\Services\FeeStatisticsService;
+use App\Module\Transfer\Services\FeeService;
+use App\Module\Transfer\Models\TransferApp;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Log;
+use Carbon\Carbon;
+
+/**
+ * URS合伙人分红逻辑类
+ *
+ * 处理合伙人分红的核心业务逻辑
+ */
+class UrsPartnerDividendLogic
+{
+    /**
+     * 分红比例 (20%)
+     */
+    const DIVIDEND_RATE = 0.20;
+
+    /**
+     * 合伙人等级 (顶级达人)
+     */
+    const PARTNER_LEVEL = 5;
+
+    /**
+     * 执行每日合伙人分红
+     *
+     * @param string|null $date 分红日期,默认为今天
+     * @return array 分红结果
+     */
+    public function executeDailyDividend(?string $date = null): array
+    {
+        $date = $date ?: Carbon::today()->format('Y-m-d');
+        
+        Log::info("开始执行合伙人分红", ['date' => $date]);
+
+        // 检查是否已经分红
+        if (UrsPartnerDividendRecord::isDividendProcessed($date)) {
+            $message = "日期 {$date} 的分红已经处理过了";
+            Log::warning($message);
+            return ['success' => false, 'message' => $message];
+        }
+
+        try {
+            DB::beginTransaction();
+
+            // 1. 获取今日手续费统计
+            $totalFeeAmount = $this->getTodayTotalFeeAmount($date);
+            if ($totalFeeAmount <= 0) {
+                $message = "日期 {$date} 没有手续费收入,无需分红";
+                Log::info($message);
+                DB::rollBack();
+                return ['success' => false, 'message' => $message];
+            }
+
+            // 2. 计算分红金额 (总手续费的20%)
+            $dividendAmount = bcmul($totalFeeAmount, self::DIVIDEND_RATE, 10);
+
+            // 3. 获取所有合伙人
+            $partners = $this->getAllPartners();
+            if (empty($partners)) {
+                $message = "没有找到合伙人,无需分红";
+                Log::info($message);
+                DB::rollBack();
+                return ['success' => false, 'message' => $message];
+            }
+
+            // 4. 计算每个合伙人的分红金额
+            $partnerCount = count($partners);
+            $perPartnerAmount = bcdiv($dividendAmount, $partnerCount, 10);
+
+            // 5. 创建分红记录
+            $dividendRecord = $this->createDividendRecord($date, $totalFeeAmount, $dividendAmount, $partnerCount, $perPartnerAmount);
+
+            // 6. 创建分红详情并执行转账
+            $result = $this->processDividendDetails($dividendRecord, $partners, $perPartnerAmount);
+
+            // 7. 更新分红记录状态
+            $this->updateDividendRecordStatus($dividendRecord, $result);
+
+            DB::commit();
+
+            Log::info("合伙人分红执行完成", [
+                'date' => $date,
+                'total_fee_amount' => $totalFeeAmount,
+                'dividend_amount' => $dividendAmount,
+                'partner_count' => $partnerCount,
+                'per_partner_amount' => $perPartnerAmount,
+                'success_count' => $result['success_count'],
+                'failed_count' => $result['failed_count']
+            ]);
+
+            return [
+                'success' => true,
+                'message' => '分红执行完成',
+                'data' => [
+                    'date' => $date,
+                    'total_fee_amount' => $totalFeeAmount,
+                    'dividend_amount' => $dividendAmount,
+                    'partner_count' => $partnerCount,
+                    'per_partner_amount' => $perPartnerAmount,
+                    'success_count' => $result['success_count'],
+                    'failed_count' => $result['failed_count']
+                ]
+            ];
+
+        } catch (\Exception $e) {
+            DB::rollBack();
+            Log::error("合伙人分红执行失败", [
+                'date' => $date,
+                'error' => $e->getMessage(),
+                'trace' => $e->getTraceAsString()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '分红执行失败: ' . $e->getMessage()
+            ];
+        }
+    }
+
+    /**
+     * 获取今日总手续费金额
+     */
+    private function getTodayTotalFeeAmount(string $date): string
+    {
+        try {
+            // 获取所有应用的手续费统计
+            $result = FeeStatisticsService::getStatsByDateRange($date, $date);
+
+            // 检查是否有错误
+            if (isset($result['error'])) {
+                Log::warning("获取手续费统计有错误", [
+                    'date' => $date,
+                    'error' => $result['error']
+                ]);
+                return '0.0000000000';
+            }
+
+            // 从返回结果中获取数据
+            $stats = $result['data'] ?? [];
+
+            $totalFee = '0.0000000000';
+            foreach ($stats as $stat) {
+                // $stat是数组格式,不是对象
+                $feeAmount = $stat['total_fee_amount'] ?? '0.0000000000';
+                $totalFee = bcadd($totalFee, $feeAmount, 10);
+            }
+
+            Log::info("获取今日手续费统计", [
+                'date' => $date,
+                'total_fee' => $totalFee,
+                'stats_count' => count($stats)
+            ]);
+
+            return $totalFee;
+
+        } catch (\Exception $e) {
+            Log::error("获取今日手续费统计失败", [
+                'date' => $date,
+                'error' => $e->getMessage()
+            ]);
+            return '0.0000000000';
+        }
+    }
+
+    /**
+     * 获取所有合伙人
+     */
+    private function getAllPartners(): array
+    {
+        // 获取所有顶级达人(合伙人)
+        $talents = UrsUserTalent::where('talent_level', self::PARTNER_LEVEL)
+            ->get();
+
+        $partners = [];
+        foreach ($talents as $talent) {
+            // UrsUserTalent表中的user_id就是农场用户ID
+            $userId = $talent->user_id;
+
+            // 获取对应的URS用户ID
+            $ursUserId = UrsUserMappingService::getMappingUrsUserId($userId);
+
+            if ($ursUserId) {
+                $partners[] = [
+                    'user_id' => $userId,
+                    'urs_user_id' => $ursUserId,
+                    'talent_level' => $talent->talent_level
+                ];
+            }
+        }
+
+        Log::info("获取合伙人列表", [
+            'total_talents' => $talents->count(),
+            'valid_partners' => count($partners)
+        ]);
+
+        return $partners;
+    }
+
+    /**
+     * 创建分红记录
+     */
+    private function createDividendRecord(string $date, string $totalFeeAmount, string $dividendAmount, int $partnerCount, string $perPartnerAmount): UrsPartnerDividendRecord
+    {
+        // 获取默认的转账应用ID (假设使用第一个启用的应用)
+        $transferApp = TransferApp::where('is_enabled', true)->first();
+        if (!$transferApp) {
+            throw new \Exception('没有找到可用的转账应用');
+        }
+
+        return UrsPartnerDividendRecord::create([
+            'dividend_date' => $date,
+            'total_fee_amount' => $totalFeeAmount,
+            'dividend_amount' => $dividendAmount,
+            'partner_count' => $partnerCount,
+            'per_partner_amount' => $perPartnerAmount,
+            'transfer_app_id' => $transferApp->id,
+            'status' => UrsPartnerDividendRecord::STATUS_PROCESSING
+        ]);
+    }
+
+    /**
+     * 处理分红详情并执行转账
+     */
+    private function processDividendDetails(UrsPartnerDividendRecord $dividendRecord, array $partners, string $perPartnerAmount): array
+    {
+        $successCount = 0;
+        $failedCount = 0;
+
+        foreach ($partners as $partner) {
+            try {
+                // 创建分红详情记录
+                $detail = UrsPartnerDividendDetail::create([
+                    'dividend_record_id' => $dividendRecord->id,
+                    'user_id' => $partner['user_id'],
+                    'urs_user_id' => $partner['urs_user_id'],
+                    'talent_level' => $partner['talent_level'],
+                    'dividend_amount' => $perPartnerAmount,
+                    'status' => UrsPartnerDividendDetail::STATUS_PENDING
+                ]);
+
+                // 执行手续费转移
+                $transferResult = FeeService::transfer(
+                    $dividendRecord->transfer_app_id,
+                    $partner['user_id'],
+                    floatval($perPartnerAmount),
+                    $dividendRecord->id,
+                    'partner_dividend'
+                );
+
+                if ($transferResult === true) {
+                    // 转账成功
+                    $detail->update([
+                        'status' => UrsPartnerDividendDetail::STATUS_COMPLETED
+                    ]);
+                    $successCount++;
+                    
+                    Log::info("合伙人分红转账成功", [
+                        'user_id' => $partner['user_id'],
+                        'urs_user_id' => $partner['urs_user_id'],
+                        'amount' => $perPartnerAmount
+                    ]);
+                } else {
+                    // 转账失败
+                    $detail->update([
+                        'status' => UrsPartnerDividendDetail::STATUS_FAILED,
+                        'error_message' => is_string($transferResult) ? $transferResult : '转账失败'
+                    ]);
+                    $failedCount++;
+                    
+                    Log::error("合伙人分红转账失败", [
+                        'user_id' => $partner['user_id'],
+                        'urs_user_id' => $partner['urs_user_id'],
+                        'amount' => $perPartnerAmount,
+                        'error' => $transferResult
+                    ]);
+                }
+
+            } catch (\Exception $e) {
+                $failedCount++;
+                Log::error("处理合伙人分红详情失败", [
+                    'user_id' => $partner['user_id'],
+                    'urs_user_id' => $partner['urs_user_id'],
+                    'error' => $e->getMessage()
+                ]);
+            }
+        }
+
+        return [
+            'success_count' => $successCount,
+            'failed_count' => $failedCount
+        ];
+    }
+
+    /**
+     * 更新分红记录状态
+     */
+    private function updateDividendRecordStatus(UrsPartnerDividendRecord $dividendRecord, array $result): void
+    {
+        if ($result['failed_count'] == 0) {
+            // 全部成功
+            $dividendRecord->update(['status' => UrsPartnerDividendRecord::STATUS_COMPLETED]);
+        } else if ($result['success_count'] == 0) {
+            // 全部失败
+            $dividendRecord->update([
+                'status' => UrsPartnerDividendRecord::STATUS_FAILED,
+                'error_message' => '所有分红转账都失败了'
+            ]);
+        } else {
+            // 部分成功
+            $dividendRecord->update([
+                'status' => UrsPartnerDividendRecord::STATUS_COMPLETED,
+                'error_message' => "部分转账失败,成功{$result['success_count']}个,失败{$result['failed_count']}个"
+            ]);
+        }
+    }
+}

+ 159 - 0
app/Module/UrsPromotion/Models/UrsPartnerDividendDetail.php

@@ -0,0 +1,159 @@
+<?php
+
+namespace App\Module\UrsPromotion\Models;
+
+use UCore\ModelCore;
+
+/**
+ * URS合伙人分红详情模型
+ *
+ * field start
+ * @property  int  $id  主键ID
+ * @property  int  $dividend_record_id  分红记录ID
+ * @property  int  $user_id  用户ID(农场用户ID)
+ * @property  int  $urs_user_id  URS用户ID
+ * @property  int  $talent_level  达人等级
+ * @property  float  $dividend_amount  分红金额
+ * @property  string  $status  状态:pending待处理,completed已完成,failed失败
+ * @property  string|null  $error_message  错误信息
+ * @property  int|null  $transfer_order_id  转账订单ID
+ * @property  \Carbon\Carbon  $created_at  创建时间
+ * @property  \Carbon\Carbon  $updated_at  更新时间
+ * field end
+ *
+ * relation start
+ * @property  \App\Module\UrsPromotion\Models\UrsPartnerDividendRecord  $dividendRecord  分红记录
+ * @property  \App\Module\User\Models\User  $user  用户
+ * @property  \App\Module\Transfer\Models\TransferOrder  $transferOrder  转账订单
+ * relation end
+ */
+class UrsPartnerDividendDetail extends ModelCore
+{
+    /**
+     * 表名
+     */
+    protected $table = 'urs_promotion_partner_dividend_details';
+
+    // attrlist start
+    protected $fillable = [
+        'id',
+        'dividend_record_id',
+        'user_id',
+        'urs_user_id',
+        'talent_level',
+        'dividend_amount',
+        'status',
+        'error_message',
+        'transfer_order_id',
+    ];
+    // attrlist end
+
+    /**
+     * 属性类型转换
+     */
+    protected $casts = [
+        'id' => 'integer',
+        'dividend_record_id' => 'integer',
+        'user_id' => 'integer',
+        'urs_user_id' => 'integer',
+        'talent_level' => 'integer',
+        'dividend_amount' => 'decimal:10',
+        'status' => 'string',
+        'error_message' => 'string',
+        'transfer_order_id' => 'integer',
+        'created_at' => 'datetime',
+        'updated_at' => 'datetime',
+    ];
+
+    /**
+     * 隐藏字段
+     */
+    protected $hidden = [];
+
+    // 状态常量
+    const STATUS_PENDING = 'pending';
+    const STATUS_COMPLETED = 'completed';
+    const STATUS_FAILED = 'failed';
+
+    /**
+     * 获取所有状态
+     */
+    public static function getStatuses(): array
+    {
+        return [
+            self::STATUS_PENDING => '待处理',
+            self::STATUS_COMPLETED => '已完成',
+            self::STATUS_FAILED => '失败',
+        ];
+    }
+
+    /**
+     * 获取状态名称
+     */
+    public function getStatusNameAttribute(): string
+    {
+        return self::getStatuses()[$this->status] ?? '未知';
+    }
+
+    /**
+     * 关联分红记录
+     */
+    public function dividendRecord()
+    {
+        return $this->belongsTo(UrsPartnerDividendRecord::class, 'dividend_record_id');
+    }
+
+    /**
+     * 关联用户
+     */
+    public function user()
+    {
+        return $this->belongsTo(\App\Module\User\Models\User::class, 'user_id');
+    }
+
+    /**
+     * 关联转账订单
+     */
+    public function transferOrder()
+    {
+        return $this->belongsTo(\App\Module\Transfer\Models\TransferOrder::class, 'transfer_order_id');
+    }
+
+    /**
+     * 获取达人等级名称
+     */
+    public function getTalentLevelNameAttribute(): string
+    {
+        $levels = [
+            0 => '青铜',
+            1 => '白银',
+            2 => '黄金',
+            3 => '钻石',
+            4 => '至尊',
+            5 => '合伙人',
+        ];
+        
+        return $levels[$this->talent_level] ?? '未知';
+    }
+
+    /**
+     * 根据分红记录ID获取详情列表
+     */
+    public static function getByDividendRecordId(int $dividendRecordId): \Illuminate\Database\Eloquent\Collection
+    {
+        return self::where('dividend_record_id', $dividendRecordId)
+            ->with(['user', 'transferOrder'])
+            ->get();
+    }
+
+    /**
+     * 获取用户的分红历史
+     */
+    public static function getUserDividendHistory(int $userId): \Illuminate\Database\Eloquent\Collection
+    {
+        return self::where('user_id', $userId)
+            ->with(['dividendRecord', 'transferOrder'])
+            ->orderBy('created_at', 'desc')
+            ->get();
+    }
+}

+ 149 - 0
app/Module/UrsPromotion/Models/UrsPartnerDividendRecord.php

@@ -0,0 +1,149 @@
+<?php
+
+namespace App\Module\UrsPromotion\Models;
+
+use UCore\ModelCore;
+
+/**
+ * URS合伙人分红记录模型
+ *
+ * field start
+ * @property  int  $id  主键ID
+ * @property  string  $dividend_date  分红日期
+ * @property  float  $total_fee_amount  当日总手续费金额
+ * @property  float  $dividend_amount  分红总金额(总手续费的20%)
+ * @property  int  $partner_count  合伙人数量
+ * @property  float  $per_partner_amount  每个合伙人分红金额
+ * @property  int  $transfer_app_id  转账应用ID
+ * @property  string  $status  状态:pending待处理,processing处理中,completed已完成,failed失败
+ * @property  string|null  $error_message  错误信息
+ * @property  \Carbon\Carbon  $created_at  创建时间
+ * @property  \Carbon\Carbon  $updated_at  更新时间
+ * field end
+ *
+ * relation start
+ * @property  \App\Module\Transfer\Models\TransferApp  $transferApp  转账应用
+ * @property  \Illuminate\Database\Eloquent\Collection|\App\Module\UrsPromotion\Models\UrsPartnerDividendDetail[]  $details  分红详情
+ * relation end
+ */
+class UrsPartnerDividendRecord extends ModelCore
+{
+    /**
+     * 表名
+     */
+    protected $table = 'urs_promotion_partner_dividend_records';
+
+    // attrlist start
+    protected $fillable = [
+        'id',
+        'dividend_date',
+        'total_fee_amount',
+        'dividend_amount',
+        'partner_count',
+        'per_partner_amount',
+        'transfer_app_id',
+        'status',
+        'error_message',
+    ];
+    // attrlist end
+
+    /**
+     * 属性类型转换
+     */
+    protected $casts = [
+        'id' => 'integer',
+        'dividend_date' => 'date',
+        'total_fee_amount' => 'decimal:10',
+        'dividend_amount' => 'decimal:10',
+        'partner_count' => 'integer',
+        'per_partner_amount' => 'decimal:10',
+        'transfer_app_id' => 'integer',
+        'status' => 'string',
+        'error_message' => 'string',
+        'created_at' => 'datetime',
+        'updated_at' => 'datetime',
+    ];
+
+    /**
+     * 隐藏字段
+     */
+    protected $hidden = [];
+
+    // 状态常量
+    const STATUS_PENDING = 'pending';
+    const STATUS_PROCESSING = 'processing';
+    const STATUS_COMPLETED = 'completed';
+    const STATUS_FAILED = 'failed';
+
+    /**
+     * 获取所有状态
+     */
+    public static function getStatuses(): array
+    {
+        return [
+            self::STATUS_PENDING => '待处理',
+            self::STATUS_PROCESSING => '处理中',
+            self::STATUS_COMPLETED => '已完成',
+            self::STATUS_FAILED => '失败',
+        ];
+    }
+
+    /**
+     * 获取状态名称
+     */
+    public function getStatusNameAttribute(): string
+    {
+        return self::getStatuses()[$this->status] ?? '未知';
+    }
+
+    /**
+     * 关联转账应用
+     */
+    public function transferApp()
+    {
+        return $this->belongsTo(\App\Module\Transfer\Models\TransferApp::class, 'transfer_app_id');
+    }
+
+    /**
+     * 关联分红详情
+     */
+    public function details()
+    {
+        return $this->hasMany(UrsPartnerDividendDetail::class, 'dividend_record_id');
+    }
+
+    /**
+     * 根据日期获取分红记录
+     */
+    public static function getByDate(string $date): ?self
+    {
+        return self::where('dividend_date', $date)->first();
+    }
+
+    /**
+     * 检查指定日期是否已经分红
+     */
+    public static function isDividendProcessed(string $date): bool
+    {
+        return self::where('dividend_date', $date)
+            ->whereIn('status', [self::STATUS_COMPLETED, self::STATUS_PROCESSING])
+            ->exists();
+    }
+
+    /**
+     * 获取成功分红的记录数量
+     */
+    public static function getCompletedCount(): int
+    {
+        return self::where('status', self::STATUS_COMPLETED)->count();
+    }
+
+    /**
+     * 获取总分红金额
+     */
+    public static function getTotalDividendAmount(): string
+    {
+        return self::where('status', self::STATUS_COMPLETED)
+            ->sum('dividend_amount');
+    }
+}

+ 11 - 11
app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php

@@ -40,8 +40,7 @@ class UrsPromotionServiceProvider extends ServiceProvider
         // 注册命令
         if ($this->app->runningInConsole()) {
             $this->commands([
-
-
+                \App\Module\UrsPromotion\Commands\UrsPartnerDividendCommand::class,
             ]);
         }
     }
@@ -62,14 +61,15 @@ class UrsPromotionServiceProvider extends ServiceProvider
 
 
         // 注册定时任务
-//        $this->app->booted(function () {
-//            $schedule = $this->app->make(Schedule::class);
-//
-//            // 每小时更新一次达人等级
-//            $schedule->command('urs:update-talents')->hourly();
-//
-//            // 每天清理过期数据
-//            $schedule->command('urs:clean-data')->daily();
-//        });
+        $this->app->booted(function () {
+            $schedule = $this->app->make(Schedule::class);
+
+            // 每天11:30执行合伙人分红
+            $schedule->command('urs-promotion:partner-dividend')
+                ->dailyAt('11:30')
+                ->description('URS合伙人分红 - 顶级达人享受手续费分红')
+                ->withoutOverlapping() // 防止重复执行
+                ->runInBackground(); // 后台运行
+        });
     }
 }

+ 65 - 0
app/Module/UrsPromotion/Repositories/UrsPartnerDividendRepository.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace App\Module\UrsPromotion\Repositories;
+
+use App\Module\UrsPromotion\Models\UrsPartnerDividendRecord;
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * URS合伙人分红仓库类
+ *
+ * 仅供后台管理数据访问使用
+ */
+class UrsPartnerDividendRepository
+{
+    /**
+     * 模型实例
+     */
+    protected Model $model;
+
+    /**
+     * 预加载关系
+     */
+    protected array $with;
+
+    /**
+     * 构造函数
+     */
+    public function __construct(array $with = [])
+    {
+        $this->model = new UrsPartnerDividendRecord();
+        $this->with = array_merge(['transferApp'], $with);
+    }
+
+    /**
+     * 获取查询构建器
+     */
+    public function query()
+    {
+        return $this->model->with($this->with);
+    }
+
+    /**
+     * 根据ID查找记录
+     */
+    public function find(int $id): ?UrsPartnerDividendRecord
+    {
+        return $this->query()->find($id);
+    }
+
+    /**
+     * 获取所有记录
+     */
+    public function all()
+    {
+        return $this->query()->get();
+    }
+
+    /**
+     * 分页获取记录
+     */
+    public function paginate(int $perPage = 15)
+    {
+        return $this->query()->paginate($perPage);
+    }
+}

+ 315 - 0
app/Module/UrsPromotion/Services/UrsPartnerDividendService.php

@@ -0,0 +1,315 @@
+<?php
+
+namespace App\Module\UrsPromotion\Services;
+
+use App\Module\UrsPromotion\Logics\UrsPartnerDividendLogic;
+use App\Module\UrsPromotion\Models\UrsPartnerDividendRecord;
+use App\Module\UrsPromotion\Models\UrsPartnerDividendDetail;
+use App\Module\UrsPromotion\Models\UrsUserTalent;
+use Illuminate\Support\Facades\Log;
+use Carbon\Carbon;
+
+/**
+ * URS合伙人分红服务
+ *
+ * 对外提供URS合伙人分红相关服务接口
+ */
+class UrsPartnerDividendService
+{
+    /**
+     * 执行每日合伙人分红
+     *
+     * @param string|null $date 分红日期,默认为今天
+     * @return array 分红结果
+     */
+    public static function executeDailyDividend(?string $date = null): array
+    {
+        try {
+            $logic = new UrsPartnerDividendLogic();
+            return $logic->executeDailyDividend($date);
+
+        } catch (\Exception $e) {
+            Log::error('合伙人分红执行失败', [
+                'date' => $date ?? 'today',
+                'error' => $e->getMessage(),
+                'trace' => $e->getTraceAsString()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '分红执行失败: ' . $e->getMessage()
+            ];
+        }
+    }
+
+    /**
+     * 获取合伙人列表
+     *
+     * @return array 合伙人列表
+     */
+    public static function getPartnerList(): array
+    {
+        try {
+            // 获取所有顶级达人(合伙人)
+            $talents = UrsUserTalent::where('talent_level', 5)
+                ->get();
+
+            $partners = [];
+            foreach ($talents as $talent) {
+                // UrsUserTalent表中的user_id就是农场用户ID
+                $userId = $talent->user_id;
+
+                // 获取对应的URS用户ID
+                $ursUserId = UrsUserMappingService::getMappingUrsUserId($userId);
+
+                if ($ursUserId) {
+                    $user = \App\Module\User\Models\User::find($userId);
+                    if ($user) {
+                        $partners[] = [
+                            'user_id' => $userId,
+                            'urs_user_id' => $ursUserId,
+                            'username' => $user->username,
+                            'talent_level' => $talent->talent_level,
+                            'talent_level_name' => '合伙人',
+                            'created_at' => $talent->created_at->format('Y-m-d H:i:s')
+                        ];
+                    }
+                }
+            }
+
+            return [
+                'success' => true,
+                'data' => $partners,
+                'total' => count($partners)
+            ];
+
+        } catch (\Exception $e) {
+            Log::error('获取合伙人列表失败', [
+                'error' => $e->getMessage()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '获取合伙人列表失败: ' . $e->getMessage(),
+                'data' => [],
+                'total' => 0
+            ];
+        }
+    }
+
+    /**
+     * 获取分红历史记录
+     *
+     * @param string|null $startDate 开始日期
+     * @param string|null $endDate 结束日期
+     * @param int $limit 限制数量
+     * @return array 分红历史
+     */
+    public static function getDividendHistory(?string $startDate = null, ?string $endDate = null, int $limit = 50): array
+    {
+        try {
+            $query = UrsPartnerDividendRecord::with(['transferApp']);
+
+            if ($startDate) {
+                $query->where('dividend_date', '>=', $startDate);
+            }
+
+            if ($endDate) {
+                $query->where('dividend_date', '<=', $endDate);
+            }
+
+            $records = $query->orderBy('dividend_date', 'desc')
+                ->limit($limit)
+                ->get();
+
+            $history = [];
+            foreach ($records as $record) {
+                $history[] = [
+                    'id' => $record->id,
+                    'dividend_date' => $record->dividend_date->format('Y-m-d'),
+                    'total_fee_amount' => $record->total_fee_amount,
+                    'dividend_amount' => $record->dividend_amount,
+                    'partner_count' => $record->partner_count,
+                    'per_partner_amount' => $record->per_partner_amount,
+                    'status' => $record->status,
+                    'status_name' => $record->status_name,
+                    'error_message' => $record->error_message,
+                    'transfer_app_title' => $record->transferApp->title ?? '',
+                    'created_at' => $record->created_at->format('Y-m-d H:i:s')
+                ];
+            }
+
+            return [
+                'success' => true,
+                'data' => $history,
+                'total' => count($history)
+            ];
+
+        } catch (\Exception $e) {
+            Log::error('获取分红历史失败', [
+                'start_date' => $startDate,
+                'end_date' => $endDate,
+                'error' => $e->getMessage()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '获取分红历史失败: ' . $e->getMessage(),
+                'data' => [],
+                'total' => 0
+            ];
+        }
+    }
+
+    /**
+     * 获取分红详情
+     *
+     * @param int $dividendRecordId 分红记录ID
+     * @return array 分红详情
+     */
+    public static function getDividendDetails(int $dividendRecordId): array
+    {
+        try {
+            $record = UrsPartnerDividendRecord::with(['transferApp'])->find($dividendRecordId);
+            if (!$record) {
+                return [
+                    'success' => false,
+                    'message' => '分红记录不存在'
+                ];
+            }
+
+            $details = UrsPartnerDividendDetail::getByDividendRecordId($dividendRecordId);
+
+            $detailList = [];
+            foreach ($details as $detail) {
+                $detailList[] = [
+                    'id' => $detail->id,
+                    'user_id' => $detail->user_id,
+                    'urs_user_id' => $detail->urs_user_id,
+                    'username' => $detail->user->username ?? '',
+                    'talent_level' => $detail->talent_level,
+                    'talent_level_name' => $detail->talent_level_name,
+                    'dividend_amount' => $detail->dividend_amount,
+                    'status' => $detail->status,
+                    'status_name' => $detail->status_name,
+                    'error_message' => $detail->error_message,
+                    'transfer_order_id' => $detail->transfer_order_id,
+                    'created_at' => $detail->created_at->format('Y-m-d H:i:s')
+                ];
+            }
+
+            return [
+                'success' => true,
+                'data' => [
+                    'record' => [
+                        'id' => $record->id,
+                        'dividend_date' => $record->dividend_date->format('Y-m-d'),
+                        'total_fee_amount' => $record->total_fee_amount,
+                        'dividend_amount' => $record->dividend_amount,
+                        'partner_count' => $record->partner_count,
+                        'per_partner_amount' => $record->per_partner_amount,
+                        'status' => $record->status,
+                        'status_name' => $record->status_name,
+                        'error_message' => $record->error_message,
+                        'transfer_app_title' => $record->transferApp->title ?? '',
+                        'created_at' => $record->created_at->format('Y-m-d H:i:s')
+                    ],
+                    'details' => $detailList
+                ]
+            ];
+
+        } catch (\Exception $e) {
+            Log::error('获取分红详情失败', [
+                'dividend_record_id' => $dividendRecordId,
+                'error' => $e->getMessage()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '获取分红详情失败: ' . $e->getMessage()
+            ];
+        }
+    }
+
+    /**
+     * 获取用户分红历史
+     *
+     * @param int $userId 用户ID
+     * @return array 用户分红历史
+     */
+    public static function getUserDividendHistory(int $userId): array
+    {
+        try {
+            $details = UrsPartnerDividendDetail::getUserDividendHistory($userId);
+
+            $history = [];
+            foreach ($details as $detail) {
+                $history[] = [
+                    'id' => $detail->id,
+                    'dividend_date' => $detail->dividendRecord->dividend_date->format('Y-m-d'),
+                    'dividend_amount' => $detail->dividend_amount,
+                    'status' => $detail->status,
+                    'status_name' => $detail->status_name,
+                    'error_message' => $detail->error_message,
+                    'transfer_order_id' => $detail->transfer_order_id,
+                    'created_at' => $detail->created_at->format('Y-m-d H:i:s')
+                ];
+            }
+
+            return [
+                'success' => true,
+                'data' => $history,
+                'total' => count($history)
+            ];
+
+        } catch (\Exception $e) {
+            Log::error('获取用户分红历史失败', [
+                'user_id' => $userId,
+                'error' => $e->getMessage()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '获取用户分红历史失败: ' . $e->getMessage(),
+                'data' => [],
+                'total' => 0
+            ];
+        }
+    }
+
+    /**
+     * 获取分红统计信息
+     *
+     * @return array 统计信息
+     */
+    public static function getDividendStatistics(): array
+    {
+        try {
+            $totalRecords = UrsPartnerDividendRecord::count();
+            $completedRecords = UrsPartnerDividendRecord::getCompletedCount();
+            $totalDividendAmount = UrsPartnerDividendRecord::getTotalDividendAmount();
+            $currentPartnerCount = UrsUserTalent::where('talent_level', 5)->where('status', 1)->count();
+
+            return [
+                'success' => true,
+                'data' => [
+                    'total_records' => $totalRecords,
+                    'completed_records' => $completedRecords,
+                    'total_dividend_amount' => $totalDividendAmount,
+                    'current_partner_count' => $currentPartnerCount,
+                    'success_rate' => $totalRecords > 0 ? round($completedRecords / $totalRecords * 100, 2) : 0
+                ]
+            ];
+
+        } catch (\Exception $e) {
+            Log::error('获取分红统计信息失败', [
+                'error' => $e->getMessage()
+            ]);
+
+            return [
+                'success' => false,
+                'message' => '获取分红统计信息失败: ' . $e->getMessage()
+            ];
+        }
+    }
+}