Votejigou.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace app\admin\controller;
  3. use app\common\controller\Backend;
  4. use think\Db;
  5. /**
  6. * 答题机构管理
  7. *
  8. * @icon fa fa-circle-o
  9. */
  10. class Votejigou extends Backend
  11. {
  12. /**
  13. * Votejigou模型对象
  14. * @var \app\admin\model\Votejigou
  15. */
  16. protected $model = null;
  17. public function _initialize()
  18. {
  19. parent::_initialize();
  20. $this->model = new \app\admin\model\Votejigou;
  21. $this->view->assign("statusList", $this->model->getStatusList());
  22. }
  23. /**
  24. * 查看
  25. */
  26. public function index()
  27. {
  28. //当前是否为关联查询
  29. $this->relationSearch = false;
  30. //设置过滤方法
  31. $this->request->filter(['strip_tags', 'trim']);
  32. if ($this->request->isAjax()) {
  33. //如果发送的来源是Selectpage,则转发到Selectpage
  34. if ($this->request->request('keyField')) {
  35. return $this->selectpage();
  36. }
  37. list($where, $sort, $order, $offset, $limit) = $this->buildparams();
  38. $list = $this->model
  39. ->where($where)
  40. // ->order($sort, $order)
  41. ->order('score desc,id desc')
  42. ->paginate(10000);
  43. $lists = collection($list->items())->toArray();
  44. //各机构的绑定人数
  45. $user_jigou = Db::name('user')->where('status',1)->where('bind_jigou_id','NEQ',0)->column('bind_jigou_id');
  46. $user_jigou = array_count_values($user_jigou);
  47. //根据公式,重新计算排名分数
  48. foreach($lists as $key => $jigou){
  49. $jigou['newscore'] = 0;
  50. if(isset($user_jigou[$jigou['id']])){
  51. $usernumber = $user_jigou[$jigou['id']]; //机构人数
  52. $jigou['newscore'] = ($usernumber * 0.7) + ($jigou['score'] / $usernumber * 0.3); //公式
  53. $jigou['newscore'] = intval(round($jigou['newscore'],0)); //四舍五入
  54. $jigou['usernumber'] = $usernumber;
  55. }
  56. $lists[$key] = $jigou;
  57. }
  58. $lists = $this->mingci_score($lists);
  59. $result = array("total" => $list->total(), "rows" => $lists);
  60. return json($result);
  61. }
  62. return $this->view->fetch();
  63. }
  64. //获得我的名次,分数导向
  65. private function mingci_score($list){
  66. if(empty($list)){
  67. return $list;
  68. }
  69. //准备数据
  70. foreach($list as $key => $row){
  71. $field[$key] = $row['newscore'];
  72. }
  73. //dump($field);
  74. array_multisort($field,SORT_DESC,$list);
  75. //dump($list);
  76. foreach($list as $key => $val)
  77. {
  78. //赋值名次
  79. $val['mingci'] = $key + 1;
  80. // $val['score'] = $val['newscore'];
  81. // unset($val['newscore']);
  82. $list[$key] = $val;
  83. }
  84. return $list;
  85. }
  86. }