From 6f955bff842a06de1bf548defbba244a0942ff86 Mon Sep 17 00:00:00 2001 From: xiaochong0302 Date: Mon, 14 Dec 2020 16:16:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=B2=A1=E6=9C=89=E7=94=9F?= =?UTF-8?q?=E6=88=90MaxImGroupId=E7=9A=84=E9=97=AE=E9=A2=98,=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E8=AF=BE=E7=A8=8B=E9=BB=98=E8=AE=A4=E7=BE=A4=E4=B8=BB?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Admin/Services/Course.php | 43 ++++++++++++++++++++++++++++++ app/Models/Course.php | 11 -------- app/Models/ImGroup.php | 8 ++++++ 3 files changed, 51 insertions(+), 11 deletions(-) diff --git a/app/Http/Admin/Services/Course.php b/app/Http/Admin/Services/Course.php index 7f644d0d..10eaf27e 100644 --- a/app/Http/Admin/Services/Course.php +++ b/app/Http/Admin/Services/Course.php @@ -15,12 +15,14 @@ use App\Models\CourseRating as CourseRatingModel; use App\Models\CourseRelated as CourseRelatedModel; use App\Models\CourseUser as CourseUserModel; use App\Models\ImGroup as ImGroupModel; +use App\Models\ImGroupUser as ImGroupUserModel; use App\Repos\Category as CategoryRepo; use App\Repos\Chapter as ChapterRepo; use App\Repos\Course as CourseRepo; use App\Repos\CourseCategory as CourseCategoryRepo; use App\Repos\CourseRelated as CourseRelatedRepo; use App\Repos\CourseUser as CourseUserRepo; +use App\Repos\ImGroup as ImGroupRepo; use App\Repos\User as UserRepo; use App\Services\Sync\CourseIndex as CourseIndexSync; use App\Validators\Course as CourseValidator; @@ -94,6 +96,7 @@ class Course extends Service $imGroup = new ImGroupModel(); + $imGroup->type = ImGroupModel::TYPE_COURSE; $imGroup->course_id = $course->id; $imGroup->name = $course->title; $imGroup->about = $course->summary; @@ -190,6 +193,8 @@ class Course extends Service $course->update($data); + $this->updateImGroup($course); + return $course; } @@ -199,6 +204,12 @@ class Course extends Service $course->deleted = 1; $course->update(); + $groupRepo = new ImGroupRepo(); + + $group = $groupRepo->findByCourseId($course->id); + $group->deleted = 1; + $group->update(); + return $course; } @@ -208,6 +219,12 @@ class Course extends Service $course->deleted = 0; $course->update(); + $groupRepo = new ImGroupRepo(); + + $group = $groupRepo->findByCourseId($course->id); + $group->deleted = 0; + $group->update(); + return $course; } @@ -545,6 +562,32 @@ class Course extends Service $cache->rebuild($course->id); } + protected function updateImGroup(CourseModel $course) + { + $groupRepo = new ImGroupRepo(); + + $group = $groupRepo->findByCourseId($course->id); + + $data = []; + + if ($course->title != $group->name) { + $data['name'] = $course->title; + } + + if ($course->teacher_id > 0 && $group->owner_id == 0) { + + $groupUser = new ImGroupUserModel(); + $groupUser->group_id = $group->id; + $groupUser->user_id = $course->teacher_id; + $groupUser->create(); + + $data['owner_id'] = $course->teacher_id; + $data['user_count'] = $group->user_count + 1; + } + + $group->update($data); + } + protected function handleCourses($pager) { if ($pager->total_items > 0) { diff --git a/app/Models/Course.php b/app/Models/Course.php index 324c1f1f..aaa22404 100644 --- a/app/Models/Course.php +++ b/app/Models/Course.php @@ -326,17 +326,6 @@ class Course extends Model $cache->rebuild(); } - public function afterUpdate() - { - /** - * 群组名称和课程标题保持一致 - */ - if ($this->hasUpdated('title')) { - $imGroup = ImGroup::findFirst(['course_id' => $this->id]); - $imGroup->update(['name' => $this->title]); - } - } - public function afterFetch() { $this->market_price = (float)$this->market_price; diff --git a/app/Models/ImGroup.php b/app/Models/ImGroup.php index a8c42ea1..ec899cd0 100644 --- a/app/Models/ImGroup.php +++ b/app/Models/ImGroup.php @@ -2,6 +2,7 @@ namespace App\Models; +use App\Caches\MaxImGroupId as MaxImGroupIdCache; use App\Services\Sync\GroupIndex as GroupIndexSync; use Phalcon\Mvc\Model\Behavior\SoftDelete; use Phalcon\Text; @@ -153,6 +154,13 @@ class ImGroup extends Model $this->update_time = time(); } + public function afterCreate() + { + $cache = new MaxImGroupIdCache(); + + $cache->rebuild(); + } + public function afterFetch() { if (!Text::startsWith($this->avatar, 'http')) {