feat(fsgx): 更新用户列表直推/伞下统计并同步测试文档

补充用户列表中的直推人数与伞下订单数统计逻辑,便于验证分销链路数据;同时更新验收与问题文档,记录当前手测结论和检查项。

Made-with: Cursor
This commit is contained in:
apple
2026-03-24 19:05:53 +08:00
parent b5cd96f92b
commit c2420e7393
4 changed files with 57 additions and 8 deletions

View File

@@ -819,6 +819,38 @@ class UserServices extends BaseServices
$agentLevelServices = app()->make(AgentLevelServices::class);
$hjfLevelMaps = $agentLevelServices->loadHjfUserListLevelMaps();
// 直推人数:统计 spread_uid 在 $uids 中的用户数
$directCountRaw = $this->dao->search(['spread_uid' => $uids])
->group('spread_uid')
->field('spread_uid, count(*) as cnt')
->select()->toArray();
$directCountMap = array_column($directCountRaw, 'cnt', 'spread_uid');
// 伞下订单数:先取 spread_uid 在 $uids 中的下级用户 uid → spread_uid 映射,再统计订单
$subUsersRaw = $this->dao->search(['spread_uid' => $uids])
->field('uid, spread_uid')
->select()->toArray();
// subUidToSpread: [sub_uid => spread_uid]
$subUidToSpread = array_column($subUsersRaw, 'spread_uid', 'uid');
$subUids = array_keys($subUidToSpread);
$umbrellaMap = [];
if ($subUids) {
$umbrellaOrdersRaw = \think\facade\Db::name('store_order')
->whereIn('uid', $subUids)
->where('paid', 1)
->where('pid', 0)
->whereIn('refund_status', [0, 3])
->field('uid, count(*) as cnt')
->group('uid')
->select()->toArray();
foreach ($umbrellaOrdersRaw as $row) {
$spreadUid = $subUidToSpread[$row['uid']] ?? null;
if ($spreadUid !== null) {
$umbrellaMap[$spreadUid] = ($umbrellaMap[$spreadUid] ?? 0) + (int)$row['cnt'];
}
}
}
// 补充信息
$extendInfo = SystemConfigService::get('user_extend_info', []);
$is_extend_info = false;
@@ -906,6 +938,10 @@ class UserServices extends BaseServices
$item['available_points'] = (int)($item['available_points'] ?? 0);
$item['frozen_points'] = (int)($item['frozen_points'] ?? 0);
// 直推人数 & 伞下订单数
$item['direct_count'] = (int)($directCountMap[$item['uid']] ?? 0);
$item['umbrella_orders'] = (int)($umbrellaMap[$item['uid']] ?? 0);
// 标签
$item['labels'] = $userlabel[$item['uid']] ?? '';