using iTextSharp.text; using iTextSharp.text.pdf; using System.Text; using YLErp.BLL; using YLErp.Configuration; using YLErp.Modules.TradeDalModule; using YLErp.Office.iTextModule; namespace YLErp.Modules.TradeModule.DealModule { /// /// 变更确认书生成 /// public class ChangeConfirmBookGenerator : TradeServiceBase { public ChangeConfirmBookGenerator(YLBaseService baseService) : base(baseService) { } public ChangeConfirmBookGenerator(OptUserInfo userInfo) : base(userInfo) { } /// /// 生成变更确认书并返回文件生成路径 /// public string GenerateChangeConfirmBook(int tradeId, out string errorMsg) { errorMsg = null; if (!PS.Config.TradeElement.IsGenerateAmendDoc) { return null; } //var td = DbContext.trade.FirstOrDefault(n => n.id == tradeId); var td = new TradeDalService(this).GetTradeOrEodTrade(new[] { tradeId }, SystemValueDate).FirstOrDefault(); if (td.TradeStatus != ConsTrade.确认成交) { throw new ServiceException("交易状态不是确认成交"); } var changes = new TradeAuditLogService(this).GetLastConfirmChangeMsg(tradeId); if (changes == null || !changes.Any()) { errorMsg = "没有交易确认变更的信息"; return null; } //-------------------------------------------------- // 生成交易变更文档 //-------------------------------------------------- //设置文件夹名称 var saveFileDir = OtcAppContext.MapPath("~/App_Docs/ChangeConfirmBook"); if (!Directory.Exists(saveFileDir)) { Directory.CreateDirectory(saveFileDir); } var fileName = $"{td.TradeNumber}交易变更确认书{DateTime.Now:yyyyMMddHHmmss}.pdf"; var filePath = Path.Combine(saveFileDir, fileName); var document = new Document(HeaderAndFooterEvent.rect); var writer = PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create)); try { document.Open(); writer.PageEvent = new HeaderAndFooterEvent(); HeaderAndFooterEvent.PAGE_NUMBER = true; //实现页眉跟页脚 HeaderAndFooterEvent.tpl = writer.DirectContent.CreateTemplate(1000, 1000); //定义模板 HeaderAndFooterEvent.HeaderLeft = ""; HeaderAndFooterEvent.HeaderRight = ""; //每次在添加文本内容之前可以先设置字体,有效期持续到重新设置之前 HeaderAndFooterEvent.SetFont(BaseColor.DARK_GRAY, "宋体", 16, Font.BOLD); document.Add(HeaderAndFooterEvent.AddParagraph("交易信息变更确认书", 1, 1.5f)); //每次在添加文本内容之前可以先设置字体,有效期持续到重新设置之前 HeaderAndFooterEvent.SetFont(BaseColor.DARK_GRAY, "宋体", 12); //增加空行 document.Add(HeaderAndFooterEvent.AddParagraph(" ", 0, 1.5f)); #region 添加变更信息 var contentSB = new StringBuilder(); contentSB.Append($"经双方协商确定,编号为{td.TradeNumber}的交易信息,"); foreach (var change in changes) { contentSB.Append(change.DisplayName).Append("由") .Append(change.OldValue).Append("变更为").Append(change.NewValue).AppendLine(";"); } //添加信息 HeaderAndFooterEvent.SetFont(BaseColor.DARK_GRAY, "宋体", 12); document.Add(HeaderAndFooterEvent.AddParagraph(contentSB.ToString(), 0, 1.5f)); #endregion HeaderAndFooterEvent.SetFont(BaseColor.DARK_GRAY, "宋体", 12); //增加空行 document.Add(HeaderAndFooterEvent.AddParagraph(" ", 0, 1.5f)); var clientInfo = $"{PS.Config.CompanyName ?? ""} {td.ClientName} {valuedateBLL.ValueDate:yyyy年M月d日}"; //添加客户信息 HeaderAndFooterEvent.SetFont(BaseColor.DARK_GRAY, "宋体", 12, Font.BOLD); document.Add(HeaderAndFooterEvent.AddParagraph(clientInfo, 2, 1.5f)); var webPath = "/App_Docs/ChangeConfirmBook/" + fileName; //保存文件路径 SaveTradeMeta(td.id, "变更确认书", webPath); return webPath; } catch (Exception ex) { LogFactory.GetLogger("生成变更确认书出错").Error(ex, "交易编号:" + td.TradeNumber); throw new ServiceException("生成变更确认书出错", ex); } finally { document?.Close(); } } } }