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

8261 lines
563 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<string, string> orderMap = new Dictionary<string, string>();
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
public static void sendWaiMaiMessage(string message)
{
logger.Info(">>>>>>sendWaiMaiMessage>>>>>>>>{0}", message);
try
{
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(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>(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>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
//单品优惠
if (orderObject.Items != null)
{
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(flavor.Flavors);
}
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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>(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>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
if (orderObject.Items != null)
{
//单品优惠
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(flavor.Flavors);
}
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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);
}
}
/// <summary>
/// 开启商家版美团外卖和餐道外卖
/// </summary>
/// <param name="message"></param>
public static void sendSJWaiMaiMessage(string message)
{
if (logger == null)
{
logger = NLog.LogManager.GetCurrentClassLogger();
}
logger.Info(">>>>>>sendSJWaiMaiMessage>>>>>>>>{0}", message);
try
{
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(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>(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>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
//单品优惠
if (orderObject.Items != null)
{
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(flavor.Flavors);
}
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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>(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>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
if (orderObject.Items != null)
{
//单品优惠
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(flavor.Flavors);
}
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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);
}
}
/// <summary>
/// 微信公众号订单
/// </summary>
/// <param name="message"></param>
public static void sendWeixinMessage(string message)
{
logger.Info(">>>>>>sendWeixinMessage>>>>>>>>{0}", message);
try
{
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(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>(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>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
if (orderObject.Items != null)
{
//单品优惠
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(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>(wxWaimaiOrder);
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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<Dictionary<string, string>>(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();
// }
// }
// }
// }
// }
//}
/// <summary>
/// 企迈订单
/// </summary>
/// <param name="message"></param>
public static void sendQiMaiMessage(string message)
{
logger.Info(">>>>>>sendQiMaiMessage>>>>>>>>{0}", message);
try
{
// 是否自动接单
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.QIMAI_CONFIRM_PARAMETER, false);
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(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, MenuTileNotifyType, string>(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, MenuTileNotifyType, string>(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, MenuTileNotifyType, string>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
//单品优惠
if (orderObject.Items != null)
{
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(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>(wxWaimaiOrder);
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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, MenuTileNotifyType, string>(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>(orderObject);
//单品明细
db.InsertBatch<OrderItem>(orderObject.Items);
//单品优惠
if (orderObject.Items != null)
{
foreach (var promotion in orderObject.Items)
{
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
{
db.InsertBatch<PromotionItem>(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<PayItem>(orderObject.Pays);
//做法明细
foreach (var flavor in orderObject.Items)
{
if (flavor.Flavors.Count > 0)
{
db.InsertBatch<FlavorItem>(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>(wxWaimaiOrder);
}
//8、保存耗料信息
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
//第一步组装耗料数量
foreach (var item in orderObject.Items)
{
//第一步先看看商品是否是管理库存的直销品
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
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<ProductBurden> productBurdenList = db.Query<ProductBurden>(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<MakeBurden> makeBurdenList = db.Query<MakeBurden>(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<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
string burdenProductId_temp = "";
string burdenSpecId_temp = "";
string salesUnitId_temp = "";
int j = 0;
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
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<string, Object>();
}
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<string, Object>();
}
}
List<OrderProductBurden> list = new List<OrderProductBurden>();
foreach (Dictionary<string, Object> 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<OrderProductBurden>(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<bool, string> 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<EleMeDishItem> elemeList = new List<EleMeDishItem>();
List<EleMeDishItem> elemeListExtra = new List<EleMeDishItem>();
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<OrderItem> itemList = new List<OrderItem>();
_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<MappingDishEleMe> elemeMappingList = db.Fetch<MappingDishEleMe>(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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<PromotionItem> promotionsList = new List<PromotionItem>();
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<SuitExt>();
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
}
}
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
int inx = 0;
foreach (SuitExt suit in lists)
{
List<EleMeDishItemAttribute> attributes = item.Attributes;
var details1 = new List<SuitExt>();
foreach (EleMeDishItemAttribute attribut in attributes)
{
using (var db = Global.Instance.OpenDataBase)
{
details1 = db.Fetch<SuitExt>(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<ProductExt>(_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<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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<EleMeDishItem> elemeList = new List<EleMeDishItem>();
List<EleMeDishItem> elemeListExtra = new List<EleMeDishItem>();
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<OrderItem> itemList = new List<OrderItem>();
_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<MappingDishEleMe> elemeMappingList = db.Fetch<MappingDishEleMe>(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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<SuitExt>();
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
}
}
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
int inx = 0;
foreach (SuitExt suit in lists)
{
List<EleMeDishItemAttribute> attributes = item.Attributes;
var details1 = new List<SuitExt>();
foreach (EleMeDishItemAttribute attribut in attributes)
{
using (var db = Global.Instance.OpenDataBase)
{
details1 = db.Fetch<SuitExt>(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<ProductExt>(_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<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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<PoiReceiveDetail>(response.PoiReceiveDetail);
decimal wmPoiReceiveCent = poiReceiveDetail.WmPoiReceiveCent / 100M;
//计算需要分摊的总额
decimal dicountTotal = response.OriginalPrice - response.ShippingFee - wmPoiReceiveCent;
decimal havDicount = 0.00M;
List<OrderItem> itemList = new List<OrderItem>();
_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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<PromotionItem> promotionsList = new List<PromotionItem>();
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<SuitExt>();
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
details = db.Fetch<SuitExt>(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<SuitExt>();
foreach (string name in dishs)
{
using (var db = Global.Instance.OpenDataBase)
{
details1 = db.Fetch<SuitExt>(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<ProductExt>(_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<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
var map = new ObservableCollection<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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<OrderItem> itemList = new List<OrderItem>();
_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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<SuitExt>();
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
details = db.Fetch<SuitExt>(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<SuitExt>();
foreach (string name in dishs)
{
using (var db = Global.Instance.OpenDataBase)
{
details1 = db.Fetch<SuitExt>(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<ProductExt>(_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<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
var map = new ObservableCollection<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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;
}
/// <summary>
/// 美团商家版本接单
/// </summary>
/// <param name="response"></param>
/// <returns></returns>
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<PoiReceiveDetail>(response.Poi_receive_detail);
decimal wmPoiReceiveCent = poiReceiveDetail.WmPoiReceiveCent / 100M;
//计算需要分摊的总额
decimal dicountTotal = response.Original_price - response.Shipping_fee - wmPoiReceiveCent;
decimal havDicount = 0.00M;
List<OrderItem> itemList = new List<OrderItem>();
_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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<PromotionItem> promotionsList = new List<PromotionItem>();
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<SuitExt>();
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
details = db.Fetch<SuitExt>(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<SuitExt>();
foreach (string name in dishs)
{
using (var db = Global.Instance.OpenDataBase)
{
details1 = db.Fetch<SuitExt>(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<ProductExt>(_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<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
var map = new ObservableCollection<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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<OrderItem> itemList = new List<OrderItem>();
_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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<SuitExt>();
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
details = db.Fetch<SuitExt>(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<SuitExt>();
foreach (string name in dishs)
{
using (var db = Global.Instance.OpenDataBase)
{
details1 = db.Fetch<SuitExt>(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<ProductExt>(_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<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
var map = new ObservableCollection<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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<List<BaiduOrderProduct>> products = response.OrderBody.OrderData.Products;
// List<BaiduOrderProduct> items = new List<BaiduOrderProduct>();
// foreach (List<BaiduOrderProduct> group in products)
// {
// foreach (BaiduOrderProduct item in group)
// {
// item.ProductPrice = item.Product_price / Convert.ToDecimal(100);
// item.ProductFee = item.Product_fee / Convert.ToDecimal(100);
// var spec = "";
// var specId = "";
// if (item.Product_attr != null)
// {
// foreach (var attr in item.Product_attr)
// {
// spec += string.Format("({0})", attr.Option);
// specId = attr.Baidu_attr_id;
// }
// }
// item.Spec = spec;//菜如菜品规格
// item.SpecId = specId;
// var features = string.Empty;
// if (item.Product_features != null)
// {
// foreach (var feature in item.Product_features)
// {
// features += string.Format("{0},", feature.Option);
// }
// if (!string.IsNullOrEmpty(features))
// {
// features = features.Substring(0, features.Length - 1);
// features = string.Format("({0})", features);
// }
// }
// item.Features = features;//写入菜品做法
// items.Add(item);
// }
// }
// List<OrderItem> itemList = new List<OrderItem>();
// 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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
// 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<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
// var map = new ObservableCollection<OrderItem>();
// 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<PayItem> payList = new List<PayItem>();
// 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;
//}
/// <summary>
/// 组装微信订单
/// </summary>
/// <param name="response"></param>
/// <returns></returns>
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<OrderItem> itemList = new List<OrderItem>();
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<ProductExt> productList = db.Fetch<ProductExt>(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<FlavorItem> flavorItemList = new List<FlavorItem>();
//如果是打包或者外卖加餐盒费做法
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<PromotionItem> promotionItemList = new List<PromotionItem>();
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<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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;
}
/// <summary>
/// 组装微信(QM)订单
/// </summary>
/// <param name="response"></param>
/// <returns></returns>
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<OrderItem> itemList = new List<OrderItem>();
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<ProductExt> productList = db.Fetch<ProductExt>(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<string, string> _map = JsonUtils.Deserialize<Dictionary<string, string>>(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<QiMaiOrderAttachGoods> attachGoods = JsonUtils.Deserialize<List<QiMaiOrderAttachGoods>>(item.OrderAttachGoods.ToString());
foreach (QiMaiOrderAttachGoods qiMaiOrderAttachGoods in attachGoods)
{
attachgoods = "," + attachgoods + string.Format("{0}*{1}", qiMaiOrderAttachGoods.Name, qiMaiOrderAttachGoods.Qty);
}
}
item.PropertyName = string.Format("{0}{1}", item.Property, attachgoods);
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<FlavorItem> flavorItemList = new List<FlavorItem>();
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<PromotionItem> promotionsList = new List<PromotionItem>();
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<OrderItem>();
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<PayItem> payList = new List<PayItem>();
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;
}
/// <summary>
/// 外卖退单打印
/// 1.外卖已接单也可以接订单的情况判断是否需要向上去数据
/// 2.厨打只有在本地有数据的情况下才打印退厨打
/// </summary>
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<bool, string> 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);
}
}
}