params['keyword'] ?? '')); $isDisable = $this->params['is_disable'] ?? ''; if ($keyword !== '') { $query->where('id|sn|nickname|account', 'like', '%' . $keyword . '%'); } if ($isDisable !== '') { $query->where('is_disable', (int) $isDisable); } $lists = $query ->field('id,sn,nickname,avatar,account,is_disable,create_time') ->order('id', 'desc') ->limit($this->limitOffset, $this->limitLength) ->select() ->toArray(); $userIds = array_map('intval', array_column($lists, 'id')); $articleCounts = []; $communityCounts = []; if (!empty($userIds)) { $articleRows = Db::name('article_comment') ->field('user_id, COUNT(*) AS count') ->whereIn('user_id', $userIds) ->whereNull('delete_time') ->group('user_id') ->select() ->toArray(); foreach ($articleRows as $row) { $articleCounts[(int) $row['user_id']] = (int) $row['count']; } $communityRows = Db::name('community_comment') ->field('user_id, COUNT(*) AS count') ->whereIn('user_id', $userIds) ->whereNull('delete_time') ->group('user_id') ->select() ->toArray(); foreach ($communityRows as $row) { $communityCounts[(int) $row['user_id']] = (int) $row['count']; } } foreach ($lists as &$item) { $item['persona_label'] = $this->resolvePersonaLabel((string) $item['nickname']); $item['article_comment_count'] = $articleCounts[(int) $item['id']] ?? 0; $item['community_comment_count'] = $communityCounts[(int) $item['id']] ?? 0; $item['total_comment_count'] = $item['article_comment_count'] + $item['community_comment_count']; $item['create_time'] = is_numeric($item['create_time']) ? date('Y-m-d H:i:s', (int) $item['create_time']) : $item['create_time']; } return $lists; } public function count(): int { $query = User::where('account', 'like', 'ai_comment_%'); $keyword = trim((string) ($this->params['keyword'] ?? '')); $isDisable = $this->params['is_disable'] ?? ''; if ($keyword !== '') { $query->where('id|sn|nickname|account', 'like', '%' . $keyword . '%'); } if ($isDisable !== '') { $query->where('is_disable', (int) $isDisable); } return $query->count(); } protected function resolvePersonaLabel(string $nickname): string { if (str_contains($nickname, '·')) { $parts = explode('·', $nickname, 2); return $parts[1] ?: '-'; } return '-'; } }