info('=== URS合伙人分红任务开始 ==='); // 获取分红日期,默认为昨天 $date = $this->option('date') ?: Carbon::yesterday()->format('Y-m-d'); $force = $this->option('force'); $retry = $this->option('retry'); $this->info("分红日期: {$date}"); // 验证日期格式 if (!$this->validateDate($date)) { $this->error('日期格式错误,请使用 Y-m-d 格式,例如:2025-06-25'); return self::FAILURE; } // 如果是重试模式 if ($retry) { $this->info('重试失败的分红...'); $result = UrsPartnerDividendService::retryFailedDividend($date); if ($result['success']) { $this->info('✅ 重试执行成功!'); $this->displayRetryResult($result['data']); } else { $this->error('❌ 重试执行失败:' . $result['message']); return self::FAILURE; } return self::SUCCESS; } // 如果不是强制执行,检查是否已经分红 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}%"); } /** * 显示重试结果 */ private function displayRetryResult(array $data): void { $this->info(''); $this->info('🔄 重试结果统计:'); $this->info("重试数量: {$data['retry_count']} 个"); $this->info("成功转账: {$data['success_count']} 个"); if ($data['failed_count'] > 0) { $this->warn("仍然失败: {$data['failed_count']} 个"); } // 计算重试成功率 $retrySuccessRate = $data['retry_count'] > 0 ? round($data['success_count'] / $data['retry_count'] * 100, 2) : 0; $this->info("重试成功率: {$retrySuccessRate}%"); } }