浏览代码

数据中心明细接口,只取订单设备数据

wanghaijun 4 年之前
父节点
当前提交
ed9d8e72f1
共有 1 个文件被更改,包括 41 次插入25 次删除
  1. 41 25
      app/Http/Controllers/Api/mini/DataController.php

+ 41 - 25
app/Http/Controllers/Api/mini/DataController.php

xqd xqd
@@ -85,6 +85,10 @@ class DataController extends BaseController
     {
         return strlen($date) <= 7 ? Carbon::createFromTimeString($date . '-01 00:00:00')->addMonth(1)->toDateTimeString() : Carbon::createFromTimeString($date . ' 00:00:00')->addDay(1)->toDateTimeString();
     }
+    public function getYearEnd($date,$is_end=true)
+    {
+        return $is_end ? Carbon::createFromTimeString(substr($date,0,4) . '-01-01 00:00:00')->addYear(1)->toDateTimeString() : Carbon::createFromTimeString(substr($date,0,4) . '-01-01 00:00:00')->toDateTimeString() ;
+    }
 
     public function getOrders(Request $request)
     {
@@ -334,49 +338,61 @@ class DataController extends BaseController
 //        return $this->success(['data' => $values]);
 
 
-        $date = $this->getStartAt($request->input('date'));
-        $year = date('Y',strtotime($date));
+        $start_date = $this->getStartAt($request->input('start_date'));
+        $end_date = $this->getYearEnd($request->input('end_date'));
+
         $project_id = $request->input('project_ids');
         $project_id = $project_id[0];
-        $devices = Device::all();
+
+
+        if($request->input('type') == 'year'){
+            $year = date('Y',strtotime($start_date));
+            $items = OrderOverviewModel::whereYear('date',$year)->where('project_id',$project_id)->get()->toArray();
+            $device_ids = OrderDevice::where('project_id',$project_id)->whereYear('created_at',$year)->where('device_id','>',0)->distinct('device_id')->pluck('device_id')->toArray();
+
+        } else {
+            $items = OrderOverviewModel::whereBetween('date',[$start_date,$end_date])->where('project_id',$project_id)->get()->toArray();
+            $device_ids = OrderDevice::where('project_id',$project_id)->whereBetween('created_at',[$start_date,$end_date])>where('device_id','>',0)->distinct('device_id')->pluck('device_id')->toArray();
+        }
+        $base_name = [];
+        if(!empty($device_ids)){
+            //设备基础金额 默认为0
+            $base_data = array_fill(0,count($device_ids),0);
+            $base_name = Device::whereIn('id',$device_ids)->pluck('name')->toArray();
+        }
+
+        //头部标题
         $data = [
-            ['date' => '日期', 'total' => '总金额', 'data' => $devices->pluck('name')->toArray()]
+            ['date' => '日期', 'total' => '总金额', 'data' => $base_name]
         ];
-        $items = OrderOverviewModel::whereYear('date',$year)->where('project_id',$project_id)->get()->toArray();
+
         foreach ($items as &$item)
         {
             $arr = [
-                'data'=>[],
+                'data'=>$base_data
             ];
-            $arr_data = $devices->pluck('id')->toArray();
             $arr['total'] = $item['total_price']/100;
             $arr['date'] = date('Y-m',strtotime($item['date']));
             //获取到月份的开始时间和结束时间
             $start_at = $item['date'];
             $end_at = $this->getEndAt(date('Y-m',strtotime($item['date'])));
             //获取到订单数组
-            $order_arr = Order::where('project_id',$project_id)
+            $order_arr = Order::
+                whereBetween('updated_at',[$start_at,$end_at])
+                ->where('project_id',$project_id)
                 ->where('status',3)
                 ->where('type',1)
-                ->whereBetween('updated_at',[$start_at,$end_at])
                 ->pluck('id')->toArray();
-            $order_details = OrderDevice::whereIn('order_id',$order_arr)->get(['quantity','price','device_id'])->groupBy('device_id')->toArray();
-            foreach ($order_details as  $key=>&$detail)
-            {
-                $total_nums = 0;
-                foreach ($detail as $detail_value)
-                {
-                    $total_nums += ($detail_value['price']*$detail_value['quantity'])/100;
-                }
-                $device_data = $arr_data;
-                //重置键值数组
-                foreach ($device_data as $k=>&$device_datum)
-                {
-                    $device_datum = 0;
-                }
-                $device_data[$key-1] = $total_nums;
-                $arr['data']=$device_data;
+            if(!empty($order_arr)){
+                //获取对应设备的总金额
+                foreach ($device_ids as $k=>$id){
+                    $device_total = OrderDevice::whereIn('order_id',$order_arr)->where('device_id',$id)->select('quantity','price','device_id',DB::raw('SUM(price * quantity) AS total_price'))->first()->toArray();
+                    if(!empty($device_total['total_price'])){
+                        $base_data[$k] = $device_total['total_price']/100;
+                    }
+              }
             }
+            $arr['data'] = $base_data;
             array_push($data,$arr);
         }
         return $this->success(['data' => $data]);