ActiveRankController.class.php 4.5 KB
<?php
/**
 * Created by PhpStorm.
 * User: zhonglei
 * Date: 17/10/10
 * Time: 16:12
 */

namespace Apicp\Controller\DataRank;

use Com\PackageValidate;
use Common\Common\User;
use Common\Common\Constant;
use Common\Common\DataHelper;
use Common\Model\AnswerAnswerModel;
use Common\Model\LikeModel;
use Common\Model\CommentModel;

class ActiveRankController extends \Apicp\Controller\AbstractController
{
    /**
     * ActiveRank
     * @author zhonglei
     * @desc 活跃排行接口
     * @param Int starttime:true 开始时间戳
     * @param Int endtime:true 结束时间戳
     * @return array
            array(
                'answer' => array( // 问答TOP10
                    array(
                        'uid' => 'A', // 用户ID
                        'username' => '宇宙超级无敌小霸王', // 用户姓名
                        'face' => '', // 头像
                        'dp_names' => array( // 部门
                            '部门1', '部门2'
                        ),
                        'total' => 100, // 点赞总数
                    ),
                ),
                'like' => array( // 点赞TOP10
                    array(
                        'uid' => 'A', // 用户ID
                        'username' => '宇宙超级无敌小霸王', // 用户姓名
                        'face' => '', // 头像
                        'dp_names' => array( // 部门
                            '部门1', '部门2'
                        ),
                        'total' => 100, // 点赞总数
                    ),
                ),
                'comment' => array( // 评论TOP10
                    array(
                        'uid' => 'A', // 用户ID
                        'username' => '宇宙超级无敌小霸王', // 用户姓名
                        'face' => '', // 头像
                        'dp_names' => array( // 部门
                            '部门1', '部门2'
                        ),
                        'total' => 100, // 点赞总数
                    ),
                ),
            )
     */
    public function Index_post()
    {
        // 请求数据
        $post_data = I('post.');

        // 验证规则
        $rules = [
            'starttime' => 'require|integer',
            'endtime' => 'require|integer',
        ];

        // 验证请求数据
        $validate = new PackageValidate();
        $validate->postData = $post_data;
        $validate->validateParams($rules);

        $dataHelper = &DataHelper::instance();
        $starttime = $dataHelper->formatStarttime($post_data['starttime']);
        $endtime = $dataHelper->formatEndtime($post_data['endtime']);
        $limit = Constant::DATARANK_SHOW_TOTAL * 3;

        $conds = [
            'created >= ?' => $starttime,
            'created <= ?' => $endtime,
        ];

        // 获取问答排行
        $answerModel = new AnswerAnswerModel();
        $answer_list = $answerModel->listUserAnswerRank($conds, $limit);
        $uids = array_column($answer_list, 'uid');

        // 获取点赞排行
        $likeModel = new LikeModel();
        $like_list = $likeModel->listUserRank($conds, $limit);
        $uids = array_merge($uids, array_column($like_list, 'uid'));

        // 获取评论排行
        $commentModel = new CommentModel();
        $comment_list = $commentModel->listUserRank($conds, $limit);
        $uids = array_merge($uids, array_column($comment_list, 'uid'));

        // 获取用户(已被删除的用户无法获取)
        $userServ = &User::instance();
        $users = $userServ->listByUid($uids);

        $data = [
            'answer' => $answer_list,
            'like' => $like_list,
            'comment' => $comment_list,
        ];

        $result = [];

        foreach ($data as $k => $list) {
            $result[$k] = [];

            // 遍历数据,获取用户信息
            foreach ($list as $v) {
                $uid = $v['uid'];

                if (!isset($users[$uid])) {
                    continue;
                }

                $result[$k][] = [
                    'uid' => $uid,
                    'username' => $users[$uid]['memUsername'],
                    'face' => $users[$uid]['memFace'],
                    'dp_names' => array_column($users[$uid]['dpName'], 'dpName'),
                    'total' => $v['total'],
                ];

                if (count($result[$k]) == Constant::DATARANK_SHOW_TOTAL) {
                    break;
                }
            }
        }

        $this->_result = $result;
    }
}