Files
fdesk/app/common/utils/pdf/service/document/ReimbursementDocumentService.php
T

82 lines
2.9 KiB
PHP
Raw Normal View History

2025-09-05 09:26:29 +08:00
<?php
namespace app\common\utils\pdf\service\document;
use app\common\utils\pdf\service\PdfGeneratorService;
use Exception;
class ReimbursementDocumentService
{
private $pdfGenerator;
public function __construct()
{
$this->pdfGenerator = new PdfGeneratorService();
}
/**
* 根据报销单 ID 生成 PDF 数据
* (这里模拟从数据库获取数据)
*
* @param int $reimbursementId
* @return string PDF 二进制数据
* @throws Exception
*/
public function generatePdfById(int $reimbursementId): string
{
// --- 模拟从数据库获取数据 ---
// 实际应用中,这里应该是查询数据库
$reimbursementData = $this->getMockReimbursementData($reimbursementId);
if (!$reimbursementData) {
throw new Exception("Reimbursement record not found for ID: {$reimbursementId}");
}
// --- 数据获取结束 ---
// 调用核心 PDF 服务生成 PDF
// 'reimbursement_template' 对应 app/view/pdf/reimbursement_template.php
return $this->pdfGenerator->generate('reimbursement', $reimbursementData);
}
/**
* 模拟获取报销单数据
* @param int $id
* @return array|null
*/
private function getMockReimbursementData(int $id)
{
if ($id <= 0) return null;
return [
'reimbursement_id' => 'REIM-' . str_pad($id, 5, '0', STR_PAD_LEFT),
'applicant_name' => '张三',
'department' => '技术部',
'application_date' => '2023-10-26',
'total_amount' => 1250.75,
'reason' => "参加北京技术研讨会的差旅费用。\n包括交通、住宿和餐饮。",
'items' => [
['date' => '2023-10-20', 'category' => '交通费', 'description' => '高铁二等座', 'amount' => 520.00, 'remark' => ''],
['date' => '2023-10-21', 'category' => '住宿费', 'description' => 'XX酒店 2 晚', 'amount' => 680.00, 'remark' => '含早餐'],
['date' => '2023-10-21', 'category' => '餐饮费', 'description' => '午餐晚餐', 'amount' => 50.75, 'remark' => '发票已附'],
]
];
}
/**
* 保存报销单 PDF 到服务器
* @param int $reimbursementId
* @param string $savePath 保存路径 (目录)
* @throws Exception
*/
public function savePdfToFile(int $reimbursementId, string $savePath)
{
$reimbursementData = $this->getMockReimbursementData($reimbursementId);
if (!$reimbursementData) {
throw new Exception("Reimbursement record not found for ID: {$reimbursementId}");
}
$filename = 'reimbursement_' . $reimbursementData['reimbursement_id'] . '_' . date('Ymd_His') . '.pdf';
$fullPath = rtrim($savePath, '/') . '/' . $filename;
$this->pdfGenerator->saveToFile('reimbursement_template', $reimbursementData, $fullPath);
}
}