任务时间: 2025年07月03日 14:15
任务类型: 功能升级
模块: UrsPromotion
用户询问URS推广模块关系缓存的创建时机,并要求支持20代的关系缓存,原有系统只支持3代关系。
修改UrsPromotionRelationLevel枚举类:
升级UrsRelationCacheLogic:
优化UrsProfitLogic:
推荐关系建立时
UrsReferralService::createReferral()用户进入农场时
UrsUserMappingService::createMapping()命令行重建
php artisan urs:rebuild-relation-cache
php artisan urs:rebuild-relation-cache --check
php artisan urs:rebuild-relation-cache --fix
后台管理界面
/admin/urs-promotion/user-relation-cache测试工具
php artisan urs:test-relation-cache generate --user-id=10016
php artisan urs:test-relation-cache batch --users=10016,10015
-- 20代关系缓存示例
user_id | related_user_id | urs_user_id | urs_related_user_id | level | depth | generation
--------|-----------------|-------------|---------------------|-------|-------|------------
39135 | 39134 | 10016 | 10015 | 1 | 1 | 直推
39135 | 39128 | 10016 | 10007 | 2 | 2 | 2级间推
39135 | 39127 | 10016 | 10006 | 2 | 3 | 3级间推
... | ... | ... | ... | 2 | 20 | 20级间推
public function generateUserRelationCache(int $ursUserId): bool
{
// 1. 清除现有缓存
$this->clearUserRelationCache($ursUserId);
// 2. 创建直接关系缓存(第1代)
$this->createDirectRelationCache($ursUserId, $referral);
// 3. 获取推荐人的所有上级(最多19级)
$upperRelations = UrsUserRelationCache::where('urs_user_id', $ursReferrerId)
->where('depth', '<', 20)
->get();
// 4. 创建间接关系缓存(第2-20代)
foreach ($upperRelations as $upperRelation) {
$newDepth = $upperRelation->depth + 1;
if ($newDepth <= 20) {
$this->createIndirectRelationCache($ursUserId, $upperRelation, $newDepth);
}
}
return true;
}
// 需要20次数据库查询
for ($level = 1; $level <= 20; $level++) {
$referral = UrsUserReferral::where('user_id', $currentUserId)->first();
// 每次查询一级关系
}
// 只需1次数据库查询
$relations = UrsUserRelationCache::where('user_id', $userId)
->where('depth', '<=', 20)
->orderBy('depth')
->get();
// 一次性获取所有20代关系
✅ 20代关系缓存生成正确 ✅ 查询性能显著提升 ✅ 后台管理界面正常显示 ✅ 命令行工具功能完整
✅ 单次查询获取20代关系链 ✅ 查询响应时间大幅降低 ✅ 内存使用合理 ✅ 存储空间可控
-- 测试查询结果
SELECT
depth as level,
related_user_id as referrer_farm_id,
urs_related_user_id as referrer_urs_id,
CASE
WHEN depth = 1 THEN '直推'
ELSE CONCAT(depth, '级间推')
END as relation_name
FROM kku_urs_promotion_user_relation_cache
WHERE user_id = 39135 AND depth <= 20
ORDER BY depth;
app/Module/UrsPromotion/Enums/UrsPromotionRelationLevel.php - 支持20代的枚举类app/Module/UrsPromotion/Logics/UrsRelationCacheLogic.php - 20代缓存生成逻辑app/Module/UrsPromotion/Logics/UrsProfitLogic.php - 优化的收益分发逻辑app/Module/UrsPromotion/AdminControllers/UrsUserRelationCacheController.php - 后台管理控制器app/Module/UrsPromotion/Docs/关系缓存创建时机.md - 详细的创建时机说明URS推广模块20代关系缓存机制升级已全面完成。通过支持20代推荐关系,系统不仅满足了当前的业务需求,还为未来的扩展提供了强大的技术支撑。查询性能的大幅提升将显著改善用户体验,为推广业务的发展奠定了坚实的技术基础。