diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/BatchConfirmationGenerateService.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/BatchConfirmationGenerateService.cs index 52df4a9d..71c87b18 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/BatchConfirmationGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/BatchConfirmationGenerateService.cs @@ -144,17 +144,23 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule } /// - /// + /// /// private TradeDocGenerateResult GenerateSingleV1(trade_contract_group contractGroup, string docType = "DOCX") { + var logger = LogFactory.GetLogger("生成确认书详细日志"); + logger.Info($"[BatchGenerateSingleV1] 开始处理 - docType: {docType}"); + if (contractGroup == null) { + logger.Error("[BatchGenerateSingleV1] contractGroup 为 null"); throw new ArgumentNullException(nameof(contractGroup)); } - var contractBLL = new TradeContractBLL(this); var trade = contractGroup.trade; + logger.Info($"[BatchGenerateSingleV1] 交易信息 - TradeId: {trade?.id}, TradeNumber: {trade?.TradeNumber}, TradeType: {trade?.TradeType}"); + + var contractBLL = new TradeContractBLL(this); tradeBLL.SetFieldsByTradeType(trade); var needAddData = true; @@ -399,25 +405,54 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule dic["{{结算方式}}"] = "人民币现金结算"; dic["{{补充}}"] = "补充"; + var batchLogger = LogFactory.GetLogger("生成确认书详细日志"); try { + batchLogger.Info($"[BatchGenerateSingleV1] 开始生成文档 - TradeId: {trade?.id}"); + batchLogger.Info($"[BatchGenerateSingleV1] 模板类型: {trade.TradeType}, IsUsePremiumRate: {trade.IsUsePremiumRate}"); + var templateDir = OtcAppContext.MapPath("~/App_Docs/GTJA"); + batchLogger.Info($"[BatchGenerateSingleV1] templateDir: {templateDir}"); + var templatePath = OtcAppContext.MapPath("~/App_Docs/导出模板/交易确认书模板.docx"); if (trade.TradeType == "亚式期权") { templatePath = OtcAppContext.MapPath("~/App_Docs/导出模板/交易确认书(亚式期权)模板.docx"); + batchLogger.Info($"[BatchGenerateSingleV1] 使用亚式期权模板"); } if (trade.IsUsePremiumRate != null && trade.IsUsePremiumRate.Value) { templatePath = OtcAppContext.MapPath("~/App_Docs/导出模板/交易确认书(名义本金)模板.docx"); + batchLogger.Info($"[BatchGenerateSingleV1] 使用名义本金模板"); } + batchLogger.Info($"[BatchGenerateSingleV1] 最终模板路径: {templatePath}"); + batchLogger.Info($"[BatchGenerateSingleV1] 输出文件名: {outPutFileName}"); + + // 检查模板文件是否存在 + if (!File.Exists(templatePath)) + { + batchLogger.Error($"[BatchGenerateSingleV1] 模板文件不存在: {templatePath}"); + return new TradeDocGenerateResult(trade) { ErrorMessage = $"模板文件不存在: {templatePath}" }; + } + batchLogger.Info($"[BatchGenerateSingleV1] 模板文件存在,准备生成"); + LogFactory.GetLogger("交易确认书").Info("交易确认书:" + outPutFileName); var outPutFilePath = Path.Combine(templateDir, outPutFileName); + batchLogger.Info($"[BatchGenerateSingleV1] 输出文件路径: {outPutFilePath}"); + // 确保输出目录存在 + if (!Directory.Exists(templateDir)) + { + batchLogger.Info($"[BatchGenerateSingleV1] 创建输出目录: {templateDir}"); + Directory.CreateDirectory(templateDir); + } + + batchLogger.Info($"[BatchGenerateSingleV1] 调用 MsWordTempalteHelper.GenerateFromTemplate"); MsWordTempalteHelper.GenerateFromTemplate(templatePath, dic, outPutFilePath); + batchLogger.Info($"[BatchGenerateSingleV1] MsWordTempalteHelper.GenerateFromTemplate 完成"); if (docType == "PDF" && !outPutFilePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)) { @@ -478,6 +513,18 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule catch (Exception e) { + batchLogger.Error($"[BatchGenerateSingleV1] 发生异常 - TradeId: {trade?.id}, TradeNumber: {trade?.TradeNumber}", e); + batchLogger.Error($"[BatchGenerateSingleV1] 异常类型: {e.GetType().FullName}"); + batchLogger.Error($"[BatchGenerateSingleV1] 异常消息: {e.Message}"); + batchLogger.Error($"[BatchGenerateSingleV1] 异常堆栈: {e.StackTrace}"); + + if (e.InnerException != null) + { + batchLogger.Error($"[BatchGenerateSingleV1] 内部异常类型: {e.InnerException.GetType().FullName}"); + batchLogger.Error($"[BatchGenerateSingleV1] 内部异常消息: {e.InnerException.Message}"); + batchLogger.Error($"[BatchGenerateSingleV1] 内部异常堆栈: {e.InnerException.StackTrace}"); + } + LogFactory.GetLogger().Error("GenerateSingleConfirmBook出错", e); return new TradeDocGenerateResult(trade) { ErrorMessage = e.Message }; } diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs index f8b0001d..c056d953 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs @@ -36,13 +36,18 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule /// public List Generate(IEnumerable tradeIds, string docType) { + var logger = LogFactory.GetLogger("生成确认书详细日志"); + logger.Info($"[Generate] 开始生成确认书 - tradeIds: {string.Join(",", tradeIds)}, docType: {docType}"); + if (tradeIds == null) { + logger.Error("[Generate] tradeIds 为 null"); throw new ArgumentNullException(nameof(tradeIds)); } if (docType == null) { + logger.Error("[Generate] docType 为 null"); throw new ArgumentNullException(nameof(docType)); } @@ -72,9 +77,13 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule //---------------------------------- // 交易现金交割记录 //---------------------------------- + logger.Info("[Generate] 开始查询交易数据"); List allTradeList = allTradeList = DbContext.trade.Where(x => tradeIds.Contains(x.id)).ToList(); + logger.Info($"[Generate] 查询到交易数: {allTradeList.Count}"); + if (allTradeList.Count < 1) { + logger.Error("[Generate] 没有找到交易记录"); throw new ServiceException("没有已确认的记录信息!"); } @@ -258,17 +267,23 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule } /// - /// + /// /// private TradeDocGenerateResult GenerateSingleV1(trade_contract_group contractGroup, string docType = "DOCX") { + var logger = LogFactory.GetLogger("生成确认书详细日志"); + logger.Info($"[GenerateSingleV1] 开始处理 - docType: {docType}"); + if (contractGroup == null) { + logger.Error("[GenerateSingleV1] contractGroup 为 null"); throw new ArgumentNullException(nameof(contractGroup)); } - var contractBLL = new TradeContractBLL(this); var trade = contractGroup.trade; + logger.Info($"[GenerateSingleV1] 交易信息 - TradeId: {trade?.id}, TradeNumber: {trade?.TradeNumber}, TradeType: {trade?.TradeType}"); + + var contractBLL = new TradeContractBLL(this); tradeBLL.SetFieldsByTradeType(trade); var needAddData = true; @@ -518,25 +533,56 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule dic["{{结算方式}}"] = "人民币现金结算"; dic["{{补充}}"] = "补充"; + var confirmLogger = LogFactory.GetLogger("生成确认书详细日志"); try { + confirmLogger.Info($"[GenerateSingleConfirmBook] 开始生成 - TradeId: {trade?.id}, TradeNumber: {trade?.TradeNumber}, TradeType: {trade?.TradeType}"); + confirmLogger.Info($"[GenerateSingleConfirmBook] 模板路径配置 - TradeType: {trade.TradeType}, IsUsePremiumRate: {trade.IsUsePremiumRate}"); + var templateDir = OtcAppContext.MapPath("~/App_Docs/GTJA"); + confirmLogger.Info($"[GenerateSingleConfirmBook] templateDir: {templateDir}"); + var templatePath = OtcAppContext.MapPath("~/App_Docs/导出模板/交易确认书模板.docx"); + confirmLogger.Info($"[GenerateSingleConfirmBook] 默认模板路径: {templatePath}"); + if (trade.TradeType == "亚式期权") { templatePath = OtcAppContext.MapPath("~/App_Docs/导出模板/交易确认书(亚式期权)模板.docx"); + confirmLogger.Info($"[GenerateSingleConfirmBook] 使用亚式期权模板: {templatePath}"); } if (trade.IsUsePremiumRate != null && trade.IsUsePremiumRate.Value) { templatePath = OtcAppContext.MapPath("~/App_Docs/导出模板/交易确认书(名义本金)模板.docx"); + confirmLogger.Info($"[GenerateSingleConfirmBook] 使用名义本金模板: {templatePath}"); } + confirmLogger.Info($"[GenerateSingleConfirmBook] 最终模板路径: {templatePath}"); + confirmLogger.Info($"[GenerateSingleConfirmBook] 输出文件名: {outPutFileName}"); + + // 检查模板文件是否存在 + if (!File.Exists(templatePath)) + { + confirmLogger.Error($"[GenerateSingleConfirmBook] 模板文件不存在: {templatePath}"); + return new TradeDocGenerateResult(trade) { ErrorMessage = $"模板文件不存在: {templatePath}" }; + } + confirmLogger.Info($"[GenerateSingleConfirmBook] 模板文件存在,准备生成"); + LogFactory.GetLogger("交易确认书").Info("交易确认书:" + outPutFileName); string outPutFilePath = Path.Combine(templateDir, outPutFileName); + confirmLogger.Info($"[GenerateSingleConfirmBook] 输出文件路径: {outPutFilePath}"); + // 确保输出目录存在 + if (!Directory.Exists(templateDir)) + { + confirmLogger.Info($"[GenerateSingleConfirmBook] 创建输出目录: {templateDir}"); + Directory.CreateDirectory(templateDir); + } + + confirmLogger.Info($"[GenerateSingleConfirmBook] 调用 MsWordTempalteHelper.GenerateFromTemplate"); MsWordTempalteHelper.GenerateFromTemplate(templatePath, dic, outPutFilePath); + confirmLogger.Info($"[GenerateSingleConfirmBook] MsWordTempalteHelper.GenerateFromTemplate 完成"); if (docType == "PDF" && !outPutFilePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)) { @@ -598,6 +644,19 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule catch (Exception e) { + confirmLogger.Error($"[GenerateSingleConfirmBook] 发生异常 - TradeId: {trade?.id}, TradeNumber: {trade?.TradeNumber}", e); + confirmLogger.Error($"[GenerateSingleConfirmBook] 异常类型: {e.GetType().FullName}"); + confirmLogger.Error($"[GenerateSingleConfirmBook] 异常消息: {e.Message}"); + confirmLogger.Error($"[GenerateSingleConfirmBook] 异常堆栈: {e.StackTrace}"); + + // 检查是否是内部异常 + if (e.InnerException != null) + { + confirmLogger.Error($"[GenerateSingleConfirmBook] 内部异常类型: {e.InnerException.GetType().FullName}"); + confirmLogger.Error($"[GenerateSingleConfirmBook] 内部异常消息: {e.InnerException.Message}"); + confirmLogger.Error($"[GenerateSingleConfirmBook] 内部异常堆栈: {e.InnerException.StackTrace}"); + } + LogFactory.GetLogger().Error("GenerateSingleConfirmBook出错", e); return new TradeDocGenerateResult(trade) { ErrorMessage = e.Message }; }