request->getQuery('realname1'));
//$getStatus = safe_replace(Yii::app()->request->getQuery('status'));
// $grade_id = safe_replace(Yii::app()->request->getQuery('grade_id'));
// $class_id = safe_replace(Yii::app()->request->getQuery('class_id'));
/**
* 需求变动
* 重新开发
*
*/
if (empty($printType)) {
$printType = '2';
$printTypeData = 0;
} else {
switch ($printType) {
case "2":
$printTypeData = 0;
break;
case "wtb":
$printTypeData = 1;
break;
case "isp":
$printTypeData = 2;
break;
case "studytrend":
$printTypeData = 3;
break;
default:
$printTypeData = null;
break;
}
}
$condition = array();
if($is_print > -1)
{
$condition[] = "cep.is_print = '{$is_print}'";
}else{
$is_print = -1;
}
if($printName)
$condition[] = "e.name like '%{$printName}%'";
if (!Str::isBlank($labelled)) {
$condition[] = " (p.is_labelled = '{$labelled}' or eg.is_tagging='{$labelled}')";
}
if ( empty($display)) {
$condition[] = "e.is_display = 0";
}else
{
$condition[] = "e.is_display = ".$display;
}
// $condition[] = "e.subject_id = '{$this->subjectId}'";
$condition[] = "eg.is_third = 1";
$condition[] = "eg.xb_homework = 0";
if(in_array(Yii::app()->session['session_duoxueke_subject_id'],$this->mathSubjectId)){
$condition[] = "e.subject_id in (".implode(',',$this->mathSubjectId).")";
}else{
$condition[] = "e.subject_id = ".Yii::app()->session['session_duoxueke_subject_id'];
}
if($list_type){
$condition[] = "eg.import_score_type = 2"; //传了参数,只读线下导入考试
}else{
$condition[] = "eg.import_score_type <>2 "; //没传参数,读其它所有阅卷类型
}
$gradeCardLength=array();
$gradeData=SGrade::model()->findAll();
foreach ($gradeData as $datum){
if($datum->card_status==1){
$gradeCardLength[$datum->id]=$datum->card_length;
}else{
$gradeCardLength[$datum->id]=0;
}
}
$resultList = $this->schoolManager->getThirdPrintList($condition,array('e.create_time desc','e.exam_id desc'));
$printList = array();
if($resultList["rs"]){
$ExamModel=new Exam();
$StudentPaperRelation=new SStudentPaperRelation();
foreach ($resultList['rs'] as $k=>$v) {
$exam_group_ids[$v['exam_group_id']] = $v['exam_group_id'];
$time = time();
$classinfo=ClassModel::model()->find('class_id=:class_id',array(':class_id'=>$v['class_id']));
$v['grade']=$classinfo['grade'];
//解析状态
$topicWord = STopicWord::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$v['exam_group_id']));
$v['tw_status']=$topicWord['status'];
$v['wrong_reason']=$topicWord['wrong_reason'];
$v['word_path']=$topicWord['word_path'];
$v['allsubject_file_path']=$topicWord['allsubject_file_path'];
if($topicWord['allsubject_file_path']){
//解析预计完成时间
$v['estimate']=48*3600+$topicWord['upload_time'];
}
$v['params_id']=$topicWord['params_id'];
$v['parse_upload_time']=$topicWord['upload_time'];
$printList[$k] = $v;
$tplData = json_decode($v["tpl_data"], true);
//FIXME 添加班级参数
$printList[$k]['branch'] = isset($tplData['branch']) ? $tplData['branch'] : 0;
$printList[$k]['show_print'] = 0;
//准考证
if(!$v['school_card_status']){
$printList[$k]['school_card_length'] = $gradeCardLength[$v['grade']];
}
//考试时间
if(isset($tplData['examDate']))
{
$examDate = strtotime($tplData["examDate"]);
}
if(isset($tplData['new_items']) && !isset($tplData['items']))
{
$printList[$k]['show_print'] = 1;
}
//标注期望完成时间
if(isset($tplData['estimateTime']))
{
$printList[$k]['estimate_time'] = date('Y-m-d H:i:s',$tplData["estimateTime"]);
}
if(!isset($tplData["examDate"]))
{
$examDate = $v["create_time"];
}
$printList[$k]['examDate'] = $examDate;
if(isset($tplData['totals'])){
$printList[$k]['totals'] = $tplData['totals'];
}
if(isset($tplData['total_score'])){
$printList[$k]['total_score'] = $tplData['total_score'];
}
if(isset($tplData['is_change_to_third']) && $tplData['is_change_to_third']==1){
$printList[$k]['is_change_to_third'] = 1;
}else{
$printList[$k]['is_change_to_third'] = 0;
} //统计班级,学生
if($list_type){
$exam=$ExamModel->getExamIds($v['exam_group_id']);
if($exam){
$studentCount=0;
$uploadedCount=0;
$studentList=$StudentPaperRelation->getStudentExamInfo($exam);
$studentCount=count($studentList);
$printList[$k]['class_count']=count($exam).'('.$studentCount.'人)';
foreach ($studentList as $value){
if($value['is_feedback']==1){
$uploadedCount++;
}
}
$printList[$k]['upload_count']=$uploadedCount.'/'.$studentCount;
if($uploadedCount>0){
$printList[$k]['upload_status']='已上传成绩';
}else{
$printList[$k]['upload_status']='未上传成绩';
}
}
}else{
//判断上传状态
$uploadExamInfo=SThirdMultiTemplate::model()->getStatusByExamGroupId($v['exam_group_id']);
$uploadStatus=0;
if($uploadExamInfo){
if(isset($uploadExamInfo[1])){
$printList[$k]['uploadExamTemplateId']=$uploadExamInfo[1]['template_id'];
if($uploadExamInfo[1]['topic_upload']==1){
$uploadStatus+=1;
}
}
if(isset($uploadExamInfo[2])){
$printList[$k]['uploadAnswerTemplateId']=$uploadExamInfo[2]['template_id'];
if($uploadExamInfo[2]['answer_upload']==1){
$uploadStatus+=3;
}
}
}
//判断是否已上传成绩
$printList[$k]['is_feedback']=0;
$exam=$ExamModel->getExamIds($v['exam_group_id']);
if($exam){
if($StudentPaperRelation->getStudentFeedBack($exam)){
$printList[$k]['is_feedback']=1;
}
}
$printList[$k]['uploadExamStatus']=$uploadStatus;
$printList[$k]['uploadExamInfo'] = $uploadExamInfo;
}
}
}
$sheet_ids = array();
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_group_id',$exam_group_ids);
$exam_sheet_data = SThirdAnswerSheet::model()->findAll($criteria);
if($exam_sheet_data)
{
foreach($exam_sheet_data as $v)
{
$exam_sheets[$v->exam_group_id] = $v->online_card;
$sheet_ids[$v->sheet_id] = $v->sheet_id;
$sheet_rs[$v->exam_group_id] = $v;
if($v->online_card){
$onlineMultiplex=$this->schoolManager->getOnlineCardMultiplex($v->multiplex_id);
if($onlineMultiplex){
$marking_papers[$v->exam_group_id] = $onlineMultiplex['marking_papers'];
}
}
}
}
//$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId,1);
$subject_exam_data=Yii::app()->params['subjectId'];
$teachers_data = Teacher::model()->findAll();
$class_teacher_data = array();
if($teachers_data)
{
foreach($teachers_data as $k=>$v)
{
$class_teacher_data[$v->teacher_id] = $v->teacher_name;
}
}
//获取班级年级
$class_data = ClassModel::model()->findAll('semester_id=:semester_id',array(':semester_id'=>$this->semesterId));
$class_grade_arr=array();
if($class_data)
{
foreach($class_data as $v)
{
$class_grade_arr[$v->class_id] = $v->grade;
}
}
unset($class_data);
$data = array();
//$data = $this->export($getName,$grade_id,$class_id);
//判断全学科试用学校
// $rs = http('/cms/api/qxk-math-trial-school/'.$this->schoolId,'GET',$this->schoolId,array(),'cgi');
// $rs=json_decode($rs,true);
// if(isset($rs['errCode']) && $rs['errCode']=='00' && $rs['data']==true){
// $data['is_qxk']=1;
// }else{
// $data['is_qxk']=0;
// }
$data['is_qxk']=1;
$data['printList'] = $printList;
$data['pages'] = $resultList['pager'];
$data['page_total'] = $resultList['pager']->rowsCount;
$data["printType"] = $printType;
$data["printName"] = $printName;
$data["teachers"] = $class_teacher_data;
$data["classId"] = $classId;
$data["grade"] = $grade;
$data["sheets"] = $sheets;
$data["exam_sheets"] = $exam_sheets;
$data["sheet_rs"] = $sheet_rs;
$data["labelled"] = $labelled;
$data["display"] = $display;
$data["is_print"] = $is_print;
$data["subject"] = $subject_exam_data;
$data['list_type'] =$list_type;
$data["class_grade"] = $class_grade_arr;
$data['showAssist'] =0;
$data['extendSubject'] =$this->extendSubject;
$data["marking_papers"] = $marking_papers;
//获取导出数据白名单
$data["exportExam"] = $this->schoolManager->getExportExamWhiteList($this->schoolId);;
//debug($printList);
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
unset($resultList);
//获取产品设置版本
$productEdition=$this->sConn->createCommand("select switch from producut_set_edition where id=1")->queryRow();
if(!$productEdition || $productEdition['switch']==2){
$data['productSwitch']=2;
}else{
$data['productSwitch']=3;
}
$data['schoolId'] =$this->schoolId;
$data['version_number']=$this->version_number;
if($list_type){
$this->render('index_underline',$data);
}else{
if(Yii::app()->params['section']==0){
$this->render('index_section',$data);
}else{
$this->render('index2',$data);
}
}
}
public function actionIndex1(){
Url::clean();
$printName = Req::get("name");
$classId = Req::get("classId");
$printType = Req::get("type");
$grade = Req::get("grade");
$labelled = Req::get("labelled");
$display = Req::get("display");
$is_print = Req::get("is_print");
$exam_group_ids = array();
$sheets = array();
$exam_sheets = array();
$sheet_rs = array();
/**
* 需求变动
* 重新开发
*
*/
if (empty($printType)) {
$printType = '2';
$printTypeData = 0;
} else {
switch ($printType) {
case "2":
$printTypeData = 0;
break;
case "wtb":
$printTypeData = 1;
break;
case "isp":
$printTypeData = 2;
break;
case "studytrend":
$printTypeData = 3;
break;
default:
$printTypeData = null;
break;
}
}
$condition = array();
if($is_print > -1)
{
$condition[] = "cep.is_print = '{$is_print}'";
}else{
$is_print = -1;
}
if($printName)
$condition[] = "e.name like '%{$printName}%'";
if (!Str::isBlank($labelled)) {
$condition[] = "p.is_labelled = '{$labelled}'";
}
if ( empty($display)) {
$condition[] = "e.is_display = 0";
}else
{
$condition[] = "e.is_display = ".$display;
}
// $condition[] = "e.subject_id = '{$this->subjectId}'";
$condition[] = "eg.is_third = 1";
$resultList = $this->schoolManager->getThirdPrintList($condition,array('e.create_time desc','e.exam_id desc'));
$printList = array();
if($resultList["rs"]){
foreach ($resultList['rs'] as $k=>$v) {
$exam_group_ids[$v['exam_group_id']] = $v['exam_group_id'];
$time = time();
$printList[$k] = $v;
$tplData = json_decode($v["tpl_data"], true);
//FIXME 添加班级参数
$printList[$k]['branch'] = isset($tplData['branch']) ? $tplData['branch'] : 0;
//考试时间
if(isset($tplData['examDate']))
{
$examDate = strtotime($tplData["examDate"]);
}
if(!isset($tplData["examDate"]))
{
$examDate = $v["create_time"];
}
$printList[$k]['examDate'] = $examDate;
$expireTime = $examDate + (3600 * 24 * 2);
if($time > $expireTime){
$printList[$k]['is_expired'] = true;
}
}
}
$sheet_ids = array();
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_group_id',$exam_group_ids);
$exam_sheet_data = SThirdAnswerSheet::model()->findAll($criteria);
if($exam_sheet_data)
{
foreach($exam_sheet_data as $v)
{
$exam_sheets[$v->exam_group_id] = $v->sheet_id;
$sheet_ids[$v->sheet_id] = $v->sheet_id;
$sheet_rs[$v->exam_group_id] = $v;
}
}
$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId);
//获取班级年级
$class_data = ClassModel::model()->findAll('semester_id=:semester_id',array(':semester_id'=>$this->semesterId));
if($class_data)
{
foreach($class_data as $v)
{
$class_grade_arr[$v->class_id] = $v->grade;
}
}
unset($class_data);
$data = array();
$data['printList'] = $printList;
$data['pages'] = $resultList['pager'];
$data['page_total'] = $resultList['pager']->rowsCount;
$data["printType"] = $printType;
$data["printName"] = $printName;
$data["classId"] = $classId;
$data["grade"] = $grade;
$data["sheets"] = $sheets;
$data["exam_sheets"] = $exam_sheets;
$data["sheet_rs"] = $sheet_rs;
$data["sheet_ids"] = $sheet_ids;
$data["labelled"] = $labelled;
$data["display"] = $display;
$data["is_print"] = $is_print;
$data["subject"] = $subject_exam_data;
$data["class_grade"] = $class_grade_arr;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
unset($resultList);
$this->render('index1',$data);
}
protected function export($getName,$grade_id,$class_id)
{
//$getStatus = safe_replace(Yii::app()->request->getQuery('status'));
$grade_class_array = array();
$con = array();
// 打印任务处理
$ExamModel = Exam::model();
$ClassModel = ClassModel::model();
$printList = array();
$grade_class_data = ClassModel::model()->findAll('grade=:grade', array(':grade' => $grade_id));
if ($grade_class_data) {
foreach ($grade_class_data as $v) {
$grade_class_array[$v->class_id] = $v->attributes;
}
}
// 获取当前学期班级并组装
$criteria = new CDbCriteria();
$criteria->addCondition('semester_id=:semester_id');
if ($grade_id) {
$con = array('c.grade = ' . $grade_id);
$criteria->addCondition('grade=:grade');
$criteria->params[':grade'] = $grade_id;
}
if ($class_id) {
$con = array_merge($con, array('c.class_id = ' . $class_id));
$criteria->addCondition('class_id=:class_id');
$criteria->params[':class_id'] = $class_id;
}
if ($getName) {
$con = array_merge($con, array("e.name like '%{$getName}%'"));
}
if (Yii::app()->session['session_duoxueke_subject_id'] == 6 || Yii::app()->session['session_duoxueke_subject_id'] == 3) {
$con = array_merge($con, array('e.subject_id in (3,6)'));
} else {
$con = array_merge($con, array('e.subject_id = ' . Yii::app()->session['session_duoxueke_subject_id']));
}
if(in_array(Yii::app()->session['session_duoxueke_subject_id'],$this->mathSubjectId)){
$con = array_merge($con, array('e.subject_id in ('.implode(',',$this->mathSubjectId).')'));
}else{
$condition[] = "e.subject_id = '{$this->subjectId}'";
}
$criteria->params[':semester_id'] = Yii::app()->session['session_semester_id'];
$class_array = ClassModel::model()->findAll($criteria);
$ccArray = array();
$ccName = array();
foreach ($class_array as $cc => $ca) {
array_push($ccArray, $ca->class_id);
$ccName[$ca->class_id] = $ca->class_name;
}
$resultList = $this->schoolManager->getPrintListre(array_merge(array("cep.type = '0'", "e.status = 1"), $con),array('e.complete_time desc'));
if ($resultList["rs"]) {
foreach ($resultList['rs'] as $k => $v) {
$printList[$k] = $v;
$printList[$k]['class_name'] = @$ccName[$v["class_id"]];
$pname = @$ExamModel->getExamName($v["exam_id"]); // 周周练名称
$printList[$k]['print_name'] = $pname;
}
}
$data = array();
$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId);
$data['realname'] = $getName;
$data['grade_id'] = $grade_id;
$data['class_id'] = $class_id;
$data['grade_class'] = $grade_class_array;
$data['printList1'] = $printList;
$data['pages1'] = $resultList['pager'];
$data['page_total1'] = $resultList['pager']->rowsCount;
$data["subject"] = $subject_exam_data;
if (isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue)) {
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
} else {
$data["use_zhixue"] = 0;
}
$data['past_sem_exist'] = 0;//默认不存在过去的学期
$sql = 'select start_time from semester where status=1 limit 1';
$res = $this->sConn->createCommand($sql)->queryRow();
$start_time = $res['start_time'];
if (!$start_time) {
Yii::app()->jump->error('该学校无当前学期,请检查学期是否设置错误');
}
$sql = 'select count(*) as rownum from semester where status=0 and start_time < '.$start_time;
$res = $this->sConn->createCommand($sql)->queryRow();
$row_num = $res['rownum'];
$row_num && $data['past_sem_exist']=1;
unset($resultList);
return $data;
}
public function actionOprateexam()
{
$exam_group_id = Req::post("exam_group_id");
$flag = Req::post("flag");
$error['success'] = 0;
if (empty($exam_group_id)) {
$error['message'] = '操作失败!';
echo json_encode($error);exit();
}
$this->setIs_new($exam_group_id);
if ($this->schoolManager->ThirdOprateExamDisplay($exam_group_id,$flag)) {
$error['success'] = 1;
$error['message'] = '操作成功!';
} else {
$error['message'] = '操作失败!';
}
echo json_encode($error);exit();
}
public function actionExam_list()
{
ini_set("memory_limit","300M");
$exam_group_id = Req::get("exam_group_id");
$branch = Req::get("branch");
$grade = Req::get("grade");
$exam_date = ''; //考试日期
$exam_name = ''; //考试名称
$exam_uploaded=0;
if($exam_group_id>0)
{
if($exam_group_id <= 0)
{
Yii::app()->jump->error('未找到考试信息!');
}
$exam_group_data = ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if(!$exam_group_data)
{
Yii::app()->jump->error('未找到考试信息!');
}
if($exam_group_data->upload_status>0){
$exam_uploaded=1;
}
$classId = Req::get("classId");
$condition = array();
if($classId)
$condition[] = "e.class_id = '{$classId}'";
$condition[] = "eg.exam_group_id = '{$exam_group_id}'";
$classes = $this->schoolManager->getSemesterClasses($this->semesterId);
if(!$classes)
{
Yii::app()->jump->error('本学期尚未建班级!');
}
$_classes = array();
foreach($classes as $v)
{
$_classes[$v['class_id']][$v['class_id']] = $v;
}
$resultList = $this->schoolManager->getExamList($condition,array('e.create_time desc','e.exam_id desc'));
if($resultList && isset($resultList['rs'][0])){
$tplData=json_decode($resultList['rs'][0]['tpl_data'],true);
}else{
Yii::app()->jump->error('未找到考试信息!');
}
if(!$exam_date) $exam_date=$tplData['examDate'];
if(!$exam_name) $exam_name=$resultList['rs'][0]['exam_name'];
$data['exam_id']=$resultList['rs'][0]['exam_id'];
if(isset($tplData['is_change_to_third']) && $tplData['is_change_to_third']==1){
$data['is_change_to_third'] = 1;
}else{
$data['is_change_to_third'] = 0;
}
//获取paper 表数据
$paper_data = SPaper::model()->find('exam_id=:exam_id',array(':exam_id'=>$resultList['rs'][0]['exam_id']));
if(!$paper_data)
{
Yii::app()->jump->error('未找到考试信息!');
}
//读取试题数据
$isAllSelect=1; //全部客观题判断
$paperTopic=SPaperTopicRelation::model()->findAll('paper_id=:paper_id',array(':paper_id'=>$paper_data->paper_id));
//选择题类型判断
$allSubjectType=array();
if($exam_group_data['qxk_paper_id']>0){
$allSubjectType=array(1,2,3,4,12);
}else{
$allSubjectType=array(1,2,11);
}
if($paperTopic){
$data['answer_card_saved'] = 1;
foreach ($paperTopic as $item){
if(!in_array($item->type,$allSubjectType)){
$isAllSelect=0;
break;
}
}
}else{
//未制作答题卡
$data['answer_card_saved'] = 0;
}
//读取试题推送设置
$topicPushSettingModel=new SExamPushTopicsSetting();
$topicPushSetting=$topicPushSettingModel->getTopicSetting($exam_group_id);
$topicPushSettingRelation=array();
if($topicPushSetting){
foreach ($topicPushSetting as $item){
if($item['topic_ids']){
$topicSetting=json_decode($item['topic_ids'],true);
if($topicSetting){
$topicPushSettingRelation[(string)$item['exam_id']]=1;
}
}
}
}
// $subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId);
$this->setIs_new($exam_group_id);
//查询还原记录
$examRestore=SExamRestore::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($examRestore){
$data['restore'] = 1;
}else{
$data['restore'] = 0;
}
//是否使用在线答题卡
$studentAnswerOnline=$this->schoolManager->getAnswerSheetOnline($exam_group_id);
if($studentAnswerOnline){
$data['online_card']=$studentAnswerOnline['online_card'];
$data['is_qrcode_online']=$studentAnswerOnline['is_qrcode_online'];
}else{
$data['online_card']=0;
$data['is_qrcode_online']=0;
}
$has_marked = false;
$studentAnswerCardOnline=new SStudentAnswerCardOnline();
foreach ($resultList['rs'] as $key => $item){
if($item['status'] == 1){
$has_marked = true;
}
//查询生成数量
if($data['online_card']==1 && $data['is_qrcode_online']==1){
$studentCardOnline= $studentAnswerCardOnline->getCountByExamId($item['exam_id']);
if($studentCardOnline){
$resultList['rs'][$key]['card_created']=$studentCardOnline['count'];
}
}
}
//是否能添加班级 FIXME add_class_0924
//打印中
$enable_add_class = false;
if($exam_group_data['status'] == 1 || $exam_group_data['mark_type'] == 0){
$enable_add_class = true;
}else{
//混合阅卷
if($exam_group_data['mark_type'] == 3){
$enable_add_class = ($exam_group_data['mark_status']==2 && $exam_group_data['upload_status']== 2) ? false : true;
}
//单独阅卷
if($exam_group_data['mark_type'] == 4){
$enable_add_class = $has_marked ? false : true;
}
}
$data['pages'] = $resultList['pager'];
$data['page_total'] = $resultList['pager']->rowsCount;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
$data['printList'] = $resultList['rs'];
$data["classes"] = $_classes;
$data["classId"] = $classId;
$data["exam_group_id"] = $exam_group_id;
$data["exam_group_data"] = $exam_group_data;
// $data["subject"] = $subject_exam_data;
$data["branch"] = $branch;
$data["grade"] = $grade;
$data["enable_add_class"] = $enable_add_class;
$data['is_all_select']=$isAllSelect;
$data["exam_name"] = $exam_name;
$data['version_number']=$this->version_number;
$data['exam_date']=$exam_date;
$data['exam_uploaded']=$exam_uploaded;
$data['topic_push_setting']=$topicPushSettingRelation;
$this->render('exam_list',$data);
}
}
public function actionChange(){
ini_set("memory_limit","300M");
Url::clean();
$sname = Req::get("sname");
$cid = Req::get("cid");
$eid = Req::get("eid");
$tid = Req::get("tid");
$isFeedback=0;
switch($tid){
case "0":
$printType = 'wp';
break;
case "1":
$printType = 'wb';
break;
case "2":
$printType = 'isp';
break;
default:
$printType = 'wp';
}
$classInfo = ClassModel::model()->findByPk($cid);
if (empty($classInfo)) {
Yii::app()->jump->error('未找到班级!');
}
$examInfo = Exam::model()->findByPk($eid);
if (empty($examInfo)) {
Yii::app()->jump->error('未找到周周练!');
}
$getResult = ClassExamPrinter::model()->find('class_id=:cid and exam_id=:eid and type=0',array(':cid'=>$cid,':eid'=>$eid));
if (empty($getResult)) {
Yii::app()->jump->error('未找到班级与试卷对应关系!');
}
$paperInfo = SPaper::model()->find('exam_id=:eid',array(':eid'=>$eid));
if (empty($paperInfo)) {
Yii::app()->jump->error('未找到试卷信息!');
}
$paperData = $this->schoolManager->getPaperWithTopicsDetails_v2($paperInfo->paper_id);
if(trim($paperInfo->answer_card_src))
$answerCardUploaded = true;
else
$answerCardUploaded = false;
$tpl = 1;// 需要上传模板
$tplTwo= 1;
if (!in_array($examInfo->tpl_index,Yii::app()->params['no_template_id']) ) {
$paperType = 1;
if (empty($paperInfo->tpl_doc_src)) {
$tpl = 2;
}
$tplTwo= 2;
}else{
$paperType = 2;
}
if(in_array($examInfo->tpl_index,Yii::app()->params['merge_topic_tpl']))
{
$tpl = 1;
$paperType = 1;
$tplTwo= 2;
}
if(in_array($examInfo->tpl_index, Yii::app()->params['custom_tpls_ids'])){
$isCustomTpl = true;
}
else{
$isCustomTpl = false;
}
// 获取阅卷类型
$markType = 0;
$groupInfo = $this->schoolManager->getExam($eid);
if (!empty($groupInfo)) {
$findInfo = SExamGroup::model()->find('exam_group_id=:eg_id',array('eg_id'=>$groupInfo['exam_group_id']));
if (!empty($findInfo)) {
$markType = $findInfo->mark_type;
if($findInfo->mark_type==0 && $findInfo->is_third==1){
$isUnderLine = 1;
}
}
}
$result = array();
$relateStudent = SStudentPaperRelation::model()->findAll('paper_id=:paid and class_id=:caid and is_del=:is_del',array(':paid'=>$paperInfo->paper_id,':caid'=>$cid,':is_del'=>0));
//if (empty($relateStudent)) {
// Yii::app()->jump->error('未找该试卷关联的学生!');
//} else {
//$studentModel = StudentInfo::model();
// 获取学生姓名
$_student_id = array();
foreach($relateStudent as $v)
{
$_student_id[$v->student_id] = $v->student_id;
}
//if(!$_student_id)
//{
// Yii::app()->jump->error('未找该试卷关联的学生!');
//}
$b_student_arr = Yii::app()->redis_business_student->hgetAll('redis_business_del_student:'.$this->schoolId);
if(!$b_student_arr ){
$array_student = array();
$b_student_arr = array();
$criteria = new CDbCriteria();
$criteria->select = 'student_id';
$criteria->addCondition('school_id=:school_id');
$criteria->addCondition('status=:status');
$criteria->params[':school_id'] = $this->schoolId;
$criteria->params[':status'] = 1;
$b_student_data = BusinessStudent::model()->findAll($criteria);
if($b_student_data){
foreach ($b_student_data as $k=>$v){
$array_student[$v->student_id] = $v->student_id;
}
}
Yii::app()->redis_business_student->del('redis_business_del_student:'.$this->schoolId);
if($array_student){
Yii::app()->redis_business_student->hmset('redis_business_del_student:'.$this->schoolId,$array_student);
Yii::app()->redis_business_student->expire('redis_business_del_student:'.$this->schoolId,1296000);
}
unset($criteria);
if($b_student_data)
{
foreach($b_student_data as $v)
{
$b_student_arr[$v->student_id] = $v->student_id;
}
}
unset($b_student_data);
unset($criteria);
}
$studentNames = array();
$criteria = new CDbCriteria();
$criteria->addInCondition('student_id',$_student_id);
$studentArray = SStudentInfo::model()->findAll($criteria);
if (!empty($studentArray)) {
foreach ($studentArray as $student) {
$studentNames[$student->student_id] = $student->realname;
}
}
//查询是否上传答题图片
$uploadAnswerImgStudent=array();
$student_answer_img=$this->schoolManager->getUpAnswerStudent($paperInfo->paper_id,$_student_id,0);
if($student_answer_img){
foreach ($student_answer_img as $val){
$uploadAnswerImgStudent[(string)$val['student_id']]=$val['student_id'];
}
}
foreach ($relateStudent as $key=>$val) {
//查询学生身份证号
$studentInfo=SStudentInfo::model()->find('student_id=:s_id',array('s_id'=>$val->student_id));
if($studentInfo){
$result[$key]['id_number'] = $studentInfo->id_number;
}else{
$result[$key]['id_number'] = '';
}
$result[$key]['student_card'] = $val['student_card'];
$result[$key]['school_student_card'] = $val['school_student_card'];
$result[$key]['upload_answer_img'] =0;
if($val->is_feedback==1){
$isFeedback=1;
if(isset($uploadAnswerImgStudent[(string)$val->student_id])){
$result[$key]['upload_answer_img'] =1;
}
}
//查询在线答题卡是否生成
$rs=$this->sConn->createCommand("select answer_card_online_created from student_answer_card_online where exam_id='{$eid}' and student_id='{$val->student_id}' ")->queryRow();
if($rs && $rs['answer_card_online_created']==1){
$result[$key]['online_created'] = 1;
}else{
$result[$key]['online_created'] = 0;
}
if (empty($sname)) {
$result[$key]['clazzName'] = $classInfo->class_name;
$result[$key]['paperName'] = $examInfo->name;
$result[$key]['studentCode'] = $val->student_id;
$result[$key]['studentName'] = isset($studentNames[$val->student_id]) ? $studentNames[$val->student_id] : null;
$result[$key]['is_feedback'] = $val->is_feedback;
$result[$key]['student_img_paper'] = $val->student_img_paper;
$result[$key]['is_complete'] = $val->is_complete;
} else {
if ($sname == $studentNames[$val->student_id]) {
$result[$key]['clazzName'] = $classInfo->class_name;
$result[$key]['paperName'] = $examInfo->name;
$result[$key]['studentCode'] = $val->student_id;
$result[$key]['studentName'] = $studentNames[$val->student_id];
$result[$key]['is_feedback'] = $val->is_feedback;
$result[$key]['student_img_paper'] = $val->student_img_paper;
$result[$key]['is_complete'] = $val->is_complete;
}else{
unset($result[$key]);
}
unset($relateStudent[$key]);
}
$printCheck = true;
}
//}
$no_paper_student = array();
$paper_student_array = array();
$c_paper_student_array = array();
$class_student_info_data = array();
$_student_ids = array();
$_student_id_names = array();
$class_student_data = $this->schoolManager->getClassStudentByClassId($cid); //student_class_relation
if($class_student_data)
{
foreach($class_student_data as $v)
{
$_student_ids[$v['student_id']] = $v['student_id'];
}
$criteria = new CDbCriteria();
$criteria->addInCondition('student_id',$_student_ids);
$studentArray = SStudentInfo::model()->findAll($criteria);
if (!empty($studentArray)) {
foreach ($studentArray as $student) {
$_student_id_names[$student->student_id] = $student->realname;
}
}
}
///$class_student_info_data = $this->schoolManager->getClassStudentInfoByClassId($cid); //student_info
$paper_student_data = $this->schoolManager->getClassPaperByClassAndPaper($cid,$paperInfo->paper_id,1);//已删除考试学生
$c_paper_student_data = $this->schoolManager->getClassPaperByClassAndPaper($cid,$paperInfo->paper_id);//考试学生
if ($paper_student_data) {
foreach ($paper_student_data as $v) {
$paper_student_array[$v['student_id']] = $v['student_id'];
}
$class_student_info_data = $this->schoolManager->getStudentByStudentIds($paper_student_array); //student_info
}
if ($c_paper_student_data) {
foreach ($c_paper_student_data as $v) {
$c_paper_student_array[$v['student_id']] = $v['student_id'];
}
//$class_student_info_data = $this->schoolManager->getStudentByStudentIds($paper_student_array); //student_info
}
if ($class_student_info_data) {
foreach ($class_student_info_data as $v) {
$class_student_info_array[$v['student_id']] = $v['realname'];
}
}
if ($class_student_data) {
foreach($class_student_data as $v)
{
if(!isset($b_student_arr[$v['student_id']]))
{
if ($paper_student_array)
{
if(isset($paper_student_array[$v['student_id']])){
$no_paper_student[$v['student_id']] = array(
'student_id' => $v['student_id'],
'realname' => isset($class_student_info_array[$v['student_id']]) ?$class_student_info_array[$v['student_id']]:'',
);
}
}
if($c_paper_student_array )
{
if(!isset($c_paper_student_array[$v['student_id']]) )
{
$no_paper_student[$v['student_id']] = array(
'student_id' => $v['student_id'],
'realname' => isset($_student_id_names[$v['student_id']]) ?$_student_id_names[$v['student_id']]:'',
);
}
}else
{
$no_paper_student[$v['student_id']] = array(
'student_id' => $v['student_id'],
'realname' => isset($_student_id_names[$v['student_id']]) ?$_student_id_names[$v['student_id']]:'',
);
}
}
}
}
//判断在线答题卡使用情况
$useAnswerCardOnlineQrcode=0;
$answerCardOnline=$this->schoolManager->getAnswerSheetOnline($groupInfo['exam_group_id']);
if($answerCardOnline && $answerCardOnline['online_card']==1 && $answerCardOnline['is_qrcode_online']==1){
$useAnswerCardOnlineQrcode=1;
}
$this->setIs_new($examInfo->exam_group_id);
$data = array();
if(isset($isUnderLine)){
$data['under_line']=$isUnderLine;
}
//判断在线答题卡使用情况
$answerCardOnline=$this->schoolManager->getAnswerSheetOnline($groupInfo['exam_group_id']);
if($answerCardOnline && $answerCardOnline['online_card']==1 && $answerCardOnline['is_qrcode_online']==1){
$data['use_answer_card_online_qrcode']=1;
}else{
$data['use_answer_card_online_qrcode']=0;
}
$_num= '';
$use_version = '';
if(isset(Yii::app()->session['coachInfo']->use_version))
{
$use_version = Yii::app()->session['coachInfo']->use_version;
}else
{
$use_version = Yii::app()->session['coachInfo']['use_version'];
}
if(!$use_version)
{
$use_version = 100;
}
$version_number = implode('',explode('.',$use_version));
if(strlen($version_number)<7)
{
for($i=0;$i<7-strlen($version_number);$i++)
{
$_num.='0';
}
}
$version_number=(int)$version_number.$_num;
$data['version_number']=$version_number;
$data['no_paper_student'] = $no_paper_student;
$data['result'] = $result;
$data["printType"] = $printType;
$data["sname"] = $sname;
$data['paper_id'] = $paperInfo->paper_id;
$data['exam_id'] = $eid;
$data['class_id'] = $cid;
$data['type_id'] = $tid;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
// $subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId);
// $data["subject"] = $subject_exam_data;
$data['wp_type'] = $examInfo->tpl_index;
$data['className'] = $classInfo->class_name;
$data['paperName'] = $examInfo->name;
$data['tpl'] = $tpl;
$data['tplTwo'] = $tplTwo;
$data['markType'] = $markType;
$data['examInfo'] = $examInfo;
$data['paperType'] = $paperType;
$data['answerCardUploaded'] = $answerCardUploaded;
$data['paperData'] = $paperData;
$data['isCustomTpl'] = $isCustomTpl;
$data['isFeedback'] = $isFeedback;
$data['printCheck'] = $printCheck;
$data['useAnswerCardOnlineQrcode'] = $useAnswerCardOnlineQrcode;
$this->render('change',$data);
}
public function actionExam_answer()
{
$exam_group_id = Req::get("exam_group_id");
$data = array();
if($exam_group_id>0)
{
$exam_group_data = ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
$exam_data = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if(!$exam_data || !$exam_group_data)
{
Yii::app()->jump->error('非法试卷!');
}
$paper_data = SPaper::model()->find('exam_id=:exam_id',array(':exam_id'=>$exam_data->exam_id));
if($paper_data)
{
$paper_topic_data = SPaperTopicRelation::model()->findAll(array(
'order' => '`order` asc',
'condition' => 'paper_id=:paper_id and type=:type',
'params'=>array(':paper_id'=>$paper_data->paper_id,':type'=>1)
));
if($paper_topic_data)
{
$data['paper_topic'] = $paper_topic_data;
}else
{
Yii::app()->jump->error('试卷无选择题!');
}
}else
{
Yii::app()->jump->error('非法试卷!');
}
$this->setIs_new($exam_group_id);
if($exam_group_data->sheet_answer)
{
$data['exam_answer_data'] = json_decode($exam_group_data->sheet_answer,1);
}else
{
$data['exam_answer_data'] = json_decode($exam_group_data->sheet_answer,1);
}
$data['exam_data'] = $exam_data;
$data['use_zhixue'] = 0;
$data['exam_group_id'] = $exam_group_id;
$data['paper_data'] = $paper_data;
$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId);
$data["subject"] = $subject_exam_data;
$this->render('exam_answer',$data);
}else
{
Yii::app()->jump->error('非法试卷!');
}
}
public function actionSave_answer()
{
$answer = Req::post("answer");
$paper_id = Req::post("paper_id");
$exam_group_id = Req::post("exam_group_id");
$status = 0;
$exam_answers = array();
if($answer && $paper_id && $exam_group_id)
{
$paper_topic_data = SPaperTopicRelation::model()->findAll('paper_id=:paper_id and type=:type',array(':paper_id'=>$paper_id,':type'=>1));
if($paper_topic_data)
{
if(count($answer)==count($paper_topic_data))
{
foreach($answer as $k=>$v)
{
if(empty($v))
{
$status = 1;
}else
{
$exam_answers[$k+1] = $v;
}
}
if($status==1)
{
Yii::app()->jump->error('答案尚未设置或未设置完!');
}
if($status==0)
{
if(false!==ExamGroup::model()->updateAll(array('sheet_answer'=>json_encode($exam_answers)),'exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id))){
Yii::app()->jump->success('设置成功!',Yii::app()->createUrl('third/index'));exit;
};
}
}else
{
Yii::app()->jump->error('答案尚未设置或未设置完!');
}
}
}
Yii::app()->jump->error('答案尚未设置或未设置完!');
}
public function actionSet_new()
{
$exam_group_id = Req::post("exam_group_id");
if($exam_group_id>0)
{
$this->setIs_new($exam_group_id);
}
}
public function actionPaper()
{
$exam_group_id = Req::post("exam_group_id");
if($exam_group_id)
{
$third_answer_data = SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if(!$third_answer_data)
{
echo json_encode(array('status'=>-1));exit;
}
$exam_group_data = ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($exam_group_data)
{
echo json_encode(array('status'=>1));exit;
}
}
echo json_encode(array('status'=>0));exit;
}
public function actionVerify_exam_rs()
{
$exam_group_id = Req::post("exam_group_id");
$exam_ids = array();
if($exam_group_id>0)
{
$exam_data = Exam::model()->findAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($exam_data)
{
// //验证是否发送任务
// $task=ATask::model()->findByPk($exam_group_id);
// if($task && in_array($task->answer_sheet_task,array(1,2))){
// echo json_encode(array('status'=>4));exit;
// }
//验证是否有在线答题卡
$thirdAnswerSheet=$this->sConn->createCommand("select online_card from third_answer_sheet where exam_group_id='".$exam_group_id."' and online_card=1 ")->queryRow();
if($thirdAnswerSheet){
echo json_encode(array('status'=>5));exit;
}
foreach($exam_data as $v)
{
$exam_ids[$v->exam_id] = $v->exam_id;
}
// $criteria = new CDbCriteria();
// $criteria->addInCondition('exam_id',$exam_ids);
//
// $criteria->addNotInCondition('is_labelled', array(0,4));
// $_paper_data = SPaper::model()->findAll($criteria);
// if($_paper_data)
// {
// echo json_encode(array('status'=>3));exit;
// }
}
echo json_encode(array('status'=>0));exit;
}else
{
echo json_encode(array('status'=>2));exit;
}
}
public function setIs_new($exam_group_id)
{
if($exam_group_id)
{
Exam::model()->updateAll(array('is_new'=>1),'exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
}
}
public function actionSheet()
{
$data = array();
$sname = '';
$exam_id = Req::get("exam_id");
$class_id = Req::get("class_id");
$sname = Req::get("sname");
$this->setIs_new($exam_id);
$k = 0;
$z = 0;
$x = 0;
$exam_data = Exam::model()->find('exam_id=:exam_id',array(':exam_id'=>$exam_id));
if($exam_data)
{
$data['exam']['exam_id'] = $exam_data->exam_id;
$data['exam']['name'] = $exam_data->name;
$tpl_data = json_decode($exam_data->tpl_data,1);
if(isset($tpl_data['items']))
{
foreach($tpl_data['items'] as $key=>$val)
{
if(in_array($key,Yii::app()->params['topic_type']['ke']))
{
$k += $val['total'];
}
if(in_array($key,Yii::app()->params['topic_type']['zu']))
{
$z += $val['total'];
}
if(in_array($key,Yii::app()->params['topic_type']['xu']))
{
$x += $val['total'];
}
}
}
$data['exam']['name'] = $exam_data->name;
$data['exam']['topic_type'] = $k.' 客观题,'.$z.' 主观题,'.$x.' 选做题';
}
$criteria = new CDbCriteria();
$criteria->order = 'sheet_id desc';
if($sname)
{
$criteria->addSearchCondition('name',$sname);
}
$count = SThirdAnswerSheet::model()->count($criteria);
$pager = new CPagination($count);
$pager->pageSize = 10;
$pager->applyLimit($criteria);
$classInfo = ClassModel::model()->findByPk($class_id);
if($classInfo)
{
$data['className'] = $classInfo->class_name;
$data['class_id'] = $classInfo->class_id;
}else
{
$data['className'] = '';
$data['class_id'] = $class_id;
}
$sheet_data = SThirdAnswerSheet::model()->findAll($criteria);
$data['sheet'] = $sheet_data;
$data['sname'] = $sname;
$data['pages'] = $pager;
$data['pageSize'] = $pager->pageSize;
$data['rowsCount'] = $count;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId);
$data["subject"] = $subject_exam_data;
$this->render('sheet',$data);
}
public function actionBinding()
{
$exam_id = Req::post("exam_id");
$sheet_id = Req::post("sheet_id");
$exam_ids = array();
if($sheet_id && $exam_id)
{
//验证
$sheet_data = SThirdAnswerSheet::model()->find('sheet_id=:sheet_id',array(':sheet_id'=>$sheet_id));
if(!$sheet_data)
{
echo json_encode(array('status'=>-1));exit;
}
$sheet_score = json_decode($sheet_data->sheet_score,1);
if(!$sheet_score)
{
echo json_encode(array('status'=>-7));exit;
}
//验证试卷题量
$topic_types = array();
$paper_data = SPaper::model()->find('exam_id=:exam_id',array(':exam_id'=>$exam_id));
if($paper_data)
{
$paper_topic_data = SPaperTopicRelation::model()->findAll(
array('order'=>'type asc,`order` asc','condition'=>'paper_id=:paper_id','params'=>array(':paper_id'=>$paper_data->paper_id)));
if($paper_topic_data)
{
foreach($paper_topic_data as $key=> $v)
{
if(in_array($v->type,Yii::app()->params['topic_type']['ke'])){
$topic_types['ke'][$v->topic_id] = $v->topic_id;
if(isset($sheet_score[$key+1]) && !empty($sheet_score[$key+1]))
{
if($v->score != $sheet_score[$key+1])
{
echo json_encode(array('status'=>-6));exit;
}
}
}
if(in_array($v->type,Yii::app()->params['topic_type']['zu'])){
$topic_types['zu'][$v->topic_id] = $v->topic_id;
}
if(in_array($v->type,Yii::app()->params['topic_type']['xu'])){
$topic_types['xu'][$v->topic_id] = $v->topic_id;
}
}
if(isset($topic_types['ke'])&&(count($topic_types['ke'])!=$sheet_data->ke_topic_num))
{
echo json_encode(array('status'=>-4));exit;
}
if(!isset($topic_types['ke']) && $sheet_data->ke_topic_num>0)
{
echo json_encode(array('status'=>-4));exit;
}
if(isset($topic_types['zu'])&&(count($topic_types['zu'])!=$sheet_data->zu_topic_num))
{
echo json_encode(array('status'=>-4));exit;
}
if(!isset($topic_types['zu']) && $sheet_data->zu_topic_num>0)
{
echo json_encode(array('status'=>-4));exit;
}
if(isset($topic_types['xu'])&&(count($topic_types['xu'])!=$sheet_data->xuan_topic_num))
{
echo json_encode(array('status'=>-4));exit;
}
if(!isset($topic_types['xu']) && $sheet_data->xuan_topic_num>0)
{
echo json_encode(array('status'=>-4));exit;
}
}else{
echo json_encode(array('status'=>-8));exit;
}
}
/**
* 获取同一次考试
*/
$exam_data = Exam::model()->find('exam_id=:exam_id',array(':exam_id'=>$exam_id));
if($exam_data)
{
$exam_group_data = Exam::model()->findAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_data->exam_group_id));
if($exam_group_data)
{
foreach($exam_group_data as $v)
{
$exam_ids[$v->exam_id] = $v->exam_id;
}
if($exam_ids)
{
$transaction = $this->sConn->beginTransaction();
try{
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
$criteria->addCondition('status=:status');
$criteria->params[':status'] = 1;
SExamAnswerSheet::model()->deleteAll($criteria);
unset($criteria);
$sql='INSERT INTO `exam_third_answer_sheet_relation`
(`sheet_id`,`exam_id`,`status`,`create_time`)VALUES';
foreach($exam_ids as $e_id)
{
$sql.='('.$sheet_id.','.$e_id.',1,'.time().'),';
}
$sql = substr($sql,0,-1);
$this->sConn->createCommand($sql)->execute();
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
Exam::model()->updateAll(array('sheet_answer'=>$sheet_data->sheet_answer,'sheet_score'=>$sheet_data->sheet_score),$criteria);
$transaction->commit();
}catch(Exception $e)
{
$transaction->rollBack();
echo json_encode(array('status'=>0));exit;
}
echo json_encode(array('status'=>1));exit;
}
}
}
}
echo json_encode(array('status'=>0));exit;
}
public function actionDel()
{
$sheet_id = Req::post("sheet_id");
if($sheet_id)
{
SThirdAnswerSheet::model()->deleteAll('sheet_id=:sheet_id',array(':sheet_id'=>$sheet_id));
SExamAnswerSheet::model()->deleteAll('sheet_id=:sheet_id',array(':sheet_id'=>$sheet_id));
}
echo json_encode(array('status'=>1));
}
public function actionThirdview()
{
//判断教材设置
if(!Yii::app()->params['school_textbook_setting'] ){
Yii::app()->jump->error('请先在教材管理模块设置高一、高二的教材版本!');
}
$schoolTextBookSet=Yii::app()->params['school_textbook_setting'];
$data = array();
$printType = Req::get("type");
$criteria = new CDbCriteria();
if(Yii::app()->session['session_duoxueke_subject_id']==3)
{
$criteria->addInCondition('subjects',$this->mathSubjectId);
}else
{
$criteria->addCondition('subjects = '.Yii::app()->session['session_duoxueke_subject_id']);
}
$criteria->addCondition('status = 0');
$teacher_data = Teacher::model()->findAll($criteria);
unset($criteria);
$teacher_arr = array();
if($teacher_data){
$i = 0;
foreach($teacher_data as $v){
$teacher_arr[$i]['teacher_id'] = $v->teacher_id;
$teacher_arr[$i]['teacher_name'] = $v->teacher_name;
$i++;
}
}
$data['teacher_arr'] = $teacher_arr;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
//判断全学科试用学校
// $rs = http('/cms/api/qxk-math-trial-school/'.$this->schoolId,'GET',$this->schoolId,array(),'cgi');
// $rs=json_decode($rs,true);
// if(isset($rs['errCode']) && $rs['errCode']=='00' && $rs['data']==true){
// $data['is_qxk']=1;
// }else{
// $data['is_qxk']=0;
// }
$data['is_qxk']=1;
$teacherSubjectNames = array(3 => '高一高二专用', 6 => '高三专用',51=>'新高一高二');
$textbookArr=array();
foreach ($schoolTextBookSet as $val){
//表里有2个版本的教材,此处过滤掉不属于当前版本的教材
if($data['is_qxk']!=$val['is_qxk']){
continue;
}
$textBookName='';
if(isset($this->textBookType[$val['subject_id']][$val['textbook_id']])){
$textBookName=$this->textBookType[$val['subject_id']][$val['textbook_id']];
}
$textbookArr[$val['grade']]=array(
'grade_id'=>$val['grade'],
'subject_id'=>$val['subject_id'],
'textbook_id'=>$val['textbook_id'],
'subject_name'=>$teacherSubjectNames[$val['subject_id']],
'text_book_name'=>$textBookName
);
}
if(!isset($textbookArr[1]) || !isset($textbookArr[2])){
Yii::app()->jump->error('请先在教材管理模块设置高一、高二的教材版本!');
}
$data['textbookArr'] = $textbookArr;
$data['version_number']=$this->version_number;
$this->render('thirdview',$data);
}
public function actionThirdview_duo()
{
$data = array();
$printType = Req::get("type");
if (empty($printType)) {
$printType = '2';
$printTypeData = 0;
} else {
switch ($printType) {
case "2":
$printTypeData = 0;
break;
case "wtb":
$printTypeData = 1;
break;
case "isp":
$printTypeData = 2;
break;
case "studytrend":
$printTypeData = 3;
break;
default:
$printTypeData = null;
break;
}
}
$data['printType'] = $printType;
// $coach_id = Yii::app()->session['coachInfo']['coach_id'];
// $semester_id = Yii::app()->session['session_semester_id'];
$coach_id = $this->coachId;
$semester_id = $this->semesterId;
// $teacher_data = Teacher::model()->findAll('coach_id=:coach_id',array(':coach_id'=>$coach_id));
$criteria = new CDbCriteria();
if(Yii::app()->session['session_duoxueke_subject_id']==3)
{
$criteria->addInCondition('subjects',$this->mathSubjectId);
}else
{
if(Yii::app()->session['session_duoxueke_subject_id']==18){
$criteria->addInCondition('subjects',array(12,13,14));
}
if(Yii::app()->session['session_duoxueke_subject_id']==19){
$criteria->addInCondition('subjects',array(15,16,17));
}
if(Yii::app()->session['session_duoxueke_subject_id']!=18 && Yii::app()->session['session_duoxueke_subject_id']!=19){
$criteria->addCondition('subjects = '.Yii::app()->session['session_duoxueke_subject_id']);
}
}
$criteria->addCondition('status = 0');
$teacher_data = Teacher::model()->findAll($criteria);
unset($criteria);
$teacher_arr = array();
if($teacher_data){
$i = 0;
foreach($teacher_data as $v){
$teacher_arr[$i]['teacher_id'] = $v->teacher_id;
$teacher_arr[$i]['teacher_name'] = $v->teacher_name;
$i++;
}
}
$data['teacher_arr'] = $teacher_arr;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
$teacherSubjectIds = array(3, 6);
$teacherSubjectNames = array(3 => '高一高二专用', 6 => '高三专用');
$teacherSubjectMaterialIds = array();
$teacherSubjectMaterialNames = array();
foreach ($teacherSubjectIds as $teacherSubjectId) {
$teacherSubjectMaterialIds[$teacherSubjectId] = array();
$teacherSubjectMaterialNames[$teacherSubjectId] = array();
$textbookTree = $this->apiPost('/textbook/tree', array(
'subjectId' => $teacherSubjectId,
'depth' => 3
));
if (! $textbookTree) {
$error[] = 'Brain textbook/tree error';
} elseif (isset($textbookTree->error)) {
$error[] = $textbookTree->error;
} else {
foreach ($textbookTree as $textbook) {
if (isset($textbook->modules)) {
foreach ($textbook->modules as $module) {
if (isset($module->chapters)) {
$teacherSubjectMaterialIds[$teacherSubjectId][] = $textbook->textbook_id;
$teacherSubjectMaterialNames[$teacherSubjectId][$textbook->textbook_id] = $textbook->textbook_name;
}
}
}
}
}
}
//
$criteria = new CDbCriteria();
$criteria->addCondition('subject_id=:subject_id');
$criteria->addCondition('school_card_length=0');
$criteria->params[':subject_id'] = Yii::app()->session['session_duoxueke_subject_id'];
$criteria->order = 'third_tpl_id desc';
$criteria->limit = 5;
$thisTpls = SThirdTplModel::model()->findAll($criteria);
// debug($thisTpls);
if($thisTpls)
{
$data['thisTpls'] = $thisTpls;
}
$data['teacherSubjectIds'] = $teacherSubjectIds;
$data['teacherSubjectNames'] = $teacherSubjectNames;
$data['teacherSubjectMaterialIds'] = $teacherSubjectMaterialIds;
$data['teacherSubjectMaterialNames'] = $teacherSubjectMaterialNames;
$data['version_number']=$this->version_number;
//判断全学科试用学校
// $rs = http('/teacher/paper/word-group/can-use-new/','POST',$this->schoolId,array(),'cgi',array('schoolId:'.$this->schoolId));
//
// $rs=json_decode($rs,true);
// if(isset($rs['errCode']) && $rs['errCode']=='00' && $rs['data']==true){
// $data['is_qxk']=1;
// }else{
// $data['is_qxk']=0;
// }
$data['is_qxk']=1;
// echo Yii::app()->params['zsy_api_url'].'
';
// echo json_encode($rs).'
';
// echo $data['is_qxk'];
$this->render('thirdview1',$data);
}
public function actionThirdview_section()
{
$data = array();
//读取全学科教材
$postRs = $this->apiPost('/all_textbook/tree', array(
'subjectId' => Yii::app()->session['session_duoxueke_subject_id'],
));
$textbookTree=array();
if(isset($postRs->status) && $postRs->status==1 && $postRs->data ){
foreach ($postRs->data as $val){
if($val->level==1){
$textbookTree[]=array(
'textbook_id'=>$val->textbook_id,
'textbook_name'=>$val->textbook_name,
);
}
}
}
$criteria = new CDbCriteria();
$criteria->addCondition('subjects = '.Yii::app()->session['session_duoxueke_subject_id']);
$criteria->addCondition('status = 0');
$teacher_data = Teacher::model()->findAll($criteria);
unset($criteria);
$teacher_arr = array();
if($teacher_data){
$i = 0;
foreach($teacher_data as $v){
$teacher_arr[$i]['teacher_id'] = $v->teacher_id;
$teacher_arr[$i]['teacher_name'] = $v->teacher_name;
$i++;
}
}
$data['teacher_arr'] = $teacher_arr;
$data['textbookTree']=$textbookTree;
$this->render('thirdview_section',$data);
}
public function actionThirdview_under_line()
{
$data = array();
$printType = Req::get("type");
if (empty($printType)) {
$printType = '2';
$printTypeData = 0;
} else {
switch ($printType) {
case "2":
$printTypeData = 0;
break;
case "wtb":
$printTypeData = 1;
break;
case "isp":
$printTypeData = 2;
break;
case "studytrend":
$printTypeData = 3;
break;
default:
$printTypeData = null;
break;
}
}
$data['printType'] = $printType;
// $coach_id = Yii::app()->session['coachInfo']['coach_id'];
// $semester_id = Yii::app()->session['session_semester_id'];
$coach_id = $this->coachId;
$semester_id = $this->semesterId;
// $teacher_data = Teacher::model()->findAll('coach_id=:coach_id',array(':coach_id'=>$coach_id));
$criteria = new CDbCriteria();
if(Yii::app()->session['session_duoxueke_subject_id']==3)
{
$criteria->addInCondition('subjects',$this->mathSubjectId);
}else
{
if(Yii::app()->session['session_duoxueke_subject_id']==18){
$criteria->addInCondition('subjects',array(12,13,14));
}
if(Yii::app()->session['session_duoxueke_subject_id']==19){
$criteria->addInCondition('subjects',array(15,16,17));
}
if(Yii::app()->session['session_duoxueke_subject_id']!=18 && Yii::app()->session['session_duoxueke_subject_id']!=19){
$criteria->addCondition('subjects = '.Yii::app()->session['session_duoxueke_subject_id']);
}
}
$criteria->addCondition('status = 0');
$teacher_data = Teacher::model()->findAll($criteria);
unset($criteria);
$teacher_arr = array();
if($teacher_data){
$i = 0;
foreach($teacher_data as $v){
$teacher_arr[$i]['teacher_id'] = $v->teacher_id;
$teacher_arr[$i]['teacher_name'] = $v->teacher_name;
$i++;
}
}
$data['teacher_arr'] = $teacher_arr;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
$teacherSubjectIds = array(3, 6);
$teacherSubjectNames = array(3 => '高一高二专用', 6 => '高三专用');
$teacherSubjectMaterialIds = array();
$teacherSubjectMaterialNames = array();
foreach ($teacherSubjectIds as $teacherSubjectId) {
$teacherSubjectMaterialIds[$teacherSubjectId] = array();
$teacherSubjectMaterialNames[$teacherSubjectId] = array();
$textbookTree = $this->apiPost('/textbook/tree', array(
'subjectId' => $teacherSubjectId,
'depth' => 3
));
if (! $textbookTree) {
$error[] = 'Brain textbook/tree error';
} elseif (isset($textbookTree->error)) {
$error[] = $textbookTree->error;
} else {
foreach ($textbookTree as $textbook) {
if (isset($textbook->modules)) {
foreach ($textbook->modules as $module) {
if (isset($module->chapters)) {
$teacherSubjectMaterialIds[$teacherSubjectId][] = $textbook->textbook_id;
$teacherSubjectMaterialNames[$teacherSubjectId][$textbook->textbook_id] = $textbook->textbook_name;
}
}
}
}
}
}
//
$criteria = new CDbCriteria();
$criteria->addCondition('subject_id=:subject_id');
$criteria->params[':subject_id'] = Yii::app()->session['session_duoxueke_subject_id'];
$criteria->order = 'third_tpl_id desc';
$criteria->limit = 5;
$thisTpls = SThirdTplModel::model()->findAll($criteria);
if($thisTpls)
{
$data['thisTpls'] = $thisTpls;
}
$data['teacherSubjectIds'] = $teacherSubjectIds;
$data['teacherSubjectNames'] = $teacherSubjectNames;
$data['teacherSubjectMaterialIds'] = $teacherSubjectMaterialIds;
$data['teacherSubjectMaterialNames'] = $teacherSubjectMaterialNames;
$this->render('thirdview_under_line',$data);
}
public function actionUpdateThirdTpl(){
$error = array();
$tplData = array();
$tpl_title = Req::post("tpl_title");
$third_tpl_id = Req::post("third_tpl_id");
$classIds = Req::post("classIds");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$topic = $_POST["topic"];
$layout = Req::post("layout");
$select_card_type = Req::post("select_card_type");
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($tpl_title)){
$error[] = '请设置答题卡名称';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($topic)){
$error[] = '请设置题型';
}
if(empty($layout)){
$error[] = '答题卡类型';
}
if($error){
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}else{
$card_status = 0;
$school_card_length = 8;
if($this->schoolId>999){
$school_card_length = 9;
}
$sql = "select g.card_length,g.card_status FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id in(".join(',',$classIds).") ";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if(!$cardData){
$error[] = '无法找到对应班级';
}
if($cardData['card_status']){
$school_card_length = (int)$cardData['card_length'];
$card_status = (int)$cardData['card_status'];
}
// $rs = $this->sConn->createCommand()->insert('third_tpl',array(
// 'title' => $tpl_title,
// 'subject_id' => $subjectId,
// 'school_card_status' => $card_status,
// 'school_card_length' => $school_card_length,
// 'layout' => $layout,
// 'select_card_type' => $select_card_type,
// 'tpl_data' => $topic,
// 'create_time' => time()
// ));
$rs = SThirdTplModel::model()->updateAll(array(
'title' => $tpl_title,
'subject_id' => $subjectId,
'school_card_status' => $card_status,
'school_card_length' => $school_card_length,
'layout' => $layout,
'select_card_type' => $select_card_type,
'tpl_data' => $topic
),'third_tpl_id=:third_tpl_id',array(':third_tpl_id'=>$third_tpl_id));
$_layout = array(10=>'A4竖版',11=>'A4横版','20'=>'A3竖版','21'=>'A3三栏','31'=>'A3两栏','40'=>'8K(260*370)两栏','41'=>'8K(260*370)三栏','50'=>'8K(270*390)两栏','51'=>'8K(270*390)三栏');
$_select_card_type = array(1=>'准考证号',2=>'条形码');
if($rs !==false){
echo json_encode(array('status'=>1,'msg'=>'保存成功','result'=>array('third_tpl_id'=>$third_tpl_id,'title'=>$tpl_title,'layout'=>$_layout[$layout],'select_card_type'=>$_select_card_type[$select_card_type])));exit;
}
}
echo json_encode(array('status'=>0,'msg'=>'保存成功'));exit;
}
public function actionDelThirdTpl(){
$third_tpl_id = Req::post("third_tpl_id");
if($third_tpl_id>0){
$thirdTpl = SThirdTplModel::model()->deleteAll('third_tpl_id=:third_tpl_id',array(':third_tpl_id'=>$third_tpl_id));
if($thirdTpl){
echo json_encode(array('status'=>1,'msg'=>'1','result'=>$thirdTpl));exit;
}
}
echo json_encode(array('status'=>0,'msg'=>'失败'));exit;
}
public function actionGetThirdTpl(){
$third_tpl_id = Req::post("third_tpl_id");
if($third_tpl_id>0){
$thirdTpl = SThirdTplModel::model()->find('third_tpl_id=:third_tpl_id',array(':third_tpl_id'=>$third_tpl_id))->attributes;
if($thirdTpl){
echo json_encode(array('status'=>1,'msg'=>'1','result'=>$thirdTpl));exit;
}
}
echo json_encode(array('status'=>0,'msg'=>'失败'));exit;
}
public function actionAjaxchangeclasses()
{
$subject_id=$this->subjectId;
if(isset(Yii::app()->session['session_duoxueke_subject_id'])){
$subject_id=Yii::app()->session['session_duoxueke_subject_id'];
}
//读取走班设置
$classified=array();
$setting=$this->schoolManager->getClassShift($this->semesterId,$subject_id);
if($setting){
foreach ($setting as $value){
$classified[$value['grade']]=$value['status'];
}
}
$result = array();
$error = array();
if (Yii::app()->request->getIsPostRequest()){
$teacher_id = Req::post("teacher_id");
$selectedClassId=Req::post('selectedClassId');
if(empty($teacher_id)){
$error[] = "请指定教师";
}else{
$semester_id = $this->semesterId;
if($selectedClassId){
$anotherSelectClass=ClassModel ::model()->getClassArrayByIds($selectedClassId);
$i = 0;
if($anotherSelectClass){
foreach ($anotherSelectClass as $cas){
$class_arr_select[$i]['class_id'] = $cas['class_id'];
$class_arr_select[$i]['class_name'] = $cas['class_name'];
$class_arr_select[$i]['grade'] = $cas['grade'];
$i++;
$class_arr_select_ids[] = $cas['class_id'];
}
}
}else{
$class_arr_select_data = ClassModel ::model()->getSelectclassesByTeacher($semester_id,$teacher_id);
$class_arr_select =array();
$class_arr_select_ids = array();
$i = 0;
if($class_arr_select_data){
foreach($class_arr_select_data as $cas){
if(isset($classified[$cas->grade]) && $classified[$cas->grade]==1){
if($cas->class_type==2){
//判断学科
if(!$this->schoolManager->checkClassifiedSubject($subject_id,$cas->class_id)){
continue;
}
$class_arr_select[$i]['class_id'] = $cas->class_id;
$class_arr_select[$i]['class_name'] = $cas->class_name;
$class_arr_select[$i]['grade'] = $cas->grade;
$i++;
$class_arr_select_ids[] = $cas->class_id;
}
}else{
if($cas->class_type==1){
$class_arr_select[$i]['class_id'] = $cas->class_id;
$class_arr_select[$i]['class_name'] = $cas->class_name;
$class_arr_select[$i]['grade'] = $cas->grade;
$i++;
$class_arr_select_ids[] = $cas->class_id;
}
}
}
}
}
$class_arr_select_ids_str = "";
if($class_arr_select_ids){
foreach($class_arr_select_ids as $v){
$class_arr_select_ids_str.=$v.",";
}
$class_arr_select_ids_str=substr($class_arr_select_ids_str,0,-1);
}
$class_arr_noselect_data = ClassModel ::model()->getNoSelectclassesByTeacher($semester_id,$teacher_id,$class_arr_select_ids_str);
$class_arr_noselect =array();
$j = 0;
if($class_arr_noselect_data){
foreach($class_arr_noselect_data as $cans){
if(isset($classified[$cans->grade]) && $classified[$cans->grade]==1){
if($cans->class_type==2){
//判断学科
if(!$this->schoolManager->checkClassifiedSubject($subject_id,$cans->class_id)){
continue;
}
$class_arr_noselect[$j]['class_id'] = $cans->class_id;
$class_arr_noselect[$j]['class_name'] = $cans->class_name;
$class_arr_noselect[$j]['grade'] = $cans->grade;
$j++;
}
}else{
if($cans->class_type==1){
$class_arr_noselect[$j]['class_id'] = $cans->class_id;
$class_arr_noselect[$j]['class_name'] = $cans->class_name;
$class_arr_noselect[$j]['grade'] = $cans->grade;
$j++;
}
}
}
}
$result['class_arr_select'] = $class_arr_select;
$result['class_arr_noselect'] = $class_arr_noselect;
}
}else{
$error[] = "错误的来源";
}
header('Content-Type: application/json');
if($error){
echo json_encode(array('status' => 0, 'error'=> implode('
', $error)));exit;
}else{
echo json_encode($result);exit;
}
}
public function UUID_SHORT($length = 20)
{
$query = $this->sConn->createCommand("SELECT UUID_SHORT() AS UUID_SHORT")->query()->read();
$result = $query['UUID_SHORT'];
if ($length AND is_int($length))
{
$result = substr($result, ($length * -1));
}
return $result;
}
public function actionCreatethird(){
$error = array();
$tplData = array();
$semesterId = $this->semesterId;
$examName = Req::post("examName");
$type = (int)Req::post("type");
$classIds = Req::post("classIds");
$markType = Req::post("markType");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$examDate = Req::post("examDate");
$tpl_index = (int)Req::post("tpl_index");
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($examName)){
$error[] = '请设置考试名称';
}
if ($type <= 0 || $type > 9) {
$error[] = '考试类型错误';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($examDate)){
$error[] = '请指定考试时间';
}
if(empty($tpl_index)){
$error[] = '请指定类型';
}
if(empty($textbookId)){
$error[] = '请指定教材';
}
if($error){
Yii::app()->jump->error(implode(',',$error));
}else{
$teacherName = Teacher ::model()->getTeacherName($teacherId);
if($teacherName){
$tplData['author'] = $teacherName;
$tplData['subjectId'] = $subjectId;
$tplData['textbookId'] = $textbookId;
$tplData['examDate'] = $examDate;
}
$time = time();
$transaction = $this->sConn->beginTransaction();
try{
// $newExamGroupId = $this->UUID_SHORT();
$newExamGroupId=getUniqueId($this->schoolId);
if($markType ==4)
{
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`mark_status`,`status`,`init_time`,`is_answersheet`,`is_third`,`is_new_marking`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",1,1,".time().",0,1,1)";
}else
{
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`is_answersheet`,`is_third`,`is_new_marking`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",0,1,1)";
}
$this->sConn->createCommand($sql)->execute();
foreach($classIds as $classId){
//$newExamId = $this->UUID_SHORT();
$newExamId = getUniqueId($this->schoolId);
$sql = "select g.card_length,g.card_status,c.class_type FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id = $classId";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if($cardData['card_status']==0){
$cardData['card_length'] = 8;
if($this->schoolId >999){
$cardData['card_length'] = 9;
}
}
$class_type=$cardData['class_type'];
$this->sConn->createCommand()->insert('exam',array(
'exam_id' => $newExamId,
'exam_group_id' => $newExamGroupId,
'name' => $examName,
'semester_id' => $this->semesterId,
'teacher_id' => $teacherId,
'subject_id' => $subjectId,
'module_id' => 0,
'type' => $type,
'school_card_status' => $cardData['card_status'],
'school_card_length' => $cardData['card_length'],
'status' => 2,
'week_num' => 0,
'create_type' => 0,
'create_time' => $time,
'update_time' => $time,
'tpl_data' => jsonEncode($tplData),
'tpl_index' => $tpl_index,
'class_id' => $classId,
'method_ids' => '',
));
// $newPaperId = $this->UUID_SHORT();
$newPaperId= getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('paper', array(
'paper_id' => $newPaperId,
'paper_type' => 1,
'exam_id' => $newExamId,
'paper_name' => '',
'paper_layer' => '',
'difficulty' => 0,
'topics_count' => 0,
'score' => 0,
'add_time' => $time,
'update_time' => $time,
'method_ids' => '',
'is_labelled' => 0,
));
$this->sConn->createCommand()->insert('class_exam_printer', array(
'class_id' => $classId,
'exam_id' => $newExamId,
'type' => 0,
'is_print' => 0,
'print_time' => 0,
'add_time' => $time,
));
$studentIds = SStudentClassRelation::model()->getStudentIdsByClassId_Status_0($classId);
$studentIds_0 = BusinessStudent::model()->keepStudentsStatus_0($studentIds);
$BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds_0);
if($studentIds_0){
foreach ($studentIds_0 as $studentId) {
// $BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds);
// if($studentIds){
// foreach ($studentIds as $studentId) {
$this->sConn->createCommand()->insert('student_paper_relation', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'student_card' => (isset($BStudentCards[0]) && isset($BStudentCards[0][$studentId]) ? $BStudentCards[0][$studentId] : 0),
'school_student_card' => (isset($BStudentCards[1]) && isset($BStudentCards[1][$studentId]) ? $BStudentCards[1][$studentId] : ''),
'class_type' =>$class_type
));
$this->sConn->createCommand()->insert('student_paper_relation_property', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'create_time' =>$time
));
}
}
}
$transaction->commit();
}catch(Exception $e){
$transaction->rollBack();
if (YII_ENV == 'production') {
$error[] = '系统错误[SQL]';
} else {
$error[] = $e->getMessage();
}
}
}
if(!$error){
$this->redirect($this->createUrl('third/index'));
}
}
public function actionQuanCreatethird(){
$error = array();
$tplData = array();
$semesterId = $this->semesterId;
$examName = Req::post("examName");
$type = (int)Req::post("type");
$classIds = Req::post("classIds");
$markType = Req::post("markType");
$paperType = (int)Req::post("paperType");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$examDate = Req::post("examDate");
$qxkPaperId = (int)Req::post("isQxk");
// $tpl_index = (int)Req::post("tpl_index");
$tpl_index = $paperType;
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($examName)){
$error[] = '请设置考试名称';
}
if ($type <= 0 || $type > 9) {
$error[] = '考试类型错误';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(!matchStrChar($examName)){
$error[] = '考试名称不能包含特殊字符';
}
if(!in_array($paperType,array(0,1,2,1050))){
$error[] = '请选择正确的试卷类型';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($examDate)){
$error[] = '请指定考试时间';
}
// if(empty($tpl_index)){
// $error[] = '请指定类型';
// }
if($error){
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}else{
$teacherName = Teacher ::model()->getTeacherName($teacherId);
if($teacherName){
$tplData['author'] = $teacherName;
$tplData['subjectId'] = $subjectId;
$tplData['textbookId'] = $textbookId;
$tplData['examDate'] = $examDate;
}
$time = time();
$transaction = $this->sConn->beginTransaction();
try{
//$newExamGroupId = $this->UUID_SHORT();
$newExamGroupId=getUniqueId($this->schoolId);
if($markType ==4){
$markStatus=1;
$status=1;
}else{
$markStatus=0;
$status=0;
}
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`mark_status`,`status`,`init_time`,`is_answersheet`,`is_third`,`is_new_marking`,`qxk_paper_id`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",".$markStatus.",".$status.",".time().",0,1,1,".$qxkPaperId.")";
$this->sConn->createCommand($sql)->execute();
foreach($classIds as $classId){
//$newExamId = $this->UUID_SHORT();
$newExamId=getUniqueId($this->schoolId);
$sql = "select g.card_length,g.card_status,c.class_type FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id = $classId";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if($cardData['card_status']==0){
$cardData['card_length'] = 8;
if($this->schoolId >999){
$cardData['card_length'] = 9;
}
}
$class_type=$cardData['class_type'];
$this->sConn->createCommand()->insert('exam',array(
'exam_id' => $newExamId,
'exam_group_id' => $newExamGroupId,
'name' => $examName,
'semester_id' => $this->semesterId,
'teacher_id' => $teacherId,
'subject_id' => $subjectId,
'module_id' => 0,
'type' => $type,
'school_card_status' => $cardData['card_status'],
'school_card_length' => $cardData['card_length'],
'status' => 2,
'week_num' => 0,
'create_type' => 0,
'create_time' => $time,
'update_time' => $time,
'tpl_data' => jsonEncode($tplData),
'tpl_index' => $tpl_index,
'class_id' => $classId,
'method_ids' => '',
));
//$newPaperId = $this->UUID_SHORT();
$newPaperId = getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('paper', array(
'paper_id' => $newPaperId,
'paper_type' => 1,
'exam_id' => $newExamId,
'paper_name' => '',
'paper_layer' => '',
'difficulty' => 0,
'topics_count' => 0,
'score' => 0,
'add_time' => $time,
'update_time' => $time,
'method_ids' => '',
'is_labelled' => 0,
));
$this->sConn->createCommand()->insert('class_exam_printer', array(
'class_id' => $classId,
'exam_id' => $newExamId,
'type' => 0,
'is_print' => 0,
'print_time' => 0,
'add_time' => $time,
));
$studentIds = SStudentClassRelation::model()->getStudentIdsByClassId_Status_0($classId);
$studentIds_0 = BusinessStudent::model()->keepStudentsStatus_0($studentIds);
$BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds_0);
if($studentIds_0){
foreach ($studentIds_0 as $studentId) {
// $BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds);
// if($studentIds){
// foreach ($studentIds as $studentId) {
$this->sConn->createCommand()->insert('student_paper_relation', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'student_card' => (isset($BStudentCards[0]) && isset($BStudentCards[0][$studentId]) ? $BStudentCards[0][$studentId] : 0),
'school_student_card' => (isset($BStudentCards[1]) && isset($BStudentCards[1][$studentId]) ? $BStudentCards[1][$studentId] : ''),
'class_type' =>$class_type
));
$this->sConn->createCommand()->insert('student_paper_relation_property', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'create_time' =>$time
));
}
}
}
$transaction->commit();
}catch(Exception $e){
$transaction->rollBack();
echo json_encode(array('status'=>0,'msg'=>'创建失败'));exit;
}
}
if(!$error){
echo json_encode(array('status'=>1,'msg'=>'创建成功','result'=>Yii::app()->createUrl('third/index'),'exam_group_id'=>$newExamGroupId));exit;
}
}
public function actionAjaxCreatethird()
{
$error = array();
$tplData = array();
$semesterId = $this->semesterId;
$examName = Req::post("examName");
$type = (int)Req::post("type");
$classIds = Req::post("classIds");
$markType = Req::post("markType");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$is_update = Req::post("is_update");
$examDate = Req::post("examDate");
$tpl_index = (int)Req::post("tpl_index");
$topic = $_POST["topic"];
$layout = Req::post("layout");
$select_card_type = Req::post("select_card_type");
$json = array();
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($examName)){
$error[] = '请设置考试名称';
}
if ($type <= 0 || $type > 9) {
$error[] = '考试类型错误';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(!matchStrChar($examName)){
$error[] = '考试名称不能包含特殊字符';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($examDate)){
$error[] = '请指定考试时间';
}
if(!inArray($tpl_index,array(0,1,2,1050))){
$error[] = '请指定类型';
}
if(empty($topic)){
$error[] = '请设置题型';
}
if(empty($layout)){
$error[] = '答题卡类型';
}
if($error){
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}else{
//组装题型topic_items
$_topic = json_decode($topic,1);
$_topic_mould = array();
$border = '';
$required = 0;
/**
* * 格式:array(
* 题型=>array(array("option_count"=>选项',topic_no_format'=>'1-5,8,10,11-15','style'=>array('border'=>'','style'=>'','row'=>0)),array("option_count"=>5',topic_no_format'=>'7,9','style'=>array('border'=>'','style'=>'','row'=>0)))
*/
foreach ($_topic as $k=>$v)
{
if(!empty($v)) {
if ($k == 0) {
foreach ($v as $item) {
$_topic_mould[1][] = array('option_count' => $item[0], 'topic_no_format' => $item[1], 'style' => array('border' => '', 'style' => '', 'row' => 0));
}
}
if ($k == 1) {
foreach ($v as $item) {
$_topic_mould[11][] = array('option_count' => $item[0], 'topic_no_format' => $item[1], 'style' => array('border' => '', 'style' => '', 'row' => 0));
}
}
if ($k == 2) {
foreach ($v as $item) {
$border = 'no';
if ($item[2] >= 1) {
$border = 'no';
}
if ($item[2] == 2) {
$border = 'dashed';
}
if ($item[2] == 3) {
$border = 'solid';
}
$smallTopics = array();
if(isset($item[3]) && !empty($item[3])){
$smallArr = explode(',', $item[3]);
foreach($smallArr as $k=>$v){
$smallNextArr = explode('///', $v);
$smallTopics[$smallNextArr[0]] = $smallNextArr[1];
}
}
$style = 'line';
$row = isset($item[0]) ? $item[0] : 1;
$_topic_mould[5][] = array('option_count' => 0, 'topic_no_format' => $item[1], 'style' => array('border' => $border, 'style' => $style, 'row' => (int)$row),'smallTopics'=>$smallTopics);
}
}
if ($k == 3) {
foreach ($v as $item) {
$border = 'no';
if ($item[2] >= 1) {
$border = 'no';
}
if ($item[2] == 2) {
$border = 'dashed';
}
if ($item[2] == 3) {
$border = 'solid';
}
$styles = explode('///', $item[0]);
$style = 'blank';
$row = 0;
if ($styles) {
if ($styles[0] == 1) {
$style = 'blank';
}
if ($styles[0] == 2) {
$style = 'line';
$row = isset($styles[1]) ? $styles[1] : 1;
}
if ($styles[0] == 3) {
$style = 'table';
}
}
$smallTopics = array();
if(isset($item[3]) && !empty($item[3])){
$smallArr = explode(',', $item[3]);
foreach($smallArr as $k=>$v){
$smallNextArr = explode('///', $v);
$smallTopics[$smallNextArr[0]] = $smallNextArr[1];
}
}
$_topic_mould[7][] = array('option_count' => 0, 'topic_no_format' => $item[1], 'style' => array('border' => $border, 'style' => $style, 'row' => (int)$row),'smallTopics'=>$smallTopics);
}
}
if ($k == 4) {
$style = 'blank';
foreach ($v as $item) {
if ($item[2] == 1) {
$style = 'blank';
}
if ($item[2] == 2) {
$style = 'line';
}
$topics = explode('///', $item[0]);
if ($topics) {
$required+= $topics[1]; //多组,会有多道必做题
}
$topic_no = $this->topic_no($item[1]);
if (count($topic_no) != $topics[0]) {
$error[] = '答题卡选做题格式设置有问题';
}
$_topic_mould[17][] = array('option_count' => 0, 'topic_no_format' => $item[1], 'style' => array('border' => '', 'style' => $style, 'row' => 0));
}
}
}
}
$topic_items = $this->topic_items($_topic_mould);
// debug($topic_items);
$_topic_items = array();
if(!$topic_items){
// $error[] = '答题卡格式设置有问题';
echo json_encode(array('status'=>0,'msg'=>'答题卡格式设置有问题'));exit;
}
//添加alias
$alias=0;
$Multi_Group_Sign=0;
$isDisplay=0;
$letterNum=0;
foreach ($topic_items as $v)
{
if($v['topic_type']!=17){
$alias++;
}elseif(isset($v['multi_group_sign']) && $Multi_Group_Sign!=$v['multi_group_sign']){
$Multi_Group_Sign=$v['multi_group_sign'];
$alias++;
$isDisplay=1;
$letterNum=0;
}
if($v['topic_type']==17){
$v['alias']=(string)$alias.$this->numToLetter($letterNum);
}else{
$v['alias']=(string)$alias;
}
$v['showNum']=(string)$alias;
unset($v['multi_group_sign']);
$_topic_items[] = $v;
$letterNum++;
}
if($_topic_items){
$newTopicItems = array();
$i = 1;
$no = 1;
foreach($_topic_items as $v){
if(isset($v['smallCounts'])){
$isDisplay=1;
for($a=1;$a<=$v['smallCounts'];$a++){
$v['id'] = $i;
$v['smallNo'] = $a;
$v['bigNo'] = $no;
$v['alias'] = $no.'.'.$a;
$newTopicItems[] = $v;
$i++;
}
}else{
$v['id'] = $i;
// $v['smallNo'] = 1;
$v['bigNo'] = $no;
$newTopicItems[] = $v;
$i++;
}
$no++;
}
}
//debug($newTopicItems);
$teacherName = Teacher ::model()->getTeacherName($teacherId);
if($teacherName){
$tplData['author'] = $teacherName;
$tplData['subjectId'] = $subjectId;
$tplData['textbookId'] = $textbookId;
$tplData['examDate'] = $examDate;
}
$json['author'] = $teacherName;
$json['examDate'] = $examDate;
$json['subjectId'] = (int)$subjectId;
$json['textbookId'] = (int)$textbookId;
$json['exam_name'] = $examName;
$json['totals'] = count($newTopicItems);
$json['layout'] = (int)$layout;
$json['select_card_type'] = (int)$select_card_type;
$json['impersonal_topic_type'] = 0;
$json['total_score'] = 0;
$json['scores'] = 0;
$json['is_display'] = $isDisplay;
$json['times'] = 0;
if($subjectId==8){
$json['isNewEnglish']=1;
}
$json['school_card_length'] = 8;
if($this->schoolId>999){
$json['school_card_length'] = 9;
}
$json['required'] = (int)$required;
$json['new_items'] = $newTopicItems;
$sql = "select g.card_length,g.card_status,c.class_type FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id in(".join(',',$classIds).") ";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if(!$cardData){
$error[] = '无法找到对应班级';
}
if($cardData['card_status']){
$json['school_card_length'] = (int)$cardData['card_length'];
}else{
$cardData['card_length'] = 8;
if($this->schoolId>999){
$cardData['card_length'] = 9;
}
}
$class_type=$cardData['class_type'];
$time = time();
if($error){
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}
$transaction = $this->sConn->beginTransaction();
try{
if($is_update){
$exam_ids = array();
ExamGroup::model()->deleteAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$is_update));
$xams = Exam::model()->findAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$is_update));
if($xams){
foreach ($xams as $v){
$exam_ids[] = $v->exam_id;
}
}
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
Exam::model()->deleteAll($criteria);
unset($criteria);
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
SPaper::model()->deleteAll($criteria);
unset($criteria);
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
ClassExamPrinter::model()->deleteAll($criteria);
unset($criteria);
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
SStudentPaperRelation::model()->deleteAll($criteria);
unset($criteria);
}
//$newExamGroupId = $this->UUID_SHORT();
$newExamGroupId = getUniqueId($this->schoolId);
if($markType ==4)
{
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`mark_status`,`status`,`init_time`,`is_answersheet`,`is_third`,`is_new_marking`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",1,1,".time().",0,1,1)";
}else
{
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`is_answersheet`,`is_third`,`is_new_marking`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",0,1,1)";
}
$this->sConn->createCommand($sql)->execute();
foreach($classIds as $classId){
//$newExamId = $this->UUID_SHORT();
$newExamId = getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('exam',array(
'exam_id' => $newExamId,
'exam_group_id' => $newExamGroupId,
'name' => $examName,
'semester_id' => $this->semesterId,
'teacher_id' => $teacherId,
'subject_id' => $subjectId,
'module_id' => 0,
'type' => $type,
'school_card_status' => $cardData['card_status'],
'school_card_length' => $cardData['card_length'],
'status' => 2,
'week_num' => 0,
'create_type' => 0,
'create_time' => $time,
'update_time' => $time,
'tpl_data' => jsonEncode($json),
'tpl_index' => $tpl_index,
'class_id' => $classId,
'method_ids' => '',
));
//$newPaperId = $this->UUID_SHORT();
$newPaperId = getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('paper', array(
'paper_id' => $newPaperId,
'paper_type' => 1,
'exam_id' => $newExamId,
'paper_name' => '',
'paper_layer' => '',
'difficulty' => 0,
'topics_count' => 0,
'score' => 0,
'add_time' => $time,
'update_time' => $time,
'method_ids' => '',
'is_labelled' => 0,
));
$this->sConn->createCommand()->insert('class_exam_printer', array(
'class_id' => $classId,
'exam_id' => $newExamId,
'type' => 0,
'is_print' => 0,
'print_time' => 0,
'add_time' => $time,
));
$studentIds = SStudentClassRelation::model()->getStudentIdsByClassId_Status_0($classId);
$studentIds_0 = BusinessStudent::model()->keepStudentsStatus_0($studentIds);
$BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds_0);
if($studentIds_0){
foreach ($studentIds_0 as $studentId) {
// $BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds);
// if($studentIds){
// foreach ($studentIds as $studentId) {
$this->sConn->createCommand()->insert('student_paper_relation', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'student_card' => (isset($BStudentCards[0]) && isset($BStudentCards[0][$studentId]) ? $BStudentCards[0][$studentId] : 0),
'school_student_card' => (isset($BStudentCards[1]) && isset($BStudentCards[1][$studentId]) ? $BStudentCards[1][$studentId] : ''),
'class_type' =>$class_type
));
$this->sConn->createCommand()->insert('student_paper_relation_property', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'create_time' =>$time
));
}
}
}
$transaction->commit();
}catch(Exception $e){
$transaction->rollBack();
echo json_encode(array('status'=>0,'msg'=>'创建失败'));exit;
}
}
if(!$error){
// echo json_encode(array('status'=>1,'msg'=>'创建成功','result'=>$json,'exam_group_id'=>$newExamGroupId));exit;
echo json_encode(array('status'=>1,'msg'=>'创建成功','result'=>Yii::app()->createUrl('third/index'),'exam_group_id'=>$newExamGroupId));exit;
}
}
public function actionCreateThirdTpl(){
$error = array();
$tplData = array();
$tpl_title = Req::post("tpl_title");
$classIds = Req::post("classIds");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$topic = $_POST["topic"];
$layout = Req::post("layout");
$select_card_type = Req::post("select_card_type");
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($tpl_title)){
$error[] = '请设置答题卡名称';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($topic)){
$error[] = '请设置题型';
}
if(empty($layout)){
$error[] = '答题卡类型';
}
if($error){
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}else{
$card_status = 0;
$school_card_length = 8;
if($this->schoolId>999){
$school_card_length = 9;
}
$sql = "select g.card_length,g.card_status FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id in(".join(',',$classIds).") ";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if(!$cardData){
$error[] = '无法找到对应班级';
}
if($cardData['card_status']){
$school_card_length = (int)$cardData['card_length'];
$card_status = (int)$cardData['card_status'];
}
$rs = $this->sConn->createCommand()->insert('third_tpl',array(
'title' => $tpl_title,
'subject_id' => $subjectId,
'school_card_status' => $card_status,
'school_card_length' => $school_card_length,
'layout' => $layout,
'select_card_type' => $select_card_type,
'tpl_data' => $topic,
'create_time' => time()
));
$third_tpl_id = $this->sConn->getLastInsertID();
$_layout = array(10=>'A4竖版',11=>'A4横版','20'=>'A3竖版','21'=>'A3三栏','31'=>'A3两栏','40'=>'8K(260*370)两栏','41'=>'8K(260*370)三栏','50'=>'8K(270*390)两栏','51'=>'8K(270*390)三栏');
$_select_card_type = array(1=>'准考证号',2=>'条形码');
if($rs){
echo json_encode(array('status'=>1,'msg'=>'保存成功','result'=>array('third_tpl_id'=>$third_tpl_id,'title'=>$tpl_title,'layout'=>$_layout[$layout],'select_card_type'=>$_select_card_type[$select_card_type])));exit;
}
}
echo json_encode(array('status'=>0,'msg'=>'保存成功'));exit;
}
public function actionCheckAnswerCard(){
$eid = Req::post('eid');
$error['success'] = 0;
if (empty($eid)) {
$error['message'] = '考试id不存在!';
echo json_encode($error);exit();
}
$examGroup=ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$eid));
if (empty($examGroup)) {
$error['message'] = '未找到试卷信息!';
echo json_encode($error);exit();
}
$thirdSheet = SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$eid));
if (empty($thirdSheet)) {
$error['message'] = '尚未创建答题卡,请创建!';
echo json_encode($error);exit();
}
$mathAi=0; //数学ai解析入口
$exam_data = Exam::model()->findAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$eid));
if($exam_data)
{
foreach($exam_data as $v)
{
$exam_ids[$v->exam_id] = $v->exam_id;
}
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id',$exam_ids);
$criteria->addCondition('is_labelled>0');
$criteria->addCondition('is_labelled<4');
$_paper_data = SPaper::model()->findAll($criteria);
if($_paper_data || ($examGroup['is_tagging']>0 && $examGroup['is_tagging']<4))
{
$error['success'] = 0;
$error['message'] = '已发送标注,无法上传';
echo json_encode($error);exit();
}
if(in_array($exam_data[0]['subject_id'],$this->mathSubjectId)){
if($examGroup['qxk_paper_id']>0){
//查询解析数据
$topicWord = STopicWord::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$eid));
if($topicWord && $topicWord->is_history_topic){
$mathAi=0;
}else{
$mathAi=1;
}
}
}
}
$start=strtotime(date('Y-m-d'))+3600*8+1800; //8点半
$end=strtotime(date('Y-m-d'))+3600*18; //18点
if((time()>$start && time()<$end) || in_array($this->schoolId,array(2133,4016,4044,2134))){
$error['data']='ai';
}else{
$error['data']='word';
}
$error['math_ai']=$mathAi;
$error['success'] = 1;
echo json_encode($error);exit();
}
// 上传试卷模板
public function actionUploadTpl(){
$exam_group_id = Req::post('eid');
$error['success'] = 0;
if (empty($exam_group_id)) {
$error['message'] = '考试id不存在!';
echo json_encode($error);exit();
}
$examInfo = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($examInfo)) {
$error['message'] = '未找到试卷信息!';
echo json_encode($error);exit();
}
$thirdSheet = SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($thirdSheet)) {
$error['message'] = '尚未上传答题卡!';
echo json_encode($error);exit();
}
if (empty($_FILES['word_file'])) {
$error['message'] = '未找到上传文件!';
echo json_encode($error);exit();
}
if(!is_uploaded_file($_FILES['word_file']['tmp_name'])){
$error['message'] = '非法上传!';
echo json_encode($error);exit();
}
if ($_FILES['word_file']['error'] > 0) {
switch ($_FILES['word_file']['error']) {
case 1:
$error['message'] = '文件大小超出了服务器的空间大小!';
break;
case 2:
$error['message'] = '要上传的文件大小超出浏览器限制!';
break;
case 3:
$error['message'] = '文件只有部分被上传!';
break;
case 4:
$error['message'] = '没有找到要上传的文件!';
break;
case 5:
$error['message'] = '服务器临时文件夹丢失!';
break;
case 6:
$error['message'] = '文件写入到临时文件夹出错!';
break;
}
echo json_encode($error);exit();
}
// 保存上传文件至服务器
$extName = substr($_FILES['word_file']['name'],strrpos($_FILES['word_file']['name'],'.'));
$fileName = $exam_group_id.$extName;
$wordRename = 'zsyas2/third/words/'.$this->schoolId.'/'. date('Y') . '/' . date('m') . '/' . date('d').'/'. uniqid() . '/' . $fileName;
$ucloud = new Qcloud();
$uploadInfo = $ucloud->putFile($wordRename, $_FILES['word_file']['tmp_name']);
if ($uploadInfo['status'] == 0) {
echo json_encode(array('success' => 0, 'message' => $uploadInfo['msg']));
exit();
}
$uploadInfo['url'] = str_replace("%2F","/",$uploadInfo['url']);
//操作日志
if(Yii::app()->params['handle_log_on_off'])
{
writeFileLog(jsonEncode(array(
"exam_group_id" => (string)$exam_group_id,
"operate_project" => 'zsyas2',
"title" => '第三方试卷上传试卷',
"school_id" => $this->schoolId,
"operate_account" => Yii::app()->session['coachInfo']['coach_name'],
"operate_method" => $this->action,
"operate_url" => $this->getRoute(),
"operate_sql" => json_encode(array('insert'=>array('exam_group_id'=>$exam_group_id,'status'=>0,'word_path'=>$uploadInfo['url'],'subject_id'=>$examInfo->subject_id))),
"operate_param" =>json_encode(array('post'=>$_POST,'get'=>$_GET,'file'=>$uploadInfo['url'])),
"date"=>date('Y-m-d H:i:s')
)));
}
$transcation = $this->sConn->beginTransaction();
try {
$time = time();
//查询解析数据
$topicWord = STopicWord::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($topicWord && $topicWord->is_history_topic){
//复用解析,重新上传清空试题
$historyTopic=json_decode($topicWord->is_history_topic,1);
if(!$historyTopic){
$error['message'] = '试卷结构恢复不成功!';
echo json_encode($error);exit();
}
$examGroup = $this->sConn->createCommand("select upload_status,mark_type from exam_group where exam_group_id={$exam_group_id}")->queryRow();
if ($examGroup['upload_status'] > 0) {
$result['message'] = "已上传成绩,不能切换解析模式";
exit(json_encode($result));
}
$exam = $this->sConn->createCommand("SELECT e.exam_id,e.tpl_data,p.paper_id FROM `exam` e join paper p on e.exam_id=p.exam_id where e.exam_group_id='".$exam_group_id."'")->queryAll();
//取得试卷topic
$paperIds=array();
foreach ($exam as $value){
$paperIds[]=$value['paper_id'];
}
$tplData=json_decode($exam[0]['tpl_data'],true);
if(isset($tplData['new_items'])){
foreach ($tplData['new_items'] as $key =>$val){
if(isset($historyTopic[$val['id']])){
$tplData['new_items'][$key]['topicId']=$historyTopic[$val['id']]['topic_id'];
$tplData['new_items'][$key]['stemId']=$historyTopic[$val['id']]['stem_id'];
}
}
}
$paperTopicRelation=$this->sConn->createCommand("select `order`,`topic_id`,`type`,`score` from `paper_topic_relation` where paper_id='".$paperIds[0]."'")->queryAll();
$updateSql=array();
foreach ($paperTopicRelation as $value){
if(!isset($historyTopic[$value['order']])){
$error['message'] = '试卷结构恢复不成功!';
echo json_encode($error);exit();
}
$stemId=0;
if(isset($historyTopic[$value['order']]['stem_id'])){
$stemId=$historyTopic[$value['order']]['stem_id'];
}
$updateSql[]="update paper_topic_relation set topic_id='".$historyTopic[$value['order']]['topic_id']."',stem_id='".$stemId."',method_ids='',method_difficulty=0 where paper_id in(".implode(',',$paperIds).") and topic_id='".$value['topic_id']."'";
if($examGroup['mark_type']==4 && !in_array($historyTopic[$value['order']]['type'],array(1,2,11))){
$updateSql[]="update marking_topic set topic_id='".$historyTopic[$value['order']]['topic_id']."' where exam_group_id='{$exam_group_id}' and topic_id='{$value['topic_id']}'";
}
}
foreach ($updateSql as $sql){
$this->sConn->createCommand($sql)->execute();
}
if($examGroup['mark_type']!=4){
$this->sConn->createCommand("delete from marking_topic where exam_group_id='{$exam_group_id}'")->execute();
}
$this->sConn->createCommand("update exam set tpl_data='".jsonEncode($tplData)."' where exam_group_id='{$exam_group_id}'")->execute();
}
$this->sConn->createCommand("update exam_group set is_answersheet=0 where exam_group_id='{$exam_group_id}'")->execute();
STopicWord::model()->deleteAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
$uuid = $this->sConn->createCommand("select RIGHT(UUID_SHORT(), 6)")->queryAll();
$wordId = current(current($uuid));
$topic_word_odj = new STopicWord();
$topic_word_odj->word_id = $wordId;
$topic_word_odj->exam_group_id = $exam_group_id;
$topic_word_odj->word_name = '第三方试卷'.$fileName;
$topic_word_odj->word_path = $uploadInfo['url'];
$topic_word_odj->word_md5 = '';
$topic_word_odj->word_size = $_FILES['word_file']['size'];
$topic_word_odj->subject_id = $examInfo->subject_id;
$topic_word_odj->status = 0;
$topic_word_odj->uploader_id = $this->coachId;
$topic_word_odj->upload_time = $time;
$topic_word_odj->save();
$transcation->commit();
}
catch (Exception $e)
{
$transcation->rollback();
$error['message'] = '上传文件失败!';
echo json_encode($error);exit();
}
$this->schoolManager->saveExamProcess($exam_group_id,3,time());
$error['success'] = 1;
$error['message'] = '上传文件成功!';
echo json_encode($error);exit();
}
public function actionSetSubjectId()
{
$subjectId = Req::post("subjectId");
if($subjectId)
{
Yii::app()->session['session_duoxueke_subject_id'] = $subjectId;
echo 1;exit;
}else
{
echo 0;exit;
}
}
/**
*
* 格式:array(
* 题型=>array(array("option_count"=>选项',topic_no_format'=>'1-5,8,10,11-15','style'=>array('border'=>'','style'=>'','row'=>0)),array("option_count"=>5',topic_no_format'=>'7,9','style'=>array('border'=>'','style'=>'','row'=>0)))
*
* )
*
*/
protected function topic_items($topic_data = array())
{
$data = array();
$keys = array();
if(!$topic_data)
{
return false;
}
foreach ($topic_data as $k=>$v)
{
$counter = $this->counter($k,$v);
if(!$counter){
return array();
}else{
foreach ($counter as $ck =>$cv){
if(!isset($keys[$ck])){
$keys[$ck] = $ck;
$data[$ck] = $cv;
}else{
return false;
}
}
}
}
ksort($data);
return $data;
}
/**
*计算题量
*/
protected function counter($type,$format)
{
$data = array();
$keys = array();
if($type==1 || $type ==11)
{
foreach ($format as $_format){
if(isset($_format['option_count']) && !empty($_format['option_count']) && isset($_format['topic_no_format']) && !empty($_format['topic_no_format']))
{
$topic_no = $this->topic_no($_format['topic_no_format']);
if($topic_no)
{
foreach ($topic_no as $v)
{
if(isset($keys[$v])){
return false;
}else{
$keys[$v] = $v;
}
$data[$v]['id'] = (int)$v;
$data[$v]['optionsCount'] = (int)$_format['option_count'];
$data[$v]['score'] = 0;
$data[$v]['topic_type'] = (int)$type;
$data[$v]['group_id'] = 0;
$data[$v]['border'] = "";
$data[$v]['style'] = "";
$data[$v]['row'] = 0;
}
}else{
return false;
}
}
}
}elseif($type==5){
foreach ($format as $_format){
if(isset($_format['style']) && !empty($_format['style']) && isset($_format['topic_no_format']) && !empty($_format['topic_no_format'])){
if(isset($_format['smallTopics'])){
$smallArr = $_format['smallTopics'];
}else{
$smallArr = array();
}
$topic_no = $this->topic_no($_format['topic_no_format']);
if($topic_no){
foreach ($topic_no as $v){
if(isset($keys[$v])){
return false;
}else{
$keys[$v] = $v;
}
$data[$v]['id'] = (int)$v;
$data[$v]['optionsCount'] = 0;
$data[$v]['score'] = 0;
$data[$v]['group_id'] = 0;
$data[$v]['topic_type'] = (int)$type;
$data[$v]['border'] = $_format['style']['border'];
$data[$v]['style'] = $_format['style']['style'];
$data[$v]['row'] = $_format['style']['row'];
if(isset($smallArr[$v])){
$data[$v]['smallCounts'] = $smallArr[$v];
}
}
}
}
}
}elseif($type==7){
foreach ($format as $_format){
if(isset($_format['style']) && !empty($_format['style']) && isset($_format['topic_no_format']) && !empty($_format['topic_no_format'])){
if(isset($_format['smallTopics'])){
$smallArr = $_format['smallTopics'];
}else{
$smallArr = array();
}
$topic_no = $this->topic_no($_format['topic_no_format']);
if($topic_no){
foreach ($topic_no as $v){
if(isset($keys[$v])){
return false;
}else{
$keys[$v] = $v;
}
$data[$v]['id'] = (int)$v;
$data[$v]['optionsCount'] = 0;
$data[$v]['score'] = 0;
$data[$v]['group_id'] = 0;
$data[$v]['topic_type'] = (int)$type;
$data[$v]['border'] = $_format['style']['border'];
$data[$v]['style'] = $_format['style']['style'];
$data[$v]['row'] = $_format['style']['row'];
if(isset($smallArr[$v])){
$data[$v]['smallCounts'] = $smallArr[$v];
}
}
}
}
}
}elseif($type==17){
foreach ($format as $_format){
if(isset($_format['style']) && !empty($_format['style']) && isset($_format['topic_no_format']) && !empty($_format['topic_no_format'])){
$topic_no = $this->topic_no($_format['topic_no_format']);
//多选题需要添加一个组的标记
$Multi_Group_Sign=0;
if($topic_no){
foreach ($topic_no as $v){
if(isset($keys[$v])){
return false;
}else{
$keys[$v] = $v;
}
if(!$Multi_Group_Sign) $Multi_Group_Sign=$v;
$data[$v]['id'] = (int)$v;
$data[$v]['optionsCount'] = 0;
$data[$v]['score'] = 0;
$data[$v]['group_id'] = 0;
$data[$v]['topic_type'] = (int) $type;
$data[$v]['border'] = $_format['style']['border'];
$data[$v]['style'] = $_format['style']['style'];
$data[$v]['row'] = $_format['style']['row'];
$data[$v]['multi_group_sign'] = $Multi_Group_Sign;
}
}
}
}
}
return $data;
}
/**
* @param $str
* 格式
*/
protected function topic_no($str)
{
$data = array();
if($str){
$array = explode(',', $str);
foreach ($array as $key => $v) {
if(!empty($v)){
$section = explode('-', $v);
if(count($section)>1)
{
if($section[1]<$section[0])
{
return array();
}else
{
if($section[0]){
for ($i=$section[0]; $i<= $section[1] ; $i++) {
# code...
if(isset($data[$i]))
{
return array();
}else{
$data[$i] = $i;
}
}
}
}
}else{
if(isset($data[$v]))
{
return array();
}else{
$data[$v] = $v;
}
}
}
}
}
return $data;
}
public function actionPrint_paper(){
$exam_group_id = Req::post('exam_group_id');
$exam = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($exam)
{
echo json_encode(array('status'=>1,'msg'=>'','result'=>$exam->tpl_data));exit;
}
echo json_encode(array('status'=>0,'msg'=>$exam->tpl_data,'result'=>''));exit;
}
public function actionCreate_sheet(){
$examName = Req::post("examName");
$classIds = Req::post("classIds");
$layout = Req::post("layout");
$select_card_type = Req::post("select_card_type");
$topic = $_POST["topic"];
if($topic && $classIds){
$classIds = explode(',',substr($classIds,0,-1));
//组装题型topic_items
$_topic = json_decode($topic,1);
$_topic_mould = array();
$border = '';
$required = 0;
/**
* * 格式:array(
* 题型=>array(array("option_count"=>选项',topic_no_format'=>'1-5,8,10,11-15','style'=>array('border'=>'','style'=>'','row'=>0)),array("option_count"=>5',topic_no_format'=>'7,9','style'=>array('border'=>'','style'=>'','row'=>0)))
*/
// debug($_topic);
foreach ($_topic as $k=>$v)
{
if(!empty($v)) {
if ($k == 0) {
foreach ($v as $item) {
$_topic_mould[1][] = array('option_count' => $item[0], 'topic_no_format' => $item[1], 'style' => array('border' => '', 'style' => '', 'row' => 0));
}
}
if ($k == 1) {
foreach ($v as $item) {
$_topic_mould[11][] = array('option_count' => $item[0], 'topic_no_format' => $item[1], 'style' => array('border' => '', 'style' => '', 'row' => 0));
}
}
if ($k == 2) {
foreach ($v as $item) {
$border = 'no';
if ($item[2] >= 1) {
$border = 'no';
}
if ($item[2] == 2) {
$border = 'dashed';
}
if ($item[2] == 3) {
$border = 'solid';
}
$smallTopics = array();
if(isset($item[3]) && $item[3]){
$smallArr = explode(',', $item[3]);
foreach($smallArr as $k=>$v){
$smallNextArr = explode('///', $v);
$smallTopics[$smallNextArr[0]] = $smallNextArr[1];
}
}
$style = 'line';
$row = isset($item[0]) ? $item[0] : 1;
$_topic_mould[5][] = array('option_count' => 0, 'topic_no_format' => $item[1], 'style' => array('border' => $border, 'style' => $style, 'row' => (int)$row),'smallTopics'=>$smallTopics);
}
}
if ($k == 3) {
foreach ($v as $item) {
$border = 'no';
if ($item[2] >= 1) {
$border = 'no';
}
if ($item[2] == 2) {
$border = 'dashed';
}
if ($item[2] == 3) {
$border = 'solid';
}
$smallTopics = array();
if(isset($item[3]) && $item[3]){
$smallArr = explode(',', $item[3]);
foreach($smallArr as $k=>$v){
$smallNextArr = explode('///', $v);
$smallTopics[$smallNextArr[0]] = $smallNextArr[1];
}
}
$styles = explode('///', $item[0]);
$style = 'blank';
$row = 0;
if ($styles) {
if ($styles[0] == 1) {
$style = 'blank';
}
if ($styles[0] == 2) {
$style = 'line';
$row = isset($styles[1]) ? $styles[1] : 1;
}
if ($styles[0] == 3) {
$style = 'table';
}
}
$_topic_mould[7][] = array('option_count' => 0, 'topic_no_format' => $item[1], 'style' => array('border' => $border, 'style' => $style, 'row' => (int)$row),'smallTopics'=>$smallTopics);
}
}
if ($k == 4) {
$style = 'blank';
foreach ($v as $item) {
if ($item[2] == 1) {
$style = 'blank';
}
if ($item[2] == 2) {
$style = 'line';
}
$topics = explode('///', $item[0]);
if ($topics && isset($topics[1])) {
$required += $topics[1];
}
$topic_no = $this->topic_no($item[1]);
if (count($topic_no) != $topics[0]) {
$error[] = '答题卡选做题格式设置有误,请填写正确的题号';
}
$_topic_mould[17][] = array('option_count' => 0, 'topic_no_format' => $item[1], 'style' => array('border' => '', 'style' => $style, 'row' => 0));
}
}
}
}
// debug($_topic_mould);
$topic_items = $this->topic_items($_topic_mould);
$_topic_items = array();
if(!$topic_items){
echo json_encode(array('status'=>0,'msg'=>'答题卡格式设置有误,请填写确的题号'));exit;
}
//添加alias
$alias=0;
$Multi_Group_Sign=0;
$isDisplay=0;
$letterNum=0;
foreach ($topic_items as $v)
{
if($v['topic_type']!=17){
$alias++;
}elseif(isset($v['multi_group_sign']) && $Multi_Group_Sign!=$v['multi_group_sign']){
$Multi_Group_Sign=$v['multi_group_sign'];
$alias++;
$isDisplay=1;
$letterNum=0;
}
if($v['topic_type']==17){
$v['alias']=(string)$alias.$this->numToLetter($letterNum);
}else{
$v['alias']=(string)$alias;
}
$v['showNum']=(string)$alias;
unset($v['multi_group_sign']);
if(isset($v['smallCounts'])){
$smallCounts = (int)$v['smallCounts'];
$bigId = (int)$v['alias'];
for($a=1;$a<=$smallCounts;$a++){
$v['alias'] = $bigId.'.'.$a;
$v['showNum'] = $bigId.'.'.$a;
$_topic_items[] = $v;
// $alias++;
}
}else{
$_topic_items[] = $v;
}
$letterNum++;
}
//debug($_topic_items);
$json['author'] = '';
$json['examDate'] = '';
$json['subjectId'] = (int)Yii::app()->session['session_duoxueke_subject_id'];
$json['textbookId'] = 0;
$json['exam_name'] = $examName;
$json['totals'] = count($_topic_items);
$json['layout'] = (int)$layout;
$json['select_card_type'] = (int)$select_card_type;
$json['impersonal_topic_type'] = 0;
$json['total_score'] = 0;
$json['is_display'] = 1;
$json['times'] = 0;
$json['school_card_length'] = 8;
if($this->schoolId>999){
$json['school_card_length'] = 9;
}
$json['required'] = (int)$required;
$json['new_items'] = $_topic_items;
$sql = "select g.card_length,g.card_status FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id in(".join(',',$classIds).") ";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if(!$cardData){
$error[] = '无法找到对应班级';
}
if($cardData['card_status']){
$json['school_card_length'] = (int)$cardData['card_length'];
}
echo json_encode(array('status'=>1,'msg'=>'打印成功','result'=>$json));exit;
}
echo json_encode(array('status'=>0,'msg'=>'答题卡格式设置有误,请填写考试名称与班级信息'));exit;
}
/*判断关联答题卡*/
public function actionGetThirdSheet(){
$ExamGroupId=Req::post('exam_group_id');
$getType=Req::post('get_type');
if(!$getType) $getType=0;
$result=array('success'=>0);
if(!$ExamGroupId || !is_numeric($ExamGroupId)){
exit(json_encode($result));
}
//验证是否发送任务
$task=ATask::model()->findByPk($ExamGroupId);
if(!$getType){
if($task && in_array($task->paper_task,array(1,2))){
echo json_encode(array('success'=>4));exit;
}
}else{
if($task && in_array($task->parse_task,array(1,2))){
echo json_encode(array('success'=>4));exit;
}
}
$ThirdSheet=SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$ExamGroupId));
if($ThirdSheet){
$result['success']=1;
}
exit(json_encode($result));
}
/********************* 第三方教学宝开始 *********************/
/**
* 第三方教学宝
* @throws CException
*/
public function actionTeaching()
{
set_time_limit (300);
ini_set('memory_limit', '300M');
$classId = Req::get("classId");
$examId = Req::get("examId");
$force = (int)Req::get('force');
$force = 1;//待删
if(!$examId || !is_numeric($examId)){
echo json_encode(array("status" => 1, "error" => "考试ID参数不正确!"));
}
$examObj = new Exam();
$examInfo = $examObj->getTeachingInfo($examId);
if(!$examInfo){
echo json_encode(array("status" => 1, "error" => "没有考试信息!"));
exit;
}
$pdfpath = str_replace("protected", "", Yii::app()->basePath) . $examInfo['academicr_pdf_path'];
$res = array();//生成pdf命令结果
if (!$examInfo['academicr_pdf_path'] || $examInfo['is_academicr_pdf'] == 0 || !$this->check_pdf($pdfpath) || $force) {
$paperObj = new SPaper();
$ptrObj = new SPaperTopicRelation();
$ptlObj = new SPaperTopicLarge();
$sprObj = new SStudentPaperRelation();
$sptRsObj = new SStudentPaperTopicRs();
$examGroupId = $examInfo['exam_group_id'];
$examIds = $examObj->getExamIds($examGroupId);
//去除没有上传成绩的学生
$stuIdsArr = $sptRsObj->getHasScoreStu($examIds);
$ptrInfo = $sprObj->getStudentExamInfo($examIds);
if(!$ptrInfo){
echo json_encode(array("status" => 1, "error" => "考试没有数据!"));
exit();
}
$paperIds = array();
foreach($ptrInfo as $value){
$paperIds[$value['exam_id']] = $value['paper_id'];
}
//试卷总分
$paperScore = $paperObj->getPaperScore($paperIds);
if(!$paperScore){
echo json_encode(array("status" => 1, "error" => "试卷总分不正确!"));
exit();
}
/**************************** 一、班级情况分析 ***********************************/
//获取当前考试的上一次考试数据
$cepObj = new SClassExamPrinter();
$preInfo = $cepObj->getPreExamId($examId,$examInfo['subject_id'],$examInfo['class_id']);
$preExamId = isset($preInfo['exam_id'])?$preInfo['exam_id']:'';
$preExamGroupId = isset($preInfo['exam_group_id'])?$preInfo['exam_group_id']:'';
$prePaperScore = 0;
$preStuIdsArr = array();
if($preExamId){
$preExamIds = $examObj->getExamIds($preExamGroupId);
//去除没有上传成绩的学生
$preStuIdsArr = $sptRsObj->getHasScoreStu($preExamIds);
$prePtrInfo = $sprObj->getStudentExamInfo($preExamIds);
$prePaperIds = array();
foreach($prePtrInfo as $value){
$prePaperIds[$value['exam_id']] = $value['paper_id'];
}
if($prePaperIds){
$prePaperScore = $paperObj->getPaperScore($prePaperIds);
}
}else{
$prePtrInfo = array();
}
if(!$prePaperScore && $prePtrInfo){
echo json_encode(array("status" => 1, "error" => "试卷总分不正确!"));
exit();
}
$paperId = $paperIds[$examId];
//班级排名得分率人数等数据
$classAnalyData = $this->getClassAnalyse($examId,$ptrInfo,$paperScore,$preExamId,$prePtrInfo,$prePaperScore,$stuIdsArr,$preStuIdsArr);
//大幅进步,大幅退步,前5名和后5名
$largeOrderData = $this->getLargeOrder($examId,$ptrInfo,$preExamId,$prePtrInfo,$stuIdsArr,$preStuIdsArr);
unset($ptrInfo);
unset($prePtrInfo);
/**************************** 二、考试情况分析 ***********************************/
//试卷题对应的题号,分数
$largeTopicType = $ptlObj->getPaperLargeTopicInfo($paperId);
// list($topicScore,$topicNo,$topicType,$topicLogicType,$topicRelLarge) = $ptrObj->getPaperTopicInfo($paperId,$largeTopicType);
list($smallTopicScore,$smallTopicNo,$topicScore,$topicNo,$topicType,$topicLogicType,$topicRelLarge,$topicRelMethod) = $ptrObj->getPaperTopicInfo($paperId,$largeTopicType,$examInfo['subject_id']);
if(!$topicScore){
echo json_encode(array("status" => 1, "error" => "没有试卷题数据!"));
exit();
}
// 学生得分
$stuRs = $sptRsObj->getStudentRs($paperIds);
if(!$stuRs){
echo json_encode(array("status" => 1, "error" => "没有学生做题数据!"));
exit();
}
$examAnalyData = $this->getExamAnalyse($stuRs,$topicScore,$topicNo,$paperId,$topicRelLarge);
/**************************** 三、题类型掌握情况 ***********************************/
$typeMasterData = $this->getTopicTypeAnaly($stuRs,$topicScore,$topicNo,$paperId,$topicLogicType,$topicRelLarge);
/**************************** 四、试卷讲评 ***********************************/
//试题年级和班级得分率,答对和答错人数
$topicRateStu = $this->getTopicRateWrongPerson($stuRs,$topicScore,$paperId,$stuIdsArr,$topicRelLarge);
unset($stuRs);
$topicIds = array_keys($topicNo);
$topicDetails = $this->aipost('/topic/batchAll', array('topicIds' => $topicIds));
if (!$topicDetails) {
echo json_encode(array("status" => 1, "error" => "获取接口batchALL无数据!"));
exit();
} elseif (isset($topicDetails['status']) && $topicDetails['status']==0) {
echo json_encode(array("status" => 1, "error" => $topicDetails['error'][0]));
exit();
}
$topicDetails = $this->getTopicDetail($topicDetails);
$diff_id_arr = array_diff($topicIds, array_keys($topicDetails));
if ($diff_id_arr) {
//todo 发送消息到补提
echo json_encode(array("status" => 1, "error" => "请等待题库老师补题!"));
exit;
}
$data = array();
$data['examInfo'] = $examInfo;
$data['classAnalyData'] = $classAnalyData;
$data['largeOrderData'] = $largeOrderData;
$data['examAnalyData'] = $examAnalyData;
$data['typeMasterData'] = $typeMasterData;
$data['topicDetails'] = $topicDetails;
$data['paperTopicNo'] = $topicNo;
$data['smallTopicNo'] = $smallTopicNo;
$data['topicRateStu'] = $topicRateStu;
$html = $this->renderPartial("teaching", $data, true);
// $html = $this->render("teaching", $data);
$htmlpath = str_replace("protected", "", Yii::app()->basePath) . '/assets/'; //存放生成的HTML路径
$pdfpath = str_replace("protected", "", Yii::app()->basePath) . '/assets/pdf/academicr/' . $this->schoolId . "/"; //存放生成的PDF路径
$pdfurl = '/assets/pdf/academicr/' . $this->schoolId . "/";
if (!is_dir($htmlpath)) {
if (!mkdir($htmlpath, 0777, true)) {
exit('Create directory fail: ' . $htmlpath);
}
}if (!is_dir($pdfpath)) {
if (!mkdir($pdfpath, 0777, true)) {
exit('Create directory fail1: ' . $pdfpath);
}
}
$htmlpath.=$examId . ".html";
$f = fopen($htmlpath, "w");
fwrite($f, $html);
$htmlurl = '/assets/' . $examId . ".html"; //访问HTML的路径
if (Yii::app()->basePath == "E:\wamp64\www\zsyas2\protected") {//本地的basePath
$htmlurl = " http://local.zsyas2teaching.com" . '/'.$examId.'.html';
$pdffname=$classId."-".$examId.".pdf";
$pdfpath = $pdfpath . $pdffname;
$pdfurl = $pdfurl . $pdffname;
$commond = Yii::app()->params['phantomjs'] . " "
. Yii::app()->params['html2pdf'] . " "
. " {$htmlurl}"
. " {$pdfpath}"
. " 176mm*250mm ''";
} else {
$htmlurl = "http://" . $_SERVER['SERVER_NAME'] . $htmlurl;
$pdffname=$classId."-".$examId.".pdf";
$pdfpath = $pdfpath . $pdffname;
$pdfurl = $pdfurl . $pdffname;
$commond = Yii::app()->params['phantomjs_server'] . " "
. Yii::app()->basePath . '/../js/html2pdf.js' . " "
. " {$htmlurl}"
. " {$pdfpath}"
. " 176mm*250mm ''";
}
exec($commond, $res, $code);
if(isset($res[0])){
$isBool = false;
foreach($res as $msg){
if (strpos($msg, 'succeed') !== false){
$isBool = true;
}
}
if ($isBool) {//命令返回成功
if ($this->file_exists($pdfpath)) {
// $pdfurl=iconv("GBK", "UTF-8",$pdfurl);
$this->sConn->createCommand()->update("exam", array("academicr_pdf_path" => $pdfurl, "academicr_pdf_time" => time(), "is_academicr_pdf" => 1), "exam_id = '{$examId}'");
@unlink($htmlpath);
} else {
$this->sConn->createCommand()->update("exam", array("academicr_pdf_path" => "", "academicr_pdf_time" => 0, "is_academicr_pdf" => 0), "exam_id = '{$examId}'");
@unlink($htmlpath);
echo json_encode(array("status" => 1, "error" => "PDF文件未找到!"));
exit;
}
} else {
@unlink($htmlpath);
echo json_encode(array("status" => 1, "error" => "PDF创建失败!",'exec_rs'=>json_encode($res)));
exit;
}
}else{
Curl::post(Yii::app()->params['handle_log_api'], array(
"exam_group_id" => (string)$examGroupId,
"operate_project" => 'zsyas2',
"school_id" => $this->schoolId,
"title" => '下载教师讲案',
"operate_account" => Yii::app()->session['coachInfo']['coach_name'],
"operate_method" => $this->action,
"operate_url" => $this->getRoute(),
"operate_sql" => '',
"operate_param" =>json_encode(array('post'=>array("examId"=>$examId,"pdf"=>array("commond"=>$commond,"res"=>$res,"code"=>$code),"htmlurl"=>$htmlurl))),
));
echo json_encode(array("status" => 1, "error" => "PDF创建失败!"));
exit;
}
}
if ($this->check_pdf($pdfpath)) {
echo json_encode(array("status" => 0, "error" => "","is_create"=>1,'exec_rs'=>json_encode($res)));
exit;
} else {
echo json_encode(array("status" => 1, "error" => "文件尚未生成!",'exec_rs'=>json_encode($res)));
exit;
}
}
private function check_pdf($pdf_path) {
if (substr($pdf_path, strlen($pdf_path) - 4, 4) == ".pdf") {
if (file_exists($pdf_path)) {
return true;
}
}
return false;
}
/**
* 班级排名得分率人数等数据
* @param $examId
* @param $ptrInfo
* @param $paperScore
* @param $preExamId
* @param $prePtrInfo
* @param $prePaperScore
* @return array
*/
private function getClassAnalyse($examId,&$ptrInfo,$paperScore,$preExamId,&$prePtrInfo,$prePaperScore,&$stuIdsArr,&$preStuIdsArr){
$result = array();
$gradePerson = $classPerson = 0;//参考人数
$gradeAbsentPerson = $classAbsentPerson = 0;//缺考人数
$gradeOrder = $classOrder = 0; //排名
$gradeAvgScore = $classAvgScore = 0; //平均分
$gradeScoreRate = $classScoreRate = 0; //得分率
$gradeFineRate = $classFineRate = 0; //优秀率 80%
$gradePassRate = $classPassRate = 0; //合格率 60%
$gradeLowRate = $classLowRate = 0; //低分率 30%
$angData = array(
'class_num' => 0,//班级数量
'order' => 0,
'absent_person' => 0,
'exam_person' => 0,
'avg_score' => 0,
'score_rate' => 0,
'fine_rate' => 0,
'pass_rate' => 0,
'low_rate' => 0,
);
$result['grade'] = $result['class'] = $angData;
$gradeScoring = $classScoring = array();
$gradeScoringSum = array();//年级中每个考试的得分和
// $classScoringSum = 0;//考试得分和
$gradeStuScoringRate = $classStuScoringRate = array();//学生得分率
foreach($ptrInfo as $value){
$stuIds = isset($stuIdsArr[$value['exam_id']])?$stuIdsArr[$value['exam_id']]:array();
if(!isset($gradeScoringSum[$value['exam_id']])){
$gradeScoringSum[$value['exam_id']] = 0;
}
if(inArray($value['student_id'],$stuIds)){
$gradeScoringSum[$value['exam_id']] += $value['scoring'];
$gradeScoring[] = $value['scoring'];
$gradeStuScoringRate[] = round($value['scoring']/$paperScore,4)*100;
$gradePerson++;
}
if(!inArray($value['student_id'],$stuIds)){
$gradeAbsentPerson++;
}
if($examId == $value['exam_id']){
if(inArray($value['student_id'],$stuIds)){
// $classScoringSum += $value['scoring'];
$classScoring[] = $value['scoring'];
$classStuScoringRate[] = round($value['scoring']/$paperScore,4)*100;
$classPerson++;
}
if(!inArray($value['student_id'],$stuIds)){
$classAbsentPerson++;
}
}
}
unset($ptrInfo);
$result['class']['class_num'] = count($gradeScoringSum);
$result['grade']['exam_person'] = $gradePerson;
$result['grade']['absent_person'] = $gradeAbsentPerson;
$result['class']['exam_person'] = $classPerson;
$result['class']['absent_person'] = $classAbsentPerson;
//排名
if($gradeScoringSum){
$scoringArr = array();
foreach($gradeScoringSum as $eId => $scoring){
$stuCount = isset($stuIdsArr[$eId])?count($stuIdsArr[$eId]):0;
if($stuCount){
$scoringArr[$eId] = round($scoring/$stuCount,2);
}
}
if(isset($scoringArr[$examId])){
$classOrder = $this->getOrder($scoringArr[$examId],$scoringArr);
}else{
$classOrder = 0;
}
}
$result['class']['order'] = $classOrder;
//平均分,得分率
$count = count($gradeScoring);
if($count > 0){
$gradeAvgScore = round(array_sum($gradeScoring)/$count,2);//平均分
$gradeScoreRate = round(array_sum($gradeScoring)/($paperScore*$count),4)*100;//得分率
}else{
$gradeAvgScore = 0;
$gradeScoreRate = 0;
}
$result['grade']['avg_score'] = $gradeAvgScore;
$result['grade']['score_rate'] = $gradeScoreRate;
$count = count($classScoring);
if($count > 0){
$classAvgScore = round(array_sum($classScoring)/$count,2);
$classScoreRate = round(array_sum($classScoring)/($paperScore*$count),4)*100;//得分率
}else{
$classAvgScore = 0;
$classScoreRate = 0;
}
$result['class']['avg_score'] = $classAvgScore;
$result['class']['score_rate'] = $classScoreRate;
//优秀率,合格率,低分率
// $gradeFineRate = $classFineRate = 0; //优秀率 85%
// $gradePassRate = $classPassRate = 0; //合格率 60%
// $gradeLowRate = $classLowRate = 0; //低分率 30%
$tempFineNum = $tempPassNum = $tempLowNum = 0;
$rateCount = count($gradeStuScoringRate);
foreach($gradeStuScoringRate as $scoringRate){
if($scoringRate >= 85){
$tempFineNum++;
}
if($scoringRate >= 60){
$tempPassNum++;
}
if($scoringRate <= 30){
$tempLowNum++;
}
}
$gradeFineRate = round($tempFineNum/$rateCount,4) * 100;
$gradePassRate = round($tempPassNum/$rateCount,4) * 100;
$gradeLowRate = round($tempLowNum/$rateCount,4) * 100;
$result['grade']['fine_rate'] = $gradeFineRate;
$result['grade']['pass_rate'] = $gradePassRate;
$result['grade']['low_rate'] = $gradeLowRate;
$tempFineNum = $tempPassNum = $tempLowNum = 0;
$rateCount = count($classStuScoringRate);
foreach($classStuScoringRate as $scoringRate){
if($scoringRate >= 85){
$tempFineNum++;
}
if($scoringRate >= 60){
$tempPassNum++;
}
if($scoringRate <= 30){
$tempLowNum++;
}
}
$classFineRate = round($tempFineNum/$rateCount,4) * 100;
$classPassRate = round($tempPassNum/$rateCount,4) * 100;
$classLowRate = round($tempLowNum/$rateCount,4) * 100;
$result['class']['fine_rate'] = $classFineRate;
$result['class']['pass_rate'] = $classPassRate;
$result['class']['low_rate'] = $classLowRate;
/**************** 提升数据 ******************/
$result['class']['order_increase'] = 0;
$result['class']['rate_increase'] = 0;
$result['class']['fine_rate_increase'] = 0;
if($prePtrInfo){
$preGradeScoringSum = array();
$preClassScoringSum = 0;
$preClassScoring = array();
if($prePtrInfo){
foreach($prePtrInfo as $value){
$stuIds = isset($preStuIdsArr[$value['exam_id']])?$preStuIdsArr[$value['exam_id']]:array();
if(!isset($preGradeScoringSum[$value['exam_id']])){
$preGradeScoringSum[$value['exam_id']] = 0;
}
if(inArray($value['student_id'],$stuIds)){
$preGradeScoringSum[$value['exam_id']] += $value['scoring'];
}
if($preExamId == $value['exam_id']){
if(inArray($value['student_id'],$stuIds)){
$preClassScoringSum += $value['scoring'];
$preClassScoring[] = $value['scoring'];
$preClassStuScoringRate[] = round($value['scoring']/$prePaperScore,4)*100;
}
}
}
}
//上一次考试排名
if($gradeScoringSum){
$scoringArr = array();
foreach($preGradeScoringSum as $eId => $scoring){
$stuCount = isset($preStuIdsArr[$eId])?count($preStuIdsArr[$eId]):0;
if($stuCount){
$scoringArr[$eId] = round($scoring/$stuCount,2);
}
}
if(isset($scoringArr[$preExamId])){
$preClassOrder = $this->getOrder($scoringArr[$preExamId],$scoringArr);
}else{
$preClassOrder = 0;
}
$result['class']['order_increase'] = -($classOrder - $preClassOrder);
}
$count = count($preClassScoring);
if($count > 0){
$preClassScoreRate = round(array_sum($preClassScoring)/($prePaperScore*$count),4)*100;//得分率
$result['class']['rate_increase'] = $classScoreRate - $preClassScoreRate;
}
$tempFineNum = 0;
$rateCount = count($preClassStuScoringRate);
foreach($preClassStuScoringRate as $scoringRate){
if($scoringRate >= 85){
$tempFineNum++;
}
}
$preClassFineRate = round($tempFineNum/$rateCount,4) * 100;
$result['class']['fine_rate_increase'] = $classFineRate - $preClassFineRate;
}
return $result;
}
/**
* 大幅进步,大幅退步,前5名和后5名
* @param $examId
* @param $ptrInfo
* @param $paperScore
* @param $preExamId
* @param $prePtrInfo
* @param $prePaperScore
*/
private function getLargeOrder($examId,&$ptrInfo,$preExamId,&$prePtrInfo,&$stuIdsArr,&$preStuIdsArr){
$result = array();
$stuOrderArr = $this->getStudentOrder($examId,$ptrInfo,$stuIdsArr);
$diffNum = ceil(count($stuOrderArr)*0.2);
if($prePtrInfo){
$preStuOrderArr = $this->getStudentOrder($preExamId,$prePtrInfo,$preStuIdsArr);
}else{
$preStuOrderArr = array();
}
if($preStuOrderArr){
$interOrderArr = array_intersect_key($stuOrderArr,$preStuOrderArr);
if(!$interOrderArr){
$interOrderArr = $stuOrderArr;
}
}else{
$interOrderArr = array();
}
//大幅进步,退步
$increaseArr = $reduceArr = array();
$stuDiffOrder = array();
if($interOrderArr){
foreach($stuOrderArr as $stuId => $order){
if(isset($interOrderArr[$stuId]) && isset($preStuOrderArr[$stuId])){
$stuDiffOrder[$stuId] = -($order - $preStuOrderArr[$stuId]);
}else{
$stuDiffOrder[$stuId] = 0;
}
}
arsort($stuDiffOrder);
foreach($stuDiffOrder as $stuId => $num){
if($num >= $diffNum){
$increaseArr[] = $stuId;
}
}
$increaseArr = array_slice($increaseArr,0,5,true);
asort($stuDiffOrder);
foreach($stuDiffOrder as $stuId => $num){
if($num <= -$diffNum){
$reduceArr[] = $stuId;
}
}
$reduceArr = array_slice($reduceArr,0,5,true);
}else{
$increaseArr = array_slice($stuOrderArr,0,5,true);
$reduceArr = array();
}
$result['stu_diff_order'] = $stuDiffOrder;
$result['stu_order'] = $stuOrderArr;
$result['increase_stu'] = $increaseArr;
$result['reduce_stu'] = $reduceArr;
//前5名和后5名
$font5 = $back5 = array();
$i = 1;
$fonrt5_order = array();
foreach($stuOrderArr as $stuId => $order){
if($i <= 5){
$font5[] = $stuId;
$fonrt5_order[] = $order;
}else{
break;
}
$i++;
}
$result['font_five'] = $font5;
$i = 1;
//删除前5排名
$_stuOrderArr = $stuOrderArr;
foreach($_stuOrderArr as $k => $order){
if(in_array($order,$fonrt5_order)){
unset($_stuOrderArr[$k]);
}
}
arsort($_stuOrderArr);
foreach($_stuOrderArr as $stuId => $order){
if($i <= 5){
$back5[] = $stuId;
}else{
break;
}
$i++;
}
$result['back_five'] = $back5;
//学生名称
$stuInfoObj = new SStudentInfo();
$stuName = $stuInfoObj->getStudentNames(array_keys($stuOrderArr));
$result['stu_name'] = $stuName;
unset($stuOrderArr);
return $result;
}
/**
* 考试情况分析
* @param $stuRs
* @param $topicScore
* @param $topicNo
* @return array
*/
private function getExamAnalyse(&$stuRs,$paperTopicScore,$topicNo,$paperId,$topicRelLarge){
$result = array();
$stuTopicWrong = array();//题答错人数
$topicScoreRate = array();//题得分率
$topicScoring = array();//题得分
$topicScore= array();//题分
foreach($stuRs as $stuId => $rs){
foreach($rs as $v){
if($paperId == $v['paper_id']){
if(isset($topicRelLarge[$v['topic_id']]) && $topicRelLarge[$v['topic_id']] > 0){
$t_id = $topicRelLarge[$v['topic_id']];
}else{
$t_id = $v['topic_id'];
}
$t_score = isset($paperTopicScore[$t_id])?$paperTopicScore[$t_id]:0;
if(!isset($topicScoring[$t_id])){
$topicScoring[$t_id] = 0;
}
$topicScoring[$t_id] += $v['scoring'];
if(!isset($topicScore[$t_id])){
$topicScore[$t_id] = 0;
}
$topicScore[$t_id] += $t_score;
if(!isset($stuTopicWrong[$t_id])){
$stuTopicWrong[$t_id] = array();
}
if($t_score != $v['scoring']){
$stuTopicWrong[$t_id][] = $stuId;
}
}
}
}
//题得分率
foreach($topicScoring as $topicId => $scoring){
if(isset($topicScore[$topicId]) && $topicScore[$topicId] > 0){
$topicScoreRate[$topicId] = round($scoring/$topicScore[$topicId],4) * 100;
}else{
$topicScoreRate[$topicId] = 0;
}
}
unset($topicScoring);
//答错人数
if($stuTopicWrong){
foreach($stuTopicWrong as $key => $stuIds){
$stuIds = array_unique($stuIds);
$stuTopicWrong[$key] = count($stuIds);
}
}
$result['stu_topic_wrong'] = $stuTopicWrong;
$result['topic_score_rate'] = $topicScoreRate;
$result['topic_no'] = $topicNo;
unset($stuTopicWrong);
unset($topicScoreRate);
unset($topicNo);
unset($topicScore);
return $result;
}
//题类型掌握情况
private function getTopicTypeAnaly(&$stuRs,$topicScore,$topicNo,$paperId,$topicLogicType,$topicRelLarge){
$result = array();
$gradeRate = $classRate = array();//班级和年级得分率
$stuTypeWrong = array();//题型答错人数
$typeTopicNo = array();//题型对应的题号
$typeMasterDegree = array();//题型掌握水平
$typeName = array('1'=>'选择题','11'=>'不定项选择题','5'=>'填空题','7'=>'解答题','17'=>'选做解答题');
$logicTypeName = getSubjectTopicType(Yii::app()->session['session_duoxueke_subject_id']);
$gradeScoreArr = $classScoreArr = array();
$gradeScoring = $classScoring = array();
$typeNameArr = array();
foreach($stuRs as $stuId => $rs){
foreach ($rs as $k => $value){
if(isset($topicLogicType[$value['type']]) && $topicLogicType[$value['type']] > 0){
$type = $topicLogicType[$value['type']];
$typeArr = explode('_',$type);
if(count($typeArr) > 1){
$type = $typeArr[0];
}
$typeNameArr[$type] = isset($logicTypeName[$type])?$logicTypeName[$type]:'';
}else{
$type = $value['type'];
$typeNameArr[$type] = isset($typeName[$type])?$typeName[$type]:'';
}
if(!isset($gradeScoring[$type])){
$gradeScoring[$type] = array();
}
$gradeScoring[$type][] = $value['scoring'];
if(!isset($gradeScoreArr[$type])){
$gradeScoreArr[$type] = 0;
}
$gradeScoreArr[$type] += isset($topicScore[$value['topic_id']])?$topicScore[$value['topic_id']]:0;
if($paperId == $value['paper_id']){
if(!isset($classScoring[$type])){
$classScoring[$type] = 0;
}
$classScoring[$type] += $value['scoring'];
if(!isset($classScoreArr[$type])){
$classScoreArr[$type] = 0;
}
$classScoreArr[$type] += isset($topicScore[$value['topic_id']])?$topicScore[$value['topic_id']]:0;
if(!isset($stuTypeWrong[$type])){
$stuTypeWrong[$type] = 0;
}
if($value['is_right'] != 1){
$stuTypeWrong[$type]++;
}
if(!isset($typeTopicNo[$type])){
$typeTopicNo[$type] = array();
}
if(isset($topicNo[$value['topic_id']])){
$typeTopicNo[$type][] = $topicNo[$value['topic_id']];
}
}
}
}
//年级得分率
foreach($gradeScoring as $type => $scorings){
if(isset($gradeScoreArr[$type]) && $gradeScoreArr[$type]){
$gradeRate[$type] = round(array_sum($scorings)/$gradeScoreArr[$type],4) * 100;
}else{
$gradeRate[$type] = 0;
}
}
//班级得分率
foreach ($classScoring as $type => $scoring){
if(isset($classScoreArr[$type]) && $classScoreArr[$type] > 0){
$classRate[$type] = round($scoring/$classScoreArr[$type],4) * 100;
}else{
$classRate[$type] = 0;
}
}
//题型对应题号排序
foreach($typeTopicNo as $type => $nos){
asort($nos);
$typeTopicNo[$type] = array_unique($nos);
}
//题型掌握水平: 85%包括85%以上,5星;75%-85%,包括75%,4星。65%-75%,包括65%,3星;55%-65%,包括55%,2星;55%以下1星。
foreach($classRate as $type => $rate){
if($rate >= 85){
$typeMasterDegree[$type] = 5;
}elseif($rate < 85 && $rate >= 75){
$typeMasterDegree[$type] = 4;
}elseif($rate < 75 && $rate >= 65){
$typeMasterDegree[$type] = 3;
}elseif($rate < 65 && $rate >= 55){
$typeMasterDegree[$type] = 2;
}else{
$typeMasterDegree[$type] = 1;
}
}
$result['class_rate'] = $classRate;
$result['grade_rate'] = $gradeRate;
$result['stu_type_wrong'] = $stuTypeWrong;
$result['type_topic_no'] = $typeTopicNo;
$result['type_master_degree'] = $typeMasterDegree;
$result['type_name_arr'] = $typeNameArr;
return $result;
}
/**
* 试题年级和班级得分率,答对和答错人数
* @param $stuRs
* @param $topicScore
* @param $paperId
* @return array
*/
public function getTopicRateWrongPerson(&$stuRs,$topicScore,$paperId,&$stuIdsArr,$topicRelLarge){
$gradeRate = $classRate = array();//班级和年级得分率
$wrongStu = $rightStu = array();//答对答错人数
$stuNormalIds = array();
foreach($stuIdsArr as $stuIds){
$stuNormalIds = array_merge($stuNormalIds,$stuIds);
}
$gradeScoring = $classScoring = array();
$gradeScore = $classScore= array();
$doneTopicNum = array();//每题做题总人数
foreach($stuRs as $stuId => $rs){
if(!inArray($stuId,$stuNormalIds)){
continue;
}
foreach ($rs as $k => $value){
if(isset($topicRelLarge[$value['topic_id']]) && $topicRelLarge[$value['topic_id']] > 0){
$t_id = $topicRelLarge[$value['topic_id']];
}else{
$t_id = $value['topic_id'];
}
$t_score = isset($topicScore[$t_id])?$topicScore[$t_id]:0;
if(!isset($gradeScoring[$t_id])){
$gradeScoring[$t_id] = 0;
}
$gradeScoring[$t_id] += $value['scoring'];
if(!isset($gradeScore[$t_id])){
$gradeScore[$t_id] = 0;
}
$gradeScore[$t_id] += $t_score;
if($paperId == $value['paper_id']){
if(!isset($classScoring[$t_id])){
$classScoring[$t_id] = 0;
}
$classScoring[$t_id] += $value['scoring'];
if(!isset($classScore[$t_id])){
$classScore[$t_id] = 0;
}
$classScore[$t_id] += $t_score;
if(!isset($wrongStu[$t_id])){
$wrongStu[$t_id] = array();
}
if($t_score != $value['scoring']){
$wrongStu[$t_id][] = $stuId;
}
if(!isset($doneTopicNum[$t_id])){
$doneTopicNum[$t_id] = array();
}
$doneTopicNum[$t_id][] = $stuId;
}
}
}
//年级得分率
foreach($gradeScoring as $tId => $scorings){
if(isset($gradeScore[$tId]) && $gradeScore[$tId] > 0){
$gradeRate[$tId] = round($scorings/$gradeScore[$tId],4) * 100;
}else{
$gradeRate[$tId] = 0;
}
}
//班级得分率
foreach ($classScoring as $tId => $scoring){
if(isset($classScore[$tId]) && $classScore[$tId] > 0){
$classRate[$tId] = round($scoring/$classScore[$tId],4) * 100;
}else{
$classRate[$tId] = 0;
}
}
//答错人数
if($wrongStu){
foreach($wrongStu as $key => $stuIds){
$stuIds = array_unique($stuIds);
$wrongStu[$key] = count($stuIds);
if(isset($doneTopicNum[$key])){
$_stuIds = array_unique($doneTopicNum[$key]);
$rightStu[$key] = count($_stuIds) - $wrongStu[$key];
}
}
}
$result = array();
$result['grade_rate'] = $gradeRate;
$result['class_rate'] = $classRate;
$result['wrong_stu'] = $wrongStu;
$result['right_stu'] = $rightStu;
return $result;
}
/**
* 获取学生排名
* @param $examId
* @param $ptrInfo
* @return array
*/
private function getStudentOrder($examId,&$ptrInfo,&$stuIdsArr){
$stuOrderArr = array();
$stuScoring = array();
foreach($ptrInfo as $value){
if($examId == $value['exam_id']){
$stuIds = isset($stuIdsArr[$value['exam_id']])?$stuIdsArr[$value['exam_id']]:array();
if(inArray($value['student_id'],$stuIds)){
$stuScoring[$value['student_id']] = (int)$value['scoring'];
}
}
}
$scoringArr = array_values($stuScoring);
foreach($stuScoring as $stuId => $scoring){
$stuOrderArr[$stuId] = $this->getOrder((int)$scoring,$scoringArr);
}
if($stuOrderArr){
asort($stuOrderArr);
}
return $stuOrderArr;
}
/**
* 获取排名
* @param $ele
* @param $arr
* @return false|int|string
*/
private function getOrder($ele,$arr){
$orderRs = 0;
if($arr){
arsort($arr);
$arr = array_values($arr);
$index = array_search($ele,$arr);
$orderRs = $index + 1;
}
return $orderRs;
}
/**
* 整理题详情
* @param $allApiInfo
* @return mixed
* @throws CException
*/
public function getTopicDetail($topicBatches){
$optionIndex=array('A','B','C','D','E','F','G','H','I','J','K');
$topicDetails=array();
foreach ($topicBatches AS $topic) {
$topic=(object)$topic;
$type = $topic->type_id;
6 == $type && $type =5; //6表示多空题,多空题也是5
$topic->id = (string)$topic->id;
$topicDetails[$topic->id]=array();
$topicDetails[$topic->id]['is_large_topic']=isset($topic->is_large_topic)?$topic->is_large_topic:0;
$topicDetails[$topic->id]['type']=$type;
$topicDetails[$topic->id]['subject_id'] = $topic->subject_id;
$topicDetails[$topic->id]['methods']='';//考点
$topicDetails[$topic->id]['method_id_arr']='';//考点id数组
$topicDetails[$topic->id]['kps']='';//知识点
$topicDetails[$topic->id]['queBody'] =$this->topicProcess($topic->title);//题目详情
$topicDetails[$topic->id]['options']='';
$topicDetails[$topic->id]['parse_video_qrcode'] = isset($topic->parse_video_qrcode)?$topic->parse_video_qrcode:'';
$topicDetails[$topic->id]['answer']=''; //每题的正确答案
$topicDetails[$topic->id]['analysis']=$this->topicProcess($topic->parse_content);//答题解析
$topicDetails[$topic->id]['teacher_tips']=$this->topicProcess($topic->teacher_tips);//名师点评
$topicDetails[$topic->id]['difficulty_degree'] = isset($topic->difficulty_degree)?$topic->difficulty_degree:null;
$topicDetails[$topic->id]['difficulty'] = $topic->difficulty;
$_methods = array();
$_method_id_arr = array();
$_method_names = array();
if ($topic->specials) {
foreach ($topic->specials AS $_method) {
$_method = (object)$_method;
if ($_method->method_name) {
$_methods[] = $_method->method_name;
}
if (isset($_method->method_id)) {
$_method_id_arr[] = $_method->method_id;
}
if(isset($_method->method_id) && isset($_method->method_name)){
$_method_names[$_method->method_id] = $_method->method_name;
}
}
$topicDetails[$topic->id]['methods']=implode('|', array_unique($_methods));//考点
$topicDetails[$topic->id]['method_id_arr'] = $_method_id_arr;
$topicDetails[$topic->id]['method_names'] = $_method_names;
}
$_kps = array();
if (isset($topic->kps) && $topic->kps) {
foreach ($topic->kps as $_kp) {
$_kp = (object)$_kp;
if ($_kp->kp_name) {
$_kps[$_kp->kp_id] = $_kp->kp_name;
}
}
$topicDetails[$topic->id]['kps'] = $_kps;//考点
}
if($topic->type_id==1 || $topic->type_id==11){ //选择题有选项
if ($topic->items) {
if (isset($topic->items[0])) {
$topic->items[0] = (object)$topic->items[0];
if (isset($topic->items[0]->options)) {
$options = $topic->items[0]->options;
if ($options) {
$_tmp_options = array();
$correct_answer_arr = array();
foreach ($options AS $_optionIndex => $_option) {
$_option = (object)$_option;
$_tmp_options[$_optionIndex]=$this->topicProcess($_option->option_content);
if($_option->option_correct){
$correct_answer_arr[] = $this->topicProcess($optionIndex[$_optionIndex]);
// $topicDetails[$topic->id]['answer']=topicProcess($optionIndex[$_optionIndex]);
}
}
$topicDetails[$topic->id]['answer'] = implode(',',$correct_answer_arr);
$_list_type= (int)$topic->items[0]->list_type;
$topicDetails[$topic->id]['options'] = $this->option_process($_tmp_options,$_list_type);
}
}
}
}
}else{
if ($topic->items) {
if (isset($topic->items[0])) {
$topic->items[0] = (object)$topic->items[0];
if (isset($topic->items[0]->options)) {
$options = $topic->items[0]->options;
if ($options) {
$_answer = '';
foreach ($options as $v) {
$_option = (object)$v;
if (trim($_answer) != ''){
$_answer .= ' ; ';
}
$_answer .= $_option->option_content;
}
$topicDetails[$topic->id]['answer']=$this->topicProcess($_answer);
}
}
}
}
}
//大题的小题
$topicDetails[$topic->id]['slave']=array();
if(isset($topic->slave) && $topic->slave){
$topicDetails[$topic->id]['answer'] = array();
foreach($topic->slave as $slave){
$slave = (object)$slave;
$_slave = array();
$_slave['topic_slave_id']=(string)$slave->topic_slave_id;
$_slave['type']=$slave->topic_type;
$_slave['methods']='';//考点
$_slave['method_id_arr']='';//考点id数组
$_slave['kps']='';//知识点
$_slave['queBody'] =$this->topicProcess($slave->title);//题目详情
$_slave['options']='';
$_slave['answer']=''; //每题的正确答案
// $_slave['analysis']=topicProcess($slave->parse_content);//答题解析
// $_slave['teacher_tips']=topicProcess($slave->teacher_tips);//名师点评
$_slave['difficulty_degree'] = isset($slave->difficulty_degree)?$slave->difficulty_degree:null;
$_slave['difficulty'] = $slave->difficulty;
if($slave->topic_type==1 || $slave->topic_type==11){ //选择题有选项
if ($slave->items) {
if (isset($slave->items)) {
$slave->items = (object)$slave->items;
if (isset($slave->items->options)) {
$options = (object)$slave->items->options;
if ($options) {
$_tmp_options = array();
$correct_answer_arr = array();
foreach ($options AS $_optionIndex => $_option) {
$_option = (object)$_option;
$_tmp_options[$_optionIndex]=$this->topicProcess($_option->option_content);
if($_option->option_correct){
$correct_answer_arr[] = $this->topicProcess($optionIndex[$_optionIndex]);
// $topicDetails[$slave->id]['answer']=topicProcess($optionIndex[$_optionIndex]);
}
}
$_slave['answer'] = implode(',',$correct_answer_arr);
$topicDetails[$topic->id]['answer'][(string)$slave->topic_slave_id] = $_slave['answer'];
$_list_type= (int)$slave->items->list_type;
$_slave['options'] = $this->option_process($_tmp_options,$_list_type);
}
}
}
}
}else{
if ($slave->items) {
if (isset($slave->items)) {
$slave->items = (object)$slave->items;
if (isset($slave->items->options)) {
$options = (object)$slave->items->options;
if ($options) {
$_answer = '';
foreach ($options as $v) {
$_option = (object)$v;
if (trim($_answer) != ''){
$_answer .= ' ; ';
}
$_answer .= $_option->option_content;
}
$_slave['answer'] = $this->topicProcess($_answer);
$topicDetails[$topic->id]['answer'][(string)$slave->topic_slave_id] = $_slave['answer'];
}
}
}
}
}
$topicDetails[$topic->id]['slave'][] = $_slave;
}
}
}
return $topicDetails;
}
/**
*对选项的处理
* @param $options
* @param $list_type
* @return string
*/
public function option_process($options,$list_type){
$option_index=array('A','B','C','D','E','F','G','H','I','J');
if($list_type==0) { //纵向排列,即1行1个
// $option_str="
/','',$html);
$html=preg_replace('/<\/p>/','',$html);
$html=preg_replace('/
/','',$html);
$html=preg_replace('//','',$html);
$html=preg_replace('/<\/big>/','',$html);
$html=str_replace(" ",'',$html);
return $html;
}
public function img_process($img){
$widthArr = array();
$heightArr = array();
$width = '';
$height = '';
preg_match('/[\s\'"]width\s*:\s*(\d+\.*\d*)\s*([a-zA-Z]+)*/si',$img,$widthArr);
if ($widthArr) {
$width = $this->length_process($widthArr);
} else {
preg_match('/[\s\'"]width\s*=\s*[\'"]\s*(\d+\.*\d*)\s*([a-zA-Z]+)*;?[\'"]/si',$img,$widthArr);
if($widthArr) {
$width = $this->length_process($widthArr);
}
}
if ($width) {
$width = "width=".$width;
}
preg_match('/[\s\'"]height\s*:\s*(\d+\.*\d*)\s*([a-zA-Z]+)*/si',$img,$heightArr);
if ($heightArr) {
$height = $this->length_process($heightArr);
} else {
preg_match('/[\s\'"]height\s*=\s*[\'"]\s*(\d+\.*\d*)\s*([a-zA-Z]+)*;?[\'"]/si',$img,$heightArr);
if($heightArr) {
$height = $this->length_process($heightArr);
}
}
if ($height) {
$height = "height=".$height;
}
$return_img = preg_replace('/]*[\s]+(src[\s]*=[\s]*(([\"]([^\"]*)[\"])|([\']([^\']*)[\'])|([^\s]*)))([^>]*>)/si',"",$img);
return $return_img;
}
public function length_process($length_arr){
$units = array(
'in' => 96,
'cm' => 28,
'mm' => 2.8,
'pt' => 1.33,
'pc' => 12,
);
$length = 0.6*$length_arr[1];
$unit_keys = array_keys($units);
if (isset($length_arr[2])) {
//将直接连接单位改为 单位换算
if(in_array($length_arr[2],$unit_keys)){
$length = $length*$units[$length_arr[2]];
}else {
$length .= $length_arr[2];
}
}
return $length;
}
/********************* 第三方教学宝结束 *********************/
//导入线下考试成绩
public function actionImport(){
$examGroupId=Req::get('examgroupid');
if (Yii::app()->request->getIsPostRequest()){
ini_set('memory_limit','300M');
$examGroupId=Req::post('examgroupid');
$card=Req::post('card');
if(!$examGroupId){
Yii::app()->jump->error('请先创建考试');
}
if($card==1){
$filed='student_card';
}elseif($card==2){
$filed='school_student_card';
}else{
Yii::app()->jump->error('考号类型不正确');
}
$uploader = new Uploader("upload/tmpDir/UploadStudentScore/{$this->schoolId}/");
$uploader->allowTypes = array('xls','xlsx');
$uploader->fieldsMappings = array("exname" => array(0 => $this->schoolId));
$file = $uploader->act();
$file = Arr::current(Arr::current($file));
if(!$file || !isset($file["error"]))
Yii::app()->jump->error('请选择上传的Excel!');
if($file["error"] != 0){
switch($file["error"]){
case 2001:
Yii::app()->jump->error('文件类型不符');
break;
case 2002:
Yii::app()->jump->error('文件大小超出允许范围');
break;
default:
Yii::app()->jump->error('上传失败');
break;
}
}
$result = true;
$inputFileName = $file["src"];
$semesterId = $this->semesterId;
Yii::import('application.extensions.*');
require_once('phpexcel/PHPExcel/IOFactory.php');
// 读取Excel文档
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
//FIXME 2019-12-02
@unlink($file["src"]);
// 去掉导航
unset($sheetData[1]);
if(!$sheetData){
Yii::app()->jump->error('成绩数据不能为空');
}
$sheetData=array_values($sheetData);
//读取考试信息
$exam = $this->sConn->createCommand("SELECT e.exam_id,e.tpl_data,p.paper_id FROM `exam` e join paper p on e.exam_id=p.exam_id where e.exam_group_id='".$examGroupId."'")->queryAll();
if(!$exam){
Yii::app()->jump->error('考试ID不正确,请从考试列表点击上传成绩');
}
$tpl_data=json_decode($exam[0]['tpl_data'],true);
if(!$tpl_data || !isset($tpl_data['totals']) || !isset($tpl_data['new_items'])){
Yii::app()->jump->error('考试数据错误,请检查考试数据');
}
$checkData=$sheetData[0]; //提取一条数据用与校验
if(empty($checkData['A']) || empty($checkData['B']) || empty($checkData['C'])){
Yii::app()->jump->error('文件格式不正确,请检查后上传');
}
if(count($checkData)-$tpl_data['totals']!=3){
Yii::app()->jump->error('成绩对应题目数量与考试设置不一致,请检查后上传');
}
//取得试卷topic
$paperIds=array();
foreach ($exam as $value){
$paperIds[]=$value['paper_id'];
}
$paper_topic_relation=$this->sConn->createCommand("select `paper_id`,`topic_id`,`no`,`score` from `paper_topic_relation` where paper_id='".$paperIds[0]."'")->queryAll();
if(!$paper_topic_relation){
Yii::app()->jump->error('试卷创建不成功,请重新检查');
}
$paper_topic_rs=array();
foreach ($tpl_data['new_items'] as $key=>$value){
$paper_topic_rs[$paper_topic_relation[$key]['topic_id']]=$value;
$tpl_data['new_items'][$key]['topic_id']=$paper_topic_relation[$key]['topic_id'];
}
$studentCardAll=array();
//更新student_paper_relation ,新增student_paper_topic_rs
$sql='INSERT INTO `student_paper_topic_rs` (`id`,`student_id`,`paper_id`,`topic_id`,`type`,`scoring`,`is_right`)VALUE ';
$transaction = $this->sConn->beginTransaction();
try{
$error=array();
$valueSql=array();
foreach ($sheetData as $item){
$studentCard=$item['B'];
$studentName=$item['A'];
$studentClass=$item['C'];
if(!$studentCard || !$studentName || !$studentClass){
$error[]='学生信息缺失,姓名:'.$studentName.',准考证号:'.$studentCard.',学生班级:'.$studentClass;
continue;
}
if(in_array($studentCard,$studentCardAll)){
$error[]='准考证号重复:'.$studentCard;
continue;
}
$studentCardAll[]=$studentCard;
$StudentPaperRelation=$this->sConn->createCommand("select student_id,paper_id from `student_paper_relation` where ".$filed."='".$studentCard."' and paper_id in(".implode(',',$paperIds).")")->queryRow();
if(!$StudentPaperRelation){
$error[]='学生没有参加本次考试 :'.$studentCard;
continue;
}
$studentId=$StudentPaperRelation['student_id'];
$paper_id=$StudentPaperRelation['paper_id'];
$StudentInfo=$this->sConn->createCommand("select realname from `student_info` where student_id='".$studentId."' ")->queryRow();
if(!$StudentInfo || $StudentInfo['realname']!=$studentName){
$error[]='学生姓名和准考证号不对应 :'.$studentCard;
continue;
}
$this->sConn->createCommand("delete from `student_paper_topic_rs` where student_id='".$studentId."' and paper_id='".$paper_id."' ")->execute();
$topicScoreData=$item;
unset($topicScoreData['A']);
unset($topicScoreData['B']);
unset($topicScoreData['C']);
$topicScoreData=array_values($topicScoreData);
$score_get=0;
$lost_score=0;
foreach($topicScoreData as $key=> $ts){
if(!$ts){
$ts=0;
}
$score=0;
$is_right=1;
if($ts>=$tpl_data['new_items'][$key]['score']){
$score=$tpl_data['new_items'][$key]['score'];
}else{
$score=$ts;
$lost_score+=($tpl_data['new_items'][$key]['score']-$ts);
$is_right=0;
}
if(!$score){
$score=0;
}
$score_get+=$score;
$topic_id= $tpl_data['new_items'][$key]['topic_id'];
// $uuid = $this->sConn->createCommand("select RIGHT(UUID_SHORT(), 20)")->queryAll();
// $uuid = current(current($uuid));
$uuid =getUniqueId($this->schoolId);
$valueSql[]=' ('.$uuid.','.$studentId.','.$paper_id.','.$topic_id.',1,'.$score.','.$is_right.') ';
}
$updateSql=" update `student_paper_relation` set complete_count='".$tpl_data['totals']."',`scoring`='".$score_get."',`lost_score`='".$lost_score."',is_feedback=1,feedback_time='".time()."',is_complete=1";
$updateSql.=" where student_id='".$studentId."' and paper_id='".$paper_id."' ";
$this->sConn->createCommand($updateSql)->execute();
}
if($valueSql){
$sql.=implode(',',$valueSql);
$this->sConn->createCommand($sql)->execute();
}
Exam::model()->updateAll(array('status'=>1,'upload_status'=>2,'complete_time'=>time()),'exam_group_id=:exam_group_id',array(':exam_group_id'=>$examGroupId));
ExamGroup::model()->updateAll(array('mark_status'=>1,'status'=>2,'upload_status'=>1,'import_score_type'=>2),'exam_group_id=:exam_group_id',array(':exam_group_id'=>$examGroupId));
$transaction->commit();
$kafkaData=array(
'schoolId'=>$this->schoolId,
'examGroupId'=>$examGroupId,
'generateTime'=>time()*1000
);
sendDataToKafka("zsyte-academic-offline-generate-report",$kafkaData);
if($error){
// Yii::app()->jump->error('导入成功,有部分学生成绩没有导入:'.implode(',',$error));
$this->render('import_underline_error',array('data'=>$error));
}else{
Yii::app()->jump->error('导入成功');
}
} catch (Exception $e) {
//如果操作失败, 数据回滚
$transaction->rollback();
Yii::app()->jump->error('成绩导入失败,请检查后重新');
}
}else{
$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId,1);
$data['subject']=$subject_exam_data;
$data['exam_group_id']=$examGroupId;
$data['printType']=2;
$this->render('score_import',$data);
}
}
//编辑第三方线下考试
public function actionEditThirdUnderLine(){
$examGroupId=Req::get('examgroupid'); //统考Id
if(!$examGroupId){
Yii::app()->jump->error('请从考试列表进入编辑');
}
$exam=new SExam();
$sql=" select e.exam_id,e.tpl_data,p.paper_id,e.name,eg.teacher_id,e.class_id,e.type from exam_group eg ";
$sql .=" join exam e on eg.exam_group_id=e.exam_group_id ";
$sql.=" join paper p on p.exam_id=e.exam_id ";
$sql.=" where e.exam_group_id=".$examGroupId;
$examlist = $this->sConn->createCommand($sql)->queryAll();
if(!$examlist){
Yii::app()->jump->error('考试ID不正确');
}
$tpl_data=json_decode($examlist[0]['tpl_data'],true);
$paperInfo=array(
'paper_name'=>$examlist[0]['name'],
'type' =>$examlist[0]['type'],
'teacher_id'=>$examlist[0]['teacher_id'],
'exam_date'=>$tpl_data['examDate'],
);
foreach ($examlist as $value){
$paperInfo['class_id'][]=$value['class_id'];
}
//处理题型
$topic_type_data=array();
if(isset($tpl_data['new_items'])){
foreach($tpl_data['new_items'] as $item){
if(isset($topic_type_data[$item['logic_type']]['count'])){
$topic_type_data[$item['logic_type']]['count']++;
}else{
$topic_type_data[$item['logic_type']]['count']=1;
}
$topic_type_data[$item['logic_type']]['score'][]=$item['score'];
if(isset($topic_type_data[$item['logic_type']]['total_score'])){
$topic_type_data[$item['logic_type']]['total_score']+=$item['score'];
}else{
$topic_type_data[$item['logic_type']]['total_score']=$item['score'];
}
}
}
$paperInfo['topic']=$topic_type_data;
$printType = Req::get("type");
if (empty($printType)) {
$printType = '2';
$printTypeData = 0;
} else {
switch ($printType) {
case "2":
$printTypeData = 0;
break;
case "wtb":
$printTypeData = 1;
break;
case "isp":
$printTypeData = 2;
break;
case "studytrend":
$printTypeData = 3;
break;
default:
$printTypeData = null;
break;
}
}
$data['printType'] = $printType;
// $coach_id = Yii::app()->session['coachInfo']['coach_id'];
// $semester_id = Yii::app()->session['session_semester_id'];
$coach_id = $this->coachId;
$semester_id = $this->semesterId;
// $teacher_data = Teacher::model()->findAll('coach_id=:coach_id',array(':coach_id'=>$coach_id));
$criteria = new CDbCriteria();
if(Yii::app()->session['session_duoxueke_subject_id']==3)
{
$criteria->addInCondition('subjects',$this->mathSubjectId);
}else
{
if(Yii::app()->session['session_duoxueke_subject_id']==18){
$criteria->addInCondition('subjects',array(12,13,14));
}
if(Yii::app()->session['session_duoxueke_subject_id']==19){
$criteria->addInCondition('subjects',array(15,16,17));
}
if(Yii::app()->session['session_duoxueke_subject_id']!=18 && Yii::app()->session['session_duoxueke_subject_id']!=19){
$criteria->addCondition('subjects = '.Yii::app()->session['session_duoxueke_subject_id']);
}
}
$criteria->addCondition('status = 0');
$teacher_data = Teacher::model()->findAll($criteria);
unset($criteria);
$teacher_arr = array();
if($teacher_data){
$i = 0;
foreach($teacher_data as $v){
$teacher_arr[$i]['teacher_id'] = $v->teacher_id;
$teacher_arr[$i]['teacher_name'] = $v->teacher_name;
$i++;
}
}
$data['teacher_arr'] = $teacher_arr;
if(isset($this->schoolInfo->use_zhixue) && !empty($this->schoolInfo->use_zhixue))
{
$data["use_zhixue"] = $this->schoolInfo->use_zhixue;
}else
{
$data["use_zhixue"] = 0;
}
$teacherSubjectIds = array(3, 6);
$teacherSubjectNames = array(3 => '高一高二专用', 6 => '高三专用');
$teacherSubjectMaterialIds = array();
$teacherSubjectMaterialNames = array();
foreach ($teacherSubjectIds as $teacherSubjectId) {
$teacherSubjectMaterialIds[$teacherSubjectId] = array();
$teacherSubjectMaterialNames[$teacherSubjectId] = array();
$textbookTree = $this->apiPost('/textbook/tree', array(
'subjectId' => $teacherSubjectId,
'depth' => 3
));
if (! $textbookTree) {
$error[] = 'Brain textbook/tree error';
} elseif (isset($textbookTree->error)) {
$error[] = $textbookTree->error;
} else {
foreach ($textbookTree as $textbook) {
if (isset($textbook->modules)) {
foreach ($textbook->modules as $module) {
if (isset($module->chapters)) {
$teacherSubjectMaterialIds[$teacherSubjectId][] = $textbook->textbook_id;
$teacherSubjectMaterialNames[$teacherSubjectId][$textbook->textbook_id] = $textbook->textbook_name;
}
}
}
}
}
}
//
$data['teacherSubjectIds'] = $teacherSubjectIds;
$data['teacherSubjectNames'] = $teacherSubjectNames;
$data['teacherSubjectMaterialIds'] = $teacherSubjectMaterialIds;
$data['teacherSubjectMaterialNames'] = $teacherSubjectMaterialNames;
$subject_exam_data = $this->schoolManager->getxuekeStatus($this->semesterId,1);
$data['subject']=$subject_exam_data;
$data['examgroupid']=$examGroupId;
$data['tpl_data']=$tpl_data;
$data['printType']=2;
$data['paper']=$paperInfo;
$this->render('index_edit_underline',$data);
}
//导入线下考试成绩创建考试
public function actionCreatethirdunderline(){
$error = array();
$tplData = array();
$semesterId = $this->semesterId;
$examName = Req::post("examName");
$type = (int)Req::post("type");
$classIds = Req::post("classIds");
$paperType = (int)Req::post("paperType");
$teacherId = Req::post("teacherId");
$textbookId = Req::post("textbookId");
$subjectId = Req::post("subjectId");
$examDate = Req::post("examDate");
$ExamGroupId=Req::post('exam_group_id');
$topic_data=htmlspecialchars_decode(Req::post('topic_data'));
$tpl_index = $paperType;
$result=array('status'=>0);
if(!$topic_data){
$error[] = '请设置试题数据';
}
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($examName)){
$error[] = '请设置考试名称';
}
if ($type <= 0 || $type > 9) {
$error[] = '考试类型错误';
}
if(!in_array($paperType,array(0,1,2,1050))){
$error[] = '请选择正确的试卷类型';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($examDate)){
$error[] = '请指定考试时间';
}
if($error){
//Yii::app()->jump->error(implode(',',$error));
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}else{
$teacherName = Teacher ::model()->getTeacherName($teacherId);
if($teacherName){
$tplData['author'] = $teacherName;
$tplData['subjectId'] = $subjectId;
$tplData['textbookId'] = $textbookId;
$tplData['examDate'] = $examDate;
}
//处理试题信息组装tpl_data
$topic_data=json_decode($topic_data,true);
$topic_num=1;
$new_items=array();
$totals=0;
$total_score=0;
foreach ($topic_data as $datum){
$i=0;
$totals+=$datum['topic_count'];
$score=explode(',',$datum['topic_score']);
while ($datum['topic_count']>0){
if(!isset($score[$i])){
$error[]='分数设置不正确';
Yii::app()->jump->error(implode(',',$error));
}
$new_items[]=array(
'id'=>$topic_num,
'score'=>$score[$i],
'topic_type'=>7,
'logic_type'=>$datum['topic_type'],
);
$datum['topic_count']--;
$topic_num++;
$total_score+=$score[$i];
$i++;
}
}
$tplData['totals']=$totals;
$tplData['total_score']=$total_score;
$tplData['new_items']=$new_items;
$time = time();
$transaction = $this->sConn->beginTransaction();
try{
if(!$ExamGroupId){
// $newExamGroupId = $this->UUID_SHORT();
$newExamGroupId=getUniqueId($this->schoolId);
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`is_answersheet`,`is_third`,`import_score_type`) "
. "values (".$newExamGroupId.",".$teacherId.",0,0,1,2)";
$this->sConn->createCommand($sql)->execute();
}else{
//删除原exam,paper,paper_topic_relation,class_exam_printer,student_paper_relation
$sql=" select e.exam_id,e.tpl_data,p.paper_id,e.name,eg.teacher_id,e.class_id,e.type from exam_group eg ";
$sql .=" join exam e on eg.exam_group_id=e.exam_group_id ";
$sql.=" join paper p on p.exam_id=e.exam_id ";
$sql.=" where e.exam_group_id=".$ExamGroupId;
$examlist = $this->sConn->createCommand($sql)->queryAll();
if(!$examlist){
exit(json_encode(array('status'=>0,'msg'=>'考试ID不正确')));
}
$oldExamIds=array();
$oldPaperIds=array();
foreach($examlist as $item){
$oldExamIds[]=$item['exam_id'];
$oldPaperIds[]=$item['paper_id'];
}
if(!$oldExamIds || !$oldPaperIds){
exit(json_encode(array('status'=>0,'msg'=>'考试数据错误')));
}
$this->sConn->createCommand("delete from exam where exam_id in(".implode(',',$oldExamIds).")")->execute();
$this->sConn->createCommand("delete from paper where paper_id in(".implode(',',$oldPaperIds).")")->execute();
$this->sConn->createCommand("delete from paper_topic_relation where paper_id in(".implode(',',$oldPaperIds).")")->execute();
$this->sConn->createCommand("delete from class_exam_printer where exam_id in(".implode(',',$oldExamIds).")")->execute();
$this->sConn->createCommand("delete from student_paper_relation where paper_id in(".implode(',',$oldPaperIds).")")->execute();
$this->sConn->createCommand("update exam_group set teacher_id='".$teacherId."' where exam_group_id='".$ExamGroupId."'")->execute();
$newExamGroupId=$ExamGroupId;
}
$paperIds=array();
foreach($classIds as $classId){
//$newExamId = $this->UUID_SHORT();
$newExamId=getUniqueId($this->schoolId);
$sql = "select g.card_length,g.card_status FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id = $classId";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if($cardData['card_status']==0){
$cardData['card_length'] = 8;
if($this->schoolId >999){
$cardData['card_length'] = 9;
}
}
$this->sConn->createCommand()->insert('exam',array(
'exam_id' => $newExamId,
'exam_group_id' => $newExamGroupId,
'name' => $examName,
'semester_id' => $this->semesterId,
'teacher_id' => $teacherId,
'subject_id' => $subjectId,
'module_id' => 0,
'type' => $type,
'school_card_status' => $cardData['card_status'],
'school_card_length' => $cardData['card_length'],
'status' => 2,
'week_num' => 0,
'create_type' => 0,
'create_time' => $time,
'update_time' => $time,
'tpl_data' => jsonEncode($tplData),
'tpl_index' => $tpl_index,
'class_id' => $classId,
'method_ids' => '',
));
//$newPaperId = $this->UUID_SHORT();
$newPaperId=getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('paper', array(
'paper_id' => $newPaperId,
'paper_type' => 1,
'exam_id' => $newExamId,
'paper_name' => '',
'paper_layer' => '',
'difficulty' => 0,
'topics_count' => 0,
'score' => $total_score,
'add_time' => $time,
'update_time' => $time,
'method_ids' => '',
'is_labelled' => 0,
));
$paperIds[]=$newPaperId;
$this->sConn->createCommand()->insert('class_exam_printer', array(
'class_id' => $classId,
'exam_id' => $newExamId,
'type' => 0,
'is_print' => 1,
'print_time' => 0,
'add_time' => $time,
));
$studentIds = SStudentClassRelation::model()->getStudentIdsByClassId_Status_0($classId);
$studentIds_0 = BusinessStudent::model()->keepStudentsStatus_0($studentIds);
$BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds_0);
if($studentIds_0){
foreach ($studentIds_0 as $studentId) {
$this->sConn->createCommand()->insert('student_paper_relation', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'student_card' => (isset($BStudentCards[0]) && isset($BStudentCards[0][$studentId]) ? $BStudentCards[0][$studentId] : 0),
'school_student_card' => (isset($BStudentCards[1]) && isset($BStudentCards[1][$studentId]) ? $BStudentCards[1][$studentId] : ''),
));
$this->sConn->createCommand()->insert('student_paper_relation_property', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'create_time' =>$time
));
}
}
}
//写入试题,关联信息
foreach ($new_items as $key=>$item){
$this->sConn->createCommand()->insert('topic', array(
'topic_type' =>7,
'topic_title' => '',
'folder_id' => '0',
'subject_id' => $subjectId,
'is_delete' =>1,
'creator_id' => $teacherId,
'updater_id' => $teacherId,
'is_word_topic'=>1,
'create_time' => time(),
'update_time' => time(),
));
$last_insert_id = $this->sConn->createCommand("select last_insert_id()")->queryRow();
$topic_id=$last_insert_id['last_insert_id()'];
$this->sConn->createCommand()->insert('topic_item', array(
'topic_id' => $topic_id,
'topic_type' => 7,
'topic_title' => ''
));
$this->sConn->createCommand()->insert('topic_use', array(
'topic_id' => $topic_id,
'mode' => 1,
'teacher_id' => $teacherId,
'paper_id' =>$paperIds[0]
));
foreach($paperIds as $kp=>$p)
{
$this->sConn->createCommand()->insert('paper_topic_relation', array(
'paper_id' => $p,
'topic_id' => $topic_id,
'no' => $item['id'],
'order' => $item['id'],
'mode' => 1,
'type' => 7,
'score' =>$item['score']
));
}
}
$transaction->commit();
}catch (Exception $e){
$transaction->rollBack();
exit(json_encode(array('status'=>0,'msg'=>'保存失败')));
}
}
exit(json_encode(array('status'=>1,'msg'=>'保存成功')));
//$this->redirect($this->createUrl('third/index?list_type=1'));
}
private function numToLetter($num){
$index = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
return substr($index,$num,1);
}
// 英语上传试卷答案解析
public function actionUploadEnglishPaper(){
// $error['success'] = 123;
// $error['message'] = '上传文件成功!';
// var_dump($_FILES);exit;
// echo json_encode($_FILES);exit();
$exam_group_id = Req::post('examGroupId');
$uploadOne = Req::post('uploadOne');
$paper_exam = array();
$paper_answer = array();
$paper_exam_url = array();
$paper_answer_url = array();
$paper_exam_url_str = '';
$paper_answer_url_str = '';
$error['success'] = 0;
if (empty($exam_group_id)) {
$error['message'] = '考试id不存在!';
echo json_encode($error);exit();
}
$examInfo = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($examInfo)) {
$error['message'] = '未找到试卷信息!';
echo json_encode($error);exit();
}else{
$exam_name = $examInfo['name'];
$tplData = json_decode($examInfo["tpl_data"], true);
//考试时间
if(isset($tplData['examDate']))
{
$exam_time = strtotime($tplData["examDate"]);
}else{
$exam_time = 0;
}
}
$thirdSheet = SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($thirdSheet)) {
$error['message'] = '尚未上传答题卡!';
echo json_encode($error);exit();
}
if (empty($_FILES)) {
$error['message'] = '未找到上传文件!';
echo json_encode($error);exit();
}else{
foreach($_FILES as $k=>$v){
if(isset($v) && !empty($v)){
if(!isset($v['size']) || $v['size'] >= 8388608){
$error['message'] = '文件超过8M!';
echo json_encode($error);exit();
}
if(!isset($v['name']) || !in_array(substr($v['name'],strrpos($v['name'],'.')+1),array('doc','docx','pdf','bmp','jpg','jpeg','png'))){
$error['message'] = '文件格式不正确!';
echo json_encode($error);exit();
}
if(strpos($k,'paper_answer') !== false){
$paper_answer[] = $v;
}
if(strpos($k,'paper_exam') !== false){
$paper_exam[] = $v;
}
}
}
if(empty($paper_answer) && empty($paper_exam)){
$error['message'] = '尚未上传试卷答案!';
echo json_encode($error);exit();
}else{
// echo json_encode($paper_exam);exit();
krsort($paper_answer);
krsort($paper_exam);
// echo json_encode($paper_exam);exit();
// 保存上传文件至服务器
$pathName = dirname(dirname(dirname(__FILE__))).'/upload/tmpDir/english_paper/'. date('Y') .'/'. date('m') . '/';
$pathName1 = 'upload/tmpDir/english_paper/'. date('Y') .'/'. date('m') . '/';
if (!file_exists($pathName)) {
mkdir($pathName, 0777, true);
}
$ucloud = new Qcloud();
// echo json_encode($paper_exam);exit();
foreach($paper_exam as $k=>$v){
// $v['name']=iconv("UTF-8", "gb2312", $v['name']);
$fileName = $exam_group_id.$v['name'];
$extName = substr($v['name'],strrpos($v['name'],'.'));
if (!move_uploaded_file($v['tmp_name'], $pathName.$fileName)) {
$error['message'] = '上传试卷失败!';
echo json_encode($error);exit();
}else{
$meg = $ucloud->putFile('zsyas2/englishPaper/'.$this->schoolId.'/'.$exam_group_id.'/'.time().mt_rand().$extName,$pathName1.$fileName);
if($meg['status'] == 0){
$error['message'] = $meg['msg'];
echo json_encode($error);exit();
}else{
$url = $meg['url'];
$url = str_replace("%2F","/",$url);
$paper_exam_url[] = $url;
$paper_exam_url_str = $url;
}
}
@unlink($pathName1.$fileName);
}
foreach($paper_answer as $k=>$v){
// $v['name']=iconv("UTF-8", "gb2312", $v['name']);
$fileName = $exam_group_id.$v['name'];
$extName = substr($v['name'],strrpos($v['name'],'.'));
if (!move_uploaded_file($v['tmp_name'], $pathName.$fileName)) {
$error['message'] = '上传试卷失败!';
echo json_encode($error);exit();
}else{
$meg = $ucloud->putFile('zsyas2/englishPaperAnswer/'.$this->schoolId.'/'.$exam_group_id.'/'.time().mt_rand().$extName,$pathName1.$fileName);
if($meg['status'] == 0){
$error['message'] = $meg['msg'];
echo json_encode($error);exit();
}else{
$url = $meg['url'];
$url = str_replace("%2F","/",$url);
$paper_answer_url[] = $url;
$paper_answer_url_str = $url;
}
}
@unlink($pathName1.$fileName);
}
}
}
$error['success'] = 1;
$error['message'] = '发送成功!';
$error['uploadOne'] = $uploadOne;
$error['answer_url'] = $paper_answer_url_str;
$error['paper_url'] = $paper_exam_url_str;
echo json_encode($error);exit();
}
public function actionUploadEnglishPaperInsert(){
$exam_group_id = Req::post('examGroupId');
$paper_answer_url = Req::post('answerUrl');
$paper_exam_url = Req::post('paperUrl');
$printTime = (int)Req::post('printTime');
if($paper_answer_url && $paper_exam_url){
foreach($paper_answer_url as $k=>$v){
if(!$v || empty($v)){
unset($paper_answer_url[$k]);
}
}
foreach($paper_exam_url as $k=>$v){
if(!$v || empty($v)){
unset($paper_answer_url[$k]);
}
}
ksort($paper_answer_url);
ksort($paper_exam_url);
//关联third_multi_template
$sql = "select count(*) count from third_multi_template where exam_group_id = {$exam_group_id}";
$count = $this->sConn->createCommand($sql)->queryAll();
if($count[0]['count']){
$this->sConn->createCommand("delete from `third_multi_template` where exam_group_id = '{$exam_group_id}'")->execute();
}
$this->sConn->createCommand()->insert('third_multi_template',array(
'exam_group_id' => $exam_group_id,
'semester_id' => $this->semesterId,
'template_src' => implode(',',$paper_exam_url),
'topic_upload' => 1,
'answer_upload' => 0,
'template_type' => 1,
'update_time' => 0,
'create_time' => time()
));
$this->sConn->createCommand()->insert('third_multi_template',array(
'exam_group_id' => $exam_group_id,
'semester_id' => $this->semesterId,
'template_src' => implode(',',$paper_answer_url),
'topic_upload' => 0,
'answer_upload' => 1,
'template_type' => 2,
'update_time' => 0,
'create_time' => time()
));
$examInfo = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($examInfo)) {
$error['message'] = '未找到试卷信息!';
echo json_encode($error);exit();
}else{
$exam_name = $examInfo['name'];
$tplData = json_decode($examInfo["tpl_data"], true);
//考试时间
if(isset($tplData['examDate']))
{
$exam_time = strtotime($tplData["examDate"]);
}else{
$exam_time = 0;
}
}
$jsonArr = array();
$jsonArr['exam_name'] = $exam_name;
$jsonArr['school_id'] = $this->schoolId;
$jsonArr['exam_group_id'] = $exam_group_id;
$jsonArr['exam_time'] = $exam_time;
$jsonArr['topic_original'] = $paper_exam_url;
$jsonArr['answer_parse_original'] = $paper_answer_url;
$jsonArr['coach_name'] = isset(Yii::app()->session['coachInfo']['real_name'])?Yii::app()->session['coachInfo']['real_name']:'';
$jsonArr['print_time'] = $printTime;
$result = Curl::http_post_json(Yii::app()->params['english_send_mark'], json_encode($jsonArr));
$resultArr = json_decode($result,true);
if($resultArr['status'] == 1){
$sql = "select exam_id from exam where exam_group_id = '{$exam_group_id}'";
$examAll = $this->sConn->createCommand($sql)->queryAll();
$examArr = array();
if($examAll){
foreach($examAll as $k=>$v){
$examArr[] = $v['exam_id'];
}
$transcation = $this->sConn->beginTransaction();
try {
$this->sConn->createCommand("update paper set is_labelled = 3 where exam_id in (".implode(',',$examArr).")")->execute();
$transcation->commit();
}
catch (Exception $e)
{
$transcation->rollback();
$error['message'] = '更新失败!';
echo json_encode($error);exit();
}
}else{
$error['message'] = '考试信息错误!';
echo json_encode($error);exit();
}
}else{
$error['message'] = $resultArr['message'];
echo json_encode($error);exit();
}
}else{
$error['message'] = '上传失败!';
echo json_encode($error);exit();
}
$this->schoolManager->saveExamProcess($exam_group_id,1,time());
$error['success'] = 1;
$error['message'] = '上传成功!';
echo json_encode($error);exit();
}
//第三方发送协助
public function actionAssist(){
Url::clean();
$exam_group_id = Req::get("exam_group_id");
//读取考试数据
$examModel=new SExam();
$examInfo=$examModel->getExamByGroupId($exam_group_id);
if(!$examInfo) Yii::app()->jump->error('考试参数异常');
$tpl_data=$examInfo[0]['tpl_data'];
$tplData=json_decode($tpl_data,true);
//读取答题卡设置
$thirdAnswerSheet = $this->sConn->createCommand("select * from third_answer_sheet where exam_group_id = ".$exam_group_id)->queryRow();
//判断上传状态
$uploadExamInfo=SThirdMultiTemplate::model()->getStatusByExamGroupId($exam_group_id);
$uploadStatus=0;
if($uploadExamInfo){
if(isset($uploadExamInfo[1])){
if($uploadExamInfo[1]['topic_upload']==1){
$uploadStatus+=1;
}
}
if(isset($uploadExamInfo[2])){
if($uploadExamInfo[2]['answer_upload']==1){
$uploadStatus+=3;
}
}
}
// debug($tplData);
//判断任务发送情况
$task= ATask::model()->findByPk($exam_group_id);
$task = json_decode(CJSON::encode($task),TRUE);
if($task){
if($task['operator']){
$task['user']=AssistUser::model()->findByPk($task['operator']);
}
//答题卡任务耗时
if($task['ast_apply_time']){
if($task['answer_sheet_task']>2){
if($task['ast_update_time'] && ($task['ast_update_time']-$task['ast_apply_time'])>0){
$task['AstConsuming']=$this->consuming($task['ast_update_time'],$task['ast_apply_time']);
}else{
$task['AstConsuming']='--';
}
}elseif($task['answer_sheet_task']==2){
if($task['ast_apply_time'] && (time()-$task['ast_apply_time'])>0){
$task['AstConsuming']=$this->consuming(time(),$task['ast_apply_time']);
}else{
$task['AstConsuming']='--';
}
}
}else{
$task['AstConsuming']='--';
}
//试卷任务耗时
if($task['ppt_apply_time']){
if($task['paper_task']>2){
if($task['ppt_update_time'] && ($task['ppt_update_time']-$task['ppt_apply_time'])>0){
$task['PptConsuming']=$this->consuming($task['ppt_update_time'],$task['ppt_apply_time']);
}else{
$task['PptConsuming']='--';
}
}elseif($task['paper_task']==2){
if($task['ppt_apply_time'] && (time()-$task['ppt_apply_time'])>0){
$task['PptConsuming']=$this->consuming(time(),$task['ppt_apply_time']);
}else{
$task['PptConsuming']='--';
}
}
}else{
$task['PptConsuming']='--';
}
//答案解析任务耗时
if($task['pat_apply_time']){
if($task['parse_task']>2){
if($task['pat_update_time'] && ($task['pat_update_time']-$task['pat_apply_time'])>0){
$task['PatConsuming']=$this->consuming($task['pat_update_time'],$task['pat_apply_time']);
}else{
$task['PatConsuming']='--';
}
}elseif($task['parse_task']==2){
if($task['pat_apply_time'] && (time()-$task['pat_apply_time'])>0){
$task['PatConsuming']=$this->consuming(time(),$task['pat_apply_time']);
}else{
$task['PatConsuming']='--';
}
}
}else{
$task['PatConsuming']='--';
}
}
//读取试题结构
if(isset($tplData['new_items'])){
$items=array();
foreach ($tplData['new_items'] as $item){
if(isset($item['alias'])){
$items[$item['topic_type']]['no'][]=$item['alias'];
}else{
$items[$item['topic_type']]['no'][]=$item['id'];
}
}
$tplData['items']=$items;
}
$data['exam_name']=$examInfo[0]['name'];
$data['subject']=Yii::app()->params['subjectId'][$examInfo[0]['subject_id']];
$data['tpl_data']=$tplData;
$data['task']=$task;
//debug($tplData);
$data['exam_group_id']=$exam_group_id;
if($thirdAnswerSheet){
$data['isAnswerCard']=1;
}else{
$data['isAnswerCard']=0;
}
$this->render('assist',$data);
}
//发送答题卡任务
public function actionSendTask(){
Url::clean();
$exam_group_id = Req::post("examGroupId");
$sendType = Req::post("sendType"); //任务类型1答题卡2试卷3答案解析
$msg['success'] = 0;
$taskModel=new ATask();
//判断学管任务数量
$allTask=$this->conn->createCommand("select count(*) as count from assist_task where coach_id='".$this->coachId."' and (answer_sheet_task in(1,2) or paper_task in(1,2) or parse_task in(1,2))")->queryRow();
if($allTask && $allTask['count']>5){
$msg['message'] = '您已超过5场考试任务为处理完成,操作过于频繁哦!';
exit(json_encode($msg));
}
//验证设置
$setting=AssistSetting::model()->getAssistSetting();
if($setting){
if($setting['cutting_task']==0){
$msg['message'] = '系统后台暂不接受协助任务,请稍后再试,谢谢!';
exit(json_encode($msg));
}elseif($setting['open_cutting_upper_limit'] && $allTask['count']>$setting['cutting_task_upper_limit_num']){
$msg['message'] = '系统后台排队任务过多,请稍后再试,谢谢!';
exit(json_encode($msg));
}
}
//拼接mysigninfo
$mySignInfo='userid='.$this->coachId.'&session='.Yii::app()->request->cookies['appLoginSessionId'].'&sig='.Yii::app()->request->cookies['loginSig'].'&time='.Yii::app()->request->cookies['loginTime'];
if($sendType==1){
$imgArr = Req::post("imgArr");
$paperDoc = Req::post("paperDoc");
$card_type = Req::post("cardType");
$paperDocTitle = Req::post("paperDocTitle");
$answer_card_remark = Req::post("answerCardRemark");
if(!$imgArr || !is_array($imgArr)){
$msg['message'] = '请上传答题卡!';
exit(json_encode($msg));
}
if(!$paperDoc){
$msg['message'] = '请上传试卷文件!';
exit(json_encode($msg));
}
$examModel=new SExam();
$examInfo=$examModel->getExamByGroupId($exam_group_id);
if(!$examInfo){
$msg['message'] = '未找到考试信息!';
exit(json_encode($msg));
}
$sheetId=0;
//读取答题卡设置
$thirdAnswerSheet = $this->sConn->createCommand("select sheet_id from third_answer_sheet where exam_group_id = ".$exam_group_id)->queryRow();
if($thirdAnswerSheet){
$sheetId=$thirdAnswerSheet['sheet_id'];
}
$time=time();
//读取任务记录
//$task=$taskModel->getTaskByExamGroupId($exam_group_id);
$task=$taskModel->findByPk($exam_group_id);
if(!$task){
$tpl_data=$examInfo[0]['tpl_data'];
$tplData=json_decode($tpl_data,true);
$tplIndex=$examInfo[0]['tpl_index'];
//学校信息
$schoolInfo=$this->schoolManager->getSchoolInfo($this->schoolId);
$taskModel->exam_group_id=$exam_group_id;
$taskModel->exam_name=$examInfo[0]['name'];
$taskModel->subject_id=Yii::app()->session['session_duoxueke_subject_id'];
$taskModel->school_id=$this->schoolId;
$taskModel->school_name=$schoolInfo['school_name'];
$taskModel->school_address=$schoolInfo['address'];
$taskModel->exam_date=$tplData['examDate'];
$taskModel->coach_id=$this->coachId;
if(isset(Yii::app()->session['coachInfo']['real_name']) && Yii::app()->session['coachInfo']['real_name']){
$taskModel->coach_name=Yii::app()->session['coachInfo']['real_name'];
}else{
$taskModel->coach_name=Yii::app()->session['coachInfo']['coach_name'];
}
$taskModel->coach_mobile=Yii::app()->session['coachInfo']['telephone'];
$taskModel->my_sign_info=$mySignInfo;
$taskModel->create_time=$time;
$taskModel->update_time=$time;
$taskModel->answer_sheet_task=1;
$taskModel->ast_create_time=$time;
$taskModel->ast_update_time=$time;
$taskModel->answer_card_img=implode(',',$imgArr);
$taskModel->paper_file_img=$paperDoc;
$taskModel->paper_file_title=$paperDocTitle;
$taskModel->answer_card_mark=$answer_card_remark;
$taskModel->number_type=$card_type;
$taskModel->sheet_id=$sheetId;
$taskModel->tpl_index=$tplIndex;
$taskModel->dsn=$this->sConn->connectionString;
$taskModel->database_user=$this->sConn->username;
$taskModel->database_password=$this->sConn->password;
if($taskModel->save()){
$msg['success'] = 1;
$msg['message'] = '发送成功!';
exit(json_encode($msg));
}
}else{
if($task['answer_sheet_task']==1 || $task['answer_sheet_task']==2){
$msg['message'] = '不能重复发送协助任务!';
exit(json_encode($msg));
}
$taskStatus=1;
if($task['operator']!=0){
$taskStatus=2;
}
$taskStatus=1;
$applyTime=0;
if($task['operator']!=0){
$taskStatus=2;
$applyTime=$time;
}
$updateArr=array(
'update_time'=>$time,
'answer_sheet_task'=>$taskStatus,
'ast_create_time'=>$time,
'ast_update_time'=>$time,
'ast_apply_time'=>$applyTime,
'paper_file_img'=>$paperDoc,
'paper_file_title'=>$paperDocTitle,
'answer_card_img'=>implode(',',$imgArr),
'number_type'=>$card_type,
'sheet_id'=>$sheetId,
'answer_card_mark'=>$answer_card_remark
);
if($taskModel->updateTask($exam_group_id,$updateArr)){
$msg['success'] = 1;
$msg['message'] = '发送成功!';
exit(json_encode($msg));
}
}
}elseif($sendType==2){
//试卷任务
$imgArr = Req::post("imgArr");
$paperRemark = Req::post("paperRemark");
if(!$imgArr || !is_array($imgArr)){
$msg['message'] = '请上传答题卡!';
exit(json_encode($msg));
}
$examModel=new SExam();
$examInfo=$examModel->getExamByGroupId($exam_group_id);
if(!$examInfo){
$msg['message'] = '未找到考试信息!';
exit(json_encode($msg));
}
$time=time();
$taskModel=new ATask();
//读取任务记录
$task=$taskModel->findByPk($exam_group_id);
if(!$task){
$tpl_data=$examInfo[0]['tpl_data'];
$tplData=json_decode($tpl_data,true);
$tplIndex=$examInfo[0]['tpl_index'];
//学校信息
$schoolInfo=$this->schoolManager->getSchoolInfo($this->schoolId);
$taskModel->exam_group_id=$exam_group_id;
$taskModel->exam_name=$examInfo[0]['name'];
$taskModel->subject_id=Yii::app()->session['session_duoxueke_subject_id'];
$taskModel->school_id=$this->schoolId;
$taskModel->school_name=$schoolInfo['school_name'];
$taskModel->school_address=$schoolInfo['address'];
$taskModel->exam_date=$tplData['examDate'];
$taskModel->coach_id=$this->coachId;
if(isset(Yii::app()->session['coachInfo']['real_name']) && Yii::app()->session['coachInfo']['real_name']){
$taskModel->coach_name=Yii::app()->session['coachInfo']['real_name'];
}else{
$taskModel->coach_name=Yii::app()->session['coachInfo']['coach_name'];
}
$taskModel->coach_mobile=Yii::app()->session['coachInfo']['telephone'];
$taskModel->create_time=$time;
$taskModel->update_time=$time;
$taskModel->my_sign_info=$mySignInfo;
$taskModel->paper_task=1;
$taskModel->ppt_create_time=$time;
$taskModel->ppt_update_time=$time;
$taskModel->paper_img=implode(',',$imgArr);
$taskModel->paper_mark=$paperRemark;
$taskModel->dsn=$this->sConn->connectionString;
$taskModel->database_user=$this->sConn->username;
$taskModel->database_password=$this->sConn->password;
$taskModel->tpl_index=$tplIndex;
if($taskModel->save()){
$msg['success'] = 1;
$msg['message'] = '发送成功!';
exit(json_encode($msg));
}
}else{
if($task['paper_task']==1 || $task['paper_task']==2){
$msg['message'] = '不能重复发送协助任务!';
exit(json_encode($msg));
}
$taskStatus=1;
$applyTime=0;
if($task['operator']!=0){
$taskStatus=2;
$applyTime=$time;
}
$updateArr=array(
'update_time'=>$time,
'paper_task'=>$taskStatus,
'ppt_create_time'=>$time,
'ppt_apply_time'=>$applyTime,
'ppt_update_time'=>$time,
'paper_img'=>implode(',',$imgArr),
'paper_mark'=>$paperRemark,
);
if($taskModel->updateTask($exam_group_id,$updateArr)){
$msg['success'] = 1;
$msg['message'] = '发送成功!';
exit(json_encode($msg));
}
}
}elseif($sendType==3){
//答案解析任务
$imgArr = Req::post("imgArr");
$parseRemark = Req::post("parseRemark");
if(!$imgArr || !is_array($imgArr)){
$msg['message'] = '请上传答题卡!';
exit(json_encode($msg));
}
$examModel=new SExam();
$examInfo=$examModel->getExamByGroupId($exam_group_id);
if(!$examInfo){
$msg['message'] = '未找到考试信息!';
exit(json_encode($msg));
}
$tplIndex=$examInfo[0]['tpl_index'];
$time=time();
$taskModel=new ATask();
//读取任务记录
$task=$taskModel->findByPk($exam_group_id);
if(!$task){
$tpl_data=$examInfo[0]['tpl_data'];
$tplData=json_decode($tpl_data,true);
//学校信息
$schoolInfo=$this->schoolManager->getSchoolInfo($this->schoolId);
$taskModel->exam_group_id=$exam_group_id;
$taskModel->exam_name=$examInfo[0]['name'];
$taskModel->subject_id=Yii::app()->session['session_duoxueke_subject_id'];
$taskModel->school_id=$this->schoolId;
$taskModel->school_name=$schoolInfo['school_name'];
$taskModel->school_address=$schoolInfo['address'];
$taskModel->exam_date=$tplData['examDate'];
$taskModel->coach_id=$this->coachId;
if(isset(Yii::app()->session['coachInfo']['real_name']) && Yii::app()->session['coachInfo']['real_name']){
$taskModel->coach_name=Yii::app()->session['coachInfo']['real_name'];
}else{
$taskModel->coach_name=Yii::app()->session['coachInfo']['coach_name'];
}
$taskModel->coach_mobile=Yii::app()->session['coachInfo']['telephone'];
$taskModel->create_time=$time;
$taskModel->update_time=$time;
$taskModel->my_sign_info=$mySignInfo;
$taskModel->parse_task=1;
$taskModel->pat_create_time=$time;
$taskModel->pat_update_time=$time;
$taskModel->parse_img=implode(',',$imgArr);
$taskModel->parse_mark=$parseRemark;
$taskModel->tpl_index=$tplIndex;
$taskModel->dsn=$this->sConn->connectionString;
$taskModel->database_user=$this->sConn->username;
$taskModel->database_password=$this->sConn->password;
if($taskModel->save()){
$msg['success'] = 1;
$msg['message'] = '发送成功!';
exit(json_encode($msg));
}
}else{
if($task['parse_task']==1 || $task['parse_task']==2){
$msg['message'] = '不能重复发送协助任务!';
exit(json_encode($msg));
}
$taskStatus=1;
$applyTime=0;
if($task['operator']!=0){
$taskStatus=2;
$applyTime=$time;
}
$updateArr=array(
'update_time'=>$time,
'parse_task'=>$taskStatus,
'pat_create_time'=>$time,
'pat_apply_time'=>$applyTime,
'pat_update_time'=>$time,
'parse_img'=>implode(',',$imgArr),
'parse_mark'=>$parseRemark
);
if($taskModel->updateTask($exam_group_id,$updateArr)){
$msg['success'] = 1;
$msg['message'] = '发送成功!';
exit(json_encode($msg));
}
}
}
}
//撤消任务
public function actionUndo(){
Url::clean();
$exam_group_id = Req::post("examGroupId");
$sendType = Req::post("sendType"); //任务类型1答题卡2试卷3答案解析
$msg['success']=0;
$examModel=new SExam();
$examInfo=$examModel->getExamByGroupId($exam_group_id);
if(!$examInfo){
$msg['message'] = '未找到考试信息!';
exit(json_encode($msg));
}
$time=time();
$taskModel=new ATask();
//读取任务记录
$task=$taskModel->findByPk($exam_group_id);
$filed='';
$timeFiled='';
switch ($sendType){
case 1:
$filed='answer_sheet_task';
$timeFiled='ast_update_time';
break;
case 2:
$filed='paper_task';
$timeFiled='ppt_update_time';
break;
case 3:
$filed='parse_task';
$pat_update_time='ast_update_time';
break;
}
if(!$filed){
$msg['message'] = '参数异常!';
exit(json_encode($msg));
}
if($task->$filed==2){
$msg['message'] = '该任务已受理,不可撤回,谢谢!';
exit(json_encode($msg));
}elseif($task->$filed==3){
$msg['message'] = '该任务已完成,谢谢!';
exit(json_encode($msg));
}else{
if($taskModel->updateAll(array($filed=>4,'update_time'=>$time,$timeFiled=>$time),'exam_group_id=:eid',array(':eid'=>$exam_group_id))){
$msg['success']=1;
$msg['message'] = '撤消成功!';
exit(json_encode($msg));
}
}
}
//上传图片
public function actionUpload(){
ini_set ('memory_limit', '300M');
if(!$_FILES){
Yii::app()->jump->error('文件大小超过范围');
}else {
if (!isset($_FILES['paperFile']) || !isset($_FILES['paperFile']['size']) || $_FILES['paperFile']['size'] > 52428800) {
Yii::app()->jump->error('文件大小超过范围');
}
}
if (Yii::app()->request->getIsPostRequest()) {
//FIXME 20191202 ucloud
// 保存上传文件至服务器
$pathName = dirname(dirname(dirname(__FILE__)))."/upload/tmpDir/UploadAssistFile/{$this->schoolId}/". date('Y/m/d/');
if (!file_exists($pathName)) {
mkdir($pathName, 0777, true);
}
$error['success'] = 0;
$ucloud = new Qcloud();
$fileName = $_FILES['paperFile']['name'];
$fileName = iconv("UTF-8", "gb2312", $fileName);
$extName = substr($fileName,strrpos($fileName,'.'));
if (!move_uploaded_file($_FILES['paperFile']['tmp_name'], $pathName.$fileName)) {
$error['message'] = '上传失败!';
echo json_encode($error);exit();
}else{
$meg = $ucloud->putFile('zsyas2/third/'.$this->schoolId.'/'.time().mt_rand().$extName,$pathName.$fileName);
if($meg['status'] == 0){
$error['message'] = $meg['msg'];
echo json_encode($error);exit();
}else{
$url = $meg['url'];
$url = str_replace("%2F","/",$url);
}
}
@unlink($pathName.$fileName);
$error['success'] = 1;
$error['message'] = '上传成功!';
$error['src']=$url;
$error['name']=$_FILES['paperFile']["name"];
echo json_encode($error);exit();
}
}
//计算耗时
public function consuming($now,$time){
$return='';
$date=floor(($now-$time)/86400);
if($date){
$return.=$date.'天';
}
$hour=floor(($now-$time)%86400/3600);
if($hour){
$return.=$hour.'小时';
}
$minute=floor((($now-$time)%86400)%3600/60);
if($minute){
$return.=$minute.'分种';
}
$second=floor(($now-$time)%86400%3600%60);
if($second){
$return.=$second.'秒';
}
return $return;
}
//客户端加载未上传学生列表
public function actionNotUploadedStudent(){
$eid = Req::get("examgroupid");
$page =Req::get("page");
$PageLimit=10;
if(!$page) $page=1;
$examInfo=$this->schoolManager->getExamsByExamGroupId($eid);
if (empty($examInfo)) {
Yii::app()->jump->error('未找到考试信息!');
}
$examIds=array();
foreach($examInfo as $val){
$examIds[]=$val['exam_id'];
}
$result=array();
$rs=$this->schoolManager->getStudentByExamIds($examIds,$page,$PageLimit);
if($rs){
foreach($rs['list'] as $key =>$val){
$StudentInfo=$this->sConn->createCommand("select realname from `student_info` where student_id='".$val['student_id']."' ")->queryRow();
if($StudentInfo){
$rs['list'][$key]['realname']=$StudentInfo['realname'];
}
}
}
$rs['examgroupid']=$eid;
$this->render('not_upload',$rs);
}
public function actionDownloadStudent()
{
$eid = Req::get("examgroupid");
$examInfo=$this->schoolManager->getExamsByExamGroupId($eid);
if (empty($examInfo)) {
Yii::app()->jump->error('未找到考试信息!');
}
$examIds=array();
foreach($examInfo as $val){
$examIds[]=$val['exam_id'];
}
$data=$this->schoolManager->getAllStudentByExamIds($examIds);
$objPHPExcel = new PHPExcel();
$objPHPExcel->getProperties()->setCreator("ctos")
->setLastModifiedBy("ctos")
->setTitle("未上传学生")
->setSubject("未上传学生")
->setDescription("未上传学生")
->setKeywords("excel")
->setCategory("result file");
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(45);
$objPHPExcel->getActiveSheet()->getRowDimension('1')->setRowHeight(22);
$objPHPExcel->getActiveSheet()->getRowDimension('2')->setRowHeight(20);
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', '序号')
->setCellValue('B1', '姓名')
->setCellValue('C1', '系统准考证号');
$i = 2;
foreach($data as $v)
{
$objPHPExcel->getActiveSheet(0)->setCellValue('A' . $i, ($i-1));
$objPHPExcel->getActiveSheet(0)->setCellValue('B' . $i, $v['realname']);
$objPHPExcel->getActiveSheet(0)->setCellValueExplicit('C' . $i, (string)$v['student_card'], PHPExcel_Cell_DataType::TYPE_STRING);
$i = $i + 1;
}
$objPHPExcel->getActiveSheet()->setTitle('未上传学生列表');
$objPHPExcel->setActiveSheetIndex(0);
ob_end_clean(); // Added by me
header("Accept-Ranges:bytes");
header('Content-Type:application/vnd.ms-excel');
header("Content-type:application/vnd.ms-excel;charset=UTF-8");
header('Content-Disposition:attachment;filename="未上传学生列表.xls"');
header('Cache-Control:max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');
}
//修改第三方考试信息
public function actionModifyThirdExam(){
if (Yii::app()->request->getIsPostRequest()){
$exam_group_id = Req::post("examGroupId");
$type=Req::post('type');
$name=Req::post('examName');
$examDate=Req::post('examDate');
$paperType=Req::post('paperType');
$relationAnswerCard=false;
$transaction = $this->sConn->beginTransaction();
$exam_data = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if(!$exam_data)
{
Yii::app()->jump->error('非法试卷!');
}
@$tplData=json_decode($exam_data['tpl_data'],true);
if(!$tplData){
Yii::app()->jump->error('非法试卷!');
}
if(!matchStrChar($name)){
Yii::app()->jump->error('考试名称不能包含特殊字符!');
}
$exam_group_data = ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($exam_group_data['status']==2){
$examSql="update `exam` set `name`='".$name."' ";
$examSql.=" where exam_group_id='".$exam_group_id."'";
$this->sConn->createCommand($examSql)->execute();
$paperData=$this->sConn->createCommand("select paper_id,is_labelled from paper where exam_id ='{$exam_data['exam_id']}'")->queryRow();
if($paperData['is_labelled']>0 || $exam_group_data['is_tagging']>0){
updateExamNameToTiku($exam_group_id,$name,$this->schoolId);
}
$this->redirect($this->createUrl('print/index'));
}
//是否修改在线答题卡
$text=Req::post("timu");
if($text){
//处理答题卡数据
$relationAnswerCard=true;
$name = Req::post("title");
$sheet_answer = isset($_POST['sheet_answer'])?$_POST['sheet_answer']:'';
$sheet_score = isset($_POST['sheet_score'])?$_POST['sheet_score']:'';
$post = json_decode($text,true);
$KeGuanTi = isset($post["KeGuanTi"])?$post["KeGuanTi"]:0;
$TianKongTi = isset($post["TianKongTi"])?$post["TianKongTi"]:0;
$ZhuGuanTi = isset($post["ZhuGuanTi"])?$post["ZhuGuanTi"]:0;
$XuanZuoTi = isset($post["XuanZuoTi"])?$post["XuanZuoTi"]:0;
$pdfUrl =isset($_POST["pdf_url"])?$_POST["pdf_url"]:0;
$positionJson=isset($_POST['position'])?$_POST['position']:'';
$select_info = isset($_POST["question_info"]) ? $_POST["question_info"] : '';
$half_score = isset($_POST['sheet_halfscore']) ? $_POST['sheet_halfscore'] : ''; //多选题半对分
$subject_id=$this->subjectId;
if(!$text || !$name || !$sheet_answer || !$sheet_score){
$error['message'] = '题目参数错误';
echo json_encode($error);exit();
}
if(!$positionJson){
$error['message'] = '定位信息异常';
echo json_encode($error);exit();
}
//上传答题卡相关文件
$files=$this->uploadAnswerCardPdf($exam_group_id,$positionJson,$pdfUrl);
$sheet_score_array = json_decode($sheet_score, 1);
if (!$sheet_score_array) {
$error['success']=0;
$error['message'] = '上传失败,未设置分数!';
echo json_encode($error);exit();
}
$score_num = count($sheet_score_array);
if ($score_num != ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $XuanZuoTi )) {
$error['success']=0;
$error['message'] = '上传失败,设置分数或设置题号有误!';
echo json_encode($error);exit();
}
$tplData=$this->updateTplData($select_info,$half_score,$sheet_answer,$sheet_score,($TianKongTi+$TianKongTi+$ZhuGuanTi+$XuanZuoTi),$tplData);
}
try{
$tplData['examDate']=$examDate;
if($relationAnswerCard){
$option = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T');
$topic_data = $this->get_topic_folder();
$topic_ids=array();
$examIds=array();
$paperIds=array();
$examData=$this->schoolManager->getExamsByExamGroupId($exam_group_id);
foreach ($examData as $val){
$examIds[]=$val['exam_id'];
}
$paperData=$this->sConn->createCommand("select paper_id,is_labelled from paper where exam_id in(".implode(',',$examIds).")")->queryAll();
foreach ($paperData as $val){
$paperIds[]=$val['paper_id'];
}
$paperTopic=$this->sConn->createCommand("select topic_id from paper_topic_relation where paper_id ='{$paperData[0]['paper_id']}'")->qeuryAll();
foreach ($paperTopic as $item){
$topic_ids[]=$item['topic_id'];
}
//判断原答题卡
$thirdAnswerSheet=$this->sConn->createCommand("select sheet_id,online_card,sheet_answer,sheet_score from third_answer_sheet where exam_group_id='".$exam_group_id."'")->queryRow();
if($thirdAnswerSheet){
//删除数据
$this->sConn->createCommand("delete from topic where topic_id in (".implode(',',$topic_ids).")" )->execute();
$this->sConn->createCommand("delete from topic_item where topic_id in (".implode(',',$topic_ids).")" )->execute();
$this->sConn->createCommand("delete from topic_item_option where topic_id in (".implode(',',$topic_ids).")" )->execute();
$this->sConn->createCommand("delete from paper_topic_relation where paper_id in (".implode(',',$paperIds).")" )->execute();
$this->sConn->createCommand("delete from marking_topic where exam_group_id =".$exam_group_id );
}
foreach($select_info['content'] as $k=>$v)
{
$_topic_type = isset($v['questionTypeId'])?$v['questionTypeId']:0;
$zsytkTopicType=$_topic_type;
if($zsytkTopicType==17 && in_array($subject_id,$this->mathSubjectId)) $zsytkTopicType=7;
$this->sConn->createCommand()->insert('topic', array(
'topic_type' =>$zsytkTopicType ,
'topic_title' => '',
'folder_id' => $topic_data['folder_id'],
'subject_id' => $subject_id,
'is_delete' =>0,
'creator_id' => $exam_data['teacher_id'],
'updater_id' => $exam_data['teacher_id'],
'is_word_topic'=>1,
'create_time' => time(),
'update_time' => time(),
));
$last_insert_id = $this->sConn->createCommand("select last_insert_id()")->queryRow();
$topic_id=$last_insert_id['last_insert_id()'];
$this->sConn->createCommand()->insert('topic_item', array(
'topic_id' => $topic_id,
'topic_type' => $_topic_type,
'topic_title' => ''
));
//增加topic_option
if(($_topic_type==1 && $v['optionCount']>0) || ($_topic_type ==11 && $v['optionCount']>0) || ($_topic_type ==2 && $v['optionCount']>0))
{
$answers = explode(',',$v['answer']);
if($answers && isset($answers[0]) && !empty($answers[0])){
$options = array_chunk($option,$v['optionCount']);
if(isset($options[0]) && !empty($options[0])){
foreach($options[0] as $item=>$val)
{
$this->sConn->createCommand()->insert('topic_item_option', array(
'topic_id' => $topic_id,
'option_id' => 0,
'option_content' => '',
'option_correct' => in_array($val,$answers)?1:0,
'option_score' => 0,
'sort_order' => $item,
));
}
}
}
}
$this->sConn->createCommand()->insert('topic_use', array(
'topic_id' => $topic_id,
'mode' => 1,
'teacher_id' => $exam_data['teacher_id'],
'paper_id' =>$paperData[0]['paper_id']
));
$questionCount = 0;
$questionScoreStr = '';
if(isset($v['scores']) && !empty($v['scores'])){
$scoresArr = explode(',',$v['scores']);
if($scoresArr){
$questionCount = count($scoresArr);
$questionScoreStr = $v['scores'];
}
}
foreach($paperIds as $p)
{
$this->sConn->createCommand()->insert('paper_topic_relation', array(
'paper_id' => $p,
'topic_id' => $topic_id,
'no' => $v['questionNum'],
'order' => $v['questionNum'],
'mode' => 1,
'type' => $_topic_type,
'score' =>$v['fullScore'],
'question_count' => $questionCount,
'question_score_str' => $questionScoreStr
));
}
if($exam_group_data['mark_type']==4 && !in_array($v['questionTypeId'],array(1,11,2)))
{
$topicNo=$v['questionNum'];
if(isset($tplData['new_items'][$k]['alias'])){
$topicNo=$tplData['new_items'][$k]['alias'];
}elseif(isset($v['alias'])){
$topicNo=$v['alias'];
}
if(!$topicNo) $topicNo=$v['questionNum'];
$this->sConn->createCommand()->insert('marking_topic', array(
'exam_group_id' => $exam_group_id,
'topic_id' => $topic_id,
'topic_type' => $_topic_type,
'topic_index' =>$v['questionNum'],
'topic_no' =>$topicNo,
'topic_score' =>$v['fullScore']
));
}
}
$total = $tplData['total_score'];
$topics_count = count($select_info['content']);
$tpl_data=json_encode($tplData);
$this->sConn->createCommand("update exam_group set is_answersheet =0 where exam_group_id = ".$exam_group_id )->execute();
$this->sConn->createCommand("update paper set score = ".$total.",topics_count = ".$topics_count.",is_labelled = 0 where paper_id in (".implode(',',$paperIds).")")->execute();
$insert="insert into third_answer_sheet(`name`,`exam_group_id`,`ke_topic_num`,`tian_topic_num`,`zu_topic_num`,`xuan_topic_num`,`file_path`,`sheet_answer`,`sheet_score`,`create_time`,`update_time`,`position`,`online_card`,`online_card_pdf`,`is_qrcode_online`) ";
$insert.=" values('".$name."','".$exam_group_id."','".$KeGuanTi."','".$TianKongTi."','".$ZhuGuanTi."','".$XuanZuoTi."','".$files['ucloudZipUrl']."','".$sheet_answer."','".$sheet_score."','".time()."','".time()."','".$positionJson."',1,'".$files['ucloudPdfUrl']."','0') ";
$this->sConn->createCommand($insert)->execute();
}
$examSql="update `exam` set `type`='".$type."',`name`='".$name."',tpl_index='".$paperType."',tpl_data='".jsonEncode($tplData)."' where exam_group_id='".$exam_group_id."'";
$this->sConn->createCommand($examSql)->execute();
$transaction->commit();
if($paperData[0]['is_labelled']>0 || $exam_group_data['is_tagging']>0){
updateExamNameToTiku($exam_group_id,$name,$this->schoolId); //同步题库
}
if(Yii::app()->params['handle_log_on_off'])
{
writeFileLog(jsonEncode(array(
"examGroupId" => $exam_group_id,
"operate_project" => 'zsyas2',
"school_id" => $this->schoolId,
"title" => '编辑考试',
"operate_account" => Yii::app()->session['coachInfo']['coach_name'],
"operate_method" => $this->action,
"operate_url" => $this->getRoute(),
"operate_param" =>json_encode(array('post'=>$_POST,'get'=>$_GET)),
"date"=>date('Y-m-d H:i:s')
)));
}
// echo json_encode(array('status'=>1,'msg'=>'编辑成功'));exit;
$this->redirect($this->createUrl('third/index'));
}catch(Exception $e){
$transaction->rollBack();
//echo json_encode(array('status'=>0,'msg'=>'编辑失败'));exit;
Yii::app()->jump->error('编辑失败!');
}
}else{
$exam_group_id = Req::get("exam_group_id");
$findInfo = SExamGroup::model()->find('exam_group_id=:eg_id',array('eg_id'=>$exam_group_id));
$exam_data = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if(!$exam_data)
{
Yii::app()->jump->error('非法试卷!');
}
@$tplData=json_decode($exam_data['tpl_data'],true);
if(!$tplData){
Yii::app()->jump->error('非法试卷!');
}
$classInfo=$this->sConn->createCommand("select grade from class where class_id='".$exam_data['class_id']."'")->queryRow();
$data['grade']=$classInfo['grade'];
}
$thirdAnswerSheet=$this->sConn->createCommand("select sheet_id,online_card,sheet_answer,sheet_score,`position`,select_info from third_answer_sheet where exam_group_id='".$exam_group_id."' ")->queryRow();
$data['answerSheet']=0;
$data['onlineCard']=0;
if($thirdAnswerSheet){
$data['onlineCard']=$thirdAnswerSheet['online_card'];
$data['answerSheet']=1;
}
$data['examGroupId']=$exam_group_id;
$data['name']=$exam_data['name'];
$data['markType']=$findInfo->mark_type;
$data['paperType']=$exam_data['tpl_index'];
$data['type']=$exam_data['type'];
$data['examDate']=$tplData['examDate'];
$data['examStatus']=$findInfo->status;
$this->render('modify_exam',$data);
}
//创建考试并在线答题卡
public function actionCreateThirdOnline(){
$error = array();
$tplData = array();
$semesterId = $this->semesterId;
$examName = Req::post("examName");
$type = (int)Req::post("type");
$classIds = Req::post("classIds");
$markType = Req::post("markType");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$examDate = Req::post("examDate");
$tpl_index = (int)Req::post("tpl_index");
$relationAnswerCard=false; //是否关联答题卡
$json = array();
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',substr($classIds,0,-1));
}
if(empty($examName)){
$error[] = '请设置考试名称';
}
if ($type <= 0 || $type > 9) {
$error[] = '考试类型错误';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(empty($markType)){
$error[] = '请选择阅卷方式';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($examDate)){
$error[] = '请指定考试时间';
}
if(!inArray($tpl_index,array(0,1,2,1050))){
$error[] = '请指定类型';
}
if($error){
echo json_encode(array('success'=>0,'message'=>join(',',$error)));exit;
}else{
$teacherName = Teacher ::model()->getTeacherName($teacherId);
if($teacherName){
$tplData['author'] = $teacherName;
$tplData['subjectId'] = $subjectId;
$tplData['textbookId'] = $textbookId;
$tplData['examDate'] = $examDate;
}
$json['author'] = $teacherName;
$json['examDate'] = $examDate;
$json['subjectId'] = (int)$subjectId;
$json['textbookId'] = (int)$textbookId;
$json['exam_name'] = $examName;
$json['impersonal_topic_type'] = 0;
$json['total_score'] = 0;
$json['scores'] = 0;
$json['times'] = 0;
if($subjectId==8){
$json['isNewEnglish']=1;
}
$json['school_card_length'] = 8;
if($this->schoolId>999){
$json['school_card_length'] = 9;
}
$sql = "select g.card_length,g.card_status,c.class_type FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id in(".join(',',$classIds).") ";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if(!$cardData){
$error[] = '无法找到对应班级';
}
if($cardData['card_status']){
$json['school_card_length'] = (int)$cardData['card_length'];
}else{
$cardData['card_length'] = 8;
if($this->schoolId>999){
$cardData['card_length'] = 9;
}
}
$class_type=$cardData['class_type'];
$time = time();
$newExamGroupId = getUniqueId($this->schoolId);
//判断是否关联答题卡
if(isset($_POST["timu"])){
$text=$_POST["timu"];
//处理答题卡数据
$relationAnswerCard=true;
$name = Req::post("title");
$sheet_answer = isset($_POST['sheet_answer'])?$_POST['sheet_answer']:'';
$sheet_score = isset($_POST['sheet_score'])?$_POST['sheet_score']:'';
$post = json_decode($text,true);
$KeGuanTi = isset($post["KeGuanTi"])?$post["KeGuanTi"]:0;
$TianKongTi = isset($post["TianKongTi"])?$post["TianKongTi"]:0;
$ZhuGuanTi = isset($post["ZhuGuanTi"])?$post["ZhuGuanTi"]:0;
$XuanZuoTi = isset($post["XuanZuoTi"])?$post["XuanZuoTi"]:0;
$pdfUrl =isset($_POST["pdf_url"])?$_POST["pdf_url"]:0;
$positionJson=isset($_POST['position'])?$_POST['position']:'';
$select_info = isset($_POST["question_info"]) ? $_POST["question_info"] : '';
$half_score = isset($_POST['sheet_halfscore']) ? $_POST['sheet_halfscore'] : ''; //多选题半对分
$subject_id=$this->subjectId;
if(!$text || !$name || !$sheet_answer || !$sheet_score){
$error['message'] = '题目参数错误';
echo json_encode($error);exit();
}
if(!$positionJson){
$error['message'] = '定位信息异常';
echo json_encode($error);exit();
}
//上传答题卡相关文件
$files=$this->uploadAnswerCardPdf($newExamGroupId,$positionJson,$pdfUrl);
$sheet_score_array = json_decode($sheet_score, 1);
if (!$sheet_score_array) {
$error['success']=0;
$error['message'] = '上传失败,未设置分数!';
echo json_encode($error);exit();
}
$score_num = count($sheet_score_array);
if ($score_num != ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $XuanZuoTi )) {
$error['success']=0;
$error['message'] = '上传失败,设置分数或设置题号有误!';
echo json_encode($error);exit();
}
$select_info = json_decode($select_info, 1);
$json=$this->updateTplData($select_info,$half_score,$sheet_answer,$sheet_score,($TianKongTi+$TianKongTi+$ZhuGuanTi+$XuanZuoTi),$json);
}
if($error){
echo json_encode(array('success'=>0,'message'=>join(',',$error)));exit;
}
$transaction = $this->sConn->beginTransaction();
try{
$paperIds=array();
if($markType ==4)
{
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`mark_status`,`status`,`init_time`,`is_answersheet`,`is_third`,`is_new_marking`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",1,1,".time().",0,1,1)";
}else
{
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`is_answersheet`,`is_third`,`is_new_marking`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",0,1,1)";
}
$this->sConn->createCommand($sql)->execute();
foreach($classIds as $classId){
$newExamId = getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('exam',array(
'exam_id' => $newExamId,
'exam_group_id' => $newExamGroupId,
'name' => $examName,
'semester_id' => $this->semesterId,
'teacher_id' => $teacherId,
'subject_id' => $subjectId,
'module_id' => 0,
'type' => $type,
'school_card_status' => $cardData['card_status'],
'school_card_length' => $cardData['card_length'],
'status' => 2,
'week_num' => 0,
'create_type' => 0,
'create_time' => $time,
'update_time' => $time,
'tpl_data' => jsonEncode($json),
'tpl_index' => $tpl_index,
'class_id' => $classId,
'method_ids' => '',
));
//$newPaperId = $this->UUID_SHORT();
$newPaperId = getUniqueId($this->schoolId);
$paperIds[]=$newPaperId;
$this->sConn->createCommand()->insert('paper', array(
'paper_id' => $newPaperId,
'paper_type' => 1,
'exam_id' => $newExamId,
'paper_name' => '',
'paper_layer' => '',
'difficulty' => 0,
'topics_count' => 0,
'score' => 0,
'add_time' => $time,
'update_time' => $time,
'method_ids' => '',
'is_labelled' => 0,
));
$this->sConn->createCommand()->insert('class_exam_printer', array(
'class_id' => $classId,
'exam_id' => $newExamId,
'type' => 0,
'is_print' => 0,
'print_time' => 0,
'add_time' => $time,
));
$studentIds = SStudentClassRelation::model()->getStudentIdsByClassId_Status_0($classId);
$studentIds_0 = BusinessStudent::model()->keepStudentsStatus_0($studentIds);
$BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds_0);
if($studentIds_0){
foreach ($studentIds_0 as $studentId) {
$this->sConn->createCommand()->insert('student_paper_relation', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'student_card' => (isset($BStudentCards[0]) && isset($BStudentCards[0][$studentId]) ? $BStudentCards[0][$studentId] : 0),
'school_student_card' => (isset($BStudentCards[1]) && isset($BStudentCards[1][$studentId]) ? $BStudentCards[1][$studentId] : ''),
'class_type' =>$class_type
));
}
}
}
if($relationAnswerCard){
$option = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T');
$topic_data = $this->get_topic_folder();
foreach($select_info['content'] as $k=>$v)
{
$_topic_type = isset($v['questionTypeId'])?$v['questionTypeId']:0;
$zsytkTopicType=$_topic_type;
if($zsytkTopicType==17 && in_array($subject_id,$this->mathSubjectId)) $zsytkTopicType=7;
$this->sConn->createCommand()->insert('topic', array(
'topic_type' =>$zsytkTopicType ,
'topic_title' => '',
'folder_id' => $topic_data['folder_id'],
'subject_id' => $subject_id,
'is_delete' =>0,
'creator_id' => $teacherId,
'updater_id' => $teacherId,
'is_word_topic'=>1,
'create_time' => time(),
'update_time' => time(),
));
$last_insert_id = $this->sConn->createCommand("select last_insert_id()")->queryRow();
$topic_id=$last_insert_id['last_insert_id()'];
$this->sConn->createCommand()->insert('topic_item', array(
'topic_id' => $topic_id,
'topic_type' => $_topic_type,
'topic_title' => ''
));
//增加topic_option
if(($_topic_type==1 && $v['optionCount']>0) || ($_topic_type ==11 && $v['optionCount']>0) || ($_topic_type ==2 && $v['optionCount']>0))
{
$answers = explode(',',$v['answer']);
if($answers && isset($answers[0]) && !empty($answers[0])){
$options = array_chunk($option,$v['optionCount']);
if(isset($options[0]) && !empty($options[0])){
foreach($options[0] as $item=>$val)
{
$this->sConn->createCommand()->insert('topic_item_option', array(
'topic_id' => $topic_id,
'option_id' => 0,
'option_content' => '',
'option_correct' => in_array($val,$answers)?1:0,
'option_score' => 0,
'sort_order' => $item,
));
}
}
}
}
$this->sConn->createCommand()->insert('topic_use', array(
'topic_id' => $topic_id,
'mode' => 1,
'teacher_id' => $teacherId,
'paper_id' =>$newPaperId
));
$questionCount = 0;
$questionScoreStr = '';
if(isset($v['scores']) && !empty($v['scores'])){
$scoresArr = explode(',',$v['scores']);
if($scoresArr){
$questionCount = count($scoresArr);
$questionScoreStr = $v['scores'];
}
}
foreach($paperIds as $p)
{
$this->sConn->createCommand()->insert('paper_topic_relation', array(
'paper_id' => $p,
'topic_id' => $topic_id,
'no' => $v['questionNum'],
'order' => $v['questionNum'],
'mode' => 1,
'type' => $_topic_type,
'score' =>$v['fullScore'],
'question_count' => $questionCount,
'question_score_str' => $questionScoreStr
));
}
if($markType==4 && !in_array($v['questionTypeId'],array(1,11,2)))
{
if(isset($json['new_items'][$k]['alias'])){
$topicNo=$json['new_items'][$k]['alias'];
}elseif(isset($v['alias'])){
$topicNo=$v['alias'];
}
if(!$topicNo) $topicNo=$v['questionNum'];
$this->sConn->createCommand()->insert('marking_topic', array(
'exam_group_id' => $newExamGroupId,
'topic_id' => $topic_id,
'topic_type' => $_topic_type,
'topic_index' =>$v['questionNum'],
'topic_no' =>$topicNo,
'topic_score' =>$v['fullScore']
));
}
}
$total = $json['total_score'];
$topics_count = count($select_info['content']);
$tpl_data=json_encode($json);
$this->sConn->createCommand("update exam_group set is_answersheet =0 where exam_group_id = ".$newExamGroupId )->execute();
$this->sConn->createCommand("update exam set tpl_data ='".$tpl_data."' where exam_group_id = ".$newExamGroupId )->execute();
$this->sConn->createCommand("update paper set score = ".$total.",topics_count = ".$topics_count.",is_labelled = 0 where paper_id in (".implode(',',$paperIds).")")->execute();
$insert="insert into third_answer_sheet(`name`,`exam_group_id`,`ke_topic_num`,`tian_topic_num`,`zu_topic_num`,`xuan_topic_num`,`file_path`,`sheet_answer`,`sheet_score`,`create_time`,`update_time`,`position`,`online_card`,`online_card_pdf`,`is_qrcode_online`) ";
$insert.=" values('".$name."','".$newExamGroupId."','".$KeGuanTi."','".$TianKongTi."','".$ZhuGuanTi."','".$XuanZuoTi."','".$files['ucloudZipUrl']."','".$sheet_answer."','".$sheet_score."','".time()."','".time()."','".$positionJson."',1,'".$files['ucloudPdfUrl']."','0') ";
$this->sConn->createCommand($insert)->execute();
}
$transaction->commit();
}catch(Exception $e){
$transaction->rollBack();
echo json_encode(array('success'=>0,'message'=>'创建失败'));exit;
}
}
if(!$error){
echo json_encode(array('success'=>1,'message'=>'创建成功','result'=>Yii::app()->createUrl('third/index'),'exam_group_id'=>$newExamGroupId));exit;
}
}
// 上传答题卡相关文件
private function uploadAnswerCardPdf($examGroupId,$positionJson,$pdfUrl){
$card_file=array();
$card_pdf='';
$ucloudZipUrl='';
$ucloudPdfUrl='';
if (empty($_FILES)) {
$error['message'] = '未找到上传文件!';
echo json_encode($error);exit();
}else {
// debug($_FILES);
foreach ($_FILES as $k => $v) {
if (isset($v) && !empty($v)) {
if (!isset($v['size']) || $v['size'] >= 8388608) {
$error['message'] = '文件超过8M!';
echo json_encode($error);
exit();
}
$ext = substr($v['name'], strrpos($v['name'], '.') + 1);
if (!isset($v['name']) || !in_array($ext, array('doc', 'docx', 'pdf', 'bmp', 'jpg', 'jpeg', 'png', 'txt'))) {
$error['message'] = '文件格式不正确!';
echo json_encode($error);
exit();
}
if ($ext == 'pdf') {
$card_pdf = "upload/ThirdSheet/" . $examGroupId . '_'.time().'.pdf';
if (!move_uploaded_file($v["tmp_name"], $card_pdf)) {
$error['message'] = '保存Pdf文件失败!';
echo json_encode($error);
exit();
}
} else {
$card_file[] = $v;
}
}
}
$fixName = 'upload/tmpDir/ThirdSheet/' . date('Y') . '/' . date('m') . '/' . date('j') . '/';
$ucloudPdfUrl = '';
if (!file_exists($fixName)) {
mkdir($fixName, 0777, true);
}
$zipFileName = $examGroupId .'_'.time().'.zip';
$pathName = $fixName . $zipFileName;
$zip = new ZipArchive;
$zip->open($pathName, ZipArchive::CREATE);
foreach ($card_file as $k => $v) {
$zip->addFile($v['tmp_name'], iconv('utf-8', 'gbk//ignore', $v['name']));
}
$zip->addFromString('json.txt', $positionJson);
$zip->close();
//FIXME 20191204
$ucloud = new Qcloud();
//上传压缩包
$rename = 'zsyas2/cardonline/' . $this->schoolId . '/' . date('Y') . '/' . date('m') . '/' . date('d') . '/' . $zipFileName;
$uploadInfo = $ucloud->putFile($rename, $pathName);
@unlink($pathName);
if ($uploadInfo['status'] == 0) {
$error['success'] = 0;
$error['message'] = '答题卡文件上传失败! ';
echo json_encode($error);
exit();
} else {
$ucloudZipUrl = $uploadInfo['url'];
}
//上传Pdf
if ($pdfUrl) {
$ucloudPdfUrl=$pdfUrl;
// $card_pdf = "upload/ThirdSheet/" . $examGroupId . '.pdf';
// $content = file_get_contents($pdfUrl);
//
// file_put_contents($card_pdf, $content);
//
// $uploadPdfName = 'zsyas2/cardonline/' . $this->schoolId . '/' . date('Y') . '/' . date('m') . '/' . date('d') . '/' . time() . '.pdf';
// $uploadInfo = $ucloud->putFile($uploadPdfName, $card_pdf);
//
// if ($uploadInfo['status'] == 0) {
// @unlink($card_pdf);
// $error['success'] = 0;
// $error['message'] = '答题卡PDF文件上传失败!';
// echo json_encode($error);
// exit();
// } else {
// @unlink($card_pdf);
// $uploadInfo['url'] = str_replace("%2F", "/", $uploadInfo['url']);
// $ucloudPdfUrl = $uploadInfo['url'];
// }
}
//单独上传position.txt
if($positionJson){
$positionTxt="upload/ThirdSheet/" .$examGroupId.'_'.time().'.txt' ;
file_put_contents($positionTxt, $positionJson);
$uploadTxtName = 'zsyas2/cardonline/'.$this->schoolId.'/'. date('Y') . '/' . date('m') . '/' . date('d').'/' .time().'.txt' ;
$uploadInfo = $ucloud->putFile($uploadTxtName,$positionTxt);
if ($uploadInfo['status'] == 0) {
@unlink($positionTxt);
$error['success']=0;
$error['message'] = 'Position文件上传失败!';
echo json_encode($error);exit();
}else{
@unlink($positionTxt);
$uploadInfo['url'] = str_replace("%2F","/",$uploadInfo['url']);
$ucloudTxtUrl=$uploadInfo['url'];
}
}
}
return array(
'ucloudZipUrl'=>$ucloudZipUrl,
'ucloudPdfUrl'=>$ucloudPdfUrl,
'positionUrl'=>$ucloudTxtUrl
);
}
//处理在线答题卡tpl_data
private function updateTplData($select_info,$half_score,$sheet_answer,$sheet_score,$totals,$json){
$subject_id=$this->subjectId;
$exam_ids = array();
$_new_items = array();
$required_count = 0; //分组统计,即选做题中,必做题数量
$isDisplay = 1; //是否使用别名,
$selectTopicGroupScore = 0; //计算可能多分组情况总分
if ($select_info) {
if ($select_info && isset($select_info['content']) && !empty($select_info['content'])) {
//
$selectTopicGroupNum = 0; //分组试题显示序号
$nowGroupId = 0; //分组标志
$letterNum = 0;
$nowSameAliasNo=0; //选做题小题组序号
$sameAliasLetter=0;
foreach ($select_info['content'] as $k => $sc) {
//校验别名
if (isset($sc['alias']) && !empty($sc['alias'])) {
if (!preg_match('/^[0-9.\~]+$/u', $sc['alias']) || !is_numeric(substr($sc['alias'], -1)) || strlen($sc['alias']) > 6) {
$this->output(0, "别名格式不正确,别名允许字符【0-9.】且总长度不大于6位,请重新输入,题号:" . $sc['questionNum']);
exit;
}
}
if (isset($sc['questionTypeId'])) {
if ($sc['questionTypeId'] == 11 && in_array($subject_id,$this->mathSubjectId)) {
$this->output(0, "第三方暂不支持不定项选择题");
exit;
}
//分组判断
if (!isset($sc['groupid'])) {
$selectTopicGroupNum++;
$selectTopicGroupScore += $sc['fullScore'];
} elseif ($nowGroupId != $sc['groupid']) {
$isDisplay = 1;
$selectTopicGroupNum++;
$selectTopicGroupNum = isset($sc['alias']) ? $sc['alias'] : $selectTopicGroupNum;
$nowGroupId = $sc['groupid'];
if(isset($sc['smTopicLen']) && $sc['smTopicLen']){
$required_count+=$sc['smTopicLen'];
$selectTopicGroupScore += ($sc['fullScore']*$sc['smTopicLen']);
}else{
$required_count++;
$selectTopicGroupScore += $sc['fullScore'];
}
$letterNum = 0;
$sameAliasLetter=0;
}
if(isset($sc['sameAliasNo']) && $sc['sameAliasNo'] && $sc['sameAliasNo']!=$nowSameAliasNo){
$sameAliasLetter++;
$nowSameAliasNo=$sc['sameAliasNo'];
}
$_new_items[$k]['sameAliasNo']=isset($sc['sameAliasNo'])?$sc['sameAliasNo']:0;
$_new_items[$k]['smTopicLen']=isset($sc['smTopicLen'])?$sc['smTopicLen']:0;
$_new_items[$k]['id'] = (int)$sc['questionNum'];
$_new_items[$k]['showNum'] = (string)$selectTopicGroupNum;
if ($sc['questionTypeId'] == 17) {
//判断选做题小题组
if($sameAliasLetter){
$_new_items[$k]['alias'] = (string)$sc['alias'] .$this->numToLetter($sameAliasLetter-1);
}else{
$_new_items[$k]['alias'] = (string)$selectTopicGroupNum . $this->numToLetter($letterNum);
}
} else {
if (isset($sc['alias'])) {
$_new_items[$k]['alias'] = (string)$sc['alias'];
} else {
$_new_items[$k]['alias'] = (string)$selectTopicGroupNum;
}
}
if(!$_new_items[$k]['alias']){
$_new_items[$k]['alias']=(int)$sc['questionNum'];
}
$_new_items[$k]['score'] = $sc['fullScore'];
$_new_items[$k]['topic_type'] = (string)$sc['questionTypeId'];
$_new_items[$k]['group_id'] = $sc['groupid'];
//新增逻辑题型
if (isset($sc['marktype'])) {
$_new_items[$k]['logic_type'] = $sc['marktype'];
}
//每道题科目
if (isset($sc['subject'])) {
$_new_items[$k]['subject'] = $sc['subject'];
}
$letterNum++;
//自动批阅
if(isset($sc['reviewSwitch']) && $sc['reviewSwitch']==1){
$_new_items[$k]['reviewSwitch'] = $sc['reviewSwitch']; //自动批阅开关
$_new_items[$k]['reviewWordNumber'] = $sc['reviewWordNumber']; //字数
$_new_items[$k]['reviewTopicImg'] = $sc['reviewTopicImg']; //试题截图链接
}
}
}
}
}
//处理半对分
$tplRules=array();
if($half_score){
$halfScoreArr=json_decode($half_score,true);
$sheetAnswerArr=json_decode($sheet_answer,true);
$sheet_score_array = json_decode($sheet_score, 1);
foreach ($halfScoreArr as $key => $val){
$ruleScore=0;
$ruleAnswer='';
if(isset($sheet_score_array[$key])){
$ruleScore=$sheet_score_array[$key];
}
if(isset($sheetAnswerArr[$key])){
$ruleAnswer=$sheetAnswerArr[$key];
}
$tplRules[$key]=array(
'topicNo'=>$key,
'topic_id'=>'',
'rule_type'=>2,
'rule_answer'=>$ruleAnswer,
'rule_score'=>$ruleScore,
'rule_score_half'=>$val
);
}
}
$json['disabled']=0;
$json['paper']=0;
$json['line']=0;
$json['anyway']=0;
$json['is_display']=$isDisplay;
$json['totals']=$totals;
$json['total_score']=$selectTopicGroupScore;
$json['scores']=$selectTopicGroupScore;
if(!isset($json['subjectId'])){
$json['subjectId']=$subject_id;
}
$json['new_items']=$_new_items;
$json['new_rules']=$tplRules;
$json['reviewer']='';
$json['is_new_marking']=1;
$json['required']=$required_count;
$json['times']=0;
$json['branch']=0;
if ($subject_id == 8) {
$json['isNewEnglish']=1;
}
return $json;
}
private function get_topic_folder()
{
$data = $this->sConn->createCommand("select * from topic_folder where is_system = 1")->queryRow();
if($data)
{
return $data;
}
return false;
}
//保存为第三方在线答题卡模板
public function actionSaveTemplateByOnline(){
$name = Req::post("title");
$layout = isset($_POST['layout'])?$_POST['layout']:'';
$select_card_type = isset($_POST['select_card_type'])?$_POST['select_card_type']:'1';
$total_score = isset($_POST['total_score'])?$_POST['total_score']:'0';
$total_topics = isset($_POST['total_topics'])?$_POST['total_topics']:'0';
$tpl_data = isset($_POST['tpl_data'])?$_POST['tpl_data']:'';
$error['success']=0;
// $count=$this->sConn->createCommand("select count(*) as count from third_tpl where subject_id='{$this->subjectId}'")->queryRow();
// if($count && $count['count']>9){
// $error['message'] = '同一学科最多保存10个模板';
// echo json_encode($error);exit();
// }
// if($tpl_data){
//
// $positionTxt="upload/ThirdSheet/" .$name.time().'.txt' ;
// file_put_contents($positionTxt, $tpl_data);
// $ucloud = new Qcloud();
// $uploadTxtName = 'zsyas2/cardonline/'.$this->schoolId.'/'. date('Y') . '/' . date('m') . '/' . date('d').'/' .time().'.txt' ;
// $uploadInfo = $ucloud->putFile($uploadTxtName,$positionTxt);
//
// if ($uploadInfo['status'] == 0) {
// @unlink($positionTxt);
// $error['success']=0;
// $error['message'] = 'Position文件上传失败!';
// echo json_encode($error);exit();
// }else{
// @unlink($positionTxt);
// $uploadInfo['url'] = str_replace("%2F","/",$uploadInfo['url']);
// $ucloudTxtUrl=$uploadInfo['url'];
// }
//
// }
$rs = $this->sConn->createCommand()->insert('third_tpl',array(
'title' => $name,
'subject_id' => $this->subjectId,
'school_card_status' => 0,
'school_card_length' => 0,
'layout' => $layout,
'select_card_type' => $select_card_type,
'tpl_data' => $tpl_data,
'total_score' => $total_score,
'total_topics' => $total_topics,
'create_time' => time()
));
if($rs){
$error['success']=1;
$error['message'] = '保存成功';
echo json_encode($error);exit();
}
echo json_encode($error);exit();
}
//读取模板列表
public function actionTplList(){
$criteria = new CDbCriteria();
$criteria->addCondition('subject_id=:subject_id');
$criteria->params[':subject_id'] = Yii::app()->session['session_duoxueke_subject_id'];
$criteria->addCondition('school_card_length=0');
$criteria->order = 'third_tpl_id desc';
$thisTpls = SThirdTplModel::model()->findAll($criteria);
$list=array();
if($thisTpls)
{
foreach ($thisTpls as $val){
$jsonData='';
$tplData=$val->tpl_data;
if(strpos($tplData,'http://')!==false || strpos($tplData,'https://')!==false){
if(strpos($tplData,'zxhx.cn-bj.ufileos.com')!==false){
$tplData=str_replace('zxhx.cn-bj.ufileos.com','zxhx-u-1302712961.cos.ap-beijing.myqcloud.com',$tplData);
}
$jsonData=fileGetContents($tplData);
}else{
$jsonData=$val->tpl_data;
}
$jsonDataArr=json_decode($jsonData,true);
if(isset($jsonDataArr['position'])){
$list[]=array(
'third_tpl_id'=>$val->third_tpl_id,
'title'=>$val->title,
'total_score'=>$val->total_score,
'total_topics'=>$val->total_topics,
'tpl_data'=>jsonEncode($jsonDataArr['position'])
);
}else{
$list[]=array(
'third_tpl_id'=>$val->third_tpl_id,
'title'=>$val->title,
'total_score'=>$val->total_score,
'total_topics'=>$val->total_topics,
'tpl_data'=>$jsonData
);
}
}
$data['thisTpls'] = $list;
}
$data['success']=1;
exit(json_encode($data));
}
//删除模板
public function actionDelTpl(){
$third_tpl_id = Req::post("third_tpl_id");
if($third_tpl_id>0){
$thirdTpl = SThirdTplModel::model()->deleteAll('third_tpl_id=:third_tpl_id',array(':third_tpl_id'=>$third_tpl_id));
if($thirdTpl){
echo json_encode(array('success'=>1,'msg'=>'1'));exit;
}
}
echo json_encode(array('success'=>0,'msg'=>'失败'));exit;
}
//读取考试答题卡
public function actionGetTemplateByExamGroupId(){
$exam_group_id = Req::post("examGroupId");
$isHide = Req::post("isHide");
if(!$exam_group_id){
$data['success']=0;
$data['msg']='考试id不正确';
exit(json_encode($data));
}
//验证是否有在线答题卡
$thirdAnswerSheet=$this->sConn->createCommand("select `name`,`file_path`,`position`,`online_card_pdf`,`online_card`,`is_qrcode_online`,`sheet_answer`,`sheet_score`,`ke_topic_num`,`tian_topic_num`,`zu_topic_num`,`xuan_topic_num`,`multiplex_id`,`create_time`,`update_time` from third_answer_sheet where exam_group_id='".$exam_group_id."' and online_card=1")->queryRow();
$data['success']=1;
$data['data']=array();
//判断全学科
$examGroup=$this->sConn->createCommand("select qxk_paper_id,is_third from exam_group where exam_group_id='".$exam_group_id."'")->queryRow();
$examData=$this->sConn->createCommand("select tpl_data,exam_id,subject_id from exam where exam_group_id='{$exam_group_id}'")->queryAll();
//判断全学科白名單
$data['new_answer_sheet_subject']=0;
if($examGroup['qxk_paper_id'] && $examGroup['is_third']==0){
$rs = http('/cms/api/new_answer_sheet_subject/'.$examData[0]['subject_id'],'GET',$this->schoolId,array(),'cgi');
$rs=json_decode($rs,true);
if(isset($rs['errCode']) && $rs['errCode']=='00' && $rs['data']==true){
$data['new_answer_sheet_subject']=1;
}
}
if($thirdAnswerSheet){
$nowMultiplexId=$thirdAnswerSheet['multiplex_id'];
//判断是否有复用答题卡记录
if(!$nowMultiplexId){
$mult=$this->sConn->createCommand("select multiplex_id from online_card_multiplex where exam_group_id='{$exam_group_id}' and is_copy=0")->queryRow();
if(!$mult){
//旧数据没有复用记录,需要补一条记录
$onlineCardMultiModel=new SOnlineCardMultiplex();
$onlineCardMultiModel->exam_group_id=$exam_group_id;
$onlineCardMultiModel->name=$thirdAnswerSheet['name'];
$onlineCardMultiModel->file_path=$thirdAnswerSheet['file_path'];
$onlineCardMultiModel->position=$thirdAnswerSheet['position'];
$onlineCardMultiModel->online_card_pdf=$thirdAnswerSheet['online_card_pdf'];
$onlineCardMultiModel->is_qrcode_online=$thirdAnswerSheet['is_qrcode_online'];
$onlineCardMultiModel->is_download=0;
$onlineCardMultiModel->is_copy=0;
$onlineCardMultiModel->create_time=$thirdAnswerSheet['create_time'];
$onlineCardMultiModel->update_time=$thirdAnswerSheet['update_time'];
if($onlineCardMultiModel->save()){
$nowMultiplexId=$onlineCardMultiModel->multiplex_id;
$this->sConn->createCommand("update third_answer_sheet set multiplex_id='{$nowMultiplexId}' where exam_group_id='{$exam_group_id}'")->execute();
}
}else{
$nowMultiplexId=$mult['multiplex_id'];
$this->sConn->createCommand("update third_answer_sheet set multiplex_id='{$mult['multiplex_id']}' where exam_group_id='{$exam_group_id}'")->execute();
}
}
// if($thirdAnswerSheet['position']){
// if(strpos($thirdAnswerSheet['position'],'http://')!==false || strpos($thirdAnswerSheet['position'],'https://')!==false){
// $thirdAnswerSheet['position']=fileGetContents($thirdAnswerSheet['position']);
// }
// }
if(!$examData){
$data['msg']='考试id不正确';
exit(json_encode($data));
}
$examIds=array();
foreach ($examData as $datum){
$examIds[]=$datum['exam_id'];
}
//判断是否有修改的判分规则
$tplData=json_decode($examData[0]['tpl_data'],true);
$questions=array();
if(isset($tplData['new_items'])){
foreach ($tplData['new_items'] as $val){
$alias=isset($val['alias'])?$val['alias']:$val['id'];
$temp=array(
'questionNum'=>(int)$val['id'],
'questionTypeId'=>(int)$val['topic_type'],
'fullScore'=>(string)$val['score'],
'alias'=>$alias,
);
if(isset($tplData['new_rules']) && isset($tplData['new_rules'][$val['id']])){
$temp['ruleScoreHalf']=$tplData['new_rules'][$val['id']]['rule_score_half'];
}
$questions[]=$temp;
}
}
$thirdAnswerSheet['questions']=$questions;
$thirdAnswerSheet['is_third']=$examGroup['is_third'];
if($examGroup['qxk_paper_id']){
if(isset($tplData['item_collect'])){
$itemCollect=array();
//读取大题型
$allSubjectTopicType=$this->schoolManager->getAllSubjectTopicType($examData[0]['subject_id']);
$allTopicTypeArr=array();
if($allSubjectTopicType){
foreach ($allSubjectTopicType as $item){
$allTopicTypeArr[$item['topic_type_id']]=$item['topic_type_name'];
}
}
//读取基础题型
$allBasicTopicTypeArr=array();
$allSubjectBasicTopicType=$this->schoolManager->getAllSubjectBasicType();
if($allSubjectBasicTopicType){
foreach ($allSubjectBasicTopicType as $item){
$allBasicTopicTypeArr[$item['btt_id']]=$item['btt_name'];
}
}
foreach ($tplData['item_collect'] as $key => $datum){
$topicTypeName='';
$topicBasicName='';
$topicCount=0;
if($datum['topicBasicType']==17){
$topicTypeName='选做题';
$topicBasicName='选做';
$topicCount='2选1'; //奇葩的需求
}else{
if(isset($allTopicTypeArr[$datum['topicType']])){
$topicTypeName=$allTopicTypeArr[$datum['topicType']];
}
if(isset($allBasicTopicTypeArr[$datum['topicBasicType']])){
$topicBasicName=$allBasicTopicTypeArr[$datum['topicBasicType']];
}
$topicCount=$datum['topicCount'];
}
$itemCollect[]=array(
"topic_type_name"=>$topicTypeName,
'topic_basic_name'=>$topicBasicName,
'topic_count'=>$topicCount,
'total_score'=>$datum['totalScore']
);
}
$data['item_collect']=$itemCollect;
}
}
$where[]="exam_group_id={$exam_group_id}";
if($isHide){
$where[]="is_hide=1";
}else{
$where[]="is_hide=0";
}
$isDownload=0;
$multi=$this->sConn->createCommand("select multiplex_id,exam_group_id,`name`,file_path,`position`,online_card_pdf,is_qrcode_online,is_download,is_copy,update_time from online_card_multiplex where ".implode(' and ',$where))->queryAll();
if($multi){
foreach ($multi as $key =>$value){
if($nowMultiplexId==$value['multiplex_id']){
$multi[$key]['active']=1;
}else{
$multi[$key]['active']=0;
}
if($value['is_download']==1){
$isDownload=1;
}
}
}
$data['multiplex']=$multi;
//查询是否有下载记录
if(!$isDownload){
$checkDownload=$this->sConn->createCommand("select is_download from online_card_multiplex where exam_group_id='".$exam_group_id."' and is_download=1")->queryRow();
if($checkDownload){
$isDownload=1;
}
}
//判断是否上传试卷
if(in_array($this->subjectId,$this->mathSubjectId) || $this->subjectId==12){
$checkPaperUpload=$this->sConn->createCommand("select * from topic_word where exam_group_id='".$exam_group_id."' and status>0")->queryRow();
}else{
$checkPaperUpload=$this->sConn->createCommand("select * from third_multi_template where exam_group_id='".$exam_group_id."' and (topic_upload=1 or answer_upload=1)")->queryRow();
}
if($checkPaperUpload){
$thirdAnswerSheet['paper_uploaded']=1;
}else{
$thirdAnswerSheet['paper_uploaded']=0;
}
//查询协助状态
$thirdAnswerSheet['assist_status']=0;
$assist=$this->conn->createCommand("select status from abnormal_template where exam_group_id={$exam_group_id}")->queryRow();
if($assist){
$thirdAnswerSheet['assist_status']=$assist['status'];
}
$data['success']=1;
$thirdAnswerSheet['is_download']=$isDownload;
$data['data']=$thirdAnswerSheet;
}else{
$data['data']=null;
}
exit(json_encode($data));
}
//切换模板,清空原模板数据
public function actionClearExamTpl(){
$exam_group_id = Req::post("examGroupId");
$data['success']=0;
if(!$exam_group_id){
$data['msg']='参数错误';
exit(json_encode($data));
}
$exam=$this->sConn->createCommand("select exam_id,status,tpl_data from exam where exam_group_id='{$exam_group_id}'")->queryAll();
if(!$exam){
$data['msg']='考试id不正确';
exit(json_encode($data));
}
if($exam['status']==1 || $exam['status']==4){
$data['msg']='已上传成绩,不能切换答题卡';
exit(json_encode($data));
}
$examIds=array();
$paperIds=array();
$topicIds=array();
$tplData=array();
foreach ($exam as $val){
$examIds[]=$val['exam_id'];
if(!$tplData){
$tplData=json_decode($val['tpl_data'],true);
}
}
$paperData=$this->sConn->createCommand("select paper_id from paper where exam_id in(".implode(',',$examIds).")")->queryAll();
if(!$paperData){
$data['msg']='试卷不存在';
exit(json_encode($data));
}
foreach ($paperData as $val){
$paperIds[]=$val['paper_id'];
}
$paperTopic=$this->sConn->createCommand("select topic_id from paper_topic_relation where paper_id='".$paperIds[0]."'")->queryAll();
foreach ($paperTopic as $val){
$topicIds[]=$val['topic_id'];
}
$transaction = $this->sConn->beginTransaction();
try{
if(isset($tplData['items'])){
unset($tplData['items']);
}
if(isset($tplData['new_items'])){
unset($tplData['new_items']);
}
if(isset($tplData['new_rules'])){
unset($tplData['new_rules']);
}
$tplData['scores']=0;
$tplData['times']=0;
$this->sConn->createCommand("delete from topic where topic_id in (".implode(',',$topicIds).")" )->execute();
$this->sConn->createCommand("delete from topic_item where topic_id in (".implode(',',$topicIds).")" )->execute();
$this->sConn->createCommand("delete from topic_use where topic_id in (".implode(',',$topicIds).")" )->execute();
$this->sConn->createCommand("delete from topic_item_option where topic_id in (".implode(',',$topicIds).")" )->execute();
$this->sConn->createCommand("delete from paper_topic_relation where paper_id in (".implode(',',$paperIds).")" )->execute();
$this->sConn->createCommand("delete from marking_topic where exam_group_id =".$exam_group_id )->execute();
$this->sConn->createCommand("delete from third_answer_sheet where exam_group_id =".$exam_group_id )->execute();
$this->sConn->createCommand("delete from online_card_multiplex where exam_group_id =".$exam_group_id )->execute();
$this->sConn->createCommand("update exam_group set is_answersheet =0 where exam_group_id = ".$exam_group_id )->execute();
$this->sConn->createCommand("update exam set tpl_data ='".jsonEncode($tplData)."' where exam_group_id = ".$exam_group_id )->execute();
$this->sConn->createCommand("update paper set score = 0,topics_count = 0,is_labelled = 0 where exam_id in (".implode(',',$examIds).")")->execute();
$transaction->commit();
echo json_encode(array('success'=>1));exit;
}catch(Exception $e)
{
$transaction->rollBack();
echo json_encode(array('success'=>0));exit;
}
}
//修改第三方考试信息
public function actionAjaxModifyThirdExam(){
$exam_group_id = Req::post("examGroupId");
$type=Req::post('type');
$name=Req::post('examName');
$examDate=Req::post('examDate');
$paperType=Req::post('paperType');
$relationAnswerCard=false;
$data['success']=0;
if(!matchStrChar($name)){
$data['msg']='考试名称不能包含特殊字符!';
exit(json_encode($data));
}
if(Yii::app()->params['section']==0){
$paperType='1050';
}
$exam_group_data=ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
$transaction = $this->sConn->beginTransaction();
$exam_data = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if(!$exam_data)
{
$data['msg']='非法试卷!';
exit(json_encode($data));
}
@$tplData=json_decode($exam_data['tpl_data'],true);
if(!$tplData){
$data['msg']='非法试卷!';
exit(json_encode($data));
}
$paperData=$this->sConn->createCommand("select paper_id,is_labelled from paper where exam_id ='{$exam_data['exam_id']}'")->queryRow();
if(!$paperData){
$data['msg']='试卷不存在';
exit(json_encode($data));
}
try{
$tplData['examDate']=$examDate;
$examSql="update `exam` set `type`='".$type."',`name`='".$name."',tpl_index='".$paperType."',tpl_data='".jsonEncode($tplData)."' where exam_group_id='".$exam_group_id."'";
$this->sConn->createCommand($examSql)->execute();
if($paperData['is_labelled']>0 || $exam_group_data['is_tagging']>0){
updateExamNameToTiku($exam_group_id,$name,$this->schoolId); //同步题库
}
$transaction->commit();
$data['success']=1;
$data['msg']='编辑成功';
exit(json_encode($data));
}catch(Exception $e){
$transaction->rollBack();
$data['msg']='编辑失败';
exit(json_encode($data));
}
$data['msg']='编辑失败';
exit(json_encode($data));
}
//第三方创建在线答题卡需要准考证位数,所以需要确定年级
public function actionGetCardStatusByGrade(){
$grade=(int)Req::post("grade");
if(!in_array($grade,array(1,2,3))){
$data=array(
'success'=>0,
'msg'=>'年级不正确',
);
exit(json_encode($data));
}
$sql = "select card_length,card_status FROM grade where id='{$grade}'";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if($cardData['card_status']==0){
$cardData['card_length'] = 8;
if($this->schoolId >999){
$cardData['card_length'] = 9;
}
}
$data=array(
'success'=>1,
'data'=>$cardData,
);
exit(json_encode($data));
}
//考试扫描异常处理状态查看
public function actionGetTaskDetail(){
$examGroupId = Req::get('exam_group_id');
$grade = Req::get('grade');
$branch = Req::get('branch');
$taskModel=new AScanTask();
$task=$taskModel->getTaskByExamGroupId($examGroupId);
if($task){
$task=$task->attributes;
if($task['operator']){
$user=AssistUser::model()->findByPk($task['operator']);
$task['user']=$user->real_name;
}else{
$task['user']='--';
}
//答题卡任务耗时
if($task['scan_task_apply_time']){
if($task['scan_task']>2){
if($task['scan_task_update_time'] && ($task['scan_task_update_time']-$task['scan_task_apply_time'])>0){
$task['AstConsuming']=consuming($task['scan_task_update_time'],$task['scan_task_apply_time']);
}else{
$task['AstConsuming']='--';
}
}elseif($task['scan_task']==2){
if($task['scan_task_apply_time'] && (time()-$task['scan_task_apply_time'])>0){
$task['AstConsuming']=consuming(time(),$task['scan_task_apply_time']);
}else{
$task['AstConsuming']='--';
}
}
}else{
$task['AstConsuming']='--';
}
}
//读取扫描数量
$count=$this->schoolManager->getStudentCountByExamGroupId($examGroupId,1);
$task['count']=$count;
$data['task']=$task;
$data['exam_group_id']=$examGroupId;
$_num= '';
$use_version = '';
if(isset(Yii::app()->session['coachInfo']->use_version))
{
$use_version = Yii::app()->session['coachInfo']->use_version;
}else
{
$use_version = Yii::app()->session['coachInfo']['use_version'];
}
if(!$use_version)
{
$use_version = 100;
}
$version_number = implode('',explode('.',$use_version));
if(strlen($version_number)<7)
{
for($i=0;$i<7-strlen($version_number);$i++)
{
$_num.='0';
}
}
$version_number=(int)$version_number.$_num;
$data['version_number']=$version_number;
$data['grade']=$grade;
$data['branch']=$branch;
$this->render('scan_detail',$data);
}
//关联第三方在线答题卡
public function actionInsertThirdSheet(){
$error = array();
$examGroupId = isset($_POST['examGroupId'])?$_POST['examGroupId']:'';
$multiplexId = isset($_POST['multiplexId'])?$_POST['multiplexId']:''; //复用模板id
$text=$_POST["timu"];
//处理答题卡数据
$relationAnswerCard=true;
$name = Req::post("title");
$sheet_answer = isset($_POST['sheet_answer'])?$_POST['sheet_answer']:'';
$sheet_score = isset($_POST['sheet_score'])?$_POST['sheet_score']:'';
$post = json_decode($text,true);
$KeGuanTi = isset($post["KeGuanTi"])?$post["KeGuanTi"]:0;
$TianKongTi = isset($post["TianKongTi"])?$post["TianKongTi"]:0;
$ZhuGuanTi = isset($post["ZhuGuanTi"])?$post["ZhuGuanTi"]:0;
$XuanZuoTi = isset($post["XuanZuoTi"])?$post["XuanZuoTi"]:0;
$DuoXuanTi = isset($post["DuoXuanTi"]) ? $post["DuoXuanTi"] : 0;
$pdfUrl =isset($_POST["pdf_url"])?$_POST["pdf_url"]:0;
$positionJson=isset($_POST['position'])?$_POST['position']:'';
$select_info = isset($_POST["question_info"]) ? $_POST["question_info"] : '';
$half_score = isset($_POST['sheet_halfscore']) ? $_POST['sheet_halfscore'] : ''; //多选题半对分
$zhunkaozhen_length = isset($_POST['zhunkaozhen_length']) ? $_POST['zhunkaozhen_length'] : 0;
$isUploadScore=false; //是否已上传成绩
$isLabelled=false;
$exam_data = Exam::model()->findAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$examGroupId));
if(!$exam_data)
{
echo json_encode(array('success'=>0,'message'=>'非法試卷'));exit;
}
$teacherId = $exam_data[0]['teacher_id'];
$subject_id = $exam_data[0]['subject_id'];
@$tplData=json_decode($exam_data[0]['tpl_data'],true);
if(!$tplData){
echo json_encode(array('success'=>0,'message'=>'非法試卷'));exit;
}
if ($zhunkaozhen_length) {
if ($exam_data[0]['school_card_status'] == 1) {
if ($zhunkaozhen_length < $exam_data[0]['school_card_length']) {
echo json_encode(array('success'=>0,'message'=>'上传失败,准考证的长度不符;本试卷使用学校准考证号,长度为'.$exam_data[0]['school_card_length']));exit;
}
} else {
if ($zhunkaozhen_length < 8 && $this->schoolId < 999) {
echo json_encode(array('success'=>0,'message'=>'上传失败,准考证的长度不符;本试卷使用系统准考证号,长度为8'));exit;
}
if ($zhunkaozhen_length < 9 && ($this->schoolId > 999 && $this->schoolId < 9999)) {
echo json_encode(array('success'=>0,'message'=>'上传失败,准考证的长度不符;本试卷使用系统准考证号,长度为9'));exit;
}
}
}
if(!$text || !$name || !$sheet_answer || !$sheet_score){
$error['message'] = '题目参数错误';
echo json_encode($error);exit();
}
if(!$positionJson){
$error['message'] = '定位信息异常';
echo json_encode($error);exit();
}
if($error){
echo json_encode(array('success'=>0,'message'=>join(',',$error)));exit;
}else{
$time = time();
$paper_data = $this->schoolManager->getPaperByExamId($exam_data[0]['exam_id']);
if ($paper_data) {
/**
* 验证已上传成绩,无法再次编辑
*/
if ($exam_data) {
foreach ($exam_data as $v) {
$exam_ids[$v['exam_id']] = $v['exam_id'];
}
if ($exam_ids) {
$student_paper_feed=$this->sConn->createCommand("select student_id from student_paper_relation where exam_id in(".implode(',',$exam_ids).") and is_feedback=1 and is_del=0 ")->queryRow();
if ($student_paper_feed) {
$isUploadScore = true;
}
}
}
//判断是否发送标注
if ($paper_data['is_labelled'] != 0 ) {
$isLabelled = true;
}
}
//验证是否已下载,是否是复用的答题卡
if($multiplexId){
$checkMulti=$this->sConn->createCommand("select is_download,is_copy from online_card_multiplex where multiplex_id = '{$multiplexId}' ")->queryRow();
if($checkMulti['is_download']){
$error['success']=0;
$error['message'] = '上传失败,答题卡已经下载!';
echo json_encode($error);exit();
}
if($checkMulti['is_copy']){
//只保存文件信息
$this->saveMultiplex();
}
}
$sheet_score_array = json_decode($sheet_score, 1);
if (!$sheet_score_array) {
$error['success']=0;
$error['message'] = '上传失败,未设置分数!';
echo json_encode($error);exit();
}
$score_num = count($sheet_score_array);
if ($score_num != ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $XuanZuoTi+$DuoXuanTi )) {
$error['success']=0;
$error['message'] = '上传失败,设置分数或设置题号有误!';
echo json_encode($error);exit();
}
$items = array();
$xu = 0;
$t = 0;
$z = 0;
$x = 0;
$duo = 0;
foreach ($sheet_score_array as $k => $v) {
if ($KeGuanTi >= $k) {
$items[1]['total'] = $KeGuanTi;
$items[1]['perScores'][$xu] = $v;
for ($i = 0; $i < $KeGuanTi; $i++) {
$items[1]['no'][$i + 1] = $i + 1;
}
$xu++;
} elseif ($DuoXuanTi > 0 && $KeGuanTi < $k && $k <= ($KeGuanTi + $DuoXuanTi)) {
$items[2]['total'] = $DuoXuanTi;
$items[2]['perScores'][$duo] = $v;
for ($i = $KeGuanTi; $i < ($DuoXuanTi + $KeGuanTi); $i++) {
$items[2]['no'][$i + 1] = $i + 1;
}
$duo++;
} elseif ($TianKongTi > 0 && ($KeGuanTi + $DuoXuanTi) < $k && $k <= ($KeGuanTi + $TianKongTi + $DuoXuanTi)) {
$items[5]['total'] = $TianKongTi;
$items[5]['perScores'][$t] = $v;
for ($i = ($KeGuanTi + $DuoXuanTi); $i < ($KeGuanTi + $TianKongTi + $DuoXuanTi); $i++) {
$items[5]['no'][$i + 1] = $i + 1;
}
$t++;
} elseif ($ZhuGuanTi > 0 && ($KeGuanTi + $TianKongTi + $DuoXuanTi) < $k && $k <= ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $DuoXuanTi)) {
$items[7]['total'] = $ZhuGuanTi;
$items[7]['perScores'][$z] = $v;
for ($i = ($KeGuanTi + $TianKongTi + $DuoXuanTi); $i < ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $DuoXuanTi); $i++) {
$items[7]['no'][$i + 1] = $i + 1;
}
$z++;
} elseif ($XuanZuoTi > 0 && ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $DuoXuanTi) < $k && $k <= ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $XuanZuoTi + $DuoXuanTi)) {
$items[17]['total'] = $XuanZuoTi;
$items[17]['required'] = 1;
$items[17]['score'] = $v;
$items[17]['perScores'][$x] = $v;
$_select_topic_scroe = $v;
for ($i = ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $DuoXuanTi); $i < ($KeGuanTi + $TianKongTi + $ZhuGuanTi + $XuanZuoTi + $DuoXuanTi); $i++) {
$items[17]['no'][$i + 1] = $i + 1;
}
$x++;
}
}
if (!$items) {
echo json_encode(array('success'=>0,'message'=>'上传失败,无题'));exit;
}
$select_info = json_decode($select_info, 1);
if(!isset($select_info['content']) || !$select_info['content']){
echo json_encode(array('success'=>0,'message'=>'上传失败,题目数据不能为空'));exit;
}
//检测id是否重复
$checkRepeatId=array();
foreach ($select_info['content'] as $value){
if(!isset($checkRepeatId[$value['questionNum']])){
$checkRepeatId[$value['questionNum']]=$value['questionNum'];
}else{
echo json_encode(array('success'=>0,'message'=>'上传失败,题目序号重复'.$value['questionNum']));exit;
}
}
//上传答题卡相关文件
$files=$this->uploadAnswerCardPdf($examGroupId,$positionJson,$pdfUrl);
$json=$this->updateTplData($select_info,$half_score,$sheet_answer,$sheet_score,($TianKongTi+$TianKongTi+$ZhuGuanTi+$XuanZuoTi),$tplData);
$json['items']=$items;
$exam_group_data = ExamGroup::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$examGroupId));
if($error){
echo json_encode(array('success'=>0,'message'=>join(',',$error)));exit;
}
$transaction = $this->sConn->beginTransaction();
try{
$topic_ids=array();
$paperIds=$this->schoolManager->getPaperIdsByExamIds($exam_ids);
//判断是否已关联答题卡
//判断原答题卡
$thirdAnswerSheet=$this->sConn->createCommand("select sheet_id,online_card,sheet_answer,sheet_score from third_answer_sheet where exam_group_id='".$examGroupId."'")->queryRow();
if($thirdAnswerSheet){
$oldSheetAnswer = $thirdAnswerSheet['sheet_answer'];
$oldSheetScore = $thirdAnswerSheet['sheet_score'];
if($isUploadScore || $isLabelled){
//判断答案是否改变
if (strcmp($oldSheetAnswer, $sheet_answer) != false) {
echo json_encode(array('success'=>0,'message'=>'上传失败,已上传成绩,不能修改试题答案'));exit;
}
if (strcmp($oldSheetScore, $sheet_score) != false) {
echo json_encode(array('success'=>0,'message'=>'传失败,已上传成绩,不能修改试题分数'));exit;
}
if($multiplexId){
$this->sConn->createCommand("update online_card_multiplex set file_path='{$files['ucloudZipUrl']}',online_card_pdf='{$files['ucloudPdfUrl']}',`position`='{$files['positionUrl']}',update_time='".time()."' where multiplex_id='{$multiplexId}'")->execute();
}
$insert="replace into third_answer_sheet(`name`,`exam_group_id`,`ke_topic_num`,`tian_topic_num`,`zu_topic_num`,`xuan_topic_num`,`file_path`,`sheet_answer`,`sheet_score`,`create_time`,`update_time`,`position`,`online_card`,`online_card_pdf`,`is_qrcode_online`,`select_info`) ";
$insert.=" values('".$name."','".$examGroupId."','".$KeGuanTi."','".$TianKongTi."','".$ZhuGuanTi."','".$XuanZuoTi."','".$files['ucloudZipUrl']."','".$sheet_answer."','".$sheet_score."','".time()."','".time()."','".$files['positionUrl']."',1,'".$files['ucloudPdfUrl']."','0','".json_encode($select_info)."') ";
$this->sConn->createCommand($insert)->execute();
$transaction->commit();
echo json_encode(array('success'=>1,'message'=>'创建成功'));exit;
}
$paperTopic=$this->sConn->createCommand("select topic_id,type from paper_topic_relation where paper_id ='{$paperIds[0]}'")->queryAll();
foreach ($paperTopic as $item){
$topic_ids[]=$item['topic_id'];
}
//删除数据
$this->sConn->createCommand("delete from topic where topic_id in (".implode(',',$topic_ids).")" )->execute();
$this->sConn->createCommand("delete from topic_item where topic_id in (".implode(',',$topic_ids).")" )->execute();
$this->sConn->createCommand("delete from topic_item_option where topic_id in (".implode(',',$topic_ids).")" )->execute();
$this->sConn->createCommand("delete from paper_topic_relation where paper_id in (".implode(',',$paperIds).")" )->execute();
$this->sConn->createCommand("delete from marking_topic where exam_group_id =".$examGroupId )->execute();;
$this->sConn->createCommand("delete from third_answer_sheet where exam_group_id =".$examGroupId )->execute();;
$this->sConn->createCommand("delete from topic_word where exam_group_id =".$examGroupId )->execute();
}
$option = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T');
$topic_data = $this->get_topic_folder();
foreach($select_info['content'] as $k=>$v)
{
if(isset($v['scoreColumnHtml'])){
unset($select_info['content'][$k]['scoreColumnHtml']);
}
$_topic_type = isset($v['questionTypeId'])?$v['questionTypeId']:0;
$zsytkTopicType=$_topic_type;
if($zsytkTopicType==17 && in_array($subject_id,$this->mathSubjectId)) $zsytkTopicType=7;
$this->sConn->createCommand()->insert('topic', array(
'topic_type' =>$zsytkTopicType ,
'topic_title' => '',
'folder_id' => $topic_data['folder_id'],
'subject_id' => $subject_id,
'is_delete' =>0,
'creator_id' => $teacherId,
'updater_id' => $teacherId,
'is_word_topic'=>1,
'create_time' => time(),
'update_time' => time(),
));
$last_insert_id = $this->sConn->createCommand("select last_insert_id()")->queryRow();
$topic_id=$last_insert_id['last_insert_id()'];
$this->sConn->createCommand()->insert('topic_item', array(
'topic_id' => $topic_id,
'topic_type' => $_topic_type,
'topic_title' => ''
));
//增加topic_option
if(($_topic_type==1 && $v['optionCount']>0) || ($_topic_type ==11 && $v['optionCount']>0) || ($_topic_type ==2 && $v['optionCount']>0))
{
$answers = explode(',',$v['answer']);
if($answers && isset($answers[0]) && !empty($answers[0])){
$options = array_chunk($option,$v['optionCount']);
if(isset($options[0]) && !empty($options[0])){
foreach($options[0] as $item=>$val)
{
$this->sConn->createCommand()->insert('topic_item_option', array(
'topic_id' => $topic_id,
'option_id' => 0,
'option_content' => '',
'option_correct' => in_array($val,$answers)?1:0,
'option_score' => 0,
'sort_order' => $item,
));
}
}
}
}
$this->sConn->createCommand()->insert('topic_use', array(
'topic_id' => $topic_id,
'mode' => 1,
'teacher_id' => $teacherId,
'paper_id' =>$paperIds[0]
));
$questionCount = 0;
$questionScoreStr = '';
if(isset($v['scores']) && !empty($v['scores'])){
$scoresArr = explode(',',$v['scores']);
if($scoresArr){
$questionCount = count($scoresArr);
$questionScoreStr = $v['scores'];
}
}
foreach($paperIds as $p)
{
$this->sConn->createCommand()->insert('paper_topic_relation', array(
'paper_id' => $p,
'topic_id' => $topic_id,
'no' => $v['questionNum'],
'order' => $v['questionNum'],
'mode' => 1,
'type' => $_topic_type,
'score' =>$v['fullScore'],
'question_count' => $questionCount,
'question_score_str' => $questionScoreStr
));
}
if($exam_group_data['mark_type']==4 && !in_array($v['questionTypeId'],array(1,11,2)))
{
if(isset($json['new_items'][$k]['alias'])){
$topicNo=$json['new_items'][$k]['alias'];
}elseif(isset($v['alias'])){
$topicNo=$v['alias'];
}
if(!$topicNo) $topicNo=$v['questionNum'];
//判断自动批阅字段
$autoType=0;
if($subject_id==8){
if(in_array($v['marktype'],array(13,16,17)) && !$questionCount){
$autoType=1;
}elseif($_topic_type==5){
$autoType=2;
}
}
$this->sConn->createCommand()->insert('marking_topic', array(
'exam_group_id' => $examGroupId,
'topic_id' => $topic_id,
'topic_type' => $_topic_type,
'topic_index' =>$v['questionNum'],
'topic_no' =>$topicNo,
'topic_score' =>$v['fullScore'],
'auto_type'=>$autoType
));
}
}
if(!$multiplexId){
//没有复用记录,初始化一条记录
$insertSql="insert into online_card_multiplex(`exam_group_id`,`name`,`file_path`,`position`,`online_card_pdf`,`create_time`,`update_time`) values";
$insertSql.="('".$examGroupId."','".$name."','".$files['ucloudZipUrl']."','".$files['positionUrl']."','".$files['ucloudPdfUrl']."','".time()."','".time()."')";
$this->sConn->createCommand($insertSql)->execute();
$last_insert_id = $this->sConn->createCommand("select last_insert_id()")->queryRow();
$multiplexId=$last_insert_id['last_insert_id()'];
}else {
//更新复用记录
$updateSql = "update online_card_multiplex set `file_path`='{$files['ucloudZipUrl']}',`position`='{$files['positionUrl']}',`online_card_pdf`='{$files['ucloudPdfUrl']}',update_time='" . time() . "' where multiplex_id='{$multiplexId}'";
$this->sConn->createCommand($updateSql)->execute();
}
$total = $json['total_score'];
$topics_count = count($select_info['content']);
$tpl_data=jsonEncode($json);
$this->sConn->createCommand("update exam_group set is_answersheet =0 where exam_group_id = ".$examGroupId )->execute();
$this->sConn->createCommand("update topic_word set status =0,word_path='' where exam_group_id = ".$examGroupId )->execute();
$this->sConn->createCommand("update exam set tpl_data ='".$tpl_data."' where exam_group_id = ".$examGroupId )->execute();
$this->sConn->createCommand("update paper set score = ".$total.",topics_count = ".$topics_count.",is_labelled = 0 where paper_id in (".implode(',',$paperIds).")")->execute();
$insert="replace into third_answer_sheet(`name`,`exam_group_id`,`ke_topic_num`,`tian_topic_num`,`zu_topic_num`,`xuan_topic_num`,`file_path`,`sheet_answer`,`sheet_score`,`create_time`,`update_time`,`position`,`online_card`,`online_card_pdf`,`is_qrcode_online`,`select_info`,`multiplex_id`) ";
$insert.=" values('".$name."','".$examGroupId."','".$KeGuanTi."','".$TianKongTi."','".$ZhuGuanTi."','".$XuanZuoTi."','".$files['ucloudZipUrl']."','".$sheet_answer."','".$sheet_score."','".time()."','".time()."','".$files['positionUrl']."',1,'".$files['ucloudPdfUrl']."','0','".jsonEncode($select_info)."','".$multiplexId."') ";
$this->sConn->createCommand($insert)->execute();
$OnlineCardSaveLogModel=new SOnlineCardSaveLog();
$OnlineCardSaveLogModel->exam_group_id=$examGroupId;
$OnlineCardSaveLogModel->file_path=$files['ucloudZipUrl'];
$OnlineCardSaveLogModel->online_card_pdf=$files['ucloudPdfUrl'];
$OnlineCardSaveLogModel->position=$files['positionUrl'];
$OnlineCardSaveLogModel->create_time=time();
$OnlineCardSaveLogModel->save();
$transaction->commit();
}catch(Exception $e){
$transaction->rollBack();
echo json_encode(array('success'=>0,'message'=>'创建失败'));exit;
}
}
if(!$error){
echo json_encode(array('success'=>1,'message'=>'创建成功','result'=>Yii::app()->createUrl('third/index'),'exam_group_id'=>$examGroupId,'multiplex_id'=>$multiplexId));exit;
}else{
echo json_encode(array('success'=>0,'message'=>join(',',$error)));exit;
}
}
//创建考试并下一步ajax
public function actionCreatethirdForNext(){
$error = array();
$tplData = array();
$semesterId = $this->semesterId;
$examName = Req::post("examName");
$type = (int)Req::post("type");
$classIds = Req::post("classIds");
$markType = Req::post("markType");
$teacherId = Req::post("teacherId");
$subjectId = Req::post("subjectId");
$textbookId = Req::post("textbookId");
$examDate = Req::post("examDate");
$tpl_index = (int)Req::post("tpl_index");
$qxkPaperId = (int)Req::post("isQxk");
if(Yii::app()->params['section']==0){
$tpl_index='1050';
}
if(empty($classIds)){
$error[] = '请指定考试班级';
}else{
$classIds = explode(',',$classIds);
}
if(empty($examName)){
$error[] = '请设置考试名称';
}
if ($type <= 0 || $type > 9) {
$error[] = '考试类型错误';
}
if(empty($subjectId)){
$error[] = '请选择题源';
}
if(!matchStrChar($examName)){
$error[] = '考试名称不能包含特殊字符!';
}
if(empty($teacherId)){
$error[] = '请指定阅卷老师';
}
if(empty($examDate)){
$error[] = '请指定考试时间';
}
if(empty($tpl_index)){
$error[] = '请指定类型';
}
if($qxkPaperId && in_array($subjectId,$this->mathSubjectId)){
$subjectId=3;
}
if($error){
echo json_encode(array('status'=>0,'msg'=>join(',',$error)));exit;
}else{
$teacherName = Teacher ::model()->getTeacherName($teacherId);
if($teacherName){
$tplData['author'] = $teacherName;
$tplData['subjectId'] = $subjectId;
$tplData['textbookId'] = $textbookId;
$tplData['examDate'] = $examDate;
}
$time = time();
$transaction = $this->sConn->beginTransaction();
try{
$newExamGroupId=getUniqueId($this->schoolId);
if($markType ==4){
$markStatus=1;
$status=1;
}else{
$markStatus=0;
$status=0;
}
$sql = "insert into `exam_group` (`exam_group_id`,`teacher_id`,`mark_type`,`mark_status`,`status`,`init_time`,`is_answersheet`,`is_third`,`is_new_marking`,`qxk_paper_id`) "
. "values (".$newExamGroupId.",".$teacherId.",".$markType.",".$markStatus.",".$status.",".time().",0,1,1,".$qxkPaperId.")";
$this->sConn->createCommand($sql)->execute();
foreach($classIds as $classId){
if(!$classId) continue;
$newExamId = getUniqueId($this->schoolId);
$sql = "select g.card_length,g.card_status,c.class_type FROM grade g LEFT JOIN class c on g.id = c.grade where c.class_id = $classId";
$cardData = $this->sConn->createCommand($sql)->queryRow();
if($cardData['card_status']==0){
$cardData['card_length'] = 8;
if($this->schoolId >999){
$cardData['card_length'] = 9;
}
}
$class_type=$cardData['class_type'];
$this->sConn->createCommand()->insert('exam',array(
'exam_id' => $newExamId,
'exam_group_id' => $newExamGroupId,
'name' => $examName,
'semester_id' => $this->semesterId,
'teacher_id' => $teacherId,
'subject_id' => $subjectId,
'module_id' => 0,
'type' => $type,
'school_card_status' => $cardData['card_status'],
'school_card_length' => $cardData['card_length'],
'status' => 2,
'week_num' => 0,
'create_type' => 0,
'create_time' => $time,
'update_time' => $time,
'tpl_data' => jsonEncode($tplData),
'tpl_index' => $tpl_index,
'class_id' => $classId,
'method_ids' => '',
));
// $newPaperId = $this->UUID_SHORT();
$newPaperId= getUniqueId($this->schoolId);
$this->sConn->createCommand()->insert('paper', array(
'paper_id' => $newPaperId,
'paper_type' => 1,
'exam_id' => $newExamId,
'paper_name' => '',
'paper_layer' => '',
'difficulty' => 0,
'topics_count' => 0,
'score' => 0,
'add_time' => $time,
'update_time' => $time,
'method_ids' => '',
'is_labelled' => 0,
));
$this->sConn->createCommand()->insert('class_exam_printer', array(
'class_id' => $classId,
'exam_id' => $newExamId,
'type' => 0,
'is_print' => 0,
'print_time' => 0,
'add_time' => $time,
));
$studentIds = SStudentClassRelation::model()->getStudentIdsByClassId_Status_0($classId);
$studentIds_0 = BusinessStudent::model()->keepStudentsStatus_0($studentIds);
$BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds_0);
if($studentIds_0){
foreach ($studentIds_0 as $studentId) {
// $BStudentCards = BusinessStudent::model()->getCardsByStudentIds($studentIds);
// if($studentIds){
// foreach ($studentIds as $studentId) {
$this->sConn->createCommand()->insert('student_paper_relation', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'student_card' => (isset($BStudentCards[0]) && isset($BStudentCards[0][$studentId]) ? $BStudentCards[0][$studentId] : 0),
'school_student_card' => (isset($BStudentCards[1]) && isset($BStudentCards[1][$studentId]) ? $BStudentCards[1][$studentId] : ''),
'class_type' =>$class_type
));
$this->sConn->createCommand()->insert('student_paper_relation_property', array(
'student_id' => $studentId,
'paper_id' => $newPaperId,
'exam_id' => $newExamId,
'semester_id' => $this->semesterId,
'class_id' => $classId,
'create_time' =>$time
));
}
}
}
$transaction->commit();
}catch(Exception $e){
$transaction->rollBack();
if (YII_ENV == 'production') {
$error[] = '系统错误[SQL]';
} else {
$error[] = $e->getMessage();
}
echo json_encode(array('status'=>0,'msg'=>'创建失败'));exit;
}
}
if(!$error){
echo json_encode(array('status'=>1,'msg'=>'创建成功','result'=>Yii::app()->createUrl('third/index'),'examGroupId'=>$newExamGroupId));exit;
}
}
public function actionGetOnlinePdf(){
$semesterId = $this->semesterId;
$width = Req::post("width");
$height = Req::post("height");
$pdfHtml = Req::post("pdfHtml");
$examGroupId = Req::post("examGroupId");
if(!$width || !$height){
$error['success']=0;
$error['message'] = '缺少纸张大小参数';
$error['data'] = '';
echo json_encode($error);exit();
}
if(!$pdfHtml){
$error['success']=0;
$error['message'] = '缺少模板数据';
$error['data'] = '';
echo json_encode($error);exit();
}
if(!$examGroupId){
$error['success']=0;
$error['message'] = '缺少考试数据';
$error['data'] = '';
echo json_encode($error);exit();
}
$sendData=array(
'schoolId'=>$this->schoolId,
'examGroupId'=>$examGroupId,
'savedInfoUrl'=>$pdfHtml,
'semesterId'=>$semesterId,
'width'=>$width,
'height'=>$height
);
$return=sendDataToKafka('zsyas2-online-card-alone-notify',$sendData);
$ucloudPdfUrl='';
if($return){
$maxTimes=25;
$server = Yii::app()->params["phpServiceRedis"]["servers"];
$redis = new Redis();
$redis->connect($server["host"], $server["port"]);
if(isset($server['password'])){
$redis->auth($server['password']);
}
$redis->select($server['database']);
for($i=0;$i<$maxTimes;$i++){
$redis_get_pdf_status =$redis->get('php_service:exam_group_online_card:'.$examGroupId);
if($redis_get_pdf_status ){
$ucloudPdfUrl=$redis_get_pdf_status;
$redis->set('php_service:exam_group_online_card:'.$examGroupId,'');
break;
}
sleep(1);
}
}
if($ucloudPdfUrl){
$error['success']=1;
$error['message'] = '保存成功!';
$error['data'] = $ucloudPdfUrl;
}else{
$error['success']=0;
$error['message'] = '生成失败';
$error['data'] = '';
}
echo json_encode($error);exit();
}
public function actionDownload()
{
$url = Req::get('url');
$title = Req::get('title');
if (empty($url) ) {
return false;
}
if(!$title) $title=time().'temp';
$ext=substr($url,strrpos($url,'.')+1);
$path='upload/tmpDir/downloadTempFiled/';
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
$pathName=$path.$title.'.'.$ext;
// 获取远程文件资源
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
$tempFile = curl_exec($ch);
curl_close($ch);
// 保存文件
$fp = @fopen($pathName, "w");
fwrite($fp, $tempFile);
fclose($fp);
header('content-type:application/octet-stream');
header('content-disposition:attachment; filename='.get_basename($pathName));
header('content-length:'.filesize($pathName));
readfile($pathName);
}
//在线答题卡旧版第二步页面
public function actionThirdCardSecond(){
$examGroupId = Req::get('examGroupId');
$this->render('third_card_second',array('examGroupId'=>$examGroupId));
}
//复用在线答题卡
public function actionMultiplex(){
$multiplexId=Req::post("multiplexId"); //被复用的记录ID
$name=Req::post("name"); //新答题卡名称
$result=array();
$result['status']=0;
if(!$multiplexId){
$result['msg']='答题卡ID不能为空';
exit(json_encode($result));
}
if(!$name){
$result['msg']='答题卡名称不能为空';
exit(json_encode($result));
}
$check=$this->sConn->createCommand("select `multiplex_id`,`file_path`,`position`,`online_card_pdf`,`exam_group_id`,`is_download`,`is_qrcode_online` from online_card_multiplex where multiplex_id='{$multiplexId}'")->queryRow();
if(!$check){
$result['msg']='答题卡模板不存在';
exit(json_encode($result));
}
if(!$check['is_download']){
$result['msg']='答题卡尚未下载,如需修改请直接编辑答题卡';
exit(json_encode($result));
}
$onlineCardMultiModel = new SOnlineCardMultiplex();
$onlineCardMultiModel->exam_group_id = $check['exam_group_id'];
$onlineCardMultiModel->name = $name;
$onlineCardMultiModel->file_path = $check['file_path'];
$onlineCardMultiModel->position = $check['position'];
$onlineCardMultiModel->online_card_pdf = $check['online_card_pdf'];
$onlineCardMultiModel->is_qrcode_online = $check['is_qrcode_online'];
$onlineCardMultiModel->is_download = 0;
$onlineCardMultiModel->is_copy = 1;
$onlineCardMultiModel->create_time = time();
$onlineCardMultiModel->update_time = time();
if ($onlineCardMultiModel->save()) {
$result['status'] = 1;
$result['msg'] = '复用成功';
$result['data'] = $onlineCardMultiModel->multiplex_id;
}
exit(json_encode($result));
}
//版本列表切换在线答题卡
public function actionChangeCard(){
$multiplexId=Req::post("multiplexId"); //记录ID
$result=array();
$result['status']=0;
$check=$this->sConn->createCommand("select `multiplex_id`,`name`,`file_path`,`position`,`online_card_pdf`,`exam_group_id`,`is_qrcode_online` from online_card_multiplex where multiplex_id='{$multiplexId}'")->queryRow();
if(!$check){
$result['msg']='答题卡模板不存在';
exit(json_encode($result));
}
if($this->sConn->createCommand("update third_answer_sheet set `multiplex_id`='{$multiplexId}',`name`='{$check['name']}',`file_path`='{$check['file_path']}',`position`='{$check['position']}',`online_card_pdf`='{$check['online_card_pdf']}',`is_qrcode_online`='{$check['is_qrcode_online']}' where exam_group_id='{$check['exam_group_id']}'")->execute()){
$result['status']=1;
$result['msg']='切换成功';
$exam=$this->sConn->createCommand("select exam_id from exam where exam_group_id='".$check['exam_group_id']."'")->queryAll();
$examIds=array();
foreach ($exam as $item){
$examIds[]=$item['exam_id'];
}
$this->sConn->createCommand("update student_answer_card_online set answer_card_online_created=0 where exam_id in(".implode(',',$examIds).")")->execute();
$this->sConn->createCommand("delete from exam_process where exam_group_id='".$check['exam_group_id']."' and action_type in(9,13,14)")->execute();
}
exit(json_encode($result));
}
//下载标记
public function actionDownloadStatus(){
$multiplexId=Req::post("multiplexId"); //记录ID
$result=array();
$result['status']=0;
if(!$multiplexId) {
$result['msg']='答题卡Id不能为空';
exit(json_encode($result));
}
$check=$this->sConn->createCommand("select `multiplex_id`,`name`,`file_path`,`position`,`online_card_pdf`,`exam_group_id`,`is_qrcode_online` from online_card_multiplex where multiplex_id='{$multiplexId}'")->queryRow();
if(!$check){
$result['msg']='答题卡模板不存在';
exit(json_encode($result));
}
$this->sConn->createCommand("update online_card_multiplex set is_download=1,update_time='".time()."' where multiplex_id='{$multiplexId}'")->execute();
$this->schoolManager->saveExamProcess($check['exam_group_id'],9,time());
$result['status']=1;
$result['msg']='更新成功';
exit(json_encode($result));
}
//隐藏答题卡
public function actionHideAnswerCard(){
$multiplexId=Req::post("multiplexId"); //记录ID
$isHide=Req::post("isHide"); //记录ID
if(!$isHide) $isHide=0;
$result=array();
$result['status']=0;
if(!$multiplexId) {
$result['msg']='答题卡Id不能为空';
exit(json_encode($result));
}
$this->sConn->createCommand("update online_card_multiplex set is_hide={$isHide} where multiplex_id='{$multiplexId}'")->execute();
$result['status']=1;
$result['msg']='更新成功';
exit(json_encode($result));
}
//复用的答题卡编辑后保存
private function saveMultiplex(){
$examGroupId = isset($_POST['examGroupId'])?$_POST['examGroupId']:'';
$multiplexId = isset($_POST['multiplexId'])?$_POST['multiplexId']:''; //复用模板id
$pdfUrl =isset($_POST["pdf_url"])?$_POST["pdf_url"]:0;
$positionJson=isset($_POST['position'])?$_POST['position']:'';
//上传答题卡相关文件
$files=$this->uploadAnswerCardPdf($examGroupId,$positionJson,$pdfUrl);
$this->sConn->createCommand("update online_card_multiplex set file_path='{$files['ucloudZipUrl']}',online_card_pdf='{$files['ucloudPdfUrl']}',`position`='{$files['positionUrl']}',update_time='".time()."' where multiplex_id='{$multiplexId}'")->execute();
$thirdAnswer= $this->sConn->createCommand("select multiplex_id from third_answer_sheet where exam_group_id='{$examGroupId}'")->queryRow();
if($thirdAnswer['multiplex_id']==$multiplexId){
$this->sConn->createCommand("update third_answer_sheet set file_path='{$files['ucloudZipUrl']}',online_card_pdf='{$files['ucloudPdfUrl']}',`position`='{$files['positionUrl']}',update_time='".time()."' where multiplex_id='{$multiplexId}'")->execute();
}
echo json_encode(array('status'=>1,'msg'=>'创建成功','data'=>Yii::app()->createUrl('third/index'),'exam_group_id'=>$examGroupId));exit;
}
//读取在线答题卡复用内容
public function actionGetMultiplex(){
$multiplexId=Req::post("multiplexId"); //记录ID
$result=array();
$result['status']=0;
$check=$this->sConn->createCommand("select `multiplex_id`,`name`,`file_path`,`position`,`online_card_pdf`,`exam_group_id`,`is_hide`,`is_copy`,`is_download`,`create_time`,`update_time`,`is_qrcode_online` from online_card_multiplex where multiplex_id='{$multiplexId}'")->queryRow();
if(!$check){
$result['msg']='答题卡模板不存在';
exit(json_encode($result));
}
//判断全学科
$examGroup=$this->sConn->createCommand("select qxk_paper_id,is_third from exam_group where exam_group_id='".$check['exam_group_id']."'")->queryRow();
$examData=$this->sConn->createCommand("select tpl_data,exam_id,subject_id from exam where exam_group_id='{$check['exam_group_id']}'")->queryAll();
//判断全学科白名單
$check['new_answer_sheet_subject']=0;
if($examGroup['qxk_paper_id'] && $examGroup['is_third']==0){
$rs = http('/cms/api/module-white-list/new_answer_sheet_subject/'.$examData[0]['subject_id'],'GET',$this->schoolId,array(),'cgi');
$rs=json_decode($rs,true);
if(isset($rs['errCode']) && $rs['errCode']=='00' && $rs['data']==true){
$check['new_answer_sheet_subject']=1;
}
}
if($check['position']){
if(strpos($check['position'],'http://')!==false || strpos($check['position'],'https://')!==false){
$check['position']=fileGetContents($check['position']);
}
}
$result['data']=$check;
exit(json_encode($result));
}
//加载考试完成考试复用试卷 最近30场完成解析的考试
public function actionLoadCopyPaper(){
$grade=Req::post('grade');
$examGroupId=Req::post('examGroupId');
$condition=array();
$subject=$this->subjectId;
$condition[]='eg.is_third=1';
// $condition[]='e.status=1';
$condition[]='tw.status=2';
$condition[]="eg.exam_group_id<>'".$examGroupId."'";
if($subject==3){
$condition[] = "e.subject_id in (".implode(',',$this->mathSubjectId).")";
}else{
$condition[]="e.subject_id ='".$subject."'";
}
if($grade){
$condition[]="c.grade='".$grade."'";
}
$sql="SELECT eg.exam_group_id,e.name,e.tpl_data,e.create_time FROM `exam` e ";
$sql.="join exam_group eg on eg.exam_group_id=e.exam_group_id ";
$sql.="join class c on c.class_id=e.class_id ";
$sql.=" join topic_word tw on tw.exam_group_id=e.exam_group_id ";
if($condition){
$sql.=" where ".implode(' and ',$condition);
}
$sql.=" group by eg.exam_group_id order by e.create_time desc limit 30";
$list=array();
$exam = $this->sConn->createCommand($sql)->queryAll();
if($exam){
foreach ($exam as $value){
$tplData=json_decode($value['tpl_data'],true);
$list[]=array(
'name'=>$value['name'],
'create_time'=>date('Y-m-d',$value['create_time']),
'exam_date'=>$tplData['examDate'],
'exam_group_id'=>$value['exam_group_id']
);
}
}
$result['status']=1;
$result['data']=$list;
exit(json_encode($result));
}
//复用考试,试题结构
public function actionCopyPaperTopic(){
$nowExamId = Req::post('examGroupId'); //当前考试
$copyExamId = Req::post('copyExamGroupId'); //复制结构的考试
$result['status']=0;
//读取当前考试试题结构
$nowPaperTopicRelation = array();
$examIds = array();
$paperIds = array();
$examGroup = $this->sConn->createCommand("select upload_status,mark_type from exam_group where exam_group_id={$nowExamId}")->queryRow();
if (!$examGroup) {
$result['msg'] = "考试id不正确";
exit(json_encode($result));
}
if($examGroup['upload_status']>0){
$result['msg']="已上传成绩,不能复用";
exit(json_encode($result));
}
$exam = $this->sConn->createCommand("select exam_id,upload_status,tpl_data from exam where exam_group_id={$nowExamId}")->queryAll();
foreach ($exam as $value) {
$examIds[] = $value['exam_id'];
$paper = $this->sConn->createCommand("select paper_id from paper where exam_id={$value['exam_id']}")->queryRow();
$paperIds[] = $paper['paper_id'];
}
$tplData=json_decode($exam[0]['tpl_data'],true);
$nowPaperTopicRelation = $this->sConn->createCommand("select `order`,`type`,`topic_id`,`stem_id` from paper_topic_relation where paper_id={$paperIds[0]}")->queryAll();
if (!$nowPaperTopicRelation) {
$result['msg'] = "未创建答题卡";
exit(json_encode($result));
}
$checkArr = array();
$historyTopic = array();
foreach ($nowPaperTopicRelation as $val) {
$checkArr[$val['order']] = $val['type'];
$checkOrderTopic[$val['order']] = $val['topic_id'];
$historyTopic[$val['order']] = array(
'topic_id' => $val['topic_id'],
'type' => $val['type'],
'stem_id'=> $val['stem_id']
);
}
//读取复制的考试结构
$copyPaperTopicRelation = array();
$exam = $this->sConn->createCommand("select exam_id,tpl_data from exam where exam_group_id={$copyExamId}")->queryRow();
$paper = $this->sConn->createCommand("select paper_id from paper where exam_id={$exam['exam_id']}")->queryRow();
$topicWord = $this->sConn->createCommand("select * from topic_word where exam_group_id={$copyExamId}")->queryRow();
$copyPaperTopicRelation = $this->sConn->createCommand("select `order`,`type`,`topic_id`,`method_ids`,`method_difficulty`,`stem_id` from paper_topic_relation where paper_id={$paper['paper_id']}")->queryAll();
$checkArrCopy = array();
$copyTopicOrder = array();
foreach ($copyPaperTopicRelation as $val) {
$checkArrCopy[$val['order']] = $val['type'];
$copyTopicOrder[$val['order']] = array(
'topic_id' => $val['topic_id'],
'method_ids' => $val['method_ids'],
'method_difficulty' => $val['method_difficulty'],
'type'=>$val['type'],
'stem_id'=>$val['stem_id']
);
}
if(strcmp(json_encode($checkArr),json_encode($checkArrCopy))!==0){
$result['msg']="两场考试试题结构不相同,不能复用";
exit(json_encode($result));
}
if(isset($tplData['new_items'])){
foreach($tplData['new_items'] as $key => $item){
if(isset($copyTopicOrder[$item['id']])){
$tplData['new_items'][$key]['topicId']=$copyTopicOrder[$item['id']]['topic_id'];
$tplData['new_items'][$key]['stemId']=$copyTopicOrder[$item['id']]['stem_id'];
}
}
}
//开始复用
$updateArr = array();
$updateMarkingTopicArr=array();
foreach ($checkOrderTopic as $key => $val) {
$sql = "update paper_topic_relation set topic_id='" . $copyTopicOrder[$key]['topic_id'] . "',stem_id='".$copyTopicOrder[$key]['stem_id']."',method_ids='" . $copyTopicOrder[$key]['method_ids'] . "',method_difficulty='" . $copyTopicOrder[$key]['method_difficulty'] . "' ";
$sql .= " where paper_id in(" . implode(',', $paperIds) . ") and topic_id={$val}";
$updateArr[] = $sql;
if($examGroup['mark_type']==4 && !in_array($copyTopicOrder[$key]['type'],array(1,2,11))){
$markingTopicSql="update marking_topic set topic_id='".$copyTopicOrder[$key]['topic_id']."' where exam_group_id='{$nowExamId}' and topic_id='{$val}'";
$updateMarkingTopicArr[]=$markingTopicSql;
}
}
$transaction = $this->sConn->beginTransaction();
try{
foreach ($updateArr as $sql){
$this->sConn->createCommand($sql)->execute();
}
if($updateMarkingTopicArr){
foreach ($updateMarkingTopicArr as $sql){
$this->sConn->createCommand($sql)->execute();
}
}
if($examGroup['mark_type']!=4){
$this->sConn->createCommand("delete from marking_topic where exam_group_id='{$nowExamId}'")->execute();
}
$this->sConn->createCommand("update exam set tpl_data='".jsonEncode($tplData)."' where exam_group_id='{$nowExamId}'")->execute();
$nowTopicWord = $this->sConn->createCommand("select * from topic_word where exam_group_id={$nowExamId}")->queryRow();
$this->sConn->createCommand("update exam_group set is_answersheet=1 where exam_group_id='" . $nowExamId . "'")->execute();
if ($nowTopicWord) {
$this->sConn->createCommand("update topic_word set status=2,is_history_topic='" . jsonEncode($historyTopic) . "',word_name='" . $topicWord['word_name'] . "',word_path='" . $topicWord['word_path'] . "',word_size='" . $topicWord['word_size'] . "' where exam_group_id='" . $nowExamId . "'")->execute();
} else {
$uuid = $this->sConn->createCommand("select RIGHT(UUID_SHORT(), 6)")->queryAll();
$wordId = current(current($uuid));
$topic_word_odj = new STopicWord();
$topic_word_odj->word_id = $wordId;
$topic_word_odj->exam_group_id = $nowExamId;
$topic_word_odj->word_name = $topicWord['word_name'];
$topic_word_odj->word_path = $topicWord['word_path'];
$topic_word_odj->word_md5 = '';
$topic_word_odj->word_size = $topicWord['word_size'];
$topic_word_odj->subject_id = $topicWord['subject_id'];
$topic_word_odj->status = 2;
$topic_word_odj->uploader_id = $this->coachId;
$topic_word_odj->upload_time = time();
$topic_word_odj->is_history_topic = jsonEncode($historyTopic);
$topic_word_odj->save();
}
$transaction->commit();
if(Yii::app()->params['handle_log_on_off'])
{
writeFileLog(jsonEncode(array(
"examGroupId" => $nowExamId,
"operate_project" => 'zsyas2',
"school_id" => $this->schoolId,
"title" => '复用考试',
"operate_account" => Yii::app()->session['coachInfo']['coach_name'],
"operate_method" => $this->action,
"operate_url" => $this->getRoute(),
"operate_param" =>json_encode(array('post'=>$_POST,'get'=>$_GET)),
"date"=>date('Y-m-d H:i:s')
)));
}
$result['status'] = 1;
} catch (Exception $e) {
$transaction->rollBack();
$result['msg']="复用失败";
}
exit(json_encode($result));
}
//生成二维码
public function actionCreateQrcode(){
$examGroupId = Req::post("examGroupId"); //记录ID
$result['status']=0;
if(!$examGroupId){
$result['msg']='考试Id不能为空';
exit(json_encode($result));
}
$QRcode = new \QRcode();
$level = 'L';// 纠错级别:L、M、Q、H
$size = 100;//元素尺寸
$margin = 1;//边距
$path='upload/tmpDir/qrCode/';
if (!file_exists($path)) {
mkdir($path, 0777, true);
}
$outfile=$path.$examGroupId.'.png';
$saveandprint = false;// true直接输出屏幕 false 保存到文件中
$back_color = 0xFFFFFF;//白色底色
$fore_color = 0x000000;//黑色二维码色 若传参数要hexdec处理,如 $fore_color = str_replace('#','0x',$fore_color); $fore_color = hexdec('0xCCCCCC');
$QRcode->png($examGroupId, $outfile, $level, $size, $margin, false, $back_color, $fore_color);
if(file_exists($outfile)){
$ucloud = new Qcloud();
$uploadUrl='zsyas2/third/qrcode/'.$this->schoolId.'/'. date('Y') . '/' . date('m') . '/' . date('d').'/'. $examGroupId. '.png';
$uploadInfo = $ucloud->putFile($uploadUrl, $outfile);
if ($uploadInfo['status'] == 0) {
@unlink($outfile);
$result['status']=0;
$result['msg'] = '文件上传失败!';
}else{
@unlink($outfile);
$result['data'] = $uploadInfo['url'];
$result['status']=1;
}
}else{
$result['status']=0;
$result['msg'] = '文件生成失败!';
}
exit(json_encode($result));
}
//切换答题卡,清空模板数据
public function actionClearAnswerCard()
{
$examGroupId = Req::post("examGroupId"); //考试ID
$type = Req::post("type"); //答题卡类型
/*
* 是否制作模板及类型
* 判断是否上传答题卡
* 是否解析
* 是否标注
*
* 清空 paper_topic_relation
* tpl_data new_items items
* topic topic_item_option
* marking_topic
* //删除数据
*
*/
$examGroup = SExamGroup::model()->find('exam_group_id=:exam_group_id', array(':exam_group_id' => $examGroupId));
if (!$examGroup) {
$result['status'] = 0;
$result['msg'] = '考试ID不存在';
exit(json_encode($result));
}
if ($examGroup['is_answersheet'] == 1) {
$result['status'] = 0;
$result['msg'] = '本场考试已上传试卷,不支持再切换答题卡模板';
exit(json_encode($result));
}
if ($examGroup['is_tagging'] == 1) {
$result['status'] = 0;
$result['msg'] = '本场考试已发送标注,不支持再切换答题卡模板';
exit(json_encode($result));
}
$thirdMultiTemplate = $this->sConn->createCommand("select template_id from third_multi_template where exam_group_id='{$examGroupId}' and (topic_upload=1 or answer_upload=1)")->queryRow();
if ($thirdMultiTemplate) {
$result['status'] = 0;
$result['msg'] = '本场考试已上传试卷,不支持再切换答题卡模板';
exit(json_encode($result));
}
$exam = Exam::model()->findAll('exam_group_id=:exam_group_id', array(':exam_group_id' => $examGroupId));
$tplData = json_decode($exam[0]['tpl_data'], true);
$thirdAnswerSheet = SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id', array(':exam_group_id' => $examGroupId));
if (!$thirdAnswerSheet) {
$result['status'] = 0;
$result['msg'] = '未制作答题卡';
exit(json_encode($result));
}
$examIds = array();
$paperIds = array();
$topicIds = array();
foreach ($exam as $item) {
$examIds[] = $item['exam_id'];
}
$criteria = new CDbCriteria();
$criteria->addInCondition('exam_id', $examIds);
$paper = SPaper::model()->findAll($criteria);
foreach ($paper as $item) {
if ($item['is_labelled'] > 0) {
$result['status'] = 0;
$result['msg'] = '本场考试已发送标注,不支持再切换答题卡模板';
exit(json_encode($result));
}
$paperIds[] = $item['paper_id'];
}
$paperTopic = SPaperTopicRelation::model()->findAll('paper_id=:pid', array(':pid' => $paperIds[0]));
foreach ($paperTopic as $item) {
$topicIds[] = $item['topic_id'];
}
//查询是否有上传数据
$rs = $this->sConn->createCommand("select id from student_paper_topic_rs where paper_id in(" . implode(',', $paperIds) . ") limit 1")->queryRow();
if ($rs) {
$result['status'] = 0;
$result['msg'] = '本场考试已上传学生答题卡,不支持再切换答题卡模板';
exit(json_encode($result));
}
$transaction = $this->sConn->beginTransaction();
try {
if($topicIds){
$this->sConn->createCommand("delete from topic where topic_id in (" . implode(',', $topicIds) . ")")->execute();
$this->sConn->createCommand("delete from topic_item where topic_id in (" . implode(',', $topicIds) . ")")->execute();
$this->sConn->createCommand("delete from topic_item_option where topic_id in (" . implode(',', $topicIds) . ")")->execute();
}
$this->sConn->createCommand("delete from paper_topic_relation where paper_id in (" . implode(',', $paperIds) . ")")->execute();
$this->sConn->createCommand("delete from marking_topic where exam_group_id =" . $examGroupId)->execute();;
$this->sConn->createCommand("delete from third_answer_sheet where exam_group_id =" . $examGroupId)->execute();;
$this->sConn->createCommand("delete from topic_word where exam_group_id =" . $examGroupId)->execute();
$this->sConn->createCommand("delete from online_card_multiplex where exam_group_id =" . $examGroupId)->execute();
$this->sConn->createCommand("delete from exam_push_topics_setting where exam_group_id =" . $examGroupId)->execute();
unset($tplData['items']);
unset($tplData['new_items']);
unset($tplData['new_rules']);
unset($tplData['update_answer']);
if (isset($tplData['totals'])) $tplData['totals'] = 0;
if (isset($tplData['scores'])) $tplData['scores'] = 0;
if (isset($tplData['total_score'])) $tplData['total_score'] = 0;
$this->sConn->createCommand("update exam set tpl_data='" . jsonEncode($tplData) . "' where exam_group_id='" . $examGroupId . "'")->execute();
$transaction->commit();
if (Yii::app()->params['handle_log_on_off']) {
writeFileLog(jsonEncode(array(
"examGroupId" => $examGroupId,
"operate_project" => 'zsyas2',
"school_id" => $this->schoolId,
"title" => '清空答题卡',
"operate_account" => Yii::app()->session['coachInfo']['coach_name'],
"operate_method" => $this->action,
"operate_url" => $this->getRoute(),
"operate_param" => json_encode(array('post' => $_POST, 'get' => $_GET)),
"date" => date('Y-m-d H:i:s')
)));
}
$result['status'] = 1;
} catch (\Exception $e) {
$transaction->rollBack();
$result['status'] = 0;
$result['msg'] = '清空答题卡数据失败';
}
exit(json_encode($result));
}
// 上传试卷模板
public function actionNewUploadTpl(){
$exam_group_id = Req::post('eid');
$upload_type = Req::post('uploadType'); //上传类型
$allowFileNameArr=array('word_file','paper_file','parse_file');
$error['success'] = 0;
if (empty($exam_group_id)) {
$error['message'] = '考试id不存在!';
echo json_encode($error);exit();
}
$examInfo = Exam::model()->findAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($examInfo)) {
$error['message'] = '未找到试卷信息!';
echo json_encode($error);exit();
}
$examIds=array();
foreach ($examInfo as $value){
$examIds[]=$value->exam_id;
}
$thirdSheet = SThirdAnswerSheet::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if (empty($thirdSheet)) {
$error['message'] = '尚未上传答题卡!';
echo json_encode($error);exit();
}
$topicWord=STopicWord::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
if($topicWord){
if($topicWord->allsubject_file_path && $topicWord->status!=3 && $topicWord->status!=7){
$error['message'] = '试卷已经上传,请勿重复上传!';
echo json_encode($error);exit();
}
if(($upload_type==1 && $topicWord->word_path) || ($upload_type==2 && $topicWord->allsubject_file_path)){
$error['message'] = '已经上传试卷,不能切换解析模式!';
echo json_encode($error);exit();
}
}
$fileUrlArr=array();
$file_max_size = 11 * 1024 * 1024;
foreach ($_FILES as $key =>$val){
if(in_array($key,$allowFileNameArr)){
if(!is_uploaded_file($_FILES[$key]['tmp_name'])){
if($key=='paper_file' && $upload_type==1){
$error['message'] = '非法上传!';
echo json_encode($error);exit();
}else{
continue;
}
}
if ($_FILES[$key]["size"] > $file_max_size) {
$error['message'] = '文件超过最大限制,最大为10M';
echo json_encode($error);exit();
}
if ($_FILES[$key]['error'] > 0) {
switch ($_FILES[$key]['error']) {
case 1:
$error['message'] = '文件大小超出了服务器的空间大小!';
break;
case 2:
$error['message'] = '要上传的文件大小超出浏览器限制!';
break;
case 3:
$error['message'] = '文件只有部分被上传!';
break;
case 4:
$error['message'] = '没有找到要上传的文件!';
break;
case 5:
$error['message'] = '服务器临时文件夹丢失!';
break;
case 6:
$error['message'] = '文件写入到临时文件夹出错!';
break;
}
echo json_encode($error);exit();
}
// 保存上传文件至服务器
$extName = substr($_FILES[$key]['name'],strrpos($_FILES[$key]['name'],'.'));
$fileName = $exam_group_id.$extName;
$wordRename = 'zsyas2/third/words/'.$this->schoolId.'/'. date('Y') . '/' . date('m') . '/' . date('d').'/'. uniqid() . '/' . $fileName;
$ucloud = new Qcloud();
$uploadInfo = $ucloud->putFile($wordRename, $_FILES[$key]['tmp_name']);
if ($uploadInfo['status'] == 0) {
echo json_encode(array('success' => 0, 'message' => $uploadInfo['msg']));
exit();
}
if(strpos($key,'paper_file')!==false){
$fileUrlArr[]=array(
'file_type'=>1,
'file_url'=>str_replace("%2F","/",$uploadInfo['url']),
'file_name'=>$_FILES[$key]['name']
);
}elseif(strpos($key,'parse_file')!==false){
$fileUrlArr[]=array(
'file_type'=>2,
'file_url'=>str_replace("%2F","/",$uploadInfo['url']),
'file_name'=>$_FILES[$key]['name']
);
}else{
$fileUrlArr[] = str_replace("%2F","/",$uploadInfo['url']);
}
}
}
if(!$fileUrlArr){
$error['message'] = '未找到上传文件!';
echo json_encode($error);exit();
}
//操作日志
if(Yii::app()->params['handle_log_on_off'])
{
Curl::post(Yii::app()->params['handle_log_api'], array(
"exam_group_id" => (string)$exam_group_id,
"operate_project" => 'zsyas2',
"title" => '第三方试卷上传试卷',
"school_id" => $this->schoolId,
"operate_account" => Yii::app()->session['coachInfo']['coach_name'],
"operate_method" => $this->action,
"operate_url" => $this->getRoute(),
"operate_sql" => json_encode(array('insert'=>array('exam_group_id'=>$exam_group_id,'status'=>0,'word_path'=>$uploadInfo['url'],'subject_id'=>$examInfo[0]->subject_id))),
"operate_param" =>json_encode(array('post'=>$_POST,'get'=>$_GET,'file'=>$uploadInfo['url'])),
));
}
$transcation = $this->sConn->beginTransaction();
try {
$time = time();
$this->sConn->createCommand("update exam_group set is_answersheet=0 where exam_group_id='{$exam_group_id}'")->execute();
STopicWord::model()->deleteAll('exam_group_id=:exam_group_id',array(':exam_group_id'=>$exam_group_id));
//$this->sConn->createCommand("update paper set is_labelled=0 where exam_id in(".implode(',',$examIds).")")->execute();
$uuid = $this->sConn->createCommand("select RIGHT(UUID_SHORT(), 6)")->queryAll();
$wordId = current(current($uuid));
$topic_word_odj = new STopicWord();
$topic_word_odj->word_id = $wordId;
$topic_word_odj->exam_group_id = $exam_group_id;
$topic_word_odj->word_name = '第三方试卷'.$fileName;
if($upload_type==1){
$topic_word_odj->allsubject_file_path = json_encode($fileUrlArr);
}elseif($upload_type==2){
$topic_word_odj->word_path = implode(',',$fileUrlArr);
}
$topic_word_odj->word_md5 = '';
$topic_word_odj->word_size = 0;
$topic_word_odj->subject_id = $examInfo[0]->subject_id;
$topic_word_odj->status = 0;
$topic_word_odj->type_id = 3;
$topic_word_odj->uploader_id = $this->coachId;
$topic_word_odj->upload_time = $time;
$topic_word_odj->save();
$transcation->commit();
}
catch (Exception $e)
{
$transcation->rollback();
$error['message'] = '上传文件失败!';
echo json_encode($error);exit();
}
$this->schoolManager->saveExamProcess($exam_group_id,3,time());
$error['success'] = 1;
$error['message'] = '上传文件成功!';
echo json_encode($error);exit();
}
public function actionViewPaper(){
$pid = Req::get('pid');
if(!$pid) Yii::app()->jump->error('解析尚未完成,或未生成预览');
$data=array('pid'=>$pid);
$this->renderPartial('view_paper',$data);
}
//创建考试加载班级
public function actionAjaxGetClassByTeacherGrade(){
$grade = Req::post('grade');
$teacherId = Req::post('teacherId');
$selectClassData = Req::post('selectClassData');
if(!$selectClassData) $selectClassData=array();
$result['status']=0;
if (Yii::app()->request->getIsPostRequest()){
$selectedClass=array();
if($selectClassData){
foreach ($selectClassData as $datum){
$selectedClass[(string)$datum]=$datum;
}
}
//读取走班设置
$setting=$this->schoolManager->getClassifiedBySubject($grade,$this->subjectId,$this->semesterId);
//读取执教班级
$teacherClassSelectData=array();
$getTeacherClass = ClassModel ::model()->getSelectclassesByTeacherGrade($this->semesterId,$teacherId,$grade);
foreach ($getTeacherClass as $val){
$teacherClassSelectData[(string)$val['class_id']]=$val;
}
//查询年级所有班级
$allClassList=array();
if($setting['status']==1){
$classes=ClassModel::model()->findAll("grade=:gid and semester_id=:sid and class_type=2",array(':gid'=>$grade,':sid'=>$this->semesterId));
}else{
$classes=ClassModel::model()->findAll("grade=:gid and semester_id=:sid and class_type=1",array(':gid'=>$grade,':sid'=>$this->semesterId));
}
if($classes){
foreach ($classes as $class){
if($class['is_hide']==1){
continue;
}
$temp=array(
'class_id'=>$class['class_id'],
'class_name'=>$class['class_name'],
'arts_science'=>$class['arts_science'],
'selected'=>0
);
if($selectedClass){
if(isset($selectedClass[(string)$class['class_id']])){
$temp['selected']=1;
}
}else{
if(isset($teacherClassSelectData[(string)$class['class_id']])){
$temp['selected']=1;
}
}
$allClassList[]=$temp;
}
}
$result['status']=1;
$result['msg']='success';
$result['data']=$allClassList;
}
exit(json_encode($result));
}
//验证第三方选做题分组
public function actionCheckSelectTopicGroup()
{
$examGroupId = Req::post("exam_group_id");
if($examGroupId>0)
{
$examData = Exam::model()->find('exam_group_id=:exam_group_id',array(':exam_group_id'=>$examGroupId));
$tplData=json_decode($examData['tpl_data'],true);
if(isset($tplData['new_items'])){
foreach($tplData['new_items'] as $item){
if(isset($item['sameAliasNo']) && $item['sameAliasNo']){
echo json_encode(array('status'=>1));exit;
}
}
}
}
echo json_encode(array('status'=>0));exit;
}
//生成签名
public function actionCreateSign(){
$eid = Req::post('eid');
if(YII_ENV=='production'){
$appId='946004280126791680'; //线上
}else{
$appId='939792767984566272'; //测试
}
$time=time();
$params=array(
'appId'=>$appId,
'timestamp'=>$time
);
$params['certificate']=$eid.'_'.$this->schoolId;
$vSign=$this->getSignature($appId,$time,'654321',$params);
$result['status'] = 1;
$result['sign'] = $vSign;
$result['time'] = $time;
$result['certificate'] = $params['certificate'];
echo json_encode($result);exit();
}
private function getSignature($appId,$timestamp,$secret,$params)
{
$subfix='';
if ($params) {
ksort($params, SORT_STRING);
$subfix = http_build_query($params);
}
$signature = base64_encode(hash_hmac("sha1", $appId . $timestamp . $secret . $subfix, $secret));
return strtoupper(md5($signature));
}
}