Browse Source

拓展员导出

master
lanzu_qinsheng 5 years ago
parent
commit
1a0efb8adf
  1. 118
      app/Admin/Actions/EXporter/SalesMan.php
  2. 2
      app/Admin/Actions/Tools/SalesmanOption.php
  3. 16
      app/Admin/Controllers/v3/Salesman.php
  4. 2
      app/Admin/Repositories/v3/CsInfo.php
  5. 1
      app/Admin/routes.php
  6. 110
      app/Console/Commands/CsInfoStatis.php
  7. 104
      app/Http/Controllers/TestController.php
  8. 1
      composer.json
  9. 1251
      composer.lock
  10. 2
      config/app.php
  11. 328
      config/excel.php
  12. 1
      routes/web.php
  13. BIN
      storage/framework/laravel-excel/laravel-excel-1yWRkHreLllX7MXKHlJPTMNfnVOwIGR1.xlsx
  14. BIN
      storage/framework/laravel-excel/laravel-excel-Uhbm2VWA7B4WTj6Pz5mKJostWKikQA0r.xlsx
  15. BIN
      storage/framework/laravel-excel/laravel-excel-Z3fdakI4WiO9DTZJeGSnKkdpltFKwwfU.xlsx
  16. BIN
      storage/framework/laravel-excel/laravel-excel-eYPrHax2rrY0IrKCXdV7CFDP20SFhxoY.xlsx
  17. BIN
      storage/framework/laravel-excel/laravel-excel-seIr1cl908lcHEofP6DhBYv8QFo8cvVK.xlsx
  18. 17
      stubs/export.model.stub
  19. 16
      stubs/export.plain.stub
  20. 17
      stubs/export.query-model.stub
  21. 16
      stubs/export.query.stub
  22. 17
      stubs/import.collection.stub
  23. 21
      stubs/import.model.stub

118
app/Admin/Actions/EXporter/SalesMan.php

@ -0,0 +1,118 @@
<?php
namespace App\Admin\Actions\Exporter;
use App\Models\LanzuCsInfo;
use App\Models\LanzuMarket;
use Dcat\Admin\Grid\Exporters\AbstractExporter;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use Maatwebsite\Excel\Facades\Excel;
use App\Admin\Common\Order;
use App\Models\LanzuUserRelationBind;
use Illuminate\Console\Command;
use \App\Models\v3\CsInfo as modelCsInfo;
class SalesMan implements FromArray, WithStrictNullComparison
{
protected $_name;
protected $_option;
public function __construct($option,$name)
{
$this->_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;
}
}

2
app/Admin/Actions/Tools/SalesmanOption.php

@ -28,6 +28,7 @@ JS;
'yesterday' => '昨日', 'yesterday' => '昨日',
'week' => '本周', 'week' => '本周',
'month' => '本月', 'month' => '本月',
'last_month' => '上月',
]; ];
$data = [ $data = [
@ -35,6 +36,7 @@ JS;
'yesterday' => '-1', 'yesterday' => '-1',
'week' => 'w', 'week' => 'w',
'month' => '30', 'month' => '30',
'last_month' => '-30',
]; ];
foreach ($data as $key=>$value){ foreach ($data as $key=>$value){

16
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\Lazy\CsInfo;
use App\Admin\Actions\Tools\SalesmanOption; use App\Admin\Actions\Tools\SalesmanOption;
use App\Admin\Actions\Tools\SalesmanOptionCopy; use App\Admin\Actions\Tools\SalesmanOptionCopy;
use App\Http\Controllers\TestController;
use App\Models\LanzuMarket;
use App\Models\v3\SalesmanData; use App\Models\v3\SalesmanData;
use Dcat\Admin\Controllers\AdminController; use Dcat\Admin\Controllers\AdminController;
use Dcat\Admin\Grid; use Dcat\Admin\Grid;
use Dcat\Admin\Widgets\Modal; use Dcat\Admin\Widgets\Modal;
use Maatwebsite\Excel\Facades\Excel;
class Salesman extends AdminController class Salesman extends AdminController
{ {
@ -39,8 +42,10 @@ class Salesman extends AdminController
return Grid::make(new \App\Admin\Repositories\v3\Salesman(), function (Grid $grid) { return Grid::make(new \App\Admin\Repositories\v3\Salesman(), function (Grid $grid) {
$grid->tools(new SalesmanOption()); $grid->tools(new SalesmanOption());
$name = request()->get('name') ?? '今日'; $name = request()->get('name') ?? '今日';
$option = request()->get('option');
$option = request()->get('option') ?? 1;
$grid->paginate(10); $grid->paginate(10);
$grid->tools("<a href='salesman_export?option={$option}&name={$name}' class='btn btn-primary feather icon-download'> 导出 </a>");
$grid->export();
$grid->column('person_id', '懒ID'); $grid->column('person_id', '懒ID');
$grid->column('nick_name', '拓展员'); $grid->column('nick_name', '拓展员');
$grid->column('total', '社区总数'); $grid->column('total', '社区总数');
@ -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');
}
} }

2
app/Admin/Repositories/v3/CsInfo.php

@ -16,10 +16,10 @@ class CsInfo extends EloquentRepository
{ {
$adminUid= request()->get('admin_user_id'); $adminUid= request()->get('admin_user_id');
$option= request()->get('option'); $option= request()->get('option');
//获取服务站点
$data = modelCsInfo::whereIn('admin_user_id',$adminUid) $data = modelCsInfo::whereIn('admin_user_id',$adminUid)
->paginate(10) ->paginate(10)
->toArray(); ->toArray();
foreach ($data['data'] as &$value){ foreach ($data['data'] as &$value){
//>>1.获取绑定后下过单的用户 //>>1.获取绑定后下过单的用户
$value['user_num'] = LanzuUserRelationBind::where('source_id',$value['admin_user_id'])->count(); $value['user_num'] = LanzuUserRelationBind::where('source_id',$value['admin_user_id'])->count();

1
app/Admin/routes.php

@ -17,6 +17,7 @@ Route::group([
$router->resource('/speaker', 'LanzuServiceSpeakerController'); $router->resource('/speaker', 'LanzuServiceSpeakerController');
$router->resource('/mp', 'LanzuMpInfoController'); $router->resource('/mp', 'LanzuMpInfoController');
$router->resource('/salesman', 'v3\Salesman'); $router->resource('/salesman', 'v3\Salesman');
$router->any('/salesman_export', 'v3\Salesman@export');
$router->any('/mp_data', 'LanzuMpInfoController@showData'); $router->any('/mp_data', 'LanzuMpInfoController@showData');
$router->resource('/mm', 'LanzuMmInfoController'); $router->resource('/mm', 'LanzuMmInfoController');
$router->resource('/market', 'ImsCjdcMarketController'); $router->resource('/market', 'ImsCjdcMarketController');

110
app/Console/Commands/CsInfoStatis.php

@ -0,0 +1,110 @@
<?php
namespace App\Console\Commands;
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;
class CsInfoStatis extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:CsInfoStatis';
/**
* The console command description.
*
* @var string
*/
protected $description = 'export CsInfoStatis';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$rows = $this->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);
}
}

104
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\Log;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use App\Models\FinancialRecord; 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 class TestController extends BaseController
{ {
public function Test(){ 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]);
}
return $response->getBody()->getContents();
}
public function testMap()
$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);
}
dd($result);
}
/**
* 获取站点详情
*/
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");
$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 $result;
} }
return $data;
}
public static function export()
{
return Excel::download(new \App\Admin\Actions\Exporter\SalesMan(), 'market.xlsx');
}
} }

1
composer.json

@ -21,6 +21,7 @@
"laravel/framework": "^7.0", "laravel/framework": "^7.0",
"laravel/scout": "^8.3", "laravel/scout": "^8.3",
"laravel/tinker": "^2.0", "laravel/tinker": "^2.0",
"maatwebsite/excel": "~3.1",
"matchish/laravel-scout-elasticsearch": "^4.0", "matchish/laravel-scout-elasticsearch": "^4.0",
"overtrue/laravel-wechat": "~5.0" "overtrue/laravel-wechat": "~5.0"
}, },

1251
composer.lock
File diff suppressed because it is too large
View File

2
config/app.php

@ -176,6 +176,7 @@ return [
App\Providers\RouteServiceProvider::class, App\Providers\RouteServiceProvider::class,
Iidestiny\LaravelFilesystemOss\OssStorageServiceProvider::class, Iidestiny\LaravelFilesystemOss\OssStorageServiceProvider::class,
//\Matchish\ScoutElasticSearch\ElasticSearchServiceProvider::class, //\Matchish\ScoutElasticSearch\ElasticSearchServiceProvider::class,
Maatwebsite\Excel\ExcelServiceProvider::class,
], ],
/* /*
@ -227,6 +228,7 @@ return [
'URL' => Illuminate\Support\Facades\URL::class, 'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class, 'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class, 'View' => Illuminate\Support\Facades\View::class,
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
], ],

328
config/excel.php

@ -0,0 +1,328 @@
<?php
use Maatwebsite\Excel\Excel;
return [
'exports' => [
/*
|--------------------------------------------------------------------------
| 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,
],
];

1
routes/web.php

@ -18,6 +18,7 @@ Route::get('/', function(){
}); });
Route::get('/test', 'TestController@Test'); Route::get('/test', 'TestController@Test');
Route::get('/export', 'TestController@export');
Route::any('/rpc', 'TestController@testRpc'); Route::any('/rpc', 'TestController@testRpc');
Route::any('/map', 'TestController@testMap'); Route::any('/map', 'TestController@testMap');
Route::any('/add', 'Salesman@addData'); Route::any('/add', 'Salesman@addData');

BIN
storage/framework/laravel-excel/laravel-excel-1yWRkHreLllX7MXKHlJPTMNfnVOwIGR1.xlsx

BIN
storage/framework/laravel-excel/laravel-excel-Uhbm2VWA7B4WTj6Pz5mKJostWKikQA0r.xlsx

BIN
storage/framework/laravel-excel/laravel-excel-Z3fdakI4WiO9DTZJeGSnKkdpltFKwwfU.xlsx

BIN
storage/framework/laravel-excel/laravel-excel-eYPrHax2rrY0IrKCXdV7CFDP20SFhxoY.xlsx

BIN
storage/framework/laravel-excel/laravel-excel-seIr1cl908lcHEofP6DhBYv8QFo8cvVK.xlsx

17
stubs/export.model.stub

@ -0,0 +1,17 @@
<?php
namespace DummyNamespace;
use DummyFullModelClass;
use Maatwebsite\Excel\Concerns\FromCollection;
class DummyClass implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return DummyModelClass::all();
}
}

16
stubs/export.plain.stub

@ -0,0 +1,16 @@
<?php
namespace DummyNamespace;
use Maatwebsite\Excel\Concerns\FromCollection;
class DummyClass implements FromCollection
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
//
}
}

17
stubs/export.query-model.stub

@ -0,0 +1,17 @@
<?php
namespace DummyNamespace;
use DummyFullModelClass;
use Maatwebsite\Excel\Concerns\FromQuery;
class DummyClass implements FromQuery
{
/**
* @return \Illuminate\Database\Query\Builder
*/
public function query()
{
return DummyModelClass::query();
}
}

16
stubs/export.query.stub

@ -0,0 +1,16 @@
<?php
namespace DummyNamespace;
use Maatwebsite\Excel\Concerns\FromQuery;
class DummyClass implements FromQuery
{
/**
* @return \Illuminate\Database\Query\Builder
*/
public function query()
{
//
}
}

17
stubs/import.collection.stub

@ -0,0 +1,17 @@
<?php
namespace DummyNamespace;
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class DummyClass implements ToCollection
{
/**
* @param Collection $collection
*/
public function collection(Collection $collection)
{
//
}
}

21
stubs/import.model.stub

@ -0,0 +1,21 @@
<?php
namespace DummyNamespace;
use DummyFullModelClass;
use Maatwebsite\Excel\Concerns\ToModel;
class DummyClass implements ToModel
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new DummyModelClass([
//
]);
}
}
Loading…
Cancel
Save