model = new \app\api\model\app\exam\Exercises(); $this->logModel = new \app\api\model\app\exam\ExercisesLog; $this->exercisesSubscribeModel = new \app\api\model\app\exam\ExercisesSubscribe; } /** * 获取练习详情 * @return void */ public function detail() { $id = input('id'); $data = $this->model->with(['course'])->where([ 'exercises.id'=>$id ])->where([ 'exercises.status'=>1 ])->find(); if(!$data){ $this->error('获取练习详情信息错误,请重试'); } if($data->course && $data->course->id){ //判断是否已经订阅 $data->course->is_subscription = \app\common\model\user\Subscription::getSubscriptionAuth($this->auth->id,$data->course->id); $data->course->visible(['is_subscription','id','name','cover','pay_price','price','pay_type']); $courseData = $data->course->toArray(); $courseType = $courseData['type'] ?? ''; $isVirtualPay = \app\common\library\pay\VirtualPayService::isUseVirtualPay($courseType); $courseData['is_virtual_pay'] = $isVirtualPay ? 1 : 0; if ($isVirtualPay) { $courseData = \app\common\library\pay\VirtualPayService::convertPriceFields($courseData, ['price', 'pay_price']); } $data['course'] = $courseData; } else { $data['course'] = null; } $data->is_auth = \app\common\model\app\exam\ExercisesSubscribe::checkAuth($this->auth->id,$id); $data->is_subscribe = \app\common\model\app\exam\ExercisesSubscribe::checkSubscribe($this->auth->id,$id); $this->model->where(['id'=>$id])->setInc('views'); if(!$data['question_total_count']){ $data['question_total_count'] = $this->model->getExercisesQuestionCount($id); } $data['detail'] = \addons\alivod\library\Alivod::parseContentAliovdTag($data['detail']); $data['is_virtual_pay'] = \app\common\library\pay\VirtualPayService::isUseVirtualPay('exercises'); if ($data['is_virtual_pay'] && isset($data['pay_price'])) { $data['pay_price'] = \app\common\library\pay\VirtualPayService::convertPrice($data['pay_price']); } $this->success("获取成功",$data); } /** * 获取课程关联的题库练习 * @return void */ public function getCourseBindExam(){ $courseId = $this->request->post('course_id'); $examIds = $this->model ->where([ 'bind_course'=>$courseId, 'status'=>1 ]) ->column('id'); $query = \app\common\model\goods\Handle::getGoodsQuery(); $list = []; if($examIds) { $list = $query->where([ 'id'=>['in',$examIds], 'type'=>'exercises' ])->select(); if($list){ foreach ($list as &$item){ $priceInfo = \app\common\model\goods\Handle::parseGoodsExtendInfo($item['id'],$item['type']); $item = array_merge($item,$priceInfo); } } } $this->success("获取成功",$list); } /** * 加入练习 * @return void */ public function subscribe(){ $id = input('id'); $data = $this->model->with(['course'])->where([ 'exercises.id'=>$id ])->where([ 'exercises.status'=>1 ])->find(); if(!$data){ $this->error('该课程暂不可用,请重试'); } $isAuth = \app\common\model\app\exam\ExercisesSubscribe::checkAuth($this->auth->id,$id); if(!$isAuth){ $this->error('暂无使用该练习权限,请重试'); } $isSubscribe = \app\common\model\app\exam\ExercisesSubscribe::checkSubscribe($this->auth->id,$id); if($isSubscribe){ $this->error('已经订阅过了'); } $type = $data['sales_type'] == 1 ? 'free' : 'bind_course'; \app\common\model\app\exam\ExercisesSubscribe::subscribe($this->auth->id,$id,$type); $this->success("操作成功"); } /** * 获取订阅列表 * @return void */ public function getSubscribeList(){ $limit = input('limit',10); $page = input('page',1); $search = input('search'); $sort = input('sort','desc') == 'desc' ? 'desc' : 'asc'; $order = input('order'); $where = [ 'user_id'=>$this->auth->id, 'exercises.status'=>1 ]; $orderField = 'exercises_subscribe.createtime'; if(!empty($search)){ // $where['course.name'] = ['like',"%{$search}%"]; } $rows = $this->exercisesSubscribeModel->with(['exercises']); $list = $rows ->where($where) ->limit($limit)->page($page) ->order($orderField,$sort) ->select(); if(!empty($list)){ foreach ($list as $item){ //获取练习包含题目数量 $item->question_count = $this->model->getExercisesQuestionCount($item->exercises_id); //获取已做的题目数量 $item->complete_question_count = $this->logModel->getCompleteQuestionCount($item->exercises_id); //判断百分比 $item->complete_prop = !$item->complete_question_count ? 0 : ceil($item->question_count/$item->complete_question_count) * 100; $item->exercises->visible(['type','sales_type','id','name','cover','pay_price','price','pay_type']); } } $this->success('获取成功', $list); } /** * 获取练习商品列表 * @return void */ public function getGoodsList(){ $limit = input('limit',10); $page = input('page',1); $search = input('search'); $groupId = input('group_id'); $sort = input('sort','desc') == 'desc' ? 'desc' : 'asc'; $order = input('order'); $sort = 'desc'; $where = [ 'status'=>1, 'hide'=>0, ]; $orderField = 'createtime'; if(!empty($groupId)){ $where['group_id'] = $groupId; } $rows = $this->model; $list = $rows ->where($where) ->limit($limit)->page($page) ->order($orderField,$sort) ->select(); if(!empty($list)){ foreach ($list as &$item){ $item->type = 'exercises'; switch ($item->sales_type){ case 1: $item->pay_type = 'free'; break; case 2: $item->price = $item->pay_price; $item->pay_type = 'pay'; break; case 3: $item->pay_type = 'bind_course'; break; } $item->visible(['type','sales_type','id','name','cover','pay_price','price','pay_type']); } } $this->success('获取成功', $list); } /** * 获取课程分组列表 * @return void */ public function group(){ $list = (new \app\api\model\app\exam\ExercisesGroup)->getList(); $this->success('返回成功', $list); } }