|
@@ -2,6 +2,7 @@
|
|
|
namespace App\JsonRpc;
|
|
|
|
|
|
use App\Model\Ad;
|
|
|
+use App\Model\AdSize;
|
|
|
use App\Model\AdPlace;
|
|
|
use App\Model\Order;
|
|
|
use App\Model\OrderAd;
|
|
@@ -22,72 +23,80 @@ class OrderService implements OrderServiceInterface
|
|
|
*/
|
|
|
public function getAD(array $data): array
|
|
|
{
|
|
|
- $where = [
|
|
|
+ if(!empty($data)){
|
|
|
+ $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);
|
|
|
- // $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']);
|
|
|
+ 'ad_place.ad_size_id' => $data['ad_size_id']
|
|
|
+ ];
|
|
|
+ $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();
|
|
|
}
|
|
|
- $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,
|
|
|
- ];
|
|
|
+ $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($data['rows'])) {
|
|
|
- return Result::error("暂时没有符合您条件的广告位");
|
|
|
+ if (empty($data['rows'])) {
|
|
|
+ return Result::error("暂无符合您条件的广告位!");
|
|
|
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ $data = AdSize::get();
|
|
|
+ if(empty($data)){
|
|
|
+ return Result::error('暂无广告尺寸!');
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
return Result::success($data);
|
|
|
}
|
|
|
/**
|
|
@@ -140,8 +149,8 @@ class OrderService implements OrderServiceInterface
|
|
|
}
|
|
|
|
|
|
// 处理时间范围查询
|
|
|
- $start = $data['sttime'];
|
|
|
- $end = $data['edtime'];
|
|
|
+ $start = $data['sttime']??'';
|
|
|
+ $end = $data['edtime']??'';
|
|
|
|
|
|
// 查询数据并分页
|
|
|
$query = Order::where($where)
|
|
@@ -386,8 +395,7 @@ class OrderService implements OrderServiceInterface
|
|
|
public function getWebsiteAd(array $data): array
|
|
|
{
|
|
|
$where = [
|
|
|
- 'ad_place.width' => $data['width'],
|
|
|
- 'ad_place.height' => $data['height'],
|
|
|
+ 'ad_place.ad_size_id' => $data['ad_size_id']
|
|
|
];
|
|
|
$start = Carbon::parse($data['starttime']);
|
|
|
$end = Carbon::parse($data['endtime']);
|
|
@@ -458,7 +466,7 @@ class OrderService implements OrderServiceInterface
|
|
|
}
|
|
|
}
|
|
|
if (empty($rep)) {
|
|
|
- return Result::error("暂时没有符合您条件的广告位");
|
|
|
+ return Result::error("暂无符合您条件的广告位!");
|
|
|
}
|
|
|
|
|
|
$startTime = strtotime($data['starttime']);
|
|
@@ -492,6 +500,7 @@ class OrderService implements OrderServiceInterface
|
|
|
$catetime = date('Y-m-d H:i:s', $time);
|
|
|
$randomNumber = mt_rand(1000, 9999);
|
|
|
$ordernum = $randomNumber . $timestamp; // 时间戳与随机数拼接
|
|
|
+ $order_size = AdSize::where('id',$data['ad_size_id'])->first();
|
|
|
// var_dump(($time));
|
|
|
Db::beginTransaction();
|
|
|
try {
|
|
@@ -501,8 +510,8 @@ class OrderService implements OrderServiceInterface
|
|
|
'edtime' => $data['endtime'],
|
|
|
'user_id' => $data['user_id'],
|
|
|
'cttime' => $catetime,
|
|
|
- 'height' => $data['height'],
|
|
|
- 'width' => $data['width'],
|
|
|
+ 'width' => $order_size['width'],
|
|
|
+ 'height' => $order_size['height'],
|
|
|
'days' => $days,
|
|
|
'created_at' => date('Y-m-d H:i:s', time()),
|
|
|
'updated_at' => date('Y-m-d H:i:s', time()),
|
|
@@ -512,6 +521,7 @@ class OrderService implements OrderServiceInterface
|
|
|
$adplace = $data['pid'];
|
|
|
if (is_array($data['pid'])) {
|
|
|
$adplace = AdPlace::whereIn('id', $data['pid'])->select('website_id', 'id')->get();
|
|
|
+ $order_ad = [];
|
|
|
foreach ($adplace as $key => $ads) {
|
|
|
$order_ad[$key] = [
|
|
|
'order_id' => $orderid,
|