Ver código fonte

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

ai 5 meses atrás
pai
commit
01d48bcebe
2 arquivos alterados com 384 adições e 26 exclusões
  1. 361 26
      app/JsonRpc/OrderService.php
  2. 23 0
      app/JsonRpc/OrderServiceInterface.php

+ 361 - 26
app/JsonRpc/OrderService.php

@@ -4,9 +4,15 @@ namespace App\JsonRpc;
 use App\Model\Ad;
 use App\Model\Order;
 use App\Model\OrderAd;
+use App\Model\Website;
 use App\Tools\Result;
 use Hyperf\DbConnection\Db;
 use Hyperf\RpcServer\Annotation\RpcService;
+use Carbon\Carbon;
+use Hamcrest\Arrays\IsArray;
+use DateTime;
+use DateInterval;
+
 
 #[RpcService(name: "OrderService", protocol: "jsonrpc-http", server: "jsonrpc-http")]
 class OrderService implements OrderServiceInterface
@@ -20,41 +26,73 @@ class OrderService implements OrderServiceInterface
     public function getAD(array $data): array
     {
         $where = [
-            'width' => $data['width'],
-            'height' => $data['height'],
+ 
+            'ad_place.width' => $data['width'],
+            'ad_place.height' => $data['height']
         ];
-        $start = $data['starttime'];
-        $end = $data['endtime'];
-        $rep = Ad::where($where)
-            ->where('fromtime', '<', $start)
-            ->where('totime', '>', $end)
-            ->orderBy('id')
-            ->limit($data['pageSize'])
-            ->offset(($data['page'] - 1) * $data['pageSize'])->get();
-        $count = Ad::where($where)->count();
-        $data = [
-            'rows' => $rep->toArray(),
-            'count' => $count,
+        $start=Carbon::parse($data['starttime']);
+        $end=Carbon::parse($data['endtime']);
+        $status = [
+            0=>'1',
+            1=>'4',
+            2=>'6'
         ];
-        $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")
+        $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();
-        $count = Ad::whereIn($data['id'])->count();
+            ->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' => $ads->toArray(),
-            'count' => $count,
+            'rows'=>$rep->toArray(),
+            'count'=>$count,
+            'days' => $days 
         ];
-        if (empty($rep)) {
-            return Result::error("没有信息数据");
+        
+        if(empty($rep)){
+            return Result::error("暂时没有符合您条件的广告位");
+ 
         }
         return Result::success($data);
     }
     /**
-     * 添加订单
+   * 添加订单
      * @param
      * @return void
      */
@@ -332,4 +370,301 @@ class OrderService implements OrderServiceInterface
         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);
+    }
+ 
 }

+ 23 - 0
app/JsonRpc/OrderServiceInterface.php

@@ -13,29 +13,50 @@ interface OrderServiceInterface
      * @param array $data
      *  @return array
      */
+    public function getWebsiteAd(array $data): array;
+
+    /**
+     * @param array $data
+     *  @return array
+     */
+
     public function getOrderListAdmin(array $data): array;
+
+    public function addAD(array $data): array;
+
     /**
      * @param array $data
      *  @return array
      */
+
     public function getOrderDetailAdmin(array $data): array;
+    public function getOrderList(array $data): array;
 
     /**
      * @param array $data
      *  @return array
      */
+
     public function applyOrderStatusAdmin(array $data): array;
 
     public function editPriceOrderAdmin(array $data): array;
+
+    public function getOrderDetail(array $data): array;
+
     /**
      * @param array $data
      *  @return array
      */
+
     public function rejectOrderAdmin(array $data): array;
+
+    public function cancelOrder(array $data): array;
+
     /**
      * @param array $data
      *  @return array
      */
+
     public function endOrderAdmin(array $data): array;
     /**
      * @param array $data
@@ -43,4 +64,6 @@ interface OrderServiceInterface
      */
     public function delOrderAdmin(array $data): array;
 
+    public function delOrderAD(array $data): array;
+
 }