request->token; // $param = Request::only(['id']); // $token['root_org'] = 23; // $token['employee_id'] = 87; $w[] = ['employee_id','=',$token['employee_id']]; $w[] = ['now','=',1]; $w[] = ['root_id','=',$token['root_org']]; $data = CampEmployee::where($w)->find(); $res['code'] = 0;//没有指派训练 if (!$data) return json(['code'=>0 , 'data'=>$res , 'msg'=>'']); $res['code'] = 1;//通过训练已转正 if ($data->state=='转正') return json(['code'=>0 , 'data'=>$res , 'msg'=>'']); $cw[] = ['id','=',$data->camp_id]; $cw[] = ['root_id','=',$token['root_org']]; $info = CampModel::where($cw)->find(); $res['start_date'] = $info->start_date . ' 00:00:00'; $res['end_date'] = $info->end_date.' 23:59:59'; $res['code'] = 2;//训练中,未通过等 $res['speed'] = $data['speed'] ?: '0%'; $pw[] = ['root_id','=',$token['root_org']]; $pw[] = ['camp_id','=',$data->camp_id]; $pw[] = ['con_id','>',0]; $pw[] = ['plan_id','>',0]; $pw[] = ['del','=',0]; $plan = CampPlan::where($pw)->order('id asc')->select()->toArray(); $res['count'] = count($plan);//总节数 $w0 = $w1 = [];//0课程,1试卷 foreach ($plan as $k => $v) { $v['type']==0 ? $w0[]=$v['con_id'] : $w1[]=$v['con_id']; } $tw[] = ['class_id','in',$w0]; $tw[] = ['root_id','=',$token['root_org']]; $tw[] = ['from','=',1]; $tw[] = ['employee_id','=',$token['employee_id']]; $tw[] = ['done_percent','=',100]; $train = TrainDoneLog::where($tw)->count(); $ew[] = ['paper_id','in',$w1]; $ew[] = ['root_id','=',$token['root_org']]; $ew[] = ['from','=',1]; $ew[] = ['employee_id','=',$token['employee_id']]; // $paper = ExamEmpResult::where($ew)->count(); $paper = ExamEmpResult::with('paper')->where($ew)->select()->toArray(); $i = 0; foreach ($paper as $k6 => $v6) { if ($v6['base_score'] <= $v6['final_score']) { $i+=1; } } $res['passed_count'] = $train+$i; $res['no_passed_count'] = $res['count']-$res['passed_count']; $res['camp_id'] = $data['camp_id']; $res['speed'] = $res['count'] ? round(($res['passed_count']/$res['count'])*100,2).'%' : '0%'; return json(['code'=>0 , 'data'=>$res , 'msg'=>'获取成功']); } /* * 计划详情 */ public function list() { $token = $this->request->token; $param = Request::only(['plan_id']); // $token['root_org'] = 23; // $token['employee_id'] = 87; $w[] = ['root_id','=',$token['root_org']]; $w[] = ['plan_id','=',$param['plan_id']]; $w[] = ['del','=',0]; $eid = $token['employee_id']; $row = CampPlan::with(['trainDoneLog'=>function($query) use ($eid){ $query->where([['employee_id','=',$eid],['from','=',1]]); },'examEmpResult'=>function($query) use ($eid){ $query->where([['employee_id','=',$eid],['from','=',1]]); }])->where($w)->order('id asc')->select()->toArray(); $data = []; foreach ($row as $k => $v) { $s = []; //课程训练人数 $w1 = []; $camp_ids = CampPlan::where([['con_id','=',$v['con_id']],['type','=',$v['type']],['del','=',0]])->column('camp_id'); $w1[] = ['camp_id','in',$camp_ids]; $w1[] = ['root_id','=',$token['root_org']]; $w1[] = ['now','=',1]; $s['count'] = CampEmployee::where($w1)->count();//课程训练人数 $s['type'] = $v['type']; $s['title'] = $v['title']; $s['con_id'] = $v['con_id']; if ($v['type']==1) {//试卷\ $s['speed'] = (!$v['examEmpResult']) ? '待考核' : ($v['examEmpResult']['approve_status']==0 ? '待批改' : '已完成'); $s['source'] = 0; $w = []; $w[] = ['camp_id','=',$v['camp_id']]; $w[] = ['root_id','=',$token['root_org']]; $w[] = ['now','=',1]; $eids = CampEmployee::where($w)->column('employee_id'); $ew = []; $ew[] = ['employee_id','in',$eids]; $ew[] = ['root_id','=',$token['root_org']]; $ew[] = ['paper_id','=',$v['con_id']]; $ew[] = ['from','=',1]; $ec = ExamEmpResult::where($ew)->count(); }else{ $s['speed'] = (!$v['trainDoneLog']) ? 0 : $v['trainDoneLog']['done_percent']; $s['source'] = TrainClass::where([['id','=',$s['con_id']]])->value('course_id'); $s['source'] = $s['source'] ? count(array_filter(explode(',',$s['source']))) : 0; $w = []; $w[] = ['camp_id','=',$v['camp_id']]; $w[] = ['root_id','=',$token['root_org']]; $w[] = ['now','=',1]; $eids = CampEmployee::where($w)->column('employee_id'); $tw = []; $tw[] = ['class_id','=',$v['con_id']]; $tw[] = ['root_id','=',$token['root_org']]; $tw[] = ['from','=',1]; $tw[] = ['employee_id','in',$eids]; $tw[] = ['done_percent','=',100]; $ec = TrainDoneLog::where($tw)->count(); } $s['passed_count'] = $ec; $data[] = $s; } return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']); } //继续 private function date_switch($time) { // $now = time(); // // $old = strtotime(date($time)); // $dur = $time - $now; $dur = $time; if($dur <= 0){ return $time; }elseif($dur < 60){ return $dur.'秒后'; }elseif($dur < 3600){ return floor($dur/60).'分钟后'; }elseif($dur < 86400){ return floor($dur/3600).'小时后'; }elseif($dur < 2678400){ return floor($dur/86400).'天后'; }elseif($dur < 2678400*12){ return floor($dur/2678400).'月后'; }else{ return floor($dur/2678400/12).'年后'; } } /* * 训练计划 */ public function plan() { $token = $this->request->token; $param = Request::only(['camp_id']); // $token['root_org'] = 23; // $token['employee_id'] = 87; $eid = $token['employee_id']; $camp_id = $param['camp_id']; $w[] = ['id','=',$param['camp_id']]; $w[] = ['root_id','=',$token['root_org']]; $info = CampModel::with(['campPlan'=>function($query){ $query->where([['del','=',0]])->order('id asc'); },'employee'=>function($query) use ($eid,$camp_id){ $query->where([['camp_id','=',$camp_id],['employee_id','=',$eid],['now','=',1]]); }])->where($w)->find(); if (!$info || !$info->employee) return json(['code'=>1 , 'data'=>'数据不存在' , 'msg'=>'数据不存在']); $date = $info->employee->addtime;//指派时间 $date = explode(' ',$date); $day = $info->day; $time = $info->time; $start = $date[0].' '.$time; $unix = strtotime($start); $plan = []; foreach ($info->campPlan as $k => $v) { if ($v['con_id']==0 && $v['plan_id']==0) { $plan[] = $v; } } $data = []; //日期模式 if ($info->pattern == 0) { foreach ($plan as $k2 => $v2) { $save = []; $save['title'] = $v2['title']; $save['id'] = $v2['id']; $d = $k2*$day*86400+$unix; if (time() > $d || $k2==0) { $save['checked'] = true; $save['remark'] = '已解锁'; }else{ // $d = round((( $d-time())/86400),1); $d = $d-time(); $d = $this->date_switch($d); $save['checked'] = false; $save['remark'] = $d; } $data[] = $save; } }else{//闯关模式 $a = true; foreach ($plan as $k3 => $v3) { $save = []; $save['title'] = $v3['title']; $save['result'] = 1;//课程学习通过 $save['checked'] = true;//已解锁 $save['remark'] = '已解锁'; $save['id'] = $v3['id']; $w0 = $w1 = [];//0课程,1试卷 foreach ($info->campPlan as $k4 => $v4) { if ($v4['plan_id']==$v3['id']) { $v4['type']==0 ? $w0[]=$v4['con_id'] : $w1[]=$v4['con_id']; } } $tw = $ew = []; $tw[] = ['class_id','in',$w0]; $tw[] = ['root_id','=',$token['root_org']]; $tw[] = ['from','=',1]; $tw[] = ['employee_id','=',$token['employee_id']]; $train = TrainDoneLog::where($tw)->column('*'); $ew[] = ['paper_id','in',$w1]; $ew[] = ['root_id','=',$token['root_org']]; $ew[] = ['from','=',1]; $ew[] = ['employee_id','=',$token['employee_id']]; // var_dump($ew);die; $paper = ExamEmpResult::with('paper')->where($ew)->select()->toArray(); // p($paper); $result = true; if ($train) { foreach ($train as $k5 => $v5) { if ($v5['done_percent'] != 100) { $save['checked'] = false; $save['remark'] = '课程学习未通过'; $save['result'] = 0; $result = $a = false; break; } } } if ($result && $paper) { foreach ($paper as $k6 => $v6) { //未批改 if ($v6['approve_status']==0) { $check = $this->paper($v6); if ($check==0) { $save['checked'] = false; $save['remark'] = '试卷未批改'; $save['result'] = 0; $result = $a = false; break; }elseif ($check==1) { $save['checked'] = false; $save['remark'] = '试卷考核不及格'; $save['result'] = 0; $result = $a = false; break; } }else{ if ($v6['base_score'] > $v6['final_score']) { $save['checked'] = false; $save['remark'] = '试卷考核不及格'; $save['result'] = 0; $result = $a = false; break; } } } } //没作答 if (!$train && !$paper) { $save['checked'] = false; $save['result'] = 0; $save['remark'] = '未开始考核'; }elseif ($result) { $save['checked'] = true; $save['result'] = 1; $save['remark'] = '考核通过'; } $data[] = $save; } foreach ($data as $k7 => $v7) { if ($k7==0){ $data[$k7]['checked'] = true;$save['result']=1;continue;} //前一个考核通过下一个自动解锁 if ($data[$k7-1]['checked'] && $data[$k7-1]['result']) { $data[$k7]['checked'] = true; } } } return json(['code'=>0 , 'data'=>$data , 'msg'=>'获取成功']); } //批改试卷 public function paper($data) { $token = $this->request->token; $token['root_org'] = $data['root_id']; $token['employee_id'] = $data['employee_id']; $paperid = $data['paper_id']; $employee_id = $data['employee_id']; $time = time() - strtotime($data['addtime']); //超过一天未批改则系统审批 if ($time>86400) { }else{ return 0;//考试时间未超过24小时 } // $token['root_org'] = 23; // $token['employee_id'] = 58; // $paperid = input('paperid',0); // $employee_id = input('employee_id',0); //权限验证 $paper = ExamPaper::where('id',$paperid)->find(); // if (!$paper) return json(['code' => 1, 'msg' => '试卷错误']); // if ($paper->checkway == 'employee') return json(['code' => 1, 'msg' => '人工批改试卷,无法系统批改']); $w = []; $w[] = ['paper_id','=',$paperid]; $w[] = ['employee_id','=',$employee_id]; $w[] = ['root_id','=',$token['root_org']]; $w[] = ['from','=',1]; $empresult = ExamEmpResult::where($w)->with(['employee'])->find(); // if(!$empresult) return json(['code' => 1, 'msg' => '没有参加考试']); // // if($empresult->approve_status==2) return json(['code' => 1, 'msg' => '已经批改完成']); $emp_answer_arr = []; $emp_answer_json = $empresult->answer; if ($emp_answer_json) { $emp_answer_arr = json_decode($emp_answer_json, true); } $paperInfo = ExamPaper::with('questions')->find($paperid)->toArray(); $paperInfo['got_total_score'] = 0; $options = []; $json = []; $str = []; foreach ($paperInfo['questions'] as &$item) { $item['ask'] = str_replace('\\','',$item['ask']); //填写的答案 $item['emp_answer'] = isset($emp_answer_arr[$item['id']]) ? $emp_answer_arr[$item['id']] : ''; //系统评分 $item['got_score'] = $this->fraction($item['emp_answer'],$item['answer'],$item['type'],(int)$item['pivot']['score'],$empresult->id,$item['id']); $json[$item['id']] = $item['got_score']; //1正确,0错误 $item['c_type'] = $item['got_score']>0 ? 1 : 0; //选择题 if ($item['type']=='单选' || $item['type']=='多选') { $con = json_decode($item['content'],true); $op = []; foreach ($con as $v21) { $op[$v21['title']] = $v21['content']; } $item['content'] = $op; } //得分总和 $paperInfo['got_total_score'] += (int)$item['got_score']; } $u['final_score'] = $paperInfo['got_total_score']; $u['approve_status'] = 2; $u['aprove_time'] = date('Y-m-d H:i:s'); $u['data'] = json_encode($json); $uw[] = ['id','=',$empresult->id]; $uw[] = ['from','=',1]; ExamEmpResult::where($uw)->update($u); // return json(['code' => 0, 'data' =>'批改成功','msg' => '批改成功']); // // if ($data['base_score'] > $u['final_score']) { return 1;//不及格 }else{ return 2;//及格 } } //计算分数 public function fraction($emp_answer,$answer,$type,$score=0,$requestid=0,$questionsid=0){ $emp_score = 0; if (!$emp_answer) return $emp_score; if ($type=='判断') { if (trim($answer)==trim($emp_answer)) { $emp_score = $score; } }elseif ($type=='单选') { if ($answer==$emp_answer) { $emp_score = $score; } }elseif ($type=='多选') { $answer = explode(',',$answer); $emp_answer = explode(',',$emp_answer); sort($answer); sort($emp_answer); if (implode(',',$answer)==implode(',',$emp_answer)) { $emp_score = $score; }else{ $danf = $score/count($answer); $i = 0; foreach ($emp_answer as $k => $v) { if (in_array($v,$answer)) { $i+=1; }else{ $i = 0; break; } } $emp_score = $i*$danf; } }elseif ($type=='简答' || $type=='问答') { $emp_score = $answer = ExamEmpResult::autoPaperAnswerCheck($emp_answer,$answer,$score); $emp_score = $emp_score['got_score']; $emp_answer = $answer['emp_answer']; if ($requestid && $questionsid) { $tw[] = ['id','=',$requestid]; $tw[] = ['from','=',0]; $json = ExamEmpResult::where($tw)->value('answer'); $json = json_decode($json,true); if (isset($json[$questionsid])) { $json[$questionsid] = $emp_answer; ExamEmpResult::where($tw)->update(['answer'=>json_encode($json)]); } } } return $emp_score; } //approve public function approve() { $token = $this->request->token; // $param = Request::only('id'); $w[] = ['employee_id','=',$token['employee_id']]; $w[] = ['root_id','=',$token['root_org']]; $w[] = ['now','=',1]; $info = CampEmployee::where($w)->find(); if (!$info || $info->approve == 1) { return json(['code'=>1 , 'data'=>'重复申请' , 'msg'=>'重复申请']); } $u['approve'] = 1; $u['approve_time'] = date('Y-m-d H:i:s',time()); $info = CampEmployee::where($w)->update($u); return json(['code'=>0 , 'data'=>'申请成功' , 'msg'=>'申请成功']); } }