RankingController.class.php 4.52 KB
<?php

/**
 * 获取不同范围的用户积分排名.
 *
 * @auther zs_anything
 * @date 2017/08/03
 */

namespace Api\Controller\Integral;

use Common\Common\Cache;
use Common\Common\Department;
use Common\Common\User;
use Common\Model\AuthorityMainModel;
use Common\Model\PluginModel;
use VcySDK\Integral;
use VcySDK\Service;

class RankingController extends AbstractController
{
    public function Index()
    {

        // 获取排行数据
        $this->getAllRanking();
        // 获取人员信息
        $this->getUidInfo();

        return true;
    }

    /**
     * 获取排行数据
     */
    private function getAllRanking()
    {
        // 验证权限
        $authorRange = $this->checkAuthRange(PluginModel::INTEGRAL_CENTER);

        $rankingParams = [];

        $dpIds = $this->getDpIdsParams();

        if (!empty($dpIds)) {
            $rankingParams['dpIds'] = $dpIds;
        }

        list($jobIds, $roleIds) = $this->getJobOrRoleParams($authorRange);
        $rankingParams['jobIds'] = $jobIds;
        $rankingParams['roleIds'] = $roleIds;

        // 获取范围内的用户积分排名
        $sdk = new Integral(Service::instance());

        $rankingParams['memUid'] = $this->_login->user['memUid'];
        $rankingParams['rankType'] = I('post.rank_type', $sdk::INTEGRAL_RANKING_TYPE_TOTAL);
        $rankingParams['pageNum'] = I('post.page', 1);
        $rankingParams['pageSize'] = I('post.limit', 10);

        $this->_result = $sdk->getDiffRangeRanking($rankingParams);

        return true;
    }

    /**
     * 获取人员信息
     * @return bool
     */
    protected function getUidInfo()
    {
        // 获取人员ID
        $uidArr = array_column($this->_result['list'], 'memUid');
        if (empty($uidArr)) {
            return true;
        }

        // 获取人员数据
        $user = new User();
        $userList = $user->listByUid($uidArr);

        foreach ($this->_result['list'] as &$item) {
            // 头像
            $item['memFace'] = empty($userList[$item['memUid']]['memFace']) ?
                '' : $userList[$item['memUid']]['memFace'];
            // 人名
            $item['memUsername'] = empty($userList[$item['memUid']]['memUsername']) ?
                '' : $userList[$item['memUid']]['memUsername'];
            // 自己
            if ($this->_login->user['memUid'] == $item['memUid']) {
                $item['isMy'] = true;
            }
        }

        return true;
    }

    /**
     * 获取部门IDs参数
     * 如果前端没传,默认当前用户所在全部部门及子部门
     * @return array
     */
    private function getDpIdsParams()
    {
        $department = new Department();

        // 如果部门为-1, 取当前用户所在部门
        $dpIds = I('post.dp_ids', -1);

        if (-1 == $dpIds) {
            $dpIds = $department->list_dpId_by_uid($this->_login->user['memUid']);
        }

        // 获取所有子部门,包含自己
        $myDpIds = $department->list_childrens_by_cdid($dpIds, true);

        return array_keys($myDpIds);
    }

    /**
     * 获取岗位或角色参数
     * 如果前端没有传,取当前用户配置的可见范围数据
     * @param $authorRange
     * @return array
     */
    private function getJobOrRoleParams($authorRange)
    {
        $jobIds = I('job_ids', -1);
        $roleIds = I('role_ids', -1);

        // 查询系统当前配置的积分排名筛选类型
        $visibleRangeType = AuthorityMainModel::VISIBLE_RANGE_TYPE_JOB;
        $settings = Cache::instance()->get('Common.AppSetting');
        if (!empty($settings) && array_key_exists("rank_filter", $settings)) {
            $visibleRangeType = $settings['rank_filter']['value'];
        }

        // 按岗位筛选
        if (AuthorityMainModel::VISIBLE_RANGE_TYPE_JOB == $visibleRangeType) {

            if (-1 == $jobIds) {
                $jobIds = empty($authorRange[PluginModel::INTEGRAL_CENTER]) ? [] : $authorRange[PluginModel::INTEGRAL_CENTER];
            } else {
                $jobIds = [$jobIds];
            }

            // 清空角色IDs
            $roleIds = [];
        }

        // 按角色筛选
        if (AuthorityMainModel::VISIBLE_RANGE_TYPE_ROLE == $visibleRangeType) {

            if (-1 == $roleIds) {
                $roleIds = empty($authorRange[PluginModel::INTEGRAL_CENTER]) ? [] : $authorRange[PluginModel::INTEGRAL_CENTER];
            } else {
                $roleIds = [$roleIds];
            }

            // 清空岗位IDs
            $jobIds = [];
        }


        return array($jobIds, $roleIds);
    }
}