StatisticsController.class.php 3.44 KB
<?php
/**
 * 管理后台-首页
 * CreateBy:zs_anything
 * Date:2016-01-03
 *
 */

namespace Apicp\Controller\HomePage;

use Common\Common\Department;
use VcySDK\Member;
use VcySDK\Service;
use VcySDK\Adminer;

class StatisticsController extends AbstractController
{

    /**
     * 在职状态:实习
     */
    const ACTIVE_TYPE_INTERNSHIP = 2;

    /**
     * 在职状态:试用
     */
    const ACTIVE_TYPE_PROBATION = 3;

    /**
     * 在职状态:正式
     */
    const ACTIVE_TYPE_FORMAL = 1;

    /**
     * 在职状态:离职
     */
    const ACTIVE_TYPE_QUIT = 4;

    /**
     * 在职状态: 退休
     */
    const ACTIVE_TYPE_RETIRE = 5;


    /**
     * VcySDK 用户操作类
     *
     * @type Member
     */
    protected $_mem;


    /**
     * VcySDK 部门操作类
     *
     * @type Department
     */
    protected $_department;


    protected $_serv;

    public function before_action($action = ''){
        if (! parent::before_action($action)) {
            return false;
        }


        $this->_serv = &Service::instance();
        $this->_department = new Department();
        $this->_mem = new Member($this->_serv);

        return true;
    }

    public function Index_post()
    {

        $adminerSdk = new Adminer($this->_serv);
        // 管理员、角色统计
        $adminerAndRoleTotal = $adminerSdk->adminerAndRoleTotal();

        $memSdk = new Member($this->_serv);
        // 人员统计
        $memRelevantTotal = $memSdk->memberRelevantTotal();

        // 人员在职情况, 按照在职类型统计(1:正式 2:实习 3:试用 4:离职 5:退休)
        $memActiveTotal = $memSdk->memberActiveTotal();
        if(!empty($memActiveTotal)){
            foreach ($memActiveTotal as $key => &$v) {
                switch ($v['memActive']) {
                    case self::ACTIVE_TYPE_FORMAL:
                        $v['memJobName'] = "正式";
                        break;
                    case self::ACTIVE_TYPE_INTERNSHIP:
                        $v['memJobName'] = "实习";
                        break;
                    case self::ACTIVE_TYPE_PROBATION:
                        $v['memJobName'] = "试用";
                        break;
                    case self::ACTIVE_TYPE_QUIT:
                        $v['memJobName'] = "离职";
                        break;
                    case self::ACTIVE_TYPE_RETIRE:
                        $v['memJobName'] = "退休";
                        break;
                    default:
                        $v['memJobName'] = "未知";
                        break;
                }
            }
        }

        // 按人员数量降序排列
        $allDep = $this->_department->listAll();
        multi_array_sort($allDep, array_column($allDep, 'user_total'), SORT_NUMERIC, SORT_DESC);
        foreach ($allDep as &$item) {
            $item = [
                'dpId' => $item['dpId'],
                'dpName' => $item['dpName'],
                'isChildDepartment' => $item['isChildDepartment'],
                'order' => $item['dpDisplayorder'],
                'user_total' => $item['departmentMemberCount'],
                'dept_level' => $item['dpLevel'],
            ];
        }

        $this->_result = array(
            'member' => $memRelevantTotal,
            'adminer' => $adminerAndRoleTotal,
            'memActiveGroup' => $memActiveTotal,
            'departments' => array_values($allDep)
        );

        return true;
    }
}