ListController.class.php
5.4 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
154
155
<?php
/*
* 直播-列表
* 2018.07.19
*
*/
namespace Apicp\Controller\VhLiveTotal;
use Common\Common\Constant;
use Common\Common\User;
use Common\Common\Vhall;
use Common\Service\MainService;
use Common\Service\StudioPlaybackService;
class ListController extends AbstractController
{
public function Index_post()
{
$params = I('post.');
$data = Vhall::instance()->listByBasic($params, $params['page'], $params['limit'], ['createTime'=>'DESC']);
$data['page'] = $data['pageNum'];
$data['limit'] = $data['pageSize'];
// 兼容老数据
// 组合搜索条件
$conds = $this->assemble_where($params);
// 获取记录总数
$mainService = new MainService();
$total = $mainService->count_by_conds($conds);
$uc_total = $data['total'];
// 计算UC总页码
$uc_page = ceil($uc_total / $params['limit']);
$list = [];
// 记录总数不为空:有数据
if ($total && count($data['list']) < $params['limit']) {
// 如果当前页码和UC页码一致
if ($uc_page == $params['page']) {
$start = 0;
$params['limit'] = $params['limit'] - count($data['list']);
} else {
$start = ($params['page'] - 1) * $params['limit'] - $data['total'];
}
// 分页参数
$pageOption = [$start, $params['limit']];
// 排序
$orderOption = [
'updated' => 'DESC',
'created' => 'DESC',
];
// 查询字段
$fields = 'lm_id,name,pic,live_status,start_time,watched_total,range_total,updated,created';
// 获取列表数据
$list = $mainService->list_by_conds($conds, $pageOption, $orderOption, $fields);
// 获取对应的回放地址
$studioPlaybackServ = new StudioPlaybackService();
$playBackList = $studioPlaybackServ->list_by_conds(['lm_id' => array_column($list, 'lm_id')]);
$lmIdWithPlayBack = [];
foreach ($playBackList as $item) {
// 根据 lm_id 归总 并把序号作为 key 后面再拿来排序用
$lmIdWithPlayBack[$item['lm_id']][$item['number']] = $item['sd'];
}
// 格式化列表数据
foreach ($list as &$v) {
$v['id'] = $v['lm_id'];
$v['liveName'] = $v['name'];
$v['liveStartTime'] = $v['start_time'];
$v['watchedNum'] = $v['watched_total'];
$v['totalNum'] = $v['range_total'];
// 封面图URL
$v['liveCover'] = $mainService->formatCover($v['pic']);
// 转换状态
$v['liveType'] = $mainService->live_status($v['live_status'], $v['start_time'])-1;
// 最后更新时间
$v['updateTime'] = $v['updated'] ? $v['updated'] : $v['created'];
// 视频回放地址
ksort($lmIdWithPlayBack[$v['lm_id']]);
$v['video_url'] = !empty($lmIdWithPlayBack[$v['lm_id']]) ?
array_values($lmIdWithPlayBack[$v['lm_id']]) : [];
// 是否有视频回放
$v['has_playback'] = !empty($lmIdWithPlayBack);
}
}
// 判断是否还有一条直播活动
$hasAnotherLive = $mainService->get_by_conds(['live_status' => Constant::LIVE_STATUS_PUBLISHED]);
$data['can_create'] = empty($hasAnotherLive);
$data['total'] = $data['total'] + $total;
unset($list['pageNum'], $list['pageSize']);
if(!empty($list)){
$data['list'] = array_merge($data['list'], $list);
}
$this->_result = $data;
return true;
}
/**
* @desc 组合搜索条件
* @param array $postData 搜索条件
* @return array
*/
private function assemble_where($postData)
{
$conds = [];
if (isset($postData['keyword'])) {
$postData['name'] = str_replace("%", '\%', $postData['keyword']);
$conds['name like ?'] = '%' . $postData['name'] . '%';
}
if (isset($postData['startTime']) && isset($postData['endTime'])) {
$conds['start_time >= ?'] = $postData['startTime'];
$conds['start_time <= ?'] = $postData['endTime'];
}
// 直播状态不为空
if ($postData['liveType']!='') {
switch ($postData['liveType']) {
// 草稿
case Constant::LIVE_WEB_STATUS_DRAFT_TYPE:
$conds['live_status'] = Constant::LIVE_STATUS_DEAFT;
break;
// 未开始
case Constant::LIVE_WEB_STATUS_NOT_START_TYPE:
$conds['start_time > ?'] = MILLI_TIME;
$conds['live_status'] = Constant::LIVE_STATUS_PUBLISHED;
break;
// 进行中
case Constant::LIVE_WEB_STATUS_ING_TYPE:
$conds['live_status'] = Constant::LIVE_STATUS_PUBLISHED;
$conds['start_time < ?'] = MILLI_TIME;
break;
// 已结束
case Constant::LIVE_WEB_STATUS_END_TYPE:
$conds['live_status'] = Constant::LIVE_STATUS_OVER;
break;
default:
}
}
return $conds;
}
}