travel/service/app/admin/controller/LiveRoomController.php

200 lines
6.3 KiB
PHP

<?php
namespace app\admin\controller;
use app\model\Admins;
use app\model\LiveRoom;
use app\model\LiveRoomWorks;
use app\model\Orders;
use app\model\Works;
use support\Request;
class LiveRoomController extends base {
/**
* 直播间列表
* @param Request $request
* @return \support\Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function index(Request $request) {
$all = LiveRoom::select();
return $this->success($all);
}
/**
* 更新直播产品
* @param Request $request
* @return \support\Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function saveProducts(Request $request) {
$roomId = $request->post('live_room_id', '');
if (empty($roomId)) {
$this->error('请选择直播间');
}
$products = $request->post('product_ids', '');
$productIds = explode(',', $products);
foreach ($productIds as $productId) {
if (empty($productId)) {
continue;
}
$liveRoom = LiveRoom::whereRaw(sprintf('find_in_set(%s, `product_ids`)', $productId))->where('id', '!=', $roomId)->find();
if (!empty($liveRoom)) {
return $this->error(sprintf('产品ID:%s已经在%s存在', $productId, $liveRoom['name']));
}
}
LiveRoom::where(['id' => $roomId])->update(['product_ids' => $products]);
return $this->success([]);
}
/**
* 排班列表
* @param Request $request
* @return \support\Response
*/
public function roomWorks(Request $request)
{
$roomId = $request->get('live_room_id', '');
if (!$roomId) {
return $this->error('请选择直播间');
}
$weekDays = get_week_days();
foreach ($weekDays as &$day) {
$day['work'] = LiveRoomWorks::getDayWork($day['date'], $roomId);
}
return $this->success($weekDays);
}
/**
* 排班
* @param Request $request
* @return \support\Response
*/
public function saveRoomWorks(Request $request)
{
$id = $request->post('id', '0');
$roomId = $request->post('live_room_id', '');
$zhuboId = $request->post('zhubo_id', 0);
$zhongkongId = $request->post('zhongkong_id', 0);
$route = $request->post('route', '');
$start = $request->post('start');
$end = $request->post('end');
$month = date('Ym', strtotime($start));
$day = date('Ymd', strtotime($start));
if (strtotime($start) < time()) {
return $this->error(6000, '当前时间不可排班');
}
if (strtotime($start) >= strtotime($end)) {
return $this->error(6000, '开始时间不可大于结束时间');
}
// 检测当前日期是否已有排班
if (LiveRoomWorks::dayWorkIsExists($id, $roomId, $start, $end)) {
return $this->error(6001, '当前时间段已有排班');
}
// 检测当前主播当天是否已排班
if (LiveRoomWorks::zhuboWorkIsExists($id, $zhuboId, $day)) {
return $this->error(6002, '当前主播已排班');
}
$data = [
'live_room_id' => $roomId,
'zhubo_id' => $zhuboId,
'zhongkong_id' => $zhongkongId,
'start' => $start,
'end' => $end,
'month' => $month,
'day' => $day,
'route' => $route,
];
if ($id) {
$result = LiveRoomWorks::where('id', $id)->update($data);
} else {
$result = LiveRoomWorks::create($data);
}
return $this->success($result);
}
/**
* 可排班主播列表
* @param Request $request
* @return \support\Response
* @throws \think\db\exception\DbException
*/
public function availableZhubo(Request $request) {
$type = $request->get('type', 2);
$id = $request->get('id', 0);
$start = $request->get('start');
if (empty($start)) {
return $this->error('请选择时间');
}
$end = $request->get('end');
$day = date('Ymd', strtotime($start));
$query = Admins::where('status', 1)->where('type', $type);
$list = $query->field(['id', 'name', 'mobile'])->select();
// 获取已排班主播
$adminIds = LiveRoomWorks::inWorkAdmin($day)->column('zhubo_id');
foreach ($list as $val) {
$val->disabled = false;
if ($type == 2 && in_array($val->id, $adminIds)) {
$val->disabled = true;
}
}
return $this->success($list);
}
/**
* 主播业绩查询
* @param Request $request
* @return \support\Response
*/
public function zhuboStatistics(Request $request)
{
$start = $request->get('start', date('Y-m-01'));
$end = $request->get('end', date('Y-m-d'));
$times = $request->get('times');
if (!empty($times) && is_array($times)) {
$start = $times[0];
$end = $times[1];
}
// 姓名,职务,手机号,订单金额,直播时长
$mobile = $request->get('mobile', '');
$query = Admins::whereIn('type', [2, 3]);
if (!empty($mobile)) {
$query->where('mobile', $mobile);
}
$list = $query->order('id', 'desc')->paginate($request->get('limit', 10));
foreach ($list as $work) {
$work->orders = 0;
$work->total = 0;
$work->asset_total = 0;
$work->work_time = 0;
$statics = LiveRoomWorks::staticOrder($work->type, $work->id, $start, $end);
if ($statics) {
$work->orders = $statics->orders;
$work->total = $statics->total/100;
$work->asset_total = $statics->asset_total/100;
$work->work_time = $statics->work_time;
}
}
return $this->success($list);
}
public function test() {
$data = LiveRoomWorks::staticOrder(3, 38, '2024-09-17 16:00:00', '2024-09-18 15:59:59');
return $this->success($data);
}
}