<?php /** * Created by PhpStorm. * User: liyifei2012it * Date: 17/10/12 * Time: 10:10 */ namespace Apicp\Controller\UserData; use Com\PackageValidate; use Common\Common\Constant; use Common\Common\User; use Common\Common\CourseHelper; use Common\Model\CourseArticleModel; use Common\Model\CourseCompleteModel; use Common\Model\CourseStudyTimeModel; use Common\Model\CourseClassModel; use Common\Model\CommentModel; use Common\Model\LikeModel; class CourseListController extends \Apicp\Controller\AbstractController {protected $_require_login = false; /** * CourseList * @author liyifei * @desc 员工数据总览,员工课程明细接口 * @param Int page:1 当前页 * @param Int limit:20 当前页条数 * @param String uid 人员UID * @return array array( 'user' => array( // 人员数据 'username' => '李四', // 姓名 'userface' => 'http://p.qlogo.cn/bizmail/FZaQ9jwGLMdFlI84NwMVWCCcZsnxPwXrdkcWWWZTrWS8BAwYMW7yQQ/0', // 头像 'dp_names' => array('开发组', '测试组'), // 组织 'job' => '苹果系统工程师', // 岗位 'role' => 'leader', // 角色 ), 'page' => 1, // 当前页 'limit' => 20, // 当前页条数 'total' => 100, // 总条数 'list' => array( // 列表数据 array( 'order_id' => 1, // 序号 'article_title' => '课程1', // 课程名称 'class_name' => '分类1', // 课程所属分类 'first_study_time' => '1501827237983', // 最近学习时间(原为首次学习时间,后产品修改需求) 'is_complete' => 1, // 是否完成(1=否;2=是) 'complete_time' => '1501827237983', // 完成时间(毫秒级时间戳) 'study_total' => 5, // 学习次数 'study_time' => 10, // 学习时长(单位为秒) 'is_like' => 1, // 是否点赞(1=否;2=是) 'comment_total' => 1, // 评论数 ), ), ) */ public function Index_post() { // 验证规则 $rules = [ 'uid' => 'max:32', 'page' => 'integer|gt:0', 'limit' => 'integer|gt:0', ]; // 验证请求数据 $postData = I('post.'); $validate = new PackageValidate(); $validate->postData = $postData; $validate->validateParams($rules); // 人员信息 $userServ = &User::instance(); $user = $userServ->getByUid($postData['uid']); if (empty($user)) { E('_ERR_USERDATA_USER_IS_EMPTY'); } // 分页 $page = isset($postData['page']) ? $postData['page'] : Constant::PAGING_DEFAULT_PAGE; $limit = isset($postData['limit']) ? $postData['limit'] : Constant::PAGING_DEFAULT_LIMIT; list($sqlPage, $sqlLimit) = page_limit($page, $limit); // 查询常规课程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', ['withOutStatus' => true]); $articles = array_column($course_article_list,'article_id'); $list = []; // 用户已参与的课程ID $articleIds = []; $studyTimeModel = new CourseStudyTimeModel(); $studyTimeList = $studyTimeModel->list_by_conds(['uid' => $user['memUid'],'article_id'=>$articles]); if (!empty($studyTimeList)) { $articleIds = array_values(array_unique(array_column($studyTimeList, 'article_id'))); } // 用户可参与的课程ID // $courseHelper = &CourseHelper::instance(); // $articleIds = $courseHelper->listArticleIdByRight($user, 'article_id'); if (!empty($articleIds)) { // 获取已完成课程ID,并以完成时间倒序 $completeModel = new CourseCompleteModel(); $completeList = $completeModel->list_by_conds(['uid' => $user['memUid'], 'article_id' => $articleIds], null, ['created' => 'DESC']); $completeIds = []; if (!empty($completeList)) { $completeList = array_combine_by_key($completeList, 'article_id'); $completeIds = array_values(array_unique(array_column($completeList, 'article_id'))); } // 将已完成课程ID、可参与课程ID合并去重,获得按课程完成时间倒序排列的课程ID $orderArticleIds = array_unique(array_merge($completeIds, $articleIds)); // 课程总数 $articleModel = new CourseArticleModel(); $articleTotal = $articleModel->count_by_conds(['article_id' => $orderArticleIds], '*', false, true); // 获取课程列表 $articleList = $articleModel->list_by_conds(['article_id' => $orderArticleIds], [$sqlPage, $sqlLimit], [], '*', ['withOutStatus' => true]); if (!empty($articleList)) { // 分页筛选后的课程ID数组 $ids = array_column($articleList, 'article_id'); // 分类名称 $classIds = array_values(array_unique(array_column($articleList, 'class_id'))); $classModel = new CourseClassModel(); $classList = $classModel->list_by_conds(['class_id' => $classIds]); if (!empty($classList)) { $classList = array_combine_by_key($classList, 'class_id'); } // 学习次数 $studyTimeModel = new CourseStudyTimeModel(); $courseStudyList = $studyTimeModel->listCourseStudyTotal($user['memUid'], $ids); if (!empty($courseStudyList)) { $courseStudyList = array_combine_by_key($courseStudyList, 'article_id'); } // 学习时长(单位为秒) $timeTotals = $studyTimeModel->listStudyTime($user['memUid'], $ids); if (!empty($timeTotals)) { $timeTotals = array_combine_by_key($timeTotals, 'article_id'); } // 最近学习时间(原为首次学习时间,后产品修改需求) $firstTimeList = $studyTimeModel->listFirstStudyTime($user['memUid'], $ids); if (!empty($firstTimeList)) { $firstTimeList = array_combine_by_key($firstTimeList, 'article_id'); } // 点赞(埋点数据) $likeModel = new LikeModel(); $conds = [ 'uid' => $user['memUid'], 'app' => Constant::APP_COURSE, 'app_data_id' => $ids, ]; $likeList = $likeModel->listLikeRank($conds); if (!empty($likeList)) { $likeList = array_combine_by_key($likeList, 'app_data_id'); } // 评论数(埋点数据) $commentModel = new CommentModel(); $commentList = $commentModel->listCommentTotalGroup([$user['memUid']], Constant::APP_COURSE, $ids); if (!empty($commentList)) { $commentList = array_combine_by_key($commentList, 'app_data_id'); } // 组合数据 foreach ($articleList as $k => $article) { $articleId = $article['article_id']; $list[] = [ 'order_id' => $k, 'article_id' => $articleId, 'article_title' => $article['article_title'], 'class_name' => trim($classList[$article['class_id']]['class_name']), 'first_study_time' => (int)$firstTimeList[$articleId]['created'], 'is_complete' => in_array($articleId, $completeIds) ? Constant::COURSE_IS_COMPLETE_TRUE : Constant::COURSE_IS_COMPLETE_FALSE, 'complete_time' => (int)$completeList[$articleId]['created'], 'study_total' => (int)$courseStudyList[$articleId]['total'], 'study_time' => (int)$timeTotals[$articleId]['study_time'], 'is_like' => isset($likeList[$articleId]) ? Constant::COURSE_IS_LIKE_TRUE: Constant::COURSE_IS_LIKEE_FALSE, 'comment_total' => (int)$commentList[$articleId]['total'], 'data_status' => (int)$article['status'] ]; } } } $this->_result = [ 'user' => [ 'uid' => $user['memUid'], 'username' => $user['memUsername'], 'userface' => $user['memFace'], 'dp_names' => isset($user['dpName']) && !empty($user['dpName']) ? array_column($user['dpName'], 'dpName') : [], 'job' => $user['memJob'], 'role' => $user['memRole'], ], 'page' => (int)$page, 'limit' => (int)$limit, 'total' => isset($articleTotal) ? (int)$articleTotal : 0, 'list' => $list, ]; } }