mirror of
https://gitee.com/koogua/course-tencent-cloud.git
synced 2025-06-24 12:05:39 +08:00
166 lines
3.4 KiB
PHP
166 lines
3.4 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Models\Chapter as ChapterModel;
|
|
use App\Repos\Course as CourseRepo;
|
|
use Phalcon\Mvc\Model\Resultset;
|
|
|
|
class CourseStats extends Service
|
|
{
|
|
|
|
public function updateLessonCount($courseId)
|
|
{
|
|
$courseRepo = new CourseRepo();
|
|
|
|
$course = $courseRepo->findById($courseId);
|
|
|
|
$lessonCount = $courseRepo->countLessons($courseId);
|
|
|
|
$course->lesson_count = $lessonCount;
|
|
|
|
$course->update();
|
|
}
|
|
|
|
public function updateUserCount($courseId)
|
|
{
|
|
$courseRepo = new CourseRepo();
|
|
|
|
$course = $courseRepo->findById($courseId);
|
|
|
|
$userCount = $courseRepo->countUsers($courseId);
|
|
|
|
$course->user_count = $userCount;
|
|
|
|
$course->update();
|
|
}
|
|
|
|
public function updateReadAttrs($courseId)
|
|
{
|
|
$courseRepo = new CourseRepo();
|
|
|
|
$course = $courseRepo->findById($courseId);
|
|
|
|
/**
|
|
* @var Resultset|ChapterModel[] $lessons
|
|
*/
|
|
$lessons = $courseRepo->findLessons($courseId);
|
|
|
|
if ($lessons->count() == 0) {
|
|
return;
|
|
}
|
|
|
|
$wordCount = 0;
|
|
|
|
$duration = 0;
|
|
|
|
foreach ($lessons as $lesson) {
|
|
|
|
/**
|
|
* @var array $attrs
|
|
*/
|
|
$attrs = $lesson->attrs;
|
|
|
|
if (isset($attrs['word_count'])) {
|
|
$wordCount += $attrs['word_count'];
|
|
}
|
|
|
|
if (isset($attrs['duration'])) {
|
|
$duration += $attrs['duration'];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @var array $attrs
|
|
*/
|
|
$attrs = $course->attrs;
|
|
|
|
$attrs['word_count'] = $wordCount;
|
|
$attrs['duration'] = $duration;
|
|
|
|
$course->update(['attrs' => $attrs]);
|
|
}
|
|
|
|
public function updateLiveAttrs($courseId)
|
|
{
|
|
$courseRepo = new CourseRepo();
|
|
|
|
$course = $courseRepo->findById($courseId);
|
|
|
|
/**
|
|
* @var Resultset|ChapterModel[] $lessons
|
|
*/
|
|
$lessons = $courseRepo->findLessons($course->id);
|
|
|
|
if ($lessons->count() == 0) {
|
|
return;
|
|
}
|
|
|
|
$scopes = [];
|
|
|
|
foreach ($lessons as $lesson) {
|
|
|
|
/**
|
|
* @var array $attrs
|
|
*/
|
|
$attrs = $lesson->attrs;
|
|
|
|
if (isset($attrs['start_time'])) {
|
|
$scopes[] = $attrs['start_time'];
|
|
}
|
|
}
|
|
|
|
if (!$scopes) return;
|
|
|
|
/**
|
|
* @var array $attrs
|
|
*/
|
|
$attrs = $course->attrs;
|
|
|
|
$attrs['start_date'] = date('Y-m-d', min($scopes));
|
|
$attrs['end_date'] = date('Y-m-d', max($scopes));
|
|
|
|
$course->update(['attrs' => $attrs]);
|
|
}
|
|
|
|
public function updateVodAttrs($courseId)
|
|
{
|
|
$courseRepo = new CourseRepo();
|
|
|
|
$course = $courseRepo->findById($courseId);
|
|
|
|
/**
|
|
* @var Resultset|ChapterModel[] $lessons
|
|
*/
|
|
$lessons = $courseRepo->findChapters($course->id);
|
|
|
|
if ($lessons->count() == 0) {
|
|
return;
|
|
}
|
|
|
|
$duration = 0;
|
|
|
|
foreach ($lessons as $lesson) {
|
|
|
|
/**
|
|
* @var array $attrs
|
|
*/
|
|
$attrs = $lesson->attrs;
|
|
|
|
if (isset($attrs['duration'])) {
|
|
$duration += $attrs['duration'];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @var array $attrs
|
|
*/
|
|
$attrs = $course->attrs;
|
|
|
|
$attrs['duration'] = $duration;
|
|
|
|
$course->update(['attrs' => $attrs]);
|
|
}
|
|
|
|
}
|