Bladeren bron

Merge branch '20241029_fl_order' of https://gitee.com/zxt_5/order_producer into 20241029_fl_order

AI 4 maanden geleden
bovenliggende
commit
8913f58484
2 gewijzigde bestanden met toevoegingen van 105 en 68 verwijderingen
  1. 78 68
      app/JsonRpc/OrderService.php
  2. 27 0
      app/Model/AdSize.php

+ 78 - 68
app/JsonRpc/OrderService.php

@@ -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,

+ 27 - 0
app/Model/AdSize.php

@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace App\Model;
+
+use Hyperf\DbConnection\Model\Model;
+
+/**
+ */
+class AdSize extends Model
+{
+    /**
+     * The table associated with the model.
+     */
+    protected ?string $table = 'ad_size';
+
+    /**
+     * The attributes that are mass assignable.
+     */
+    protected array $fillable = [];
+
+    /**
+     * The attributes that should be cast to native types.
+     */
+    protected array $casts = [];
+}