$data['width'], 'ad_place.height' => $data['height'] ]; $start=Carbon::parse($data['starttime']); $end=Carbon::parse($data['endtime']); $status = [ 0=>'1', 1=>'4', 2=>'6' ]; $ads = Ad::where('fromtime','<=',$start)->where('totime','>=',$end)->select('pid')->get()->all(); $orderads = OrderAd::where('fromtime','<=',$start)->where('totime','>=',$end)->whereIn('status',$status)->select('pid')->get()->all(); $pids = array_merge($ads, $orderads); $ad_pids = array_unique($pids); // $ad_pid = [1,2,3]; if(!empty($ad_pids)){ $pid = []; foreach($ad_pids as $val){ array_push($pid,$val['pid']); } $placeids = AdPlace::whereNotIn('id',$pid)->where($where)->select('id')->get()->all(); // 符合用户条件的空广告位 $place_id = []; foreach($placeids as $val){ array_push($place_id,$val['id']); } $rep = AdPlace::whereIn('ad_place.id',$place_id) ->leftJoin('website','ad_place.website_id','website.id') ->select('ad_place.*','website.website_name','website.id') ->selectSub('website.id', 'webid') ->selectSub('ad_place.id', 'pid') ->orderBy("website.id","asc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize']) ->get(); }else{ $rep = AdPlace::where($where) ->leftJoin('website','ad_place.website_id','website.id') ->select('ad_place.*','website.website_name','website.id') ->selectSub('website.id', 'webid') ->selectSub('ad_place.id', 'pid') ->orderBy("website.id","asc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize']) ->get(); } $startTime = strtotime($data['starttime']); $endTime = strtotime($data['endtime']); $time = ($endTime - $startTime)/(24 * 60 * 60); $roundedValue = round($time, 2); $days = number_format($roundedValue, 2, '.', ''); $count = count($rep); $data = [ 'rows'=>$rep->toArray(), 'count'=>$count, 'days' => $days ]; if(empty($rep)){ return Result::error("暂时没有符合您条件的广告位"); } return Result::success($data); } /** * 添加订单 * @param * @return void */ public function addOrder(array $data): array { $ads = Ad::whereIn($data['id']) ->leftJoin('ad_place', 'ad.pid', 'ad_place.id') ->leftJoin("article_data", "article.id", "article_data.article_id") ->select("ad_place.*", "ad.*") ->orderBy("ad.id", "desc") ->limit($data['pageSize']) ->offset(($data['page'] - 1) * $data['pageSize'])->get(); $count = Ad::whereIn($data['id'])->count(); $data = [ 'rows' => $ads->toArray(), 'count' => $count, ]; if (empty($rep)) { return Result::error("没有信息数据"); } return Result::success($data); } /** * 获取订单列表 * @param * @return void */ public function getOrderListAdmin(array $data): array { // 获取分页参数,默认每页 10 条记录 $page = isset($data['page']) ? (int) $data['page'] : 1; $perPage = isset($data['pagesize']) ? (int) $data['pagesize'] : 10; // 构建查询条件 $where = [ 'order.status' => $data['status'], // 明确指定 order 表的 status 列 ]; // 添加订单号查询条件 if (!empty($data['order_num'])) { $where['order.order_num'] = $data['order_num']; // 明确指定 order 表的 order_num 列 } // 处理时间范围查询 $start = $data['sttime']; $end = $data['edtime']; // 查询数据并分页 $query = Order::where($where) ->when(!empty($start) && !empty($end), function ($q) use ($start, $end) { $q->whereBetween('order.fromtime', [$start, $end]); // 明确指定 order 表的 fromtime 列 }) ->when(!empty($start), function ($q) use ($start) { $q->where('order.fromtime', '>=', $start); // 明确指定 order 表的 fromtime 列 }) ->when(!empty($end), function ($q) use ($end) { $q->where('order.totime', '<=', $end); // 明确指定 order 表的 totime 列 }) ->leftJoin('user as admin_user', 'order.admin_user_id', '=', 'admin_user.id') ->leftJoin('user as user', 'order.user_id', '=', 'user.id') ->select( 'order.*', 'admin_user.user_name as admin_user_name', 'user.user_name as user_name' ) ->orderBy('order.id'); // 执行分页查询 $result = $query->paginate($perPage, ['*'], 'page', $page); // 返回分页结果 return Result::success([ 'count' => $result->total(), 'current_page' => $result->currentPage(), 'last_page' => $result->lastPage(), 'pagesize' => $result->perPage(), 'rows' => $result->items(), ]); } /** * 获取订单详情 * @param * @return void */ public function getOrderDetailAdmin(array $data): array { $order = Order::where('order.id', $data['id']) ->leftJoin('user as admin_user', 'order.admin_user_id', '=', 'admin_user.id') ->leftJoin('user as user', 'order.user_id', '=', 'user.id') ->select( 'order.*', 'admin_user.user_name as admin_user_name', 'user.user_name as user_name' )->first(); if (empty($order)) { return Result::error("没有信息数据"); } $pid = $order['id']; $ad = OrderAd::where('order_id', $pid)->get(); $order['ad'] = $ad; return Result::success($order); } /** * 修改订单价格 * @param * @return void */ public function editPriceOrderAdmin(array $data): array { $order = Order::where('id', $data['id'])->first(); if (empty($order)) { return Result::error("没有信息数据"); } $order->price = $data['price']; $order->save(); return Result::success($order); } /** *拒绝订单 * @param * @return void */ public function rejectOrderAdmin(array $data): array { $order = Order::where('id', $data['id'])->first(); if (empty($order)) { return Result::error("没有信息数据"); } Db::beginTransaction(); try { $order->status = 2; //订单状态:1:通过;2:驳回;3:撤回;4:修改;5:过期;6:待审核;7:结束 $order->ad_status = 2; $order->reason = $data['reason']; $order->bhtime = date('Y-m-d H:i:s'); $order->save(); OrderAd::where('order_id', $data['id']) ->update(['status' => 2]); Db::commit(); } catch (\Exception $e) { Db::rollBack(); return Result::error("操作失败"); } return Result::success($order); } /** * 结束订单 * @param * @return void */ public function endOrderAdmin(array $data): array { $order = Order::where('id', $data['id'])->first(); if (empty($order)) { return Result::error("没有信息数据"); } Db::beginTransaction(); try { $order->status = 7; $order->jstime = date('Y-m-d H:i:s'); $order->save(); // 获取 order_ad 表中的记录 $orderAds = OrderAd::where('order_id', $data['id']) ->update(['status' => 7]); // 在ad表中删除相同pid的数据 Ad::where('order_id',$data['id'])->delete(); Db::commit(); } catch (\Exception $e) { Db::rollBack(); return Result::error("操作失败" . $e->getMessage()); } return Result::success($order); } /** * 删除订单 * @param * @return void */ public function delOrderAdmin(array $data): array { // 获取订单信息 $order = Order::where('id', $data['id'])->first(); if (empty($order)) { return Result::error("没有信息数据"); } Db::beginTransaction(); try { // 获取 order_ad 表中的记录 OrderAd::where('order_id', $data['id'])->delete(); // 删除 ad 表中的记录 Ad::where('order_id', $order['id'])->delete();) // 提交事务 Db::commit(); } catch (\Exception $e) { // 回滚事务 Db::rollBack(); // 返回错误信息 return Result::error($e->getMessage()); } // 返回成功信息 return Result::success("删除成功"); } /** * 审核订单 * @param * @return void */ public function applyOrderStatusAdmin(array $data): array { $order = Order::where('id', $data['id']) ->where('status', 6) ->first(); if (empty($order)) { return Result::error("没有信息数据"); } Db::beginTransaction(); try { $order->status = 1; //判断是否在周期范围内 $ad_status = 8;// 待生效 if ($order->starttime < date('Y-m-d H:i:s') && date('Y-m-d H:i:s') < $order->endtime) { // 条件满足时的逻辑 $ad_status = 1; } $order->ad_status = 1; $order->shtime = date('Y-m-d H:i:s'); $order->save(); // 批量更新 order_ad 表中的状态 OrderAd::where('order_id', $data['id']) ->where('status', 6) ->update(['status' => 1]); //判断的当前时间是否在订单的开始时间之后,并且小于等于订单的结束时间 if (time() >= strtotime($order->sttime) && time() < strtotime($order->edtime)) { $ad_status = 1; //审核生效 } else { $ad_status = 2; //审核 } $ads = []; $orderAds = $orderAds::where('order_id', $data['id'])->get(); foreach ($orderAds as $orderAd) { $ads[] = [ 'name' => $orderAd->name, 'pid' => $orderAd->pid, 'areaid' => $orderAd->areaid, 'amount' => $orderAd->amount, 'introduce' => $orderAd->introduce, 'hits' => $orderAd->hits, 'admin_user_id' => $orderAd->admin_user_id, 'fromtime' => $orderAd->fromtime, 'totime' => $orderAd->totime, 'text_name' => $orderAd->text_name, 'text_url' => $orderAd->text_url, 'text_title' => $orderAd->text_title, 'image_src' => $orderAd->image_src, 'image_url' => $orderAd->image_url, 'image_alt' => $orderAd->image_alt, 'video_src' => $orderAd->video_src, 'video_url' => $orderAd->video_url, 'video_auto' => $orderAd->video_auto, 'video_loop' => $orderAd->video_loop, 'status' => $ad_status, 'order_id' => $orderAd->order_id, ]; } Ad::insert($ads); Db::commit(); } catch (\Exception $e) { Db::rollBack(); return Result::error($e->getMessage()); } return Result::success($order); } /*  * 根据用户条件及网站搜索没有广告的广告位  * @param  * @return void */ public function getWebsiteAd(array $data): array { $where = [ 'ad_place.width' => $data['width'], 'ad_place.height' => $data['height'] ]; $start=Carbon::parse($data['starttime']); $end=Carbon::parse($data['endtime']); $status = [ 0=>'1', 1=>'4', 2=>'6' ]; $ads = Ad::where('fromtime','<=',$start)->where('totime','>=',$end)->select('pid')->get()->all(); $orderads = OrderAd::where('fromtime','<=',$start)->where('totime','>=',$end)->whereIn('status',$status)->select('pid')->get()->all(); $pids = array_merge($ads, $orderads); $ad_pids = array_unique($pids); if(!empty($ad_pids)){ $pid = []; foreach($ad_pids as $val){ array_push($pid,$val['pid']); } $placeids = AdPlace::whereNotIn('id',$pid)->where($where)->select('id','website_id')->get()->all(); if(!isset($data['website_id'])){ $website_id = []; foreach($placeids as $v){ array_push($website_id,$v['website_id']); } $result = Website::whereIn('id',$website_id)->get(); }else{ $place_id = []; foreach($placeids as $val){ array_push($place_id,$val['id']); } $rep = AdPlace::where($where) ->whereIn('ad_place.id',$place_id) ->where('ad_place.website_id',$data['website_id']) ->leftJoin('website','ad_place.website_id','website.id') ->select('ad_place.*','website.website_name','website.id') ->selectSub('website.id', 'webid') ->selectSub('ad_place.id', 'pid') ->orderBy("website.id","asc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize']) ->get(); $count = count($rep); $result = [ 'rows'=>$rep->toArray(), 'count'=>$count ]; } }else{ if(isset($data['website_id'])){ $rep = AdPlace::where($where) ->where('ad_place.website_id',$data['website_id']) ->leftJoin('website','ad_place.website_id','website.id') ->select('ad_place.*','website.website_name','website.id') ->selectSub('website.id', 'webid') ->selectSub('ad_place.id', 'pid') ->orderBy("website.id","asc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize']) ->get(); $count = count($rep); $result = [ 'rows'=>$rep->toArray(), 'count'=>$count ]; }else{ $place_all = AdPlace::where($where)->select('website_id')->get()->all(); $place_allads = []; foreach($place_all as $v){ array_push($place_allads,$v['website_id']); } $result = Website::whereIn('id',$place_allads)->get(); } } if(empty($data)){ return Result::error("暂时没有符合您条件的广告位"); } $startTime = strtotime($data['starttime']); $endTime = strtotime($data['endtime']); $time = ($endTime - $startTime)/(24 * 60 * 60); $roundedValue = round($time, 2); $days = number_format($roundedValue, 2, '.', ''); $count = count($rep); $result['days'] = $days; return Result::success($result); } /**  * 添加广告订单  * @param  * @return void */ public function addAD(array $data): array { date_default_timezone_set('Asia/Shanghai'); $time = time(); $startTime = strtotime($data['starttime']); $endTime = strtotime($data['endtime']); $con_time = ($endTime - $startTime)/(24 * 60 * 60); $roundedValue = round($con_time, 2); $days = number_format($roundedValue, 2, '.', ''); $timestamp = date('YmdHis',$time); $catetime = date('Y-m-d H:i:s',$time); $randomNumber = mt_rand(1000, 9999); $ordernum = $randomNumber . $timestamp; // 时间戳与随机数拼接 // var_dump(($time)); $order = [ 'order_num' => $ordernum, 'sttime' => $data['starttime'], 'edtime' => $data['endtime'], 'user_id' => $data['user_id'], 'cttime' => $catetime, 'height' => $data['height'], 'width' => $data['width'], 'days' => $days ]; $orderid = Order::insertGetId($order); $adplace = $data['pid']; if(is_array($data['pid'])){ $adplace = AdPlace::whereIn('id',$data['pid'])->select('website_id','id')->get(); foreach($adplace as $key => $ads){ $order_ad[$key] = [ 'order_id' => $orderid, 'order_num' => $ordernum, 'name' => $data['name'], 'fromtime' => $data['starttime'], 'totime' => $data['endtime'], 'image_src' => $data['imgsrc'], 'image_url' => $data['imgurl'], 'pid' => $ads['id'], 'website_id' => $ads['website_id'] ]; // $log = [ // 'order_id' => $orderid, // 'user_id' => $data['user_id'], // 'pid' => $ads['id'], // 'website_id' => $ads['website_id'], // 'action' => '添加', // 'time' => $catetime // ]; } }else{ $order_ad = [ 'order_id' => $orderid, 'order_num' => $ordernum, 'name' => $data['name'], 'website_id' => $adplace['website_id'], 'fromtime' => $data['starttime'], 'totime' => $data['endtime'], 'image_src' => $data['imgsrc'], 'image_url' => $data['imgurl'], 'pid' => $adplace ]; // $log = [ // 'order_id' => $orderid, // 'user_id' => $data['user_id'], // 'pid' => $adplace, // 'website_id' => $ads['website_id'], // 'action' => '添加', // 'time' => $catetime // ]; } $orderad_id = OrderAd::insert($order_ad); // $log = AdLog::insert($log); if(empty($orderid) || !$orderad_id){ return Result::error("添加失败"); } $result = [ 'order_id' => $orderid, 'orderad_id' => $orderad_id, 'name' => $data['name'], '$ordernum' => $ordernum, ]; return Result::success($result); } /**  * 获取订单列表  * @param  * @return void */ public function getOrderList(array $data): array { $where = [ 'user_id' => $data['user_id'], 'user_del' => 2 ]; if(isset($data['status'])){ $where['status'] = $data['status']; } $orders = Order::where($where) ->orderBy("id","asc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize']) ->get(); if(empty($orders)){ return Result::error("您暂时还没有下单"); }else{ $count = count($orders); $data = [ 'rows'=>$orders->toArray(), 'count'=>$count ]; } return Result::success($data); } /**  * 获取订单详情  * @param  * @return void */ public function getOrderDetail(array $data): array { $order = Order::where('id',$data['order_id'])->first(); $orderads = OrderAd::where('order_ad.order_id',$data['order_id']) ->leftJoin('website','order_ad.website_id','website.id') ->select('order_ad.*','website.website_name','website.id') ->selectSub('website.id', 'webid') ->selectSub('order_ad.id', 'oid') ->orderBy("website.id","asc") ->limit($data['pageSize']) ->offset(($data['page']-1)*$data['pageSize']) ->get(); if(empty($order)){ return Result::error("订单id错误"); } $result = [ 'order' => $order, 'orderads' => $orderads ]; return Result::success($result); } /**  * 撤回订单  * @param  * @return void */ public function cancelOrder(array $data): array { date_default_timezone_set('Asia/Shanghai'); $time = time(); $timestamp = date('YmdHis',$time); $order = Order::where('id',$data['order_id'])->where('status',6)->where('edtime','>=',$timestamp)->update(['status' => 3,'ad_status'=>'3']); $ads = OrderAd::where('order_id',$data['order_id'])->where('status',6)->where('totime','>=',$timestamp)->update(['status' => 3]); if(!$order || !$ads){ return Result::error("订单id错误"); } $result = [ 'order' => $order, 'ads' => $ads ]; return Result::success($result); } /**  * 删除订单  * @param  * @return void */ public function delOrderAD(array $data): array { $data['status'] = [ 0 => 2, 1 => 3, 2 => 5, 3 => 7 ]; date_default_timezone_set('Asia/Shanghai'); $time = time(); $timestamp = date('YmdHis',$time); $where = [ ['user_id','=',$data['user_id']], ['id','=',$data['order_id']] ]; $time = [['edtime','<=',$timestamp]]; $order = Order::where($where)->where($time)->update(['user_del' => 1]); if(empty($order)){ $order = Order::where($where)->whereIn('status',$data['status'])->update(['user_del' => 1]); } // if($order == 0){ return Result::error("订单id错误"); } return Result::success($order); } }