<?php /** * Created by PhpStorm. * User: liyifei2012it * Date: 17/10/14 * Time: 11:00 */ namespace Apicp\Controller\UserStudyData; use Com\PackageValidate; use Common\Common\Constant; use Common\Model\CourseArticleModel; use Common\Model\CourseCountModel; use Common\Model\CourseStudyTimeModel; use Common\Common\DataHelper; class StudyChartController extends \Apicp\Controller\AbstractController { /** * StudyChart * @author liyifei * @desc 员工学习数据报表接口 * * @param Int starttime:true 开始时间戳(仅能选择数据中心上线之后的时间,前端进行控制) * @param Int endtime:true 结束时间戳 * * @return array array( 'last_update_time' => 1507957200000, // 学习完成率最后更新时间 'study_complete_rate' => 80.12, // 学习完成率(和时间筛选条件无关,统计数据中心上线后,截止到当天0点的数据) 'hours' => array( // 学习时段(毫秒级时间戳);X轴数据; 1507953600000, 1507957200000 ), 'study_time_solt_uv' => array( // 员工学习时段:学习人数;Y轴数据; 100, 200, ), 'study_time_solt_pv' => array( // 员工学习时段:学习次数;Y轴数据; 300, 400, ), ) */ public function Index_post() { // 验证规则 $rules = [ 'starttime' => 'require|integer|gt:0', 'endtime' => 'require|integer|gt:0', ]; // 验证请求数据 $postData = I('post.'); $validate = new PackageValidate(); $validate->postData = $postData; $validate->validateParams($rules); $dataHelper = &DataHelper::instance(); $startTime = $dataHelper->formatStarttime($postData['starttime']); $endTime = $dataHelper->formatEndtime($postData['endtime']); // 时间区间是否正确 if ($endTime - $startTime <= 0) { E('时间区间错误'); } // 学习完成率 $study_complete_rate = 0; // $countModel = new CourseCountModel(); // $totalList = $countModel->listTotal(); // if (!empty($totalList)) { // // 所有课程完成率之和 // $completeRate = 0; // foreach ($totalList as $v) { // $completeRate += round($v['complete_total'] / $v['user_total'] * 100, 2); // } // // 课程总数 // $total = count($totalList); // // 平均学习完成率 // $study_complete_rate = round($completeRate / $total, 2); // } // 以小时进行时间分段 $solt = 60 * 60 * 1000; // 查询常规课程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'); // 学习数据 $studyTimeModel = new CourseStudyTimeModel(); // 学习人数(人员去重) $uvList = $studyTimeModel->listStudyUserTotal($startTime, $endTime, 2, $articles); // 学习次数 $pvList = $studyTimeModel->listStudyUserCount($startTime, $endTime, $articles); if (!empty($uvList)) { $uvList = array_combine_by_key($uvList, 'hours'); } if (!empty($pvList)) { $pvList = array_combine_by_key($pvList, 'hours'); } $hours = []; $study_time_solt_uv = []; $study_time_solt_pv = []; while ($endTime > $startTime) { $hours[] = (int)$startTime; $formatDate = rgmdate($startTime, 'Y-m-d H:00:00'); // 时间区间的学习人数 if (!empty($uvList) && isset($uvList[$formatDate])) { $study_time_solt_uv[] = (int)$uvList[$formatDate]['total']; } else { $study_time_solt_uv[] = 0; } // 时间区间的学习次数 if (!empty($pvList) && isset($pvList[$formatDate])) { $study_time_solt_pv[] = (int)$pvList[$formatDate]['total']; } else { $study_time_solt_pv[] = 0; } $startTime += $solt; } $this->_result = [ 'last_update_time' => rstrtotime(rgmdate(MILLI_TIME, 'Y-m-d 00:00:00')), 'study_complete_rate' => $study_complete_rate, 'hours' => $hours, 'study_time_solt_uv' => $study_time_solt_uv, 'study_time_solt_pv' => $study_time_solt_pv, ]; } }