public TangOrder SaveFastOrder(TangOrder order) { ValidateFastOrder(order); if (string.IsNullOrEmpty(order.Code)) { order.Code = GenerateOrderCode(); order.Identifier = (int)GenerateOrderIdentity(); Save(order); } else { Update(order); } // 找出已经删除了的订单商品 var goods = GetOrderProduct(order.ObjectId); if (goods != null) { var ids = order.TangOrderProducts.Where(a => !string.IsNullOrEmpty(a.ObjectId)).Select(a => a.ObjectId); goods.Where(a => !ids.Contains(a.ObjectId)).ForEach(a => RemoveOrderProduct(a)); } order.TangOrderProducts?.ForEach(good => { good.OrderObjectId = order.ObjectId; good.ModifyTime = DateTime.Now; SaveOrderProduct(good); }); return(order); }
public void ReSubmitOrder(TangOrder order) { foreach (var product in order.TangOrderProducts.Where(a => a.ProductStatus == TangOrderProductStatus.Add)) { product.ProductStatus = TangOrderProductStatus.Added; Update(product); } }
public void SaveOrder(TangOrder order) { order.Code = GenerateOrderCode(); Save(order); // 保存到未完成订单列表 var key = AddKeyPrefix <TangOrder>("UnFinish"); Database.ListLeftPush(key, order.ObjectId); }
/// <summary> /// 打印订单(堂食) /// </summary> /// <param name="order"></param> /// <param name="socket"></param> private void PrintOrder(TangOrder order, Socket socket, PrintOption option) { if (Device.Type == 1) { ReceptionPrint(order, socket, option); } else if (Device.Type == 2) { Backstage(order, socket, option); } }
public void SubmitOrder(TangOrder order) { order.OrderStatus = TangOrderStatus.Eating; order.Identifier = (int)GenerateOrderIdentity(); Update(order); foreach (var product in order.TangOrderProducts) { product.ProductStatus = TangOrderProductStatus.Ordered; Update(product); } }
public TangOrderPrint(TangOrder order, Printer printer, Socket socket, PrintOption option) : base(order, printer, socket, option) { if (option.Mode == Enum.PrintMode.PreOrder) { Title = "厨房总单"; } else { Title = $"厨房总单({option.Title})"; } }
public async Task RemoveHoogupOrderAsync(TangOrder order) { if (order.TangOrderProducts == null || order.TangOrderProducts.Count == 0) { order.TangOrderProducts = GetOrderProduct(order.ObjectId)?.ToObservable(); } await Database.KeyDeleteAsync(AddKeyPrefix <TangOrder>(order.ObjectId)); await Database.ListRemoveAsync(AddKeyPrefix <TangOrder>("List"), order.ObjectId); order.TangOrderProducts?.ForEach(async good => await Database.KeyDeleteAsync(AddKeyPrefix <TangOrderProduct>(good.ObjectId))); await Database.SetRemoveAsync(AddKeyPrefix <TangOrder>("Hoogup"), order.ObjectId); }
public TangBackstagePrint(TangOrder order, Printer printer, Socket socket, PrintOption option) { Order = order; Printer = printer; _socket = socket; Option = option; Title = option.Title; Products = Option.Products?.Where(a => a.Feature == ProductFeature.SetMeal || Printer.Device.Foods.Contains(a.ProductId)).ToList(); if (option.Mode == PrintMode.PreOrder) { Title = "点菜单"; } }
public void DeleteOrder(TangOrder order) { /** 操作步骤 * 1. 删除订单实体 * 2. 删除订单列表项 * 3. 删除未完成订单列表项 * 4. 删除已点菜品实体 * 5. 删除订单已点菜品列表 * 6. 删除订单支付数据 * 7. 删除订单支付列表 */ var orderKey = AddKeyPrefix <TangOrder>(order.ObjectId); Database.KeyDelete(orderKey); var orderListKey = AddKeyPrefix <TangOrder>("List"); Database.ListRemove(orderListKey, order.ObjectId); var unFinishKey = AddKeyPrefix <TangOrder>("UnFinish"); Database.ListRemove(unFinishKey, order.ObjectId); var orderProductListKey = AddKeyPrefix($"Order:{order.ObjectId}", typeof(TangOrderProduct).Name); var productList = Database.ListRange(orderProductListKey); if (productList.Length > 0) { foreach (var val in productList) { var key = AddKeyPrefix(val, typeof(TangOrderProduct).Name); Database.KeyDelete(key); } } Database.KeyDelete(orderProductListKey); var orderPaymentListKey = AddKeyPrefix($"TangOrder:{order.ObjectId}", typeof(TangOrderPayment).Name); var paymentListKey = AddKeyPrefix("List", typeof(TangOrderPayment).Name); var paymentList = Database.ListRange(orderPaymentListKey); if (paymentList.Length > 0) { foreach (var val in paymentList) { var key = AddKeyPrefix(val, typeof(TangOrderPayment).Name); Database.KeyDelete(key); Database.ListRemove(paymentListKey, val); } } Database.KeyDelete(orderPaymentListKey); }
public async Task FenOrderAsync(TangOrderProduct good, TangOrder originalOrder, TangOrder targetOrder) { good.OrderId = targetOrder.Id; good.OrderObjectId = targetOrder.ObjectId; originalOrder.TangOrderProducts.Remove(good); if (targetOrder.TangOrderProducts == null) { targetOrder.TangOrderProducts = new ObservableCollection <TangOrderProduct>(); } targetOrder.TangOrderProducts.Add(good); var originalKey = AddKeyPrefix($"Order:{originalOrder.ObjectId}", typeof(TangOrderProduct).Name); await Database.ListRemoveAsync(originalKey, good.ObjectId); var targetKey = AddKeyPrefix($"Order:{targetOrder.ObjectId}", typeof(TangOrderProduct).Name); await Database.ListRightPushAsync(targetKey, good.ObjectId); }
public async Task PaymentAsync(TangOrder order) { order.OrderStatus = TangOrderStatus.Settled; Update(order); // 保存支付方式 var orderPaymentKey = AddKeyPrefix <TangOrderPayment>($"Order:{order.ObjectId}"); order.TangOrderPayments.ForEach(payment => { Save(payment); }); await SetRelativeEntitysAsync <TangOrderPayment, TangOrder>(order.ObjectId, order.TangOrderPayments.ToArray()); var key = AddKeyPrefix <TangOrder>("UnFinish"); Database.ListRemove(key, order.ObjectId); }
/// <summary> /// 验证快餐订单 /// </summary> /// <param name="order"></param> private void ValidateFastOrder(TangOrder order) { if (string.IsNullOrEmpty(order.ObjectId)) { return; } var entity = Get <TangOrder>(order.ObjectId); if (entity == null) { throw new Exception("订单不存在或已被删除!"); } if ((entity.OrderStatus & TangOrderStatus.Finish) == 0) { return; } throw new Exception("对不起,该订单已在其他收银台结算,请勿重复操作"); }
/// <summary> /// 打印堂食订单 /// </summary> /// <param name="order"></param> public void Print(TangOrder order, PrintOption option) { lock (GetLock(Device.IP)) { try { var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); socket.Connect(new IPEndPoint(IPAddress.Parse(Device.IP), Device.Port)); PrintOrder(order, socket, option); socket.Close(); } catch (SocketException ex) { LogHelper.AddLog($"堂食订单打印异常:{ex.Message}"); throw new Exception($"打印机[{Device.Name}]连接异常"); } Thread.Sleep(10); } }
public async Task <TangOrder> PaymentFastAsync(TangOrder order) { ValidateFastOrder(order); order.OrderStatus = TangOrderStatus.Settled; order.TangOrderProducts?.ForEach(a => a.ProductStatus = TangOrderProductStatus.Ordered); SaveFastOrder(order); var orderPaymentKey = AddKeyPrefix <TangOrderPayment>($"Order:{order.ObjectId}"); order.TangOrderPayments.ForEach(payment => { payment.OrderObjectId = order.ObjectId; Save(payment); }); await SetRelativeEntitysAsync <TangOrderPayment, TangOrder>(order.ObjectId, order.TangOrderPayments.ToArray()); var key = AddKeyPrefix <TangOrder>("Hoogup"); await Database.SetRemoveAsync(key, order.ObjectId); return(order); }
public TangOrderProduct Unsubscribe(TangOrder order, TangOrderProduct product, double quantity) { if (product.Quantity <= quantity) { product.ProductStatus = TangOrderProductStatus.Return; Update(product); return(product); } product.Quantity = product.Quantity - quantity; product.Amount = product.Quantity * product.Price; Update(product); var retProduct = new TangOrderProduct { Description = product.Description, Discount = product.Discount, Feature = product.Feature, FormatId = product.FormatId, Name = product.Name, OrderId = product.OrderId, OrderObjectId = product.OrderObjectId, OriginalPrice = product.OriginalPrice, Price = product.Price, ProductId = product.ProductId, ProductIdSet = product.ProductIdSet, ProductStatus = TangOrderProductStatus.Return, Quantity = quantity, RefundReason = product.RefundReason, Remark = product.Remark, Amount = quantity * product.Price, Src = product.Src }; Save(retProduct); var orderProductKey = AddKeyPrefix($"Order:{retProduct.OrderObjectId}", typeof(TangOrderProduct).Name); Database.ListRightPush(orderProductKey, retProduct.ObjectId); order.TangOrderProducts.Add(retProduct); return(retProduct); }
public ChineseFoodFenOrderViewModel(IEnumerable <Desk> desks, TangOrder order, TangOrderProduct product) { Desks = desks.Where(a => a.Order != null && a.Id != order.DeskId).ToObservable(); Good = product; }
public TangFoodPrint(TangOrder order, Printer printer, Socket socket, PrintOption option) : base(order, printer, socket, option) { }
/// <summary> /// 前台打印(堂食订单) /// </summary> /// <param name="order"></param> /// <param name="socket"></param> private void ReceptionPrint(TangOrder order, Socket socket, PrintOption option) { var bufferArr = new List <byte[]> { // 打印当日序号 PrinterCmdUtils.AlignCenter(), PrinterCmdUtils.FontSizeSetBig(2), TextToByte(ApplicationObject.App.Business.Name), PrinterCmdUtils.NextLine(), TextToByte($"当日流水:{order.Identifier}"), PrinterCmdUtils.NextLine(), TextToByte(option.Title ?? "结账单"), PrinterCmdUtils.NextLine() }; // 餐桌 if (order.DeskId != null) { bufferArr.Add(PrinterCmdUtils.AlignLeft()); bufferArr.Add(PrinterCmdUtils.FontSizeSetBig(2)); bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight($"餐桌:{order.DeskName}", $"人数:{order.PeopleNumber}", fontSize: 2)); bufferArr.Add(PrinterCmdUtils.NextLine()); } bufferArr.Add(PrinterCmdUtils.FontSizeSetBig(1)); // 订单编号 bufferArr.Add(TextToByte($"订单编号:{order.Code}")); bufferArr.Add(PrinterCmdUtils.NextLine()); // 下单 bufferArr.Add(TextToByte($"下单时间:{order.CreateTime:yyyy-MM-dd HH:mm:ss}")); bufferArr.Add(PrinterCmdUtils.NextLine()); // 服务员 bufferArr.Add(TextToByte($"收银员:{order.StaffName}")); bufferArr.Add(PrinterCmdUtils.NextLine()); // 备注 if (!string.IsNullOrEmpty(order.Remark)) { bufferArr.Add(TextToByte($"备注:{order.Remark}")); bufferArr.Add(PrinterCmdUtils.NextLine()); } // 商品分隔 bufferArr.Add(PrinterCmdUtils.SplitText("-", "购买商品", Device.Format)); bufferArr.Add(PrinterCmdUtils.NextLine()); // 打印商品 foreach (var product in option.Products) { var buffer = ProductLine(product); buffer.ForEach(a => { bufferArr.Add(a); bufferArr.Add(PrinterCmdUtils.NextLine()); }); } // 分隔 bufferArr.Add(PrinterCmdUtils.SplitLine("-", Device.Format)); bufferArr.Add(PrinterCmdUtils.NextLine()); // 金额 bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("餐位费:", order.MealFee.ToString())); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("原价:", order.OriginalAmount.ToString())); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("优惠:", (order.OriginalAmount - order.Amount + order.PreferentialAmount).ToString())); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("实收:", order.ActualAmount.ToString())); bufferArr.Add(PrinterCmdUtils.NextLine()); //if (!string.IsNullOrEmpty(order.PaymentTypeName)) //{ // bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("付款方式:", order.PaymentTypeName)); // bufferArr.Add(PrinterCmdUtils.NextLine()); //} if (order.TangOrderPayments != null && order.TangOrderPayments.Count > 0) { if (order.TangOrderPayments.Count == 1) { var first = order.TangOrderPayments.First(); bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("付款方式:", first.Name)); bufferArr.Add(PrinterCmdUtils.NextLine()); } else { var first = order.TangOrderPayments.First(); bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("付款方式:", $"{first.Name}:{first.Amount}")); bufferArr.Add(PrinterCmdUtils.NextLine()); for (int i = 1; i < order.TangOrderPayments.Count; i++) { bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("", $"{order.TangOrderPayments[i].Name}:{order.TangOrderPayments[i].Amount}")); bufferArr.Add(PrinterCmdUtils.NextLine()); } } } if (!string.IsNullOrEmpty(order.PaymentRemark)) { bufferArr.Add(PrinterCmdUtils.PrintLineLeftRight("支付备注:", order.PaymentRemark)); bufferArr.Add(PrinterCmdUtils.NextLine()); } // 分隔 bufferArr.Add(PrinterCmdUtils.SplitText("-", "其他", Device.Format)); bufferArr.Add(PrinterCmdUtils.NextLine()); // 打印时间 bufferArr.Add(TextToByte($"打印时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}")); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(TextToByte(ApplicationObject.App.Business.Name)); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(TextToByte($"电话:{ApplicationObject.App.Business.Mobile}")); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(TextToByte($"地址:{ApplicationObject.App.Business.Address}")); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(PrinterCmdUtils.AlignCenter()); bufferArr.Add(TextToByte($"谢谢您的惠顾")); bufferArr.Add(PrinterCmdUtils.NextLine()); bufferArr.Add(PrinterCmdUtils.AlignLeft()); bufferArr.Add(PrinterCmdUtils.NextLine()); // 切割 bufferArr.Add(PrinterCmdUtils.FeedPaperCutAll()); // 打印 bufferArr.ForEach(a => socket.Send(a)); }
public async Task HoogupOrderAsync(TangOrder order) { ValidateFastOrder(order); var key = AddKeyPrefix <TangOrder>("Hoogup"); await Database.SetAddAsync(key, order.ObjectId); }