Browse Source

机构排行榜

lizhen_gitee 4 months ago
parent
commit
378640bfb0
1 changed files with 33 additions and 11 deletions
  1. 33 11
      application/api/controller/Subject.php

+ 33 - 11
application/api/controller/Subject.php

@@ -187,18 +187,35 @@ class Subject extends Api
     }
 
     //机构答题分排行榜,按分
+    //机构参与人数×0.7+平均分(机构总得分÷机构参与总人次)×0.3
     public function jigoulist_score(){
         $subject_id = 1;
 
+        //各机构的绑定人数
+        $user_jigou = Db::name('user')->where('status',1)->where('bind_jigou_id','NEQ',0)->column('bind_jigou_id');
+        $user_jigou = array_count_values($user_jigou);
+//dump($user_jigou);
+        //各个机构
         $map = [
             'subject_id' => $subject_id,
             'status'     => 1,
         ];
 
-        $lists = Db::name('vote_jigou')->field('id,title,score')
-            ->where($map)->order('score desc,id desc')->autopage()->select();
+        $lists = Db::name('vote_jigou')->field('id,title,score')->where($map)->order('score desc,id desc')->select();
+//dump($lists);
+        //根据公式,重新计算排名分数
+        foreach($lists as $key => $jigou){
+            $jigou['newscore'] = 0;
+            if(isset($user_jigou[$jigou['id']])){
+                $usernumber = $user_jigou[$jigou['id']];  //机构人数
+                $jigou['newscore'] = ($usernumber * 0.7) + ($jigou['score'] / $usernumber * 0.3); //公式
+                $jigou['newscore'] = intval(round($jigou['newscore'],0)); //四舍五入
+            }
 
-        $lists = $this->mingci_score($subject_id,$lists);
+            $lists[$key] = $jigou;
+        }
+//dump($lists);
+        $lists = $this->mingci_score($lists);
 
         $this->success(1,$lists);
     }
@@ -232,23 +249,28 @@ class Subject extends Api
     }
 
     //获得我的名次,分数导向
-    private function mingci_score($subject_id,$list){
+    private function mingci_score($list){
 
         if(empty($list)){
             return $list;
         }
         //准备数据
-        $players = Db::name('vote_jigou')->where(['subject_id'=>$subject_id,'status'=>1])->order('score desc,id desc')->column('id,score');
-        $id_arr = array_keys($players);
+
+        foreach($list as $key => $row){
+            $field[$key] = $row['newscore'];
+        }
+//dump($field);
+        array_multisort($field,SORT_DESC,$list);
+//dump($list);
 
         foreach($list as $key => $val)
         {
-            $mingci = 1;  //名次
-            $mingci = array_search($val['id'],$id_arr);
-            $mingci++;
-
             //赋值名次
-            $list[$key]['mingci'] = $mingci;
+            $val['mingci'] = $key + 1;
+            $val['score']  = $val['newscore'];
+            unset($val['newscore']);
+
+            $list[$key] = $val;
         }
 
         return $list;