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.

8226 lines
561 KiB
C#

9 months ago
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)
{
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)
{
//播放声音
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)
{
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)}");
//组装本地数据
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();
}
}
}
logger.Info("美团外卖自动接单打印");
//构建收银小票模版参数打印
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("美团外卖标签打印成功");
//执行厨打标签
ChuDaHelper.KitchenLabelPrinter(orderObject);
logger.Info("美团外卖厨打标签成功");
//启用外卖商品绑定厨打方案
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
if (planKit)
{
//执行厨打
ChuDaHelper.KitchenPrinter(orderObject);
logger.Info("美团外卖厨打成功");
//执行出品
ChuDaHelper.MadePrinter(orderObject);
logger.Info("美团外卖出品成功");
}
//启用外卖商品绑定厨显方案
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
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 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)
{
//播放声音
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);
}
}
}