diff --git a/app/Repos/Review.php b/app/Repos/Review.php index 8f3f7a0a..5f0e29e2 100644 --- a/app/Repos/Review.php +++ b/app/Repos/Review.php @@ -137,7 +137,7 @@ class Review extends Repository public function countLikes($reviewId) { - return ReviewLikeModel::count([ + return (int)ReviewLikeModel::count([ 'conditions' => 'review_id = :review_id: AND deleted = 0', 'bind' => ['review_id' => $reviewId], ]); diff --git a/app/Services/Logic/Chapter/ChapterInfo.php b/app/Services/Logic/Chapter/ChapterInfo.php index 3311e644..e6846397 100644 --- a/app/Services/Logic/Chapter/ChapterInfo.php +++ b/app/Services/Logic/Chapter/ChapterInfo.php @@ -14,6 +14,7 @@ use App\Models\CourseUser as CourseUserModel; use App\Models\User as UserModel; use App\Repos\ChapterLike as ChapterLikeRepo; use App\Services\Logic\ChapterTrait; +use App\Services\Logic\Course\CourseUserTrait; use App\Services\Logic\CourseTrait; use App\Services\Logic\Service as LogicService; @@ -31,6 +32,7 @@ class ChapterInfo extends LogicService protected $user; use CourseTrait; + use CourseUserTrait; use ChapterTrait; public function handle($id) @@ -88,8 +90,6 @@ class ChapterInfo extends LogicService if (!$this->ownedCourse) return; - $courseUser = new CourseUserModel(); - $sourceType = CourseUserModel::SOURCE_FREE; if ($course->market_price > 0) { @@ -100,18 +100,14 @@ class ChapterInfo extends LogicService } } - $courseUser->course_id = $course->id; - $courseUser->user_id = $user->id; - $courseUser->source_type = $sourceType; - - $courseUser->create(); + $courseUser = $this->createCourseUser($course, $user, 0, $sourceType); $this->courseUser = $courseUser; $this->joinedCourse = true; - $this->incrCourseUserCount($course); - $this->incrUserCourseCount($user); + $this->recountCourseUsers($course); + $this->recountUserCourses($user); } protected function handleChapterUser(ChapterModel $chapter, UserModel $user) @@ -188,20 +184,6 @@ class ChapterInfo extends LogicService return $me; } - protected function incrUserCourseCount(UserModel $user) - { - $user->course_count += 1; - - $user->update(); - } - - protected function incrCourseUserCount(CourseModel $course) - { - $course->user_count += 1; - - $course->update(); - } - protected function incrChapterUserCount(ChapterModel $chapter) { $chapter->user_count += 1; diff --git a/app/Services/Logic/Course/CourseInfo.php b/app/Services/Logic/Course/CourseInfo.php index ca4c53d8..b9903617 100644 --- a/app/Services/Logic/Course/CourseInfo.php +++ b/app/Services/Logic/Course/CourseInfo.php @@ -17,6 +17,7 @@ class CourseInfo extends LogicService { use CourseTrait; + use CourseUserTrait; public function handle($id) { diff --git a/app/Services/Logic/Course/CourseUserTrait.php b/app/Services/Logic/Course/CourseUserTrait.php index 4c8a1608..3ebb587b 100644 --- a/app/Services/Logic/Course/CourseUserTrait.php +++ b/app/Services/Logic/Course/CourseUserTrait.php @@ -17,6 +17,67 @@ use App\Repos\User as UserRepo; trait CourseUserTrait { + /** + * @var bool + */ + protected $ownedCourse = false; + + /** + * @var bool + */ + protected $joinedCourse = false; + + /** + * @var CourseUserModel|null + */ + protected $courseUser; + + public function setCourseUser(CourseModel $course, UserModel $user) + { + if ($user->id == 0) return; + + $courseUserRepo = new CourseUserRepo(); + + $courseUser = $courseUserRepo->findCourseUser($course->id, $user->id); + + $this->courseUser = $courseUser; + + if ($courseUser) { + $this->joinedCourse = true; + } + + if ($course->market_price == 0) { + + $this->ownedCourse = true; + + } elseif ($course->market_price > 0 && $course->vip_price == 0 && $user->vip == 1) { + + $this->ownedCourse = true; + + } elseif ($courseUser) { + + $sourceTypes = [ + CourseUserModel::SOURCE_CHARGE, + CourseUserModel::SOURCE_MANUAL, + CourseUserModel::SOURCE_POINT_REDEEM, + CourseUserModel::SOURCE_LUCKY_REDEEM, + ]; + + $case1 = $courseUser->deleted == 0; + $case2 = $courseUser->expiry_time > time(); + $case3 = in_array($courseUser->source_type, $sourceTypes); + + /** + * 之前参与过课程,但不再满足条件,视为未参与 + */ + if ($case1 && $case2 && $case3) { + $this->ownedCourse = true; + } else { + $this->joinedCourse = false; + } + } + } + protected function assignUserCourse(CourseModel $course, UserModel $user, int $expiryTime, int $sourceType) { $courseUserRepo = new CourseUserRepo(); diff --git a/app/Services/Logic/CourseTrait.php b/app/Services/Logic/CourseTrait.php index 91330c89..b6a57c2f 100644 --- a/app/Services/Logic/CourseTrait.php +++ b/app/Services/Logic/CourseTrait.php @@ -7,30 +7,11 @@ namespace App\Services\Logic; -use App\Models\Course as CourseModel; -use App\Models\CourseUser as CourseUserModel; -use App\Models\User as UserModel; -use App\Repos\CourseUser as CourseUserRepo; use App\Validators\Course as CourseValidator; trait CourseTrait { - /** - * @var bool - */ - protected $ownedCourse = false; - - /** - * @var bool - */ - protected $joinedCourse = false; - - /** - * @var CourseUserModel|null - */ - protected $courseUser; - public function checkCourse($id) { $validator = new CourseValidator(); @@ -45,50 +26,4 @@ trait CourseTrait return $validator->checkCourseCache($id); } - public function setCourseUser(CourseModel $course, UserModel $user) - { - if ($user->id == 0) return; - - $courseUserRepo = new CourseUserRepo(); - - $courseUser = $courseUserRepo->findCourseUser($course->id, $user->id); - - $this->courseUser = $courseUser; - - if ($courseUser) { - $this->joinedCourse = true; - } - - if ($course->market_price == 0) { - - $this->ownedCourse = true; - - } elseif ($course->market_price > 0 && $course->vip_price == 0 && $user->vip == 1) { - - $this->ownedCourse = true; - - } elseif ($courseUser) { - - $sourceTypes = [ - CourseUserModel::SOURCE_CHARGE, - CourseUserModel::SOURCE_MANUAL, - CourseUserModel::SOURCE_POINT_REDEEM, - CourseUserModel::SOURCE_LUCKY_REDEEM, - ]; - - $case1 = $courseUser->deleted == 0; - $case2 = $courseUser->expiry_time > time(); - $case3 = in_array($courseUser->source_type, $sourceTypes); - - /** - * 之前参与过课程,但不再满足条件,视为未参与 - */ - if ($case1 && $case2 && $case3) { - $this->ownedCourse = true; - } else { - $this->joinedCourse = false; - } - } - } - } diff --git a/app/Services/Refund.php b/app/Services/Refund.php index 3dc23a27..90d66b1d 100644 --- a/app/Services/Refund.php +++ b/app/Services/Refund.php @@ -198,7 +198,7 @@ class Refund extends Service if (!$courseUser) return 1.00; - $userLearnings = $courseRepo->findUserLearnings($courseId, $userId); + $userLearnings = $courseRepo->findUserLearnings($courseId, $userId, $courseUser->plan_id); if ($userLearnings->count() == 0) return 1.00;