Bläddra i källkod

数据中心接口改回,租赁订单导出功能实现

wanghaijun 4 år sedan
förälder
incheckning
dcd7997d2d

+ 127 - 0
app/Exports/RentOrderExport.php

xqd
@@ -0,0 +1,127 @@
+<?php
+
+namespace App\Exports;
+
+use App\Models\OrderDevice;
+use App\Order;
+use Maatwebsite\Excel\Concerns\FromCollection;
+use Maatwebsite\Excel\Concerns\WithMapping;
+use Maatwebsite\Excel\Concerns\WithHeadings;
+use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
+use Maatwebsite\Excel\Concerns\WithColumnFormatting;
+
+class RentOrderExport implements FromCollection, WithMapping,WithHeadings,WithColumnFormatting
+{
+    /**
+    * @return \Illuminate\Support\Collection
+    */
+    public function collection(){
+        $request = request();
+        $order = new OrderDevice();
+        $items = $order->orderBy('created_at', 'desc');
+        $items = $items->whereNull('inner_device_id');
+        if($request->input('work_point_id')){
+                $items->whereHas('inner_device',function ($query) use ($request) {
+                $query->whereHas('work_point_id',$request->input('work_point_id'));
+            });
+        }
+
+        if ($request->input('number'))
+        {
+            $items->whereHas('inner_device',function ($query){
+                $query->where('number','like','%'.request('number').'%');
+            });
+        }
+        if ($request->input('spec_id'))
+        {
+            $items->where('spec_id',$request->input('spec_id'));
+        }
+        if ($request->input('device_id'))
+        {
+            $items->where('device_id',$request->input('device_id'));
+        }
+        if ($request->input('project_id'))
+        {
+            $items->whereHas('project',function ($query){
+                $query->where('id','=',request('project_id'));
+            });
+        }
+        if ($request->input('device_name_id'))
+        {
+            $items->where('device_name_id',$request->input('device_name_id'));
+//            $items->whereHas('inner_device',function ($query) use ($request) {
+//                $query->whereHas('device_name_id',$request->input('device_name_id'));
+//            });
+        }
+
+//        array:6 [▼
+//  "device_id" => "1"
+//  "device_name_id" => "1"
+//  "project_id" => null
+//  "spec_id" => "1"
+//  "type" => "rent"
+//  "work_point_id" => null
+//]
+        $items = $items->get();
+        foreach ($items as $item) {
+            $item->user_name = $item->user ? $item->user->name : '';
+            $item->project_name = $item->project ? $item->project->name : '';
+            $item->work_point_name = $item->order ? ($item->order->workPoint ? $item->order->workPoint->name : '') : '';
+            $item->money = ($item->price * $item->quantity) / 100;
+            $item->device_type_name = $item->device ? $item->device->name : '';
+            $item->device_name_name = $item->device_name ? $item->device_name->name : '';
+            $item->order_number = $item->order ? "\t".$item->order->order_number : '';
+            $item->spec_name = $item->spec ? $item->spec->name : '';
+            $item->rent_type_name = $item->rent_type ? $item->rent_type->name : '';
+            $item->price = $item->price / 100;
+        }
+        return $items;
+    }
+
+    public function map($row): array
+    {
+        return [
+            $row->order_id,
+            $row->order_number,
+            $row->project_name,
+            $row->work_point_name,
+            $row->device_type_name,
+            $row->device_name_name,
+            $row->spec_name,
+            $row->rent_type_name,
+            $row->price,
+            $row->quantity,
+            $row->start_date,
+            $row->end_date,
+            $row->money,
+        ];
+    }
+
+    public function headings(): array
+    {
+        return [
+            '订单ID',
+            '订单编号',
+            '在用项目',
+            '工点',
+            '租赁设备类型',
+            '租赁设备名称',
+            '设备规格型号',
+            '租赁方式',
+            '租赁单价',
+            '租赁计数',
+            '租赁开始时间',
+            '租赁结束时间',
+            '租赁总金额',
+        ];
+    }
+    /**
+     * @return array
+     */
+    public function columnFormats(): array
+    {
+        return [
+            'B' => NumberFormat::FORMAT_TEXT,
+        ];
+    }
+}

+ 10 - 1
app/Http/Controllers/Admin/OrderDeviceController.php

xqd xqd xqd xqd
@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers\Admin;
 
+use App\Exports\RentOrderExport;
 use App\Models\Device;
 use App\Models\DeviceName;
 use App\Models\InnerDevice;
@@ -10,8 +11,10 @@ use App\Models\OrderDevice;
 use App\Models\Project;
 use App\Models\Spec;
 use App\Models\WorkPoint;
+use http\Env\Response;
+use http\Header;
 use Illuminate\Http\Request;
-
+use Maatwebsite\Excel\Facades\Excel;
 class OrderDeviceController extends BaseController
 {
     protected $model;
@@ -146,6 +149,7 @@ class OrderDeviceController extends BaseController
                 $item->money = ($item->price * $item->quantity) / 100;
                 $item->device_type_name = $item->device ? $item->device->name : '';
                 $item->device_name_name = $item->device_name ? $item->device_name->name : '';
+                $item->order_number = $item->order ? $item->order->order_number : '';
                 $item->spec_name = $item->spec ? $item->spec->name : '';
                 $item->rent_type_name = $item->rent_type ? $item->rent_type->name : '';
                 $item->price = $item->price / 100;
@@ -202,4 +206,9 @@ class OrderDeviceController extends BaseController
         if (!$res) return response()->json(['status' => 'fail', 'info' => '删除失败']);
         return response()->json(['status' => 'success', 'info' => '操作成功']);
     }
+
+    public function export()
+    {
+          return   Excel::download(new RentOrderExport(),'租赁设备.xls');
+    }
 }

+ 100 - 164
app/Http/Controllers/Api/mini/DataController.php

xqd xqd xqd xqd xqd xqd xqd xqd xqd
@@ -121,22 +121,10 @@ class DataController extends BaseController
         return $order_devices->pluck('order_id')->unique();
     }
 
-    //柱形图展示
     public function getStat(Request $request)
     {
         $info = [];
         $device_arr = $request->input('device_ids');
-        $start_date = $request->input('start_date');
-        $end_date = $request->input('end_date');
-        if(count($device_arr)===1){
-            //单项目
-            $values = [1000,1500];
-            $names = $device_arr;
-            $projects = Project::whereIn('id', $this->project_ids)->where('id','!=',1)->get();
-            $legends = [$start_date,$end_date];
-            return $this->success(['data' => compact('values', 'names', 'legends','info')]);
-        }
-        //多项目
         $device_name_arr = $request->input('device_name_ids');
         $spec_arr = $request->input('spec_ids');
         if (array_sum($device_arr) != 0)
@@ -144,16 +132,15 @@ class DataController extends BaseController
             array_push($info,Device::whereIn('id',$device_arr)->pluck('name')->toArray()) ;
             array_push($info,DeviceName::whereIn('id',$device_name_arr)->pluck('name')->toArray()) ;
             array_push($info,Spec::whereIn('device_id',$device_arr)
-                                            ->whereIn('device_name_id',$device_name_arr)
-                                            ->whereIn('id',$spec_arr)
-                                            ->pluck('name')->toArray());
+                ->whereIn('device_name_id',$device_name_arr)
+                ->whereIn('id',$spec_arr)
+                ->pluck('name')->toArray());
             array_push($info,RentType::where('id',$request->input('rent_type_ids'))->value('name'));
         }
         if(!$request->input('project_ids')) return $this->error(['msg' => '']);
         if($request->input('chart_type') == 'pie') return $this->getPieData($request);
         else if($request->input('chart_type') == 'radar') return $this->getRadarData($request);
         $orders = $this->getOrders($request);
-        if(!$orders) return $this->error(['msg' => '']);
         $names = [];
         $values = [];
         // year|month
@@ -184,7 +171,6 @@ class DataController extends BaseController
         return $this->success(['data' => compact('values', 'names', 'legends','info')]);
     }
 
-    //雷达图
     public function getRadarData(Request $request)
     {
         $orders = $this->getOrders($request);
@@ -248,7 +234,6 @@ class DataController extends BaseController
         return $days;
     }
 
-    //饼状图
     public function getPieData(Request $request)
     {
         $order_ids = $this->getOrderIds($request);
@@ -267,7 +252,6 @@ class DataController extends BaseController
         return $this->success(['data' => compact('data', 'legends')]);
     }
 
-    //明细图
     public function getDetailData(Request $request)
     {
 //        $order_ids = $this->getOrderIds($request);
@@ -374,9 +358,9 @@ class DataController extends BaseController
         $end_at = $this->getEndAt($request->input('date'));
         $total_money = $this->order->whereIn('project_id', $request->input('project_ids'))->sum('money') / 100;
         $month_money = $this->order->whereIn('project_id', $request->input('project_ids'))->where([
-            ['created_at', '>=', $start_at],
-            ['created_at', '<', $end_at]
-        ])->sum('money') / 100;
+                ['created_at', '>=', $start_at],
+                ['created_at', '<', $end_at]
+            ])->sum('money') / 100;
         return $this->success(['data' => compact('total_money', 'month_money')]);
     }
 
@@ -421,10 +405,10 @@ class DataController extends BaseController
             $start_month = Carbon::createFromTimeString($date . ' 00:00:00')->toDateTimeString();
             $end_month = Carbon::createFromTimeString($date . ' 00:00:00')->addMonth()->toDateTimeString();
             $year_money = Order::where([
-                ['type', 1],
-                ['created_at', '>=', $start_year],
-                ['created_at', '<', $end_year]
-            ])->sum('money') / 100;
+                    ['type', 1],
+                    ['created_at', '>=', $start_year],
+                    ['created_at', '<', $end_year]
+                ])->sum('money') / 100;
             $month_money = Order::where([
                     ['type', 1],
                     ['created_at', '>=', $start_month],
@@ -438,70 +422,114 @@ class DataController extends BaseController
     {
         $start=2020;
         $now = date('Y',time());
-        $years_arr = [];
+        $years_arr = [[
+            'text' => '请选择年份',
+            'value' => ''
+        ]];
         for ($i = 0;$i<=($now-$start);$i++)
         {
-            array_push($years_arr,($start+$i).'年');
+            $years_arr[$i+1]['text'] = ($start+$i).'年';
+            $years_arr[$i+1]['value'] = $i+1;
         }
         return $this->success(['msg' => '操作成功', 'data' => $years_arr]);
     }
     public function getSingleStat(Request $request)
     {
-        //租赁订单
-        $items = Order::where('type', 1);
-        //2021-3-1
-        $date = $request->input('date');
+        //如果初始进来不传筛选的年份,那就默认选择当前的年份
+        $project_year = $request->input('project_year')? $request->input('project_year'):date('Y',time());
         //如果有项目id,那就用项目id,如果没有就默认选择第一个项目
-        $project_id = $request->input('project_id') ? $request->input('project_id') : Project::where('id','>',1)->first()->id;
-        //找到这个项目
-        $project = Project::find($project_id);
-        //在订单表里面获取到对应项目的订单集合
-        $items = $items->where('project_id', $project->id);
-        //判断按年还是按月
+        if ($request->input('project_id')!=0)
+        {
+            $all_project = 0;
+            $project_id = $request->input('project_id') ? $request->input('project_id') : Project::where('id','>',1)->first()->id;
+            $project = Project::find($project_id);
+        }else
+        {
+            $all_project = 1;
+        }
         $sort_type = $request->input('sort_type') == 'year' ? 'year' : 'month';
-        //如果有传时间,那就用时间,如果没有传时间,那就用本地的时间
-        $date = $date ? $date : Carbon::now()->toDateString();
         $values = [];
         $names = [];
         $name = $sort_type == 'year' ? '每年租赁金额' : '每月租赁金额';
         if($sort_type == 'month') {
-            //2020-03-01 00:00:00
-            $start_at = Carbon::createFromTimeString($date . ' 00:00:00')->toDateTimeString();
-            //2021-03-01 00:00:00
-            $end_at = Carbon::createFromTimeString($date . ' 00:00:00')->addYear()->toDateTimeString();
-            $items = $items->where([
-                ['created_at', '>=', $start_at],
-                ['created_at', '<', $end_at]
-            ]);
-            $items = $items->get();
-            for($i = 1; $i < 13; ++$i) {
-                $start_at = Carbon::createFromTimeString($date . ' 00:00:00')->addMonths($i - 1)->toDateTimeString();
-                $end_at = Carbon::createFromTimeString($date . ' 00:00:00')->addMonths($i)->toDateTimeString();
-                $value = $items->where('created_at', '>=', $start_at)->where('created_at', '<', $end_at)->sum('money') / 100;
+            $start_at = $project_year.'-01-01 00:00:00';
+            $end_at = ($project_year+1).'-01-01 00:00:00';
+            for($i = 1; $i < 13; $i++) {
+                if ($i>9&&$i!=12)
+                {
+                    $start_month_at = $project_year.'-'.$i.'-01 00:00:00';
+                }else
+                {
+                    $start_month_at = $project_year.'-0'.$i.'-01 00:00:00';
+                }
+                if ($i>=9&&$i!=12)
+                {
+                    $end_month_at = $project_year.'-'.($i+1).'-01 00:00:00';
+                }else
+                {
+                    $end_month_at = $project_year.'-0'.($i+1).'-01 00:00:00';
+                }
+                if ($i==12)
+                {
+                    $start_month_at = $project_year.'-'.$i.'-01 00:00:00';
+                    $end_month_at = ($project_year+1).'-01-01 00:00:00';
+                }
+                if ($all_project == 0)
+                {
+                    $value = Order::where('type',1)
+                        ->where('project_id', $project->id)
+                        ->whereBetween('created_at',[$start_at,$end_at])
+                        ->whereBetween('created_at',[$start_month_at,$end_month_at])
+                        ->sum('money');
+                    $value = $value/100;
+                }else
+                {
+                    $value = Order::where('type',1)
+                        ->whereBetween('created_at',[$start_at,$end_at])
+                        ->whereBetween('created_at',[$start_month_at,$end_month_at])
+                        ->sum('money');
+                    $value = $value/100;
+                }
                 array_push($values, $value);
                 array_push($names, $i . '月');
             }
         } else {
-            $start_at = Carbon::createFromTimeString($date . ' 00:00:00')->toDateTimeString();
-            $end_at = Carbon::now()->addYear(1)->toDateTimeString();
-            $items = $items->where([
-                ['created_at', '>=', $start_at],
-                ['created_at', '<', $end_at]
-            ]);
-            $items = $items->get();
-            $cnt = 1;
-            $next_year = Carbon::now()->toDateTimeString();
-            do {
-                $start_at = Carbon::createFromTimeString($date . ' 00:00:00')->addYears($cnt - 1)->toDateTimeString();
-                $end_at = Carbon::createFromTimeString($date . ' 00:00:00')->addYears($cnt)->toDateTimeString();
-                $value = $items->where('created_at', '>=', $start_at)->where('created_at', '<', $end_at)->sum('money') / 100;
-                array_push($values, $value);
-                array_push($names, Carbon::createFromTimeString($date . ' 00:00:00')->addYear($cnt - 1)->year . '年');
-                $cnt = $cnt + 1;
-            } while($cnt < 10 && $end_at <= $next_year);
+            $start=2020;
+            $now = date('Y',time());
+            $year = [];
+            for ($i = 0;$i<=($now-$start);$i++)
+            {
+                array_push($year,($start+$i));
+                array_push($names,($start+$i).'年');
+            }
+            foreach ($year as $v)
+            {
+                $start_year_at = $v.'-01-01 00:00:00';
+                $end_year_at = ($v+1).'-01-01 00:00:00';
+                if ($all_project == 0)
+                {
+                    $value = Order::where('type',1)
+                        ->where('project_id', $project->id)
+                        ->whereBetween('created_at',[$start_year_at,$end_year_at])
+                        ->sum('money');
+                    $value = $value/100;
+                }else{
+                    $value = Order::where('type',1)
+                        ->whereBetween('created_at',[$start_year_at,$end_year_at])
+                        ->sum('money');
+                    $value = $value/100;
+                }
 
+                array_push($values, $value);
+            }
+        }
+        if ($all_project == 0)
+        {
+            return $this->success(['data' => compact('values', 'names', 'project', 'name')]);
+        }else
+        {
+            return $this->success(['data' => compact('values', 'names', 'name')]);
         }
-        return $this->success(['data' => compact('values', 'names', 'project', 'name')]);
     }
 
     public function getMaxStat(Request $request)
@@ -593,96 +621,4 @@ class DataController extends BaseController
         $names = $projects->pluck('name');
         return $this->success(['data' => compact('values', 'names')]);
     }
-
-    //单项目柱形图
-    //多项目柱形图
-    //单项目折线图
-    //多项目折线图
-    //单项目雷达图
-    //多项目雷达图
-    //单项目饼状图
-    //单项目明细图
-    //五种图形数据图形(单项目和多项目)接口
-    public function picData(Request $request){
-
-        $arr = [27, 35];echo $arr;return "";
-
-        $project_id = $request->input("project_id");
-
-        //单个项目根据年/月/日来分组
-        $orderone = Order::where(function($query) use ($project_id){
-            $query->where("project_id","=",$project_id);
-        })->groupby("DATE_FORMAT(updated_at,'%Y')")->selectRaw('sum(money) as sum, project_id')->pluck('sum', 'project_id');
-        //多项目根据项目来分组
-        $ordermany = Order::where(function($query) use ($project_id){
-            $query->where("project_id","=",$project_id);
-        })->groupby('project_id')->selectRaw('sum(money) as sum, project_id')->pluck('sum', 'project_id');
-        $param = $request->input("param");
-        switch ($param){
-            //雷达图
-            case 'radar':
-                if($request->input("projects_num")>1){
-                    //多项目雷达图
-                    echo "多项目雷达图";
-                    break;
-                }
-                else {
-                    //单项目雷达图
-                    echo "单项目雷达图";
-                    break;
-                }
-            //折线图
-            case 'line':
-                if($request->input("projects_num")>1){
-                    //多项目
-
-                    break;
-                }
-                else {
-                    //单项目
-                    break;
-                }
-                break;
-            //饼状图
-            case 'pie':
-                //只有单项目
-                break;
-            //明细图
-            case 'detail':
-                //只有单项目
-                break;
-            //柱形图
-            case 'colunm':
-                if($request->input("projects_num")>1){
-                    //多项目
-                    //年
-                    if($request->input("time")=='year'){
-                        $year = $request->input("time");
-                        $year = json_decode($year,true);
-                        $where = "";
-                        $canshu = '$project_id';
-                        return $ordermany;
-                    }
-                    //月
-                    else if($request->input("time")=='month'){
-
-                    }
-                    //日
-                    else {
-
-                    }
-                }
-                else {
-                    //单项目
-                    if($request->input("time_type")=='year'){
-                        $year = $request->input("time");
-                        $year = json_decode($year,true);
-                        $where = "";
-                        return $orderone;
-                    }
-                }
-
-        }
-    }
-
-}
+}

+ 0 - 1
app/Http/Controllers/Api/mini/OrderController.php

xqd
@@ -416,7 +416,6 @@ class OrderController extends BaseController
                 $search_items['user_id'] = $user->id;
             }
         }
-        $statu = $request->input('status');
         if($request->input('status')) {
 //            if($statu == 'reject'){
 //                unset($search_items[1]);

+ 60 - 0
resources/views/admin/order-devices/rent-list.blade.php

xqd xqd xqd
@@ -10,7 +10,11 @@
     <div class="layui-card">
         <div class="layui-card-header sg-card-header">
             租赁订单设备列表
+            <div class="sg-card-create">
+                <button id="sg-import-all" class="layui-btn layui-btn-sm layui-btn-normal">导出订单</button>
+            </div>
         </div>
+
         <div class="layui-card-body">
             <form class="layui-form" id="sg-search-form">
                 <input type="hidden" name="type" value="rent">
@@ -63,6 +67,7 @@
                     cellMinWidth: 80,
                     cols: [[
                         { field: 'order_id', title: '订单ID', align: 'center' },
+                        { field: 'order_number', title: '订单编号', align: 'center' },
                         { field: 'project_name', title: '在用项目', align: 'center' },
                         { field: 'work_point_name', title: '工点', align: 'center' },
                         { field: 'device_type_name', title: '租赁设备类型', align: 'center' },
@@ -228,6 +233,61 @@
                         });
                     })
                 });
+
+                /**
+                 *下载订单
+                 */
+                $('#sg-import-all').click(function() {
+                    var data = transformToJson($('#sg-search-form').serializeArray());
+                    var url = '{{ $pre_uri }}' + 'export?device_id='+data.device_id
+                                               +'&device_name_id='+data.device_name_id
+                                               +'&project_id='+data.project_id
+                                               +'&spec_id='+data.spec_id
+                                               +'&type='+data.type
+                                               +'&work_point_id='+data.work_point_id;
+
+                    window.location = url;
+
+                    console.log(data)
+
+                    $.ajax({
+                        method: 'POST',
+                        url: '{{ $pre_uri }}' + 'export',
+                        headers: {
+                            'X-CSRF-TOKEN': '{{ csrf_token() }}'
+                        },
+
+                        data:data,
+                        success: function (data) {
+
+                            // var blob = new Blob([data]); //data.Body是文件
+                            // let blobUrl = URL.createObjectURL(blob)
+                            // var blob = new Blob([data], {type:'application/vnd.ms-excel'}),
+                            // fileName = '租赁设备.xls';
+                            // downFile(blob, fileName);
+                        },
+                        error: function () {
+
+                        }
+                    });
+
+                });
+                function downFile(blob, fileName) {
+                    if (window.navigator.msSaveOrOpenBlob) {
+                        navigator.msSaveBlob(blob, fileName);
+                    } else {
+                        var link = document.createElement('a');
+                        link.href = window.URL.createObjectURL(blob);
+                        link.download = fileName;
+                        link.click();
+                        window.URL.revokeObjectURL(link.href);
+                        link.remove;
+                    }
+                }
+                function blobify(strData) {    var buf = new ArrayBuffer(strData.length), view = new Uint8Array(buf);    for (var i=0; i!=strData.length; ++i) view[i] = strData.charCodeAt(i) & 0xFF;    return buf;
+                }
+
+
             });
         })
     </script>