using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using POSV.Bean; using POSV.Printer; using POSV.ShoppingCart; using POSV.Utils; using POSV.Entity.ReportPrint; using POSV.Card; using POSV.OtherWaiMai; using POSV.StoreBusiness; namespace POSV.Helper { public class ReportHelper { /// /// 获取系统配置的收银小票打印机 /// /// public static PrinterObject GetTicketPrinterObject(bool cutPager, bool openCashbox) { var pobject = new PrinterObject(); var json = Global.Instance.GlobalConfigStringValue(ConfigConstant.PERIPHERAL_CASHIER_TICKET); if (string.IsNullOrEmpty(json)) { json = JsonUtils.Serialize(ConfigConstant.PeripheralGroupDefaultValue()); } var printer = JsonUtils.Deserialize(json); pobject.Id = printer.Id; pobject.Name = printer.Name; pobject.PortType = (PortType)Enum.Parse(typeof(PortType), printer.Port); pobject.DynamicLibrary = (DynamicLibrary)Enum.Parse(typeof(DynamicLibrary), printer.DynamicLibrary); pobject.PageWidth = printer.PageWidth; pobject.CutPager = cutPager; pobject.OpenCashbox = openCashbox; pobject.Data[PrinterObject.COM_PORT_NAME] = printer.Data[Constant.COM_PORT_NAME]; pobject.Data[PrinterObject.COM_PORT_BAUD] = printer.Data[Constant.COM_PORT_BAUD]; pobject.Data[PrinterObject.LPT_NAME] = printer.Data[Constant.LPT_NAME]; pobject.Data[PrinterObject.DRIVE_NAME] = printer.Data[Constant.DRIVE_NAME]; pobject.Data[PrinterObject.NET_IP_ADDRESS] = printer.Data[Constant.NET_IP_ADDRESS]; pobject.Data[PrinterObject.USB_PID] = printer.Data[Constant.USB_PID]; pobject.Data[PrinterObject.USB_VID] = printer.Data[Constant.USB_VID]; pobject.EscPosCommand.InitCommand = printer.InitCommand; pobject.EscPosCommand.NormalCommand = printer.NormalCommand; pobject.EscPosCommand.DoubleHeightCommand = printer.DoubleHeightCommand; pobject.EscPosCommand.DoubleWidthCommand = printer.DoubleWidthCommand; pobject.EscPosCommand.DoubleWidthHeightCommand = printer.DoubleWidthHeightCommand; pobject.EscPosCommand.CutPageCommand = printer.CutPageCommand; pobject.EscPosCommand.CashboxCommand = printer.CashboxCommand; pobject.EscPosCommand.AlignCenterCommand = printer.AlignCenterCommand; pobject.EscPosCommand.AlignLeftCommand = printer.AlignLeftCommand; pobject.EscPosCommand.AlignRightCommand = printer.AlignRightCommand; //回退行数 pobject.EscPosCommand.FeedBackCommand = printer.FeedBackCommand; //退纸行数 int feedBackRow = Global.Instance.GlobalConfigIntValue(ConfigConstant.CONFIG_CASHIER_FEEDBACK_ROW, 0); pobject.FeedBackRow = feedBackRow; return pobject; } /// /// 构建销售分析参数变量 /// /// /// public static List BuilderPrintSalesSummaryVariable(PrintSalesSummary printSalesSummary) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummary.StoreName); data.Add("@门店编码@", printSalesSummary.StoreNo); data.Add("@收银员编码@", printSalesSummary.WorkerNo); data.Add("@收银员名称@", printSalesSummary.WorkerName); data.Add("@打印时间@", printSalesSummary.PrintTime); data.Add("@开始时间@", printSalesSummary.StartTime); data.Add("@结束时间@", printSalesSummary.EndTime); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "销售汇总"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummary.Items) { var row = new Dictionary(); row.Add("@名称@", item.Name); row.Add("@数量@", string.Format("{0}", item.ItemCount)); row.Add("@套餐数量@", string.Format("{0}", item.ItemSuitQuantity)); row.Add("@应收金额@", string.Format("{0}", item.ItemAmount)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建营业分析参数变量 /// /// /// public static List BuilderBusinessSummaryVariable(PrintBusinessSummary printBusinessSummary) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printBusinessSummary.StoreName); data.Add("@门店编码@", printBusinessSummary.StoreNo); data.Add("@收银员编码@", printBusinessSummary.WorkerNo); data.Add("@收银员名称@", printBusinessSummary.WorkerName); data.Add("@打印时间@", printBusinessSummary.PrintTime); data.Add("@开始时间@", printBusinessSummary.StartTime); data.Add("@结束时间@", printBusinessSummary.EndTime); data.Add("@总人数@", printBusinessSummary.TotalPeople); data.Add("@总单数@", printBusinessSummary.TotalCount); data.Add("@总金额@", printBusinessSummary.TotalAmount); data.Add("@优惠总额@", printBusinessSummary.TotalDiscount); data.Add("@应收总额@", printBusinessSummary.TotalMoney); data.Add("@人均@", printBusinessSummary.Rj); data.Add("@单均@", printBusinessSummary.Dj); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printBusinessSummary.Items) { var row = new Dictionary(); row.Add("@名称@", item.Name); row.Add("@数量@", string.Format("{0}", item.Count)); row.Add("@金额@", string.Format("{0}", item.ReceivableAmount)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建优惠明细参数变量 /// /// /// public static List BuilderDiscountVariable(PrintSalesSummaryDiscount printSalesSummaryDiscount) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummaryDiscount.StoreName); data.Add("@门店编码@", printSalesSummaryDiscount.StoreNo); data.Add("@收银员编码@", printSalesSummaryDiscount.WorkerNo); data.Add("@收银员名称@", printSalesSummaryDiscount.WorkerName); data.Add("@打印时间@", printSalesSummaryDiscount.PrintTime); data.Add("@开始时间@", printSalesSummaryDiscount.StartTime); data.Add("@结束时间@", printSalesSummaryDiscount.EndTime); data.Add("@总金额@", printSalesSummaryDiscount.TotalMoney); data.Add("@总数量@", printSalesSummaryDiscount.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummaryDiscount.Items) { var row = new Dictionary(); if (item.SpecName != null && !"".Equals(item.SpecName)) { row.Add("@名称@", item.ProductName + "(" + item.SpecName + ")"); } else { row.Add("@名称@", item.ProductName); } if (item.ProductName.StartsWith("★★")) { row.Add("@数量@", ""); row.Add("@金额@", ""); } else { row.Add("@数量@", string.Format("{0}", item.Count)); row.Add("@金额@", string.Format("{0}", item.DiscountAmount)); } list.Add(row); if (item.ProductName == "小计" && item != printSalesSummaryDiscount.Items[printSalesSummaryDiscount.Items.Count - 1]) { var emptyRow = new Dictionary(); emptyRow.Add("@名称@", ""); emptyRow.Add("@数量@", ""); emptyRow.Add("@金额@", ""); list.Add(emptyRow); } } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建单品汇总参数变量 /// /// /// public static List BuilderDishVariable(PrintSalesSummaryDish printSalesSummaryDish) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummaryDish.StoreName); data.Add("@门店编码@", printSalesSummaryDish.StoreNo); data.Add("@收银员编码@", printSalesSummaryDish.WorkerNo); data.Add("@收银员名称@", printSalesSummaryDish.WorkerName); data.Add("@打印时间@", printSalesSummaryDish.PrintTime); data.Add("@开始时间@", printSalesSummaryDish.StartTime); data.Add("@结束时间@", printSalesSummaryDish.EndTime); data.Add("@总金额@", printSalesSummaryDish.TotalMoney); data.Add("@总数量@", printSalesSummaryDish.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummaryDish.Items) { var row = new Dictionary(); if (item.SpecName != null && !"".Equals(item.SpecName)) { row.Add("@名称@", item.ProductName + "(" + item.SpecName + ")"); } else { row.Add("@名称@", item.ProductName); } if (item.ProductName.StartsWith("★★")) { row.Add("@数量@", ""); row.Add("@金额@", ""); } else { row.Add("@数量@", string.Format("{0}", item.SumCount)); row.Add("@金额@", string.Format("{0}", item.SumRealMoney)); } row.Add("@占比@", string.Format("{0}", item.SumRealMoneyScale)); list.Add(row); if (item.ProductName == "小计" && item != printSalesSummaryDish.Items[printSalesSummaryDish.Items.Count - 1]) { var emptyRow = new Dictionary(); emptyRow.Add("@名称@", ""); emptyRow.Add("@数量@", ""); emptyRow.Add("@金额@", ""); emptyRow.Add("@占比@", ""); list.Add(emptyRow); } } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建单品汇总参数变量 /// /// /// public static List BuilderDishVariable1(PrintSalesSummaryDish printSalesSummaryDish) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummaryDish.StoreName); data.Add("@门店编码@", printSalesSummaryDish.StoreNo); data.Add("@收银员编码@", printSalesSummaryDish.WorkerNo); data.Add("@收银员名称@", printSalesSummaryDish.WorkerName); data.Add("@打印时间@", printSalesSummaryDish.PrintTime); data.Add("@开始时间@", printSalesSummaryDish.StartTime); data.Add("@结束时间@", printSalesSummaryDish.EndTime); data.Add("@总金额@", printSalesSummaryDish.TotalMoney); data.Add("@总数量@", printSalesSummaryDish.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummaryDish.Items) { var row = new Dictionary(); if (item.SpecName != null && !"".Equals(item.SpecName)) { row.Add("@名称@", item.ProductName + "(" + item.SpecName + ")"); } else { row.Add("@名称@", item.ProductName); } row.Add("@数量@", string.Format("{0}", item.SumCount)); row.Add("@金额@", string.Format("{0}", item.SumRealMoney)); row.Add("@占比@", string.Format("{0}", item.SumRealMoneyScale)); list.Add(row); if (item.ProductName == "小计" && item != printSalesSummaryDish.Items[printSalesSummaryDish.Items.Count - 1]) { var emptyRow = new Dictionary(); emptyRow.Add("@名称@", ""); emptyRow.Add("@数量@", ""); emptyRow.Add("@金额@", ""); emptyRow.Add("@占比@", ""); list.Add(emptyRow); } } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建单品汇总参数变量 /// /// /// public static List SalesDayDetailSummaryVariable(List salesDays, SalesDayDetailSummaryRequest request) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.Name); data.Add("@门店编码@", Global.Instance.Worker.StoreInfo.No); data.Add("@收银员编码@", Global.Instance.Worker.No); data.Add("@收银员名称@", Global.Instance.Worker.Name); data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); data.Add("@开始时间@", request.StartDate); data.Add("@结束时间@", request.EndDate); data.Add("@总金额@", salesDays.FirstOrDefault(f => f.ProductName == "合计")?.Amount.ToString()); data.Add("@总数量@", salesDays.FirstOrDefault(f => f.ProductName == "合计")?.Count.ToString()); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in salesDays) { var row = new Dictionary(); if (item.SpecName != null && !"".Equals(item.SpecName)) { row.Add("@名称@", item.ProductName + "(" + item.SpecName + ")"); } else { row.Add("@名称@", item.ProductName); } if (item.ProductName.StartsWith("★★")) { row.Add("@数量@", ""); row.Add("@金额@", ""); } else { row.Add("@数量@", string.Format("{0}", item.Count)); row.Add("@金额@", string.Format("{0}", item.Amount)); } row.Add("@占比@", string.Format("{0}", item.AmountRate)); list.Add(row); //if (item.ProductName == "小计" && item != printSalesSummaryDish.Items[printSalesSummaryDish.Items.Count - 1]) //{ // var emptyRow = new Dictionary(); // emptyRow.Add("@名称@", ""); // emptyRow.Add("@数量@", ""); // emptyRow.Add("@金额@", ""); // emptyRow.Add("@占比@", ""); // list.Add(emptyRow); //} } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建单品汇总参数变量 /// /// /// public static List BuilderCategoryVariable(PrintSalesSummaryCategory printSalesSummaryCategory) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummaryCategory.StoreName); data.Add("@门店编码@", printSalesSummaryCategory.StoreNo); data.Add("@收银员编码@", printSalesSummaryCategory.WorkerNo); data.Add("@收银员名称@", printSalesSummaryCategory.WorkerName); data.Add("@打印时间@", printSalesSummaryCategory.PrintTime); data.Add("@开始时间@", printSalesSummaryCategory.StartTime); data.Add("@结束时间@", printSalesSummaryCategory.EndTime); data.Add("@总金额@", printSalesSummaryCategory.TotalMoney); data.Add("@总数量@", printSalesSummaryCategory.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummaryCategory.Items) { var row = new Dictionary(); row.Add("@名称@", item.TypeName); row.Add("@数量@", string.Format("{0}", item.SumCount)); row.Add("@金额@", string.Format("{0}", item.SumRealMoney)); row.Add("@占比@", string.Format("{0}", item.SumRealMoneyScale)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建规格分析参数变量 /// /// /// public static List BuilderSpecVariable(PrintSalesSummarySpec printSalesSummarySpec) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummarySpec.StoreName); data.Add("@门店编码@", printSalesSummarySpec.StoreNo); data.Add("@收银员编码@", printSalesSummarySpec.WorkerNo); data.Add("@收银员名称@", printSalesSummarySpec.WorkerName); data.Add("@打印时间@", printSalesSummarySpec.PrintTime); data.Add("@开始时间@", printSalesSummarySpec.StartTime); data.Add("@结束时间@", printSalesSummarySpec.EndTime); data.Add("@总金额@", printSalesSummarySpec.TotalMoney); data.Add("@总数量@", printSalesSummarySpec.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummarySpec.Items) { var row = new Dictionary(); row.Add("@名称@", item.SpecName); row.Add("@数量@", string.Format("{0}", item.SumCount)); row.Add("@金额@", string.Format("{0}", item.SumRealMoney)); row.Add("@占比@", string.Format("{0}", item.SumRealMoneyScale)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建做法分析参数变量 /// /// /// public static List BuilderMakeVariable(PrintSalesSummaryMake printSalesSummaryMake) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesSummaryMake.StoreName); data.Add("@门店编码@", printSalesSummaryMake.StoreNo); data.Add("@收银员编码@", printSalesSummaryMake.WorkerNo); data.Add("@收银员名称@", printSalesSummaryMake.WorkerName); data.Add("@打印时间@", printSalesSummaryMake.PrintTime); data.Add("@开始时间@", printSalesSummaryMake.StartTime); data.Add("@结束时间@", printSalesSummaryMake.EndTime); data.Add("@总金额@", printSalesSummaryMake.TotalMoney); data.Add("@总数量@", printSalesSummaryMake.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesSummaryMake.Items) { var row = new Dictionary(); row.Add("@名称@", item.MakeName); row.Add("@数量@", string.Format("{0}", item.SumCount)); row.Add("@金额@", string.Format("{0}", item.SumRealMoney)); row.Add("@占比@", string.Format("{0}", item.SumRealMoneyScale)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建收银方式汇总参数变量 /// /// /// public static List BuilderPayVariable(PrintSalesPaySummary printSalesPaySummary) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printSalesPaySummary.StoreName); data.Add("@门店编码@", printSalesPaySummary.StoreNo); data.Add("@收银员编码@", printSalesPaySummary.WorkerNo); data.Add("@收银员名称@", printSalesPaySummary.WorkerName); data.Add("@打印时间@", printSalesPaySummary.PrintTime); data.Add("@开始时间@", printSalesPaySummary.StartTime); data.Add("@结束时间@", printSalesPaySummary.EndTime); data.Add("@总金额@", printSalesPaySummary.TotalMoney); data.Add("@总数量@", printSalesPaySummary.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printSalesPaySummary.Items) { var row = new Dictionary(); row.Add("@名称@", item.PayTypeName); row.Add("@数量@", string.Format("{0}", item.PayCount)); row.Add("@金额@", string.Format("{0}", item.Amount)); row.Add("@占比@", string.Format("{0}", item.SumRealMoneyScale)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建第三方外卖汇总参数变量 /// /// /// public static List BuilderOtherWaiMaiSummaryVariable(PrintOtherWaiMaiSummary printOtherWaiMaiSummary, List statisticsResponse) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printOtherWaiMaiSummary.StoreName); data.Add("@门店编码@", printOtherWaiMaiSummary.StoreNo); data.Add("@收银员编码@", printOtherWaiMaiSummary.WorkerNo); data.Add("@收银员名称@", printOtherWaiMaiSummary.WorkerName); data.Add("@打印时间@", printOtherWaiMaiSummary.PrintTime); data.Add("@开始时间@", printOtherWaiMaiSummary.StartTime); data.Add("@结束时间@", printOtherWaiMaiSummary.EndTime); data.Add("@总单数@", printOtherWaiMaiSummary.Total); data.Add("@完成数@", printOtherWaiMaiSummary.Success); data.Add("@退单数@", printOtherWaiMaiSummary.Failed); data.Add("@其他数@", printOtherWaiMaiSummary.Other); data.Add("@订单总额@", printOtherWaiMaiSummary.OriginalAmount); data.Add("@配送费用@", printOtherWaiMaiSummary.ShippingFee); data.Add("@原价总额@", printOtherWaiMaiSummary.TotalAmount); data.Add("@门店实得@", printOtherWaiMaiSummary.ReceiveAmount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in statisticsResponse) { if ("合计".Equals(item.SignName)) { break; } var row = new Dictionary(); row.Add("@名称@", item.SignName); row.Add("@总单数@", string.Format("{0}", item.Total)); row.Add("@完成数@", string.Format("{0}", item.Success)); row.Add("@退单数@", string.Format("{0}", item.Failed)); row.Add("@其他数@", string.Format("{0}", item.Other)); row.Add("@订单总额@", string.Format("{0}", item.OriginalAmount)); row.Add("@配送费用@", string.Format("{0}", item.ShippingFee)); row.Add("@原价总额@", string.Format("{0}", item.TotalAmount)); row.Add("@门店实得@", string.Format("{0}", item.ReceiveAmount)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建收银方式汇总参数变量 /// /// /// public static List BuilderTimeVariable(PrintTimeSummaryTicket printTimeSummaryTicket) { var vars = new List(); var v = new Printer.VariableValue(); v.Key = "默认数据源"; v.DataType = DataType.Simple; var data = new Dictionary(); data.Add("@门店名称@", printTimeSummaryTicket.StoreName); data.Add("@门店编码@", printTimeSummaryTicket.StoreNo); data.Add("@收银员编码@", printTimeSummaryTicket.WorkerNo); data.Add("@收银员名称@", printTimeSummaryTicket.WorkerName); data.Add("@打印时间@", printTimeSummaryTicket.PrintTime); data.Add("@开始时间@", printTimeSummaryTicket.StartTime); data.Add("@结束时间@", printTimeSummaryTicket.EndTime); data.Add("@总金额@", printTimeSummaryTicket.TotalMoney); data.Add("@总数量@", printTimeSummaryTicket.TotalCount); v.Value = JsonUtils.Serialize(data); vars.Add(v); v = new Printer.VariableValue(); v.Key = "汇总列表"; v.DataType = DataType.List; var list = new List>(); foreach (var item in printTimeSummaryTicket.Items) { var row = new Dictionary(); row.Add("@名称@", item.DateHour); row.Add("@数量@", string.Format("{0}", item.SumCount)); row.Add("@金额@", string.Format("{0}", item.SumAmount)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } public static Tuple PrinterTicket(string prefix, List args, bool cutPager, bool openCashbox, int headerLine=0, int footerLine=0) { Tuple result = null; try { var pobject = GetTicketPrinterObject(cutPager, false); string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"template\reportPrinter\{0}_{1}_{2}.designer", prefix, Global.Instance.Authc.TenantId, pobject.PageWidth)); string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); if (!File.Exists(filePath)) { fileName = string.Format(@"template\reportPrinter\{0}_通用模版_{1}.designer", prefix, pobject.PageWidth); } string template = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); if (File.Exists(template)) { string json = System.IO.File.ReadAllText(template); DesignerSurface surface = JSON.Deserialize(json); PrinterTemplate printer = surface.Parse(args); if (pobject.PortType == PortType.驱动 && pobject.Name.Contains("针式驱动打印")) { WinPrint.Print(pobject.Data.FirstOrDefault(f => f.Key == "drive").Value, surface, args); result = new Tuple(true, ""); } else { //var pcontent = printer.Parse(pobject, args); var pcontent = printer.Parse(pobject, args, headerLine, footerLine); //启动新任务 Task.Factory.StartNew(() => { PrinterUtils.PrintContent(pobject, pcontent); }); } result = new Tuple(true, "打印成功"); } else { result = new Tuple(false, "打印模版没有配置"); } } catch (Exception ex) { result = new Tuple(false, "打印异常了"); } return result; } } }