DataRankController.class.php
4.98 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
141
142
143
144
145
146
147
148
149
150
151
152
153
<?php
/**
* Created by PhpStorm.
* User: zhonglei
* Date: 17/10/13
* Time: 17:31
*/
namespace Apicp\Controller\AllData;
use Com\PackageValidate;
use Common\Common\User;
use Common\Common\Constant;
use Common\Common\DataHelper;
use Common\Common\ExamHelper;
use Common\Model\CourseArticleModel;
class DataRankController extends \Apicp\Controller\AbstractController
{
/**
* DataRank
* @author zhonglei
* @desc 数据排行统计接口
* @param Int starttime:true 开始时间戳
* @param Int endtime:true 结束时间戳
* @return array
array(
'study_time' => array( // 学习时长排行
array(
'uid' => 'A', // 用户ID
'username' => '宇宙超级无敌小霸王', // 用户姓名
'face' => '', // 头像
'dp_names' => array( // 部门
'部门1', '部门2'
),
'total' => 100, // 学习时长(单位:秒)
),
),
'study_complete' => array( // 学习完成排行
array(
'uid' => 'A', // 用户ID
'username' => '宇宙超级无敌小霸王', // 用户姓名
'face' => '', // 头像
'dp_names' => array( // 部门
'部门1', '部门2'
),
'total' => 100, // 学习完成门数
),
),
'exam' => array( // 学霸排行
array(
'uid' => 'A', // 用户ID
'username' => '宇宙超级无敌小霸王', // 用户姓名
'face' => '', // 头像
'dp_names' => array( // 部门
'部门1', '部门2'
),
'total' => 100, // 考试平均分
),
),
)
*/
public function Index_post()
{
// 请求数据
$post_data = I('post.');
// 验证规则
$rules = [
'dp_ids' => 'array',
'starttime' => 'require|integer',
'endtime' => 'require|integer',
];
// 验证请求数据
$validate = new PackageValidate();
$validate->postData = $post_data;
$validate->validateParams($rules);
$dataHelper = &DataHelper::instance();
$examHelper = &ExamHelper::instance();
$starttime = $dataHelper->formatStarttime($post_data['starttime']);
$endtime = $dataHelper->formatEndtime($post_data['endtime']);
$limit = Constant::DATARANK_SHOW_TOTAL * 30;
// 查询常规课程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');
// 获取学习时长排行
$studytime_rank = $dataHelper->listUserCourseStudyTimeRank($starttime, $endtime, $limit,$articles);
// 获取完成课程门数排行
$complete_rank = $dataHelper->listUserCourseCompleteRank($starttime, $endtime, $limit,$articles);
// 获取学霸排行
$exam_rank = $examHelper->recursion_rank($starttime, $endtime, $limit);
// 格式化学霸排行
foreach ($exam_rank as $k => $v) {
$exam_rank[$k]['total'] = round($v['avg_score'], 2);
}
$rank_list = [
'study_time' => $studytime_rank,
'study_complete' => $complete_rank,
'exam' => $exam_rank
];
$uids = [];
$users = [];
// 获取用户ID
foreach ($rank_list as $rank) {
$uids = array_merge($uids, array_column($rank, 'uid'));
}
// 获取用户
if (!empty($uids)) {
$uids = array_values(array_unique($uids));
$userServ = &User::instance();
$users = $userServ->listByUid($uids);
}
// 遍历排行榜
foreach ($rank_list as $k => $rank) {
$data = [];
// 整合数据
foreach ($rank as $v) {
$uid = $v['uid'];
if (!isset($users[$uid])) {
continue;
}
$data[] = [
'uid' => $uid,
'username' => $users[$uid]['memUsername'],
'face' => $users[$uid]['memFace'],
'dp_names' => array_column($users[$uid]['dpName'], 'dpName'),
'total' => $v['total'],
];
if (count($data) == Constant::DATARANK_SHOW_TOTAL) {
break;
}
}
$this->_result[$k] = $data;
}
}
}