You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

790 lines
34 KiB
C#

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
{
/// <summary>
/// 获取系统配置的收银小票打印机
/// </summary>
/// <returns></returns>
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<PrinterItem>(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;
}
/// <summary>
/// 构建销售分析参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderPrintSalesSummaryVariable(PrintSalesSummary printSalesSummary)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummary.Items)
{
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建营业分析参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderBusinessSummaryVariable(PrintBusinessSummary printBusinessSummary)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printBusinessSummary.Items)
{
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建优惠明细参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderDiscountVariable(PrintSalesSummaryDiscount printSalesSummaryDiscount)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummaryDiscount.Items)
{
var row = new Dictionary<string, string>();
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<string, string>();
emptyRow.Add("@名称@", "");
emptyRow.Add("@数量@", "");
emptyRow.Add("@金额@", "");
list.Add(emptyRow);
}
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
/// <summary>
/// 构建单品汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderDishVariable(PrintSalesSummaryDish printSalesSummaryDish)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummaryDish.Items)
{
var row = new Dictionary<string, string>();
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<string, string>();
emptyRow.Add("@名称@", "");
emptyRow.Add("@数量@", "");
emptyRow.Add("@金额@", "");
emptyRow.Add("@占比@", "");
list.Add(emptyRow);
}
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
/// <summary>
/// 构建单品汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderDishVariable1(PrintSalesSummaryDish printSalesSummaryDish)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummaryDish.Items)
{
var row = new Dictionary<string, string>();
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<string, string>();
emptyRow.Add("@名称@", "");
emptyRow.Add("@数量@", "");
emptyRow.Add("@金额@", "");
emptyRow.Add("@占比@", "");
list.Add(emptyRow);
}
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
/// <summary>
/// 构建单品汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> SalesDayDetailSummaryVariable(List<SalesDayDetailSummaryResponse> salesDays, SalesDayDetailSummaryRequest request)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in salesDays)
{
var row = new Dictionary<string, string>();
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<string, string>();
// emptyRow.Add("@名称@", "");
// emptyRow.Add("@数量@", "");
// emptyRow.Add("@金额@", "");
// emptyRow.Add("@占比@", "");
// list.Add(emptyRow);
//}
}
v.Value = JsonUtils.Serialize(list);
vars.Add(v);
return vars;
}
/// <summary>
/// 构建单品汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderCategoryVariable(PrintSalesSummaryCategory printSalesSummaryCategory)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummaryCategory.Items)
{
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建规格分析参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderSpecVariable(PrintSalesSummarySpec printSalesSummarySpec)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummarySpec.Items)
{
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建做法分析参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderMakeVariable(PrintSalesSummaryMake printSalesSummaryMake)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesSummaryMake.Items)
{
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建收银方式汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderPayVariable(PrintSalesPaySummary printSalesPaySummary)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printSalesPaySummary.Items)
{
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建第三方外卖汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderOtherWaiMaiSummaryVariable(PrintOtherWaiMaiSummary printOtherWaiMaiSummary, List<WaimaiOrderStatisticsResponse> statisticsResponse)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in statisticsResponse)
{
if ("合计".Equals(item.SignName))
{
break;
}
var row = new Dictionary<string, string>();
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;
}
/// <summary>
/// 构建收银方式汇总参数变量
/// </summary>
/// <param name="orderObject"></param>
/// <returns></returns>
public static List<Printer.VariableValue> BuilderTimeVariable(PrintTimeSummaryTicket printTimeSummaryTicket)
{
var vars = new List<Printer.VariableValue>();
var v = new Printer.VariableValue();
v.Key = "默认数据源";
v.DataType = DataType.Simple;
var data = new Dictionary<string, string>();
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<Dictionary<string, string>>();
foreach (var item in printTimeSummaryTicket.Items)
{
var row = new Dictionary<string, string>();
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<bool, string> PrinterTicket(string prefix, List<VariableValue> args, bool cutPager, bool openCashbox, int headerLine=0, int footerLine=0)
{
Tuple<bool, string> 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<DesignerSurface>(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<bool, string>(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<bool, string>(true, "打印成功");
}
else
{
result = new Tuple<bool, string>(false, "打印模版没有配置");
}
}
catch (Exception ex)
{
result = new Tuple<bool, string>(false, "打印异常了");
}
return result;
}
}
}