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.
1458 lines
62 KiB
C#
1458 lines
62 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 System.Threading;
|
|
using NLog;
|
|
using System.Text.RegularExpressions;
|
|
using POSV.QiMai;
|
|
|
|
namespace POSV.Helper
|
|
{
|
|
public class WaiMaiHelper
|
|
{
|
|
|
|
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
/// <summary>
|
|
/// 获取系统配置的收银小票打印机
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static PrinterObject GetTicketPrinterObject(string name, bool cutPager, bool openCashbox)
|
|
{
|
|
var pobject = new PrinterObject();
|
|
|
|
string json = string.Empty;
|
|
|
|
if (name == "外卖打印机")
|
|
{
|
|
//单独使用外卖小票打印机
|
|
json = Global.Instance.GlobalConfigStringValue(ConfigConstant.PERIPHERAL_WM_TICKET_PRINTER);
|
|
}
|
|
else
|
|
{
|
|
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;
|
|
|
|
return pobject;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 构建美团外卖订单打印
|
|
/// </summary>
|
|
/// <param name="orderObject"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> BuilderMeiTuanVariable(string meituanShop, MeiTuanOrderResponse response, bool isRprint)
|
|
{
|
|
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("@营业模式@", OrderType.美团外卖.ToString());
|
|
data.Add("@退单标识@", "false");
|
|
|
|
data.Add("@外卖门店@", meituanShop);
|
|
data.Add("@外卖单号@", response.OrderIdView);
|
|
if (response.PayType == 1)
|
|
{
|
|
data.Add("@支付方式@", "货到付款");
|
|
}
|
|
else if (response.PayType == 2)
|
|
{
|
|
data.Add("@支付方式@", "在线支付");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@支付方式@", "其他支付方式");
|
|
}
|
|
if (response.PickType == 0)
|
|
{
|
|
data.Add("@是否到店自取@", "false");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否到店自取@", "true");
|
|
}
|
|
if (response.DeliveryTime.Equals("0"))
|
|
{
|
|
data.Add("@是否预定@", "false");
|
|
data.Add("@送达时间@", "立即送达");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否预定@", "true");
|
|
data.Add("@送达时间@", response.DeliveryTime);
|
|
}
|
|
|
|
data.Add("@就餐人数@", response.DinnersNumber);
|
|
data.Add("@订单备注@", response.Caution);
|
|
if (isRprint)
|
|
{
|
|
data.Add("@是否补打@", "(补打单)");
|
|
data.Add("@重打标识@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否补打@", "");
|
|
data.Add("@重打标识@", "false");
|
|
}
|
|
data.Add("@下单时间@", response.CTime);
|
|
data.Add("@当日序号@", string.Format("{0}", response.DaySeq));
|
|
data.Add("@订餐人@", response.RecipientName);
|
|
data.Add("@订餐电话@", response.RecipientPhone);
|
|
if (!string.IsNullOrEmpty(response.RecipientAddress))
|
|
{
|
|
string[] addressArray = Regex.Split(response.RecipientAddress, "@#", RegexOptions.IgnoreCase);
|
|
data.Add("@送餐地址@", addressArray[0]);
|
|
}
|
|
else
|
|
{
|
|
data.Add("@送餐地址@", "");
|
|
}
|
|
data.Add("@配送费用@", string.Format("{0}", response.ShippingFee));
|
|
data.Add("@订单原价@", string.Format("{0}", response.OriginalPrice));
|
|
data.Add("@订单总额@", string.Format("{0}", response.Total));
|
|
if (response.HasInvoiced == 0)
|
|
{
|
|
data.Add("@是否发票@", string.Format("{0}", "false"));
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否发票@", string.Format("{0}", "true"));
|
|
}
|
|
data.Add("@发票信息@", string.Format("{0}", response.InvoiceTitle));
|
|
|
|
int countExtras = 0;
|
|
foreach (var item in response.Extras)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.Remark))
|
|
{
|
|
countExtras = countExtras + 1;
|
|
}
|
|
}
|
|
if (countExtras > 0)
|
|
{
|
|
data.Add("@是否打印优惠明细@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否打印优惠明细@", "false");
|
|
}
|
|
decimal packageFee = 0.00M;
|
|
//口袋列表
|
|
List<MeiTuanOrderListDetail> listDetail = response.Detail.OrderBy(x => x.Cart_id).ToList();
|
|
foreach (var item in listDetail)
|
|
{
|
|
packageFee = packageFee + item.Box_num * item.Box_price;
|
|
}
|
|
data.Add("@餐盒费@", string.Format("{0}", packageFee));
|
|
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>>();
|
|
//口袋列表
|
|
//List<MeiTuanOrderListDetail> listDetail = response.Detail.OrderBy(x => x.Cart_id).ToList();
|
|
int i = -1;
|
|
foreach (var item in listDetail)
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
if (i != item.Cart_id)
|
|
{
|
|
row = new Dictionary<string, string>();
|
|
row.Add("@名称@", "----" + (item.Cart_id + 1) + "号口袋----");
|
|
row.Add("@数量@", "");
|
|
row.Add("@金额@", "");
|
|
list.Add(row);
|
|
i = item.Cart_id;
|
|
}
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row = new Dictionary<string, string>();
|
|
row.Add("@名称@", item.Food_name + (string.IsNullOrEmpty(item.Spec) ? "" : nameAdd.Item1 + item.Spec + nameAdd.Item2) + (string.IsNullOrEmpty(item.Food_property) ? "" : nameAdd.Item1 + item.Food_property + nameAdd.Item2));
|
|
row.Add("@数量@", string.Format("{0}", item.Quantity));
|
|
row.Add("@金额@", string.Format("{0}", StringUtils.GetDecimal(item.Quantity) * item.Price));
|
|
list.Add(row);
|
|
packageFee = packageFee + item.Box_num * item.Box_price;
|
|
}
|
|
var row1 = new Dictionary<string, string>();
|
|
row1.Add("@名称@", "-------------");
|
|
row1.Add("@数量@", "");
|
|
row1.Add("@金额@", "");
|
|
list.Add(row1);
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
|
|
v = new Printer.VariableValue();
|
|
v.Key = "优惠列表";
|
|
v.DataType = DataType.List;
|
|
var list1 = new List<Dictionary<string, string>>();
|
|
//删除优惠信息打印
|
|
foreach (var item in response.Extras)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.Remark))
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
row.Add("@名称@", item.Remark);
|
|
list1.Add(row);
|
|
}
|
|
}
|
|
v.Value = JsonUtils.Serialize(list1);
|
|
vars.Add(v);
|
|
|
|
return vars;
|
|
}
|
|
/// <summary>
|
|
/// 构建商家美团外卖订单打印
|
|
/// </summary>
|
|
/// <param name="orderObject"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> SJBuilderMeiTuanVariable(string meituanShop, ShopMeituanWaiMaiOrderInfoByidResponse response, bool isRprint)
|
|
{
|
|
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("@营业模式@", OrderType.美团外卖.ToString());
|
|
data.Add("@退单标识@", "false");
|
|
data.Add("@退单@", response.Status == 9 ? "已退单" : "完成");
|
|
|
|
data.Add("@外卖门店@", meituanShop);
|
|
data.Add("@外卖单号@", response.Wm_order_id_view);
|
|
if (response.Pay_type == 1)
|
|
{
|
|
data.Add("@支付方式@", "货到付款");
|
|
}
|
|
else if (response.Pay_type == 2)
|
|
{
|
|
data.Add("@支付方式@", "在线支付");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@支付方式@", "其他支付方式");
|
|
}
|
|
if (response.PickType == 0)
|
|
{
|
|
data.Add("@是否到店自取@", "false");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否到店自取@", "true");
|
|
}
|
|
|
|
|
|
if (response.Delivery_time.Equals("0"))
|
|
{
|
|
data.Add("@是否预定@", "false");
|
|
data.Add("@预定单标识@", "");
|
|
data.Add("@送达时间@", "立即送达");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否预定@", "true");
|
|
data.Add("@预定单标识@", "预订单");
|
|
data.Add("@送达时间@", GetFormatDateTime4Sec(response.Delivery_time));
|
|
}
|
|
|
|
data.Add("@就餐人数@", response.Dinners_number.ToString());
|
|
data.Add("@订单备注@", response.Caution);
|
|
if (isRprint)
|
|
{
|
|
data.Add("@是否补打@", "(补打单)");
|
|
data.Add("@重打标识@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否补打@", "");
|
|
data.Add("@重打标识@", "false");
|
|
}
|
|
data.Add("@下单时间@", GetFormatDateTime4Sec(response.Order_send_time));
|
|
data.Add("@当日序号@", string.Format("{0}", response.Day_seq));
|
|
data.Add("@订餐人@", response.Recipient_name);
|
|
data.Add("@订餐电话@", response.Recipient_phone);
|
|
if (!string.IsNullOrEmpty(response.Recipient_address))
|
|
{
|
|
string[] addressArray = Regex.Split(response.Recipient_address, "@#", RegexOptions.IgnoreCase);
|
|
data.Add("@送餐地址@", addressArray[0]);
|
|
}
|
|
else
|
|
{
|
|
data.Add("@送餐地址@", "");
|
|
}
|
|
data.Add("@配送费用@", string.Format("{0}", response.Shipping_fee));
|
|
data.Add("@订单原价@", string.Format("{0}", response.Original_price));
|
|
data.Add("@订单总额@", string.Format("{0}", response.Total));
|
|
if (response.Has_invoiced == 0)
|
|
{
|
|
data.Add("@是否发票@", string.Format("{0}", "false"));
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否发票@", string.Format("{0}", "true"));
|
|
}
|
|
data.Add("@发票信息@", string.Format("{0}", response.Invoice_title));
|
|
|
|
int countExtras = 0;
|
|
foreach (var item in response.Extras)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.Remark))
|
|
{
|
|
countExtras = countExtras + 1;
|
|
}
|
|
}
|
|
if (countExtras > 0)
|
|
{
|
|
data.Add("@是否打印优惠明细@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否打印优惠明细@", "false");
|
|
}
|
|
decimal packageFee = 0.00M;
|
|
//口袋列表
|
|
List<ShopMeituanWaiMaiOrderInfoByiddetailResponse> listDetail = response.Detail.OrderBy(x => x.Sku_id).ToList();
|
|
foreach (var item in listDetail)
|
|
{
|
|
packageFee = packageFee + item.Box_num * item.Box_price;
|
|
}
|
|
data.Add("@餐盒费@", string.Format("{0}", packageFee));
|
|
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>>();
|
|
//口袋列表
|
|
//List<MeiTuanOrderListDetail> listDetail = response.Detail.OrderBy(x => x.Cart_id).ToList();
|
|
int i = -1;
|
|
foreach (var item in listDetail)
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
if (i != item.Cart_id)
|
|
{
|
|
row = new Dictionary<string, string>();
|
|
row.Add("@名称@", "----" + (item.Cart_id + 1) + "号口袋----");
|
|
row.Add("@数量@", "");
|
|
row.Add("@金额@", "");
|
|
list.Add(row);
|
|
i = item.Cart_id;
|
|
}
|
|
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row = new Dictionary<string, string>();
|
|
row.Add("@名称@", item.Food_name + (string.IsNullOrEmpty(item.Spec) ? "" : nameAdd.Item1 + item.Spec + nameAdd.Item2) + (string.IsNullOrEmpty(item.Food_property) ? "" : nameAdd.Item1 + item.Food_property + nameAdd.Item2));
|
|
row.Add("@数量@", string.Format("{0}", item.Quantity));
|
|
row.Add("@金额@", string.Format("{0}", StringUtils.GetDecimal(item.Quantity) * item.Price));
|
|
list.Add(row);
|
|
packageFee = packageFee + item.Box_num * item.Box_price;
|
|
}
|
|
var row1 = new Dictionary<string, string>();
|
|
row1.Add("@名称@", "-------------");
|
|
row1.Add("@数量@", "");
|
|
row1.Add("@金额@", "");
|
|
list.Add(row1);
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
|
|
v = new Printer.VariableValue();
|
|
v.Key = "优惠列表";
|
|
v.DataType = DataType.List;
|
|
var list1 = new List<Dictionary<string, string>>();
|
|
//删除优惠信息打印
|
|
foreach (var item in response.Extras)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.Remark))
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
row.Add("@名称@", item.Remark);
|
|
list1.Add(row);
|
|
}
|
|
}
|
|
v.Value = JsonUtils.Serialize(list1);
|
|
vars.Add(v);
|
|
|
|
return vars;
|
|
}
|
|
private static string GetFormatDateTime4Sec(string secTimeStamp, string format = null)
|
|
{
|
|
if (string.IsNullOrEmpty(secTimeStamp)) return "";
|
|
|
|
try
|
|
{
|
|
|
|
format = format ?? "yyyy-MM-dd HH:mm:ss";
|
|
|
|
if (secTimeStamp.Length == 13)
|
|
{
|
|
secTimeStamp = secTimeStamp.Substring(0, 10);
|
|
}
|
|
|
|
double timestamp = Convert.ToInt64(secTimeStamp);
|
|
System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
|
|
dateTime = dateTime.AddSeconds(timestamp).ToLocalTime();
|
|
return dateTime.ToString(format);
|
|
|
|
//System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
|
|
//DateTime dt = startTime.AddSeconds(long.Parse(secTimeStamp));
|
|
//return dt.ToString(format);
|
|
}catch(Exception ex)
|
|
{
|
|
logger.Error(ex, "时间转换异常");
|
|
|
|
return "";
|
|
}
|
|
|
|
|
|
}
|
|
/// <summary>
|
|
/// 构建饿了么订单打印
|
|
/// </summary>
|
|
/// <param name="orderObject"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> BuilderEleMeVariable(string elemeShop, EleMeOrderResponse response, bool isRprint)
|
|
{
|
|
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("@营业模式@", OrderType.饿了么.ToString());
|
|
data.Add("@退单标识@", "false");
|
|
|
|
data.Add("@外卖单号@", response.OrderId);
|
|
data.Add("@外卖门店@", elemeShop);
|
|
if (response.IsOnlinePaid)
|
|
{
|
|
data.Add("@支付方式@", "在线支付");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@支付方式@", "货到付款");
|
|
}
|
|
|
|
if (!response.IsBook)
|
|
{
|
|
data.Add("@是否预定@", "false");
|
|
data.Add("@预定单标识@", "");
|
|
data.Add("@送达时间@", "立即送达");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否预定@", "true");
|
|
data.Add("@预定单标识@", "预订单");
|
|
data.Add("@送达时间@", response.DeliverTime);
|
|
}
|
|
|
|
|
|
//data.Add("@送达时间@", response.DeliverTime);
|
|
data.Add("@就餐人数@", "1");
|
|
data.Add("@订单备注@", response.Description);
|
|
if (isRprint)
|
|
{
|
|
data.Add("@是否补打@", "(补打单)");
|
|
data.Add("@重打标识@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否补打@", "");
|
|
data.Add("@重打标识@", "false");
|
|
}
|
|
data.Add("@下单时间@", response.CreatedAt);
|
|
data.Add("@当日序号@", string.Format("{0}", response.DaySn));
|
|
data.Add("@订餐人@", response.Consignee);
|
|
data.Add("@订餐电话@", StringUtils.GetString(response.PhoneList).Replace("[", "").Replace("]", "").Replace("\r", "").Replace("\n", "").Replace("\"", ""));
|
|
data.Add("@送餐地址@", response.Address);
|
|
data.Add("@订单原价@", string.Format("{0}", response.OriginalPrice));
|
|
data.Add("@订单总额@", string.Format("{0}", response.TotalPrice));
|
|
data.Add("@配送费用@", string.Format("{0}", response.DeliverFee));
|
|
if (response.Invoiced)
|
|
{
|
|
data.Add("@是否发票@", string.Format("{0}", "true"));
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否发票@", string.Format("{0}", "false"));
|
|
}
|
|
data.Add("@发票信息@", string.Format("{0}", response.Invoice));
|
|
v.Value = JsonUtils.Serialize(data);
|
|
vars.Add(v);
|
|
v = new Printer.VariableValue();
|
|
v.Key = "点餐列表";
|
|
v.DataType = DataType.List;
|
|
List<EleMeGroups> grops = response.Groups;
|
|
List<EleMeDishItem> items = new List<EleMeDishItem>();
|
|
var list = new List<Dictionary<string, string>>();
|
|
foreach (EleMeGroups group in grops)
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
row.Add("@名称@", group.Name);
|
|
row.Add("@数量@", string.Format("{0}", "-"));
|
|
row.Add("@金额@", string.Format("{0}", "-"));
|
|
list.Add(row);
|
|
|
|
foreach (EleMeDishItem item in group.Items)
|
|
{
|
|
var rows = new Dictionary<string, string>();
|
|
|
|
rows.Add("@名称@", item.Name);
|
|
rows.Add("@数量@", string.Format("{0}", item.Quantity));
|
|
rows.Add("@金额@", string.Format("{0}", item.Total));
|
|
list.Add(rows);
|
|
|
|
}
|
|
}
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
return vars;
|
|
}
|
|
|
|
///// <summary>
|
|
///// 构建百度订单打印
|
|
///// </summary>
|
|
///// <param name="response"></param>
|
|
///// <returns></returns>
|
|
//public static List<Printer.VariableValue> BuilderBaiDuVariable(string baiduShop, BaiDuOrderResponse response, bool isRprint)
|
|
//{
|
|
// 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("@营业模式@", OrderType.百度外卖.ToString());
|
|
// data.Add("@退单标识@", "false");
|
|
|
|
// data.Add("@外卖单号@", response.OrderBody.OrderData.OrderInfo.Order_id);
|
|
// data.Add("@外卖门店@", baiduShop);
|
|
// if (response.OrderBody.OrderData.OrderInfo.Pay_type == 2)
|
|
// {
|
|
// data.Add("@支付方式@", "在线支付");
|
|
// }
|
|
// else
|
|
// {
|
|
// data.Add("@支付方式@", "货到付款");
|
|
// }
|
|
// if (StringUtils.GetInt(response.OrderBody.OrderData.OrderInfo.Send_time) > 1000)
|
|
// {
|
|
// data.Add("@送达时间@", DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Send_time));
|
|
// }
|
|
// else
|
|
// {
|
|
// data.Add("@送达时间@", "立即送达");
|
|
// }
|
|
// data.Add("@就餐人数@", "1");
|
|
// data.Add("@订单备注@", response.OrderBody.OrderData.OrderInfo.Remark);
|
|
// if (isRprint)
|
|
// {
|
|
// data.Add("@是否补打@", "(补打单)");
|
|
// data.Add("@重打标识@", "true");
|
|
// }
|
|
// else
|
|
// {
|
|
// data.Add("@是否补打@", "");
|
|
// data.Add("@重打标识@", "false");
|
|
// }
|
|
// data.Add("@下单时间@", DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time));
|
|
// data.Add("@当日序号@", string.Format("{0}", response.OrderBody.OrderData.OrderInfo.Order_index));
|
|
// data.Add("@订餐人@", response.OrderBody.OrderData.OrderUser.Name);
|
|
// data.Add("@订餐电话@", response.OrderBody.OrderData.OrderUser.Phone);
|
|
// data.Add("@送餐地址@", response.OrderBody.OrderData.OrderUser.Address);
|
|
// data.Add("@订单原价@", StringUtils.GetString(response.OrderBody.OrderData.OrderInfo.Total_fee / Convert.ToDecimal(100)));
|
|
// data.Add("@订单总额@", StringUtils.GetString(response.OrderBody.OrderData.OrderInfo.Total_fee / Convert.ToDecimal(100)));
|
|
// data.Add("@配送费用@", StringUtils.GetString(response.OrderBody.OrderData.OrderInfo.Send_fee / Convert.ToDecimal(100)));
|
|
// v.Value = JsonUtils.Serialize(data);
|
|
// vars.Add(v);
|
|
// v = new Printer.VariableValue();
|
|
// v.Key = "点餐列表";
|
|
// v.DataType = DataType.List;
|
|
// List<List<BaiduOrderProduct>> products = response.OrderBody.OrderData.Products;
|
|
// List<BaiduOrderProduct> items = new List<BaiduOrderProduct>();
|
|
// foreach (List<BaiduOrderProduct> group in products)
|
|
// {
|
|
// foreach (BaiduOrderProduct item in group)
|
|
// {
|
|
// item.ProductPrice = item.Product_price / Convert.ToDecimal(100);
|
|
// item.ProductFee = item.Product_fee / Convert.ToDecimal(100);
|
|
// var spec = "";
|
|
// var specId = "";
|
|
// if (item.Product_attr != null)
|
|
// {
|
|
// foreach (var attr in item.Product_attr)
|
|
// {
|
|
// spec += string.Format("({0})", attr.Option);
|
|
// specId = attr.Baidu_attr_id;
|
|
// }
|
|
// }
|
|
// item.Spec = spec;//菜如菜品规格
|
|
// item.SpecId = specId;
|
|
// var features = string.Empty;
|
|
// if (item.Product_features != null)
|
|
// {
|
|
// foreach (var feature in item.Product_features)
|
|
// {
|
|
// features += string.Format("{0},", feature.Option);
|
|
// }
|
|
// if (!string.IsNullOrEmpty(features))
|
|
// {
|
|
// features = features.Substring(0, features.Length - 1);
|
|
// features = string.Format("({0})", features);
|
|
// }
|
|
// }
|
|
// item.Features = features;//写入菜品做法
|
|
// items.Add(item);
|
|
// }
|
|
// }
|
|
// var list = new List<Dictionary<string, string>>();
|
|
|
|
// foreach (var item in items)
|
|
// {
|
|
// var row = new Dictionary<string, string>();
|
|
// if (item.Spec != null && !"".Equals(item.Spec))
|
|
// {
|
|
// Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
// row.Add("@名称@", item.Product_name + nameAdd.Item1 + item.Spec + nameAdd.Item2);
|
|
// }
|
|
// else
|
|
// {
|
|
// row.Add("@名称@", item.Product_name);
|
|
// }
|
|
// row.Add("@数量@", string.Format("{0}", item.Product_amount));
|
|
// row.Add("@金额@", string.Format("{0}", item.ProductFee));
|
|
// list.Add(row);
|
|
// }
|
|
// v.Value = JsonUtils.Serialize(list);
|
|
// vars.Add(v);
|
|
// return vars;
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 构建微信订单打印
|
|
/// </summary>
|
|
/// <param name="response"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> BuilderWeiXinVariable(WeiXinOrderResponse response, bool isRprint)
|
|
{
|
|
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("@单号@", response.TicketNo);
|
|
data.Add("@取餐号@", response.TakeNo);
|
|
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
|
|
if (response.PayType == 1)
|
|
{
|
|
data.Add("@付款方式@", "在线支付");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@付款方式@", "其他");
|
|
}
|
|
if (response.PayMode == 1)
|
|
{
|
|
data.Add("@付款类型@", "微信支付");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@付款类型@", "其他支付");
|
|
}
|
|
|
|
data.Add("@下单时间@", response.PayDate);
|
|
if (response.Status == 1)
|
|
{
|
|
data.Add("@订单状态@", "已支付");
|
|
}
|
|
else if (response.Status == 2)
|
|
{
|
|
data.Add("@订单状态@", "已退单");
|
|
}
|
|
else if (response.Status == 3)
|
|
{
|
|
data.Add("@订单状态@", "已取消");
|
|
}
|
|
else if (response.Status == 4)
|
|
{
|
|
data.Add("@订单状态@", "商家已确认");
|
|
}
|
|
else if (response.Status == 5)
|
|
{
|
|
data.Add("@订单状态@", "已完成");
|
|
}
|
|
|
|
|
|
data.Add("@就餐人数@", string.Format("{0}", response.People));
|
|
if (response.BusMode == 0)
|
|
{
|
|
data.Add("@营业模式@", "堂食");
|
|
data.Add("@手机号@", response.Phone);
|
|
data.Add("@是否打印餐盒费@", "false");
|
|
data.Add("@是否打印取餐信息@", "true");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
}
|
|
else if (response.BusMode == 1)
|
|
{
|
|
data.Add("@营业模式@", "打包");
|
|
data.Add("@手机号@", response.Phone);
|
|
data.Add("@是否打印餐盒费@", "true");
|
|
data.Add("@是否打印取餐信息@", "true");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
}
|
|
else if (response.BusMode == 2)
|
|
{
|
|
data.Add("@营业模式@", "外卖");
|
|
data.Add("@手机号@", response.ReceiveMobile == null ? "" : response.ReceiveMobile);
|
|
data.Add("@是否打印餐盒费@", "true");
|
|
data.Add("@是否打印取餐信息@", "false");
|
|
data.Add("@是否打印配送信息@", "true");
|
|
data.Add("@点餐人@", response.ReceiveName == null ? "" : response.ReceiveName);
|
|
data.Add("@订餐地址@", response.ReceiveAddress == null ? "" : response.ReceiveAddress);
|
|
}
|
|
else
|
|
{
|
|
data.Add("@营业模式@", "其他");
|
|
data.Add("@手机号@", response.Phone);
|
|
data.Add("@是否打印餐盒费@", "false");
|
|
data.Add("@是否打印取餐信息@", "false");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
}
|
|
|
|
data.Add("@餐桌号@", response.TableName == null ? "" : response.TableName);
|
|
data.Add("@订单备注@", response.Description == null ? "" : response.Description);
|
|
if (isRprint)
|
|
{
|
|
data.Add("@是否补打@", "(补打单)");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否补打@", "");
|
|
}
|
|
data.Add("@订单原价@", StringUtils.GetString(response.Amount));
|
|
data.Add("@优惠金额@", StringUtils.GetString(response.DiscountTotal));
|
|
data.Add("@应收金额@", StringUtils.GetString(response.Receivable));
|
|
data.Add("@餐盒费@", StringUtils.GetString(response.BoxFee));
|
|
data.Add("@配送费用@", StringUtils.GetString(response.DistributionFee));
|
|
|
|
data.Add("@退单原因@", response.BackCause);
|
|
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 (WeiXinOrderItems item in response.Items)
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
if (item.SpecName != null && !"".Equals(item.SpecName))
|
|
{
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row.Add("@名称@", item.ProductName + nameAdd.Item1 + item.SpecName + nameAdd.Item2);
|
|
}
|
|
else
|
|
{
|
|
row.Add("@名称@", item.ProductName);
|
|
}
|
|
row.Add("@数量@", string.Format("{0}", item.ProductCount));
|
|
row.Add("@金额@", string.Format("{0}", item.ProductFee));
|
|
list.Add(row);
|
|
if (!"".Equals(item.ProductMakes))
|
|
{
|
|
row = new Dictionary<string, string>();
|
|
row.Add("@名称@", "-" + item.ProductMakes);
|
|
row.Add("@数量@", "");
|
|
row.Add("@金额@", "");
|
|
list.Add(row);
|
|
}
|
|
|
|
}
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
return vars;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 构建微信订单打印
|
|
/// </summary>
|
|
/// <param name="response"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> UserCancelOrders(OrderObject _data, string orderNo, string SourceName)
|
|
{
|
|
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("@外卖来源@", SourceName);
|
|
data.Add("@当日序号@", _data.OrderNo);
|
|
data.Add("@外卖单号@", orderNo);
|
|
data.Add("@下单时间@", _data.CreateDate);
|
|
data.Add("@支付方式@", _data.Pays.FirstOrDefault()?.Name);
|
|
v.Value = JsonUtils.Serialize(data);
|
|
vars.Add(v);
|
|
|
|
var list = new List<Dictionary<string, string>>();
|
|
v = new Printer.VariableValue();
|
|
v.Key = "点餐列表";
|
|
v.DataType = DataType.List;
|
|
foreach (var item in _data.Items)
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
if (item.SpecName != null && !"".Equals(item.SpecName))
|
|
{
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row.Add("@名称@", item.Name + nameAdd.Item1 + item.SpecName + nameAdd.Item2);
|
|
}
|
|
else
|
|
{
|
|
row.Add("@名称@", item.Name);
|
|
}
|
|
row.Add("@数量@", string.Format("{0}", item.Quantity));
|
|
row.Add("@金额@", string.Format("{0}", item.SalePrice));
|
|
list.Add(row);
|
|
}
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
return vars;
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 构建微信订单打印
|
|
/// </summary>
|
|
/// <param name="response"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> BuilderWeiXinVariable(OrderObject response, bool isRprint)
|
|
{
|
|
var vars = new List<Printer.VariableValue>();
|
|
|
|
var v = new Printer.VariableValue();
|
|
v.Key = "默认数据源";
|
|
v.DataType = DataType.Simple;
|
|
bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_MEITUANEXPRESSCOST, false);
|
|
var data = new Dictionary<string, string>();
|
|
data.Add("@单号@", response.TradeNo);
|
|
data.Add("@取餐号@", response.OrderNo);
|
|
|
|
data.Add("@就餐时间@", response.ReserveTime);
|
|
data.Add("@预约送达@", response.ReserveTime);
|
|
data.Add("@门店名称@", Global.Instance.Worker.StoreInfo.PrintName);
|
|
if (response.Pays?.Count == 1)
|
|
{
|
|
data.Add("@付款方式@", "在线支付");
|
|
data.Add("@付款类型@", response.Pays.FirstOrDefault().Name);
|
|
}
|
|
else
|
|
{
|
|
data.Add("@付款方式@", "其他");
|
|
data.Add("@付款方式@", "其他");
|
|
}
|
|
|
|
data.Add("@下单时间@", response.FinishDate);
|
|
|
|
|
|
if (response.OrderStatus == OrderStatus.已取消)
|
|
{
|
|
data.Add("@是否打印状态@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否打印状态@", "false");
|
|
}
|
|
switch (response.OrderStatus)
|
|
{
|
|
case OrderStatus.新建单:
|
|
data.Add("@订单状态@", "新建单");
|
|
break;
|
|
case OrderStatus.等待付款:
|
|
data.Add("@订单状态@", "等待付款");
|
|
break;
|
|
case OrderStatus.已支付:
|
|
data.Add("@订单状态@", "已支付");
|
|
break;
|
|
case OrderStatus.已退单:
|
|
data.Add("@订单状态@", "已退单");
|
|
break;
|
|
case OrderStatus.已取消:
|
|
data.Add("@订单状态@", "已取消");
|
|
break;
|
|
case OrderStatus.已完成:
|
|
data.Add("@订单状态@", "已完成");
|
|
break;
|
|
case OrderStatus.部分退款:
|
|
data.Add("@订单状态@", "部分退款");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
|
|
data.Add("@就餐人数@", string.Format("{0}", response.People));
|
|
|
|
|
|
switch (response.OrderType)
|
|
{
|
|
case OrderType.微信点餐:
|
|
|
|
//zhangy 2020-02-18 Add 添加以下代码,解决外卖模式下打印点餐人、手机号、订餐地址,其他情况不打印
|
|
data.Add("@营业模式@", response.BusMode);
|
|
data.Add("@是否打印餐盒费@", "ture");
|
|
data.Add("@是否打印取餐信息@", response.BusMode == "堂食" ? "true" : "false");
|
|
|
|
data.Add("@手机号@", response.Phone == null ? "" : response.Phone);
|
|
data.Add("@是否打印手机号@", response.BusMode == "外卖" ? "true" : "false");
|
|
|
|
data.Add("@点餐人@", response.Recipients == null ? "" : response.Recipients);
|
|
data.Add("@是否打印点餐人@", response.BusMode == "外卖" ? "true" : "false");
|
|
|
|
data.Add("@订餐地址@", response.Address == null ? "" : response.Address);
|
|
data.Add("@是否打印配送信息@", response.BusMode == "外卖" ? "true" : "false");
|
|
|
|
data.Add("@是否堂食@", response.BusMode == "堂食" ? "true" : "false");
|
|
data.Add("@是否外卖@", response.BusMode == "外卖" ? "true" : "false");
|
|
data.Add("@是否外带@", response.BusMode == "外带" ? "true" : "false");
|
|
|
|
data.Add("@预约时间@", "");
|
|
|
|
|
|
//zhangy 2020-02-18 Edit 注释以下代码,堂食和外带打印小票数据不一样,不能按照是否有地址来区分
|
|
//if (!string.IsNullOrEmpty(response.Address))
|
|
//{
|
|
// //外卖模式
|
|
// data.Add("@营业模式@", response.BusMode);
|
|
// data.Add("@手机号@", response.Phone == null ? "" : response.Phone);
|
|
// data.Add("@是否打印餐盒费@", "ture");
|
|
// data.Add("@是否打印取餐信息@", "false");
|
|
// data.Add("@是否打印配送信息@", "true");
|
|
// data.Add("@点餐人@", response.Recipients == null ? "" : response.Recipients);
|
|
// data.Add("@订餐地址@", response.Address == null ? "" : response.Address);
|
|
// data.Add("@预约时间@", "");
|
|
//}
|
|
break;
|
|
case OrderType.美团外卖:
|
|
if (!string.IsNullOrEmpty(response.Address))
|
|
{
|
|
//外卖模式
|
|
data.Add("@营业模式@", response.BusMode);
|
|
data.Add("@手机号@", response.Phone == null ? "" : response.Phone);
|
|
data.Add("@是否打印餐盒费@", "ture");
|
|
data.Add("@是否打印取餐信息@", "false");
|
|
data.Add("@是否打印配送信息@", "true");
|
|
data.Add("@点餐人@", response.Recipients == null ? "" : response.Recipients);
|
|
data.Add("@订餐地址@", response.Address == null ? "" : response.Address);
|
|
}
|
|
|
|
//zhangy 2020-03-14 Edit
|
|
data.Add("@是否堂食@", "false");
|
|
data.Add("@是否外卖@", "false");
|
|
data.Add("@是否外带@", "false");
|
|
|
|
data.Add("@预约时间@", "");
|
|
|
|
break;
|
|
default:
|
|
data.Add("@营业模式@", "微信小程序");
|
|
data.Add("@手机号@", "");
|
|
data.Add("@是否打印餐盒费@", "false");
|
|
data.Add("@是否打印取餐信息@", "true");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
break;
|
|
}
|
|
|
|
|
|
data.Add("@餐桌号@", response.TableName == null ? "" : response.TableName);
|
|
data.Add("@订单备注@", response.Ext1 == null ? "" : response.Ext1);
|
|
if (isRprint)
|
|
{
|
|
data.Add("@是否补打@", "true");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否补打@", "false");
|
|
}
|
|
|
|
if (otherWaimaiSet)
|
|
{
|
|
data.Add("@订单原价@", StringUtils.GetString(response.Amount));
|
|
data.Add("@应收金额@", StringUtils.GetString(response.ReceivableAmount));
|
|
}
|
|
else
|
|
{
|
|
data.Add("@订单原价@", StringUtils.GetString(response.Amount + response.DeliverFee));
|
|
data.Add("@应收金额@", StringUtils.GetString(response.ReceivableAmount + response.DeliverFee));
|
|
}
|
|
data.Add("@优惠金额@", StringUtils.GetString(response.DiscountAmount));
|
|
data.Add("@餐盒费@", StringUtils.GetString(response.BoxFee));
|
|
data.Add("@配送费用@", StringUtils.GetString(response.DeliverFee));
|
|
|
|
//data.Add("@退单原因@", response.BackCause);
|
|
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 response.Items.Where(f=>!f.Name.Equals("打包费")&&!f.Name.Equals("配送费")))
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
if (item.SpecName != null && !"".Equals(item.SpecName))
|
|
{
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row.Add("@名称@", item.Name + nameAdd.Item1 + item.SpecName + nameAdd.Item2);
|
|
}
|
|
else
|
|
{
|
|
row.Add("@名称@", item.Name);
|
|
}
|
|
row.Add("@数量@", string.Format("{0}", item.Quantity));
|
|
row.Add("@金额@", string.Format("{0}", item.ReceivableAmount));
|
|
row.Add("@原价@", string.Format("{0}", item.Amount));
|
|
list.Add(row);
|
|
|
|
var _fla = item.Flavors.Where(f => !f.Description.Equals("打包费") && !f.Description.Equals("配送费") && !f.Description.Equals("商家优惠")).ToList();
|
|
foreach (var _flavor in _fla)
|
|
{
|
|
row = new Dictionary<string, string>();
|
|
if (_flavor.Name.Equals(""))
|
|
{
|
|
continue;
|
|
}
|
|
row.Add("@名称@", "-" + _flavor.Name);
|
|
row.Add("@数量@", _flavor.Quantity.ToString());
|
|
row.Add("@金额@", _flavor.Amount.ToString());
|
|
row.Add("@原价@", _flavor.Amount.ToString());
|
|
list.Add(row);
|
|
|
|
}
|
|
|
|
}
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
return vars;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 构建企迈订单打印
|
|
/// </summary>
|
|
/// <param name="response"></param>
|
|
/// <returns></returns>
|
|
public static List<Printer.VariableValue> BuilderQiMaiVariable(QiMaiOrder response, bool isRprint)
|
|
{
|
|
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("@单号@", response.OrderNo);
|
|
data.Add("@取餐号@", response.SortNum);
|
|
data.Add("@门店名称@", response.MultiStoreName);
|
|
data.Add("@付款方式@", "在线支付");
|
|
QiMaiOrderPay pays = response.orderPays;
|
|
if (pays != null)
|
|
{
|
|
data.Add("@付款类型@", pays.Name);
|
|
}
|
|
else
|
|
{
|
|
data.Add("@付款类型@", "其他支付");
|
|
}
|
|
|
|
data.Add("@下单时间@", response.CreatedTime);
|
|
data.Add("@订单状态@", response.StatusText);
|
|
data.Add("@就餐人数@", string.Format("{0}", response.PeopleNumber));
|
|
|
|
if (response.TypeCate == 3)
|
|
{
|
|
//外卖模式
|
|
data.Add("@营业模式@", response.TypeCateText);
|
|
data.Add("@手机号@", response.AcceptMobile == null ? "" : response.AcceptMobile);
|
|
data.Add("@是否打印餐盒费@", "ture");
|
|
data.Add("@是否打印取餐信息@", "false");
|
|
data.Add("@是否打印配送信息@", "true");
|
|
data.Add("@点餐人@", response.AcceptName == null ? "" : response.AcceptName);
|
|
data.Add("@订餐地址@", response.Address == null ? "" : response.Address);
|
|
data.Add("@预约时间@", "");
|
|
}
|
|
else if (response.TypeCate == 2)
|
|
{
|
|
//堂食模式
|
|
data.Add("@营业模式@", response.TypeCateText);
|
|
data.Add("@手机号@", response.Moblie == null ? "" : response.Moblie);
|
|
data.Add("@是否打印餐盒费@", "false");
|
|
data.Add("@是否打印取餐信息@", "true");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
data.Add("@预约时间@", "");
|
|
}
|
|
else if (response.TypeCate == 1)
|
|
{
|
|
//买单模式
|
|
data.Add("@营业模式@", response.TypeCateText);
|
|
data.Add("@手机号@", "");
|
|
data.Add("@是否打印餐盒费@", "false");
|
|
data.Add("@是否打印取餐信息@", "false");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
data.Add("@预约时间@", "");
|
|
}
|
|
else if (response.TypeCate == 6)
|
|
{
|
|
//预约模式
|
|
data.Add("@营业模式@", response.TypeCateText);
|
|
data.Add("@手机号@", response.Moblie == null ? "" : response.Moblie);
|
|
data.Add("@是否打印餐盒费@", "false");
|
|
data.Add("@是否打印取餐信息@", "false");
|
|
data.Add("@是否打印配送信息@", "false");
|
|
data.Add("@点餐人@", "");
|
|
data.Add("@订餐地址@", "");
|
|
data.Add("@预约时间@", response.MealTime);
|
|
}
|
|
|
|
data.Add("@餐桌号@", response.TableNumber == null ? "" : response.TableNumber);
|
|
data.Add("@订单备注@", response.Postscript == null ? "" : response.Postscript);
|
|
if (isRprint)
|
|
{
|
|
data.Add("@是否补打@", "(补打单)");
|
|
}
|
|
else
|
|
{
|
|
data.Add("@是否补打@", "");
|
|
}
|
|
data.Add("@订单原价@", StringUtils.GetString(response.TotalAmount));
|
|
data.Add("@优惠金额@", StringUtils.GetString(response.MinusAmount));
|
|
data.Add("@应收金额@", StringUtils.GetString(response.TotalAmount - response.MinusAmount));
|
|
data.Add("@餐盒费@", StringUtils.GetString(response.TablewarePrice));
|
|
data.Add("@配送费用@", StringUtils.GetString(response.Freight));
|
|
|
|
data.Add("@退单原因@", "");
|
|
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 (QiMaiOrderItem item in response.orderItems.Goods)
|
|
{
|
|
var row = new Dictionary<string, string>();
|
|
if (item.Spec != null && !"".Equals(item.Spec) && !"[]".Equals(item.Spec.ToString()))
|
|
{
|
|
|
|
string specName = "";
|
|
|
|
Dictionary<string, string> map = JsonUtils.Deserialize<Dictionary<string, string>>(item.Spec.ToString());
|
|
|
|
foreach (var mapValue in map)
|
|
{
|
|
specName = mapValue.Value + ",";
|
|
}
|
|
if (specName != null && !"".Equals(specName))
|
|
{
|
|
specName = specName.Substring(0, specName.Length - 1);
|
|
}
|
|
|
|
string attachgoods = "";
|
|
if (item.OrderAttachGoods != null && !"".Equals(item.OrderAttachGoods) && !"[]".Equals(item.OrderAttachGoods))
|
|
{
|
|
List<QiMaiOrderAttachGoods> attachGoods = JsonUtils.Deserialize<List<QiMaiOrderAttachGoods>>(item.OrderAttachGoods.ToString());
|
|
|
|
foreach (QiMaiOrderAttachGoods qiMaiOrderAttachGoods in attachGoods)
|
|
{
|
|
attachgoods = "," + attachgoods + string.Format("{0}*{1}", qiMaiOrderAttachGoods.Name, qiMaiOrderAttachGoods.Qty);
|
|
}
|
|
}
|
|
item.PropertyName = string.Format("{0}{1}", item.Property, attachgoods);
|
|
|
|
if (item.Property != null && !"".Equals(item.PropertyName))
|
|
{
|
|
specName = specName + "," + item.PropertyName;
|
|
}
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row.Add("@名称@", item.Name + nameAdd.Item1 + specName + nameAdd.Item2);
|
|
}
|
|
else
|
|
{
|
|
string attachgoods = "";
|
|
if (item.OrderAttachGoods != null && !"".Equals(item.OrderAttachGoods) && !"[]".Equals(item.OrderAttachGoods))
|
|
{
|
|
List<QiMaiOrderAttachGoods> attachGoods = JsonUtils.Deserialize<List<QiMaiOrderAttachGoods>>(item.OrderAttachGoods.ToString());
|
|
|
|
foreach (QiMaiOrderAttachGoods qiMaiOrderAttachGoods in attachGoods)
|
|
{
|
|
attachgoods = "," + attachgoods + string.Format("{0}*{1}", qiMaiOrderAttachGoods.Name, qiMaiOrderAttachGoods.Qty);
|
|
}
|
|
}
|
|
item.PropertyName = string.Format("{0}{1}", item.Property, attachgoods);
|
|
|
|
if (item.PropertyName != null && !"".Equals(item.PropertyName))
|
|
{
|
|
Tuple<string, string> nameAdd = Global.Instance.Additional;
|
|
row.Add("@名称@", item.Name + nameAdd.Item1 + item.PropertyName + nameAdd.Item2);
|
|
}
|
|
else
|
|
{
|
|
row.Add("@名称@", item.Name);
|
|
}
|
|
}
|
|
row.Add("@数量@", string.Format("{0}", item.Num));
|
|
row.Add("@金额@", string.Format("{0}", item.Price * item.Num));
|
|
list.Add(row);
|
|
|
|
}
|
|
v.Value = JsonUtils.Serialize(list);
|
|
vars.Add(v);
|
|
return vars;
|
|
}
|
|
|
|
public static Tuple<bool, string> PrinterTicket(string prefix, List<VariableValue> args)
|
|
{
|
|
Tuple<bool, string> result = null;
|
|
try
|
|
{
|
|
//票头空白行
|
|
int headerLine = 0;
|
|
|
|
//票尾空白行
|
|
int footerLine = 0;
|
|
|
|
//小票打印份数
|
|
int ticketCount = 1;
|
|
//打印延迟
|
|
int delaySecond = 1;
|
|
//切纸
|
|
bool cutPager = false;
|
|
|
|
PrinterObject pobject = null;
|
|
|
|
//打印票据类型,是否打印厨打票,否则打印小票
|
|
var printKitchen = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_WM_PRINTERKITCHERTICKET, false);
|
|
//单独配置外卖打印机
|
|
var wmPrinterAlone = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_WM_WMPRINTERALONE, false);
|
|
//厨打机同时打印外卖厨打票(适用于菜品未映射的厨打模式)
|
|
var wmPrinterKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_WM_WMPRINTERKIT, false);
|
|
wmPrinterAlone = wmPrinterAlone && !prefix.Contains("微信订单") && !prefix.Contains("在线订单");//排除微信订单,微信订单不算外卖,不走单独打印小票
|
|
|
|
if (wmPrinterAlone)
|
|
{
|
|
//外卖打印机单独使用
|
|
cutPager = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_WM_CASHIER_ALLOW_CUT_PAGER, false);
|
|
//打印延迟
|
|
delaySecond = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_WM_CASHIER_PRINT_DELAY, 1);
|
|
//小票打印份数
|
|
ticketCount = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_WM_CASHIER_TICKET_COUNT, 1);
|
|
//票尾空白行
|
|
footerLine = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_WM_CASHIER_FOOTER_EMPTY, 0);
|
|
//票头空白行
|
|
headerLine = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_WM_CASHIER_HEADER_EMPTY, 0);
|
|
//打印机
|
|
pobject = GetTicketPrinterObject("外卖打印机", cutPager, false);
|
|
}
|
|
//else if (wmPrinterKit) {
|
|
// //同时发往所有厨打打印机
|
|
|
|
//}
|
|
else
|
|
{
|
|
//和小票机共用的打印机
|
|
cutPager = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_CASHIER_ALLOW_CUT_PAGER, false);
|
|
//打印延迟
|
|
delaySecond = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_PRINT_DELAY, 1);
|
|
//小票打印份数
|
|
ticketCount = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_TICKET_COUNT, 1);
|
|
//票尾空白行
|
|
footerLine = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_FOOTER_EMPTY, 0);
|
|
//票头空白行
|
|
headerLine = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_CASHIER_HEADER_EMPTY, 0);
|
|
//打印机
|
|
pobject = GetTicketPrinterObject("收银台打印机", cutPager, false);
|
|
}
|
|
for (int i = 1; i <= ticketCount; i++)
|
|
{
|
|
//执行收银小票打印
|
|
|
|
logger.Info("开始打印外卖收银小票");
|
|
if (wmPrinterAlone && printKitchen)
|
|
{
|
|
var tempPrefix = "外卖厨打";
|
|
var prt = PrinterTicket(pobject, tempPrefix, args, cutPager, false, headerLine, footerLine);
|
|
logger.Info("外卖打印机打印厨打模板第<{0}>次小票打印结果<{1},{2}>", i, prt.Item1, prt.Item2);
|
|
}
|
|
else
|
|
{
|
|
var prt = PrinterTicket(pobject, prefix, args, cutPager, false, headerLine, footerLine);
|
|
logger.Info("外卖第<{0}>次小票打印结果<{1},{2}>", i, prt.Item1, prt.Item2);
|
|
}
|
|
|
|
if (delaySecond > 0)
|
|
{
|
|
Thread.Sleep(delaySecond * 1000);
|
|
}
|
|
}
|
|
|
|
//外卖单独打印且收银台同时打印,继续执行收银台打印
|
|
var toDeskSame = Global.Instance.GlobalConfigBoolValue(ConfigConstant.PERIPHERAL_WM_CASHIER_TICKET_TODESKSAME, false);
|
|
if (wmPrinterAlone && toDeskSame)
|
|
{
|
|
var deskTicketCount = Global.Instance.GlobalConfigIntValue(ConfigConstant.PERIPHERAL_WM_CASHIER_DESK_TICKET_COUNT, 0);
|
|
|
|
//执行收银小票打印
|
|
var deskPrinterObject = GetTicketPrinterObject("收银台打印机", cutPager, false);
|
|
for (int i = 1; i <= deskTicketCount; i++)
|
|
{
|
|
|
|
logger.Info("开始打印外卖收银小票收银台打印");
|
|
var prt = PrinterTicket(deskPrinterObject, prefix, args, cutPager, false, headerLine, footerLine);
|
|
logger.Info("外卖第<{0}>次小票收银台打印结果<{1},{2}>", i, prt.Item1, prt.Item2);
|
|
|
|
if (delaySecond > 0)
|
|
{
|
|
Thread.Sleep(delaySecond * 1000);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
result = new Tuple<bool, string>(true, "打印成功");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error(ex, "外卖小票打印异常");
|
|
result = new Tuple<bool, string>(false, "外卖小票打印异常");
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
public static Tuple<bool, string> PrinterTicket(PrinterObject pobject, string prefix, List<VariableValue> args, bool cutPager, bool openCashbox, int headerLine, int footerLine)
|
|
{
|
|
Tuple<bool, string> result = null;
|
|
|
|
try
|
|
{
|
|
string fileName = string.Format(@"template\waimaiPrint\{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\waimaiPrint\{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);
|
|
|
|
|
|
|
|
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
|
|
{
|
|
PrinterTemplate printer = surface.Parse(args);
|
|
var pcontent = printer.Parse(pobject, args, headerLine, footerLine);
|
|
result = 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;
|
|
}
|
|
}
|
|
}
|