ListController.class.php 4.72 KB
<?php
/**
 *【线下培训-后台】班级管理列表
 *
 * @author: houyingcai
 * @email:     594609175@qq.com
 * @date :  2017-08-29 10:08:15
 * @version $Id$
 */

namespace Apicp\Controller\Team;

use Common\Service\EducationService;
use Common\Service\RightUsersService;

class ListController extends \Apicp\Controller\AbstractController
{
    public function Index_post()
    {
        $params = I('post.');

        // 默认值
        $params['page'] = !empty($params['page']) ? intval($params['page']) : 1;
        $params['limit'] = !empty($params['limit']) ? intval($params['limit']) : self::PAGE_LIMIT_DEFAULT;

        $right_users_server = new RightUsersService();
        $education_server = new EducationService();

        // 培训ID不能为空
        if (empty($params['ed_id'])) {

            E('_EMPTY_ED_ID');
        }

        $education = $education_server->get($params['ed_id']);
        // 培训不存在
        if (empty($education)) {

            E('_ERR_EDUCATION_NOT_EXIST');
        }
        // 获取培训状态
        $ed_status = $education_server->get_ed_status($education);

        // 根据部门ID集合,角色ID,岗位ID获取人员ID集合
        if ($params['dpIDs'] || $params['roleID'] || $params['jobID'] || $params['memUsername']) {

            $ed_uids = $right_users_server->list_uids_by_dp_job_role(
                $params['dpIDs'],
                $params['roleID'],
                $params['jobID'],
                $params['memUsername']
            );

            unset(
                $params['dpIDs'],
                $params['roleID'],
                $params['jobID'],
                $params['memUsername']
            );
            // 用户为空直接返回
            if (empty($ed_uids)) {

                $this->_result = [
                    'total' => 0,
                    'all_total' => 0,
                    'sign_total' => 0,
                    'unsign_total' => 0,
                    'page' => $params['page'],
                    'limit' => $params['limit'],
                    'list' => [],
                    'ed_status' => $ed_status,
                    'ed_is_sign_up' => $education['ed_is_sign_up'],
                    'ed_is_check' => $education['ed_is_check'],
                    'ed_is_charge' => $education['ed_is_charge'],
                ];

                return true;
            }
        }

        // 人员ID集合不为空
        if (!empty($ed_uids)) {

            $params['ru_uids'] = $ed_uids;
        }

        // 根据搜索条件统计班级人员数量
        $total = $right_users_server->count_by_right_users($params);

        $search_list = [];
        // 班级人员不为空
        if ($total) {
            // 根据搜索条件获取班级人员列表
            $search_list = $right_users_server->list_by_right_users($params);

            $uids = array_column($search_list, 'ru_uid');
            // 获取用户详细信息
            $user_list = $right_users_server->get_all_user_by_cache($uids);
            // 组装返回数组
            foreach ($search_list as $k => &$v) {
                $dpNames = array_column($user_list[$v['ru_uid']]['dpName'], 'dpName');
                $order_num = ($params['page'] - 1) * $params['limit'] + ($k + 1);
                $v['ru_id'] = intval($v['ru_id']);
                $v['ed_id'] = intval($v['ed_id']);
                $v['order_num'] = $order_num;
                $v['memUsername'] = $user_list[$v['ru_uid']]['memUsername'];
                $v['dpName'] = implode(',', $dpNames);
                $v['roleName'] = $user_list[$v['ru_uid']]['memRole'];
                $v['jobName'] = $user_list[$v['ru_uid']]['memJob'];
            }
        }

        // 获取全部学员总数、已报名学员总数、未报名学员总数(不可从 education 表中获取)
        $conds = ['ed_id' => $params['ed_id']];
        if (!empty($ed_uids)) {
            $conds['ru_uids'] = $ed_uids;
        }
        $all_total = (int)$right_users_server->count_by_right_users($conds);

        $conds['ru_sign_status'] = RightUsersService::SIGN_STATUS_SIGNED;
        $sign_total = (int)$right_users_server->count_by_right_users($conds);
        $unsign_total = $all_total - $sign_total;

        $this->_result = [
            'total' => $total,
            'all_total' => $all_total,
            'sign_total' => $sign_total,
            'unsign_total' => $unsign_total,
            'page' => $params['page'],
            'limit' => $params['limit'],
            'list' => $search_list,
            'ed_status' => $ed_status,
            'ed_is_sign_up' => $education['ed_is_sign_up'],
            'ed_is_check' => $education['ed_is_check'],
            'ed_is_charge' => $education['ed_is_charge'],
        ];

        return true;
    }
}