using NLog; using POSV.Card; using POSV.Entity; using POSV.Helper; using POSV.MessageEvent; using POSV.MsgCenter; using POSV.ServiceCenter; using POSV.ShoppingCart; using POSV.Utils; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI; using uPLibrary.Networking.M2Mqtt.Messages; using System.Collections.ObjectModel; using POSV.QiMai; using POSV.ThirdPartyOrderData; namespace POSV.OtherWaiMai { public class OtherWaiMaiApi { public static Dictionary orderMap = new Dictionary(); private static Logger logger = NLog.LogManager.GetCurrentClassLogger(); public static void sendWaiMaiMessage(string message) { logger.Info(">>>>>>sendWaiMaiMessage>>>>>>>>{0}", message); try { Dictionary waiMaiMap = JsonUtils.Deserialize>(message); if (waiMaiMap.ContainsKey("meituan") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan"])) { //如果发送的时间和本机相差15分钟,证明是无效消息 if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["meituan"].Split(','); //有美团外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.美团外卖.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); if (orderIds.Length > 0) { //播放声音 SoundUtils.PlaySound("meituan_new"); logger.Info("美团外卖订单播放声音"); // 是否自动接单 bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.MEITUAN_CONFIRM_PARAMETER, false); if (openConfirm && !Global.isHandOver) { logger.Info("美团外卖自动接单"); int handOrderCount = orderIds.Length; for (int i = 0; i < orderIds.Length; i++) { string orderId = orderIds[i]; MeiTuanOrderConfirmRequest request = new MeiTuanOrderConfirmRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.OrderId = orderId; var response = OtherWaiMaiUtils.MeiTuanOrderConfirm(request); if (response != null) { logger.Info("美团外卖自动接单:" + response.Item2); if (response.Item1) { handOrderCount = handOrderCount - 1; //接单成功刷新页面 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.美团外卖.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount)) }); //接单成功打印订单 Task.Factory.StartNew(() => { try { MeiTuanOrderRequest request1 = new MeiTuanOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.OrderId = orderId; var response1 = OtherWaiMaiUtils.MeiTuanOrder(request1); if (response1 != null && response1.Item1) { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId); if (_OrderObject != null) { logger.Info("美团外卖订单已存在"); return; } logger.Info($"美团外卖自动接单组装本地数据,data:{response1.Item3.Data}"); //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalMeiTuan(response1.Item3.Data); logger.Info("美团外卖组装本地数据成功"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("美团外卖插入本地数据库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); //单品优惠 if (orderObject.Items != null) { foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { //档口结算信息赋默认值 payItem.Ext1 = "0"; payItem.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; //zhangy 2020-02-20 Add 添加结算参数计算 OrderUtils.SetPayModeDiscount(payItem, payMode); } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } logger.Info("美团外卖插入本地数据库成功"); //更新是否有订单需要上传的状态 logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true"); Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true"); Global.isHaveCenterTicket = true; trans.Complete(); } } } logger.Info("美团外卖自动接单打印"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.BuilderMeiTuanVariable(response1.Item3.Data.PoiName, response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("美团外卖", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info("美团外卖标签打印成功"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info("美团外卖厨打标签成功"); //启用外卖商品绑定厨显方案 var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true); //启用外卖商品绑定厨打方案 var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true); if (planKit) { //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info("美团外卖厨打成功"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info("美团外卖出品成功"); } if (planKds) { //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info("美团外卖厨显成功"); } } } catch (Exception ex) { logger.Info("美团外卖 接单成功打印订单异常" + ex.Message); } }); } } } } } } } else if (waiMaiMap.ContainsKey("meituan_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan_cancel"])) { string orderId = waiMaiMap["meituan_cancel"]; //防止推送多次退单 if (orderMap.ContainsKey("orderId" + orderId)) { return; } orderMap.Add("orderId" + orderId, orderId); if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { //播放声音 SoundUtils.PlaySound("meituan_cancel"); logger.Info("美团订单被取消播放声音"); } //如果本地有订单,将本地订单退单 try { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId); if (_OrderObject != null) { //退单打印逻辑 UserCancelPrinterTicket("美团外卖", orderId, _OrderObject); if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo)) { logger.Info("订单已完全退单"); return; } //生成新单 OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject); string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //=========更新原单内容 //录入原单号 _BackOrderObject.Id = IdWorkerUtils.Instance.NextId(); //操作员工号 _BackOrderObject.WorkerNo = Global.Instance.Worker.No; //操作员名称 _BackOrderObject.WorkerName = Global.Instance.Worker.Name; _BackOrderObject.SaleDate = finishDate; //班次名称 _BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name; //班次编号 _BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No; //订单标识为 新建状态 _BackOrderObject.OrderStatus = OrderStatus.已退单; //订单创建时间 _BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //订单创建人 _BackOrderObject.CreateUser = Global.Instance.Worker.Name; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); //星期 _BackOrderObject.Weeker = weeker; //天气 _BackOrderObject.Weather = string.Empty; _BackOrderObject.ObjectId = ObjectId.GenerateNewStringId(); _BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo(); _BackOrderObject.FinishDate = finishDate; _BackOrderObject.Amount = 0 - _OrderObject.Amount; _BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount; _BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount; _BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount; _BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount; _BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount; _BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount; _BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount; _BackOrderObject.SyncStatus = 0; _BackOrderObject.PrintStatus = 0; _BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint; _BackOrderObject.UploadStatus = 0; _BackOrderObject.UploadMessage = ""; _BackOrderObject.TicketId = ""; _BackOrderObject.OrgTradeNo = _OrderObject.TradeNo; //整单优惠 foreach (PromotionOrder promotion in _BackOrderObject.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //====== 更新明细内容 foreach (OrderItem item in _BackOrderObject.Items) { item.Id = IdWorkerUtils.Instance.NextId(); item.OrderId = _BackOrderObject.Id; item.TradeNo = _BackOrderObject.TradeNo; //单品优惠 foreach (PromotionItem promotion in item.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.ItemId = item.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //做法信息 foreach (FlavorItem flavor in item.Flavors) { flavor.isBackTicket = true; flavor.isWaiMaiTicket = true; flavor.Id = IdWorkerUtils.Instance.NextId(); flavor.OrderId = _BackOrderObject.Id; flavor.ItemId = item.Id; flavor.TradeNo = _BackOrderObject.TradeNo; flavor.RefundQuantity = flavor.Quantity; flavor.Amount = 0 - flavor.Amount; flavor.Quantity = 0; flavor.DiscountAmount = 0 - flavor.DiscountAmount; flavor.FinishDate = finishDate; } item.RefundQuantity = item.Quantity; item.Quantity = 0; item.Amount = 0 - item.Amount; item.FlavorAmount = 0 - item.FlavorAmount; item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount; item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount; item.TotalAmonut = 0 - item.TotalAmonut; item.SuitAddPrice = 0 - item.SuitAddPrice; item.SuitAmount = 0 - item.SuitAmount; item.SaleDate = finishDate; item.ChudaQty = 0; item.ChupinQty = 0; item.ChuxianQty = 0; item.KdsChupinQty = 0; item.FinishDate = finishDate; } //支付方式遍历 foreach (PayItem pay in _BackOrderObject.Pays) { pay.Id = IdWorkerUtils.Instance.NextId(); pay.TradeNo = _BackOrderObject.TradeNo; pay.PayNo = OrderUtils.Instance.GeneratePayNo(); pay.OrderId = _BackOrderObject.Id; pay.Amount = 0 - pay.Amount; pay.PaidAmount = 0 - pay.PaidAmount; pay.ChangeAmount = 0 - pay.ChangeAmount; pay.PayTime = finishDate; pay.FinishDate = finishDate; pay.OverAmount = 0 - pay.OverAmount; pay.ShiftName = _BackOrderObject.ShiftName; pay.ShiftNo = _BackOrderObject.ShiftNo; //zhangy 2020-02-20 Add,增加退单的门店结算扣率处理逻辑 //档口结算信息赋默认值 pay.Ext1 = "0"; pay.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(pay.No); if (payMode == null) { pay.IncomeFlag = 1; pay.OtherRateType = 0; pay.OtherRateValue = 0.00M; } else { pay.IncomeFlag = payMode.IncomeFlag; pay.OtherRateType = payMode.OtherRateType; pay.OtherRateValue = 0 - payMode.OtherRateValue; //zhangy 2020-02-20 Add,退单,扣率金额也退 pay.Ext2 = string.IsNullOrEmpty(pay.Ext2) ? "0" : ("-" + pay.Ext2); } } var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject); if (!isException) { _OrderObject.OrgTradeNo = _BackOrderObject.TradeNo; lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { db.Update(_OrderObject); trans.Complete(); } } } logger.Info("美团退单完成"); } else { logger.Info("美团退单保存失败!"); } } else { logger.Info("美团获取订单信息异常"); } } catch (Exception ex) { logger.Error(ex, "美团退单发生异常"); } } else if (waiMaiMap.ContainsKey("eleme_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme_cancel"])) { string orderId = waiMaiMap["eleme_cancel"]; //防止推送多次退单 if (orderMap.ContainsKey("orderId" + orderId)) { return; } orderMap.Add("orderId" + orderId, orderId); if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { //播放声音 SoundUtils.PlaySound("meituan_cancel"); logger.Info("饿了么订单被取消播放声音"); } //如果本地有订单,将本地订单退单 try { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId); if (_OrderObject != null) { //退单打印逻辑 UserCancelPrinterTicket("饿了么", orderId, _OrderObject); if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo)) { logger.Info("订单已完全退单"); return; } //生成新单 OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject); string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //=========更新原单内容 //录入原单号 _BackOrderObject.Id = IdWorkerUtils.Instance.NextId(); //操作员工号 _BackOrderObject.WorkerNo = Global.Instance.Worker.No; //操作员名称 _BackOrderObject.WorkerName = Global.Instance.Worker.Name; _BackOrderObject.SaleDate = finishDate; //班次名称 _BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name; //班次编号 _BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No; //订单标识为 新建状态 _BackOrderObject.OrderStatus = OrderStatus.已退单; //订单创建时间 _BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //订单创建人 _BackOrderObject.CreateUser = Global.Instance.Worker.Name; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); //星期 _BackOrderObject.Weeker = weeker; //天气 _BackOrderObject.Weather = string.Empty; _BackOrderObject.ObjectId = ObjectId.GenerateNewStringId(); _BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo(); _BackOrderObject.FinishDate = finishDate; _BackOrderObject.Amount = 0 - _OrderObject.Amount; _BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount; _BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount; _BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount; _BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount; _BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount; _BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount; _BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount; _BackOrderObject.SyncStatus = 0; _BackOrderObject.PrintStatus = 0; _BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint; _BackOrderObject.UploadStatus = 0; _BackOrderObject.UploadMessage = ""; _BackOrderObject.TicketId = ""; _BackOrderObject.OrgTradeNo = _OrderObject.TradeNo; //整单优惠 foreach (PromotionOrder promotion in _BackOrderObject.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //====== 更新明细内容 foreach (OrderItem item in _BackOrderObject.Items) { item.Id = IdWorkerUtils.Instance.NextId(); item.OrderId = _BackOrderObject.Id; item.TradeNo = _BackOrderObject.TradeNo; //单品优惠 foreach (PromotionItem promotion in item.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.ItemId = item.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //做法信息 foreach (FlavorItem flavor in item.Flavors) { flavor.isBackTicket = true; flavor.isWaiMaiTicket = true; flavor.Id = IdWorkerUtils.Instance.NextId(); flavor.OrderId = _BackOrderObject.Id; flavor.ItemId = item.Id; flavor.TradeNo = _BackOrderObject.TradeNo; flavor.RefundQuantity = flavor.Quantity; flavor.Amount = 0 - flavor.Amount; flavor.Quantity = 0; flavor.DiscountAmount = 0 - flavor.DiscountAmount; flavor.FinishDate = finishDate; } item.RefundQuantity = item.Quantity; item.Quantity = 0; item.Amount = 0 - item.Amount; item.FlavorAmount = 0 - item.FlavorAmount; item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount; item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount; item.TotalAmonut = 0 - item.TotalAmonut; item.SuitAddPrice = 0 - item.SuitAddPrice; item.SuitAmount = 0 - item.SuitAmount; item.SaleDate = finishDate; item.ChudaQty = 0; item.ChupinQty = 0; item.ChuxianQty = 0; item.KdsChupinQty = 0; item.FinishDate = finishDate; } //支付方式遍历 foreach (PayItem pay in _BackOrderObject.Pays) { pay.Id = IdWorkerUtils.Instance.NextId(); pay.TradeNo = _BackOrderObject.TradeNo; pay.PayNo = OrderUtils.Instance.GeneratePayNo(); pay.OrderId = _BackOrderObject.Id; pay.Amount = 0 - pay.Amount; pay.PaidAmount = 0 - pay.PaidAmount; pay.ChangeAmount = 0 - pay.ChangeAmount; pay.PayTime = finishDate; pay.FinishDate = finishDate; pay.OverAmount = 0 - pay.OverAmount; pay.ShiftName = _BackOrderObject.ShiftName; pay.ShiftNo = _BackOrderObject.ShiftNo; //zhangy 2020-02-20 Add,增加退单的门店结算扣率处理逻辑 //档口结算信息赋默认值 pay.Ext1 = "0"; pay.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(pay.No); if (payMode == null) { pay.IncomeFlag = 1; pay.OtherRateType = 0; pay.OtherRateValue = 0.00M; } else { pay.IncomeFlag = payMode.IncomeFlag; pay.OtherRateType = payMode.OtherRateType; pay.OtherRateValue = 0 - payMode.OtherRateValue; //zhangy 2020-02-20 Add,退单,扣率金额也退 pay.Ext2 = string.IsNullOrEmpty(pay.Ext2) ? "0" : ("-" + pay.Ext2); } } var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject); if (!isException) { _OrderObject.OrgTradeNo = _BackOrderObject.TradeNo; lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { db.Update(_OrderObject); trans.Complete(); } } } //LOGGER.Info("开始打印"); //this.ShowToastNotify(this, "正在打印退款单..."); //开始打印 //_BackOrderObject.PrintType = 1; //_BackOrderObject.RPrint = false; //this.PrintOrderObject(_BackOrderObject, true); logger.Info("饿了么退单完成"); } else { logger.Info("饿了么退单保存失败!"); } } else { logger.Info("饿了么获取订单信息异常!"); } } catch (Exception ex) { logger.Error(ex, "退单发生异常"); } } else if (waiMaiMap.ContainsKey("eleme") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme"])) { if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["eleme"].Split(','); //有饿了么外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.饿了么.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); if (orderIds.Length > 0) { //播放声音 SoundUtils.PlaySound("eleme"); logger.Info("饿了么播放声音"); // 是否自动接单 bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.ELEME_CONFIRM_PARAMETER, false); if (openConfirm && !Global.isHandOver) { logger.Info("饿了么自动接单"); int handOrderCount = orderIds.Length; for (int i = 0; i < orderIds.Length; i++) { string orderId = orderIds[i]; EleMeOrderConfirmRequest request = new EleMeOrderConfirmRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.OrderId = orderId; var response = OtherWaiMaiUtils.EleMeOrderConfirm(request); if (response != null) { logger.Info("饿了么自动接单:" + response.Item2); if (response.Item1) { handOrderCount = handOrderCount - 1; //接单成功刷新页面 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.饿了么.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount)) }); //接单成功打印订单 Task.Factory.StartNew(() => { try { EleMeOrderRequest request1 = new EleMeOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.OrderId = orderId; var response1 = OtherWaiMaiUtils.EleMeOrder(request1); if (response1 != null && response1.Item1) { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId); if (_OrderObject != null) { logger.Info("饿了么订单已存在"); return; } //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalEleme(response1.Item3.Data); logger.Info("饿了么组装本地数据库成功"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("饿了么订单入库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); if (orderObject.Items != null) { //单品优惠 foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { //档口结算信息赋默认值 payItem.Ext1 = "0"; payItem.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; //zhangy 2020-02-20 Add 添加结算参数计算 OrderUtils.SetPayModeDiscount(payItem, payMode); } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } //更新是否有订单需要上传的状态 logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true"); Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true"); Global.isHaveCenterTicket = true; logger.Info("饿了么订单入库成功"); trans.Complete(); } } } logger.Info("饿了么自动接单打印"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.BuilderEleMeVariable(response1.Item3.Data.ShopName, response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("饿了么", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info("饿了么标签打印成功"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info("饿了么外卖厨打标签成功"); //启用外卖商品绑定厨显方案 var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true); //启用外卖商品绑定厨打方案 var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true); if (planKit) { //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info("饿了么厨打成功"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info("饿了么出品成功"); } if (planKds) { //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info("饿了么厨显成功"); } } } catch (Exception ex) { logger.Info("饿了么异常" + ex.Message); } }); } } } } } } } else if (waiMaiMap.ContainsKey("eleme_force_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme_force_cancel"])) { string orderId = waiMaiMap["eleme_force_cancel"]; //防止推送多次退单 if (orderMap.ContainsKey("orderId" + orderId)) { return; } logger.Info("收到饿了么极速退单<" + orderId + ">"); orderMap.Add("orderId" + orderId, orderId); if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { //播放声音 SoundUtils.PlaySound("meituan_cancel"); logger.Info("饿了么极速退单播放声音"); } //如果本地有订单,将本地订单退单 try { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId); if (_OrderObject != null) { //退单打印逻辑 UserCancelPrinterTicket("饿了么", orderId, _OrderObject); if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo)) { logger.Info("订单已完全退单"); return; } //生成新单 OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject); string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //=========更新原单内容 //录入原单号 _BackOrderObject.Id = IdWorkerUtils.Instance.NextId(); //操作员工号 _BackOrderObject.WorkerNo = Global.Instance.Worker.No; //操作员名称 _BackOrderObject.WorkerName = Global.Instance.Worker.Name; _BackOrderObject.SaleDate = finishDate; //班次名称 _BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name; //班次编号 _BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No; //订单标识为 新建状态 _BackOrderObject.OrderStatus = OrderStatus.已退单; //订单创建时间 _BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //订单创建人 _BackOrderObject.CreateUser = Global.Instance.Worker.Name; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); //星期 _BackOrderObject.Weeker = weeker; //天气 _BackOrderObject.Weather = string.Empty; _BackOrderObject.ObjectId = ObjectId.GenerateNewStringId(); _BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo(); _BackOrderObject.FinishDate = finishDate; _BackOrderObject.Amount = 0 - _OrderObject.Amount; _BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount; _BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount; _BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount; _BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount; _BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount; _BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount; _BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount; _BackOrderObject.SyncStatus = 0; _BackOrderObject.PrintStatus = 0; _BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint; _BackOrderObject.UploadStatus = 0; _BackOrderObject.UploadMessage = ""; _BackOrderObject.TicketId = ""; _BackOrderObject.OrgTradeNo = _OrderObject.TradeNo; //整单优惠 foreach (PromotionOrder promotion in _BackOrderObject.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //====== 更新明细内容 foreach (OrderItem item in _BackOrderObject.Items) { item.Id = IdWorkerUtils.Instance.NextId(); item.OrderId = _BackOrderObject.Id; item.TradeNo = _BackOrderObject.TradeNo; //单品优惠 foreach (PromotionItem promotion in item.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.ItemId = item.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //做法信息 foreach (FlavorItem flavor in item.Flavors) { flavor.isBackTicket = true; flavor.isWaiMaiTicket = true; flavor.Id = IdWorkerUtils.Instance.NextId(); flavor.OrderId = _BackOrderObject.Id; flavor.ItemId = item.Id; flavor.TradeNo = _BackOrderObject.TradeNo; flavor.RefundQuantity = flavor.Quantity; flavor.Amount = 0 - flavor.Amount; flavor.Quantity = 0; flavor.DiscountAmount = 0 - flavor.DiscountAmount; flavor.FinishDate = finishDate; } item.RefundQuantity = item.Quantity; item.Quantity = 0; item.Amount = 0 - item.Amount; item.FlavorAmount = 0 - item.FlavorAmount; item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount; item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount; item.TotalAmonut = 0 - item.TotalAmonut; item.SuitAddPrice = 0 - item.SuitAddPrice; item.SuitAmount = 0 - item.SuitAmount; item.SaleDate = finishDate; item.ChudaQty = 0; item.ChupinQty = 0; item.ChuxianQty = 0; item.KdsChupinQty = 0; item.FinishDate = finishDate; } //支付方式遍历 foreach (PayItem pay in _BackOrderObject.Pays) { pay.Id = IdWorkerUtils.Instance.NextId(); pay.TradeNo = _BackOrderObject.TradeNo; pay.PayNo = OrderUtils.Instance.GeneratePayNo(); pay.OrderId = _BackOrderObject.Id; pay.Amount = 0 - pay.Amount; pay.PaidAmount = 0 - pay.PaidAmount; pay.ChangeAmount = 0 - pay.ChangeAmount; pay.PayTime = finishDate; pay.FinishDate = finishDate; pay.OverAmount = 0 - pay.OverAmount; pay.ShiftName = _BackOrderObject.ShiftName; pay.ShiftNo = _BackOrderObject.ShiftNo; //zhangy 2020-02-20 Add,增加退单的门店结算扣率处理逻辑 //档口结算信息赋默认值 pay.Ext1 = "0"; pay.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(pay.No); if (payMode == null) { pay.IncomeFlag = 1; pay.OtherRateType = 0; pay.OtherRateValue = 0.00M; } else { pay.IncomeFlag = payMode.IncomeFlag; pay.OtherRateType = payMode.OtherRateType; pay.OtherRateValue = 0 - payMode.OtherRateValue; //zhangy 2020-02-20 Add,退单,扣率金额也退 pay.Ext2 = string.IsNullOrEmpty(pay.Ext2) ? "0" : ("-" + pay.Ext2); } } var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject); if (!isException) { _OrderObject.OrgTradeNo = _BackOrderObject.TradeNo; lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { db.Update(_OrderObject); trans.Complete(); } } } logger.Info("饿了么极速退单完成"); } else { logger.Info("饿了么极速退单保存失败!"); } } else { logger.Info("饿了么极速退单,获取订单信息异常!"); } } catch (Exception ex) { logger.Error(ex, "极速退单发生异常"); } } } catch (Exception ex) { logger.Error(ex); } } /// /// 开启商家版美团外卖和餐道外卖 /// /// public static void sendSJWaiMaiMessage(string message) { if (logger == null) { logger = NLog.LogManager.GetCurrentClassLogger(); } logger.Info(">>>>>>sendSJWaiMaiMessage>>>>>>>>{0}", message); try { Dictionary waiMaiMap = JsonUtils.Deserialize>(message); if (waiMaiMap.ContainsKey("meituan") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan"])) { //如果发送的时间和本机相差15分钟,证明是无效消息 if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["meituan"].Split(','); //订单来源("0":美团大商户;"1":餐道美团),zhangy add 2020-01-14 string orderSource = waiMaiMap.ContainsKey("orderType") ? waiMaiMap["orderType"] : "0"; logger.Info("订单来源>>>>>{0}", orderSource); //有美团外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.美团外卖.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); if (orderIds.Length > 0) { //20240204 subin 改为异步播放 Task.Factory.StartNew(() => { //播放声音 SoundUtils.PlaySound("meituan_new"); logger.Info("美团外卖订单播放声音"); }); // 是否自动接单 bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.MEITUAN_CONFIRM_PARAMETER, false); if (openConfirm && !Global.isHandOver) { logger.Info("美团外卖自动接单<{0},{1}>", openConfirm, orderSource); int handOrderCount = orderIds.Length; for (int i = 0; i < orderIds.Length; i++) { string orderId = orderIds[i]; MeiTuanOrderConfirmRequest request = new MeiTuanOrderConfirmRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.OrderId = orderId; var response = OtherWaiMaiUtils.SJ_MeiTuanOrderConfirm(request); logger.Info("美团外卖接单结果:" + JsonUtils.Serialize(response)); //if (response != null) //{ // if (!response.Item1) // { // if (response.Item2.Equals("商家美团订单接单异常,本次操作无效")) // { // logger.Info("美团外卖第二次订单确认"); // response = OtherWaiMaiUtils.SJ_MeiTuanOrderConfirm(request); // } // } //} if (response != null) { logger.Info("美团外卖自动接单:" + response.Item2); if (response.Item1) { handOrderCount = handOrderCount - 1; //接单成功刷新页面 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.美团外卖.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount)) }); //接单成功打印订单 try { MeiTuanOrderRequest request1 = new MeiTuanOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.OrderId = orderId; var response1 = OtherWaiMaiUtils.SJ_MeiTuanOrder(request1); if (response1 != null && response1.Item1) { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId); if (_OrderObject != null) { logger.Info("美团外卖订单已存在"); return; } //logger.Info($"美团外卖自动接单组装本地数据,data:{JsonUtils.Serialize(response1.Item3.Data)}"); logger.Info("美团外卖自动接单组装本地数据"); //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalSJMeiTuan(response1.Item3.Data); logger.Info("美团外卖组装本地数据成功"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("美团外卖插入本地数据库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); //单品优惠 if (orderObject.Items != null) { foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { //档口结算信息赋默认值 payItem.Ext1 = "0"; payItem.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; //zhangy 2020-02-20 Add 添加结算参数计算 OrderUtils.SetPayModeDiscount(payItem, payMode); } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } logger.Info("美团外卖插入本地数据库成功"); //更新是否有订单需要上传的状态 logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true"); Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true"); Global.isHaveCenterTicket = true; trans.Complete(); } } } //20240204 subin 改为异步打印 Task.Factory.StartNew(() => { logger.Info($"美团外卖自动接单打印<{orderObject.TradeNo}>"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.SJBuilderMeiTuanVariable(response1.Item3.Data.Wm_poi_name, response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("美团外卖", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info($"美团外卖标签打印成功<{orderObject.TradeNo}>"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info($"美团外卖厨打标签成功<{orderObject.TradeNo}>"); //启用外卖商品绑定厨打方案 var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true); if (planKit) { //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info($"美团外卖厨打成功<{orderObject.TradeNo}>"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info($"美团外卖出品成功<{orderObject.TradeNo}>"); } //启用外卖商品绑定厨显方案 var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true); if (planKds) { //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info($"美团外卖厨显成功<{orderObject.TradeNo}>"); } }); } } catch (Exception ex) { logger.Info("美团外卖 接单成功打印订单异常" + ex.Message); } } } } } } } } else if (waiMaiMap.ContainsKey("meituan_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan_cancel"])) { string orderId = waiMaiMap["meituan_cancel"]; //防止推送多次退单 if (orderMap.ContainsKey("orderId" + orderId)) { return; } orderMap.Add("orderId" + orderId, orderId); if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { //20240204 subin 改为异步播放 Task.Factory.StartNew(() => { //播放声音 SoundUtils.PlaySound("meituan_cancel"); logger.Info("美团订单被取消播放声音"); }); } //如果本地有订单,将本地订单退单 try { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId); if (_OrderObject != null) { //退单打印逻辑 UserCancelPrinterTicket("美团外卖", orderId, _OrderObject); if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo)) { logger.Info("订单已完全退单"); return; } //生成新单 OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject); string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //=========更新原单内容 //录入原单号 _BackOrderObject.Id = IdWorkerUtils.Instance.NextId(); //操作员工号 _BackOrderObject.WorkerNo = Global.Instance.Worker.No; //操作员名称 _BackOrderObject.WorkerName = Global.Instance.Worker.Name; _BackOrderObject.SaleDate = finishDate; //班次名称 _BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name; //班次编号 _BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No; //订单标识为 新建状态 _BackOrderObject.OrderStatus = OrderStatus.已退单; //订单创建时间 _BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //订单创建人 _BackOrderObject.CreateUser = Global.Instance.Worker.Name; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); //星期 _BackOrderObject.Weeker = weeker; //天气 _BackOrderObject.Weather = string.Empty; _BackOrderObject.ObjectId = ObjectId.GenerateNewStringId(); _BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo(); _BackOrderObject.FinishDate = finishDate; _BackOrderObject.Amount = 0 - _OrderObject.Amount; _BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount; _BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount; _BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount; _BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount; _BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount; _BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount; _BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount; _BackOrderObject.SyncStatus = 0; _BackOrderObject.PrintStatus = 0; _BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint; _BackOrderObject.UploadStatus = 0; _BackOrderObject.UploadMessage = ""; _BackOrderObject.TicketId = ""; _BackOrderObject.OrgTradeNo = _OrderObject.TradeNo; //整单优惠 foreach (PromotionOrder promotion in _BackOrderObject.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //====== 更新明细内容 foreach (OrderItem item in _BackOrderObject.Items) { item.Id = IdWorkerUtils.Instance.NextId(); item.OrderId = _BackOrderObject.Id; item.TradeNo = _BackOrderObject.TradeNo; //单品优惠 foreach (PromotionItem promotion in item.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.ItemId = item.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //做法信息 foreach (FlavorItem flavor in item.Flavors) { flavor.isBackTicket = true; flavor.isWaiMaiTicket = true; flavor.Id = IdWorkerUtils.Instance.NextId(); flavor.OrderId = _BackOrderObject.Id; flavor.ItemId = item.Id; flavor.TradeNo = _BackOrderObject.TradeNo; flavor.RefundQuantity = flavor.Quantity; flavor.Amount = 0 - flavor.Amount; flavor.Quantity = 0; flavor.DiscountAmount = 0 - flavor.DiscountAmount; flavor.FinishDate = finishDate; } item.RefundQuantity = item.Quantity; item.Quantity = 0; item.Amount = 0 - item.Amount; item.FlavorAmount = 0 - item.FlavorAmount; item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount; item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount; item.TotalAmonut = 0 - item.TotalAmonut; item.SuitAddPrice = 0 - item.SuitAddPrice; item.SuitAmount = 0 - item.SuitAmount; item.SaleDate = finishDate; item.ChudaQty = 0; item.ChupinQty = 0; item.ChuxianQty = 0; item.KdsChupinQty = 0; item.FinishDate = finishDate; } //支付方式遍历 foreach (PayItem pay in _BackOrderObject.Pays) { pay.Id = IdWorkerUtils.Instance.NextId(); pay.TradeNo = _BackOrderObject.TradeNo; pay.PayNo = OrderUtils.Instance.GeneratePayNo(); pay.OrderId = _BackOrderObject.Id; pay.Amount = 0 - pay.Amount; pay.PaidAmount = 0 - pay.PaidAmount; pay.ChangeAmount = 0 - pay.ChangeAmount; pay.PayTime = finishDate; pay.FinishDate = finishDate; pay.OverAmount = 0 - pay.OverAmount; pay.ShiftName = _BackOrderObject.ShiftName; pay.ShiftNo = _BackOrderObject.ShiftNo; } //zhangy 2020-02-20 Add SaveOrderObject内置添加了结算参数的计算 var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject); if (!isException) { _OrderObject.OrgTradeNo = _BackOrderObject.TradeNo; lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { db.Update(_OrderObject); trans.Complete(); } } } logger.Info("美团退单完成"); } else { logger.Info("美团退单保存失败!"); } } else { logger.Info("美团获取订单信息异常"); } } catch (Exception ex) { logger.Error(ex, "美团退单发生异常"); } } else if (waiMaiMap.ContainsKey("eleme_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme_cancel"])) { string orderId = waiMaiMap["eleme_cancel"]; //防止推送多次退单 if (orderMap.ContainsKey("orderId" + orderId)) { return; } orderMap.Add("orderId" + orderId, orderId); if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { //20240204 subin 改为异步播放 Task.Factory.StartNew(() => { //播放声音 SoundUtils.PlaySound("meituan_cancel"); logger.Info("饿了么订单被取消播放声音"); }); } //如果本地有订单,将本地订单退单 try { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId); if (_OrderObject != null) { //退单打印逻辑 UserCancelPrinterTicket("饿了么", orderId, _OrderObject); if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo)) { logger.Info("订单已完全退单"); return; } //生成新单 OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject); string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //=========更新原单内容 //录入原单号 _BackOrderObject.Id = IdWorkerUtils.Instance.NextId(); //操作员工号 _BackOrderObject.WorkerNo = Global.Instance.Worker.No; //操作员名称 _BackOrderObject.WorkerName = Global.Instance.Worker.Name; _BackOrderObject.SaleDate = finishDate; //班次名称 _BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name; //班次编号 _BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No; //订单标识为 新建状态 _BackOrderObject.OrderStatus = OrderStatus.已退单; //订单创建时间 _BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //订单创建人 _BackOrderObject.CreateUser = Global.Instance.Worker.Name; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); //星期 _BackOrderObject.Weeker = weeker; //天气 _BackOrderObject.Weather = string.Empty; _BackOrderObject.ObjectId = ObjectId.GenerateNewStringId(); _BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo(); _BackOrderObject.FinishDate = finishDate; _BackOrderObject.Amount = 0 - _OrderObject.Amount; _BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount; _BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount; _BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount; _BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount; _BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount; _BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount; _BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount; _BackOrderObject.SyncStatus = 0; _BackOrderObject.PrintStatus = 0; _BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint; _BackOrderObject.UploadStatus = 0; _BackOrderObject.UploadMessage = ""; _BackOrderObject.TicketId = ""; _BackOrderObject.OrgTradeNo = _OrderObject.TradeNo; //整单优惠 foreach (PromotionOrder promotion in _BackOrderObject.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //====== 更新明细内容 foreach (OrderItem item in _BackOrderObject.Items) { item.Id = IdWorkerUtils.Instance.NextId(); item.OrderId = _BackOrderObject.Id; item.TradeNo = _BackOrderObject.TradeNo; //单品优惠 foreach (PromotionItem promotion in item.Promotions) { promotion.Id = IdWorkerUtils.Instance.NextId(); promotion.OrderId = _BackOrderObject.Id; promotion.ItemId = item.Id; promotion.TradeNo = _BackOrderObject.TradeNo; promotion.Amount = 0 - promotion.Amount; promotion.DiscountAmount = 0 - promotion.DiscountAmount; promotion.ReceivableAmount = 0 - promotion.ReceivableAmount; promotion.FinishDate = finishDate; } //做法信息 foreach (FlavorItem flavor in item.Flavors) { flavor.isBackTicket = true; flavor.isWaiMaiTicket = true; flavor.Id = IdWorkerUtils.Instance.NextId(); flavor.OrderId = _BackOrderObject.Id; flavor.ItemId = item.Id; flavor.TradeNo = _BackOrderObject.TradeNo; flavor.RefundQuantity = flavor.Quantity; flavor.Amount = 0 - flavor.Amount; flavor.Quantity = 0; flavor.DiscountAmount = 0 - flavor.DiscountAmount; flavor.FinishDate = finishDate; } item.RefundQuantity = item.Quantity; item.Quantity = 0; item.Amount = 0 - item.Amount; item.FlavorAmount = 0 - item.FlavorAmount; item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount; item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount; item.TotalAmonut = 0 - item.TotalAmonut; item.SuitAddPrice = 0 - item.SuitAddPrice; item.SuitAmount = 0 - item.SuitAmount; item.SaleDate = finishDate; item.ChudaQty = 0; item.ChupinQty = 0; item.ChuxianQty = 0; item.KdsChupinQty = 0; item.FinishDate = finishDate; } //支付方式遍历 foreach (PayItem pay in _BackOrderObject.Pays) { pay.Id = IdWorkerUtils.Instance.NextId(); pay.TradeNo = _BackOrderObject.TradeNo; pay.PayNo = OrderUtils.Instance.GeneratePayNo(); pay.OrderId = _BackOrderObject.Id; pay.Amount = 0 - pay.Amount; pay.PaidAmount = 0 - pay.PaidAmount; pay.ChangeAmount = 0 - pay.ChangeAmount; pay.PayTime = finishDate; pay.FinishDate = finishDate; pay.OverAmount = 0 - pay.OverAmount; pay.ShiftName = _BackOrderObject.ShiftName; pay.ShiftNo = _BackOrderObject.ShiftNo; } //zhangy 2020-02-20 Add SaveOrderObject内置添加了结算参数的计算 var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject); if (!isException) { _OrderObject.OrgTradeNo = _BackOrderObject.TradeNo; lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { db.Update(_OrderObject); trans.Complete(); } } } //LOGGER.Info("开始打印"); //this.ShowToastNotify(this, "正在打印退款单..."); //开始打印 //_BackOrderObject.PrintType = 1; //_BackOrderObject.RPrint = false; //this.PrintOrderObject(_BackOrderObject, true); logger.Info("饿了么退单完成"); } else { logger.Info("饿了么退单保存失败!"); } } else { logger.Info("饿了么获取订单信息异常!"); } } catch (Exception ex) { logger.Error(ex, "退单发生异常"); } } else if (waiMaiMap.ContainsKey("eleme") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme"])) { if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["eleme"].Split(','); //有饿了么外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.饿了么.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); if (orderIds.Length > 0) { //播放声音 SoundUtils.PlaySound("eleme"); logger.Info("饿了么播放声音"); // 是否自动接单 bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.ELEME_CONFIRM_PARAMETER, false); if (openConfirm && !Global.isHandOver) { logger.Info("饿了么自动接单"); int handOrderCount = orderIds.Length; for (int i = 0; i < orderIds.Length; i++) { string orderId = orderIds[i]; EleMeOrderConfirmRequest request = new EleMeOrderConfirmRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.OrderId = orderId; var response = OtherWaiMaiUtils.EleMeOrderConfirm(request); if (response != null) { logger.Info("饿了么自动接单:" + response.Item2); if (response.Item1) { handOrderCount = handOrderCount - 1; //接单成功刷新页面 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.饿了么.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount)) }); //接单成功打印订单 Task.Factory.StartNew(() => { try { EleMeOrderRequest request1 = new EleMeOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.OrderId = orderId; var response1 = OtherWaiMaiUtils.EleMeOrder(request1); if (response1 != null && response1.Item1) { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId); if (_OrderObject != null) { logger.Info("饿了么订单已存在"); return; } //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalEleme(response1.Item3.Data); logger.Info("饿了么组装本地数据库成功"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("饿了么订单入库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); if (orderObject.Items != null) { //单品优惠 foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { //档口结算信息赋默认值 payItem.Ext1 = "0"; payItem.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; //zhangy 2020-02-20 Add 添加结算参数计算 OrderUtils.SetPayModeDiscount(payItem, payMode); } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } //更新是否有订单需要上传的状态 logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true"); Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true"); Global.isHaveCenterTicket = true; logger.Info("饿了么订单入库成功"); trans.Complete(); } } } logger.Info("饿了么自动接单打印"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.BuilderEleMeVariable(response1.Item3.Data.ShopName, response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("饿了么", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info("饿了么标签打印成功"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info("饿了么外卖厨打标签成功"); //启用外卖商品绑定厨显方案 var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true); //启用外卖商品绑定厨打方案 var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true); if (planKit) { //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info("饿了么厨打成功"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info("饿了么出品成功"); } if (planKds) { //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info("饿了么厨显成功"); } } } catch (Exception ex) { logger.Info("饿了么异常" + ex.Message); } }); } } } } } } } } catch (Exception ex) { logger.Error(ex); } } /// /// 微信公众号订单 /// /// public static void sendWeixinMessage(string message) { logger.Info(">>>>>>sendWeixinMessage>>>>>>>>{0}", message); try { Dictionary waiMaiMap = JsonUtils.Deserialize>(message); if (waiMaiMap.ContainsKey("weixin") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["weixin"])) { //如果发送的时间和本机相差15分钟,证明是无效消息 if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["weixin"].Split(','); //有美团外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.微信订单.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.微信订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); if (orderIds.Length > 0) { //播放声音 SoundUtils.PlaySound("weixin"); logger.Info("微信订单播放声音"); // 是否自动接单 bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.WEIXIN_CONFIRM_PARAMETER, false); if (openConfirm) { int handOrderCount = orderIds.Length; for (int i = 0; i < orderIds.Length; i++) { string orderId = orderIds[i]; WeiXinOrderConfirmRequest request = new WeiXinOrderConfirmRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.TicketId = orderId; var response = WeiXinOrderUtils.WeiXinOrderConfirm(request); if (response != null) { logger.Info("微信订单自动接单:" + response.Item2); if (response.Item1) { handOrderCount = handOrderCount - 1; //接单成功刷新页面 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.微信订单.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.微信订单, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount)) }); //接单成功打印订单 Task.Factory.StartNew(() => { try { WeiXinOrderRequest request1 = new WeiXinOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.TicketId = orderId; var response1 = WeiXinOrderUtils.WeiXinOrder(request1); if (response1 != null && response1.Item1) { string orderNo = response1.Item3.Data.TicketNo; OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("7" + orderNo); if (_OrderObject != null) { logger.Info("微信订单已存在"); return; } //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalWeiXin(response1.Item3.Data); logger.Info("微信订单组装完成"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("微信订单入库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); if (orderObject.Items != null) { //单品优惠 foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //如果是外卖订单,存储配送信息 if (orderObject.OrderType == OrderType.微信点餐 && response1.Item3.Data.BusMode == 2) { WxWaimaiOrder wxWaimaiOrder = new WxWaimaiOrder(); wxWaimaiOrder.Id = IdWorkerUtils.Instance.NextId(); wxWaimaiOrder.TenantId = orderObject.TenantId; wxWaimaiOrder.TicketNo = orderObject.TableNo; wxWaimaiOrder.StoreId = orderObject.StoreId; wxWaimaiOrder.StoreNo = orderObject.StoreNo; wxWaimaiOrder.StoreName = orderObject.StoreName; wxWaimaiOrder.WorkerNo = orderObject.WorkerNo; wxWaimaiOrder.ShiftId = Global.Instance.BusinessPlanLog.PlanId; wxWaimaiOrder.ShiftNo = Global.Instance.BusinessPlanLog.No; wxWaimaiOrder.ReceiveName = ""; wxWaimaiOrder.ReceiveMobile = response1.Item3.Data.ReceiveMobile; wxWaimaiOrder.ReceiveAddress = response1.Item3.Data.ReceiveAddress; wxWaimaiOrder.DistributionFee = response1.Item3.Data.DistributionFee; wxWaimaiOrder.Type = 1; wxWaimaiOrder.IsIncome = 1; wxWaimaiOrder.Status = 0; wxWaimaiOrder.CreateDate = orderObject.FinishDate; wxWaimaiOrder.CreateUser = orderObject.CreateUser; db.Insert(wxWaimaiOrder); } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } logger.Info("微信订单入库完成"); //更新是否有订单需要上传的状态 logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true"); Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true"); Global.isHaveCenterTicket = true; trans.Complete(); } } } logger.Info("微信订单自动接单打印"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.BuilderWeiXinVariable(response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("微信订单", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info("微信订单打印标签完成"); //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info("微信订单厨打完成"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info("微信订单厨打标签成功"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info("微信订单出品完成"); //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info("微信订单KDS完成"); } } catch (Exception ex) { logger.Info("微信订单异常" + ex.Message); } }); } } } } } } } } catch (Exception ex) { logger.Error(ex); } } //public static void sendJwWeixinMessage(string message) //{ // var _data = JsonUtils.Deserialize>(message); // JuWeiAppOrderProxy _juWeiAppOrderProxy = new JuWeiAppOrderProxy(); // if (_data == null) // { // logger.Info("订单推送数据解析可能出现问题"); // return; // } // if (_data.ContainsKey("program") && _data.ContainsKey("date") && !"".Equals(_data["program"])) // { // //如果发送的时间和本机相差15分钟,证明是无效消息 // if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(_data["date"])) < 15) // { // string[] orderIds = _data["qimai"].Split(','); // if (orderIds.Length > 0) // { // foreach (var item in orderIds) // { // //自动接单 // if (this.pictureBox4.Tag.ToString().Equals("1")) // { // Task.Factory.StartNew(() => // { // try // { // logger.Info("开始打印!"); // //请求接口查询订单 // var _order = _juWeiAppOrderProxy.GetOrder(item); // if (_order == null) // { // logger.Info("推送的订单号在服务器中查询不到!"); // return; // } // //非待接单 // if (_order.Item3.Status != 1) // { // return; // } // //请求接口修改订单状态 // var _status = _juWeiAppOrderProxy.SetOrderStatus(ProgramOrderOperationType.Confirm, item); // if (!_status.Item1) // { // logger.Info("自动接单失败!"); // return; // } // JuWeiAppOrderProxy.PrintOrder(_order.Item3); // } // catch (Exception ex) // { // logger.Info(ex); // this.ShowToastNotify(this, "打印异常!"); // } // }); // } // else // { // //刷新待接单数据 // GetHandleOrder(); // } // } // } // } // } //} /// /// 企迈订单 /// /// public static void sendQiMaiMessage(string message) { logger.Info(">>>>>>sendQiMaiMessage>>>>>>>>{0}", message); try { // 是否自动接单 bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.QIMAI_CONFIRM_PARAMETER, false); Dictionary waiMaiMap = JsonUtils.Deserialize>(message); if (waiMaiMap.ContainsKey("qimai_status") && !"".Equals(waiMaiMap["qimai_status"]) && waiMaiMap.ContainsKey("date") && waiMaiMap.ContainsKey("refundStatus"))//企迈退单 { logger.Info("收到企迈小程序退单申请"); string[] orderIds = waiMaiMap["qimai_status"].Split(','); //有外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.QM小程序订单.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); // 播放声音 SoundUtils.PlaySound("weixin"); logger.Info("企迈小程序订单播放声音,通知手动接单"); MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai"); ////手动接单,发送界面更新通知 //if (!openConfirm) //{ // // 播放声音 // SoundUtils.PlaySound("weixin"); // logger.Info("企迈小程序订单播放声音,通知手动接单"); // MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai"); // return; //} } else if (waiMaiMap.ContainsKey("qimai") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["qimai"]))//企迈外卖订单 { //如果发送的时间和本机相差15分钟,证明是无效消息 if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["qimai"].Split(','); //有外卖订单 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.QM小程序订单.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); //手动接单,发送界面更新通知 if (!openConfirm) { // 播放声音 SoundUtils.PlaySound("weixin"); logger.Info("企迈小程序订单播放声音,通知手动接单"); MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai"); return; } //自动接单处理 if (orderIds.Length > 0) { int handOrderCount = orderIds.Length; for (int i = 0; i < orderIds.Length; i++) { string orderId = orderIds[i]; QiMaiOrderReceiveRequest request = new QiMaiOrderReceiveRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.OrderId = orderId; var response = QiMaiUtils.QiMaiOrderReceive(request); if (response != null && response.Item1) { //播放声音 SoundUtils.PlaySound("weixin"); logger.Info("微信(QM)外卖订单自动接单:" + response.Item2); if (response.Item1) { handOrderCount = handOrderCount - 1; //接单成功刷新页面 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.QM小程序订单.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount)) }); //接单成功打印订单 Task.Factory.StartNew(() => { try { QiMaiOrderRequest request1 = new QiMaiOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.OrderId = orderId; var response1 = QiMaiUtils.QiMaiOrderInfo(request1); if (response1 != null && response1.Item1) { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("7" + orderId); if (_OrderObject != null) { logger.Info("微信(QM)订单已存在"); return; } //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalQiMai(response1.Item3.Data); logger.Info("微信订单(QM)组装完成"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("微信订单入库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); //单品优惠 if (orderObject.Items != null) { foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { //档口结算信息赋默认值 payItem.Ext1 = "0"; payItem.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; //zhangy 2020-02-20 Add 添加结算参数计算 OrderUtils.SetPayModeDiscount(payItem, payMode); } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //如果是外卖订单,存储配送信息 if (orderObject.OrderType == OrderType.微信点餐 && response1.Item3.Data.TypeCate == 3) { WxWaimaiOrder wxWaimaiOrder = new WxWaimaiOrder(); wxWaimaiOrder.Id = IdWorkerUtils.Instance.NextId(); wxWaimaiOrder.TenantId = orderObject.TenantId; wxWaimaiOrder.TicketNo = orderObject.TableNo; wxWaimaiOrder.StoreId = orderObject.StoreId; wxWaimaiOrder.StoreNo = orderObject.StoreNo; wxWaimaiOrder.StoreName = orderObject.StoreName; wxWaimaiOrder.WorkerNo = orderObject.WorkerNo; wxWaimaiOrder.ShiftId = Global.Instance.BusinessPlanLog.PlanId; wxWaimaiOrder.ShiftNo = Global.Instance.BusinessPlanLog.No; wxWaimaiOrder.ReceiveName = response1.Item3.Data.AcceptName; wxWaimaiOrder.ReceiveMobile = response1.Item3.Data.AcceptMobile; wxWaimaiOrder.ReceiveAddress = response1.Item3.Data.Address; wxWaimaiOrder.DistributionFee = response1.Item3.Data.Freight; wxWaimaiOrder.Type = response1.Item3.Data.Express; if (wxWaimaiOrder.Type == 0) { wxWaimaiOrder.IsIncome = 1; } else { wxWaimaiOrder.IsIncome = 0; } wxWaimaiOrder.Status = 0; wxWaimaiOrder.CreateDate = orderObject.FinishDate; wxWaimaiOrder.CreateUser = orderObject.CreateUser; db.Insert(wxWaimaiOrder); } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } logger.Info("微信订单入库完成"); //更新是否有订单需要上传的状态 logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true"); Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true"); Global.isHaveCenterTicket = true; trans.Complete(); } } } logger.Info("微信(QM)订单自动接单打印"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.BuilderQiMaiVariable(response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("在线订单", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info("微信订单(QM)打印标签完成"); //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info("微信订单(QM)厨打完成"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info("微信订单(QM)厨打标签成功"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info("微信订单(QM)出品完成"); //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info("微信订单(QM)KDS完成"); //企迈外卖订单,通知刷新接单UI MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai"); } } catch (Exception ex) { logger.Info("微信订单(QM)异常" + ex.Message); } }); } } } } } } else if (waiMaiMap.ContainsKey("qimai_tx") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["qimai_tx"]))//企迈堂食订单 { //如果发送的时间和本机相差15分钟,证明是无效消息 if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15) { string[] orderIds = waiMaiMap["qimai_tx"].Split(','); //有企迈外卖订单,通知UI添加角标 MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity() { Subject = Constant.MENU_TITLE_CHANGED_NOTIFY, SubSubject = ModuleKeyCode.QM小程序订单.ToString(), Operate = MsgEntityOperate.发布, Data = new Tuple(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length)) }); //接单处理,zhangy 2020-02-20 Edit 企迈小程序堂食订单直接确认接单完成状态 if (orderIds.Length > 0) { //播放声音 SoundUtils.PlaySound("weixin"); logger.Info("企迈小程序堂食订单播放声音,自动接单"); foreach (var orderId in orderIds) { //接单成功打印订单 Task.Factory.StartNew(() => { try { QiMaiOrderRequest request1 = new QiMaiOrderRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.OrderId = orderId; var response1 = QiMaiUtils.QiMaiOrderInfo(request1); if (response1 != null && response1.Item1) { OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("7" + orderId); if (_OrderObject != null) { logger.Info("微信(QM)订单已存在"); return; } //组装本地数据 OrderObject orderObject = OtherWaiMaiApi.getOrderLocalQiMai(response1.Item3.Data); logger.Info("微信订单(QM)组装完成"); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { using (var trans = db.GetTransaction()) { logger.Info("企迈微信订单入库"); //遍历获取成本价 foreach (OrderItem item in orderObject.Items) { ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId)); if (productSpec != null) { item.CostPrice = productSpec.CostPrice; } else { item.CostPrice = 0.00M; } } //整单 db.Insert(orderObject); //单品明细 db.InsertBatch(orderObject.Items); //单品优惠 if (orderObject.Items != null) { foreach (var promotion in orderObject.Items) { if (promotion.Promotions != null && promotion.Promotions.Count > 0) { db.InsertBatch(promotion.Promotions); } } } //添加支付汇总的必填字段 foreach (PayItem payItem in orderObject.Pays) { //档口结算信息赋默认值 payItem.Ext1 = "0"; payItem.Ext2 = "0"; var payMode = OrderUtils.GetPayMode(payItem.No); if (payMode == null) { payItem.IncomeFlag = 1; payItem.OtherRateType = 0; payItem.OtherRateValue = 0.00M; } else { payItem.IncomeFlag = payMode.IncomeFlag; payItem.OtherRateType = payMode.OtherRateType; payItem.OtherRateValue = payMode.OtherRateValue; //zhangy 2020-02-20 Add 添加结算参数计算 OrderUtils.SetPayModeDiscount(payItem, payMode); } } //支付明细 db.InsertBatch(orderObject.Pays); //做法明细 foreach (var flavor in orderObject.Items) { if (flavor.Flavors.Count > 0) { db.InsertBatch(flavor.Flavors); } } //如果是外卖订单,存储配送信息 if (orderObject.OrderType == OrderType.微信点餐 && response1.Item3.Data.TypeCate == 3) { WxWaimaiOrder wxWaimaiOrder = new WxWaimaiOrder(); wxWaimaiOrder.Id = IdWorkerUtils.Instance.NextId(); wxWaimaiOrder.TenantId = orderObject.TenantId; wxWaimaiOrder.TicketNo = orderObject.TableNo; wxWaimaiOrder.StoreId = orderObject.StoreId; wxWaimaiOrder.StoreNo = orderObject.StoreNo; wxWaimaiOrder.StoreName = orderObject.StoreName; wxWaimaiOrder.WorkerNo = orderObject.WorkerNo; wxWaimaiOrder.ShiftId = Global.Instance.BusinessPlanLog.PlanId; wxWaimaiOrder.ShiftNo = Global.Instance.BusinessPlanLog.No; wxWaimaiOrder.ReceiveName = response1.Item3.Data.AcceptName; wxWaimaiOrder.ReceiveMobile = response1.Item3.Data.AcceptMobile; wxWaimaiOrder.ReceiveAddress = response1.Item3.Data.Address; wxWaimaiOrder.DistributionFee = response1.Item3.Data.Freight; wxWaimaiOrder.Type = response1.Item3.Data.Express; if (wxWaimaiOrder.Type == 0) { wxWaimaiOrder.IsIncome = 1; } else { wxWaimaiOrder.IsIncome = 0; } wxWaimaiOrder.Status = 0; wxWaimaiOrder.CreateDate = orderObject.FinishDate; wxWaimaiOrder.CreateUser = orderObject.CreateUser; db.Insert(wxWaimaiOrder); } //8、保存耗料信息 List orderBurdenList = new List(); //第一步组装耗料数量 foreach (var item in orderObject.Items) { //第一步先看看商品是否是管理库存的直销品 var lists = Global.Product._productList; var selectProduct = new List(); selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId)); if (selectProduct != null && selectProduct.Count > 0) { ProductExt productExt = selectProduct[0]; if (productExt.StockFlag == 1) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = item.ProductId; orderProductBurden.BurdenSpecId = item.SpecId; orderProductBurden.SalesUnitId = item.ProductUnitId; orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity; orderBurdenList.Add(orderProductBurden); } } //第二步获取门店耗料 StringBuilder sqlBuf = new StringBuilder(); sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'"); string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId); List productBurdenList = db.Query(productBurdenSql).ToList(); if (productBurdenList != null && productBurdenList.Count > 0) { foreach (ProductBurden productBurden in productBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = productBurden.BurdenProductId; orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId; orderProductBurden.SalesUnitId = productBurden.SalesUnitId; orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } //做法耗料 foreach (var flavorItem in item.Flavors) { StringBuilder sqlBuf1 = new StringBuilder(); sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'"); string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId); List makeBurdenList = db.Query(makeBurdenSql).ToList(); if (makeBurdenList != null && makeBurdenList.Count > 0) { foreach (MakeBurden makeBurden in makeBurdenList) { OrderProductBurden orderProductBurden = new OrderProductBurden(); orderProductBurden.OrderId = orderObject.Id; orderProductBurden.TenantId = orderObject.TenantId; orderProductBurden.TradeNo = orderObject.TradeNo; orderProductBurden.BurdenProductId = makeBurden.BurdenProductId; orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId; orderProductBurden.SalesUnitId = makeBurden.SalesUnitId; orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity); orderBurdenList.Add(orderProductBurden); } } } } //第二部合并耗料数量 if (orderBurdenList != null && orderBurdenList.Count > 0) { List temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList(); Dictionary typeMap = new Dictionary(); string burdenProductId_temp = ""; string burdenSpecId_temp = ""; string salesUnitId_temp = ""; int j = 0; List> result1 = new List>(); decimal salesAmount = 0.00M; int listLength = temList.Count; foreach (OrderProductBurden orderProductBurden in temList) { string burdenSpecId = orderProductBurden.BurdenSpecId; if (!burdenSpecId_temp.Equals(burdenSpecId)) { if (j != 0) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } salesAmount = 0.00M; burdenProductId_temp = orderProductBurden.BurdenProductId; burdenSpecId_temp = orderProductBurden.BurdenSpecId; salesUnitId_temp = orderProductBurden.SalesUnitId; } salesAmount = salesAmount + orderProductBurden.SalesAmount; j = j + 1; if (j == listLength) { typeMap.Add("orderId", orderProductBurden.OrderId); typeMap.Add("tenantId", orderProductBurden.TenantId); typeMap.Add("tradeNo", orderProductBurden.TradeNo); typeMap.Add("burdenProductId", burdenProductId_temp); typeMap.Add("burdenSpecId", burdenSpecId_temp); typeMap.Add("salesUnitId", salesUnitId_temp); typeMap.Add("salesAmount", salesAmount); result1.Add(typeMap); //分类改变时,清除缓存 typeMap = new Dictionary(); } } List list = new List(); foreach (Dictionary map in result1) { OrderProductBurden entity = new OrderProductBurden(); entity.Id = IdWorkerUtils.Instance.NextId(); entity.StoreId = orderObject.StoreId; entity.OrderId = StringUtils.GetString(map["orderId"]); entity.TenantId = StringUtils.GetString(map["tenantId"]); entity.TradeNo = StringUtils.GetString(map["tradeNo"]); entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]); entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]); entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]); entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]); list.Add(entity); } db.InsertBatch(list); } logger.Info("微信(QM)订单入库完成"); //更新是否有订单需要上传的状态 trans.Complete(); } } //通知数据上传 Global.isHaveUpLoadTicket = true; Global.isHaveBurdenTicket = true; Global.isHaveCenterTicket = true; } logger.Info("微信(QM)订单自动接单打印"); //构建收银小票模版参数打印 var vars = WaiMaiHelper.BuilderQiMaiVariable(response1.Item3.Data, false); Tuple result = WaiMaiHelper.PrinterTicket("在线订单", vars); logger.Error(string.Format("{0}", result.Item2)); //打印标签 LabelPrintHelper.PrintOrderLabel(orderObject); logger.Info("微信订单(QM)打印标签完成"); //执行厨打 ChuDaHelper.KitchenPrinter(orderObject); logger.Info("微信订单(QM)厨打完成"); //执行厨打标签 ChuDaHelper.KitchenLabelPrinter(orderObject); logger.Info("微信订单(QM)厨打标签成功"); //执行出品 ChuDaHelper.MadePrinter(orderObject); logger.Info("微信订单(QM)出品完成"); //通知厨显 UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject); logger.Info("微信订单(QM)KDS完成"); //企迈堂食订单,通知刷新接单UI MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai_tx"); } } catch (Exception ex) { logger.Info("微信订单(QM)" + ex.Message); } }); } } } } } catch (Exception ex) { logger.Error(ex); } } public static OrderObject getOrderLocalEleme(EleMeOrderResponse response) { var finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); try { bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI, false); //是否根据名称匹配 bool otherWaimaiMappingSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_MAPPING, false); //厨显 bool otherWaimaiDefaultKDS = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_DEFAULTKDS, true); var KDSLists = Global.KdsPlan._kdsPlanList; if (otherWaimaiSet) { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.OriginalPrice - response.DeliverFee;//消费金额(订单总额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 _orderObject.CreateDate = response.CreatedAt;//创建时间 _orderObject.CreateUser = "eleme";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = finishDate;//完成时间 _orderObject.PaidAmount = response.OriginalPrice - response.DeliverFee;//实收金额(订单总额-配送费) _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 //商家应收款 decimal wmPoiReceiveCent = response.Income; //计算需要分摊的总额 decimal dicountTotal = response.OriginalPrice - response.DeliverFee - wmPoiReceiveCent; decimal havDicount = 0.00M; // 商品原价总额,餐盒总金额 decimal productAmount = 0.00M; decimal boxAmount = 0.00M; List elemeList = new List(); List elemeListExtra = new List(); int itemCount = 0; foreach (EleMeGroups group in response.Groups) { if ("normal".Equals(group.Type)) { foreach (EleMeDishItem item in group.Items) { productAmount += item.Total; elemeList.Add(item); itemCount += 1; } } if ("extra".Equals(group.Type)) { foreach (EleMeDishItem item in group.Items) { boxAmount += item.Total; elemeListExtra.Add(item); } } } List itemList = new List(); _orderObject.Items = itemList;//商品列表 int i = 0; int j = 0; foreach (EleMeDishItem item in elemeList) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { string template0 = "select * from pos_mapping_product_eleme where specId ='{0}' "; string sql0 = string.Format(template0, item.Id); List elemeMappingList = db.Fetch(sql0); MappingDishEleMe elemeMapping = null; if (elemeMappingList != null && elemeMappingList.Count > 0) { elemeMapping = elemeMappingList[0]; } if (elemeMapping == null)//找不到映射跳过 { product = null; } else { string[] name_spec = item.Name.Split('-'); string newSpecs = ""; if (item.NewSpecs != null && item.NewSpecs.Count() > 0) { foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs) { newSpecs = newSpecs + eleMeDishItemSpec.Value + ","; } } if (!"".Equals(newSpecs) && newSpecs.Length > 0) { newSpecs = newSpecs.Substring(0, newSpecs.Length - 1); } string sql1 = ""; if (otherWaimaiMappingSet) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');"; sql1 = string.Format(template1, elemeMapping.ErpSpecId, name_spec[0], newSpecs); } else { string template1 = SqlConstant.ProductExt + " where s.id = '{0}';"; sql1 = string.Format(template1, elemeMapping.ErpSpecId); } List productList = db.Fetch(sql1); if (productList.Count > 0) { product = productList[0]; } } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChupinFlag = "0";//是否出品 product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.KdsFlag = 1; if (otherWaimaiDefaultKDS && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; product.Chuxian = kdsPlan.Id;//厨显ID product.ChuxianFlag = "1";//是否厨显 product.ChuxianTime = 5;//厨显超时时间 } else { product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 } //===2019-06-26 取消默认出品 //if (otherWaimaiDefaultKDS && KDSLists.Count > 0) //{ // KdsPlan kdsPlan = KDSLists[0]; // product.KdsChupin = kdsPlan.Id;//厨显出品ID // product.KdsChupinFlag = "1";//厨显是否出品 // product.KdsChupinTime = 5;//厨显出品超时时间 //} //else //{ // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 //} product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 string[] name_spec = item.Name.Split('-'); product.Name = name_spec[0];//商品名称 product.Id = string.Format("{0}", item.SkuId);//商品ID product.No = string.Format("{0}", item.SkuId);//商品编号 product.UnitId = "0";//商品单位ID product.UnitName = "份";//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Name;//简称 product.SpecId = string.Format("{0}", item.Id);//规格ID product.SuitFlag = 0; string newSpecs = ""; if (item.NewSpecs != null && item.NewSpecs.Count() > 0) { foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs) { newSpecs = newSpecs + eleMeDishItemSpec.Value + ","; } } if (!"".Equals(newSpecs) && newSpecs.Length > 0) { newSpecs = newSpecs.Substring(0, newSpecs.Length - 1); } product.SpecName = newSpecs;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "5";//商品类别ID product.TypeName = "饿了么菜品";//商品类别名称 product.WeighFlag = 0;//是否称重 } } if (itemCount == j) { decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Quantity), 2); order.DiscountPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 2) - discountPrice; } else { //分摊优惠=(单品总额/订单总额)*优惠总额 decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Quantity) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Quantity), 2); havDicount += discountPrice * StringUtils.GetDecimal(item.Quantity); order.DiscountPrice = item.Price - discountPrice;//折后价 } order.Amount = item.Total;//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.Chuxian = kdsPlan.Id;//厨显ID order.ChuxianFlag = "1";//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = 5;//厨显超时时间 } else { order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 } if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.KdsChupin = kdsPlan.Id;//厨显出品ID order.KdsChupinFlag = "1";//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = 5;//厨显出品超时时间 } else { order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 } order.CreateDate = response.CreatedAt;//创建时间 order.CreateUser = "eleme";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DispatchPrice = item.Price;//批发价 order.DisplayName = item.Name;//打印名称 order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = item.Quantity;//商品数量 order.RefundQuantity = 0.00M;//退菜数量 order.Remark = "饿了么单品"; if (product.SuitFlag == 0) { order.RowState = OrderRowState.普通; } else { order.RowState = OrderRowState.套餐主; } order.SaleDate = response.CreatedAt;//创建时间 order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Total;//总计金额 order.TradeNo = "5" + response.OrderId;//订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = ""; order.OtherWaimaiPrintName = item.Name; List flavorItemList = new List(); if (item.Attributes != null && item.Attributes.Count > 0) { foreach (EleMeDishItemAttribute eleMeDishItemAttribute in item.Attributes) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Quantity;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedAt;//创建时间 flavorItem.CreateUser = "eleme";//创建人 flavorItem.Description = eleMeDishItemAttribute.Value;//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = eleMeDishItemAttribute.Value;//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = item.Quantity; flavorItem.Price = 0.00M;//属性费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } } if (item.Ingredients != null && item.Ingredients.Count > 0) { foreach (EleMeDishItemIngredient eleMeDishItemIngredient in item.Ingredients) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Quantity;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedAt;//创建时间 flavorItem.CreateUser = "eleme";//创建人 flavorItem.Description = eleMeDishItemIngredient.Name;//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = eleMeDishItemIngredient.Name;//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = item.Quantity; flavorItem.Price = 0.00M;//属性费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } } //如果是最后一个单品,加上餐盒数量 if (itemCount == j && elemeListExtra.Count > 0) { decimal flavorAmount = 0.00M; int flavorCount = 0; foreach (EleMeDishItem itemExtra in elemeListExtra) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = itemExtra.Quantity;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedAt;//创建时间 flavorItem.CreateUser = "eleme";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = item.Quantity; flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); //计算餐盒费总和 flavorAmount += 0.00M * itemExtra.Quantity; flavorCount += itemExtra.Quantity; } order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M;//餐盒费 order.FlavorCount = flavorCount + flavorItemList.Count; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//餐盒应收金额 order.Flavors = flavorItemList; order.DispatchPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3); order.MemberPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//会员价 order.OtherPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//第三方价 order.Price = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价 order.SalePrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价 } else { if (flavorItemList.Count > 0) { order.Flavor = 1;//是否包含做法 } else { order.Flavor = 0;//是否包含做法 } order.FlavorAmount = 0.00M;// order.FlavorCount = flavorItemList.Count; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//做法应收金额 order.Flavors = flavorItemList; } //优惠明细 List promotionsList = new List(); PromotionItem promotionItem = new PromotionItem(); promotionItem.Amount = order.Amount;//金额 if (itemCount == j) { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } else { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * item.Quantity, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M; promotionItem.DiscountRate = 0.00M; } } promotionItem.Enabled = true; promotionItem.FinishDate = finishDate;//完成时间 promotionItem.Id = IdWorkerUtils.Instance.NextId(); promotionItem.ItemId = order.Id;//行ID promotionItem.OrderId = _orderObject.Id;// promotionItem.PlanName = "外卖扣费";//班次编号 promotionItem.PromotionType = PromotionType.外卖扣费; promotionItem.ReceivableAmount = order.ReceivableAmount; promotionItem.RelationId = ""; promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID promotionItem.TradeNo = "5" + response.OrderId;//订单编号 promotionItem.CreateDate = response.CreatedAt;//创建时间 promotionItem.CreateUser = "eleme";//创建人 promotionsList.Add(promotionItem); order.Promotions = promotionsList; itemList.Add(order); //如果商品是套餐,转套餐 if (product.SuitFlag == 1) { var details = new List(); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { details = db.Fetch(string.Format(SqlConstant.SuitExt, product.Id)); } } var lists = details.FindAll(x => x.DefaultFlag == 1).ToList(); int inx = 0; foreach (SuitExt suit in lists) { List attributes = item.Attributes; var details1 = new List(); foreach (EleMeDishItemAttribute attribut in attributes) { using (var db = Global.Instance.OpenDataBase) { details1 = db.Fetch(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, attribut.Value)); } if (details1 != null && details1.Count > 0) { break; } } string _json = ""; if (details1 != null && details1.Count > 0) { //将当前SuitExt序列化 _json = JsonUtils.Serialize(details1[0]); } else { //将当前SuitExt序列化 _json = JsonUtils.Serialize(suit); } //反序列化为ProductExt对象 var _product = JsonUtils.Deserialize(_json); //新建套菜明细 var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product); //标识为套餐明细 row.RowState = OrderRowState.套餐明; //道菜ID row.SuitId = suit.SuitId; //道菜基准数量 row.SuitQuantity = suit.Quantity; //道菜基准加价 row.SuitAddPrice = suit.AddPrice; //道菜基准加价 = 主菜数量 * 道菜基准单价 row.SuitAmount = order.Quantity * suit.AddPrice; //界面-优惠列显示 row.Discount = 0; //界面-行下划线 row.Underline = (++inx) == lists.Count ? 1 : 0; //界面-是否有做法 row.Flavor = 0; //当前行父ID row.ParentId = order.Id; //当前行分组 row.Group = order.Group; //加料 row.Scheme = ""; //道菜数量随主菜数量变化 row.Quantity = order.Quantity * row.SuitQuantity; row.TradeNo = "5" + response.OrderId;//营业模式订单编号 i = i + 1; row.OrderNo = i; itemList.Add(row); } //套餐价格分摊 PromotionUtils.CalculateSuitShare(_orderObject, itemList); } } _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.DaySn); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.饿了么; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); PayItem payItem = new PayItem(); payItem.Amount = response.Income;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedAt;//创建时间 payItem.CreateUser = "eleme";//创建人 payItem.Memo = "饿了么外卖转换";//支付备注 //var payMode = OrderUtils.GetPayMode("23"); payItem.Name = "饿了么";//付款方式名称 payItem.No = "23";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "";//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = response.Income;//实收金额 payItem.PayNo = "5" + response.OrderId;//支付编号 payItem.PayTime = response.CreatedAt;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "5" + response.OrderId; payItem.TradeVoucherNo = ""; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 _orderObject.SaleDate = response.CreatedAt;//销售时间 _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = "";//桌号 _orderObject.TableName = "";//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "5" + response.OrderId; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 _orderObject.Ext1 = response.Description;//备注信息 return _orderObject; } else { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.OriginalPrice - response.DeliverFee;//消费金额(订单总额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 _orderObject.CreateDate = response.CreatedAt;//创建时间 _orderObject.CreateUser = "eleme";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = finishDate;//完成时间 _orderObject.PaidAmount = response.OriginalPrice - response.DeliverFee;//实收金额(订单总额-配送费) _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 List elemeList = new List(); List elemeListExtra = new List(); int itemCount = 0; foreach (EleMeGroups group in response.Groups) { if ("normal".Equals(group.Type)) { foreach (EleMeDishItem item in group.Items) { elemeList.Add(item); itemCount += 1; } } if ("extra".Equals(group.Type)) { foreach (EleMeDishItem item in group.Items) { elemeListExtra.Add(item); } } } List itemList = new List(); _orderObject.Items = itemList;//商品列表 int i = 0; int j = 0; foreach (EleMeDishItem item in elemeList) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { string template0 = "select * from pos_mapping_product_eleme where specId ='{0}' "; string sql0 = string.Format(template0, item.Id); List elemeMappingList = db.Fetch(sql0); MappingDishEleMe elemeMapping = null; if (elemeMappingList != null && elemeMappingList.Count > 0) { elemeMapping = elemeMappingList[0]; } if (elemeMapping == null)//找不到映射跳过 { product = null; } else { string[] name_spec = item.Name.Split('-'); string newSpecs = ""; if (item.NewSpecs != null && item.NewSpecs.Count() > 0) { foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs) { newSpecs = newSpecs + eleMeDishItemSpec.Value + ","; } } if (!"".Equals(newSpecs) && newSpecs.Length > 0) { newSpecs = newSpecs.Substring(0, newSpecs.Length - 1); } string sql1 = ""; if (otherWaimaiMappingSet) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');"; sql1 = string.Format(template1, elemeMapping.ErpSpecId, name_spec[0], newSpecs); } else { string template1 = SqlConstant.ProductExt + " where s.id = '{0}';"; sql1 = string.Format(template1, elemeMapping.ErpSpecId); } List productList = db.Fetch(sql1); if (productList.Count > 0) { product = productList[0]; } } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChupinFlag = "0";//是否出品 product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.KdsFlag = 1;//是否厨显 if (otherWaimaiDefaultKDS && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; product.Chuxian = kdsPlan.Id;//厨显ID product.ChuxianFlag = "1";//是否厨显 product.ChuxianTime = 5;//厨显超时时间 } else { product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 } //===2019-06-26 取消默认出品 //if (otherWaimaiDefaultKDS && KDSLists.Count > 0) //{ // KdsPlan kdsPlan = KDSLists[0]; // product.KdsChupin = kdsPlan.Id;//厨显出品ID // product.KdsChupinFlag = "1";//厨显是否出品 // product.KdsChupinTime = 5;//厨显出品超时时间 //} //else //{ // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 //} product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 string[] name_spec = item.Name.Split('-'); product.Name = name_spec[0];//商品名称 product.Id = string.Format("{0}", item.Id);//商品ID product.No = string.Format("{0}", item.Id);//商品编号 product.UnitId = "0";//商品单位ID product.UnitName = "份";//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Name;//简称 product.SuitFlag = 0; product.SpecId = string.Format("{0}", item.SkuId);//规格ID string newSpecs = ""; if (item.NewSpecs != null && item.NewSpecs.Count() > 0) { foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs) { newSpecs = newSpecs + eleMeDishItemSpec.Value + ","; } } if (!"".Equals(newSpecs) && newSpecs.Length > 0) { newSpecs = newSpecs.Substring(0, newSpecs.Length - 1); } product.SpecName = newSpecs;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "5";//商品类别ID product.TypeName = "饿了么菜品";//商品类别名称 product.WeighFlag = 0;//是否称重 } } order.Amount = item.Total;//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.Chuxian = kdsPlan.Id;//厨显ID order.ChuxianFlag = "1";//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = 5;//厨显超时时间 } else { order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 } if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.KdsChupin = kdsPlan.Id;//厨显出品ID order.KdsChupinFlag = "1";//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = 5;//厨显出品超时时间 } else { order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 } order.CreateDate = response.CreatedAt;//创建时间 order.CreateUser = "eleme";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DiscountPrice = item.Price;//折后价 order.DispatchPrice = item.Price;//批发价 order.DisplayName = item.Name;//打印名称 order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = item.Quantity;//商品数量 order.RefundQuantity = 0.00M;//退菜数量 order.Remark = "饿了么单品"; if (product.SuitFlag == 0) { order.RowState = OrderRowState.普通; } else { order.RowState = OrderRowState.套餐主; } order.SaleDate = response.CreatedAt;//创建时间 order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Total;//总计金额 order.TradeNo = "5" + response.OrderId;//订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = ""; order.OtherWaimaiPrintName = item.Name; List flavorItemList = new List(); if (item.Attributes != null && item.Attributes.Count > 0) { foreach (EleMeDishItemAttribute eleMeDishItemAttribute in item.Attributes) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Quantity;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedAt;//创建时间 flavorItem.CreateUser = "eleme";//创建人 flavorItem.Description = eleMeDishItemAttribute.Value;//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = eleMeDishItemAttribute.Value;//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = item.Quantity; flavorItem.Price = 0.00M;//属性费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } } if (item.Ingredients != null && item.Ingredients.Count > 0) { foreach (EleMeDishItemIngredient eleMeDishItemIngredient in item.Ingredients) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Quantity;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedAt;//创建时间 flavorItem.CreateUser = "eleme";//创建人 flavorItem.Description = eleMeDishItemIngredient.Name;//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = eleMeDishItemIngredient.Name;//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = item.Quantity; flavorItem.Price = 0.00M;//属性费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } } //如果是最后一个单品,加上餐盒数量 if (itemCount == j && elemeListExtra.Count > 0) { decimal flavorAmount = 0.00M; int flavorCount = 0; foreach (EleMeDishItem itemExtra in elemeListExtra) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = itemExtra.Quantity;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedAt;//创建时间 flavorItem.CreateUser = "eleme";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = item.Quantity; flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); //计算餐盒费总和 flavorAmount += 0.00M * itemExtra.Quantity; flavorCount += itemExtra.Quantity; } order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M;//餐盒费 order.FlavorCount = flavorCount + flavorItemList.Count; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//餐盒应收金额 order.Flavors = flavorItemList; order.DispatchPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//配送价 order.DiscountPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//折后价 order.MemberPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//会员价 order.OtherPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//第三方价 order.Price = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价 order.SalePrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价 } else { if (flavorItemList.Count > 0) { order.Flavor = 1;//是否包含做法 } else { order.Flavor = 0;//是否包含做法 } order.FlavorAmount = 0.00M;// order.FlavorCount = flavorItemList.Count; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//做法应收金额 order.Flavors = flavorItemList; } itemList.Add(order); //如果商品是套餐,转套餐 if (product.SuitFlag == 1) { var details = new List(); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { details = db.Fetch(string.Format(SqlConstant.SuitExt, product.Id)); } } var lists = details.FindAll(x => x.DefaultFlag == 1).ToList(); int inx = 0; foreach (SuitExt suit in lists) { List attributes = item.Attributes; var details1 = new List(); foreach (EleMeDishItemAttribute attribut in attributes) { using (var db = Global.Instance.OpenDataBase) { details1 = db.Fetch(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, attribut.Value)); } if (details1 != null && details1.Count > 0) { break; } } string _json = ""; if (details1 != null && details1.Count > 0) { //将当前SuitExt序列化 _json = JsonUtils.Serialize(details1[0]); } else { //将当前SuitExt序列化 _json = JsonUtils.Serialize(suit); } //反序列化为ProductExt对象 var _product = JsonUtils.Deserialize(_json); //新建套菜明细 var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product); //标识为套餐明细 row.RowState = OrderRowState.套餐明; //道菜ID row.SuitId = suit.SuitId; //道菜基准数量 row.SuitQuantity = suit.Quantity; //道菜基准加价 row.SuitAddPrice = suit.AddPrice; //道菜基准加价 = 主菜数量 * 道菜基准单价 row.SuitAmount = order.Quantity * suit.AddPrice; //界面-优惠列显示 row.Discount = 0; //界面-行下划线 row.Underline = (++inx) == lists.Count ? 1 : 0; //界面-是否有做法 row.Flavor = 0; //当前行父ID row.ParentId = order.Id; //当前行分组 row.Group = order.Group; //加料 row.Scheme = ""; //道菜数量随主菜数量变化 row.Quantity = order.Quantity * row.SuitQuantity; row.TradeNo = "5" + response.OrderId;//营业模式订单编号 i = i + 1; row.OrderNo = i; itemList.Add(row); } //套餐价格分摊 PromotionUtils.CalculateSuitShare(_orderObject, itemList); } } _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.DaySn); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.饿了么; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); PayItem payItem = new PayItem(); payItem.Amount = response.OriginalPrice - response.DeliverFee;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedAt;//创建时间 payItem.CreateUser = "eleme";//创建人 payItem.Memo = "饿了么外卖转换";//支付备注 //var payMode = OrderUtils.GetPayMode("23"); payItem.Name = "饿了么";//付款方式名称 payItem.No = "23";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "";//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = response.OriginalPrice - response.DeliverFee;//实收金额 payItem.PayNo = "5" + response.OrderId;//支付编号 payItem.PayTime = response.CreatedAt;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "5" + response.OrderId; payItem.TradeVoucherNo = ""; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 _orderObject.SaleDate = response.CreatedAt;//销售时间 _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = "";//桌号 _orderObject.TableName = "";//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "5" + response.OrderId; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 _orderObject.Ext1 = response.Description;//备注信息 return _orderObject; } } catch (Exception ex) { logger.Error("饿了么转单异常========>" + ex); Global.Instance.BugReport(ex, "饿了么转单异常"); } return null; } public static OrderObject getOrderLocalMeiTuan(MeiTuanOrderResponse response) { var finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); try { bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI, false); //是否根据名称匹配 bool otherWaimaiMappingSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_MAPPING, false); //厨显 bool otherWaimaiDefaultKDS = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_DEFAULTKDS, true); var KDSLists = Global.KdsPlan._kdsPlanList; if (otherWaimaiSet) { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.OriginalPrice - response.ShippingFee;//消费金额(订单总额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //_orderObject.CreateDate = response.CTime;//创建时间 _orderObject.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion _orderObject.CreateUser = "meituan";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = finishDate;//完成时间 _orderObject.PaidAmount = response.OriginalPrice - response.ShippingFee;//实收金额(订单总额-配送费) _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 //商家应收款 PoiReceiveDetail poiReceiveDetail = JsonUtils.Deserialize(response.PoiReceiveDetail); decimal wmPoiReceiveCent = poiReceiveDetail.WmPoiReceiveCent / 100M; //计算需要分摊的总额 decimal dicountTotal = response.OriginalPrice - response.ShippingFee - wmPoiReceiveCent; decimal havDicount = 0.00M; List itemList = new List(); _orderObject.Items = itemList;//商品列表 //商品原价总额,餐盒总金额 decimal productAmount = 0.00M; decimal boxAmount = 0.00M; int itemCount = 0; foreach (MeiTuanOrderListDetail item in response.Detail) { productAmount += item.Price * StringUtils.GetDecimal(item.Quantity); boxAmount += item.Box_num * item.Box_price; itemCount += 1; } int i = 0; int j = 0; foreach (MeiTuanOrderListDetail item in response.Detail) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { if (item.Box_num == 0) { item.Box_price = 0.00M; } string sql1 = ""; if (otherWaimaiMappingSet) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');"; sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec); } else { string template1 = SqlConstant.ProductExt + " where s.id = '{0}';"; sql1 = string.Format(template1, item.Sku_id); } List productList = db.Fetch(sql1); if (productList != null && productList.Count > 0) { product = productList[0]; } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChupinFlag = "0";//是否出品 product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.KdsFlag = 1;//是否厨显 if (otherWaimaiDefaultKDS && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; product.Chuxian = kdsPlan.Id;//厨显ID product.ChuxianFlag = "1";//是否厨显 product.ChuxianTime = 5;//厨显超时时间 } else { product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 } //===2019-06-26 取消默认出品 //if (otherWaimaiDefaultKDS && KDSLists.Count > 0) //{ // KdsPlan kdsPlan = KDSLists[0]; // product.KdsChupin = kdsPlan.Id;//厨显出品ID // product.KdsChupinFlag = "1";//厨显是否出品 // product.KdsChupinTime = 5;//厨显出品超时时间 //} //else //{ // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 //} product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 product.Name = item.Food_name;//商品名称 product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号 ////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性 //product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + ""; //product.No = product.Id; product.UnitId = "0";//商品单位ID product.UnitName = item.Unit;//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Food_name;//简称 if (item.Sku_id == null || "".Equals(item.Sku_id)) { product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID } else { product.SpecId = item.Sku_id; } product.SpecName = item.Spec;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "4";//商品类别ID product.TypeName = "美团外卖菜品";//商品类别名称 product.WeighFlag = 0;//是否称重 } } if (itemCount == j) { decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Quantity), 2); order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice; } else { //分摊优惠=(单品总额/订单总额)*优惠总额 decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Quantity) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Quantity), 2); havDicount += discountPrice * StringUtils.GetDecimal(item.Quantity); order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice;//折后价 } order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.Chuxian = kdsPlan.Id;//厨显ID order.ChuxianFlag = "1";//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = 5;//厨显超时时间 } else { order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 } if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.KdsChupin = kdsPlan.Id;//厨显出品ID order.KdsChupinFlag = "1";//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = 5;//厨显出品超时时间 } else { order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 } #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //order.CreateDate = response.CTime;//创建时间 order.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion order.CreateUser = "meituan";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DispatchPrice = item.Price;//批发价 order.DisplayName = item.Food_name;//打印名称 order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M;//餐盒费 order.FlavorCount = 1; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//餐盒应收金额 List flavorItemList = new List(); FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Box_num;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //flavorItem.CreateDate = response.CTime;//创建时间 flavorItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion flavorItem.CreateUser = "meituan";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity); flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 0; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); if (item.Food_property != null && !"".Equals(item.Food_property)) { var flavorItems = item.Food_property.Split(','); foreach (string flavor in flavorItems) { FlavorItem flavorItem1 = new FlavorItem(); flavorItem1.BaseQuantity = item.Box_num;//做法计价 flavorItem1.isWaiMaiTicket = true; flavorItem1.Code = ""; flavorItem1.Color = ""; #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //flavorItem1.CreateDate = response.CTime;//创建时间 flavorItem1.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion flavorItem1.CreateUser = "meituan";//创建人 flavorItem1.Description = string.Format("{0}", flavor);//备注说明 flavorItem1.DiscountAmount = 0.00M;//折扣金额 flavorItem1.DiscountPrice = 0.00M; flavorItem1.Group = ""; flavorItem1.Hand = 0; flavorItem1.IsRadio = 0; flavorItem1.Id = IdWorkerUtils.Instance.NextId(); flavorItem1.ItemId = order.Id;//行ID flavorItem1.MakeId = "";//做法ID flavorItem1.Name = string.Format("{0}", flavor);//做法名称 flavorItem1.OrderId = _orderObject.Id;// flavorItem1.OrderItemQuantity = 1.00M; flavorItem1.Price = 0.00M;//餐盒费用 flavorItem1.QtyFlag = 0; flavorItem1.RefundQuantity = 0.00M; flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem1.TradeNo = "4" + response.OrderId;//订单编号 flavorItem1.Type = 0; flavorItemList.Add(flavorItem1); } } order.Flavors = flavorItemList; order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量 order.RefundQuantity = 0.00M;//退菜数量 order.Remark = "美团外卖单品"; if (product.SuitFlag == 0) { order.RowState = OrderRowState.普通; } else { order.RowState = OrderRowState.套餐主; } #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //order.SaleDate = response.CTime;//创建时间 order.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额 order.TradeNo = "4" + response.OrderId;//营业模式订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]"; if (item.Spec != null && !"".Equals(item.Spec)) { order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]"; } else { order.OtherWaimaiPrintName = item.Food_name; } order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3); order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价 order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价 order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 //优惠明细 List promotionsList = new List(); PromotionItem promotionItem = new PromotionItem(); promotionItem.Amount = order.Amount;//金额 if (itemCount == j) { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } else { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * order.Quantity, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } promotionItem.Enabled = true; promotionItem.FinishDate = finishDate;//完成时间 promotionItem.Id = IdWorkerUtils.Instance.NextId(); promotionItem.ItemId = order.Id;//行ID promotionItem.OrderId = _orderObject.Id;// promotionItem.PlanName = "外卖扣费";//班次编号 promotionItem.PromotionType = PromotionType.外卖扣费; promotionItem.ReceivableAmount = order.ReceivableAmount; promotionItem.RelationId = ""; promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID promotionItem.TradeNo = "4" + response.OrderId;//订单编号 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //promotionItem.CreateDate = response.CTime;//创建时间 promotionItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion promotionItem.CreateUser = "meituan";//创建人 promotionsList.Add(promotionItem); order.Promotions = promotionsList; itemList.Add(order); //如果商品是套餐,转套餐 if (product.SuitFlag == 1) { var details = new List(); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { details = db.Fetch(string.Format(SqlConstant.SuitExt, product.Id)); } } var lists = details.FindAll(x => x.DefaultFlag == 1).ToList(); int inx = 0; foreach (SuitExt suit in lists) { string property = item.Food_property; string[] dishs = property.Split(','); var details1 = new List(); foreach (string name in dishs) { using (var db = Global.Instance.OpenDataBase) { details1 = db.Fetch(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name)); } if (details1 != null && details1.Count > 0) { break; } } string _json = null; if (details1 != null && details1.Count > 0) { //将当前SuitExt序列化 _json = JsonUtils.Serialize(details1[0]); } else { //将当前SuitExt序列化 _json = JsonUtils.Serialize(suit); } //反序列化为ProductExt对象 var _product = JsonUtils.Deserialize(_json); //新建套菜明细 var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product); //标识为套餐明细 row.RowState = OrderRowState.套餐明; //道菜ID row.SuitId = suit.SuitId; //道菜基准数量 row.SuitQuantity = suit.Quantity; //道菜基准加价 row.SuitAddPrice = suit.AddPrice; //道菜基准加价 = 主菜数量 * 道菜基准单价 row.SuitAmount = order.Quantity * suit.AddPrice; //界面-优惠列显示 row.Discount = 0; //界面-行下划线 row.Underline = (++inx) == lists.Count ? 1 : 0; //界面-是否有做法 row.Flavor = 0; //当前行父ID row.ParentId = order.Id; //当前行分组 row.Group = order.Group; //加料 row.Scheme = ""; //道菜数量随主菜数量变化 row.Quantity = order.Quantity * row.SuitQuantity; row.TradeNo = "4" + response.OrderId;//营业模式订单编号 i = i + 1; row.OrderNo = i; itemList.Add(row); } //套餐价格分摊 PromotionUtils.CalculateSuitShare(_orderObject, itemList); } } _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; //ObservableDictionary map = new ObservableDictionary(); var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.DaySeq); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.美团外卖; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); PayItem payItem = new PayItem(); payItem.Amount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //payItem.CreateDate = response.CTime;//创建时间 payItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion payItem.CreateUser = "meituan";//创建人 payItem.Memo = "美团外卖转换";//支付备注 //var payMode = OrderUtils.GetPayMode("22"); payItem.Name = "美团外卖";//付款方式名称 payItem.No = "22";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "";//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//实收金额 payItem.PayNo = "4" + response.OrderId;//支付编号 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //payItem.PayTime = response.CTime;//支付时间 payItem.PayTime = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "4" + response.OrderId; payItem.TradeVoucherNo = ""; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //_orderObject.SaleDate = response.CTime;//销售时间 _orderObject.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = "";//桌号 _orderObject.TableName = "";//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "4" + response.OrderId; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 _orderObject.Ext1 = response.Caution;//备注信息 return _orderObject; } else { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.OriginalPrice - response.ShippingFee;//消费金额(订单总额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //_orderObject.CreateDate = response.CTime;//创建时间 _orderObject.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion _orderObject.CreateUser = "meituan";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = finishDate;//完成时间 _orderObject.PaidAmount = response.OriginalPrice - response.ShippingFee;//实收金额(订单总额-配送费) _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 List itemList = new List(); _orderObject.Items = itemList;//商品列表 int i = 0; int j = 0; foreach (MeiTuanOrderListDetail item in response.Detail) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { if (item.Box_num == 0) { item.Box_price = 0.00M; } string sql1 = ""; if (otherWaimaiMappingSet) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');"; sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec); } else { string template1 = SqlConstant.ProductExt + " where s.id = '{0}';"; sql1 = string.Format(template1, item.Sku_id); } List productList = db.Fetch(sql1); if (productList != null && productList.Count > 0) { product = productList[0]; } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChupinFlag = "0";//是否出品 product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.KdsFlag = 1; //是否厨显 if (otherWaimaiDefaultKDS && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; product.Chuxian = kdsPlan.Id;//厨显ID product.ChuxianFlag = "1";//是否厨显 product.ChuxianTime = 5;//厨显超时时间 } else { product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 } //===2019-06-26 取消默认出品 //if (otherWaimaiDefaultKDS && KDSLists.Count > 0) //{ // KdsPlan kdsPlan = KDSLists[0]; // product.KdsChupin = kdsPlan.Id;//厨显出品ID // product.KdsChupinFlag = "1";//厨显是否出品 // product.KdsChupinTime = 5;//厨显出品超时时间 //} //else //{ // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 //} product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 product.Name = item.Food_name;//商品名称 //zhangy 2020-05-06 Edit 注释以下代码 product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号 ////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性 //product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + ""; //product.No = product.Id; product.UnitId = "0";//商品单位ID product.UnitName = item.Unit;//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Food_name;//简称 product.SuitFlag = 0; if (item.Sku_id == null || "".Equals(item.Sku_id)) { product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID } else { product.SpecId = item.Sku_id; } product.SpecName = item.Spec;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "4";//商品类别ID product.TypeName = "美团外卖菜品";//商品类别名称 product.WeighFlag = 0;//是否称重 } } order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.Chuxian = kdsPlan.Id;//厨显ID order.ChuxianFlag = "1";//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = 5;//厨显超时时间 } else { order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 } if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.KdsChupin = kdsPlan.Id;//厨显出品ID order.KdsChupinFlag = "1";//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = 5;//厨显出品超时时间 } else { order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 } #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //order.CreateDate = response.CTime;//创建时间 order.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion order.CreateUser = "meituan";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DiscountPrice = item.Price;//折后价 order.DispatchPrice = item.Price;//批发价 order.DisplayName = item.Food_name;//打印名称 order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M * item.Box_num;//餐盒费 order.FlavorCount = 1; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M * item.Box_num;//餐盒应收金额 List flavorItemList = new List(); FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Box_num;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //flavorItem.CreateDate = response.CTime;//创建时间 flavorItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion flavorItem.CreateUser = "meituan";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity); flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 0; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.OrderId;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); if (item.Food_property != null && !"".Equals(item.Food_property)) { var flavorItems = item.Food_property.Split(','); foreach (string flavor in flavorItems) { FlavorItem flavorItem1 = new FlavorItem(); flavorItem1.BaseQuantity = item.Box_num;//做法计价 flavorItem1.isWaiMaiTicket = true; flavorItem1.Code = ""; flavorItem1.Color = ""; #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //flavorItem1.CreateDate = response.CTime;//创建时间 flavorItem1.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion flavorItem1.CreateUser = "meituan";//创建人 flavorItem1.Description = string.Format("{0}", flavor);//备注说明 flavorItem1.DiscountAmount = 0.00M;//折扣金额 flavorItem1.DiscountPrice = 0.00M; flavorItem1.Group = ""; flavorItem1.Hand = 0; flavorItem1.IsRadio = 0; flavorItem1.Id = IdWorkerUtils.Instance.NextId(); flavorItem1.ItemId = order.Id;//行ID flavorItem1.MakeId = "";//做法ID flavorItem1.Name = string.Format("{0}", flavor);//做法名称 flavorItem1.OrderId = _orderObject.Id;// flavorItem1.OrderItemQuantity = 1.00M; flavorItem1.Price = 0.00M;//餐盒费用 flavorItem1.QtyFlag = 0; flavorItem1.RefundQuantity = 0.00M; flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem1.TradeNo = "4" + response.OrderId;//订单编号 flavorItem1.Type = 0; flavorItemList.Add(flavorItem1); } } order.Flavors = flavorItemList; order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量 order.RefundQuantity = 0.00M;//退菜数量 order.Remark = "美团外卖单品"; if (product.SuitFlag == 0) { order.RowState = OrderRowState.普通; } else { order.RowState = OrderRowState.套餐主; } #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //order.SaleDate = response.CTime;//创建时间 order.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额 order.TradeNo = "4" + response.OrderId;//营业模式订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]"; if (item.Spec != null && !"".Equals(item.Spec)) { order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]"; } else { order.OtherWaimaiPrintName = item.Food_name; } order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3); order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//折扣价 order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价 order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价 order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 itemList.Add(order); //如果商品是套餐,转套餐 if (product.SuitFlag == 1) { var details = new List(); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { details = db.Fetch(string.Format(SqlConstant.SuitExt, product.Id)); } } var lists = details.FindAll(x => x.DefaultFlag == 1).ToList(); int inx = 0; foreach (SuitExt suit in lists) { string property = item.Food_property; string[] dishs = property.Split(','); var details1 = new List(); foreach (string name in dishs) { using (var db = Global.Instance.OpenDataBase) { details1 = db.Fetch(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name)); } if (details1 != null && details1.Count > 0) { break; } } string _json = ""; if (details1 != null && details1.Count > 0) { //将当前SuitExt序列化 _json = JsonUtils.Serialize(details1[0]); } else { //将当前SuitExt序列化 _json = JsonUtils.Serialize(suit); } //反序列化为ProductExt对象 var _product = JsonUtils.Deserialize(_json); //新建套菜明细 var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product); //标识为套餐明细 row.RowState = OrderRowState.套餐明; //道菜ID row.SuitId = suit.SuitId; //道菜基准数量 row.SuitQuantity = suit.Quantity; //道菜基准加价 row.SuitAddPrice = suit.AddPrice; //道菜基准加价 = 主菜数量 * 道菜基准单价 row.SuitAmount = order.Quantity * suit.AddPrice; //界面-优惠列显示 row.Discount = 0; //界面-行下划线 row.Underline = (++inx) == lists.Count ? 1 : 0; //界面-是否有做法 row.Flavor = 0; //当前行父ID row.ParentId = order.Id; //当前行分组 row.Group = order.Group; //加料 row.Scheme = ""; //道菜数量随主菜数量变化 row.Quantity = order.Quantity * row.SuitQuantity; row.TradeNo = "4" + response.OrderId;//营业模式订单编号 i = i + 1; row.OrderNo = i; itemList.Add(row); } //套餐价格分摊 PromotionUtils.CalculateSuitShare(_orderObject, itemList); } } _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; //ObservableDictionary map = new ObservableDictionary(); var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.DaySeq); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.美团外卖; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); PayItem payItem = new PayItem(); payItem.Amount = response.OriginalPrice - response.ShippingFee;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //payItem.CreateDate = response.CTime;//创建时间 payItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion payItem.CreateUser = "meituan";//创建人 payItem.Memo = "美团外卖转换";//支付备注 //var payMode = OrderUtils.GetPayMode("22"); payItem.Name = "美团外卖";//付款方式名称 payItem.No = "22";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "";//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = response.OriginalPrice - response.ShippingFee;//实收金额 payItem.PayNo = "4" + response.OrderId;//支付编号 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //payItem.PayTime = response.CTime;//支付时间 payItem.PayTime = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "4" + response.OrderId; payItem.TradeVoucherNo = ""; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 #region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳 //_orderObject.SaleDate = response.CTime;//销售时间 _orderObject.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间 #endregion _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = "";//桌号 _orderObject.TableName = "";//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "4" + response.OrderId; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 _orderObject.Ext1 = response.Caution;//备注信息 return _orderObject; } } catch (Exception ex) { logger.Error("美团外卖转单异常========>" + ex); Global.Instance.BugReport(ex, "美团外卖转单异常"); } return null; } /// /// 美团商家版本接单 /// /// /// public static OrderObject getOrderLocalSJMeiTuan(ShopMeituanWaiMaiOrderInfoByidResponse response) { var finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); try { bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI, false); //是否根据名称匹配 bool otherWaimaiMappingSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_MAPPING, false); //厨显 bool otherWaimaiDefaultKDS = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_DEFAULTKDS, true); var KDSLists = Global.KdsPlan._kdsPlanList; if (otherWaimaiSet) { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.Original_price - response.Shipping_fee;//消费金额(订单总额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 #region subin 20231213 解决美团返回时间为时间戳,导致本地保存也为时间戳 _orderObject.CreateDate = response.Order_send_time;//创建时间 //_orderObject.CreateDate = GetFormatDateTime4Sec(response.Order_send_time); #endregion _orderObject.CreateUser = "meituan";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = finishDate;//完成时间 _orderObject.PaidAmount = response.Original_price - response.Shipping_fee;//实收金额(订单总额-配送费) _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 //商家应收款 PoiReceiveDetail poiReceiveDetail = JsonUtils.Deserialize(response.Poi_receive_detail); decimal wmPoiReceiveCent = poiReceiveDetail.WmPoiReceiveCent / 100M; //计算需要分摊的总额 decimal dicountTotal = response.Original_price - response.Shipping_fee - wmPoiReceiveCent; decimal havDicount = 0.00M; List itemList = new List(); _orderObject.Items = itemList;//商品列表 //商品原价总额,餐盒总金额 decimal productAmount = 0.00M; decimal boxAmount = 0.00M; int itemCount = 0; foreach (var item in response.Detail) { productAmount += item.Price * StringUtils.GetDecimal(item.Quantity); boxAmount += item.Box_num * item.Box_price; itemCount += 1; } int i = 0; int j = 0; foreach (var item in response.Detail) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { if (item.Box_num == 0) { item.Box_price = 0.00M; } string sql1 = ""; if (otherWaimaiMappingSet) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');"; sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec); } else { string template1 = SqlConstant.ProductExt + " where s.id = '{0}';"; sql1 = string.Format(template1, item.Sku_id); } List productList = db.Fetch(sql1); if (productList != null && productList.Count > 0) { product = productList[0]; } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChupinFlag = "0";//是否出品 product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.KdsFlag = 1;//是否厨显 if (otherWaimaiDefaultKDS && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; product.Chuxian = kdsPlan.Id;//厨显ID product.ChuxianFlag = "1";//是否厨显 product.ChuxianTime = 5;//厨显超时时间 } else { product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 } //===2019-06-26 取消默认出品 //if (otherWaimaiDefaultKDS && KDSLists.Count > 0) //{ // KdsPlan kdsPlan = KDSLists[0]; // product.KdsChupin = kdsPlan.Id;//厨显出品ID // product.KdsChupinFlag = "1";//厨显是否出品 // product.KdsChupinTime = 5;//厨显出品超时时间 //} //else //{ // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 //} product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 product.Name = item.Food_name;//商品名称 //zhangy 2020-05-06 Edit 注释以下代码 product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号 ////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性 //product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + ""; //product.No = product.Id; product.UnitId = "0";//商品单位ID product.UnitName = item.Unit;//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Food_name;//简称 if (item.Sku_id == null || "".Equals(item.Sku_id)) { product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID } else { product.SpecId = item.Sku_id; } product.SpecName = item.Spec;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "4";//商品类别ID product.TypeName = "美团外卖菜品";//商品类别名称 product.WeighFlag = 0;//是否称重 } } if (itemCount == j) { decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Quantity), 2); order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice; } else { //分摊优惠=(单品总额/订单总额)*优惠总额 decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Quantity) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Quantity), 2); havDicount += discountPrice * StringUtils.GetDecimal(item.Quantity); order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice;//折后价 } order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.Chuxian = kdsPlan.Id;//厨显ID order.ChuxianFlag = "1";//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = 5;//厨显超时时间 } else { order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 } if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.KdsChupin = kdsPlan.Id;//厨显出品ID order.KdsChupinFlag = "1";//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = 5;//厨显出品超时时间 } else { order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 } order.CreateDate = response.Order_send_time;//创建时间 order.CreateUser = "meituan";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DispatchPrice = item.Price;//批发价 order.DisplayName = item.Food_name;//打印名称 order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M;//餐盒费 order.FlavorCount = 1; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//餐盒应收金额 List flavorItemList = new List(); FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Box_num;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.Order_send_time;//创建时间 flavorItem.CreateUser = "meituan";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity); flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 0; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.Order_id;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); if (item.Food_property != null && !"".Equals(item.Food_property)) { var flavorItems = item.Food_property.Split(','); foreach (string flavor in flavorItems) { FlavorItem flavorItem1 = new FlavorItem(); flavorItem1.BaseQuantity = item.Box_num;//做法计价 flavorItem1.isWaiMaiTicket = true; flavorItem1.Code = ""; flavorItem1.Color = ""; flavorItem1.CreateDate = response.Order_send_time;//创建时间 flavorItem1.CreateUser = "meituan";//创建人 flavorItem1.Description = string.Format("{0}", flavor);//备注说明 flavorItem1.DiscountAmount = 0.00M;//折扣金额 flavorItem1.DiscountPrice = 0.00M; flavorItem1.Group = ""; flavorItem1.Hand = 0; flavorItem1.IsRadio = 0; flavorItem1.Id = IdWorkerUtils.Instance.NextId(); flavorItem1.ItemId = order.Id;//行ID flavorItem1.MakeId = "";//做法ID flavorItem1.Name = string.Format("{0}", flavor);//做法名称 flavorItem1.OrderId = _orderObject.Id;// flavorItem1.OrderItemQuantity = 1.00M; flavorItem1.Price = 0.00M;//餐盒费用 flavorItem1.QtyFlag = 0; flavorItem1.RefundQuantity = 0.00M; flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem1.TradeNo = "4" + response.Order_id;//订单编号 flavorItem1.Type = 0; flavorItemList.Add(flavorItem1); } } order.Flavors = flavorItemList; order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量 order.RefundQuantity = 0.00M;//退菜数量 order.Remark = "美团外卖单品"; if (product.SuitFlag == 0) { order.RowState = OrderRowState.普通; } else { order.RowState = OrderRowState.套餐主; } order.SaleDate = response.Order_send_time;//创建时间 order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额 order.TradeNo = "4" + response.Order_id;//营业模式订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]"; if (item.Spec != null && !"".Equals(item.Spec)) { order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]"; } else { order.OtherWaimaiPrintName = item.Food_name; } order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3); order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价 order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价 order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 //优惠明细 List promotionsList = new List(); PromotionItem promotionItem = new PromotionItem(); promotionItem.Amount = order.Amount;//金额 if (itemCount == j) { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } else { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * order.Quantity, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } promotionItem.Enabled = true; promotionItem.FinishDate = finishDate;//完成时间 promotionItem.Id = IdWorkerUtils.Instance.NextId(); promotionItem.ItemId = order.Id;//行ID promotionItem.OrderId = _orderObject.Id;// promotionItem.PlanName = "外卖扣费";//班次编号 promotionItem.PromotionType = PromotionType.外卖扣费; promotionItem.ReceivableAmount = order.ReceivableAmount; promotionItem.RelationId = ""; promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID promotionItem.TradeNo = "4" + response.Order_id;//订单编号 promotionItem.CreateDate = response.Order_send_time;//创建时间 promotionItem.CreateUser = "meituan";//创建人 promotionsList.Add(promotionItem); order.Promotions = promotionsList; itemList.Add(order); //如果商品是套餐,转套餐 if (product.SuitFlag == 1) { var details = new List(); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { details = db.Fetch(string.Format(SqlConstant.SuitExt, product.Id)); } } var lists = details.FindAll(x => x.DefaultFlag == 1).ToList(); int inx = 0; foreach (SuitExt suit in lists) { string property = item.Food_property; string[] dishs = property.Split(','); var details1 = new List(); foreach (string name in dishs) { using (var db = Global.Instance.OpenDataBase) { details1 = db.Fetch(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name)); } if (details1 != null && details1.Count > 0) { break; } } string _json = null; if (details1 != null && details1.Count > 0) { //将当前SuitExt序列化 _json = JsonUtils.Serialize(details1[0]); } else { //将当前SuitExt序列化 _json = JsonUtils.Serialize(suit); } //反序列化为ProductExt对象 var _product = JsonUtils.Deserialize(_json); //新建套菜明细 var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product); //标识为套餐明细 row.RowState = OrderRowState.套餐明; //道菜ID row.SuitId = suit.SuitId; //道菜基准数量 row.SuitQuantity = suit.Quantity; //道菜基准加价 row.SuitAddPrice = suit.AddPrice; //道菜基准加价 = 主菜数量 * 道菜基准单价 row.SuitAmount = order.Quantity * suit.AddPrice; //界面-优惠列显示 row.Discount = 0; //界面-行下划线 row.Underline = (++inx) == lists.Count ? 1 : 0; //界面-是否有做法 row.Flavor = 0; //当前行父ID row.ParentId = order.Id; //当前行分组 row.Group = order.Group; //加料 row.Scheme = ""; //道菜数量随主菜数量变化 row.Quantity = order.Quantity * row.SuitQuantity; row.TradeNo = "4" + response.Order_id;//营业模式订单编号 i = i + 1; row.OrderNo = i; itemList.Add(row); } //套餐价格分摊 PromotionUtils.CalculateSuitShare(_orderObject, itemList); } } _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; //ObservableDictionary map = new ObservableDictionary(); var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.Day_seq); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.美团外卖; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); PayItem payItem = new PayItem(); payItem.Amount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.Order_send_time;//创建时间 payItem.CreateUser = "meituan";//创建人 payItem.Memo = "美团外卖转换";//支付备注 //var payMode = OrderUtils.GetPayMode("22"); payItem.Name = "美团外卖";//付款方式名称 payItem.No = "22";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "";//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//实收金额 payItem.PayNo = "4" + response.Order_id;//支付编号 payItem.PayTime = response.Order_send_time;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "4" + response.Order_id; payItem.TradeVoucherNo = ""; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 _orderObject.SaleDate = response.Order_send_time;//销售时间 _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = "";//桌号 _orderObject.TableName = "";//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "4" + response.Order_id; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 _orderObject.Ext1 = response.Caution;//备注信息 return _orderObject; } else { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.Original_price - response.Shipping_fee;//消费金额(订单总额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 _orderObject.CreateDate = response.Order_send_time;//创建时间 _orderObject.CreateUser = "meituan";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = finishDate;//完成时间 _orderObject.PaidAmount = response.Original_price - response.Shipping_fee;//实收金额(订单总额-配送费) _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 List itemList = new List(); _orderObject.Items = itemList;//商品列表 int i = 0; int j = 0; foreach (var item in response.Detail) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { if (item.Box_num == 0) { item.Box_price = 0.00M; } string sql1 = ""; if (otherWaimaiMappingSet) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');"; sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec); } else { string template1 = SqlConstant.ProductExt + " where s.id = '{0}';"; sql1 = string.Format(template1, item.Sku_id); } List productList = db.Fetch(sql1); if (productList != null && productList.Count > 0) { product = productList[0]; } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChupinFlag = "0";//是否出品 product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.KdsFlag = 1; //是否厨显 if (otherWaimaiDefaultKDS && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; product.Chuxian = kdsPlan.Id;//厨显ID product.ChuxianFlag = "1";//是否厨显 product.ChuxianTime = 5;//厨显超时时间 } else { product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 } //===2019-06-26 取消默认出品 //if (otherWaimaiDefaultKDS && KDSLists.Count > 0) //{ // KdsPlan kdsPlan = KDSLists[0]; // product.KdsChupin = kdsPlan.Id;//厨显出品ID // product.KdsChupinFlag = "1";//厨显是否出品 // product.KdsChupinTime = 5;//厨显出品超时时间 //} //else //{ // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 //} product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 product.Name = item.Food_name;//商品名称 //zhangy 2020-05-06 Edit 注释以下代码 product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号 ////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性 //product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + ""; //product.No = product.Id; product.UnitId = "0";//商品单位ID product.UnitName = item.Unit;//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Food_name;//简称 product.SuitFlag = 0; if (item.Sku_id == null || "".Equals(item.Sku_id)) { product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID } else { product.SpecId = item.Sku_id; } product.SpecName = item.Spec;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "4";//商品类别ID product.TypeName = "美团外卖菜品";//商品类别名称 product.WeighFlag = 0;//是否称重 } } order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.Chuxian = kdsPlan.Id;//厨显ID order.ChuxianFlag = "1";//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = 5;//厨显超时时间 } else { order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 } if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0) { KdsPlan kdsPlan = KDSLists[0]; order.KdsChupin = kdsPlan.Id;//厨显出品ID order.KdsChupinFlag = "1";//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = 5;//厨显出品超时时间 } else { order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 } order.CreateDate = response.Order_send_time;//创建时间 order.CreateUser = "meituan";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DiscountPrice = item.Price;//折后价 order.DispatchPrice = item.Price;//批发价 order.DisplayName = item.Food_name;//打印名称 order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M * item.Box_num;//餐盒费 order.FlavorCount = 1; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M * item.Box_num;//餐盒应收金额 List flavorItemList = new List(); FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = item.Box_num;//做法计价 flavorItem.isWaiMaiTicket = true; flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.Order_send_time;//创建时间 flavorItem.CreateUser = "meituan";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity); flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 0; flavorItem.RefundQuantity = 0.00M; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "4" + response.Order_id;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); if (item.Food_property != null && !"".Equals(item.Food_property)) { var flavorItems = item.Food_property.Split(','); foreach (string flavor in flavorItems) { FlavorItem flavorItem1 = new FlavorItem(); flavorItem1.BaseQuantity = item.Box_num;//做法计价 flavorItem1.isWaiMaiTicket = true; flavorItem1.Code = ""; flavorItem1.Color = ""; flavorItem1.CreateDate = response.Order_send_time;//创建时间 flavorItem1.CreateUser = "meituan";//创建人 flavorItem1.Description = string.Format("{0}", flavor);//备注说明 flavorItem1.DiscountAmount = 0.00M;//折扣金额 flavorItem1.DiscountPrice = 0.00M; flavorItem1.Group = ""; flavorItem1.Hand = 0; flavorItem1.IsRadio = 0; flavorItem1.Id = IdWorkerUtils.Instance.NextId(); flavorItem1.ItemId = order.Id;//行ID flavorItem1.MakeId = "";//做法ID flavorItem1.Name = string.Format("{0}", flavor);//做法名称 flavorItem1.OrderId = _orderObject.Id;// flavorItem1.OrderItemQuantity = 1.00M; flavorItem1.Price = 0.00M;//餐盒费用 flavorItem1.QtyFlag = 0; flavorItem1.RefundQuantity = 0.00M; flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem1.TradeNo = "4" + response.Order_id;//订单编号 flavorItem1.Type = 0; flavorItemList.Add(flavorItem1); } } order.Flavors = flavorItemList; order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量 order.RefundQuantity = 0.00M;//退菜数量 order.Remark = "美团外卖单品"; if (product.SuitFlag == 0) { order.RowState = OrderRowState.普通; } else { order.RowState = OrderRowState.套餐主; } order.SaleDate = response.Order_send_time;//创建时间 order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额 order.TradeNo = "4" + response.Order_id;//营业模式订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]"; if (item.Spec != null && !"".Equals(item.Spec)) { order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]"; } else { order.OtherWaimaiPrintName = item.Food_name; } order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3); order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//折扣价 order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价 order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价 order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价 itemList.Add(order); //如果商品是套餐,转套餐 if (product.SuitFlag == 1) { var details = new List(); lock (Global.Instance.SyncLock) { using (var db = Global.Instance.OpenDataBase) { details = db.Fetch(string.Format(SqlConstant.SuitExt, product.Id)); } } var lists = details.FindAll(x => x.DefaultFlag == 1).ToList(); int inx = 0; foreach (SuitExt suit in lists) { string property = item.Food_property; string[] dishs = property.Split(','); var details1 = new List(); foreach (string name in dishs) { using (var db = Global.Instance.OpenDataBase) { details1 = db.Fetch(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name)); } if (details1 != null && details1.Count > 0) { break; } } string _json = ""; if (details1 != null && details1.Count > 0) { //将当前SuitExt序列化 _json = JsonUtils.Serialize(details1[0]); } else { //将当前SuitExt序列化 _json = JsonUtils.Serialize(suit); } //反序列化为ProductExt对象 var _product = JsonUtils.Deserialize(_json); //新建套菜明细 var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product); //标识为套餐明细 row.RowState = OrderRowState.套餐明; //道菜ID row.SuitId = suit.SuitId; //道菜基准数量 row.SuitQuantity = suit.Quantity; //道菜基准加价 row.SuitAddPrice = suit.AddPrice; //道菜基准加价 = 主菜数量 * 道菜基准单价 row.SuitAmount = order.Quantity * suit.AddPrice; //界面-优惠列显示 row.Discount = 0; //界面-行下划线 row.Underline = (++inx) == lists.Count ? 1 : 0; //界面-是否有做法 row.Flavor = 0; //当前行父ID row.ParentId = order.Id; //当前行分组 row.Group = order.Group; //加料 row.Scheme = ""; //道菜数量随主菜数量变化 row.Quantity = order.Quantity * row.SuitQuantity; row.TradeNo = "4" + response.Order_id;//营业模式订单编号 i = i + 1; row.OrderNo = i; itemList.Add(row); } //套餐价格分摊 PromotionUtils.CalculateSuitShare(_orderObject, itemList); } } _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; //ObservableDictionary map = new ObservableDictionary(); var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.Day_seq); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.美团外卖; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); PayItem payItem = new PayItem(); payItem.Amount = response.Original_price - response.Shipping_fee;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.Order_send_time;//创建时间 payItem.CreateUser = "meituan";//创建人 payItem.Memo = "美团外卖转换";//支付备注 //var payMode = OrderUtils.GetPayMode("22"); payItem.Name = "美团外卖";//付款方式名称 payItem.No = "22";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "";//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = response.Original_price - response.Shipping_fee;//实收金额 payItem.PayNo = "4" + response.Order_id;//支付编号 payItem.PayTime = response.Order_send_time;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "4" + response.Order_id; payItem.TradeVoucherNo = ""; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 _orderObject.SaleDate = response.Order_send_time;//销售时间 _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = "";//桌号 _orderObject.TableName = "";//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "4" + response.Order_id; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 _orderObject.Ext1 = response.Caution;//备注信息 return _orderObject; } } catch (Exception ex) { logger.Error("美团外卖转单异常========>" + ex); Global.Instance.BugReport(ex, "美团外卖转单异常"); } return null; } //public static OrderObject getOrderLocalBaiDu(BaiDuOrderResponse response) //{ // //当前订单对象 // OrderObject _orderObject = new OrderObject(); // _orderObject.Id = IdWorkerUtils.Instance.NextId(); // _orderObject.AddPoint = 0.00M;//本地积分 // decimal total_fee = response.OrderBody.OrderData.OrderInfo.Total_fee / Convert.ToDecimal(100); // decimal send_fee = response.OrderBody.OrderData.OrderInfo.Send_fee / Convert.ToDecimal(100); // _orderObject.Amount = total_fee - send_fee;//消费金额(订单总额-配送费) // _orderObject.CardPayResult = null;//会员卡支付清单 // _orderObject.ChangeAmount = 0.00M;//找零金额 // _orderObject.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间 // _orderObject.CreateUser = "baidu";//创建人 // _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 // _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) // _orderObject.FinishDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//完成时间 // _orderObject.PaidAmount = total_fee - send_fee;//实收金额(订单总额-配送费) // _orderObject.InvoicedAmount = 0.00M; // _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 // List> products = response.OrderBody.OrderData.Products; // List items = new List(); // foreach (List 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); // } // } // List itemList = new List(); // int i = 0; // foreach (BaiduOrderProduct item in items) // { // i = i + 1; // OrderItem order = new OrderItem(); // order.Id = IdWorkerUtils.Instance.NextId(); // ProductExt product = null; // using (var db = Global.Instance.OpenDataBase) // { // string template1 = SqlConstant.ProductExt + " where p.id ='{0}' and s.id = '{1}'"; // string baidu_dishId = item.Baidu_product_id; // string baidu_specId = item.SpecId; // if ("".Equals(baidu_specId)) // { // baidu_specId = baidu_dishId; // } // string sql1 = string.Format(template1, baidu_dishId, baidu_specId); // List productList = db.Fetch(sql1); // if (productList != null && productList.Count > 0) // { // product = productList[0]; // } // if (product == null)//找不到商品跳过 // { // product = new ProductExt(); // product.Chuda = "";//厨打ID // product.ChudaFlag = "0";//是否厨打 // product.Chupin = "";//出品ID // product.ChupinFlag = "0";//是否出品 // product.ChuDaLabel = string.Empty;//厨打标签ID // product.ChuDaLabelFlag = "0";//是否厨打标签 // product.Chuxian = "";//厨显ID // product.ChuxianFlag = "0";//是否厨显 // product.ChuxianTime = 0;//厨显超时时间 // product.CurrentFlag = 0;//是否可以议价 // product.DiscountFlag = 0;//是否可折扣 // product.GiveFlag = 0;//允许赠送 // product.KdsChupin = "";//厨显出品ID // product.KdsChupinFlag = "0";//厨显是否出品 // product.KdsChupinTime = 0;//厨显出品超时时间 // product.LabelPrintFlag = 1;//标签打印 // product.MebDiscountFlag = 0;//会员折上折 // product.MinPrice = 0.00M;//最低售价 // product.Name = item.Product_name;//商品名称 // product.Id = baidu_dishId;//商品ID // product.No = baidu_dishId;//商品编号 // product.UnitId = "0";//商品单位ID // product.UnitName = "份";//商品单位名称 // product.PromotionFlag = 0;//是否允许促销 // product.ShortName = item.Product_name;//简称 // product.SpecId = baidu_specId;//规格ID // product.SpecName = item.Spec;//规格名称 // product.StockFlag = 0;//是否管理库存 // product.TapleFlag = 0;//是否主食 // product.TypeId = "6";//商品类别ID // product.TypeName = "百度外卖菜品";//商品类别名称 // product.WeighFlag = 0;//是否称重 // } // } // order.Amount = item.Product_fee / Convert.ToDecimal(100);//单品消费 // order.Chuda = product.Chuda;//厨打ID // order.ChudaFlag = product.ChudaFlag;//是否厨打 // order.ChudaQty = 0;//厨打次数 // order.Chupin = product.Chupin;//出品ID // order.ChupinFlag = product.ChupinFlag;//是否出品 // order.ChupinQty = 0;//出品次数 // order.ChuDaLabel = product.ChuDaLabel;//厨打标签 // order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 // order.ChuDaLabelQty = 0;//厨打标签数量 // order.Chuxian = product.Chuxian;//厨显ID // order.ChuxianFlag = product.ChuxianFlag;//是否厨显 // order.ChuxianQty = 0;//厨显次数 // order.ChuxianTime = product.ChuxianTime;//厨显超时时间 // order.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间 // order.CreateUser = "baidu";//创建人 // order.CurrentFlag = product.CurrentFlag;//是否可以议价 // order.Discount = 0.00M;//折扣金额 // order.DiscountFlag = product.DiscountFlag;//是否可折扣 // order.DiscountPrice = item.Product_price / Convert.ToDecimal(100);//折后价 // order.DispatchPrice = item.Product_price / Convert.ToDecimal(100);//批发价 // order.DisplayName = item.Product_name + item.Spec;//打印名称 // order.Flavor = 1;//是否包含做法 // order.FlavorAmount = item.Package_fee / Convert.ToDecimal(100);//餐盒费 // order.FlavorCount = 1; // order.FlavorDiscountAmount = 0.00M;//做法优惠金额 // order.FlavorReceivableAmount = item.Package_fee / Convert.ToDecimal(100);//餐盒应收金额 // List flavorItemList = new List(); // FlavorItem flavorItem = new FlavorItem(); // flavorItem.BaseQuantity = 1;//做法计价 // flavorItem.Code = ""; // flavorItem.Color = ""; // flavorItem.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间 // flavorItem.CreateUser = "meituan";//创建人 // flavorItem.Description = "餐盒费";//备注说明 // flavorItem.DiscountAmount = 0.00M;//折扣金额 // flavorItem.DiscountPrice = item.Package_price / Convert.ToDecimal(100); // flavorItem.Group = ""; // flavorItem.Hand = 0; // flavorItem.IsRadio = 0; // flavorItem.Id = IdWorkerUtils.Instance.NextId(); // flavorItem.ItemId = order.Id;//行ID // flavorItem.MakeId = "";//做法ID // flavorItem.Name = "餐盒费";//做法名称 // flavorItem.OrderId = _orderObject.Id;// // flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Product_amount); // flavorItem.Price = item.Package_price / Convert.ToDecimal(100);//餐盒费用 // flavorItem.QtyFlag = 0; // flavorItem.RefundQuantity = 0.00M; // flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID // flavorItem.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;//订单编号 // flavorItem.Type = 1; // flavorItemList.Add(flavorItem); // order.Flavors = flavorItemList; // order.GiveFlag = product.GiveFlag;//允许赠送 // order.Group = "";//分组 // order.KdsChupin = product.KdsChupin;//厨显出品ID // order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 // order.KdsChupinQty = 0; // order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 // order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 // order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 // order.MemberPrice = item.Product_price / Convert.ToDecimal(100);//会员价 // order.MinPrice = product.MinPrice;//最低售价 // order.Name = product.Name;//商品名称 // order.OrderId = _orderObject.Id;//订单ID // order.OrderNo = i; // order.OtherPrice = item.Product_price / Convert.ToDecimal(100);//第三方价 // order.Price = item.Product_price / Convert.ToDecimal(100);//售价 // order.ProductExt = product;//商品信息 // order.ProductId = product.Id;//商品ID // order.ProductNo = product.No;//商品编号 // order.ProductUnitId = product.UnitId;//商品单位ID // order.ProductUnitName = product.UnitName;//商品单位名称 // order.PromotionFlag = product.PromotionFlag;//是否允许促销 // order.Quantity = StringUtils.GetDecimal(item.Product_amount);//商品数量 // order.RefundQuantity = 0.00M;//退菜数量 // order.Remark = "百度外卖单品"; // order.RowState = OrderRowState.普通; // order.SaleDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间 // order.SalePrice = item.Product_price / Convert.ToDecimal(100);//售价 // order.ShortName = product.ShortName;//简称 // order.SpecId = product.SpecId;//规格ID // order.SpecName = product.SpecName;//规格名称 // order.StockFlag = product.StockFlag;//是否管理库存 // order.TapleFlag = product.TapleFlag;//是否主食 // order.TenantId = Global.Instance.Authc.TenantId;//租户ID // order.TotalAmonut = item.Product_fee / Convert.ToDecimal(100) + item.Package_fee / Convert.ToDecimal(100);//总计金额 // order.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;//营业模式订单编号 // order.TypeId = product.TypeId;//商品类别ID // order.TypeName = product.TypeName;//商品类别名称 // order.WeighFlag = product.WeighFlag;//是否称重 // order.OtherWaimaiPrintMake = item.Features == null ? "" : "[" + item.Features + "]"; // if (item.Spec != null && !"".Equals(item.Spec)) // { // order.OtherWaimaiPrintName = item.Product_name + "[" + item.Spec + "]"; // } // else // { // order.OtherWaimaiPrintName = item.Product_name; // } // itemList.Add(order); // } // _orderObject.Items = itemList;//商品列表 // _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 // _orderObject.MalingAmount = 0.00M; // //ObservableDictionary map = new ObservableDictionary(); // var map = new ObservableCollection(); // foreach (OrderItem item in itemList) // { // map.Add(item); // } // _orderObject.Maps = map; //商品Map明细 // _orderObject.OrderCount = i; // _orderObject.ObjectId = _orderObject.Id;//订单ID // _orderObject.OrderNo = string.Format("{0}", StringUtils.GetString(response.OrderBody.OrderData.OrderInfo.Order_index)); // _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 // _orderObject.OrderType = OrderType.百度外卖; //订单类型 // _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 // List payList = new List(); // PayItem payItem = new PayItem(); // payItem.Amount = total_fee - send_fee;//已收金额 // payItem.ChangeAmount = 0.00M;//找零金额 // payItem.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time); ;//创建时间 // payItem.CreateUser = "baidu";//创建人 // payItem.Memo = "百度外卖转换";//支付备注 // //var payMode = OrderUtils.GetPayMode("24"); // payItem.Name = "百度外卖";//付款方式名称 // payItem.No = "24";//付款方式编码 // payItem.PointFlag = 0;//是否参与积分 // payItem.Order = 1;//支付序号 // payItem.OrderId = _orderObject.Id;//随机 // payItem.OutTradeNo = "";//单据编号 // payItem.OverAmount = 0.00M;//溢出金额 // payItem.PaidAmount = total_fee - send_fee;//实收金额 // payItem.PayNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;//支付编号 // payItem.PayTime = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//支付时间 // payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 // payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 // payItem.Status = 1; // payItem.StatusDesc = "已支付"; // payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID // payItem.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id; // payItem.TradeVoucherNo = ""; // payItem.Id = IdWorkerUtils.Instance.NextId(); // payList.Add(payItem); // _orderObject.Pays = payList; //支付列表 // _orderObject.People = 1;//人数 // _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 // _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 // _orderObject.PrintTimes = 1; //打印时间 // _orderObject.SaleDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//销售时间 // _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 // _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 // _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 // _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 // _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID // _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 // _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 // _orderObject.SyncStatus = 0;//同步状态 // _orderObject.TableNo = "";//桌号 // _orderObject.TableName = "";//餐桌名称 // _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID // _orderObject.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id; // string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; // string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); // _orderObject.Weather = string.Empty; // _orderObject.Weeker = weeker; // _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 // _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 // return _orderObject; //} /// /// 组装微信订单 /// /// /// public static OrderObject getOrderLocalWeiXin(WeiXinOrderResponse response) { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.Amount - response.DistributionFee;//消费金额(订单金额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 _orderObject.CreateDate = response.PayDate;//创建时间 _orderObject.CreateUser = "weixin";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = response.PayDate;//完成时间 _orderObject.PaidAmount = response.Paid - response.DistributionFee;//实收金额 _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 List itemList = new List(); int i = 0; foreach (WeiXinOrderItems item in response.Items) { i = i + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { string template1 = SqlConstant.ProductExt + " where p.id ='{0}' and s.id = '{1}'"; string sql1 = string.Format(template1, item.ProductId, item.SpecId); List productList = db.Fetch(sql1); if (productList != null && productList.Count > 0) { product = productList[0]; } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.ChupinFlag = "0";//是否出品 product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.KdsChupin = "";//厨显出品ID product.KdsChupinFlag = "0";//厨显是否出品 product.KdsChupinTime = 0;//厨显出品超时时间 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 product.Name = item.GoodsName;//商品名称 product.Id = item.ProductId;//商品ID product.No = "0";//商品编号 product.UnitId = item.ProductUnitId;//商品单位ID product.UnitName = item.ProductUnitName;//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.GoodsName;//简称 product.SpecId = item.SpecId;//规格ID product.SpecName = item.SpecName;//规格名称 product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = item.CategoryId;//商品类别ID product.TypeName = item.CategoryName;//商品类别名称 product.WeighFlag = 0;//是否称重 } } order.Amount = item.Amount;//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 order.CreateDate = response.PayDate;//创建时间 order.CreateUser = "weixin";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 order.DiscountPrice = item.DiscountPrice;//折后价 order.DispatchPrice = item.Price;//批发价 order.Flavor = 1;//是否包含做法 order.FlavorAmount = item.AddPriceTotal;//加价金额 order.FlavorCount = item.Makes != null ? item.Makes.Count : 0; order.FlavorDiscountAmount = item.DiscountAddTotal;//做法优惠金额 order.FlavorReceivableAmount = item.AmountAddTotal;//餐盒应收金额 List flavorItemList = new List(); //如果是打包或者外卖加餐盒费做法 if (response.BusMode == 1 || response.BusMode == 2) { if (item.BoxNum > 0) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = 1;//做法计价 flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.PayDate;//创建时间 flavorItem.CreateUser = "weixin";//创建人 flavorItem.Description = "餐盒费";//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = item.BoxPrice; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "0";//做法ID flavorItem.Name = "餐盒费";//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = 1; flavorItem.Price = item.BoxPrice;//餐盒费用 flavorItem.QtyFlag = 1; flavorItem.RefundQuantity = 0; flavorItem.Quantity = item.BoxNum; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "7" + response.TicketNo;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } } foreach (WeiXinOrderItemMake make in item.Makes) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = 1;//做法计价 flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.PayDate;//创建时间 flavorItem.CreateUser = "weixin";//创建人 flavorItem.Description = make.MakeName;//备注说明 flavorItem.DiscountAmount = make.DiscountAddTotal;//折扣金额 flavorItem.DiscountPrice = make.DiscountPrice; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = make.MakeId;//做法ID flavorItem.Name = make.MakeName;//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = 1; flavorItem.Price = make.AddPrice;//餐盒费用 flavorItem.QtyFlag = make.MngNu; flavorItem.RefundQuantity = make.Rcount; flavorItem.Quantity = make.Count; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "7" + response.TicketNo;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } List promotionItemList = new List(); foreach (WeiXinOrderPromo promo in item.PromoList) { PromotionItem promotionItem = new PromotionItem(); promotionItem.Id = IdWorkerUtils.Instance.NextId(); promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID promotionItem.OrderId = _orderObject.Id; promotionItem.TradeNo = "7" + response.TicketNo;//订单编号 promotionItem.ItemId = order.Id; promotionItem.PromotionType = (PromotionType)promo.Type; promotionItem.DiscountAmount = promo.DiscountMoney; promotionItem.FinishDate = promotionItem.CreateDate = response.PayDate;//创建时间 promotionItem.CreateUser = "weixin";//创建人 promotionItemList.Add(promotionItem); } order.Promotions = promotionItemList; order.Flavors = flavorItemList; order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = item.Count;//商品数量 order.RefundQuantity = item.Rcount;//退菜数量 order.Remark = "微信点餐单品"; order.RowState = (OrderRowState)item.IsSuit; order.SuitId = item.SuitId; order.ParentId = item.ParentId; order.SaleDate = response.SaleDate;//创建时间 order.SalePrice = item.Price;//售价 order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.AmountTotal;//总计金额 order.TradeNo = "7" + response.TicketNo;//订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = ""; order.OtherWaimaiPrintName = item.GoodsName; itemList.Add(order); } _orderObject.Items = itemList;//商品列表 _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.TakeNo); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.微信点餐; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); foreach (WeiXinOrderPays pay in response.Pays) { PayMode payMode = OrderUtils.GetPayMode(pay.PayMode); PayItem payItem = new PayItem(); payItem.Amount = pay.Paid - response.DistributionFee;//已收金额 payItem.ChangeAmount = pay.Rchange;//找零金额 payItem.CreateDate = response.PayDate;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单转换";//支付备注 if (payMode != null) { payItem.Name = payMode.Name;//付款方式名称 payItem.No = pay.PayMode;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 } else { payItem.Name = "微信支付";//付款方式名称 payItem.No = "05";//付款方式编码 payItem.PointFlag = 0;//是否参与积分 payItem.IncomeFlag = 1;//是否实收 } payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = pay.VoucherNo;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = pay.Paid - response.DistributionFee;//实收金额 payItem.PayNo = "7" + response.TicketNo;//支付编号 payItem.PayTime = response.PayDate;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.TicketNo; payItem.TradeVoucherNo = pay.VoucherNo; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 _orderObject.SaleDate = response.SaleDate;//销售时间 _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = response.TableNo;//桌号 _orderObject.TableName = response.TableName;//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "7" + response.TicketNo; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 return _orderObject; } /// /// 组装微信(QM)订单 /// /// /// public static OrderObject getOrderLocalQiMai(QiMaiOrder response) { //当前订单对象 OrderObject _orderObject = new OrderObject(); _orderObject.Id = IdWorkerUtils.Instance.NextId(); _orderObject.AddPoint = 0.00M;//本地积分 _orderObject.Amount = response.Amount - response.Freight;//消费金额(订单应付金额-配送费) _orderObject.CardPayResult = null;//会员卡支付清单 _orderObject.ChangeAmount = 0.00M;//找零金额 _orderObject.CreateDate = response.CreatedTime;//创建时间 _orderObject.CreateUser = "qimai";//创建人 _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称 _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额) _orderObject.FinishDate = response.PayTime;//完成时间 _orderObject.PaidAmount = response.Amount - response.Freight - response.MinusAmount;//实收金额 _orderObject.InvoicedAmount = 0.00M; _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址 QiMaiOrderGoods qiMaiOrderGoods = response.orderItems; //计算需要分摊的总额 decimal dicountTotal = response.MinusAmount; decimal havDicount = 0.00M; List itemList = new List(); int i = 0; int j = 0; int itemCount = 0; decimal productAmount = 0.00M; foreach (QiMaiOrderItem item in qiMaiOrderGoods.Goods) { productAmount += item.Price * StringUtils.GetDecimal(item.Num); itemCount += 1; } foreach (QiMaiOrderItem item in qiMaiOrderGoods.Goods) { i = i + 1; j = j + 1; OrderItem order = new OrderItem(); order.Id = IdWorkerUtils.Instance.NextId(); ProductExt product = null; using (var db = Global.Instance.OpenDataBase) { string template1 = SqlConstant.ProductExt + " where s.id = '{0}'"; string sql1 = string.Format(template1, item.TradeMark); List productList = db.Fetch(sql1); if (productList != null && productList.Count > 0) { product = productList[0]; } if (product == null)//找不到商品跳过 { product = new ProductExt(); product.Chuda = "";//厨打ID product.ChudaFlag = "0";//是否厨打 product.Chupin = "";//出品ID product.ChuDaLabel = string.Empty;//厨打标签ID product.ChuDaLabelFlag = "0";//是否厨打标签 product.ChupinFlag = "0";//是否出品 product.Chuxian = "";//厨显ID product.ChuxianFlag = "0";//是否厨显 product.ChuxianTime = 0;//厨显超时时间 product.CurrentFlag = 0;//是否可以议价 product.DiscountFlag = 0;//是否可折扣 product.GiveFlag = 0;//允许赠送 product.KdsChupin = "";//厨显出品ID product.KdsChupinFlag = "0";//厨显是否出品 product.KdsChupinTime = 0;//厨显出品超时时间 product.LabelPrintFlag = 1;//标签打印 product.MebDiscountFlag = 0;//会员折上折 product.MinPrice = 0.00M;//最低售价 product.Name = item.Name;//商品名称 product.Id = item.Id;//商品ID product.No = item.TradeMark;//商品编号 product.UnitId = "0";//商品单位ID product.UnitName = "份";//商品单位名称 product.PromotionFlag = 0;//是否允许促销 product.ShortName = item.Name;//简称 product.SpecId = item.Id;//规格ID product.StockFlag = 0;//是否管理库存 product.TapleFlag = 0;//是否主食 product.TypeId = "7";//商品类别ID product.TypeName = "微信商品";//商品类别名称 product.WeighFlag = 0;//是否称重 if (item.Spec != null && !item.Spec.ToString().Equals("[]")) { Dictionary _map = JsonUtils.Deserialize>(item.Spec.ToString()); string specName = string.Empty; foreach (var mapValue in _map) { specName = mapValue.Value + ","; } if (specName != null && !"".Equals(specName)) { specName = specName.Substring(0, specName.Length - 1); } product.SpecName = specName;//规格名称 } } } if (itemCount == j) { decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Num), 2); order.DiscountPrice = item.Price - discountPrice; } else { //分摊优惠=(单品总额/订单总额)*优惠总额 decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Num) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Num), 2); havDicount += discountPrice * StringUtils.GetDecimal(item.Num); order.DiscountPrice = item.Price - discountPrice;//折后价 } order.Amount = item.Price * item.Num;//单品消费 order.Chuda = product.Chuda;//厨打ID order.ChudaFlag = product.ChudaFlag;//是否厨打 order.ChudaQty = 0;//厨打次数 order.Chupin = product.Chupin;//出品ID order.ChupinFlag = product.ChupinFlag;//是否出品 order.ChupinQty = 0;//出品次数 order.ChuDaLabel = product.ChuDaLabel;//厨打标签 order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签 order.ChuDaLabelQty = 0;//厨打标签数量 order.Chuxian = product.Chuxian;//厨显ID order.ChuxianFlag = product.ChuxianFlag;//是否厨显 order.ChuxianQty = 0;//厨显次数 order.ChuxianTime = product.ChuxianTime;//厨显超时时间 order.CreateDate = response.CreatedTime;//创建时间 order.CreateUser = "weixin";//创建人 order.CurrentFlag = product.CurrentFlag;//是否可以议价 order.Discount = 0.00M;//折扣金额 order.DiscountFlag = product.DiscountFlag;//是否可折扣 //order.DiscountPrice = DecimalUtils.ToRound((item.Price * item.Num - item.Minus) / item.Num, 2);//折后价 order.DispatchPrice = item.Price;//批发价 order.Flavor = 1;//是否包含做法 order.FlavorAmount = 0.00M;//加价金额 string attachgoods = ""; if (item.OrderAttachGoods != null && !"".Equals(item.OrderAttachGoods) && !"[]".Equals(item.OrderAttachGoods)) { List attachGoods = JsonUtils.Deserialize>(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); int FlavorCount = 0; string[] makes = null; if (item.PropertyName != null && !"".Equals(item.PropertyName)) { makes = item.PropertyName.Split(','); FlavorCount = makes.Count(); } order.FlavorCount = FlavorCount; order.FlavorDiscountAmount = 0.00M;//做法优惠金额 order.FlavorReceivableAmount = 0.00M;//餐盒应收金额 List flavorItemList = new List(); if (makes != null) { foreach (string make in makes) { FlavorItem flavorItem = new FlavorItem(); flavorItem.BaseQuantity = 1;//做法计价 flavorItem.Code = ""; flavorItem.Color = ""; flavorItem.CreateDate = response.CreatedTime;//创建时间 flavorItem.CreateUser = "weixin";//创建人 flavorItem.Description = make;//备注说明 flavorItem.DiscountAmount = 0.00M;//折扣金额 flavorItem.DiscountPrice = 0.00M; flavorItem.Group = ""; flavorItem.Hand = 0; flavorItem.IsRadio = 0; flavorItem.Id = IdWorkerUtils.Instance.NextId(); flavorItem.ItemId = order.Id;//行ID flavorItem.MakeId = "0";//做法ID flavorItem.Name = make;//做法名称 flavorItem.OrderId = _orderObject.Id;// flavorItem.OrderItemQuantity = 1; flavorItem.Price = 0.00M;//餐盒费用 flavorItem.QtyFlag = 0; flavorItem.RefundQuantity = 0; flavorItem.Quantity = 1; flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID flavorItem.TradeNo = "7" + response.Id;//订单编号 flavorItem.Type = 1; flavorItemList.Add(flavorItem); } } order.Flavors = flavorItemList; order.GiveFlag = product.GiveFlag;//允许赠送 order.Group = "";//分组 order.KdsChupin = product.KdsChupin;//厨显出品ID order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品 order.KdsChupinQty = 0; order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间 order.LabelPrintFlag = product.LabelPrintFlag;//标签打印 order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折 order.MemberPrice = item.Price;//会员价 order.MinPrice = product.MinPrice;//最低售价 order.Name = product.Name;//商品名称 order.OrderId = _orderObject.Id;//订单ID order.OrderNo = i; order.OtherPrice = item.Price;//第三方价 order.Price = item.Price;//售价 order.ProductExt = product;//商品信息 order.ProductId = product.Id;//商品ID order.ProductNo = product.No;//商品编号 order.ProductUnitId = product.UnitId;//商品单位ID order.ProductUnitName = product.UnitName;//商品单位名称 order.PromotionFlag = product.PromotionFlag;//是否允许促销 order.Quantity = item.Num;//商品数量 order.RefundQuantity = 0;//退菜数量 order.Remark = "微信点餐(QM)单品"; order.RowState = OrderRowState.普通; order.SuitId = ""; order.ParentId = ""; order.SaleDate = response.CreatedTime;//创建时间 order.SalePrice = item.Price;//售价 //优惠明细 List promotionsList = new List(); PromotionItem promotionItem = new PromotionItem(); promotionItem.Amount = order.Amount;//金额 if (itemCount == j) { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } else { if (order.Amount != 0) { promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * order.Quantity, 2);//优惠金额 promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率 } else { promotionItem.DiscountAmount = 0.00M;//优惠金额 promotionItem.DiscountRate = 0.00M;//优惠率 } } promotionItem.Enabled = true; promotionItem.FinishDate = response.PayTime;//完成时间 promotionItem.Id = IdWorkerUtils.Instance.NextId(); promotionItem.ItemId = order.Id;//行ID promotionItem.OrderId = _orderObject.Id;// promotionItem.PlanName = "企迈订单优惠";//班次编号 promotionItem.PromotionType = PromotionType.企迈订单优惠; promotionItem.ReceivableAmount = order.ReceivableAmount; promotionItem.RelationId = ""; promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID promotionItem.TradeNo = "7" + response.Id;//订单编号 promotionItem.CreateDate = response.CreatedTime; //创建时间 promotionItem.CreateUser = "qimai";//创建人 promotionsList.Add(promotionItem); order.Promotions = promotionsList; order.ShortName = product.ShortName;//简称 order.SpecId = product.SpecId;//规格ID order.SpecName = product.SpecName;//规格名称 order.StockFlag = product.StockFlag;//是否管理库存 order.TapleFlag = product.TapleFlag;//是否主食 order.TenantId = Global.Instance.Authc.TenantId;//租户ID order.TotalAmonut = item.Price * item.Num;//总计金额 order.TradeNo = "7" + response.Id;//订单编号 order.TypeId = product.TypeId;//商品类别ID order.TypeName = product.TypeName;//商品类别名称 order.WeighFlag = product.WeighFlag;//是否称重 order.OtherWaimaiPrintMake = ""; order.OtherWaimaiPrintName = item.Name; order.Promotions = promotionsList; itemList.Add(order); } _orderObject.Items = itemList;//商品列表 _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址 _orderObject.MalingAmount = 0.00M; var map = new ObservableCollection(); foreach (OrderItem item in itemList) { map.Add(item); } _orderObject.Maps = map; //商品Map明细 _orderObject.OrderCount = i; _orderObject.ObjectId = _orderObject.Id;//订单ID _orderObject.OrderNo = string.Format("{0}", response.SortNum); _orderObject.OrderStatus = OrderStatus.已完成;//订单状态 _orderObject.OrderType = OrderType.微信点餐; //订单类型 _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装 List payList = new List(); QiMaiOrderPay qiMaiOrderPay = response.orderPays; //1 余额支付 2 微信支付 3支付宝支付 4现金支付 9 混合支付 if (qiMaiOrderPay.Id == 1) { //会员余额支付 PayMode payMode = OrderUtils.GetPayMode("02"); PayItem payItem = new PayItem(); payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } else if (qiMaiOrderPay.Id == 2) { //微信支付 PayMode payMode = OrderUtils.GetPayMode("05"); PayItem payItem = new PayItem(); payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } else if (qiMaiOrderPay.Id == 3) { //支付宝支付 PayMode payMode = OrderUtils.GetPayMode("04"); PayItem payItem = new PayItem(); payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } else if (qiMaiOrderPay.Id == 4) { //现金支付 PayMode payMode = OrderUtils.GetPayMode("01"); PayItem payItem = new PayItem(); payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } else if (qiMaiOrderPay.Id == 9) { //混合微信支付 PayMode payMode = OrderUtils.GetPayMode("02"); PayItem payItem = new PayItem(); payItem.Amount = response.WalletAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); //微信支付 payMode = OrderUtils.GetPayMode("05"); payItem = new PayItem(); payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount - response.WalletAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } else if (qiMaiOrderPay.Id == 11) { //混合微信支付 PayMode payMode = OrderUtils.GetPayMode("02"); PayItem payItem = new PayItem(); payItem.Amount = response.WalletAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); //微信支付 payMode = OrderUtils.GetPayMode("04"); payItem = new PayItem(); payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount - response.WalletAmount;//已收金额 payItem.ChangeAmount = 0.00M;//找零金额 payItem.CreateDate = response.CreatedTime;//创建时间 payItem.CreateUser = "weixin";//创建人 payItem.Memo = "微信订单(QM)转换";//支付备注 payItem.Name = payMode.Name;//付款方式名称 payItem.No = payMode.No;//付款方式编码 payItem.PointFlag = payMode.PointFlag;//是否参与积分 payItem.IncomeFlag = payMode.IncomeFlag;//是否实收 payItem.Order = 1;//支付序号 payItem.OrderId = _orderObject.Id;//随机 payItem.OutTradeNo = "7" + response.Id;//单据编号 payItem.OverAmount = 0.00M;//溢出金额 payItem.PaidAmount = payItem.Amount;//实收金额 payItem.PayNo = "7" + response.Id;//支付编号 payItem.PayTime = response.CreatedTime;//支付时间 payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 payItem.Status = 1; payItem.StatusDesc = "已支付"; payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID payItem.TradeNo = "7" + response.Id; payItem.TradeVoucherNo = "7" + response.Id; payItem.Id = IdWorkerUtils.Instance.NextId(); payList.Add(payItem); } _orderObject.Pays = payList; //支付列表 _orderObject.People = 1;//人数 _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号 _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态 _orderObject.PrintTimes = 1; //打印时间 _orderObject.SaleDate = response.CreatedTime;//销售时间 _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码 _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称 _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号 _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称 _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称 _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号 _orderObject.SyncStatus = 0;//同步状态 _orderObject.TableNo = response.TableNumber;//桌号 _orderObject.TableName = response.TableNumber;//餐桌名称 _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID _orderObject.TradeNo = "7" + response.Id; string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" }; string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString(); _orderObject.Weather = string.Empty; _orderObject.Weeker = weeker; _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名 _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号 return _orderObject; } /// /// 外卖退单打印 /// 1.外卖已接单也可以接订单的情况判断是否需要向上去数据 /// 2.厨打只有在本地有数据的情况下才打印退厨打 /// private static void UserCancelPrinterTicket(string Name, string orderId, OrderObject _order) { Task.Factory.StartNew(() => { try { if (_order == null) { switch (Name) { case "美团外卖": MeiTuanOrderRequest _MeiTuan = new MeiTuanOrderRequest(); _MeiTuan.StoreId = Global.Instance.BusinessPlanLog.StoreId; _MeiTuan.OrderId = orderId; var _MeiTuanres = OtherWaiMaiUtils.MeiTuanOrder(_MeiTuan); _order = OtherWaiMaiApi.getOrderLocalMeiTuan(_MeiTuanres.Item3.Data); break; case "饿了么": EleMeOrderRequest _Ele = new EleMeOrderRequest(); _Ele.StoreId = Global.Instance.BusinessPlanLog.StoreId; _Ele.OrderId = orderId; var _Eleres = OtherWaiMaiUtils.EleMeOrder(_Ele); _order = OtherWaiMaiApi.getOrderLocalEleme(_Eleres.Item3.Data); break; default: break; } } else { ////启用外卖商品绑定厨打方案 //var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true); //if (planKit) //{ // //执行厨打 // ChuDaHelper.KitchenPrinter(orderObject); // logger.Info("美团外卖厨打成功"); // //执行出品 // ChuDaHelper.MadePrinter(orderObject); // logger.Info("美团外卖出品成功"); //} } var vars = WaiMaiHelper.UserCancelOrders(_order, orderId, Name); Tuple result = WaiMaiHelper.PrinterTicket("外卖退单", vars); logger.Error(string.Format("{0}", result.Item2)); } catch (Exception ex) { logger.Info(ex); logger.Info("UserCancelPrinterTicket方法报错:" + ex.Message); } }); } private static string GetFormatDateTime4Sec(string secTimeStamp, string format = null) { if (string.IsNullOrEmpty(secTimeStamp)) return null; format = format ?? "yyyy-MM-dd HH:mm:ss"; System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区 DateTime dt = startTime.AddSeconds(long.Parse(secTimeStamp)); return dt.ToString(format); } } }