任务时间: 2025年07月05日 04:15 任务类型: Bug修复 模块: AppGame/Handler/Promotion
用户反馈 getTodayStats 方法不能正确工作,缓存的时间判定有问题,应该使用 UrsUserMapping 表的 mapping_time 字段进行时间判定,而不是使用缓存表的 created_at 字段。
UrsUserRelationCache.created_at 作为今日新增的判定依据created_at 表示关系缓存记录的创建时间,而不是用户实际进入农场的时间应该使用 UrsUserMapping.mapping_time 字段,这个字段才真正表示用户进入农场的时间。
将原来基于缓存表 created_at 的查询改为基于映射表 mapping_time 的关联查询:
修改前:
$todayRelations = UrsUserRelationCache::where('related_user_id', $farmUserId)
->whereDate('created_at', today())
->selectRaw('...')
->first();
修改后:
$todayRelations = UrsUserRelationCache::where('related_user_id', $farmUserId)
->join('urs_promotion_user_mappings', 'kku_urs_promotion_user_relation_cache.urs_user_id', '=', 'urs_promotion_user_mappings.urs_user_id')
->where('urs_promotion_user_mappings.status', UrsUserMapping::STATUS_VALID)
->whereDate('urs_promotion_user_mappings.mapping_time', today())
->selectRaw('...')
->first();
app/Module/AppGame/Handler/Promotion/InfoHandler.phpgetTodayStats()use App\Module\UrsPromotion\Models\UrsUserMapping;urs_promotion_user_mappings 表status = 1(有效状态)created_at 改为 mapping_timetests/Unit/AppGame/Handler/Promotion/TodayStatsLogicTest.phptest_optimized_query_logic_with_mapping_time()test_query_bindings_with_mapping_time()PHPUnit 11.5.20 by Sebastian Bergmann and contributors.
....... 7 / 7 (100%)
Time: 00:00.496, Memory: 46.50 MB
OK (7 tests, 16 assertions)
mapping_time)urs_promotion_user_mappings 表的数据完整性mapping_time 字段正确记录用户进入农场的时间mapping_time 字段的数据质量getActiveStats 方法没有类似问题,因为它基于用户的活跃时间(last_activity_time)进行统计,时间语义是正确的。
此修复不影响关系缓存的生成和维护机制,只是修正了统计查询的时间基准。