任务时间: 2025年07月05日 02:04
任务类型: Bug修复
模块: UrsPromotion/UrsRelationCacheLogic
用户反馈"未进入农场,跳过缓存生成"会造成推荐关系的"断代"问题。
假设推荐链:A (未进入农场) → B (已进入农场) → C (已进入农场) → D (已进入农场)
原有逻辑问题:
原有逻辑:
// 如果农场用户ID为0,跳过缓存生成
if ($farmUserId <= 0 || $farmReferrerId <= 0) {
Log::info("URS用户 {$ursUserId} 或推荐人 {$ursReferrerId} 未进入农场,跳过缓存生成");
return true;
}
新逻辑:
当推荐人未进入农场时:
related_user_id = 0)当推荐人后来进入农场时:
related_user_id 从0更新为实际农场用户ID)generateUserRelationCache() 方法generateIndirectRelationsFromUrsChain() - 基于URS关系链生成间接关系generateIndirectRelationsFromExistingCache() - 基于已有缓存生成间接关系updatePlaceholderPaths() - 更新路径中的占位符regenerateDownstreamCaches() - 重新生成下级缓存buildFarmUserPath() - 构建农场用户路径buildUrsPath() - 构建URS用户路径buildCombinedFarmPath() - 构建组合农场用户路径buildCombinedUrsPath() - 构建组合URS用户路径updateFarmUserIdInCache() 方法增强related_user_id 从0更新为实际ID)创建了专门的测试命令 TestRelationCacheFixCommand:
# 检查断代问题
php artisan urs:test-relation-cache-fix --check
# 修复断代问题
php artisan urs:test-relation-cache-fix --fix
# 显示统计信息
php artisan urs:test-relation-cache-fix --stats
# 测试特定用户
php artisan urs:test-relation-cache-fix --user-id=24127
在实现过程中发现原有的 idx_user_relation 唯一索引存在问题:
UNIQUE KEY idx_user_relation (user_id, related_user_id)related_user_id = 0 的占位记录移除有问题的索引,增加包含深度的组合索引:
idx_user_relation (user_id, related_user_id)idx_user_relation_depth (user_id, related_user_id, depth)related_user_id = 0 的记录related_user_id = 0明确标识占位记录本次修复彻底解决了URS推荐关系缓存的断代问题,通过占位缓存机制确保推荐链的完整性,同时提供了完善的修复和测试工具。修复后的系统能够正确处理推荐人未进入农场的场景,确保业务逻辑的正确性和用户体验的完整性。