初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,260 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\app\exam;
|
||||
|
||||
use think\Model;
|
||||
|
||||
|
||||
class WarehouseImport extends Model
|
||||
{
|
||||
|
||||
protected $excelSheetNoTypes = ['single','multiple','judge','indefinite','fillblank','essay'];
|
||||
|
||||
|
||||
/**
|
||||
* 获取每一行的数据
|
||||
* @param $data 题目数据
|
||||
* @param $type 题目类型下标
|
||||
* @param $groupId 分组ID
|
||||
* @return false|mixed|null
|
||||
*/
|
||||
public function getRowData($data,$typeIndex,$groupId=0){
|
||||
$rowData = false;
|
||||
|
||||
|
||||
$type = $this->excelSheetNoTypes[$typeIndex];
|
||||
|
||||
|
||||
if(empty($data[0])){
|
||||
return $rowData;
|
||||
}
|
||||
|
||||
switch ($type){
|
||||
case 'judge':
|
||||
if(count($data) != 3){
|
||||
return false;
|
||||
}
|
||||
if(!in_array($data[1],["错误","正确","错","对"])){
|
||||
return false;
|
||||
}
|
||||
|
||||
$rowData = $this->parseJudge($data);
|
||||
break;
|
||||
case 'single':
|
||||
if(count($data) < 13){
|
||||
return false;
|
||||
}
|
||||
//判断是不是字母
|
||||
if(!$data[11] || strlen($data[11]) != 1 || !ctype_alpha($data[11])){
|
||||
return false;
|
||||
}
|
||||
$rowData = $this->parseSingle($data);
|
||||
break;
|
||||
case 'multiple':
|
||||
if(count($data) < 13){
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$data[11] || strlen($data[11]) > 10 || !ctype_alpha($data[11])){
|
||||
return false;
|
||||
}
|
||||
$rowData = $this->parseMultiple($data);
|
||||
|
||||
break;
|
||||
case 'indefinite':
|
||||
if(count($data) < 13){
|
||||
return false;
|
||||
}
|
||||
|
||||
if(!$data[11] || strlen($data[11]) > 10 || !ctype_alpha($data[11])){
|
||||
return false;
|
||||
}
|
||||
$rowData = $this->parseMultiple($data, 'indefinite');
|
||||
|
||||
break;
|
||||
case 'fillblank':
|
||||
if(count($data) != 3){
|
||||
return false;
|
||||
}
|
||||
$rowData = $this->parseFillblank($data);
|
||||
|
||||
break;
|
||||
case 'essay':
|
||||
if(count($data) != 3){
|
||||
return false;
|
||||
}
|
||||
$rowData = $this->parseEssay($data);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return $rowData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 格式化单选题
|
||||
* @param $data
|
||||
* @return array|false
|
||||
*/
|
||||
public function parseSingle($data){
|
||||
|
||||
|
||||
$rowData = [
|
||||
'type'=>'single',
|
||||
'question'=>$data[0],
|
||||
'option'=>[],
|
||||
'answer'=>0,
|
||||
'analysis'=>$data[12]
|
||||
];
|
||||
|
||||
foreach($data as $index => $option){
|
||||
if($index > 0 && $index < 11){
|
||||
if(!$option){
|
||||
break;
|
||||
}
|
||||
|
||||
if($option instanceof \PhpOffice\PhpSpreadsheet\RichText\RichText){
|
||||
$option = $option->getPlainText();
|
||||
}
|
||||
|
||||
$rowData['option'][] = $option;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$answer = ord($data[11]) - 65;
|
||||
|
||||
if($answer < 0 || ($answer > count($rowData['option']) - 1)){
|
||||
return false;
|
||||
}
|
||||
|
||||
$rowData['option'] = json_encode($rowData['option'],true);
|
||||
$rowData['answer'] = $answer;
|
||||
|
||||
return $rowData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析判断题
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function parseJudge($data){
|
||||
$rowData = [
|
||||
'type'=>'judge',
|
||||
'question'=>$data[0],
|
||||
'option'=>json_encode([]),
|
||||
'answer'=>'',
|
||||
'analysis'=>$data[2]
|
||||
];
|
||||
|
||||
$rowData['answer'] = 1;
|
||||
|
||||
if(in_array($data[1],["对","正确"])){
|
||||
$rowData['answer'] = 0;
|
||||
}
|
||||
|
||||
return $rowData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析多选题
|
||||
* @param $data
|
||||
* @return array|false
|
||||
*/
|
||||
public function parseMultiple($data, $type = 'multiple'){
|
||||
$rowData = [
|
||||
'type'=>$type,
|
||||
'question'=>$data[0],
|
||||
'option'=>[],
|
||||
'answer'=>'',
|
||||
'analysis'=>$data[12]
|
||||
];
|
||||
|
||||
foreach($data as $index => $option){
|
||||
if($index > 0 && $index < 11){
|
||||
if(!$option){
|
||||
break;
|
||||
}
|
||||
if($option instanceof \PhpOffice\PhpSpreadsheet\RichText\RichText){
|
||||
$option = $option->getPlainText();
|
||||
}
|
||||
$rowData['option'][] = $option;
|
||||
}
|
||||
}
|
||||
|
||||
$answer = [];
|
||||
|
||||
foreach (str_split($data[11]) as $item){
|
||||
$item = ord($item) - 65;
|
||||
if($item < 0 || $item > (count($rowData['option']) -1 )){
|
||||
return false;
|
||||
}
|
||||
$answer[] = $item;
|
||||
}
|
||||
|
||||
$rowData['option'] = json_encode($rowData['option'],true);
|
||||
|
||||
if(count($answer) < 2 || count($answer) > 10){
|
||||
return false;
|
||||
}
|
||||
|
||||
$rowData['answer'] = implode(",",$answer);
|
||||
|
||||
return $rowData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析不定项选择题
|
||||
* @param $data
|
||||
* @return array|false
|
||||
*/
|
||||
public function parseIndefinite($data){
|
||||
return $this->parseMultiple($data, 'indefinite');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析填空题
|
||||
* 格式:题目、各空格答案(空格用"|"分隔,备选答案用","分隔)、解析
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function parseFillblank($data){
|
||||
$answers = [];
|
||||
$blanks = explode('|', $data[1]);
|
||||
foreach($blanks as $blank){
|
||||
$answers[] = explode(',', $blank);
|
||||
}
|
||||
|
||||
return [
|
||||
'type'=>'fillblank',
|
||||
'question'=>$data[0],
|
||||
'option'=>json_encode([]),
|
||||
'answer'=>json_encode($answers),
|
||||
'analysis'=>$data[2]
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 解析问答题
|
||||
* 格式:题目、参考答案、解析
|
||||
* @param $data
|
||||
* @return array
|
||||
*/
|
||||
public function parseEssay($data){
|
||||
return [
|
||||
'type'=>'essay',
|
||||
'question'=>$data[0],
|
||||
'option'=>json_encode([]),
|
||||
'answer'=>$data[1],
|
||||
'analysis'=>$data[2]
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user