Files

212 lines
6.2 KiB
PHP

<?php
namespace app\api\controller\user;
use app\common\controller\Api;
use app\common\model\user\Study as StudyModel;
use app\common\model\user\Subscription as SubscriptionModel;
/**
* 学习统计
*/
class Study extends Api
{
// 无需登录的接口,*表示全部
protected $noNeedLogin = ["setLog","getMediaProgress"];
protected $noNeedRight = '*';
protected $model;
protected $SubscriptionModel;
public function _initialize()
{
parent::_initialize();
$this->model = new StudyModel();
$this->SubscriptionModel = new SubscriptionModel();
}
/**
* 获取学习记录
* @return void
*/
public function getStudyLog(){
$limit = input('limit',10);
$page = input('page',1);
$list = $this->model->getStudyLog($this->auth->id,[
'limit'=>$limit,
'page'=>$page
]);
$this->success('获取成功', $list);
}
/**
* 获取统计
* @return void
*/
public function getStatistics(){
$time = $this->request->post('time',0);
$timeLimit = [];
$data = [];
$data['log'] = [];
if($time==0){
//日
$timeLimit['start'] = strtotime('today midnight');
$timeLimit['end'] = strtotime('today 23:59:59');
for ($i = 6; $i >= 0; $i--) {
$startOfDay = strtotime("-$i day", strtotime('today'));
$endOfDay = strtotime("+1 day", $startOfDay) - 1;
$date = date('m-d', $startOfDay);
$data['log'][$date] = $this->model->getTotal($this->auth->id,['start'=>$startOfDay,'end'=>$endOfDay]);
}
}elseif($time==1){
//周
$timeLimit['start'] = strtotime('this week');
$timeLimit['end'] = strtotime('this week +6 days +23 hours +59 minutes +59 seconds');
$weeks = getPastWeeksOfMonth();
foreach ($weeks as $item){
$startDate = date('m.d', $item['startDate']);
$endDate = date('m.d', $item['endDate']);
$data['log']["$startDate~$endDate"] = $this->model->getTotal($this->auth->id,['start'=>$item['startDate'],'end'=>$item['endDate']]);
}
}else{
//月
// 获取今年过去的月份的每月开始时间戳与结束时间戳
for ($i = 1; $i <= date('n'); $i++) {
// 计算每月的开始时间戳
$startOfMonth = strtotime(date('Y-' . $i . '-01'));
// 计算每月的结束时间戳
$endOfMonth = strtotime(date('Y-' . $i . '-t'));
$date = date('m月', $startOfMonth);
$data['log'][$date] = $this->model->getTotal($this->auth->id,['start'=>$startOfMonth,'end'=>$endOfMonth]);
}
$timeLimit['start'] = strtotime('first day of this month midnight');
$timeLimit['end'] = strtotime('last day of this month 23:59:59');
}
$data['total'] = $this->model->getTotal($this->auth->id);
$data['time_total'] = $this->model->getTotal($this->auth->id,$timeLimit);
$this->success('获取成功', $data);
}
/**
* 设置记录
* @return void
*/
public function setLog(){
if(!$this->auth->id){
$this->success('暂未记录');
}
$courseId = $this->request->post('course_id','');
$columnId = $this->request->post('column_id','');
$pause = $this->request->post('pause',0);
$mediaProgress = input('media_progress',0);
//判断课程是否已经订阅
$userId = $this->auth->id;
$subscriptionAuth = \app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$courseId);
if(!$subscriptionAuth){
$this->success("暂无学习权限");
}
$this->model->setLog($userId,$courseId,$columnId,$mediaProgress);
if($pause){
$this->model->singleSyncCache($userId,$courseId);
}
$this->success("操作成功");
}
/**
* 学习完成
* @return void
*/
public function finish(){
$courseId = $this->request->post('course_id','');
$columnId = $this->request->post('column_id','');
if(!$courseId){
$this->error('参数错误');
}
$courseSubscriptionAuth = \app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$courseId);
if(!$courseSubscriptionAuth){
$this->success("暂无学习权限");
}
$this->model->singleSyncCache($this->auth->id,$courseId);
$this->model->where(['course_id'=>$courseId,'user_id'=>$this->auth->id])->update(['finish'=>1]);
if($columnId){
$columnSubscriptionAuth = \app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$columnId);
if(!$columnSubscriptionAuth){
$this->success("暂无学习权限");
}
if(\app\admin\library\project\App::isInstall('cert')){
(new \app\admin\model\app\cert\Grant)->courseCert($this->auth->id,$columnId);
}
}
$this->success("完成");
}
/**
* 获取媒体播放进度
* @return void
*/
public function getMediaProgress(){
if(!$this->auth->isLogin()){
$this->success('未登录',0);
}
$courseId = $this->request->post('course_id','');
$data = $this->model->where([
'course_id'=>$courseId,
'user_id'=>$this->auth->id
])->order("id","desc")->field("media_progress")->find();
$this->success("获取成功",($data ? $data['media_progress'] : 0));
}
/**
* 获取连续学习天数
* @param $userId
* @return int
*/
public function getContinuousStudyDays()
{
//获取连续学习天数
//获取加入时间
$studyDays = $this->model->getContinuousStudyDays($this->auth->id);
$joinDays = ceil((time() - $this->auth->createtime) / 86400);
$this->success("获取成功",[
'study_days'=>$studyDays,
'join_days'=>$joinDays
]);
}
}