123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539 |
- <?php
- namespace app\api\controller;
- use think\facade\Request;
- use app\model\Camp as CampModel;
- use app\model\ExamEmpResult;
- use app\model\TrainDoneLog;
- use app\model\CampPlan;
- use app\model\CampEmployee;
- use app\model\TrainClass;
- use app\model\ExamPaper;
- use app\model\UserCollect;
- use app\model\Footprints;
- use app\model\Customer;
- use app\model\CustomerVisitLog;
- use app\model\Org;
- use app\model\Employee;
- class Camp extends Base
- {
- /*
- * 考核进度
- */
- public function read()
- {
- $token = $this->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'=>'申请成功']);
- }
- }
|