Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 public void ReSubmitOrder(TangOrder order)
 {
     foreach (var product in order.TangOrderProducts.Where(a => a.ProductStatus == TangOrderProductStatus.Add))
     {
         product.ProductStatus = TangOrderProductStatus.Added;
         Update(product);
     }
 }
Exemplo n.º 3
0
        public void SaveOrder(TangOrder order)
        {
            order.Code = GenerateOrderCode();
            Save(order);
            // 保存到未完成订单列表
            var key = AddKeyPrefix <TangOrder>("UnFinish");

            Database.ListLeftPush(key, order.ObjectId);
        }
Exemplo n.º 4
0
 /// <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);
     }
 }
Exemplo n.º 5
0
 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);
     }
 }
Exemplo n.º 6
0
 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})";
     }
 }
Exemplo n.º 7
0
        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);
        }
Exemplo n.º 8
0
 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 = "点菜单";
     }
 }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
        /// <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("对不起,该订单已在其他收银台结算,请勿重复操作");
        }
Exemplo n.º 13
0
 /// <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);
     }
 }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
 public ChineseFoodFenOrderViewModel(IEnumerable <Desk> desks, TangOrder order, TangOrderProduct product)
 {
     Desks = desks.Where(a => a.Order != null && a.Id != order.DeskId).ToObservable();
     Good  = product;
 }
Exemplo n.º 17
0
 public TangFoodPrint(TangOrder order, Printer printer, Socket socket, PrintOption option) : base(order, printer, socket, option)
 {
 }
Exemplo n.º 18
0
        /// <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));
        }
Exemplo n.º 19
0
 public async Task HoogupOrderAsync(TangOrder order)
 {
     ValidateFastOrder(order);
     var key = AddKeyPrefix <TangOrder>("Hoogup");
     await Database.SetAddAsync(key, order.ObjectId);
 }