PublishController.class.php
3.95 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
/**
* 【后台】快速发布接口
* Created by PhpStorm.
* User: yingcai
* Date: 2018/1/16
* Time: 上午10:19
*/
namespace Apicp\Controller\Room;
use Common\Common\Constant;
use Common\Service\CronService;
use Common\Service\MainService;
use Common\Service\RangeService;
class PublishController extends AbstractController
{
/**
* Publish
* @author houyingcai
* @desc 快速发布接口
* @param Int lm_id:true:1 直播活动ID
* @return bool
*/
public function Index_post()
{
$lmId = I('post.lm_id', 0, 'rintval');
// 直播ID不能为空
if (!$lmId) {
E('_EMPTY_LIVE_ID');
}
$mainServ = new MainService();
// 判断是否还有一条直播活动
$hasAnotherLive = $mainServ->get_by_conds(['live_status' => Constant::LIVE_STATUS_PUBLISHED]);
if (!empty($hasAnotherLive)) {
E('_ERR_ONLY_ONE_LIVE_EVENT_CAN_BE_PLAYED_AT_THE_SAME_TIME');
}
// 获取直播信息
$mainDetail = $mainServ->get($lmId);
// 直播信息不存在
if (empty($mainDetail)) {
E('_ERR_LIVE_IS_NOT_EXIST');
}
// 不是草稿不允许发布
if ($mainDetail['live_status'] != Constant::LIVE_STATUS_DEAFT) {
E('_ERR_LIVE_STATUS_NOT_DEAFT');
}
// 判断开始时间
if ($mainDetail['start_time'] <= MILLI_TIME) {
E(L('_ERR_PARAMS_NON_COMPLIANT', ['name' => '开始时间', 'why' => '不得早于当前时间']));
}
// 更新主表的直播状态
$mainServ->update($lmId, ['live_status' => Constant::LIVE_STATUS_PUBLISHED]);
// 获取权限范围
$rangeServ = new RangeService();
$range = $rangeServ->getData(['lm_id' => $lmId]);
// 格式化权限数据
$range = $this->formatRangeData($range);
// 发布时推送消息提醒
if (Constant::NOTICE_POSTING_TRUE == $mainDetail['notice_posting']) {
$mainServ->pushMsg($mainDetail, $range);
}
$cronServ = new CronService();
// 直播开始前 (分钟)推送消息提醒
if ($mainDetail['notice_will_start'] > 0) {
// 直播开始前 推送消息的时间点
$cronServ->createCron(
$mainDetail['lm_id'],
'live_notice_will_start',
Constant::TYPE_LIVE_WILL_START,
$mainDetail['start_time'] - $mainDetail['notice_will_start'] * 60 * 1000
);
}
// 直播开始时推送消息
if (Constant::NOTICE_START_TRUE == $mainDetail['notice_start']) {
$cronServ->createCron(
$mainDetail['lm_id'],
'live_notice_start',
Constant::TYPE_LIVE_START,
$mainDetail['start_time']
);
}
if (Constant::RECOMEND_TRUE == $mainDetail['recomend']) {
// 移动端首页推荐
$mainServ->openOrCloseRecommender($mainDetail, $range);
}
return true;
}
/**
* 格式化权限数据
* @param array $range 权限范围
* @return array
*/
private function formatRangeData($range)
{
$right = [];
// 非全公司
if (Constant::RANGE_IS_ALL_TRUE != $range['is_all']) {
$right['uids'] = !empty($range['user_list']) ? array_column($range['user_list'], 'uid') : '';
$right['dp_ids'] = !empty($range['dp_list']) ? array_column($range['dp_list'], 'dp_id') : '';
$right['job_ids'] = !empty($range['job_list']) ? array_column($range['job_list'], 'job_id') : '';
$right['role_ids'] = !empty($range['role_list']) ? array_column($range['role_list'], 'role_id') : '';
$right['tag_ids'] = !empty($range['tag_list']) ? array_column($range['tag_list'], 'tag_id') : '';
} else {
$right['is_all'] = Constant::RANGE_IS_ALL_TRUE;
}
return $right;
}
}