From f47d58a2f95587a3b90329718b66fdeca552af12 Mon Sep 17 00:00:00 2001 From: denghy Date: Sat, 29 Dec 2018 17:36:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=AE=B0=E5=BD=95=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E4=BF=9D=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Domains/Stats/Exports/AbstractExport.php | 149 ++++++++++++++++++ .../Stats/Exports/CompanyCountExport.php | 5 +- .../Controllers/CompanyCountController.php | 4 +- .../Stats/Http/Controllers/Controller.php | 11 +- app/Domains/Virtual/Services/OrderService.php | 2 +- app/Models/Stats/Export.php | 16 ++ composer.lock | 12 +- config/excel.php | 2 +- ...2_29_112239_create_stats_exports_table.php | 39 +++++ storage/app/public/企业统计.xlsx | Bin 0 -> 10965 bytes tests/StatsTest.php | 7 +- vendor/composer/autoload_classmap.php | 1 + vendor/composer/autoload_static.php | 1 + vendor/composer/installed.json | 14 +- .../src/Concerns/RegistersEventListeners.php | 10 ++ .../dipper/excel/src/Events/AfterExport.php | 52 ++++++ vendor/dipper/excel/src/Events/AfterStore.php | 80 ++++++++++ vendor/dipper/excel/src/Excel.php | 19 ++- .../excel/src/Jobs/AfterQueueExportJob.php | 59 +++++++ vendor/dipper/excel/src/QueuedWriter.php | 4 +- .../excel/src/RegistersCustomConcerns.php | 4 + vendor/dipper/excel/src/Writer.php | 13 +- 22 files changed, 463 insertions(+), 41 deletions(-) create mode 100644 app/Domains/Stats/Exports/AbstractExport.php create mode 100644 app/Models/Stats/Export.php create mode 100644 database/migrations/2018_12_29_112239_create_stats_exports_table.php create mode 100644 storage/app/public/企业统计.xlsx create mode 100644 vendor/dipper/excel/src/Events/AfterExport.php create mode 100644 vendor/dipper/excel/src/Events/AfterStore.php create mode 100644 vendor/dipper/excel/src/Jobs/AfterQueueExportJob.php diff --git a/app/Domains/Stats/Exports/AbstractExport.php b/app/Domains/Stats/Exports/AbstractExport.php new file mode 100644 index 00000000..d15e610d --- /dev/null +++ b/app/Domains/Stats/Exports/AbstractExport.php @@ -0,0 +1,149 @@ + '企业统计', + ]; + + public $sn; + + public $filename; + + public function __construct() + { + $this->sn = $this->sn(); + $this->filename = $this->filename(); + } + + /** + * @return array + */ + public function registerEvents(): array + { + return [ + BeforeExport::class => [self::class, 'beforeExport'], + BeforeWriting::class => [self::class, 'beforeWriting'], + AfterExport::class => [self::class, 'afterExport'], + AfterStore::class => [self::class, 'afterStore'], + ]; + } + + /** + * 开始导出 + * + * @param BeforeExport $event + * @return void + */ + public static function beforeExport(BeforeExport $event) + { + $data = [ + 'sn' => $event->getConcernable()->sn, + 'filename' => $event->getConcernable()->filename, + 'filesize' => 0, + 'conditions' => $event->getConcernable()->conditions ?: null, + 'status' => 0, + 'progress' => 0, + ]; + + Export::create($data); + } + + /** + * 写入数据 + * + * @param BeforeWriting $event + * @return void + */ + public static function beforeWriting(BeforeWriting $event) + { + Export::where(['sn' => $event->getConcernable()->sn])->update([ + 'status' => 1, + 'progress' => 50, + ]); + } + + /** + * 写入结束 + * + * @param AfterExport $event + * @return void + */ + public static function afterExport(AfterExport $event) + { + Export::where(['sn' => $event->getConcernable()->sn])->update([ + 'status' => 2, + 'progress' => 90, + ]); + } + + /** + * 保持结束 + * + * @param AfterStore $event + * @return void + */ + public static function afterStore(AfterStore $event) + { + $disk = Storage::disk($event->getDisk()); + + if ($disk->exists($event->getFilePath())) { + Export::where(['sn' => $event->getConcernable()->sn])->update([ + 'filesize' => $disk->size($event->getFilePath()), + 'status' => 3, + 'progress' => 100, + ]); + } else { + Export::where(['sn' => $event->getConcernable()->sn])->update([ + 'status' => 4, + 'progress' => 100, + ]); + } + } + + /** + * 表格标题 + * + * @return string + */ + public function title(): string + { + return self::$classes[get_class($this)] ?? '列表'; + } + + /** + * 序列号 + * + * @return string + */ + private function sn(): string + { + return date('YmdHis') .sprintf('%04d', explode('.', microtime(true))[1]) . sprintf('%02d', rand(0, 99)); + } + + /** + * 文件名称 + * + * @return string + */ + private function filename(): string + { + $filename = $this->title() . date('YmdHis'); + + return "export/{$filename}.xlsx"; + } +} diff --git a/app/Domains/Stats/Exports/CompanyCountExport.php b/app/Domains/Stats/Exports/CompanyCountExport.php index 03e4b2ad..9db89842 100644 --- a/app/Domains/Stats/Exports/CompanyCountExport.php +++ b/app/Domains/Stats/Exports/CompanyCountExport.php @@ -7,15 +7,16 @@ use Dipper\Excel\Concerns\WithHeadings; use Dipper\Excel\Concerns\FromCollection; use App\Domains\Stats\Services\CompanyCountService; -class CompanyCountExport implements FromCollection, WithHeadings +class CompanyCountExport extends AbstractExport implements FromCollection, WithHeadings { use Exportable; - protected $conditions; + public $conditions; public function __construct(array $conditions = []) { $this->conditions = $conditions; + parent::__construct(); } public function collection() diff --git a/app/Domains/Stats/Http/Controllers/CompanyCountController.php b/app/Domains/Stats/Http/Controllers/CompanyCountController.php index ab2c1889..8f404992 100644 --- a/app/Domains/Stats/Http/Controllers/CompanyCountController.php +++ b/app/Domains/Stats/Http/Controllers/CompanyCountController.php @@ -46,9 +46,9 @@ class CompanyCountController extends Controller $conditions = $this->request->all(); $conditions['limit'] = 0; - $filename = $this->getFilename('企业统计'); + $export = new CompanyCountExport($conditions); - $res = Excel::queue(new CompanyCountExport($conditions), $filename); + $res = Excel::queue($export, $export->filename(), $this->disk); dd($res); diff --git a/app/Domains/Stats/Http/Controllers/Controller.php b/app/Domains/Stats/Http/Controllers/Controller.php index b4196712..25c53e92 100644 --- a/app/Domains/Stats/Http/Controllers/Controller.php +++ b/app/Domains/Stats/Http/Controllers/Controller.php @@ -11,14 +11,5 @@ use App\Core\Controller as BaseController; */ abstract class Controller extends BaseController { - protected function getFilename($prefix = '列表') - { - $filename = $prefix; - - if (Request::get('starttime') && Request::get('endtime')) { - $filename .= ' ' . Carbon::parse(Request::get('starttime'))->format('Ymd') . '-' . Carbon::parse(Request::get('endtime'))->format('Ymd'); - } - - return "export/{$filename}.xlsx"; - } + public $disk = 'public'; } diff --git a/app/Domains/Virtual/Services/OrderService.php b/app/Domains/Virtual/Services/OrderService.php index ae762b35..a8bbe186 100644 --- a/app/Domains/Virtual/Services/OrderService.php +++ b/app/Domains/Virtual/Services/OrderService.php @@ -204,6 +204,6 @@ class OrderService extends Service */ public function generateSn() { - return date('YmdHis') . explode('.', microtime(true))[1] . sprintf('%02d', rand(0, 99)); + return date('YmdHis') .sprintf('%04d', explode('.', microtime(true))[1]) . sprintf('%02d', rand(0, 99)); } } diff --git a/app/Models/Stats/Export.php b/app/Models/Stats/Export.php new file mode 100644 index 00000000..a0b0cb79 --- /dev/null +++ b/app/Models/Stats/Export.php @@ -0,0 +1,16 @@ + 'array', + ]; +} diff --git a/composer.lock b/composer.lock index baaf94cb..a22a83ff 100644 --- a/composer.lock +++ b/composer.lock @@ -591,17 +591,17 @@ }, { "name": "dipper/excel", - "version": "3.1.4", + "version": "3.1.6", "source": { "type": "git", "url": "ssh://gogs@git.fxft.net:2222/composer/excel.git", - "reference": "1488a26fad170bd2d07d6f54723ef0ec437e355d" + "reference": "6b622871f65b501b9037c85f6a29f8ff8a9d0841" }, "dist": { "type": "tar", - "url": "https://composer.fxft.online/dist/dipper/excel/dipper-excel-3.1.4-152322.tar", - "reference": "1488a26fad170bd2d07d6f54723ef0ec437e355d", - "shasum": "6a2aa6fa78289887105026666559f16d358656e3" + "url": "https://composer.fxft.online/dist/dipper/excel/dipper-excel-3.1.6-7b07a0.tar", + "reference": "6b622871f65b501b9037c85f6a29f8ff8a9d0841", + "shasum": "bf0ab6605e6a46929d711bc0551638b19044ea52" }, "require": { "illuminate/support": "5.5.* || 5.6.* || 5.7.*", @@ -641,7 +641,7 @@ "MIT" ], "description": "Supercharged Excel exports and imports in Laravel", - "time": "2018-12-29T02:00:31+00:00" + "time": "2018-12-29T08:53:53+00:00" }, { "name": "dipper/flashmessage", diff --git a/config/excel.php b/config/excel.php index dbe24eca..e05fabc0 100644 --- a/config/excel.php +++ b/config/excel.php @@ -1,6 +1,6 @@ [ diff --git a/database/migrations/2018_12_29_112239_create_stats_exports_table.php b/database/migrations/2018_12_29_112239_create_stats_exports_table.php new file mode 100644 index 00000000..6fe76070 --- /dev/null +++ b/database/migrations/2018_12_29_112239_create_stats_exports_table.php @@ -0,0 +1,39 @@ +increments('id')->comment('自增ID'); + $table->string('sn', 32)->comment('命令编号'); + $table->string('filename')->default('')->comment('文件名'); + $table->integer('filesize')->unsigned()->default(0)->comment('文件大小'); + $table->text('conditions')->nullable()->comment('查询条件'); + $table->tinyInteger('status')->unsigned()->default(0)->comment('状态 0:数据准备中 1:开始写入 2:写入结束 3:保存成功 4:任务失败'); + $table->tinyInteger('progress')->unsigned()->default(0)->comment('进度'); + $table->timestamps(); + $table->unique('sn'); + $table->comment('VD统计导出表'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('stats_exports'); + } +} diff --git a/storage/app/public/企业统计.xlsx b/storage/app/public/企业统计.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..383f98a27ffe076ed226b6fb609acfc5f88d655a GIT binary patch literal 10965 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 QlE{F`m%=%IfdK&j4@VOyu>b%7 literal 0 HcmV?d00001 diff --git a/tests/StatsTest.php b/tests/StatsTest.php index 0f5f4858..fe735860 100644 --- a/tests/StatsTest.php +++ b/tests/StatsTest.php @@ -1,10 +1,13 @@ filename); \ No newline at end of file diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index b7c1d311..3ff9cefc 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -20,6 +20,7 @@ return array( 'CreateRealOrderCardsTable' => $baseDir . '/database/migrations/2018_12_24_164434_create_real_order_cards_table.php', 'CreateRealOrdersTable' => $baseDir . '/database/migrations/2018_12_24_164430_create_real_orders_table.php', 'CreateRealPackagesTable' => $baseDir . '/database/migrations/2018_12_24_164423_create_real_packages_table.php', + 'CreateStatsExportsTable' => $baseDir . '/database/migrations/2018_12_29_112239_create_stats_exports_table.php', 'CreateVirtualCompaniesTable' => $baseDir . '/database/migrations/2018_12_24_164716_create_virtual_companies_table.php', 'CreateVirtualCompanyAccountsTable' => $baseDir . '/database/migrations/2018_12_24_164728_create_virtual_company_accounts_table.php', 'CreateVirtualCompanyAddressesTable' => $baseDir . '/database/migrations/2018_12_24_164735_create_virtual_company_addresses_table.php', diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 248d9bf2..8df748aa 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -723,6 +723,7 @@ class ComposerStaticInite79258a3e34ad3e251999111d9f334d9 'CreateRealOrderCardsTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164434_create_real_order_cards_table.php', 'CreateRealOrdersTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164430_create_real_orders_table.php', 'CreateRealPackagesTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164423_create_real_packages_table.php', + 'CreateStatsExportsTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_29_112239_create_stats_exports_table.php', 'CreateVirtualCompaniesTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164716_create_virtual_companies_table.php', 'CreateVirtualCompanyAccountsTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164728_create_virtual_company_accounts_table.php', 'CreateVirtualCompanyAddressesTable' => __DIR__ . '/../..' . '/database/migrations/2018_12_24_164735_create_virtual_company_addresses_table.php', diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 62ddff69..3c9ee450 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -604,18 +604,18 @@ }, { "name": "dipper/excel", - "version": "3.1.4", - "version_normalized": "3.1.4.0", + "version": "3.1.6", + "version_normalized": "3.1.6.0", "source": { "type": "git", "url": "ssh://gogs@git.fxft.net:2222/composer/excel.git", - "reference": "1488a26fad170bd2d07d6f54723ef0ec437e355d" + "reference": "6b622871f65b501b9037c85f6a29f8ff8a9d0841" }, "dist": { "type": "tar", - "url": "https://composer.fxft.online/dist/dipper/excel/dipper-excel-3.1.4-152322.tar", - "reference": "1488a26fad170bd2d07d6f54723ef0ec437e355d", - "shasum": "6a2aa6fa78289887105026666559f16d358656e3" + "url": "https://composer.fxft.online/dist/dipper/excel/dipper-excel-3.1.6-7b07a0.tar", + "reference": "6b622871f65b501b9037c85f6a29f8ff8a9d0841", + "shasum": "bf0ab6605e6a46929d711bc0551638b19044ea52" }, "require": { "illuminate/support": "5.5.* || 5.6.* || 5.7.*", @@ -630,7 +630,7 @@ "phpunit/phpunit": "^7.0", "predis/predis": "^1.1" }, - "time": "2018-12-29T02:00:31+00:00", + "time": "2018-12-29T08:53:53+00:00", "type": "library", "extra": { "laravel": { diff --git a/vendor/dipper/excel/src/Concerns/RegistersEventListeners.php b/vendor/dipper/excel/src/Concerns/RegistersEventListeners.php index d3743763..2474f2de 100644 --- a/vendor/dipper/excel/src/Concerns/RegistersEventListeners.php +++ b/vendor/dipper/excel/src/Concerns/RegistersEventListeners.php @@ -3,6 +3,8 @@ namespace Dipper\Excel\Concerns; use Dipper\Excel\Events\AfterSheet; +use Dipper\Excel\Events\AfterStore; +use Dipper\Excel\Events\AfterExport; use Dipper\Excel\Events\AfterImport; use Dipper\Excel\Events\BeforeSheet; use Dipper\Excel\Events\BeforeExport; @@ -42,6 +44,14 @@ trait RegistersEventListeners $listeners[AfterSheet::class] = [static::class, 'afterSheet']; } + if (method_exists($this, 'afterExport')) { + $listeners[AfterExport::class] = [static::class, 'afterExport']; + } + + if (method_exists($this, 'afterStore')) { + $listeners[AfterStore::class] = [static::class, 'afterStore']; + } + return $listeners; } } diff --git a/vendor/dipper/excel/src/Events/AfterExport.php b/vendor/dipper/excel/src/Events/AfterExport.php new file mode 100644 index 00000000..a4f03602 --- /dev/null +++ b/vendor/dipper/excel/src/Events/AfterExport.php @@ -0,0 +1,52 @@ +writer = $writer; + $this->exportable = $exportable; + } + + /** + * @return Writer + */ + public function getWriter(): Writer + { + return $this->writer; + } + + /** + * @return object + */ + public function getConcernable() + { + return $this->exportable; + } + + /** + * @return mixed + */ + public function getDelegate() + { + return $this->writer; + } +} diff --git a/vendor/dipper/excel/src/Events/AfterStore.php b/vendor/dipper/excel/src/Events/AfterStore.php new file mode 100644 index 00000000..dec7903c --- /dev/null +++ b/vendor/dipper/excel/src/Events/AfterStore.php @@ -0,0 +1,80 @@ +writer = $writer; + $this->exportable = $exportable; + $this->filePath = $filePath; + $this->disk = $disk; + } + + /** + * @return Writer + */ + public function getWriter(): Writer + { + return $this->writer; + } + + /** + * @return object + */ + public function getConcernable() + { + return $this->exportable; + } + + /** + * @return mixed + */ + public function getDelegate() + { + return $this->writer; + } + + /** + * @return mixed + */ + public function getFilePath() + { + return $this->filePath; + } + + /** + * @return string + */ + public function getDisk() + { + return $this->disk; + } +} diff --git a/vendor/dipper/excel/src/Excel.php b/vendor/dipper/excel/src/Excel.php index 9e9cfd1d..4cdcc962 100644 --- a/vendor/dipper/excel/src/Excel.php +++ b/vendor/dipper/excel/src/Excel.php @@ -2,17 +2,20 @@ namespace Dipper\Excel; +use Dipper\Excel\HasEventBus; use Illuminate\Support\Collection; +use Dipper\Excel\Events\AfterStore; +use Dipper\Excel\Bus\PendingDispatch; +use Dipper\Excel\Concerns\WithEvents; use PhpOffice\PhpSpreadsheet\IOFactory; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Filesystem\Factory; -use Dipper\Excel\Bus\PendingDispatch; -use Symfony\Component\HttpFoundation\File\UploadedFile; use Dipper\Excel\Exceptions\NoTypeDetectedException; +use Symfony\Component\HttpFoundation\File\UploadedFile; class Excel implements Exporter, Importer { - use RegistersCustomConcerns; + use RegistersCustomConcerns, HasEventBus; const XLSX = 'Xlsx'; @@ -97,7 +100,15 @@ class Excel implements Exporter, Importer $file = $this->export($export, $filePath, $writerType); - return $this->filesystem->disk($disk)->put($filePath, fopen($file, 'r+')); + if ($export instanceof WithEvents) { + $this->registerListeners($export->registerEvents()); + } + + $result = $this->filesystem->disk($disk)->put($filePath, fopen($file, 'r+')); + + $this->raise(new AfterStore($this->writer, $export)); + + return $result; } /** diff --git a/vendor/dipper/excel/src/Jobs/AfterQueueExportJob.php b/vendor/dipper/excel/src/Jobs/AfterQueueExportJob.php new file mode 100644 index 00000000..79674cb5 --- /dev/null +++ b/vendor/dipper/excel/src/Jobs/AfterQueueExportJob.php @@ -0,0 +1,59 @@ +writer = $writer; + $this->exportable = $exportable; + $this->filePath = $filePath; + $this->disk = $disk; + } + + /** + * @param FilesystemManager $filesystem + */ + public function handle() + { + if ($this->exportable instanceof WithEvents) { + $this->registerListeners($this->exportable->registerEvents()); + } + + $this->raise(new AfterStore($this->writer, $this->exportable, $this->filePath, $this->disk)); + } +} diff --git a/vendor/dipper/excel/src/QueuedWriter.php b/vendor/dipper/excel/src/QueuedWriter.php index 11ca0bbc..c24dd9e4 100644 --- a/vendor/dipper/excel/src/QueuedWriter.php +++ b/vendor/dipper/excel/src/QueuedWriter.php @@ -3,15 +3,16 @@ namespace Dipper\Excel; use Traversable; -use Illuminate\Support\Collection; use Dipper\Excel\Jobs\CloseSheet; use Dipper\Excel\Jobs\QueueExport; +use Illuminate\Support\Collection; use Dipper\Excel\Concerns\FromQuery; use Dipper\Excel\Jobs\SerializedQuery; use Dipper\Excel\Jobs\AppendDataToSheet; use Dipper\Excel\Jobs\StoreQueuedExport; use Dipper\Excel\Concerns\FromCollection; use Dipper\Excel\Jobs\AppendQueryToSheet; +use Dipper\Excel\Jobs\AfterQueueExportJob; use Dipper\Excel\Concerns\WithMultipleSheets; use Dipper\Excel\Concerns\WithCustomChunkSize; use Dipper\Excel\Concerns\WithCustomQuerySize; @@ -52,6 +53,7 @@ class QueuedWriter $jobs = $this->buildExportJobs($export, $tempFile, $writerType); $jobs->push(new StoreQueuedExport($tempFile, $filePath, $disk)); + $jobs->push(new AfterQueueExportJob($this->writer, $export, $filePath, $disk)); return QueueExport::withChain($jobs->toArray())->dispatch($export, $tempFile, $writerType); } diff --git a/vendor/dipper/excel/src/RegistersCustomConcerns.php b/vendor/dipper/excel/src/RegistersCustomConcerns.php index 03811395..a02592a1 100644 --- a/vendor/dipper/excel/src/RegistersCustomConcerns.php +++ b/vendor/dipper/excel/src/RegistersCustomConcerns.php @@ -4,6 +4,8 @@ namespace Dipper\Excel; use Dipper\Excel\Events\Event; use Dipper\Excel\Events\AfterSheet; +use Dipper\Excel\Events\AfterStore; +use Dipper\Excel\Events\AfterExport; use Dipper\Excel\Events\BeforeSheet; use Dipper\Excel\Events\BeforeExport; use Dipper\Excel\Events\BeforeWriting; @@ -18,6 +20,8 @@ trait RegistersCustomConcerns BeforeExport::class => Writer::class, BeforeSheet::class => Sheet::class, AfterSheet::class => Sheet::class, + AfterExport::class => Writer::class, + AfterStore::class => Writer::class, ]; /** diff --git a/vendor/dipper/excel/src/Writer.php b/vendor/dipper/excel/src/Writer.php index 043e4432..4693d293 100644 --- a/vendor/dipper/excel/src/Writer.php +++ b/vendor/dipper/excel/src/Writer.php @@ -2,21 +2,22 @@ namespace Dipper\Excel; -use PhpOffice\PhpSpreadsheet\Cell\Cell; -use PhpOffice\PhpSpreadsheet\IOFactory; -use PhpOffice\PhpSpreadsheet\Writer\Csv; use Dipper\Excel\Concerns\WithTitle; -use PhpOffice\PhpSpreadsheet\Spreadsheet; +use Dipper\Excel\Events\AfterExport; use Dipper\Excel\Concerns\WithCharts; use Dipper\Excel\Concerns\WithEvents; use Dipper\Excel\Events\BeforeExport; use Dipper\Excel\Events\BeforeWriting; +use PhpOffice\PhpSpreadsheet\Cell\Cell; +use PhpOffice\PhpSpreadsheet\IOFactory; +use PhpOffice\PhpSpreadsheet\Writer\Csv; +use PhpOffice\PhpSpreadsheet\Spreadsheet; use Dipper\Excel\Concerns\MapsCsvSettings; use Dipper\Excel\Concerns\WithMultipleSheets; use Dipper\Excel\Concerns\WithCustomCsvSettings; use Dipper\Excel\Concerns\WithCustomValueBinder; -use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder; use Dipper\Excel\Concerns\WithPreCalculateFormulas; +use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder; class Writer { @@ -164,6 +165,8 @@ class Writer $this->spreadsheet->disconnectWorksheets(); unset($this->spreadsheet); + $this->raise(new AfterExport($this, $this->exportable)); + return $fileName; }