<?php /** * Created by PhpStorm. * User: liyifei2012it * Date: 17/10/11 * Time: 17:41 */ namespace Apicp\Controller\UserData; use Com\PackageValidate; use Common\Common\Constant; use Common\Common\User; use Common\Common\ExamHelper; use Common\Common\CourseHelper; use Common\Model\CourseArticleModel; use Common\Model\CourseCompleteModel; use Common\Model\CourseStudyTimeModel; class ListController extends \Apicp\Controller\AbstractController { /** * List * @author liyifei * @desc 员工数据总览,列表接口 * @param Int page:1 当前页 * @param Int limit:20 当前页条数 * @param Array dp_ids 组织ID * @param Array role_ids 角色ID * @param Array job_ids 岗位ID * @param String username 姓名 * @return array array( 'page' => 1, // 当前页 'limit' => 20, // 当前页条数 'total' => 100, // 总条数 'list' => array( // 列表数据 array( 'uid' => 'B4B3B9D17F00000173E870DA9A855AE7', // 人员UID 'username' => '李四', // 姓名 'dp_names' => array('开发组', '测试组'), // 组织 'job' => '苹果系统工程师', // 岗位 'role' => 'leader', // 角色 'course_complete_total' => 15, // 课程已完成数 'course_total' => 20, // 课程可完成数 'course_complete_rate' => 80.88, // 课程完成率 'study_time' => 999, // 课程学习时长(秒) 'exam_pass_total' => 9, // 考试及格数 'exam_total' => 10, // 可考试总数 'exam_rate' => 99.99, // 考试及格率 'questionnaire_total' => 5, // 参加调研数 'train_total' => 10, // 参加培训次数 ), ), ) */ 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', ]; // 验证请求数据 $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 = []; if (isset($postData['dp_ids'])) { $conds['dpIdList'] = $postData['dp_ids']; // 按部门条件查询时,表示部门是否递归查询人员 【0:不递归(默认值)、1:递归】 $conds['departmentChildrenFlag'] = 1; } if (isset($postData['role_ids'])) { $conds['roleIdList'] = $postData['role_ids']; } if (isset($postData['job_ids'])) { $conds['jobIdList'] = $postData['job_ids']; } if (isset($postData['username'])) { $conds['memUsername'] = $postData['username']; } // 获取符合条件的人员UID $list = []; $userServ = &User::instance(); $userList = $userServ->listByConds($conds, $page, $limit); if (isset($userList['list']) && !empty($userList['list'])) { $uids = array_column($userList['list'], 'memUid'); // 调用西安代军完成考试、调研、培训数据方法 $examHelper = &ExamHelper::instance(); $examList = $examHelper->list_exam_train_questionnaire_data($userList['list']); // 查询常规课程id集合 $course_article = new CourseArticleModel(); $course_article_list = $course_article->list_by_conds(['course_type' => Constant::COURSE_TYPE_NORMAL], null, [], 'article_id,data_id,article_type'); $articles = array_column($course_article_list,'article_id'); // 课程已完成数据 $completeModel = new CourseCompleteModel(); $completeList = $completeModel->completeTotalByUids($uids,$articles); if (!empty($completeList)) { $completeList = array_combine_by_key($completeList, 'uid'); } // 课程学习时长 $studyTimeModel = new CourseStudyTimeModel(); $studyTimeList = $studyTimeModel->listStudyTimeByUids($uids,$articles); if (!empty($studyTimeList)) { $studyTimeList = array_combine_by_key($studyTimeList, 'uid'); } // 可完成课程 $courseHelper = &CourseHelper::instance(); $userArticleIds = $courseHelper->articleCountByUsers($userList['list'],$articles); foreach ($userList['list'] as $user) { $uid = $user['memUid']; // TODO liyifei 用户可完成课程数(逻辑是否可优化) $articleIds = $userArticleIds[$user['memUid']]; // 课程完成率 $completeTotal = isset($completeList[$uid]['total']) ? (int)$completeList[$uid]['total'] : 0; $courseTotal = count($articleIds); $completeRate = $courseTotal > 0 ? round($completeTotal / $courseTotal * 100, 2) : 0; // 考试及格率 $examPassTotal = isset($examList[$uid]['exam_pass_total']) ? $examList[$uid]['exam_pass_total'] : 0; $examTotal = isset($examList[$uid]['exam_total']) ? $examList[$uid]['exam_total'] : 0; $examRate = $examTotal > 0 ? round($examPassTotal / $examTotal * 100, 2) : 0; $list[] = [ 'uid' => $uid, 'username' => $user['memUsername'], 'dp_names' => isset($user['dpName']) && !empty($user['dpName']) ? array_column($user['dpName'], 'dpName') : [], 'job' => $user['memJob'], 'role' => $user['memRole'], 'course_complete_total' => $completeTotal, 'course_total' => $courseTotal, 'course_complete_rate' => $completeRate > 100 ? 100 : $completeRate, 'study_time' => isset($studyTimeList[$uid]['study_time']) ? intval($studyTimeList[$uid]['study_time']) : 0, 'exam_pass_total' => $examPassTotal, 'exam_total' => $examTotal, 'exam_rate' => $examRate, 'questionnaire_total' => isset($examList[$uid]['questionnaire_total']) ? $examList[$uid]['questionnaire_total'] : 0, 'train_total' => isset($examList[$uid]['train_total']) ? $examList[$uid]['train_total'] : 0, ]; } } $this->_result = [ 'page' => $userList['pageNum'], 'limit' => $userList['pageSize'], 'total' => $userList['total'], 'list' => $list ]; } }