You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
6.0 KiB
163 lines
6.0 KiB
10 months ago
|
<?php
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
|
||
|
// +----------------------------------------------------------------------
|
||
|
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
|
||
|
// +----------------------------------------------------------------------
|
||
|
|
||
|
namespace app\admin\model\questions;
|
||
|
|
||
|
use traits\ModelTrait;
|
||
|
use basic\ModelBasic;
|
||
|
use service\UtilService as Util;
|
||
|
use app\admin\model\questions\Questions as QuestionsModel;
|
||
|
use app\admin\model\questions\QuestionsCategpry;
|
||
|
|
||
|
/**
|
||
|
* 试卷试题 Model
|
||
|
* Class TestPaperQuestions
|
||
|
* @package app\admin\model\questions
|
||
|
*/
|
||
|
class TestPaperQuestions extends ModelBasic
|
||
|
{
|
||
|
use ModelTrait;
|
||
|
|
||
|
/**手动组题
|
||
|
* @param $id
|
||
|
* @param $number
|
||
|
* @param $data
|
||
|
*/
|
||
|
public static function addTestPaperQuestions($id, $type, $number, $data, $score)
|
||
|
{
|
||
|
if (!count($data) && $number <= 0) return true;
|
||
|
foreach ($data as $key => $value) {
|
||
|
$item['type'] = $type;
|
||
|
$item['question_type'] = $value->question_type;
|
||
|
$item['test_id'] = $id;
|
||
|
$item['questions_id'] = $value->id;
|
||
|
if (self::be($item)) continue;
|
||
|
$item['sort'] = $value->sort;
|
||
|
$number = $number - 1;
|
||
|
$item['score'] = $score;
|
||
|
if ($number < 0) continue;
|
||
|
self::set($item);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**试题列表
|
||
|
* @param $id
|
||
|
*/
|
||
|
public static function getTestPaperList($where, $id, $type)
|
||
|
{
|
||
|
$data = self::where(['type' => $type, 'test_id' => $id])->order('sort desc,id desc')->page($where['page'], $where['limit'])->select();
|
||
|
foreach ($data as $key => &$item) {
|
||
|
$item['title'] = QuestionsModel::where('id', $item['questions_id'])->value('stem');
|
||
|
switch ($item['question_type']) {
|
||
|
case 1:
|
||
|
$item['types'] = '单选题';
|
||
|
break;
|
||
|
case 2:
|
||
|
$item['types'] = '多选题';
|
||
|
break;
|
||
|
case 3:
|
||
|
$item['types'] = '判断题';
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
$count = self::where(['type' => $type, 'test_id' => $id])->count();
|
||
|
return compact('data', 'count');
|
||
|
}
|
||
|
|
||
|
public static function setRecordWhere($test_id,$record_id,$question_type)
|
||
|
{
|
||
|
$model =self::alias('tq')->where('tq.test_id',$test_id)->where('q.question_type',$question_type)
|
||
|
->join('ExaminationTestRecord e','e.questions_id=tq.questions_id and e.e_id='.$record_id,'LEFT')
|
||
|
->join('Questions q','q.id=tq.questions_id')
|
||
|
->join('TestPaper t','t.id=tq.test_id')
|
||
|
->field('t.single_number,t.single_score,t.many_number,t.many_score,t.judge_number,t.judge_score,q.stem,q.image,q.is_img,q.option,q.answer,q.difficulty,q.question_type,e.user_answer,e.is_correct,e.score');
|
||
|
return $model;
|
||
|
}
|
||
|
|
||
|
/**用户答题结果
|
||
|
* @param $where
|
||
|
*/
|
||
|
public static function getExaminationRecordAnswers($test_id,$record_id,$question_type)
|
||
|
{
|
||
|
$model=self::setRecordWhere($test_id,$record_id,$question_type);
|
||
|
$data = ($data = $model->select()) && count($data) ? $data->toArray() : [];
|
||
|
foreach ($data as $key=>&$item){
|
||
|
if($item['is_correct']!=2) $item['score']=0;
|
||
|
}
|
||
|
return $data;
|
||
|
}
|
||
|
|
||
|
/** 随机组题
|
||
|
* @param int $id
|
||
|
* @param int $type 1=练习 2=考试
|
||
|
* @param $questions 试卷
|
||
|
* @param int $cate_id 试题分类ID
|
||
|
*/
|
||
|
public static function addRandomGroupQuestions($id, $type, $question_type, $cate_id, $number, $score)
|
||
|
{
|
||
|
if (!$cate_id) return false;
|
||
|
$cateIds = QuestionsCategpry::categoryId($cate_id);
|
||
|
$data = QuestionsModel::getCateIds($question_type, $cateIds);
|
||
|
$res = self::setTestPaper($id, $type, $number, $data, $score);
|
||
|
if ($res) return true;
|
||
|
else return false;
|
||
|
}
|
||
|
|
||
|
public static function setTestPaper($id, $type, $number, $data, $score)
|
||
|
{
|
||
|
if (!count($data) || $number <= 0) return true;
|
||
|
if (count($data) < $number) $number = count($data);
|
||
|
if (count($data) >= $number && $number == 1) {
|
||
|
$ids = ['0' => 0];
|
||
|
} else {
|
||
|
$ids = array_rand($data, $number);
|
||
|
}
|
||
|
foreach ($ids as $key => $value) {
|
||
|
$item['type'] = $type;
|
||
|
$item['question_type'] = $data[$value]['question_type'];
|
||
|
$item['test_id'] = $id;
|
||
|
$item['questions_id'] = $data[$value]['id'];
|
||
|
$item['score'] = $score;
|
||
|
if (self::be($item)) continue;
|
||
|
self::set($item);
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public static function testPaperQuestions($id)
|
||
|
{
|
||
|
if (!$id) return [];
|
||
|
return self::where(['test_id' => $id])->order('sort desc,id desc')->field('id,questions_id')->select();
|
||
|
}
|
||
|
|
||
|
/**试卷中各类试题
|
||
|
* @param $id
|
||
|
* @param $question_type
|
||
|
*/
|
||
|
public static function gettestPaperQuestions($id, $question_type)
|
||
|
{
|
||
|
if (!$id) return [];
|
||
|
return self::alias('t')->where(['t.test_id' => $id, 't.question_type' => $question_type, 'q.is_del' => 0])->order('sort desc,id desc')
|
||
|
->join('Questions q', 't.questions_id=q.id')
|
||
|
->field('t.sort,t.test_id,q.id,q.question_type,q.pid,q.stem,q.is_del,q.is_img')
|
||
|
->select();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 试卷中各类试题数量
|
||
|
*/
|
||
|
public static function testPaperQuestionsNumber($id, $question_type)
|
||
|
{
|
||
|
return self::where(['test_id' => $id, 'question_type' => $question_type])->count();
|
||
|
}
|
||
|
}
|