时间: 2025年07月05日 03:54
任务: 优化URS达人等级更新命令的输出,增加活跃直推数据显示
问题: 用户39296没有升级,需要查看详细的升级条件和活跃用户数据
文件: app/Module/UrsPromotion/Services/UrsActiveUserService.php
// 修改前:直接访问User模型的last_activity_time(不存在)
if (!$user->last_activity_time) {
return false;
}
// 修改后:通过UserInfo关联访问
$userInfo = $user->info;
if (!$userInfo || !$userInfo->last_activity_time) {
return false;
}
文件: app/Module/UrsPromotion/Models/UrsUserMapping.php
// 在getUsersNeedActivityCheck方法中预加载用户信息关联
->with(['user', 'user.info']) // 预加载用户和用户信息关联
文件: app/Module/UrsPromotion/Services/UrsActiveUserService.php
/**
* 获取指定URS用户的活跃直推成员(仅直推层级)
*
* 针对达人等级升级条件优化,只统计直推活跃用户
* 相比getActiveTeamMembers方法,此方法只关注直推层级,性能更优
*/
public static function getActiveDirectMembers(int $ursUserId): array
{
// 只获取直推成员(第1层级)
$directMembers = UrsReferralService::getDirectReferrals($ursUserId);
if (empty($directMembers)) {
return [
'active_direct_count' => 0,
'active_direct_members' => []
];
}
// 获取活跃的直推成员
$activeDirectIds = UrsUserMapping::getActiveUrsUserIds($directMembers);
return [
'active_direct_count' => count($activeDirectIds),
'active_direct_members' => $activeDirectMembers
];
}
文件: app/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php
$this->commands([
// ... 其他命令
\App\Module\UrsPromotion\Commands\UrsUpdateActiveStatusCommand::class,
]);
文件: app/Module/UrsPromotion/Dtos/UrsUserTalentDto.php
/**
* @var int 活跃直推人数
*/
public int $activeDirectCount = 0;
/**
* @var int 活跃团队总人数
*/
public int $activeTotalCount = 0;
// 修改fromModel方法签名,支持活跃数据参数
public static function fromModel(
UrsUserTalent $model,
?array $currentConfig = null,
?array $nextConfig = null,
int $activeDirectCount = 0,
int $activeTotalCount = 0
): self
文件: app/Module/UrsPromotion/Services/UrsTalentService.php
// 获取活跃直推成员统计(优化性能,只获取直推活跃数据)
$activeDirectStats = UrsActiveUserService::getActiveDirectMembers($ursUserId);
// 为了显示完整信息,也获取活跃团队总数
$activeTeamStats = UrsActiveUserService::getActiveTeamMembers($ursUserId);
// 在创建DTO时传递活跃数据
return UrsUserTalentDto::fromModel(
$talent,
$currentConfig,
$nextConfigArray,
$activeDirectStats['active_direct_count'],
$activeTeamStats['active_total_count']
);
文件: app/Module/UrsPromotion/Commands/UrsUpdateTalentLevelCommand.php
新的输出包含:
升级条件检查: 显示下一等级的要求和当前状态
// 团队统计表格
$this->table(['统计项', '总数', '活跃数', '活跃率'], [
[
'直推人数',
$talentDto->directCount,
$talentDto->activeDirectCount,
$talentDto->directCount > 0 ? round($talentDto->activeDirectCount * 100 / $talentDto->directCount, 1) . '%' : '0%'
],
// ... 其他统计项
]);
// 升级条件检查
$this->table(['条件', '要求', '当前', '状态'], [
[
'直推人数',
$nextLevel['direct_count_required'],
$talentDto->directCount,
$directMet ? '✅ 已满足' : '❌ 未满足'
],
[
'活跃直推',
$nextLevel['active_direct_required'] ?? 0,
$talentDto->activeDirectCount,
$activeDirectMet ? '✅ 已满足' : '❌ 未满足'
]
]);
php artisan urs:update-active-status --limit=50
# 成功更新50个用户,其中50个被标记为活跃
php artisan urs:update-talent-level 39296
结果:
getActiveDirectMembers方法,只查询直推活跃用户,避免查询整个团队urs:update-active-status更新用户活跃状态app/Module/UrsPromotion/Services/UrsActiveUserService.phpapp/Module/UrsPromotion/Services/UrsTalentService.phpapp/Module/UrsPromotion/Dtos/UrsUserTalentDto.phpapp/Module/UrsPromotion/Commands/UrsUpdateTalentLevelCommand.phpapp/Module/UrsPromotion/Models/UrsUserMapping.phpapp/Module/UrsPromotion/Providers/UrsPromotionServiceProvider.php