d72b583319
[XP.ReportEngine] 模型与配置扩展:ReportOutputFormat 枚举:新增 Excel=1, Csv=2, Txt=3(显式序号,向后兼容);新增多格式相关配置加载。
77 lines
3.8 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|