diff --git a/app/Http/Controllers/Mini/StatementController.php b/app/Http/Controllers/Mini/StatementController.php index d459e5d..3d2c0d7 100644 --- a/app/Http/Controllers/Mini/StatementController.php +++ b/app/Http/Controllers/Mini/StatementController.php @@ -83,23 +83,4 @@ class StatementController extends BaseMiniController return $this->success($statement->toArray()); } - - /** 导出对账单:?format=xlsx|pdf */ - #[GetRoute('/statement/{id}/export', authorize: true, where: ['id' => '[0-9]+'])] - public function export(int $id, Request $request): Response - { - $user = $this->currentUser($request); - $store = $this->ensureStoreBound($user); - - $statement = StatementModel::where('store_id', $store->id)->find($id); - if ($statement === null) { - throw new RepositoryException('对账单不存在'); - } - - return app(ExportService::class)->download( - 'statement', - $statement, - (string) $request->query('format', ExportService::FORMAT_XLSX), - ); - } } diff --git a/app/Http/Controllers/Recon/SettlementController.php b/app/Http/Controllers/Recon/SettlementController.php index e009800..9eeda77 100644 --- a/app/Http/Controllers/Recon/SettlementController.php +++ b/app/Http/Controllers/Recon/SettlementController.php @@ -4,13 +4,11 @@ namespace App\Http\Controllers\Recon; use App\Exceptions\RepositoryException; use App\Models\SettlementModel; -use App\Services\ExportService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Modules\AnnoRoute\Attribute\GetRoute; use Modules\AnnoRoute\Attribute\RequestAttribute; use Modules\Common\Http\Controllers\BaseController; -use Symfony\Component\HttpFoundation\Response; /** * 结算表管理(D9 生成于对账结算,D10 导出下载存档) @@ -52,26 +50,4 @@ class SettlementController extends BaseController } return $this->success($settlement->toArray()); } - - /** - * D10 导出下载:?format=xlsx|pdf,成功后回写 file_path 存档标记 - */ - #[GetRoute(route: '/{id}/download', authorize: 'download', where: ['id' => '[0-9]+'])] - public function download(int $id, Request $request): Response - { - $settlement = SettlementModel::find($id); - if (empty($settlement)) { - throw new RepositoryException('结算表不存在'); - } - $format = (string) $request->query('format', ExportService::FORMAT_XLSX); - - $response = app(ExportService::class)->download('settlement', $settlement, $format); - - // 同步流式下载不落盘,file_path 仅作存档标记(后续切队列导出时替换为真实文件路径) - $extension = $format === ExportService::FORMAT_PDF ? 'pdf' : 'xlsx'; - $settlement->file_path = 'exports/settlement/' . $settlement->settlement_no . '.' . $extension; - $settlement->save(); - - return $response; - } } diff --git a/app/Services/ExportService.php b/app/Services/ExportService.php deleted file mode 100644 index fd064d0..0000000 --- a/app/Services/ExportService.php +++ /dev/null @@ -1,111 +0,0 @@ -setPaper('a4')->download(...),模板统一 font-family: SimHei - * - 文件名规范:{单号}_{业务名}.{ext},中文文件名由响应自动做 RFC 5987 编码 - */ -class ExportService -{ - /** 导出格式:Excel */ - public const FORMAT_XLSX = 'xlsx'; - /** 导出格式:PDF */ - public const FORMAT_PDF = 'pdf'; - - /** - * 导出下载 - * - * @param string $business 业务类型:purchase 采购单 / statement 门店对账单 / settlement 结算表 - * @param mixed $subject 业务主体(如 PurchaseOrderModel / StatementModel / SettlementModel 实例) - * @param string $format 导出格式 xlsx|pdf,默认 xlsx,非法值报错 - * @param string|null $type 业务子类型(purchase 专用:all 全品类 / category 仅蔬果分类) - * @return Response 文件流响应(blob) - */ - public function download( - string $business, - mixed $subject, - string $format = self::FORMAT_XLSX, - ?string $type = null, - ): Response { - if (! in_array($format, [self::FORMAT_XLSX, self::FORMAT_PDF], true)) { - throw new RepositoryException('导出格式参数不正确(仅支持 xlsx / pdf)'); - } - - return match ($business) { - 'purchase' => $this->exportPurchase($subject, $format, $type), - 'statement' => $this->exportStatement($subject, $format), - 'settlement' => $this->exportSettlement($subject, $format), - default => throw new RepositoryException('不支持的导出业务类型:' . $business), - }; - } - - /** - * C2/C3 采购单导出 - */ - private function exportPurchase(PurchaseOrderModel $purchase, string $format, ?string $type): Response - { - $type = in_array($type, ['all', 'category'], true) ? $type : 'all'; - $extension = $format === self::FORMAT_PDF ? 'pdf' : 'xlsx'; - $filename = $purchase->purchase_no . '_采购单.' . $extension; - - $export = new PurchaseOrderExport($purchase, $type); - if ($format === self::FORMAT_PDF) { - return Pdf::loadView('exports.purchase', $export->viewData()) - ->setPaper('a4') - ->download($filename); - } - - return Excel::download($export, $filename); - } - - /** - * 门店对账单导出 - */ - private function exportStatement(StatementModel $statement, string $format): Response - { - $extension = $format === self::FORMAT_PDF ? 'pdf' : 'xlsx'; - $filename = $statement->statement_no . '_对账单.' . $extension; - - $export = new StatementExport($statement); - if ($format === self::FORMAT_PDF) { - return Pdf::loadView('exports.statement', $export->viewData()) - ->setPaper('a4') - ->download($filename); - } - - return Excel::download($export, $filename); - } - - /** - * D10 结算表导出 - */ - private function exportSettlement(SettlementModel $settlement, string $format): Response - { - $extension = $format === self::FORMAT_PDF ? 'pdf' : 'xlsx'; - $filename = $settlement->settlement_no . '_结算表.' . $extension; - - $export = new SettlementExport($settlement); - if ($format === self::FORMAT_PDF) { - return Pdf::loadView('exports.settlement', $export->viewData()) - ->setPaper('a4') - ->download($filename); - } - - return Excel::download($export, $filename); - } -}