| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- <?php
 
- namespace addons\exam\controller;
 
- use addons\exam\model\BaseModel;
 
- use addons\exam\model\GradeModel;
 
- use think\Db;
 
- /**
 
-  * 试卷考试成绩接口
 
-  */
 
- class Grade extends Base
 
- {
 
-     protected $noNeedLogin = ['*'];
 
-     protected $noNeedRight = ['*'];
 
-     /**
 
-      * 获取成绩列表
 
-      */
 
-     public function index()
 
-     {
 
-         $list = GradeModel::with(
 
-             [
 
-                 // 'user'  => BaseModel::withSimpleUser(),
 
-                 'cate'  => BaseModel::withSimpleCate(),
 
-                 'paper' => BaseModel::withSimplePaper(),
 
-             ]
 
-         )
 
-             ->where('user_id', $this->auth->id)
 
-             ->order('id desc')
 
-             ->paginate(15, true);
 
-         $this->success('', compact('list'));
 
-     }
 
-     /**
 
-      * 排行榜
 
-      */
 
-     public function rank()
 
-     {
 
-         if (!$paper_id = input('paper_id/d', '0')) {
 
-             $this->error('缺少试卷信息');
 
-         }
 
-         $result = cache_data("rank:paper-{$paper_id}", function () use ($paper_id) {
 
-             $grade_count = GradeModel::where('paper_id', $paper_id)->group('user_id')->count();
 
-             $pass_count  = GradeModel::where('paper_id', $paper_id)->where('is_pass', 1)->group('user_id')->count();
 
-             $pass_rate   = round(($pass_count / $grade_count) * 100, 2) . '%';
 
-             // $pass_rate   = bcmul(bcdiv($pass_count, $grade_count, 4), 100, 2) . '%';
 
-             if ($grade_count) {
 
-                 // 子查询,先取出最新的成绩
 
-                 $subQuery = Db::name('exam_grade')
 
-                     ->field('id,user_id,cate_id,paper_id,mode,MAX(score) AS score,is_pass,grade_time')
 
-                     ->where('paper_id', $paper_id)
 
-                     ->group('user_id')
 
-                     ->order('id desc')
 
-                     ->buildSql();
 
-                 // 再根据成绩、考试时间排序,取出前10名
 
-                 $list = GradeModel::with(
 
-                     [
 
-                         'user' => BaseModel::withSimpleUser(),
 
-                     ]
 
-                 )->table($subQuery . ' exam_grade')
 
-                     // ->where('paper_id', $paper_id)
 
-                     // ->group('user_id')
 
-                     ->order('score desc, grade_time asc')
 
-                     ->limit(10)
 
-                     ->select();
 
-             } else {
 
-                 $list = [];
 
-             }
 
-             return [
 
-                 'summary' => [
 
-                     'grade_count' => $grade_count,
 
-                     'pass_count'  => $pass_count,
 
-                     'pass_rate'   => $pass_rate,
 
-                     'cache_time'  => datetime(time()),
 
-                 ],
 
-                 'list'    => $list,
 
-             ];
 
-         }, 3600, true);
 
-         $this->success('', json_decode($result, true));
 
-     }
 
- }
 
 
  |