本文介绍了体育直播系统中主播端核心功能模块“我是主播”的实现思路与关键代码。该模块基于 Vue.js 构建前端页面,后端采用 ThinkPHP 提供 API 支持,同时兼容 Android(Java)和 iOS(Objective-C)移动端访问,确保多端一致体验。
前端(Vue.js)实现
直播收益页面
收益总额:{{ totalIncome }}
直播记录页面
直播时长:{{ totalTime }}
后端(PHP + ThinkPHP)
接口:获取直播收益
public function earnings()
{
$anchorId = session('user_id');
$date = input('post.date'); // yyyy-MM 格式
$start = $date . '-01';
$end = date("Y-m-t", strtotime($start));
$list = Db::name('gift_log')
->where('anchor_id', $anchorId)
->whereBetweenTime('create_time', $start, $end)
->field('create_time as date, gift_name, gift_value, from_user_id as sender')
->select();
$total = array_sum(array_column($list, 'gift_value'));
return json(['code' => 1, 'data' => $list, 'total' => $total]);
接口:获取直播记录
public function history()
{
$anchorId = session('user_id');
$range = input('post.range'); // week / month / three_months
switch ($range) {
case 'week':
$start = date("Y-m-d", strtotime("-7 days"));
break;
case 'month':
$start = date("Y-m-01");
break;
case 'three_months':
$start = date("Y-m-d", strtotime("-3 months"));
break;
}
$list = Db::name('live_session')
->where('anchor_id', $anchorId)
->where('start_time', '>=', $start)
->field('start_time, duration')
->select();
$total_seconds = array_sum(array_column($list, 'duration'));
$total_time = gmdate("H小时i分s秒", $total_seconds);
return json(['code' => 1, 'records' => $list, 'total_time' => $total_time]);
}
移动端逻辑(Java / Objective-C)
Android(Java)
@POST("api/anchor/earnings")
Call getEarnings(@Body EarningsRequest request);
Call call = api.getEarnings(new EarningsRequest("2021-09"));
call.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
earningsList.setAdapter(new EarningsAdapter(response.body().data));
}
});
iOS(Objective-C)
NSURL *url = [NSURL URLWithString:@"https://yourapi.com/api/anchor/earnings"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
NSDictionary *params = @{@"date": @"2021-09"};
request.HTTPBody = [NSJSONSerialization dataWithJSONObject:params options:0 error:nil];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
self.earningsData = json[@"data"];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
}];
[task resume];
数据库设计(MySQL)
CREATE TABLE `gift_log` (
`id` int NOT NULL AUTO_INCREMENT,
`anchor_id` int NOT NULL,
`from_user_id` int NOT NULL,
`gift_name` varchar(50),
`gift_value` int,
`create_time` datetime,
PRIMARY KEY (`id`)
);
CREATE TABLE `live_session` (
`id` int NOT NULL AUTO_INCREMENT,
`anchor_id` int NOT NULL,
`start_time` datetime,
`duration` int COMMENT '单位为秒',
PRIMARY KEY (`id`)
);