1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-06-26 04:21:27 +08:00

优化CourseUserTrait

This commit is contained in:
xiaochong0302 2024-04-06 22:18:41 +08:00
parent 7da5fb0424
commit 02e2c03f8f
6 changed files with 69 additions and 90 deletions

View File

@ -137,7 +137,7 @@ class Review extends Repository
public function countLikes($reviewId) public function countLikes($reviewId)
{ {
return ReviewLikeModel::count([ return (int)ReviewLikeModel::count([
'conditions' => 'review_id = :review_id: AND deleted = 0', 'conditions' => 'review_id = :review_id: AND deleted = 0',
'bind' => ['review_id' => $reviewId], 'bind' => ['review_id' => $reviewId],
]); ]);

View File

@ -14,6 +14,7 @@ use App\Models\CourseUser as CourseUserModel;
use App\Models\User as UserModel; use App\Models\User as UserModel;
use App\Repos\ChapterLike as ChapterLikeRepo; use App\Repos\ChapterLike as ChapterLikeRepo;
use App\Services\Logic\ChapterTrait; use App\Services\Logic\ChapterTrait;
use App\Services\Logic\Course\CourseUserTrait;
use App\Services\Logic\CourseTrait; use App\Services\Logic\CourseTrait;
use App\Services\Logic\Service as LogicService; use App\Services\Logic\Service as LogicService;
@ -31,6 +32,7 @@ class ChapterInfo extends LogicService
protected $user; protected $user;
use CourseTrait; use CourseTrait;
use CourseUserTrait;
use ChapterTrait; use ChapterTrait;
public function handle($id) public function handle($id)
@ -88,8 +90,6 @@ class ChapterInfo extends LogicService
if (!$this->ownedCourse) return; if (!$this->ownedCourse) return;
$courseUser = new CourseUserModel();
$sourceType = CourseUserModel::SOURCE_FREE; $sourceType = CourseUserModel::SOURCE_FREE;
if ($course->market_price > 0) { if ($course->market_price > 0) {
@ -100,18 +100,14 @@ class ChapterInfo extends LogicService
} }
} }
$courseUser->course_id = $course->id; $courseUser = $this->createCourseUser($course, $user, 0, $sourceType);
$courseUser->user_id = $user->id;
$courseUser->source_type = $sourceType;
$courseUser->create();
$this->courseUser = $courseUser; $this->courseUser = $courseUser;
$this->joinedCourse = true; $this->joinedCourse = true;
$this->incrCourseUserCount($course); $this->recountCourseUsers($course);
$this->incrUserCourseCount($user); $this->recountUserCourses($user);
} }
protected function handleChapterUser(ChapterModel $chapter, UserModel $user) protected function handleChapterUser(ChapterModel $chapter, UserModel $user)
@ -188,20 +184,6 @@ class ChapterInfo extends LogicService
return $me; 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) protected function incrChapterUserCount(ChapterModel $chapter)
{ {
$chapter->user_count += 1; $chapter->user_count += 1;

View File

@ -17,6 +17,7 @@ class CourseInfo extends LogicService
{ {
use CourseTrait; use CourseTrait;
use CourseUserTrait;
public function handle($id) public function handle($id)
{ {

View File

@ -17,6 +17,67 @@ use App\Repos\User as UserRepo;
trait CourseUserTrait 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) protected function assignUserCourse(CourseModel $course, UserModel $user, int $expiryTime, int $sourceType)
{ {
$courseUserRepo = new CourseUserRepo(); $courseUserRepo = new CourseUserRepo();

View File

@ -7,30 +7,11 @@
namespace App\Services\Logic; 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; use App\Validators\Course as CourseValidator;
trait CourseTrait trait CourseTrait
{ {
/**
* @var bool
*/
protected $ownedCourse = false;
/**
* @var bool
*/
protected $joinedCourse = false;
/**
* @var CourseUserModel|null
*/
protected $courseUser;
public function checkCourse($id) public function checkCourse($id)
{ {
$validator = new CourseValidator(); $validator = new CourseValidator();
@ -45,50 +26,4 @@ trait CourseTrait
return $validator->checkCourseCache($id); 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;
}
}
}
} }

View File

@ -198,7 +198,7 @@ class Refund extends Service
if (!$courseUser) return 1.00; 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; if ($userLearnings->count() == 0) return 1.00;