From 56bbb7d6fefa129ec6380ed50f163f18b1bb1f47 Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Wed, 8 Mar 2023 19:49:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=92=E5=BA=8F=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=94=B9=E5=96=84=E5=88=86=E9=A1=B5=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Repos/Answer.php | 4 +- app/Repos/Article.php | 4 +- app/Repos/Comment.php | 2 +- app/Repos/Course.php | 6 +-- app/Repos/PointGift.php | 2 +- app/Repos/Question.php | 4 +- app/Repos/Slide.php | 8 +++- app/Repos/Task.php | 95 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 113 insertions(+), 12 deletions(-) create mode 100644 app/Repos/Task.php diff --git a/app/Repos/Answer.php b/app/Repos/Answer.php index 0cb6f54a..c38d6df9 100644 --- a/app/Repos/Answer.php +++ b/app/Repos/Answer.php @@ -56,10 +56,10 @@ class Answer extends Repository switch ($sort) { case 'popular': - $orderBy = 'like_count DESC'; + $orderBy = 'like_count DESC, id DESC'; break; case 'accepted': - $orderBy = 'accepted DESC, like_count DESC'; + $orderBy = 'accepted DESC, id DESC'; break; case 'oldest': $orderBy = 'id ASC'; diff --git a/app/Repos/Article.php b/app/Repos/Article.php index 56b58923..c4d02014 100644 --- a/app/Repos/Article.php +++ b/app/Repos/Article.php @@ -107,10 +107,10 @@ class Article extends Repository switch ($sort) { case 'like': - $orderBy = 'like_count DESC'; + $orderBy = 'like_count DESC, id DESC'; break; case 'popular': - $orderBy = 'score DESC'; + $orderBy = 'score DESC, id DESC'; break; case 'oldest': $orderBy = 'id ASC'; diff --git a/app/Repos/Comment.php b/app/Repos/Comment.php index d2431c02..ba7115cb 100644 --- a/app/Repos/Comment.php +++ b/app/Repos/Comment.php @@ -66,7 +66,7 @@ class Comment extends Repository switch ($sort) { case 'popular': - $orderBy = 'like_count DESC'; + $orderBy = 'like_count DESC, id DESC'; break; case 'oldest': $orderBy = 'id ASC'; diff --git a/app/Repos/Course.php b/app/Repos/Course.php index 2188992e..538aad47 100644 --- a/app/Repos/Course.php +++ b/app/Repos/Course.php @@ -119,13 +119,13 @@ class Course extends Repository switch ($sort) { case 'score': - $orderBy = 'score DESC'; + $orderBy = 'score DESC, id DESC'; break; case 'rating': - $orderBy = 'rating DESC'; + $orderBy = 'rating DESC, id DESC'; break; case 'popular': - $orderBy = 'user_count DESC'; + $orderBy = 'user_count DESC, id DESC'; break; case 'oldest': $orderBy = 'id ASC'; diff --git a/app/Repos/PointGift.php b/app/Repos/PointGift.php index f57ad4f7..e73161ae 100644 --- a/app/Repos/PointGift.php +++ b/app/Repos/PointGift.php @@ -50,7 +50,7 @@ class PointGift extends Repository switch ($sort) { case 'popular': - $orderBy = 'redeem_count DESC'; + $orderBy = 'redeem_count DESC, id DESC'; break; case 'oldest': $orderBy = 'id ASC'; diff --git a/app/Repos/Question.php b/app/Repos/Question.php index 610a5899..04fb05ff 100644 --- a/app/Repos/Question.php +++ b/app/Repos/Question.php @@ -100,10 +100,10 @@ class Question extends Repository switch ($sort) { case 'active': - $orderBy = 'last_reply_time DESC'; + $orderBy = 'last_reply_time DESC, id DESC'; break; case 'score': - $orderBy = 'score DESC'; + $orderBy = 'score DESC, id DESC'; break; case 'oldest': $orderBy = 'id ASC'; diff --git a/app/Repos/Slide.php b/app/Repos/Slide.php index 3378651c..91f9000c 100644 --- a/app/Repos/Slide.php +++ b/app/Repos/Slide.php @@ -45,8 +45,14 @@ class Slide extends Repository } switch ($sort) { + case 'oldest': + $orderBy = 'id ASC'; + break; + case 'latest': + $orderBy = 'id DESC'; + break; default: - $orderBy = 'priority ASC'; + $orderBy = 'priority ASC, id DESC'; break; } diff --git a/app/Repos/Task.php b/app/Repos/Task.php new file mode 100644 index 00000000..3bcee4ff --- /dev/null +++ b/app/Repos/Task.php @@ -0,0 +1,95 @@ +modelsManager->createBuilder(); + + $builder->from(TaskModel::class); + + $builder->where('1 = 1'); + + if (!empty($where['id'])) { + $builder->andWhere('id = :id:', ['id' => $where['id']]); + } + + if (!empty($where['item_id'])) { + $builder->andWhere('item_id = :item_id:', ['item_id' => $where['item_id']]); + } + + if (!empty($where['item_type'])) { + $builder->andWhere('item_type = :item_type:', ['item_type' => $where['item_type']]); + } + + if (!empty($where['status'])) { + $builder->andWhere('status = :status:', ['status' => $where['status']]); + } + + if (isset($where['locked'])) { + $builder->andWhere('locked = :locked:', ['locked' => $where['locked']]); + } + + switch ($sort) { + case 'oldest': + $orderBy = 'id ASC'; + break; + case 'latest': + $orderBy = 'id DESC'; + break; + default: + $orderBy = 'priority ASC, id ASC'; + break; + } + + $builder->orderBy($orderBy); + + $pager = new PagerQueryBuilder([ + 'builder' => $builder, + 'page' => $page, + 'limit' => $limit, + ]); + + return $pager->paginate(); + } + + /** + * @param int $id + * @return TaskModel|Model|bool + */ + public function findById($id) + { + return TaskModel::findFirst([ + 'conditions' => 'id = :id:', + 'bind' => ['id' => $id], + ]); + } + + /** + * @param array $ids + * @param array|string $columns + * @return ResultsetInterface|Resultset|TaskModel[] + */ + public function findByIds($ids, $columns = '*') + { + return TaskModel::query() + ->columns($columns) + ->inWhere('id', $ids) + ->execute(); + } + +}