任务时间: 2025年07月04日 23:39
任务类型: 功能实现
模块: UrsPromotion/Services
实现 UrsReferralService 中的 getTeamANumber 方法,该方法通过关系缓存表查询三代用户并统计有效人数。
public static function getTeamANumber($userId):int
{
// 有效是指,map表的有效字段=0的
// $uids =
// 关系缓存表独处三代所有的uids
// 到map表查询有效的人数
}
public static function getTeamANumber($userId): int
{
try {
// 通过关系缓存表获取三代内所有的URS用户ID
$ursUserIds = UrsUserRelationCache::where('related_user_id', $userId)
->where('depth', '<=', 3) // 只统计前3级
->pluck('urs_user_id')
->toArray();
if (empty($ursUserIds)) {
return 0;
}
// 到映射表查询有效的人数(status=1为有效)
$validCount = UrsUserMapping::whereIn('urs_user_id', $ursUserIds)
->where('status', 1) // STATUS_VALID = 1
->count();
return $validCount;
} catch (\Exception $e) {
Log::error('获取三级内有效用户数量失败', [
'user_id' => $userId,
'error' => $e->getMessage()
]);
return 0;
}
}
depth <= 3 限制查询范围whereIn 批量查询映射状态count() 直接统计数量而不是获取全部数据第一步: 查询关系缓存表
SELECT urs_user_id FROM kku_urs_promotion_user_relation_cache
WHERE related_user_id = ? AND depth <= 3
第二步: 查询映射表统计有效用户
SELECT COUNT(*) FROM kku_urs_promotion_user_mappings
WHERE urs_user_id IN (?, ?, ...) AND status = 1
创建了 UrsReferralServiceTeamANumberTest.php,包含7个测试用例:
创建了 UrsReferralServiceTeamANumberIntegrationTest.php,包含8个测试用例:
单元测试: 7 tests, 11 assertions - 全部通过
集成测试: 8 tests, 32 assertions - 全部通过
总计: 15 tests, 43 assertions - 100% 通过率
// 获取用户ID为20001的三级内有效用户数量
$validCount = UrsReferralService::getTeamANumber(20001);
// 返回值示例
// 如果该用户有5个三级内的团队成员,其中3个状态有效,则返回3
echo $validCount; // 输出: 3
UrsUserRelationCache 表的数据完整性UrsUserMapping 表的状态字段准确性depth <= 3 条件成功实现了 getTeamANumber 方法,该方法:
方法已准备就绪,可以投入生产使用。