using POSV.Bean; using POSV.Card; using POSV.Printer; using POSV.Stock; using POSV.Utils; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace POSV.Helper { public class StockHelper { /// /// 获取系统配置的收银小票打印机 /// /// 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 BuilderAskGoodsVariable(AskgoodsTicketResponse response,List detailList) { 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.PrintName); data.Add("@门店编码@", Global.Instance.BusinessPlanLog.StoreNo); data.Add("@单号@", response.No != null ? response.No : ""); data.Add("@单据状态@", response.StatusName != null ? response.StatusName : ""); data.Add("@制单人@", response.SetMan != null ? response.SetMan : ""); data.Add("@审核人@", response.CheckMan!=null? response.CheckMan:""); data.Add("@备注@", response.Description!=null? response.Description:""); data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 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 detailList) { var row = new Dictionary(); row.Add("@原料名称@", item.ProductName); row.Add("@单位@", item.DispatchUnitName); row.Add("@要货数量@", string.Format("{0}", item.Amount)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建盘点单数据 /// /// /// public static List BuilderCheckTicketVariable(string ticketNo,List listDetail) { 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.PrintName); data.Add("@门店编码@", Global.Instance.BusinessPlanLog.StoreNo); data.Add("@收银员编码@", Global.Instance.BusinessPlanLog.WorkerNo); data.Add("@收银员名称@", Global.Instance.BusinessPlanLog.WorkerName); data.Add("@盘点单号@", ticketNo); data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 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 listDetail) { var row = new Dictionary(); row.Add("@仓库@", item.StorageName); row.Add("@名称@", item.ProductName); row.Add("@单位@", item.StockUnitName); row.Add("@数量@", string.Format("{0}", item.CheckAmount)); list.Add(row); } v.Value = JsonUtils.Serialize(list); vars.Add(v); return vars; } /// /// 构建盘点数据 /// /// /// public static List BuilderCheckVariable(List listDetail) { 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.PrintName); data.Add("@门店编码@", Global.Instance.BusinessPlanLog.StoreNo); data.Add("@收银员编码@", Global.Instance.BusinessPlanLog.WorkerNo); data.Add("@收银员名称@", Global.Instance.BusinessPlanLog.WorkerName); data.Add("@打印时间@", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); 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 listDetail) { var row = new Dictionary(); row.Add("@仓库@", item.StorageName); row.Add("@名称@", item.ProductName); row.Add("@单位@", item.StockUnitName); row.Add("@数量@", string.Format("{0}",item.CheckAmount)); 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) { Tuple result = null; try { var pobject = GetTicketPrinterObject(cutPager, false); string template = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format(@"template\stock\{0}_{1}.designer", prefix, pobject.PageWidth)); if (File.Exists(template)) { string json = System.IO.File.ReadAllText(template); DesignerSurface surface = JSON.Deserialize(json); PrinterTemplate printer = surface.Parse(args); var pcontent = printer.Parse(pobject, args); //启动新任务 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; } } }