diff --git a/app/Caches/ImGroupActiveUserList.php b/app/Caches/ImGroupActiveUserList.php index 82c24f68..ce7a3aef 100644 --- a/app/Caches/ImGroupActiveUserList.php +++ b/app/Caches/ImGroupActiveUserList.php @@ -2,7 +2,7 @@ namespace App\Caches; -use App\Models\ImGroupMessage as ImGroupMessageModel; +use App\Models\ImMessage as ImMessageModel; use App\Models\User as UserModel; use App\Repos\User as UserRepo; use Phalcon\Mvc\Model\Resultset; @@ -58,11 +58,12 @@ class ImGroupActiveUserList extends Cache $startTime = strtotime("-{$days} days"); $endTime = time(); - $rows = ImGroupMessageModel::query() + $rows = ImMessageModel::query() ->columns(['sender_id', 'total_count' => 'count(sender_id)']) ->groupBy('sender_id') ->orderBy('total_count DESC') - ->where('group_id = :group_id:', ['group_id' => $groupId]) + ->where('receiver_id = :group_id:', ['group_id' => $groupId]) + ->andWhere('receiver_type = :type:', ['type' => ImMessageModel::TYPE_GROUP]) ->betweenWhere('create_time', $startTime, $endTime) ->limit($limit) ->execute(); diff --git a/app/Console/Tasks/SyncCourseIndexTask.php b/app/Console/Tasks/SyncCourseIndexTask.php index ecb9f9e3..8911734d 100644 --- a/app/Console/Tasks/SyncCourseIndexTask.php +++ b/app/Console/Tasks/SyncCourseIndexTask.php @@ -34,7 +34,7 @@ class SyncCourseIndexTask extends Task { $key = $this->getSyncKey(); - $courseIds = $this->redis->sRandMember($key, 100); + $courseIds = $this->redis->sRandMember($key, 1000); if (!$courseIds) return; diff --git a/app/Console/Tasks/SyncGroupIndexTask.php b/app/Console/Tasks/SyncGroupIndexTask.php new file mode 100644 index 00000000..ebb81e2f --- /dev/null +++ b/app/Console/Tasks/SyncGroupIndexTask.php @@ -0,0 +1,80 @@ +cache = $this->getDI()->get('cache'); + + $this->redis = $this->cache->getRedis(); + + $this->rebuild(); + } + + protected function rebuild() + { + $key = $this->getSyncKey(); + + $groupIds = $this->redis->sRandMember($key, 1000); + + if (!$groupIds) return; + + $groupRepo = new GroupRepo(); + + $groups = $groupRepo->findByIds($groupIds); + + if ($groups->count() == 0) { + return; + } + + $document = new GroupDocument(); + + $handler = new GroupSearcher(); + + $index = $handler->getXS()->getIndex(); + + $index->openBuffer(); + + foreach ($groups as $group) { + + $doc = $document->setDocument($group); + + if ($group->published == 1) { + $index->update($doc); + } else { + $index->del($group->id); + } + } + + $index->closeBuffer(); + + $this->redis->sRem($key, ...$groupIds); + } + + protected function getSyncKey() + { + $syncer = new GroupIndexSyncer(); + + return $syncer->getSyncKey(); + } + +} diff --git a/app/Console/Tasks/SyncUserIndexTask.php b/app/Console/Tasks/SyncUserIndexTask.php new file mode 100644 index 00000000..bd7c8aea --- /dev/null +++ b/app/Console/Tasks/SyncUserIndexTask.php @@ -0,0 +1,80 @@ +cache = $this->getDI()->get('cache'); + + $this->redis = $this->cache->getRedis(); + + $this->rebuild(); + } + + protected function rebuild() + { + $key = $this->getSyncKey(); + + $userIds = $this->redis->sRandMember($key, 1000); + + if (!$userIds) return; + + $userRepo = new UserRepo(); + + $users = $userRepo->findByIds($userIds); + + if ($users->count() == 0) { + return; + } + + $document = new UserDocument(); + + $handler = new UserSearcher(); + + $index = $handler->getXS()->getIndex(); + + $index->openBuffer(); + + foreach ($users as $user) { + + $doc = $document->setDocument($user); + + if ($user->deleted == 0) { + $index->update($doc); + } else { + $index->del($user->id); + } + } + + $index->closeBuffer(); + + $this->redis->sRem($key, ...$userIds); + } + + protected function getSyncKey() + { + $syncer = new UserIndexSyncer(); + + return $syncer->getSyncKey(); + } + +} diff --git a/app/Http/Admin/Views/setting/site.volt b/app/Http/Admin/Views/setting/site.volt index 7259ad83..c1c231e6 100644 --- a/app/Http/Admin/Views/setting/site.volt +++ b/app/Http/Admin/Views/setting/site.volt @@ -2,10 +2,27 @@ {% block content %} + {% set closed_tips_display = site.status == 'normal' ? 'style="display:none;"' : '' %} +