移除旧版导出

This commit is contained in:
liu
2026-08-13 00:13:13 +08:00
parent 6c794d0732
commit 91ea91784d
3 changed files with 0 additions and 154 deletions
@@ -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),
);
}
}
@@ -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;
}
}
-111
View File
@@ -1,111 +0,0 @@
<?php
namespace App\Services;
use App\Exceptions\RepositoryException;
use App\Exports\PurchaseOrderExport;
use App\Exports\SettlementExport;
use App\Exports\StatementExport;
use App\Models\PurchaseOrderModel;
use App\Models\SettlementModel;
use App\Models\StatementModel;
use Barryvdh\DomPDF\Facade\Pdf;
use Maatwebsite\Excel\Facades\Excel;
use Symfony\Component\HttpFoundation\Response;
/**
* 导出统一入口:按业务类型 + format 分发到 app/Exports 导出类 / PDF 模板
*
* - Excel 分支:Excel::download(new XxxExport(...))
* - PDF 分支:Pdf::loadView('exports.xxx', ...)->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);
}
}