初始化项目:添加后端代码、ThinkPHP框架、前端资源

This commit is contained in:
amb
2026-09-03 12:42:39 +08:00
commit 482bece22e
3726 changed files with 416708 additions and 0 deletions
@@ -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]
];
}
}