Files
XplorePlane/XP.ReportEngine/Services/ReportGeneratorFactory.cs
T
QI Mingxuan d72b583319 [XP.ReportEngine] 新增 TXT/CSV/Excel 三种报告输出格式支持;Excel (.xlsx) 报告生成器,基于 ClosedXML,支持结构化生成和模板填充两种模式; 新增 XplorePlane_ReportTemplate.xlsx:Excel 报告模板文件。
[XP.ReportEngine] 模型与配置扩展:ReportOutputFormat 枚举:新增 Excel=1, Csv=2, Txt=3(显式序号,向后兼容);新增多格式相关配置加载。
2026-07-01 11:31:41 +08:00

77 lines
3.8 KiB
C#

using System;
using XP.Common.Logging.Interfaces;
using XP.ReportEngine.Interfaces;
using XP.ReportEngine.Models;
namespace XP.ReportEngine.Services
{
/// <summary>
/// 报告生成器工厂实现 | Report generator factory implementation
/// 根据输出格式创建对应的报告生成器实例,支持 PDF/TXT/CSV/Excel 四种格式
/// Creates report generator instances based on output format; supports PDF/TXT/CSV/Excel formats
/// </summary>
public class ReportGeneratorFactory : IReportGeneratorFactory
{
private readonly ILoggerService _logger;
private readonly IReportGenerator _pdfReportGenerator;
private readonly TxtReportGenerator _txtReportGenerator;
private readonly CsvReportGenerator _csvReportGenerator;
private readonly ExcelReportGenerator _excelReportGenerator;
/// <summary>
/// 构造函数 | Constructor
/// </summary>
/// <param name="logger">日志服务 | Logger service</param>
/// <param name="pdfReportGenerator">PDF 报告生成器 | PDF report generator</param>
/// <param name="txtReportGenerator">TXT 报告生成器 | TXT report generator</param>
/// <param name="csvReportGenerator">CSV 报告生成器 | CSV report generator</param>
/// <param name="excelReportGenerator">Excel 报告生成器 | Excel report generator</param>
public ReportGeneratorFactory(
ILoggerService logger,
IReportGenerator pdfReportGenerator,
TxtReportGenerator txtReportGenerator,
CsvReportGenerator csvReportGenerator,
ExcelReportGenerator excelReportGenerator)
{
_logger = logger?.ForModule<ReportGeneratorFactory>() ?? throw new ArgumentNullException(nameof(logger));
_pdfReportGenerator = pdfReportGenerator ?? throw new ArgumentNullException(nameof(pdfReportGenerator));
_txtReportGenerator = txtReportGenerator ?? throw new ArgumentNullException(nameof(txtReportGenerator));
_csvReportGenerator = csvReportGenerator ?? throw new ArgumentNullException(nameof(csvReportGenerator));
_excelReportGenerator = excelReportGenerator ?? throw new ArgumentNullException(nameof(excelReportGenerator));
}
/// <summary>
/// 根据输出格式创建生成器 | Create generator by output format
/// 支持 PDF、TXT、CSV、Excel 四种格式,未注册或未知格式将抛出异常
/// Supports PDF, TXT, CSV and Excel formats; unregistered or unknown formats throw an exception
/// </summary>
/// <param name="format">输出格式 | Output format</param>
/// <returns>对应格式的报告生成器 | Report generator for the specified format</returns>
/// <exception cref="NotSupportedException">当请求不支持的格式时抛出 | Thrown when unsupported format is requested</exception>
public IReportGenerator Create(ReportOutputFormat format)
{
_logger.Info("创建报告生成器,格式: {Format} | Creating report generator, format: {Format}", format);
switch (format)
{
case ReportOutputFormat.Pdf:
return _pdfReportGenerator;
case ReportOutputFormat.Txt:
return _txtReportGenerator;
case ReportOutputFormat.Csv:
return _csvReportGenerator;
case ReportOutputFormat.Excel:
return _excelReportGenerator;
default:
var message = $"不支持的报告输出格式: {format} | Unsupported report output format: {format}";
_logger.Error(null, message);
throw new NotSupportedException(message);
}
}
}
}