ColumnDataController.class.php
3.38 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
<?php
/**
* 整体数据总览(栏目访问占比)
* User: daijun
* Date: 2017/10/10
* Time: 上午9:57
*/
namespace Apicp\Controller\AllData;
use Common\Common\ColumnHelper;
use Common\Common\DataHelper;
use Common\Service\ColumnService;
class ColumnDataController extends \Apicp\Controller\AbstractController
{
/**
* ColumnData
* @author daijun
* @desc 栏目访问占比接口
*
* @param array dp_ids 组织(部门)ID集合,为空时查询全公司
* @param int starttime 开始时间(时间戳:毫秒)
* @param int endtime 结束时间(时间戳:毫秒)
*
* @return array
array(
'data'=>array(
array(
'title' => '调研中心', // 栏目名称
'total' => 20, // 访问次数
'percent' => 12.50 // 访问占比
),
)
);
*/
public function Index_post()
{
// 获取组织id集合
$dp_ids = I('post.dp_ids');
// 获取开始统计时间
$starttime = I('post.starttime');
// 获取结束统计时间
$endtime = I('post.endtime');
if (empty($starttime) || empty($endtime)) {
// 参数非空验证
E('_EMPTY_DATE_AREA');
}
// 实例化
$column_helper = &ColumnHelper::instance();
// 获取栏目列表
$column_list = $column_helper->list_column_data();
// 获取栏目id集合
$obj_ids = array_column($column_list, 'recommender_id');
if (empty($obj_ids)) {
// 如果栏目id集合为空,则直接返回
$this->_result = [
'data' => []
];
return true;
}
$data_helper = &DataHelper::instance();
// 格式化开始和结束时间
$starttime = $data_helper->formatStarttime($starttime);
$endtime = $data_helper->formatEndtime($endtime);
// 组装查询条件
$conds = [
'starttime' => $starttime,
'endtime' => $endtime,
'dp_ids' => $dp_ids,
'obj_ids' => $obj_ids
];
$column_serv = new ColumnService();
// 依据条件获取栏目访问统计数据
$visit_list = $column_serv->getColumnData($conds);
// 格式化返回数据
$this->_result = [
'data' => $this->format_data($visit_list, $column_list)
];
}
/**
* 格式化返回数据
*
* @param $visit_list 用户栏目访问统计数据
* @param $column_list 栏目列表
*
* @return array
*/
private function format_data($visit_list, $column_list)
{
$data = [];
// 将访问记录数据转换成以栏目id为主键的二维数组
$visit_list = array_combine_by_key($visit_list, 'obj_id');
// 将访问次数组成一维数组
$total_arr = array_column($visit_list, 'total');
// 计算访问总次数
$totals = array_sum($total_arr);
// 循环组装数据
foreach ($column_list as $k => $v) {
$total = (int)$visit_list[$v['recommender_id']]['total'];
$data[$k] = [
'title' => $v['title'],
'total' => $total,
'percent' => sprintf('%.2f', ($total / $totals) * 100)
];
}
return $data;
}
}