123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <?php
- namespace addons\exam\controller;
- use addons\exam\enum\CommonStatus;
- use addons\exam\model\QuestionCollectModel;
- use addons\exam\model\QuestionModel;
- use addons\exam\model\UserModel;
- use app\admin\model\exam\QuestionWrongModel;
- /**
- * 试题接口
- */
- class Question extends Base
- {
- protected $noNeedLogin = [];
- protected $noNeedRight = ['*'];
- /**
- * 看题模式
- */
- public function lookPage()
- {
- $model = new QuestionModel();
- $total = $model->where('cate_id', $this->request->param('cate_id'))->count('id');
- $this->success('', compact('total'));
- }
- /**
- * 练习模式
- */
- public function train()
- {
- $param = $this->request->param();
- $param['user_id'] = $this->auth->id;
- // 验证是否需要绑定手机号
- //UserModel::isMustBindMobile($this->auth->getUser());
- $list = QuestionModel::getList($param);
- // $total = $list['total'];
- $this->success('', $list);
- }
- /**
- * 根据关键词模糊查询10条题目
- */
- public function search()
- {
- $query = QuestionModel::with(
- [
- 'cates' => function ($query) {
- $query->field('id,name');
- },
- 'materialParent' => function ($query) {
- $query->field('id,title');
- },
- ]
- )->where('status', CommonStatus::NORMAL);
- if ($keyword = input('keyword/s', '', 'trim,strip_tags,htmlspecialchars,xss_clean')) {
- if (mb_strlen($keyword) < 2) {
- $this->error('请输入不少于2个字的关键词进行搜索');
- }
- $query->where('title', 'like', '%' . $keyword . '%');
- }
- if ($sort_type = input('sort_type/s')) {
- $query->order($sort_type);
- }
- if (input('sort_rand/d', 0)) {
- $query->orderRaw('rand()');
- }
- $list = $query->paginate(15, true)->toArray();
- // 最多搜索5页
- if (input('page/d') >= 5) {
- $list['has_more'] = false;
- }
- $this->success('', ['list' => $list]);
- }
- /**
- * 试题详情
- */
- public function detail()
- {
- $id = input('id');
- $this->success('', (new QuestionModel)->get($id));
- }
- /**
- * 收藏列表
- */
- public function collectList()
- {
- $user_id = $this->auth->id;
- $collectQuestion = new QuestionCollectModel();
- $list = $collectQuestion::with('question')->where('user_id', $user_id)->order('id desc')->paginate(999, true);
- $total = $collectQuestion::where('user_id', $user_id)->count();
- $this->success('', compact('list', 'total'));
- // $list = $collectQuestion::with([
- // 'question.materialQuestions.question'
- // ])->where('user_id', $user_id)->order('id desc')->paginate(999, true);
- // $total = $list->count();
- //
- // $list = $list->toArray();
- // ddd($list);
- // // 合并材料题子题目
- // $list['data'] = QuestionModel::mergeMaterialQuestions($list['data']);
- // $this->success('', compact('list', 'total'));
- }
- /**
- * 添加收藏
- */
- public function collectAdd()
- {
- if (!$question_id = input('question_id/d', 0)) {
- $this->error('缺少题目ID');
- }
- if (!QuestionModel::where('id', $question_id)->count()) {
- $this->error('题目数据不存在');
- }
- if ($res = QuestionCollectModel::updateOrCreate(
- [
- 'user_id' => $this->auth->id,
- 'question_id' => $question_id
- ],
- [
- 'user_id' => $this->auth->id,
- 'question_id' => $question_id
- ])
- ) {
- $this->success('收藏成功', $res);
- }
- $this->error('收藏失败');
- }
- /**
- * 取消收藏
- */
- public function collectCancel()
- {
- if (!$question_id = input('question_id/d', 0)) {
- $this->error('缺少题目ID');
- }
- $result = QuestionCollectModel::where('question_id', $question_id)->where('user_id', $this->auth->id)->delete();
- if ($result) {
- $this->success('取消成功');
- }
- $this->error('取消失败');
- }
- /**
- * 获取错题列表
- */
- public function wrongList()
- {
- $user_id = $this->auth->id;
- if ($ids = input('question_ids')) {
- $total = QuestionWrongModel::where('user_id', $user_id)->whereIn('question_id', $ids)->count();
- $list = $total ? QuestionWrongModel::with('question')
- ->whereIn('question_id', $ids)
- ->where('user_id', $user_id)
- ->order('id desc')
- ->paginate(999, true)->toArray() : [];
- } else {
- $total = QuestionWrongModel::where('user_id', $user_id)->count();
- $list = $total ? QuestionWrongModel::with('question')
- ->where('user_id', $user_id)
- ->order('id desc')
- ->paginate(999, true)->toArray() : [];
- }
- if (isset($list['data']) && $list['data']) {
- $questions = [];
- foreach ($list['data'] as $item) {
- $questions[] = array_merge($item['question'], ['wrong_id' => $item['id'], 'user_answer' => $item['user_answer']]);
- }
- // $list['data'] = \addons\exam\model\QuestionModel::isCollected($user_id, $questions);
- $list['data'] = $questions;
- } else {
- $list['data'] = [];
- }
- $this->success('', compact('list', 'total'));
- }
- /*
- * 记录错题
- */
- public function wrongAdd()
- {
- if (!$question_id = input('question_id/d', 0)) {
- $this->error('缺少题目ID');
- }
- if (QuestionWrongModel::add($this->auth->id, $question_id))
- $this->success('记录成功');
- else
- $this->error('记录失败');
- }
- /**
- * 删除错题
- */
- public function wrongDelete()
- {
- if (!$question_id = input('question_id/d', 0)) {
- $this->success('缺少错题ID');
- }
- if (QuestionWrongModel::where('question_id', $question_id)->where('user_id', $this->auth->id)->delete()) {
- $this->success('删除成功');
- }
- $this->error('删除失败');
- }
- /**
- * 清空所有错题
- */
- public function wrongClear()
- {
- if (QuestionWrongModel::where('user_id', $this->auth->id)->delete()) {
- $this->success('删除成功');
- }
- $this->error('删除失败');
- }
- }
|