StudyChartController.class.php
4.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<?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,
];
}
}