From 1a0efb8adfcc76c4049dbe6c40ef067673f5972b Mon Sep 17 00:00:00 2001 From: lanzu_qinsheng <334039090@qq.com> Date: Fri, 9 Oct 2020 18:04:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=93=E5=B1=95=E5=91=98=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Actions/EXporter/SalesMan.php | 118 ++ app/Admin/Actions/Tools/SalesmanOption.php | 2 + app/Admin/Controllers/v3/Salesman.php | 32 +- app/Admin/Repositories/v3/CsInfo.php | 2 +- app/Admin/routes.php | 1 + app/Console/Commands/CsInfoStatis.php | 110 ++ app/Http/Controllers/TestController.php | 100 +- composer.json | 1 + composer.lock | 1251 ++++++++++------- config/app.php | 2 + config/excel.php | 328 +++++ routes/web.php | 1 + ...xcel-1yWRkHreLllX7MXKHlJPTMNfnVOwIGR1.xlsx | Bin 0 -> 6641 bytes ...xcel-Uhbm2VWA7B4WTj6Pz5mKJostWKikQA0r.xlsx | Bin 0 -> 6654 bytes ...xcel-Z3fdakI4WiO9DTZJeGSnKkdpltFKwwfU.xlsx | Bin 0 -> 6641 bytes ...xcel-eYPrHax2rrY0IrKCXdV7CFDP20SFhxoY.xlsx | Bin 0 -> 6652 bytes ...xcel-seIr1cl908lcHEofP6DhBYv8QFo8cvVK.xlsx | Bin 0 -> 6646 bytes stubs/export.model.stub | 17 + stubs/export.plain.stub | 16 + stubs/export.query-model.stub | 17 + stubs/export.query.stub | 16 + stubs/import.collection.stub | 17 + stubs/import.model.stub | 21 + 23 files changed, 1523 insertions(+), 529 deletions(-) create mode 100644 app/Admin/Actions/EXporter/SalesMan.php create mode 100644 app/Console/Commands/CsInfoStatis.php create mode 100644 config/excel.php create mode 100644 storage/framework/laravel-excel/laravel-excel-1yWRkHreLllX7MXKHlJPTMNfnVOwIGR1.xlsx create mode 100644 storage/framework/laravel-excel/laravel-excel-Uhbm2VWA7B4WTj6Pz5mKJostWKikQA0r.xlsx create mode 100644 storage/framework/laravel-excel/laravel-excel-Z3fdakI4WiO9DTZJeGSnKkdpltFKwwfU.xlsx create mode 100644 storage/framework/laravel-excel/laravel-excel-eYPrHax2rrY0IrKCXdV7CFDP20SFhxoY.xlsx create mode 100644 storage/framework/laravel-excel/laravel-excel-seIr1cl908lcHEofP6DhBYv8QFo8cvVK.xlsx create mode 100644 stubs/export.model.stub create mode 100644 stubs/export.plain.stub create mode 100644 stubs/export.query-model.stub create mode 100644 stubs/export.query.stub create mode 100644 stubs/import.collection.stub create mode 100644 stubs/import.model.stub diff --git a/app/Admin/Actions/EXporter/SalesMan.php b/app/Admin/Actions/EXporter/SalesMan.php new file mode 100644 index 0000000..c2a2f92 --- /dev/null +++ b/app/Admin/Actions/EXporter/SalesMan.php @@ -0,0 +1,118 @@ +_name = $name; + $this->_option = $option; + } + + public function array(): array + { + $result[] = [ + '懒ID', + '拓展员', + '服务站点', + '站点地址', + '绑定用户数', + $this->_name.'下单人数', + $this->_name.'订单数', + $this->_name.'订单金额', + ]; + $res = $this->getSaleMan(-30); + foreach ($res as $value){ + $item =[]; + $item[] = $value['person_id']; + $item[] = $value['nick_name']; + $item[] = $value['name']; + $item[] = $value['address']; + $item[] = $value['user_num']??0; + $item[] = $value['order_user_num']??0; + $item[] = $value['order_num']??0; + $item[] = $value['order_amount']??0; + $result[] = $item; + } + return $result; + } + + /** + * 获取拓展员 + */ + public function getSaleMan($option) + { + $data = LanzuCsInfo::select( + DB::raw('count("lanzu_cs_info.person_id") as total'), + DB::raw('group_concat(lanzu_cs_info.admin_user_id) as admin_user_id'), + DB::raw('group_concat(rb.user_id) as user_id'), + 'lanzu_cs_info.person_id', 'lanzu_user.nick_name') + ->groupBy('lanzu_cs_info.person_id') + ->leftJoin('lanzu_user', 'lanzu_user.id', 'lanzu_cs_info.person_id') + ->leftJoin('lanzu_user_relation_bind as rb', 'rb.source_id', 'lanzu_cs_info.admin_user_id') + ->where('lanzu_cs_info.person_id', '>', 0)->get()->toArray(); + $result = []; + foreach ($data as $key => $value) { + $value['admin_user_id'] = array_unique(explode(',', $value['admin_user_id'])); + $result = $this->csDetail($value['admin_user_id'], $this->_option, $value['nick_name'], $result); + } + return $result; + } + + /** + * 获取站点详情 + */ + public function csDetail($adminUid, $option, $nickName, $result) + { + $data = modelCsInfo::whereIn('admin_user_id', $adminUid) + ->get()->toArray(); + foreach ($data as &$value) { + //>>1.获取绑定后下过单的用户 + $value['user_num'] = LanzuUserRelationBind::where('source_id', $value['admin_user_id'])->count(); + $uid = Order::getUserOrder($value['admin_user_id']); + //>>2.获取订单数据 + $value['order_user_num'] = Order::getOrderData([ + 'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type' => 'count_user',//取什么数据 data_type 数据类型 + 'market_id' => '',//取哪个市场数据 + 'condition' => 1,//取数据维度 condition + 'user_ids' => $uid ? $uid : null + ], $option);//下单人数 + $value['order_num'] = Order::getOrderData([ + 'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type' => 'number',//取什么数据 data_type 数据类型 + 'market_id' => '',//取哪个市场数据 + 'condition' => 1,//取数据维度 condition + 'user_ids' => $uid ? $uid : null + ], $option);//订单数 + $value['order_amount'] = Order::getOrderData([ + 'user_type' => 'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type' => 'amount',//取什么数据 data_type 数据类型 + 'market_id' => '',//取哪个市场数据 + 'condition' => 1,//取数据维度 condition + 'user_ids' => $uid ? $uid : null + ], $option);//订单金额 + $value['nick_name'] = $nickName; + $result[] = $value; + } + + return $result; + } +} diff --git a/app/Admin/Actions/Tools/SalesmanOption.php b/app/Admin/Actions/Tools/SalesmanOption.php index 2d463ad..3b18325 100644 --- a/app/Admin/Actions/Tools/SalesmanOption.php +++ b/app/Admin/Actions/Tools/SalesmanOption.php @@ -28,6 +28,7 @@ JS; 'yesterday' => '昨日', 'week' => '本周', 'month' => '本月', + 'last_month' => '上月', ]; $data = [ @@ -35,6 +36,7 @@ JS; 'yesterday' => '-1', 'week' => 'w', 'month' => '30', + 'last_month' => '-30', ]; foreach ($data as $key=>$value){ diff --git a/app/Admin/Controllers/v3/Salesman.php b/app/Admin/Controllers/v3/Salesman.php index 58e251c..37b5baa 100644 --- a/app/Admin/Controllers/v3/Salesman.php +++ b/app/Admin/Controllers/v3/Salesman.php @@ -7,10 +7,13 @@ namespace App\Admin\Controllers\v3; use App\Admin\Actions\Lazy\CsInfo; use App\Admin\Actions\Tools\SalesmanOption; use App\Admin\Actions\Tools\SalesmanOptionCopy; +use App\Http\Controllers\TestController; +use App\Models\LanzuMarket; use App\Models\v3\SalesmanData; use Dcat\Admin\Controllers\AdminController; use Dcat\Admin\Grid; use Dcat\Admin\Widgets\Modal; +use Maatwebsite\Excel\Facades\Excel; class Salesman extends AdminController { @@ -38,24 +41,26 @@ class Salesman extends AdminController } else { return Grid::make(new \App\Admin\Repositories\v3\Salesman(), function (Grid $grid) { $grid->tools(new SalesmanOption()); - $name = request()->get('name')??'今日'; - $option = request()->get('option'); + $name = request()->get('name') ?? '今日'; + $option = request()->get('option') ?? 1; $grid->paginate(10); + $grid->tools(" 导出 "); + $grid->export(); $grid->column('person_id', '懒ID'); $grid->column('nick_name', '拓展员'); $grid->column('total', '社区总数'); - $grid->column('user_id','绑定用户数')->display(function ($uid){ - if ($uid){ - return count(explode(',',$uid)); + $grid->column('user_id', '绑定用户数')->display(function ($uid) { + if ($uid) { + return count(explode(',', $uid)); } return 0; }); //$grid->column('order_user_num', $name.'下单人数'); - $grid->column('order_num', $name.'订单数'); - $grid->column('order_amount', $name.'成交额'); - $grid->actions(function (Grid\Displayers\Actions $actions)use ($name,$option){ + $grid->column('order_num', $name . '订单数'); + $grid->column('order_amount', $name . '成交额'); + $grid->actions(function (Grid\Displayers\Actions $actions) use ($name, $option) { $row = $actions->row->toArray(); - $actions->append(new \App\Admin\Extensions\Salesman($row['admin_user_id'],$name,$option,'详情')); + $actions->append(new \App\Admin\Extensions\Salesman($row['admin_user_id'], $name, $option, '详情')); }); $grid->disableCreateButton(); @@ -69,4 +74,13 @@ class Salesman extends AdminController } } + + public function export() + { + $name = request()->get('name'); + $option = request()->get('option'); + return Excel::download(new \App\Admin\Actions\Exporter\SalesMan($option,$name), $name.'拓展员报表.xlsx'); + } + + } diff --git a/app/Admin/Repositories/v3/CsInfo.php b/app/Admin/Repositories/v3/CsInfo.php index 012776f..2c79c74 100644 --- a/app/Admin/Repositories/v3/CsInfo.php +++ b/app/Admin/Repositories/v3/CsInfo.php @@ -16,10 +16,10 @@ class CsInfo extends EloquentRepository { $adminUid= request()->get('admin_user_id'); $option= request()->get('option'); + //获取服务站点 $data = modelCsInfo::whereIn('admin_user_id',$adminUid) ->paginate(10) ->toArray(); - foreach ($data['data'] as &$value){ //>>1.获取绑定后下过单的用户 $value['user_num'] = LanzuUserRelationBind::where('source_id',$value['admin_user_id'])->count(); diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 1585774..5738177 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -17,6 +17,7 @@ Route::group([ $router->resource('/speaker', 'LanzuServiceSpeakerController'); $router->resource('/mp', 'LanzuMpInfoController'); $router->resource('/salesman', 'v3\Salesman'); + $router->any('/salesman_export', 'v3\Salesman@export'); $router->any('/mp_data', 'LanzuMpInfoController@showData'); $router->resource('/mm', 'LanzuMmInfoController'); $router->resource('/market', 'ImsCjdcMarketController'); diff --git a/app/Console/Commands/CsInfoStatis.php b/app/Console/Commands/CsInfoStatis.php new file mode 100644 index 0000000..e4e4c50 --- /dev/null +++ b/app/Console/Commands/CsInfoStatis.php @@ -0,0 +1,110 @@ +getSaleMan(); + dd($rows); + return 0; + } + + /** + * 获取拓展员 + */ + public function getSaleMan() + { + $data = LanzuCsInfo::select( + DB::raw('count("lanzu_cs_info.person_id") as total'), + DB::raw('group_concat(lanzu_cs_info.admin_user_id) as admin_user_id'), + DB::raw('group_concat(rb.user_id) as user_id'), + 'lanzu_cs_info.person_id','lanzu_user.nick_name') + ->groupBy('lanzu_cs_info.person_id') + ->leftJoin('lanzu_user','lanzu_user.id','lanzu_cs_info.person_id') + ->leftJoin('lanzu_user_relation_bind as rb','rb.source_id','lanzu_cs_info.admin_user_id') + ->where('lanzu_cs_info.person_id','>',0)->get()->toArray(); + foreach ($data as $key=>$value){ + $value['admin_user_id'] = array_unique(explode(',',$value['admin_user_id'])); + $row = $this->csDetail($value['admin_user_id'],-30); + dump($row); + } + } + + /** + * 获取站点详情 + */ + public function csDetail($adminUid,$option) + { + $data = modelCsInfo::whereIn('admin_user_id',$adminUid) + ->paginate(10) + ->toArray(); + foreach ($data['data'] as &$value){ + //>>1.获取绑定后下过单的用户 + $value['user_num'] = LanzuUserRelationBind::where('source_id',$value['admin_user_id'])->count(); + $uid = Order::getUserOrder($value['admin_user_id']); + //>>2.获取订单数据 + $value['order_user_num'] = Order::getOrderData([ + 'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type'=>'count_user',//取什么数据 data_type 数据类型 + 'market_id'=>'',//取哪个市场数据 + 'condition'=>1,//取数据维度 condition + 'user_ids'=>$uid?$uid:null + ],$option);//下单人数 + $value['order_num'] = Order::getOrderData([ + 'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type'=>'number',//取什么数据 data_type 数据类型 + 'market_id'=>'',//取哪个市场数据 + 'condition'=>1,//取数据维度 condition + 'user_ids'=>$uid?$uid:null + ],$option);//订单数 + $value['order_amount'] = Order::getOrderData([ + 'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type'=>'amount',//取什么数据 data_type 数据类型 + 'market_id'=>'',//取哪个市场数据 + 'condition'=>1,//取数据维度 condition + 'user_ids'=>$uid?$uid:null + ],$option);//订单金额 + + } + dd($data); + } + +} diff --git a/app/Http/Controllers/TestController.php b/app/Http/Controllers/TestController.php index 3ba304b..4443378 100644 --- a/app/Http/Controllers/TestController.php +++ b/app/Http/Controllers/TestController.php @@ -10,42 +10,90 @@ use App\Http\Controllers\Controller as BaseController; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; use App\Models\FinancialRecord; - - +use App\Admin\Common\Order; +use App\Models\LanzuCsInfo; +use App\Models\LanzuUserRelationBind; +use Illuminate\Console\Command; +use Illuminate\Support\Facades\DB; +use \App\Models\v3\CsInfo as modelCsInfo; +use Maatwebsite\Excel\Facades\Excel; class TestController extends BaseController { public function Test(){ - $client = Client::factory(env('RPC_SITE_HOST')); - $request = $client->request( - uniqid(), - '/separateaccounts/orderOnlineCompleted', - ['orderMainId' => 939,'userId'=>214]); - $response = $client->send($request); - dd($response->getBody()->getContents()); - return $response->getBody()->getContents(); + $this->getSaleMan(); } - public function testRpc() + /** + * 获取拓展员 + */ + public function getSaleMan() { - $client = Client::factory(env('RPC_SITE_HOST')); - $request = $client->request(uniqid(),'/alisms/sent', [ - 'phone' => 13481194554, - 'template'=>'SMS_201720790', - 'templateParams'=> json_encode(['name'=>"[DESION]",'money'=>'200元']), - ]); - $response = $client->send($request); - $result = json_decode($response->getBody()->getContents()); - if ($result->result->Code != 'OK') { - $msg = $result->result->Message; - Log::error('发送短信失败', ['Message'=>$msg]); + $data = LanzuCsInfo::select( + DB::raw('count("lanzu_cs_info.person_id") as total'), + DB::raw('group_concat(lanzu_cs_info.admin_user_id) as admin_user_id'), + DB::raw('group_concat(rb.user_id) as user_id'), + 'lanzu_cs_info.person_id','lanzu_user.nick_name') + ->groupBy('lanzu_cs_info.person_id') + ->leftJoin('lanzu_user','lanzu_user.id','lanzu_cs_info.person_id') + ->leftJoin('lanzu_user_relation_bind as rb','rb.source_id','lanzu_cs_info.admin_user_id') + ->where('lanzu_cs_info.person_id','>',0)->get()->toArray(); + $result = []; + foreach ($data as $key=>$value){ + $value['admin_user_id'] = array_unique(explode(',',$value['admin_user_id'])); + $result = $this->csDetail($value['admin_user_id'],-30,$value['nick_name'],$result); + } - return $response->getBody()->getContents(); + dd($result); } - public function testMap() + /** + * 获取站点详情 + */ + public function csDetail($adminUid,$option,$nickName,$result) { - $result = file_get_contents("https://apis.map.qq.com/ws/direction/v1/bicycling/?from=39.984042,116.307535&to=39.980869,116.325238&key=7NSBZ-ETU3O-CW6WN-S3YM5-KERR5-RQBHS"); - return $result; + $data = modelCsInfo::whereIn('admin_user_id',$adminUid) + ->get(); + foreach ($data as &$value){ + $value->nick_name = $nickName; + //>>1.获取绑定后下过单的用户 + $value->user_num = LanzuUserRelationBind::where('source_id',$value->admin_user_id)->count(); + $uid = Order::getUserOrder($value->admin_user_id); + //>>2.获取订单数据 + $value->order_user_num = Order::getOrderData([ + 'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type'=>'count_user',//取什么数据 data_type 数据类型 + 'market_id'=>'',//取哪个市场数据 + 'condition'=>1,//取数据维度 condition + 'user_ids'=>$uid?$uid:null + ],$option);//下单人数 + $value->order_num = Order::getOrderData([ + 'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type'=>'number',//取什么数据 data_type 数据类型 + 'market_id'=>'',//取哪个市场数据 + 'condition'=>1,//取数据维度 condition + 'user_ids'=>$uid?$uid:null + ],$option);//订单数 + $value->order_amount = Order::getOrderData([ + 'user_type'=>'lanzu_biz',//谁取数据 user_type 用户类型 + 'data_type'=>'amount',//取什么数据 data_type 数据类型 + 'market_id'=>'',//取哪个市场数据 + 'condition'=>1,//取数据维度 condition + 'user_ids'=>$uid?$uid:null + ],$option);//订单金额 + if ($result){ + $result[] = $value; + } + } + if ($result){ + return $result; + } + return $data; + } + + public static function export() + { + + return Excel::download(new \App\Admin\Actions\Exporter\SalesMan(), 'market.xlsx'); } } diff --git a/composer.json b/composer.json index 3853008..a821795 100644 --- a/composer.json +++ b/composer.json @@ -21,6 +21,7 @@ "laravel/framework": "^7.0", "laravel/scout": "^8.3", "laravel/tinker": "^2.0", + "maatwebsite/excel": "~3.1", "matchish/laravel-scout-elasticsearch": "^4.0", "overtrue/laravel-wechat": "~5.0" }, diff --git a/composer.lock b/composer.lock index 90ccb0a..fa498bb 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "854b617e7a44365e7cb38038beee8645", + "content-hash": "758d8ed34a07a48e7de06f4b5128a7ad", "packages": [ { "name": "adbario/php-dot-notation", @@ -253,6 +253,81 @@ ], "time": "2019-12-24T22:41:47+00:00" }, + { + "name": "box/spout", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/box/spout.git", + "reference": "7964dadc2128f3a00ffa393395b618ea115c8032" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/box/spout/zipball/7964dadc2128f3a00ffa393395b618ea115c8032", + "reference": "7964dadc2128f3a00ffa393395b618ea115c8032", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-xmlreader": "*", + "ext-zip": "*", + "php": ">=7.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2", + "phpunit/phpunit": "^7" + }, + "suggest": { + "ext-iconv": "To handle non UTF-8 CSV files (if \"php-intl\" is not already installed or is too limited)", + "ext-intl": "To handle non UTF-8 CSV files (if \"iconv\" is not already installed)" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Box\\Spout\\": "src/Spout" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Adrien Loison", + "email": "adrien@box.com" + } + ], + "description": "PHP Library to read and write spreadsheet files (CSV, XLSX and ODS), in a fast and scalable way", + "homepage": "https://www.github.com/box/spout", + "keywords": [ + "OOXML", + "csv", + "excel", + "memory", + "odf", + "ods", + "office", + "open", + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" + ], + "time": "2019-12-02T21:21:41+00:00" + }, { "name": "brick/math", "version": "0.9.1", @@ -303,12 +378,6 @@ "brick", "math" ], - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" - } - ], "time": "2020-08-18T23:57:15+00:00" }, { @@ -427,6 +496,67 @@ ], "time": "2017-06-12T01:10:27+00:00" }, + { + "name": "dcat/easy-excel", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/jqhph/easy-excel.git", + "reference": "badb6734420a77263f82e35ac218d2b4223fe833" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jqhph/easy-excel/zipball/badb6734420a77263f82e35ac218d2b4223fe833", + "reference": "badb6734420a77263f82e35ac218d2b4223fe833", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "box/spout": "~3", + "league/flysystem": "~1", + "php": ">=7.1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2", + "phpunit/phpunit": "~7|~8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dcat\\EasyExcel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "jqh", + "email": "841324345@qq.com" + } + ], + "description": "使用简单实用的语义化接口快速读写Excel文件", + "homepage": "https://github.com/jqhph/easy-excel", + "keywords": [ + "box spout", + "csv", + "easy excel", + "excel", + "ods", + "office", + "read", + "spreadsheet", + "stream", + "xlsx" + ], + "time": "2020-09-21T02:19:34+00:00" + }, { "name": "dcat/laravel-admin", "version": "1.7.4", @@ -725,20 +855,6 @@ "sqlserver", "sqlsrv" ], - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], "time": "2020-09-12T21:20:41+00:00" }, { @@ -2300,32 +2416,6 @@ "md", "parser" ], - "funding": [ - { - "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", - "type": "custom" - }, - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], "time": "2020-09-13T14:44:46+00:00" }, { @@ -2417,12 +2507,6 @@ "sftp", "storage" ], - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], "time": "2020-08-23T07:39:11+00:00" }, { @@ -2470,17 +2554,320 @@ } ], "description": "Mime-type detection for Flysystem", - "funding": [ + "time": "2020-08-09T10:34:01+00:00" + }, + { + "name": "maatwebsite/excel", + "version": "3.1.23", + "source": { + "type": "git", + "url": "https://github.com/Maatwebsite/Laravel-Excel.git", + "reference": "b8145257f020635f374d2314ccd556674efcbfcb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/b8145257f020635f374d2314ccd556674efcbfcb", + "reference": "b8145257f020635f374d2314ccd556674efcbfcb", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "illuminate/support": "5.5.*|5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0", + "php": "^7.0", + "phpoffice/phpspreadsheet": "^1.14" + }, + "require-dev": { + "orchestra/testbench": "^6.0", + "predis/predis": "^1.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "psr-4": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Brouwers", + "email": "patrick@maatwebsite.nl" + } + ], + "description": "Supercharged Excel exports and imports in Laravel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel", + "php", + "phpspreadsheet" + ], + "time": "2020-09-29T07:30:12+00:00" + }, + { + "name": "maennchen/zipstream-php", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/c4c5803cc1f93df3d2448478ef79394a5981cc58", + "reference": "c4c5803cc1f93df3d2448478ef79394a5981cc58", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "myclabs/php-enum": "^1.5", + "php": ">= 7.1", + "psr/http-message": "^1.0", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "ext-zip": "*", + "guzzlehttp/guzzle": ">= 6.3", + "mikey179/vfsstream": "^1.6", + "phpunit/phpunit": ">= 7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, { - "url": "https://github.com/frankdejonge", - "type": "github" + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" }, { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" } ], - "time": "2020-08-09T10:34:01+00:00" + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "time": "2020-05-30T13:11:16+00:00" + }, + { + "name": "markbaker/complex", + "version": "1.5.0", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "c3131244e29c08d44fefb49e0dd35021e9e39dd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/c3131244e29c08d44fefb49e0dd35021e9e39dd2", + "reference": "c3131244e29c08d44fefb49e0dd35021e9e39dd2", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6.0|^7.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5.0", + "phpcompatibility/php-compatibility": "^9.0", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0|^5.0|^6.0|^7.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^4.8.35|^5.0|^6.0|^7.0", + "sebastian/phpcpd": "2.*", + "squizlabs/php_codesniffer": "^3.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + }, + "files": [ + "classes/src/functions/abs.php", + "classes/src/functions/acos.php", + "classes/src/functions/acosh.php", + "classes/src/functions/acot.php", + "classes/src/functions/acoth.php", + "classes/src/functions/acsc.php", + "classes/src/functions/acsch.php", + "classes/src/functions/argument.php", + "classes/src/functions/asec.php", + "classes/src/functions/asech.php", + "classes/src/functions/asin.php", + "classes/src/functions/asinh.php", + "classes/src/functions/atan.php", + "classes/src/functions/atanh.php", + "classes/src/functions/conjugate.php", + "classes/src/functions/cos.php", + "classes/src/functions/cosh.php", + "classes/src/functions/cot.php", + "classes/src/functions/coth.php", + "classes/src/functions/csc.php", + "classes/src/functions/csch.php", + "classes/src/functions/exp.php", + "classes/src/functions/inverse.php", + "classes/src/functions/ln.php", + "classes/src/functions/log2.php", + "classes/src/functions/log10.php", + "classes/src/functions/negative.php", + "classes/src/functions/pow.php", + "classes/src/functions/rho.php", + "classes/src/functions/sec.php", + "classes/src/functions/sech.php", + "classes/src/functions/sin.php", + "classes/src/functions/sinh.php", + "classes/src/functions/sqrt.php", + "classes/src/functions/tan.php", + "classes/src/functions/tanh.php", + "classes/src/functions/theta.php", + "classes/src/operations/add.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "time": "2020-08-26T19:47:57+00:00" + }, + { + "name": "markbaker/matrix", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "182d44c3b2e3b063468f7481ae3ef71c69dc1409" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/182d44c3b2e3b063468f7481ae3ef71c69dc1409", + "reference": "182d44c3b2e3b063468f7481ae3ef71c69dc1409", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": "^5.6.0|^7.0.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "dev-master", + "phploc/phploc": "^4", + "phpmd/phpmd": "dev-master", + "phpunit/phpunit": "^5.7|^6.0|7.0", + "sebastian/phpcpd": "^3.0", + "squizlabs/php_codesniffer": "^3.0@dev" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + }, + "files": [ + "classes/src/functions/adjoint.php", + "classes/src/functions/antidiagonal.php", + "classes/src/functions/cofactors.php", + "classes/src/functions/determinant.php", + "classes/src/functions/diagonal.php", + "classes/src/functions/identity.php", + "classes/src/functions/inverse.php", + "classes/src/functions/minors.php", + "classes/src/functions/trace.php", + "classes/src/functions/transpose.php", + "classes/src/operations/add.php", + "classes/src/operations/directsum.php", + "classes/src/operations/subtract.php", + "classes/src/operations/multiply.php", + "classes/src/operations/divideby.php", + "classes/src/operations/divideinto.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "time": "2020-08-28T19:41:55+00:00" }, { "name": "matchish/laravel-scout-elasticsearch", @@ -2546,12 +2933,6 @@ "scout", "search" ], - "funding": [ - { - "url": "https://www.patreon.com/matchish", - "type": "patreon" - } - ], "time": "2020-03-26T04:06:20+00:00" }, { @@ -2704,6 +3085,58 @@ ], "time": "2020-07-31T21:01:56+00:00" }, + { + "name": "myclabs/php-enum", + "version": "1.7.6", + "source": { + "type": "git", + "url": "https://github.com/myclabs/php-enum.git", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "reference": "5f36467c7a87e20fbdc51e524fd8f9d1de80187c", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-json": "*", + "php": ">=7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7", + "squizlabs/php_codesniffer": "1.*", + "vimeo/psalm": "^3.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "MyCLabs\\Enum\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP Enum contributors", + "homepage": "https://github.com/myclabs/php-enum/graphs/contributors" + } + ], + "description": "PHP Enum implementation", + "homepage": "http://github.com/myclabs/php-enum", + "keywords": [ + "enum" + ], + "time": "2020-02-14T08:15:52+00:00" + }, { "name": "nesbot/carbon", "version": "2.39.2", @@ -2787,16 +3220,6 @@ "datetime", "time" ], - "funding": [ - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], "time": "2020-09-10T12:16:42+00:00" }, { @@ -3099,12 +3522,6 @@ "wechat", "weibo" ], - "funding": [ - { - "url": "https://www.patreon.com/overtrue", - "type": "patreon" - } - ], "time": "2020-09-14T08:34:23+00:00" }, { @@ -3178,20 +3595,6 @@ "weixin", "weixin-sdk" ], - "funding": [ - { - "url": "https://www.easywechat.com/img/pay/wechat.jpg", - "type": "custom" - }, - { - "url": "https://github.com/overtrue", - "type": "github" - }, - { - "url": "https://www.patreon.com/overtrue", - "type": "patreon" - } - ], "time": "2020-09-09T09:07:36+00:00" }, { @@ -3245,6 +3648,108 @@ ], "time": "2018-07-02T15:55:56+00:00" }, + { + "name": "phpoffice/phpspreadsheet", + "version": "1.14.1", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "2383aad5689778470491581442aab38cec41bf1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2383aad5689778470491581442aab38cec41bf1d", + "reference": "2383aad5689778470491581442aab38cec41bf1d", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1", + "markbaker/complex": "^1.4", + "markbaker/matrix": "^1.2", + "php": "^7.2", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/simple-cache": "^1.0" + }, + "require-dev": { + "dompdf/dompdf": "^0.8.5", + "friendsofphp/php-cs-fixer": "^2.16", + "jpgraph/jpgraph": "^4.0", + "mpdf/mpdf": "^8.0", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^8.5", + "squizlabs/php_codesniffer": "^3.5", + "tecnickcom/tcpdf": "^6.3" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "jpgraph/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "time": "2020-07-19T09:51:35+00:00" + }, { "name": "phpoption/phpoption", "version": "1.7.5", @@ -3354,26 +3859,133 @@ "email": "fabien@symfony.com" } ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2020-03-03T09:12:48+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "", + "mirrors": [ + { + "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%", + "preferred": true + } + ] + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", "keywords": [ + "PSR-11", "container", - "dependency injection" + "container-interface", + "container-interop", + "psr" ], - "time": "2020-03-03T09:12:48+00:00" + "time": "2017-02-14T16:28:37+00:00" }, { - "name": "psr/cache", - "version": "1.0.1", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", - "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "", "mirrors": [ { @@ -3383,7 +3995,7 @@ ] }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", "extra": { @@ -3393,7 +4005,7 @@ }, "autoload": { "psr-4": { - "Psr\\Cache\\": "src/" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3406,26 +4018,26 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Common interface for caching libraries", + "description": "Standard interfaces for event handling.", "keywords": [ - "cache", + "events", "psr", - "psr-6" + "psr-14" ], - "time": "2016-08-06T20:24:11+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "psr/container", - "version": "1.0.0", + "name": "psr/http-client", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", - "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", "shasum": "", "mirrors": [ { @@ -3435,7 +4047,8 @@ ] }, "require": { - "php": ">=5.3.0" + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { @@ -3445,7 +4058,7 @@ }, "autoload": { "psr-4": { - "Psr\\Container\\": "src/" + "Psr\\Http\\Client\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3458,29 +4071,28 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" + "http", + "http-client", + "psr", + "psr-18" ], - "time": "2017-02-14T16:28:37+00:00" + "time": "2020-06-29T06:28:15+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "psr/http-factory", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", "shasum": "", "mirrors": [ { @@ -3490,7 +4102,8 @@ ] }, "require": { - "php": ">=7.2.0" + "php": ">=7.0.0", + "psr/http-message": "^1.0" }, "type": "library", "extra": { @@ -3500,7 +4113,7 @@ }, "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3513,13 +4126,18 @@ "homepage": "http://www.php-fig.org/" } ], - "description": "Standard interfaces for event handling.", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "events", + "factory", + "http", + "message", "psr", - "psr-14" + "psr-17", + "psr-7", + "request", + "response" ], - "time": "2019-01-08T18:20:26+00:00" + "time": "2019-04-30T12:38:16+00:00" }, { "name": "psr/http-message", @@ -3875,12 +4493,6 @@ "queue", "set" ], - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - } - ], "time": "2020-09-10T20:58:17+00:00" }, { @@ -3968,12 +4580,6 @@ "identifier", "uuid" ], - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - } - ], "time": "2020-08-18T17:17:46+00:00" }, { @@ -4091,12 +4697,6 @@ "sort", "sortable" ], - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], "time": "2020-09-15T06:48:07+00:00" }, { @@ -4251,20 +4851,6 @@ "caching", "psr6" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-01T05:52:18+00:00" }, { @@ -4333,20 +4919,6 @@ "interoperability", "standards" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -4432,20 +5004,6 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-02T07:07:40+00:00" }, { @@ -4505,20 +5063,6 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-05-20T17:43:50+00:00" }, { @@ -4575,20 +5119,6 @@ ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -4657,20 +5187,6 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-12T08:45:47+00:00" }, { @@ -4734,20 +5250,6 @@ ], "description": "Symfony ErrorHandler Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T10:01:29+00:00" }, { @@ -4826,20 +5328,6 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-13T14:19:42+00:00" }, { @@ -4908,20 +5396,6 @@ "interoperability", "standards" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -4977,20 +5451,6 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T10:01:29+00:00" }, { @@ -5058,20 +5518,6 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T07:48:54+00:00" }, { @@ -5177,20 +5623,6 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-02T08:15:18+00:00" }, { @@ -5260,20 +5692,6 @@ "mime", "mime-type" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T10:01:29+00:00" }, { @@ -6030,20 +6448,6 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-07-23T08:36:24+00:00" }, { @@ -6114,20 +6518,6 @@ "psr-17", "psr-7" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-06-25T08:21:47+00:00" }, { @@ -6212,20 +6602,6 @@ "uri", "url" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-10T08:03:57+00:00" }, { @@ -6315,20 +6691,6 @@ ], "description": "Symfony Serializer Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-01T05:52:18+00:00" }, { @@ -6397,20 +6759,6 @@ "interoperability", "standards" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -6488,20 +6836,6 @@ "utf-8", "utf8" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T07:48:54+00:00" }, { @@ -6586,20 +6920,6 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T10:01:29+00:00" }, { @@ -6667,20 +6987,6 @@ "interoperability", "standards" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-09-07T11:33:47+00:00" }, { @@ -6763,20 +7069,6 @@ "debug", "dump" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-08-17T07:42:30+00:00" }, { @@ -6844,20 +7136,6 @@ "instantiate", "serialize" ], - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], "time": "2020-06-07T15:42:22+00:00" }, { @@ -7163,12 +7441,6 @@ "flare", "reporting" ], - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], "time": "2020-08-26T18:06:23+00:00" }, { @@ -8476,12 +8748,6 @@ "highlight.php", "syntax" ], - "funding": [ - { - "url": "https://github.com/allejo", - "type": "github" - } - ], "time": "2020-08-27T03:24:44+00:00" }, { @@ -9281,6 +9547,5 @@ "platform": { "php": "^7.2.5" }, - "platform-dev": [], - "plugin-api-version": "1.1.0" + "platform-dev": [] } diff --git a/config/app.php b/config/app.php index d3ae4d4..9e9f77b 100644 --- a/config/app.php +++ b/config/app.php @@ -176,6 +176,7 @@ return [ App\Providers\RouteServiceProvider::class, Iidestiny\LaravelFilesystemOss\OssStorageServiceProvider::class, //\Matchish\ScoutElasticSearch\ElasticSearchServiceProvider::class, + Maatwebsite\Excel\ExcelServiceProvider::class, ], /* @@ -227,6 +228,7 @@ return [ 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, + 'Excel' => Maatwebsite\Excel\Facades\Excel::class, ], diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 0000000..c3199b9 --- /dev/null +++ b/config/excel.php @@ -0,0 +1,328 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'pre_calculate_formulas' => false, + + /* + |-------------------------------------------------------------------------- + | Enable strict null comparison + |-------------------------------------------------------------------------- + | + | When enabling strict null comparison empty cells ('') will + | be added to the sheet. + */ + 'strict_null_comparison' => false, + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + ], + + 'imports' => [ + + /* + |-------------------------------------------------------------------------- + | Read Only + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might only be interested in the + | data that the sheet exists. By default we ignore all styles, + | however if you want to do some logic based on style data + | you can enable it by setting read_only to false. + | + */ + 'read_only' => true, + + /* + |-------------------------------------------------------------------------- + | Ignore Empty + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might be interested in ignoring + | rows that have null values or empty strings. By default rows + | containing empty strings or empty values are not ignored but can be + | ignored by enabling the setting ignore_empty to true. + | + */ + 'ignore_empty' => false, + + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'heading_row' => [ + 'formatter' => 'slug', + ], + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV imports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer/reader type should be used when the package + | needs to guess the correct type based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + 'tsv' => Excel::TSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], + + /* + |-------------------------------------------------------------------------- + | Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + | Possible value binders: + | + | [x] Maatwebsite\Excel\DefaultValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class + | + */ + 'value_binder' => [ + 'default' => Maatwebsite\Excel\DefaultValueBinder::class, + ], + + 'cache' => [ + /* + |-------------------------------------------------------------------------- + | Default cell caching driver + |-------------------------------------------------------------------------- + | + | By default PhpSpreadsheet keeps all cell values in memory, however when + | dealing with large files, this might result into memory issues. If you + | want to mitigate that, you can configure a cell caching driver here. + | When using the illuminate driver, it will store each value in a the + | cache store. This can slow down the process, because it needs to + | store each value. You can use the "batch" store if you want to + | only persist to the store when the memory limit is reached. + | + | Drivers: memory|illuminate|batch + | + */ + 'driver' => 'memory', + + /* + |-------------------------------------------------------------------------- + | Batch memory caching + |-------------------------------------------------------------------------- + | + | When dealing with the "batch" caching driver, it will only + | persist to the store when the memory limit is reached. + | Here you can tweak the memory limit to your liking. + | + */ + 'batch' => [ + 'memory_limit' => 60000, + ], + + /* + |-------------------------------------------------------------------------- + | Illuminate cache + |-------------------------------------------------------------------------- + | + | When using the "illuminate" caching driver, it will automatically use + | your default cache store. However if you prefer to have the cell + | cache on a separate store, you can configure the store name here. + | You can use any store defined in your cache config. When leaving + | at "null" it will use the default store. + | + */ + 'illuminate' => [ + 'store' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'transactions' => [ + 'handler' => 'db', + ], + + 'temporary_files' => [ + + /* + |-------------------------------------------------------------------------- + | Local Temporary Path + |-------------------------------------------------------------------------- + | + | When exporting and importing files, we use a temporary file, before + | storing reading or downloading. Here you can customize that path. + | + */ + 'local_path' => storage_path('framework/laravel-excel'), + + /* + |-------------------------------------------------------------------------- + | Remote Temporary Disk + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup with queues in which you + | cannot rely on having a shared local temporary path, you might + | want to store the temporary file on a shared disk. During the + | queue executing, we'll retrieve the temporary file from that + | location instead. When left to null, it will always use + | the local path. This setting only has effect when using + | in conjunction with queued imports and exports. + | + */ + 'remote_disk' => null, + 'remote_prefix' => null, + + /* + |-------------------------------------------------------------------------- + | Force Resync + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup as above, it's possible + | for the clean up that occurs after entire queue has been run to only + | cleanup the server that the last AfterImportJob runs on. The rest of the server + | would still have the local temporary file stored on it. In this case your + | local storage limits can be exceeded and future imports won't be processed. + | To mitigate this you can set this config value to be true, so that after every + | queued chunk is processed the local temporary file is deleted on the server that + | processed it. + | + */ + 'force_resync_remote' => null, + ], +]; diff --git a/routes/web.php b/routes/web.php index 993b7a6..fa168f1 100644 --- a/routes/web.php +++ b/routes/web.php @@ -18,6 +18,7 @@ Route::get('/', function(){ }); Route::get('/test', 'TestController@Test'); +Route::get('/export', 'TestController@export'); Route::any('/rpc', 'TestController@testRpc'); Route::any('/map', 'TestController@testMap'); Route::any('/add', 'Salesman@addData'); diff --git a/storage/framework/laravel-excel/laravel-excel-1yWRkHreLllX7MXKHlJPTMNfnVOwIGR1.xlsx b/storage/framework/laravel-excel/laravel-excel-1yWRkHreLllX7MXKHlJPTMNfnVOwIGR1.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..35402a0c187e582f6d1a0f04a93b90602ca1f733 GIT binary patch literal 6641 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 R3j{>GClCh*K>X|5{{g_;mreix literal 0 HcmV?d00001 diff --git a/storage/framework/laravel-excel/laravel-excel-Uhbm2VWA7B4WTj6Pz5mKJostWKikQA0r.xlsx b/storage/framework/laravel-excel/laravel-excel-Uhbm2VWA7B4WTj6Pz5mKJostWKikQA0r.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3cf045c1bb33f337f70736619b52a36ed7d8e9f8 GIT binary patch literal 6654 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 literal 0 HcmV?d00001 diff --git a/storage/framework/laravel-excel/laravel-excel-Z3fdakI4WiO9DTZJeGSnKkdpltFKwwfU.xlsx b/storage/framework/laravel-excel/laravel-excel-Z3fdakI4WiO9DTZJeGSnKkdpltFKwwfU.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fff7c736708eaf1ceb034373c534cf0a59d66a88 GIT binary patch literal 6641 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 P!rwFSg99M?{q27MXT+0H literal 0 HcmV?d00001 diff --git a/storage/framework/laravel-excel/laravel-excel-eYPrHax2rrY0IrKCXdV7CFDP20SFhxoY.xlsx b/storage/framework/laravel-excel/laravel-excel-eYPrHax2rrY0IrKCXdV7CFDP20SFhxoY.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..f08a08ca63402e70d03b6b185b4b7441b3127d98 GIT binary patch literal 6652 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