deploy: auto commit server changes 2026-06-12 17:51:57
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
|
||||
namespace app\adminapi\lists\community;
|
||||
|
||||
use app\adminapi\lists\BaseAdminDataLists;
|
||||
use app\common\lists\ListsSearchInterface;
|
||||
use app\common\model\user\User;
|
||||
use think\facade\Db;
|
||||
|
||||
class CommentAccountLists extends BaseAdminDataLists implements ListsSearchInterface
|
||||
{
|
||||
public function setSearch(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
public function lists(): array
|
||||
{
|
||||
$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);
|
||||
}
|
||||
|
||||
$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 '-';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user