<?php /** * 员工考试统计 * User: yingcai * Date: 2017/10/12 * Time: 上午11:08 */ namespace Apicp\Controller\Exam; use Com\PackageValidate; use Common\Common\Constant; use Common\Common\ExamHelper; use Common\Common\User; use Common\Model\ExamPaperModel; class ExamCountController extends \Apicp\Controller\AbstractController { /** * ExamCount * @author houyingcai * @desc 员工考试统计 * @param Int page:1 当前页 * @param Int limit:20 当前页条数 * @param String dp_ids 组织ID * @param String role_ids 角色ID * @param String job_ids 岗位ID * @param String username 姓名 * @param Int ec_id 考试分类ID * @param String ep_name 试卷名称 * @param Int score_order:1 1:员工考试时间降序,2:成绩升序,3:成绩降序 * @return array array( * 'page' => 1, // 当前页 * 'limit' => 20, // 当前页条数 * 'total' => 100, // 总条数 * 'list' => array( // 列表数据 * array( * 'ea_id' => 123 // 答卷ID(测评试卷时使用) * 'uid' => 'AB4A446C7F0000013BAC6CF3F2504659', // 用户UID * 'username' => '李四', // 姓名 * 'dp_names' => array('开发组', '测试组'), // 组织 * 'job' => '苹果系统工程师', // 岗位 * 'role' => 'leader', // 角色 * 'ep_id' => 1, // 试卷ID * 'ep_name' => '入职测试考试', // 考试名称 * 'my_begin_time' => 1507776224150, // 开考时间 * 'my_end_time' => 1507776524150, // 交卷试卷 * 'my_time' => 12, // 用时(秒) * 'my_score' => '10.00', // 得分 * 'my_is_pass' => 1, // 是否及格(0:不及格,1:及格) * 'paper_type' => 1, // 试卷类型(0:测评试卷,1:模拟试卷) * ), * ), * ) */ public function Index_post() { // 验证规则 $rules = [ 'page' => 'integer|gt:0', 'limit' => 'integer|gt:0', 'dp_ids' => 'array', 'role_ids' => 'array', 'job_ids' => 'array', 'username' => 'max:64', 'ec_id' => 'integer|gt:0', 'ep_name' => 'max:64', 'score_order' => 'integer|in:1,2,3', ]; // 验证请求数据 $postData = I('post.'); $validate = new PackageValidate(); $validate->postData = $postData; $validate->validateParams($rules); // 分页 $page = isset($postData['page']) ? $postData['page'] : Constant::PAGING_DEFAULT_PAGE; $limit = isset($postData['limit']) ? $postData['limit'] : Constant::PAGING_DEFAULT_LIMIT; // 初始化查询条件 $conds = []; // 组合人员搜索条件 $user_conds = []; if (isset($postData['dp_ids'])) { $user_conds['dpIdList'] = $postData['dp_ids']; // 按部门条件查询时,表示部门是否递归查询人员 【0:不递归(默认值)、1:递归】 $user_conds['departmentChildrenFlag'] = 1; } if (isset($postData['role_ids'])) { $user_conds['roleIdList'] = $postData['role_ids']; } if (isset($postData['job_ids'])) { $user_conds['jobIdList'] = $postData['job_ids']; } if (isset($postData['username'])) { $user_conds['memUsername'] = $postData['username']; } $userServ = &User::instance(); if (!empty($user_conds)) { $user_conds['memAll'] = 1; // 可以查询删除人员 // 获取符合条件的人员UID $userList = $userServ->listUsersAll($user_conds); $userList = array_combine_by_key($userList, 'memUid'); if (!empty($user_conds)) { $conds['uid'] = empty($userList) ? '' : array_column($userList, 'memUid'); } } // 组合试卷搜索条件 $paper_conds = [ 'exam_type' => Constant::EXAM_TYPE, ]; if (isset($postData['ec_id'])) { $paper_conds['ec_id'] = $postData['ec_id']; } if (isset($postData['ep_name'])) { $postData['ep_name'] = str_replace("%", '\%', $postData['ep_name']); $paper_conds['ep_name like ?'] = '%' . $postData['ep_name'] . '%'; } // 获取符合条件的试卷ID $paperModel = new ExamPaperModel(); $paperList = $paperModel->list_by_conds($paper_conds, null, [], 'ep_name,ep_id'); $paperList = array_combine_by_key($paperList, 'ep_id'); $conds['ep_id'] = empty($paperList) ? '' : array_column($paperList, 'ep_id'); // 分页 list($start, $limit) = page_limit($page, $limit); // 分页参数 $page_option = [$start, $limit]; // 排序 if ($postData['score_order'] == 2) { $order_option = ['my_score' => 'ASC', 'my_time' => 'ASC']; } elseif ($postData['score_order'] == 3) { $order_option = ['my_score' => 'DESC', 'my_time' => 'ASC']; } else { $order_option = ['my_begin_time' => 'DESC']; } $conds['answer_status'] = 2; // 已批阅(考试中心迭代后数据已更新:1;待批阅,2:已批阅) $exam_helper = &ExamHelper::instance(); // 获取员工考试统计列表 $result_list = $exam_helper->list_user_exam_count($conds, $page_option, $order_option); if (empty($result_list)) { $this->_result = [ 'page' => $page, 'limit' => $limit, 'total' => 0, 'list' => [], ]; return true; } // 获取员工考试统计列表 $exam_data = $exam_helper->count_user_exam_count($conds); $total = count($exam_data); unset($exam_data); if (empty($userList)) { $uids = array_unique(array_column($result_list, 'uid')); // 获取符合条件的人员UID $userList = $userServ->listByUid($uids); $userList = array_combine_by_key($userList, 'memUid'); } $list = []; foreach ($result_list as $v) { $paper = $paperList[$v['ep_id']]; if ($paper) { $user = $userList[$v['uid']]; // 获取被删除的用户 if (empty($user)) { $user = $userServ->getByUid($v['uid']); } // 得分为小数时按小数处理,不为小数时显示整数 $my_score_arr = explode('.', $v['my_score']); $my_score = intval($my_score_arr[1]) > 0 ? $v['my_score'] : (int)$v['my_score']; $list[] = [ 'ea_id' => intval($v['ea_id']), 'uid' => $v['uid'], 'username' => $user['memUsername'], 'dp_names' => isset($user['dpName']) && !empty($user['dpName']) ? array_column($user['dpName'], 'dpName') : [], 'job' => $user['memJob'], 'role' => $user['memRole'], 'ep_id' => intval($v['ep_id']), 'ep_name' => $paper['ep_name'], 'my_begin_time' => (int)$v['my_begin_time'], 'my_end_time' => (int)$v['my_end_time'], 'my_time' => ceil($v['my_time'] / 1000), 'my_score' => $my_score, 'my_is_pass' => intval($v['my_is_pass']), 'paper_type' => intval($paper['paper_type']), ]; } } $this->_result = [ 'page' => $page, 'limit' => $limit, 'total' => $total, 'list' => $list, ]; } }