|
|
using NLog;
|
|
|
using POSV.Card;
|
|
|
using POSV.Entity;
|
|
|
using POSV.Helper;
|
|
|
using POSV.MessageEvent;
|
|
|
using POSV.MsgCenter;
|
|
|
using POSV.ServiceCenter;
|
|
|
using POSV.ShoppingCart;
|
|
|
using POSV.Utils;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
using System.Web.UI;
|
|
|
using uPLibrary.Networking.M2Mqtt.Messages;
|
|
|
using System.Collections.ObjectModel;
|
|
|
using POSV.QiMai;
|
|
|
using POSV.ThirdPartyOrderData;
|
|
|
|
|
|
namespace POSV.OtherWaiMai
|
|
|
{
|
|
|
public class OtherWaiMaiApi
|
|
|
{
|
|
|
|
|
|
public static Dictionary<string, string> orderMap = new Dictionary<string, string>();
|
|
|
|
|
|
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
public static void sendWaiMaiMessage(string message)
|
|
|
{
|
|
|
logger.Info(">>>>>>sendWaiMaiMessage>>>>>>>>{0}", message);
|
|
|
|
|
|
try
|
|
|
{
|
|
|
|
|
|
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(message);
|
|
|
if (waiMaiMap.ContainsKey("meituan") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan"]))
|
|
|
{
|
|
|
//如果发送的时间和本机相差15分钟,证明是无效消息
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["meituan"].Split(',');
|
|
|
//有美团外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.美团外卖.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_new");
|
|
|
logger.Info("美团外卖订单播放声音");
|
|
|
// 是否自动接单
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.MEITUAN_CONFIRM_PARAMETER, false);
|
|
|
if (openConfirm && !Global.isHandOver)
|
|
|
{
|
|
|
logger.Info("美团外卖自动接单");
|
|
|
int handOrderCount = orderIds.Length;
|
|
|
for (int i = 0; i < orderIds.Length; i++)
|
|
|
{
|
|
|
string orderId = orderIds[i];
|
|
|
MeiTuanOrderConfirmRequest request = new MeiTuanOrderConfirmRequest();
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request.OrderId = orderId;
|
|
|
var response = OtherWaiMaiUtils.MeiTuanOrderConfirm(request);
|
|
|
if (response != null)
|
|
|
{
|
|
|
logger.Info("美团外卖自动接单:" + response.Item2);
|
|
|
if (response.Item1)
|
|
|
{
|
|
|
handOrderCount = handOrderCount - 1;
|
|
|
//接单成功刷新页面
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.美团外卖.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount))
|
|
|
});
|
|
|
//接单成功打印订单
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
MeiTuanOrderRequest request1 = new MeiTuanOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.OrderId = orderId;
|
|
|
var response1 = OtherWaiMaiUtils.MeiTuanOrder(request1);
|
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("美团外卖订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
logger.Info($"美团外卖自动接单组装本地数据,data:{response1.Item3.Data}");
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalMeiTuan(response1.Item3.Data);
|
|
|
logger.Info("美团外卖组装本地数据成功");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("美团外卖插入本地数据库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
//单品优惠
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
//档口结算信息赋默认值
|
|
|
payItem.Ext1 = "0";
|
|
|
payItem.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add 添加结算参数计算
|
|
|
OrderUtils.SetPayModeDiscount(payItem, payMode);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
logger.Info("美团外卖插入本地数据库成功");
|
|
|
//更新是否有订单需要上传的状态
|
|
|
logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
logger.Info("美团外卖自动接单打印");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.BuilderMeiTuanVariable(response1.Item3.Data.PoiName, response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("美团外卖", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info("美团外卖标签打印成功");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info("美团外卖厨打标签成功");
|
|
|
//启用外卖商品绑定厨显方案
|
|
|
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
|
|
|
//启用外卖商品绑定厨打方案
|
|
|
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
if (planKit)
|
|
|
{
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info("美团外卖厨打成功");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info("美团外卖出品成功");
|
|
|
}
|
|
|
if (planKds)
|
|
|
{
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info("美团外卖厨显成功");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
|
|
|
logger.Info("美团外卖 接单成功打印订单异常" + ex.Message);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("meituan_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan_cancel"]))
|
|
|
{
|
|
|
string orderId = waiMaiMap["meituan_cancel"];
|
|
|
//防止推送多次退单
|
|
|
if (orderMap.ContainsKey("orderId" + orderId))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
orderMap.Add("orderId" + orderId, orderId);
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_cancel");
|
|
|
logger.Info("美团订单被取消播放声音");
|
|
|
}
|
|
|
//如果本地有订单,将本地订单退单
|
|
|
try
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
//退单打印逻辑
|
|
|
UserCancelPrinterTicket("美团外卖", orderId, _OrderObject);
|
|
|
if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo))
|
|
|
{
|
|
|
logger.Info("订单已完全退单");
|
|
|
return;
|
|
|
}
|
|
|
//生成新单
|
|
|
OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject);
|
|
|
string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//=========更新原单内容
|
|
|
//录入原单号
|
|
|
_BackOrderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
//操作员工号
|
|
|
_BackOrderObject.WorkerNo = Global.Instance.Worker.No;
|
|
|
//操作员名称
|
|
|
_BackOrderObject.WorkerName = Global.Instance.Worker.Name;
|
|
|
_BackOrderObject.SaleDate = finishDate;
|
|
|
//班次名称
|
|
|
_BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;
|
|
|
//班次编号
|
|
|
_BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
//订单标识为 新建状态
|
|
|
_BackOrderObject.OrderStatus = OrderStatus.已退单;
|
|
|
//订单创建时间
|
|
|
_BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//订单创建人
|
|
|
_BackOrderObject.CreateUser = Global.Instance.Worker.Name;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
//星期
|
|
|
_BackOrderObject.Weeker = weeker;
|
|
|
//天气
|
|
|
_BackOrderObject.Weather = string.Empty;
|
|
|
_BackOrderObject.ObjectId = ObjectId.GenerateNewStringId();
|
|
|
_BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo();
|
|
|
_BackOrderObject.FinishDate = finishDate;
|
|
|
_BackOrderObject.Amount = 0 - _OrderObject.Amount;
|
|
|
_BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount;
|
|
|
_BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount;
|
|
|
_BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount;
|
|
|
_BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount;
|
|
|
_BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount;
|
|
|
_BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount;
|
|
|
_BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount;
|
|
|
_BackOrderObject.SyncStatus = 0;
|
|
|
_BackOrderObject.PrintStatus = 0;
|
|
|
_BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint;
|
|
|
_BackOrderObject.UploadStatus = 0;
|
|
|
_BackOrderObject.UploadMessage = "";
|
|
|
_BackOrderObject.TicketId = "";
|
|
|
_BackOrderObject.OrgTradeNo = _OrderObject.TradeNo;
|
|
|
//整单优惠
|
|
|
foreach (PromotionOrder promotion in _BackOrderObject.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//====== 更新明细内容
|
|
|
foreach (OrderItem item in _BackOrderObject.Items)
|
|
|
{
|
|
|
item.Id = IdWorkerUtils.Instance.NextId();
|
|
|
item.OrderId = _BackOrderObject.Id;
|
|
|
item.TradeNo = _BackOrderObject.TradeNo;
|
|
|
//单品优惠
|
|
|
foreach (PromotionItem promotion in item.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.ItemId = item.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//做法信息
|
|
|
foreach (FlavorItem flavor in item.Flavors)
|
|
|
{
|
|
|
flavor.isBackTicket = true;
|
|
|
flavor.isWaiMaiTicket = true;
|
|
|
flavor.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavor.OrderId = _BackOrderObject.Id;
|
|
|
flavor.ItemId = item.Id;
|
|
|
flavor.TradeNo = _BackOrderObject.TradeNo;
|
|
|
flavor.RefundQuantity = flavor.Quantity;
|
|
|
flavor.Amount = 0 - flavor.Amount;
|
|
|
flavor.Quantity = 0;
|
|
|
flavor.DiscountAmount = 0 - flavor.DiscountAmount;
|
|
|
flavor.FinishDate = finishDate;
|
|
|
}
|
|
|
item.RefundQuantity = item.Quantity;
|
|
|
item.Quantity = 0;
|
|
|
item.Amount = 0 - item.Amount;
|
|
|
item.FlavorAmount = 0 - item.FlavorAmount;
|
|
|
item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount;
|
|
|
item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount;
|
|
|
item.TotalAmonut = 0 - item.TotalAmonut;
|
|
|
item.SuitAddPrice = 0 - item.SuitAddPrice;
|
|
|
item.SuitAmount = 0 - item.SuitAmount;
|
|
|
item.SaleDate = finishDate;
|
|
|
item.ChudaQty = 0;
|
|
|
item.ChupinQty = 0;
|
|
|
item.ChuxianQty = 0;
|
|
|
item.KdsChupinQty = 0;
|
|
|
item.FinishDate = finishDate;
|
|
|
|
|
|
}
|
|
|
//支付方式遍历
|
|
|
foreach (PayItem pay in _BackOrderObject.Pays)
|
|
|
{
|
|
|
pay.Id = IdWorkerUtils.Instance.NextId();
|
|
|
pay.TradeNo = _BackOrderObject.TradeNo;
|
|
|
pay.PayNo = OrderUtils.Instance.GeneratePayNo();
|
|
|
pay.OrderId = _BackOrderObject.Id;
|
|
|
pay.Amount = 0 - pay.Amount;
|
|
|
pay.PaidAmount = 0 - pay.PaidAmount;
|
|
|
pay.ChangeAmount = 0 - pay.ChangeAmount;
|
|
|
pay.PayTime = finishDate;
|
|
|
pay.FinishDate = finishDate;
|
|
|
pay.OverAmount = 0 - pay.OverAmount;
|
|
|
pay.ShiftName = _BackOrderObject.ShiftName;
|
|
|
pay.ShiftNo = _BackOrderObject.ShiftNo;
|
|
|
|
|
|
|
|
|
//zhangy 2020-02-20 Add,增加退单的门店结算扣率处理逻辑
|
|
|
//档口结算信息赋默认值
|
|
|
pay.Ext1 = "0";
|
|
|
pay.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(pay.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
pay.IncomeFlag = 1;
|
|
|
pay.OtherRateType = 0;
|
|
|
pay.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
pay.IncomeFlag = payMode.IncomeFlag;
|
|
|
pay.OtherRateType = payMode.OtherRateType;
|
|
|
pay.OtherRateValue = 0 - payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add,退单,扣率金额也退
|
|
|
pay.Ext2 = string.IsNullOrEmpty(pay.Ext2) ? "0" : ("-" + pay.Ext2);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject);
|
|
|
if (!isException)
|
|
|
{
|
|
|
_OrderObject.OrgTradeNo = _BackOrderObject.TradeNo;
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
db.Update(_OrderObject);
|
|
|
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.Info("美团退单完成");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("美团退单保存失败!");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("美团获取订单信息异常");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "美团退单发生异常");
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("eleme_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme_cancel"]))
|
|
|
{
|
|
|
string orderId = waiMaiMap["eleme_cancel"];
|
|
|
//防止推送多次退单
|
|
|
if (orderMap.ContainsKey("orderId" + orderId))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
orderMap.Add("orderId" + orderId, orderId);
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_cancel");
|
|
|
logger.Info("饿了么订单被取消播放声音");
|
|
|
}
|
|
|
//如果本地有订单,将本地订单退单
|
|
|
try
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
//退单打印逻辑
|
|
|
UserCancelPrinterTicket("饿了么", orderId, _OrderObject);
|
|
|
if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo))
|
|
|
{
|
|
|
logger.Info("订单已完全退单");
|
|
|
return;
|
|
|
}
|
|
|
//生成新单
|
|
|
OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject);
|
|
|
string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//=========更新原单内容
|
|
|
//录入原单号
|
|
|
_BackOrderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
//操作员工号
|
|
|
_BackOrderObject.WorkerNo = Global.Instance.Worker.No;
|
|
|
//操作员名称
|
|
|
_BackOrderObject.WorkerName = Global.Instance.Worker.Name;
|
|
|
_BackOrderObject.SaleDate = finishDate;
|
|
|
//班次名称
|
|
|
_BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;
|
|
|
//班次编号
|
|
|
_BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
//订单标识为 新建状态
|
|
|
_BackOrderObject.OrderStatus = OrderStatus.已退单;
|
|
|
//订单创建时间
|
|
|
_BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//订单创建人
|
|
|
_BackOrderObject.CreateUser = Global.Instance.Worker.Name;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
//星期
|
|
|
_BackOrderObject.Weeker = weeker;
|
|
|
//天气
|
|
|
_BackOrderObject.Weather = string.Empty;
|
|
|
_BackOrderObject.ObjectId = ObjectId.GenerateNewStringId();
|
|
|
_BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo();
|
|
|
_BackOrderObject.FinishDate = finishDate;
|
|
|
_BackOrderObject.Amount = 0 - _OrderObject.Amount;
|
|
|
_BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount;
|
|
|
_BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount;
|
|
|
_BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount;
|
|
|
_BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount;
|
|
|
_BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount;
|
|
|
_BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount;
|
|
|
_BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount;
|
|
|
_BackOrderObject.SyncStatus = 0;
|
|
|
_BackOrderObject.PrintStatus = 0;
|
|
|
_BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint;
|
|
|
_BackOrderObject.UploadStatus = 0;
|
|
|
_BackOrderObject.UploadMessage = "";
|
|
|
_BackOrderObject.TicketId = "";
|
|
|
_BackOrderObject.OrgTradeNo = _OrderObject.TradeNo;
|
|
|
//整单优惠
|
|
|
foreach (PromotionOrder promotion in _BackOrderObject.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//====== 更新明细内容
|
|
|
foreach (OrderItem item in _BackOrderObject.Items)
|
|
|
{
|
|
|
item.Id = IdWorkerUtils.Instance.NextId();
|
|
|
item.OrderId = _BackOrderObject.Id;
|
|
|
item.TradeNo = _BackOrderObject.TradeNo;
|
|
|
//单品优惠
|
|
|
foreach (PromotionItem promotion in item.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.ItemId = item.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//做法信息
|
|
|
foreach (FlavorItem flavor in item.Flavors)
|
|
|
{
|
|
|
flavor.isBackTicket = true;
|
|
|
flavor.isWaiMaiTicket = true;
|
|
|
flavor.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavor.OrderId = _BackOrderObject.Id;
|
|
|
flavor.ItemId = item.Id;
|
|
|
flavor.TradeNo = _BackOrderObject.TradeNo;
|
|
|
flavor.RefundQuantity = flavor.Quantity;
|
|
|
flavor.Amount = 0 - flavor.Amount;
|
|
|
flavor.Quantity = 0;
|
|
|
flavor.DiscountAmount = 0 - flavor.DiscountAmount;
|
|
|
flavor.FinishDate = finishDate;
|
|
|
}
|
|
|
item.RefundQuantity = item.Quantity;
|
|
|
item.Quantity = 0;
|
|
|
item.Amount = 0 - item.Amount;
|
|
|
item.FlavorAmount = 0 - item.FlavorAmount;
|
|
|
item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount;
|
|
|
item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount;
|
|
|
item.TotalAmonut = 0 - item.TotalAmonut;
|
|
|
item.SuitAddPrice = 0 - item.SuitAddPrice;
|
|
|
item.SuitAmount = 0 - item.SuitAmount;
|
|
|
item.SaleDate = finishDate;
|
|
|
item.ChudaQty = 0;
|
|
|
item.ChupinQty = 0;
|
|
|
item.ChuxianQty = 0;
|
|
|
item.KdsChupinQty = 0;
|
|
|
item.FinishDate = finishDate;
|
|
|
|
|
|
}
|
|
|
//支付方式遍历
|
|
|
foreach (PayItem pay in _BackOrderObject.Pays)
|
|
|
{
|
|
|
pay.Id = IdWorkerUtils.Instance.NextId();
|
|
|
pay.TradeNo = _BackOrderObject.TradeNo;
|
|
|
pay.PayNo = OrderUtils.Instance.GeneratePayNo();
|
|
|
pay.OrderId = _BackOrderObject.Id;
|
|
|
pay.Amount = 0 - pay.Amount;
|
|
|
pay.PaidAmount = 0 - pay.PaidAmount;
|
|
|
pay.ChangeAmount = 0 - pay.ChangeAmount;
|
|
|
pay.PayTime = finishDate;
|
|
|
pay.FinishDate = finishDate;
|
|
|
pay.OverAmount = 0 - pay.OverAmount;
|
|
|
pay.ShiftName = _BackOrderObject.ShiftName;
|
|
|
pay.ShiftNo = _BackOrderObject.ShiftNo;
|
|
|
|
|
|
//zhangy 2020-02-20 Add,增加退单的门店结算扣率处理逻辑
|
|
|
//档口结算信息赋默认值
|
|
|
pay.Ext1 = "0";
|
|
|
pay.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(pay.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
pay.IncomeFlag = 1;
|
|
|
pay.OtherRateType = 0;
|
|
|
pay.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
pay.IncomeFlag = payMode.IncomeFlag;
|
|
|
pay.OtherRateType = payMode.OtherRateType;
|
|
|
pay.OtherRateValue = 0 - payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add,退单,扣率金额也退
|
|
|
pay.Ext2 = string.IsNullOrEmpty(pay.Ext2) ? "0" : ("-" + pay.Ext2);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject);
|
|
|
if (!isException)
|
|
|
{
|
|
|
_OrderObject.OrgTradeNo = _BackOrderObject.TradeNo;
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
db.Update(_OrderObject);
|
|
|
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//LOGGER.Info("开始打印");
|
|
|
//this.ShowToastNotify(this, "正在打印退款单...");
|
|
|
//开始打印
|
|
|
//_BackOrderObject.PrintType = 1;
|
|
|
//_BackOrderObject.RPrint = false;
|
|
|
//this.PrintOrderObject(_BackOrderObject, true);
|
|
|
logger.Info("饿了么退单完成");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("饿了么退单保存失败!");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("饿了么获取订单信息异常!");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "退单发生异常");
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("eleme") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme"]))
|
|
|
{
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["eleme"].Split(',');
|
|
|
//有饿了么外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.饿了么.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("eleme");
|
|
|
logger.Info("饿了么播放声音");
|
|
|
// 是否自动接单
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.ELEME_CONFIRM_PARAMETER, false);
|
|
|
if (openConfirm && !Global.isHandOver)
|
|
|
{
|
|
|
logger.Info("饿了么自动接单");
|
|
|
int handOrderCount = orderIds.Length;
|
|
|
for (int i = 0; i < orderIds.Length; i++)
|
|
|
{
|
|
|
string orderId = orderIds[i];
|
|
|
|
|
|
EleMeOrderConfirmRequest request = new EleMeOrderConfirmRequest();
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request.OrderId = orderId;
|
|
|
var response = OtherWaiMaiUtils.EleMeOrderConfirm(request);
|
|
|
if (response != null)
|
|
|
{
|
|
|
logger.Info("饿了么自动接单:" + response.Item2);
|
|
|
if (response.Item1)
|
|
|
{
|
|
|
handOrderCount = handOrderCount - 1;
|
|
|
//接单成功刷新页面
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.饿了么.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount))
|
|
|
});
|
|
|
//接单成功打印订单
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
|
|
|
|
|
|
EleMeOrderRequest request1 = new EleMeOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.OrderId = orderId;
|
|
|
var response1 = OtherWaiMaiUtils.EleMeOrder(request1);
|
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("饿了么订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalEleme(response1.Item3.Data);
|
|
|
logger.Info("饿了么组装本地数据库成功");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("饿了么订单入库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
//单品优惠
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
//档口结算信息赋默认值
|
|
|
payItem.Ext1 = "0";
|
|
|
payItem.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add 添加结算参数计算
|
|
|
OrderUtils.SetPayModeDiscount(payItem, payMode);
|
|
|
}
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
//更新是否有订单需要上传的状态
|
|
|
logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
logger.Info("饿了么订单入库成功");
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.Info("饿了么自动接单打印");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.BuilderEleMeVariable(response1.Item3.Data.ShopName, response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("饿了么", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info("饿了么标签打印成功");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info("饿了么外卖厨打标签成功");
|
|
|
//启用外卖商品绑定厨显方案
|
|
|
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
|
|
|
//启用外卖商品绑定厨打方案
|
|
|
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
if (planKit)
|
|
|
{
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info("饿了么厨打成功");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info("饿了么出品成功");
|
|
|
}
|
|
|
if (planKds)
|
|
|
{
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info("饿了么厨显成功");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Info("饿了么异常" + ex.Message);
|
|
|
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("eleme_force_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme_force_cancel"]))
|
|
|
{
|
|
|
string orderId = waiMaiMap["eleme_force_cancel"];
|
|
|
//防止推送多次退单
|
|
|
if (orderMap.ContainsKey("orderId" + orderId))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
logger.Info("收到饿了么极速退单<" + orderId + ">");
|
|
|
|
|
|
orderMap.Add("orderId" + orderId, orderId);
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_cancel");
|
|
|
logger.Info("饿了么极速退单播放声音");
|
|
|
}
|
|
|
|
|
|
//如果本地有订单,将本地订单退单
|
|
|
try
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
//退单打印逻辑
|
|
|
UserCancelPrinterTicket("饿了么", orderId, _OrderObject);
|
|
|
if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo))
|
|
|
{
|
|
|
logger.Info("订单已完全退单");
|
|
|
return;
|
|
|
}
|
|
|
//生成新单
|
|
|
OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject);
|
|
|
string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//=========更新原单内容
|
|
|
//录入原单号
|
|
|
_BackOrderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
//操作员工号
|
|
|
_BackOrderObject.WorkerNo = Global.Instance.Worker.No;
|
|
|
//操作员名称
|
|
|
_BackOrderObject.WorkerName = Global.Instance.Worker.Name;
|
|
|
_BackOrderObject.SaleDate = finishDate;
|
|
|
//班次名称
|
|
|
_BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;
|
|
|
//班次编号
|
|
|
_BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
//订单标识为 新建状态
|
|
|
_BackOrderObject.OrderStatus = OrderStatus.已退单;
|
|
|
//订单创建时间
|
|
|
_BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//订单创建人
|
|
|
_BackOrderObject.CreateUser = Global.Instance.Worker.Name;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
//星期
|
|
|
_BackOrderObject.Weeker = weeker;
|
|
|
//天气
|
|
|
_BackOrderObject.Weather = string.Empty;
|
|
|
_BackOrderObject.ObjectId = ObjectId.GenerateNewStringId();
|
|
|
_BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo();
|
|
|
_BackOrderObject.FinishDate = finishDate;
|
|
|
_BackOrderObject.Amount = 0 - _OrderObject.Amount;
|
|
|
_BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount;
|
|
|
_BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount;
|
|
|
_BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount;
|
|
|
_BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount;
|
|
|
_BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount;
|
|
|
_BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount;
|
|
|
_BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount;
|
|
|
_BackOrderObject.SyncStatus = 0;
|
|
|
_BackOrderObject.PrintStatus = 0;
|
|
|
_BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint;
|
|
|
_BackOrderObject.UploadStatus = 0;
|
|
|
_BackOrderObject.UploadMessage = "";
|
|
|
_BackOrderObject.TicketId = "";
|
|
|
_BackOrderObject.OrgTradeNo = _OrderObject.TradeNo;
|
|
|
//整单优惠
|
|
|
foreach (PromotionOrder promotion in _BackOrderObject.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//====== 更新明细内容
|
|
|
foreach (OrderItem item in _BackOrderObject.Items)
|
|
|
{
|
|
|
item.Id = IdWorkerUtils.Instance.NextId();
|
|
|
item.OrderId = _BackOrderObject.Id;
|
|
|
item.TradeNo = _BackOrderObject.TradeNo;
|
|
|
//单品优惠
|
|
|
foreach (PromotionItem promotion in item.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.ItemId = item.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//做法信息
|
|
|
foreach (FlavorItem flavor in item.Flavors)
|
|
|
{
|
|
|
flavor.isBackTicket = true;
|
|
|
flavor.isWaiMaiTicket = true;
|
|
|
flavor.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavor.OrderId = _BackOrderObject.Id;
|
|
|
flavor.ItemId = item.Id;
|
|
|
flavor.TradeNo = _BackOrderObject.TradeNo;
|
|
|
flavor.RefundQuantity = flavor.Quantity;
|
|
|
flavor.Amount = 0 - flavor.Amount;
|
|
|
flavor.Quantity = 0;
|
|
|
flavor.DiscountAmount = 0 - flavor.DiscountAmount;
|
|
|
flavor.FinishDate = finishDate;
|
|
|
}
|
|
|
item.RefundQuantity = item.Quantity;
|
|
|
item.Quantity = 0;
|
|
|
item.Amount = 0 - item.Amount;
|
|
|
item.FlavorAmount = 0 - item.FlavorAmount;
|
|
|
item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount;
|
|
|
item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount;
|
|
|
item.TotalAmonut = 0 - item.TotalAmonut;
|
|
|
item.SuitAddPrice = 0 - item.SuitAddPrice;
|
|
|
item.SuitAmount = 0 - item.SuitAmount;
|
|
|
item.SaleDate = finishDate;
|
|
|
item.ChudaQty = 0;
|
|
|
item.ChupinQty = 0;
|
|
|
item.ChuxianQty = 0;
|
|
|
item.KdsChupinQty = 0;
|
|
|
item.FinishDate = finishDate;
|
|
|
|
|
|
}
|
|
|
//支付方式遍历
|
|
|
foreach (PayItem pay in _BackOrderObject.Pays)
|
|
|
{
|
|
|
pay.Id = IdWorkerUtils.Instance.NextId();
|
|
|
pay.TradeNo = _BackOrderObject.TradeNo;
|
|
|
pay.PayNo = OrderUtils.Instance.GeneratePayNo();
|
|
|
pay.OrderId = _BackOrderObject.Id;
|
|
|
pay.Amount = 0 - pay.Amount;
|
|
|
pay.PaidAmount = 0 - pay.PaidAmount;
|
|
|
pay.ChangeAmount = 0 - pay.ChangeAmount;
|
|
|
pay.PayTime = finishDate;
|
|
|
pay.FinishDate = finishDate;
|
|
|
pay.OverAmount = 0 - pay.OverAmount;
|
|
|
pay.ShiftName = _BackOrderObject.ShiftName;
|
|
|
pay.ShiftNo = _BackOrderObject.ShiftNo;
|
|
|
|
|
|
//zhangy 2020-02-20 Add,增加退单的门店结算扣率处理逻辑
|
|
|
//档口结算信息赋默认值
|
|
|
pay.Ext1 = "0";
|
|
|
pay.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(pay.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
pay.IncomeFlag = 1;
|
|
|
pay.OtherRateType = 0;
|
|
|
pay.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
pay.IncomeFlag = payMode.IncomeFlag;
|
|
|
pay.OtherRateType = payMode.OtherRateType;
|
|
|
pay.OtherRateValue = 0 - payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add,退单,扣率金额也退
|
|
|
pay.Ext2 = string.IsNullOrEmpty(pay.Ext2) ? "0" : ("-" + pay.Ext2);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject);
|
|
|
if (!isException)
|
|
|
{
|
|
|
_OrderObject.OrgTradeNo = _BackOrderObject.TradeNo;
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
db.Update(_OrderObject);
|
|
|
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
logger.Info("饿了么极速退单完成");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("饿了么极速退单保存失败!");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("饿了么极速退单,获取订单信息异常!");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "极速退单发生异常");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 开启商家版美团外卖和餐道外卖
|
|
|
/// </summary>
|
|
|
/// <param name="message"></param>
|
|
|
public static void sendSJWaiMaiMessage(string message)
|
|
|
{
|
|
|
if (logger == null)
|
|
|
{
|
|
|
logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
}
|
|
|
logger.Info(">>>>>>sendSJWaiMaiMessage>>>>>>>>{0}", message);
|
|
|
|
|
|
try
|
|
|
{
|
|
|
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(message);
|
|
|
if (waiMaiMap.ContainsKey("meituan") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan"]))
|
|
|
{
|
|
|
//如果发送的时间和本机相差15分钟,证明是无效消息
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["meituan"].Split(',');
|
|
|
|
|
|
//订单来源("0":美团大商户;"1":餐道美团),zhangy add 2020-01-14
|
|
|
string orderSource = waiMaiMap.ContainsKey("orderType") ? waiMaiMap["orderType"] : "0";
|
|
|
|
|
|
logger.Info("订单来源>>>>>{0}", orderSource);
|
|
|
|
|
|
//有美团外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.美团外卖.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
//20240204 subin 改为异步播放
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_new");
|
|
|
logger.Info("美团外卖订单播放声音");
|
|
|
});
|
|
|
|
|
|
// 是否自动接单
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.MEITUAN_CONFIRM_PARAMETER, false);
|
|
|
if (openConfirm && !Global.isHandOver)
|
|
|
{
|
|
|
logger.Info("美团外卖自动接单<{0},{1}>", openConfirm, orderSource);
|
|
|
int handOrderCount = orderIds.Length;
|
|
|
for (int i = 0; i < orderIds.Length; i++)
|
|
|
{
|
|
|
string orderId = orderIds[i];
|
|
|
|
|
|
MeiTuanOrderConfirmRequest request = new MeiTuanOrderConfirmRequest();
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request.OrderId = orderId;
|
|
|
var response = OtherWaiMaiUtils.SJ_MeiTuanOrderConfirm(request);
|
|
|
logger.Info("美团外卖接单结果:" + JsonUtils.Serialize(response));
|
|
|
|
|
|
//if (response != null)
|
|
|
//{
|
|
|
// if (!response.Item1)
|
|
|
// {
|
|
|
// if (response.Item2.Equals("商家美团订单接单异常,本次操作无效"))
|
|
|
// {
|
|
|
// logger.Info("美团外卖第二次订单确认");
|
|
|
// response = OtherWaiMaiUtils.SJ_MeiTuanOrderConfirm(request);
|
|
|
// }
|
|
|
// }
|
|
|
//}
|
|
|
|
|
|
if (response != null)
|
|
|
{
|
|
|
logger.Info("美团外卖自动接单:" + response.Item2);
|
|
|
if (response.Item1)
|
|
|
{
|
|
|
handOrderCount = handOrderCount - 1;
|
|
|
//接单成功刷新页面
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.美团外卖.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.美团外卖, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount))
|
|
|
});
|
|
|
//接单成功打印订单
|
|
|
try
|
|
|
{
|
|
|
MeiTuanOrderRequest request1 = new MeiTuanOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.OrderId = orderId;
|
|
|
var response1 = OtherWaiMaiUtils.SJ_MeiTuanOrder(request1);
|
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("美团外卖订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
//logger.Info($"美团外卖自动接单组装本地数据,data:{JsonUtils.Serialize(response1.Item3.Data)}");
|
|
|
logger.Info("美团外卖自动接单组装本地数据");
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalSJMeiTuan(response1.Item3.Data);
|
|
|
logger.Info("美团外卖组装本地数据成功");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("美团外卖插入本地数据库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
//单品优惠
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
//档口结算信息赋默认值
|
|
|
payItem.Ext1 = "0";
|
|
|
payItem.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add 添加结算参数计算
|
|
|
OrderUtils.SetPayModeDiscount(payItem, payMode);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
logger.Info("美团外卖插入本地数据库成功");
|
|
|
//更新是否有订单需要上传的状态
|
|
|
logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
//20240204 subin 改为异步打印
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
logger.Info($"美团外卖自动接单打印<{orderObject.TradeNo}>");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.SJBuilderMeiTuanVariable(response1.Item3.Data.Wm_poi_name, response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("美团外卖", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info($"美团外卖标签打印成功<{orderObject.TradeNo}>");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info($"美团外卖厨打标签成功<{orderObject.TradeNo}>");
|
|
|
|
|
|
//启用外卖商品绑定厨打方案
|
|
|
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
if (planKit)
|
|
|
{
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info($"美团外卖厨打成功<{orderObject.TradeNo}>");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info($"美团外卖出品成功<{orderObject.TradeNo}>");
|
|
|
}
|
|
|
//启用外卖商品绑定厨显方案
|
|
|
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
|
|
|
if (planKds)
|
|
|
{
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info($"美团外卖厨显成功<{orderObject.TradeNo}>");
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
|
|
|
logger.Info("美团外卖 接单成功打印订单异常" + ex.Message);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("meituan_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["meituan_cancel"]))
|
|
|
{
|
|
|
string orderId = waiMaiMap["meituan_cancel"];
|
|
|
//防止推送多次退单
|
|
|
if (orderMap.ContainsKey("orderId" + orderId))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
orderMap.Add("orderId" + orderId, orderId);
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
//20240204 subin 改为异步播放
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_cancel");
|
|
|
logger.Info("美团订单被取消播放声音");
|
|
|
});
|
|
|
}
|
|
|
//如果本地有订单,将本地订单退单
|
|
|
try
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("4" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
//退单打印逻辑
|
|
|
UserCancelPrinterTicket("美团外卖", orderId, _OrderObject);
|
|
|
if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo))
|
|
|
{
|
|
|
logger.Info("订单已完全退单");
|
|
|
return;
|
|
|
}
|
|
|
//生成新单
|
|
|
OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject);
|
|
|
string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//=========更新原单内容
|
|
|
//录入原单号
|
|
|
_BackOrderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
//操作员工号
|
|
|
_BackOrderObject.WorkerNo = Global.Instance.Worker.No;
|
|
|
//操作员名称
|
|
|
_BackOrderObject.WorkerName = Global.Instance.Worker.Name;
|
|
|
_BackOrderObject.SaleDate = finishDate;
|
|
|
//班次名称
|
|
|
_BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;
|
|
|
//班次编号
|
|
|
_BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
//订单标识为 新建状态
|
|
|
_BackOrderObject.OrderStatus = OrderStatus.已退单;
|
|
|
//订单创建时间
|
|
|
_BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//订单创建人
|
|
|
_BackOrderObject.CreateUser = Global.Instance.Worker.Name;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
//星期
|
|
|
_BackOrderObject.Weeker = weeker;
|
|
|
//天气
|
|
|
_BackOrderObject.Weather = string.Empty;
|
|
|
_BackOrderObject.ObjectId = ObjectId.GenerateNewStringId();
|
|
|
_BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo();
|
|
|
_BackOrderObject.FinishDate = finishDate;
|
|
|
_BackOrderObject.Amount = 0 - _OrderObject.Amount;
|
|
|
_BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount;
|
|
|
_BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount;
|
|
|
_BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount;
|
|
|
_BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount;
|
|
|
_BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount;
|
|
|
_BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount;
|
|
|
_BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount;
|
|
|
_BackOrderObject.SyncStatus = 0;
|
|
|
_BackOrderObject.PrintStatus = 0;
|
|
|
_BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint;
|
|
|
_BackOrderObject.UploadStatus = 0;
|
|
|
_BackOrderObject.UploadMessage = "";
|
|
|
_BackOrderObject.TicketId = "";
|
|
|
_BackOrderObject.OrgTradeNo = _OrderObject.TradeNo;
|
|
|
//整单优惠
|
|
|
foreach (PromotionOrder promotion in _BackOrderObject.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//====== 更新明细内容
|
|
|
foreach (OrderItem item in _BackOrderObject.Items)
|
|
|
{
|
|
|
item.Id = IdWorkerUtils.Instance.NextId();
|
|
|
item.OrderId = _BackOrderObject.Id;
|
|
|
item.TradeNo = _BackOrderObject.TradeNo;
|
|
|
//单品优惠
|
|
|
foreach (PromotionItem promotion in item.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.ItemId = item.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//做法信息
|
|
|
foreach (FlavorItem flavor in item.Flavors)
|
|
|
{
|
|
|
flavor.isBackTicket = true;
|
|
|
flavor.isWaiMaiTicket = true;
|
|
|
flavor.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavor.OrderId = _BackOrderObject.Id;
|
|
|
flavor.ItemId = item.Id;
|
|
|
flavor.TradeNo = _BackOrderObject.TradeNo;
|
|
|
flavor.RefundQuantity = flavor.Quantity;
|
|
|
flavor.Amount = 0 - flavor.Amount;
|
|
|
flavor.Quantity = 0;
|
|
|
flavor.DiscountAmount = 0 - flavor.DiscountAmount;
|
|
|
flavor.FinishDate = finishDate;
|
|
|
}
|
|
|
item.RefundQuantity = item.Quantity;
|
|
|
item.Quantity = 0;
|
|
|
item.Amount = 0 - item.Amount;
|
|
|
item.FlavorAmount = 0 - item.FlavorAmount;
|
|
|
item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount;
|
|
|
item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount;
|
|
|
item.TotalAmonut = 0 - item.TotalAmonut;
|
|
|
item.SuitAddPrice = 0 - item.SuitAddPrice;
|
|
|
item.SuitAmount = 0 - item.SuitAmount;
|
|
|
item.SaleDate = finishDate;
|
|
|
item.ChudaQty = 0;
|
|
|
item.ChupinQty = 0;
|
|
|
item.ChuxianQty = 0;
|
|
|
item.KdsChupinQty = 0;
|
|
|
item.FinishDate = finishDate;
|
|
|
|
|
|
}
|
|
|
//支付方式遍历
|
|
|
foreach (PayItem pay in _BackOrderObject.Pays)
|
|
|
{
|
|
|
pay.Id = IdWorkerUtils.Instance.NextId();
|
|
|
pay.TradeNo = _BackOrderObject.TradeNo;
|
|
|
pay.PayNo = OrderUtils.Instance.GeneratePayNo();
|
|
|
pay.OrderId = _BackOrderObject.Id;
|
|
|
pay.Amount = 0 - pay.Amount;
|
|
|
pay.PaidAmount = 0 - pay.PaidAmount;
|
|
|
pay.ChangeAmount = 0 - pay.ChangeAmount;
|
|
|
pay.PayTime = finishDate;
|
|
|
pay.FinishDate = finishDate;
|
|
|
pay.OverAmount = 0 - pay.OverAmount;
|
|
|
pay.ShiftName = _BackOrderObject.ShiftName;
|
|
|
pay.ShiftNo = _BackOrderObject.ShiftNo;
|
|
|
|
|
|
}
|
|
|
//zhangy 2020-02-20 Add SaveOrderObject内置添加了结算参数的计算
|
|
|
var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject);
|
|
|
if (!isException)
|
|
|
{
|
|
|
_OrderObject.OrgTradeNo = _BackOrderObject.TradeNo;
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
db.Update(_OrderObject);
|
|
|
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.Info("美团退单完成");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("美团退单保存失败!");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("美团获取订单信息异常");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "美团退单发生异常");
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("eleme_cancel") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme_cancel"]))
|
|
|
{
|
|
|
string orderId = waiMaiMap["eleme_cancel"];
|
|
|
//防止推送多次退单
|
|
|
if (orderMap.ContainsKey("orderId" + orderId))
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
orderMap.Add("orderId" + orderId, orderId);
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
//20240204 subin 改为异步播放
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("meituan_cancel");
|
|
|
logger.Info("饿了么订单被取消播放声音");
|
|
|
});
|
|
|
}
|
|
|
//如果本地有订单,将本地订单退单
|
|
|
try
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
//退单打印逻辑
|
|
|
UserCancelPrinterTicket("饿了么", orderId, _OrderObject);
|
|
|
if (_OrderObject.OrgTradeNo != null && !"".Equals(_OrderObject.OrgTradeNo))
|
|
|
{
|
|
|
logger.Info("订单已完全退单");
|
|
|
return;
|
|
|
}
|
|
|
//生成新单
|
|
|
OrderObject _BackOrderObject = ObjectUtils.Copy(_OrderObject);
|
|
|
string finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//=========更新原单内容
|
|
|
//录入原单号
|
|
|
_BackOrderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
//操作员工号
|
|
|
_BackOrderObject.WorkerNo = Global.Instance.Worker.No;
|
|
|
//操作员名称
|
|
|
_BackOrderObject.WorkerName = Global.Instance.Worker.Name;
|
|
|
_BackOrderObject.SaleDate = finishDate;
|
|
|
//班次名称
|
|
|
_BackOrderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;
|
|
|
//班次编号
|
|
|
_BackOrderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
//订单标识为 新建状态
|
|
|
_BackOrderObject.OrderStatus = OrderStatus.已退单;
|
|
|
//订单创建时间
|
|
|
_BackOrderObject.CreateDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
//订单创建人
|
|
|
_BackOrderObject.CreateUser = Global.Instance.Worker.Name;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
//星期
|
|
|
_BackOrderObject.Weeker = weeker;
|
|
|
//天气
|
|
|
_BackOrderObject.Weather = string.Empty;
|
|
|
_BackOrderObject.ObjectId = ObjectId.GenerateNewStringId();
|
|
|
_BackOrderObject.TradeNo = OrderUtils.Instance.GenerateTicketNo();
|
|
|
_BackOrderObject.FinishDate = finishDate;
|
|
|
_BackOrderObject.Amount = 0 - _OrderObject.Amount;
|
|
|
_BackOrderObject.DiscountAmount = 0 - _OrderObject.DiscountAmount;
|
|
|
_BackOrderObject.ReceivableAmount = 0 - _OrderObject.ReceivableAmount;
|
|
|
_BackOrderObject.PaidAmount = 0 - _OrderObject.PaidAmount;
|
|
|
_BackOrderObject.ReceivedAmount = 0 - _OrderObject.ReceivedAmount;
|
|
|
_BackOrderObject.MalingAmount = 0 - _OrderObject.MalingAmount;
|
|
|
_BackOrderObject.ChangeAmount = 0 - _OrderObject.ChangeAmount;
|
|
|
_BackOrderObject.InvoicedAmount = 0 - _OrderObject.InvoicedAmount;
|
|
|
_BackOrderObject.SyncStatus = 0;
|
|
|
_BackOrderObject.PrintStatus = 0;
|
|
|
_BackOrderObject.AddPoint = 0 - _OrderObject.AddPoint;
|
|
|
_BackOrderObject.UploadStatus = 0;
|
|
|
_BackOrderObject.UploadMessage = "";
|
|
|
_BackOrderObject.TicketId = "";
|
|
|
_BackOrderObject.OrgTradeNo = _OrderObject.TradeNo;
|
|
|
//整单优惠
|
|
|
foreach (PromotionOrder promotion in _BackOrderObject.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//====== 更新明细内容
|
|
|
foreach (OrderItem item in _BackOrderObject.Items)
|
|
|
{
|
|
|
item.Id = IdWorkerUtils.Instance.NextId();
|
|
|
item.OrderId = _BackOrderObject.Id;
|
|
|
item.TradeNo = _BackOrderObject.TradeNo;
|
|
|
//单品优惠
|
|
|
foreach (PromotionItem promotion in item.Promotions)
|
|
|
{
|
|
|
promotion.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotion.OrderId = _BackOrderObject.Id;
|
|
|
promotion.ItemId = item.Id;
|
|
|
promotion.TradeNo = _BackOrderObject.TradeNo;
|
|
|
promotion.Amount = 0 - promotion.Amount;
|
|
|
promotion.DiscountAmount = 0 - promotion.DiscountAmount;
|
|
|
promotion.ReceivableAmount = 0 - promotion.ReceivableAmount;
|
|
|
promotion.FinishDate = finishDate;
|
|
|
}
|
|
|
//做法信息
|
|
|
foreach (FlavorItem flavor in item.Flavors)
|
|
|
{
|
|
|
flavor.isBackTicket = true;
|
|
|
flavor.isWaiMaiTicket = true;
|
|
|
flavor.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavor.OrderId = _BackOrderObject.Id;
|
|
|
flavor.ItemId = item.Id;
|
|
|
flavor.TradeNo = _BackOrderObject.TradeNo;
|
|
|
flavor.RefundQuantity = flavor.Quantity;
|
|
|
flavor.Amount = 0 - flavor.Amount;
|
|
|
flavor.Quantity = 0;
|
|
|
flavor.DiscountAmount = 0 - flavor.DiscountAmount;
|
|
|
flavor.FinishDate = finishDate;
|
|
|
}
|
|
|
item.RefundQuantity = item.Quantity;
|
|
|
item.Quantity = 0;
|
|
|
item.Amount = 0 - item.Amount;
|
|
|
item.FlavorAmount = 0 - item.FlavorAmount;
|
|
|
item.FlavorDiscountAmount = 0 - item.FlavorDiscountAmount;
|
|
|
item.FlavorReceivableAmount = 0 - item.FlavorReceivableAmount;
|
|
|
item.TotalAmonut = 0 - item.TotalAmonut;
|
|
|
item.SuitAddPrice = 0 - item.SuitAddPrice;
|
|
|
item.SuitAmount = 0 - item.SuitAmount;
|
|
|
item.SaleDate = finishDate;
|
|
|
item.ChudaQty = 0;
|
|
|
item.ChupinQty = 0;
|
|
|
item.ChuxianQty = 0;
|
|
|
item.KdsChupinQty = 0;
|
|
|
item.FinishDate = finishDate;
|
|
|
|
|
|
}
|
|
|
//支付方式遍历
|
|
|
foreach (PayItem pay in _BackOrderObject.Pays)
|
|
|
{
|
|
|
pay.Id = IdWorkerUtils.Instance.NextId();
|
|
|
pay.TradeNo = _BackOrderObject.TradeNo;
|
|
|
pay.PayNo = OrderUtils.Instance.GeneratePayNo();
|
|
|
pay.OrderId = _BackOrderObject.Id;
|
|
|
pay.Amount = 0 - pay.Amount;
|
|
|
pay.PaidAmount = 0 - pay.PaidAmount;
|
|
|
pay.ChangeAmount = 0 - pay.ChangeAmount;
|
|
|
pay.PayTime = finishDate;
|
|
|
pay.FinishDate = finishDate;
|
|
|
pay.OverAmount = 0 - pay.OverAmount;
|
|
|
pay.ShiftName = _BackOrderObject.ShiftName;
|
|
|
pay.ShiftNo = _BackOrderObject.ShiftNo;
|
|
|
}
|
|
|
|
|
|
//zhangy 2020-02-20 Add SaveOrderObject内置添加了结算参数的计算
|
|
|
var isException = OrderUtils.Instance.SaveOrderObject(_BackOrderObject);
|
|
|
if (!isException)
|
|
|
{
|
|
|
_OrderObject.OrgTradeNo = _BackOrderObject.TradeNo;
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
db.Update(_OrderObject);
|
|
|
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//LOGGER.Info("开始打印");
|
|
|
//this.ShowToastNotify(this, "正在打印退款单...");
|
|
|
//开始打印
|
|
|
//_BackOrderObject.PrintType = 1;
|
|
|
//_BackOrderObject.RPrint = false;
|
|
|
//this.PrintOrderObject(_BackOrderObject, true);
|
|
|
logger.Info("饿了么退单完成");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("饿了么退单保存失败!");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("饿了么获取订单信息异常!");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "退单发生异常");
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("eleme") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["eleme"]))
|
|
|
{
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["eleme"].Split(',');
|
|
|
//有饿了么外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.饿了么.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("eleme");
|
|
|
logger.Info("饿了么播放声音");
|
|
|
// 是否自动接单
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.ELEME_CONFIRM_PARAMETER, false);
|
|
|
if (openConfirm && !Global.isHandOver)
|
|
|
{
|
|
|
logger.Info("饿了么自动接单");
|
|
|
int handOrderCount = orderIds.Length;
|
|
|
for (int i = 0; i < orderIds.Length; i++)
|
|
|
{
|
|
|
string orderId = orderIds[i];
|
|
|
|
|
|
EleMeOrderConfirmRequest request = new EleMeOrderConfirmRequest();
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request.OrderId = orderId;
|
|
|
var response = OtherWaiMaiUtils.EleMeOrderConfirm(request);
|
|
|
if (response != null)
|
|
|
{
|
|
|
logger.Info("饿了么自动接单:" + response.Item2);
|
|
|
if (response.Item1)
|
|
|
{
|
|
|
handOrderCount = handOrderCount - 1;
|
|
|
//接单成功刷新页面
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.饿了么.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.饿了么, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount))
|
|
|
});
|
|
|
//接单成功打印订单
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
|
|
|
|
|
|
EleMeOrderRequest request1 = new EleMeOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.OrderId = orderId;
|
|
|
var response1 = OtherWaiMaiUtils.EleMeOrder(request1);
|
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("5" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("饿了么订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalEleme(response1.Item3.Data);
|
|
|
logger.Info("饿了么组装本地数据库成功");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("饿了么订单入库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
//单品优惠
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
//档口结算信息赋默认值
|
|
|
payItem.Ext1 = "0";
|
|
|
payItem.Ext2 = "0";
|
|
|
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add 添加结算参数计算
|
|
|
OrderUtils.SetPayModeDiscount(payItem, payMode);
|
|
|
}
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
//更新是否有订单需要上传的状态
|
|
|
logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
logger.Info("饿了么订单入库成功");
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.Info("饿了么自动接单打印");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.BuilderEleMeVariable(response1.Item3.Data.ShopName, response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("饿了么", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info("饿了么标签打印成功");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info("饿了么外卖厨打标签成功");
|
|
|
//启用外卖商品绑定厨显方案
|
|
|
var planKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKDS, true);
|
|
|
//启用外卖商品绑定厨打方案
|
|
|
var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
if (planKit)
|
|
|
{
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info("饿了么厨打成功");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info("饿了么出品成功");
|
|
|
}
|
|
|
if (planKds)
|
|
|
{
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info("饿了么厨显成功");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Info("饿了么异常" + ex.Message);
|
|
|
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 微信公众号订单
|
|
|
/// </summary>
|
|
|
/// <param name="message"></param>
|
|
|
public static void sendWeixinMessage(string message)
|
|
|
{
|
|
|
logger.Info(">>>>>>sendWeixinMessage>>>>>>>>{0}", message);
|
|
|
|
|
|
try
|
|
|
{
|
|
|
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(message);
|
|
|
if (waiMaiMap.ContainsKey("weixin") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["weixin"]))
|
|
|
{
|
|
|
//如果发送的时间和本机相差15分钟,证明是无效消息
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["weixin"].Split(',');
|
|
|
//有美团外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.微信订单.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.微信订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("weixin");
|
|
|
logger.Info("微信订单播放声音");
|
|
|
// 是否自动接单
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.WEIXIN_CONFIRM_PARAMETER, false);
|
|
|
if (openConfirm)
|
|
|
{
|
|
|
int handOrderCount = orderIds.Length;
|
|
|
for (int i = 0; i < orderIds.Length; i++)
|
|
|
{
|
|
|
string orderId = orderIds[i];
|
|
|
WeiXinOrderConfirmRequest request = new WeiXinOrderConfirmRequest();
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request.TicketId = orderId;
|
|
|
var response = WeiXinOrderUtils.WeiXinOrderConfirm(request);
|
|
|
if (response != null)
|
|
|
{
|
|
|
logger.Info("微信订单自动接单:" + response.Item2);
|
|
|
if (response.Item1)
|
|
|
{
|
|
|
handOrderCount = handOrderCount - 1;
|
|
|
//接单成功刷新页面
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.微信订单.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.微信订单, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount))
|
|
|
});
|
|
|
//接单成功打印订单
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
WeiXinOrderRequest request1 = new WeiXinOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.TicketId = orderId;
|
|
|
var response1 = WeiXinOrderUtils.WeiXinOrder(request1);
|
|
|
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
string orderNo = response1.Item3.Data.TicketNo;
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("7" + orderNo);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("微信订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalWeiXin(response1.Item3.Data);
|
|
|
logger.Info("微信订单组装完成");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("微信订单入库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
//单品优惠
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
}
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是外卖订单,存储配送信息
|
|
|
if (orderObject.OrderType == OrderType.微信点餐 && response1.Item3.Data.BusMode == 2)
|
|
|
{
|
|
|
WxWaimaiOrder wxWaimaiOrder = new WxWaimaiOrder();
|
|
|
wxWaimaiOrder.Id = IdWorkerUtils.Instance.NextId();
|
|
|
wxWaimaiOrder.TenantId = orderObject.TenantId;
|
|
|
wxWaimaiOrder.TicketNo = orderObject.TableNo;
|
|
|
wxWaimaiOrder.StoreId = orderObject.StoreId;
|
|
|
wxWaimaiOrder.StoreNo = orderObject.StoreNo;
|
|
|
wxWaimaiOrder.StoreName = orderObject.StoreName;
|
|
|
wxWaimaiOrder.WorkerNo = orderObject.WorkerNo;
|
|
|
wxWaimaiOrder.ShiftId = Global.Instance.BusinessPlanLog.PlanId;
|
|
|
wxWaimaiOrder.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
wxWaimaiOrder.ReceiveName = "";
|
|
|
wxWaimaiOrder.ReceiveMobile = response1.Item3.Data.ReceiveMobile;
|
|
|
wxWaimaiOrder.ReceiveAddress = response1.Item3.Data.ReceiveAddress;
|
|
|
wxWaimaiOrder.DistributionFee = response1.Item3.Data.DistributionFee;
|
|
|
wxWaimaiOrder.Type = 1;
|
|
|
wxWaimaiOrder.IsIncome = 1;
|
|
|
wxWaimaiOrder.Status = 0;
|
|
|
wxWaimaiOrder.CreateDate = orderObject.FinishDate;
|
|
|
wxWaimaiOrder.CreateUser = orderObject.CreateUser;
|
|
|
db.Insert<WxWaimaiOrder>(wxWaimaiOrder);
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
logger.Info("微信订单入库完成");
|
|
|
//更新是否有订单需要上传的状态
|
|
|
logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.Info("微信订单自动接单打印");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.BuilderWeiXinVariable(response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("微信订单", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info("微信订单打印标签完成");
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info("微信订单厨打完成");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info("微信订单厨打标签成功");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info("微信订单出品完成");
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info("微信订单KDS完成");
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Info("微信订单异常" + ex.Message);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//public static void sendJwWeixinMessage(string message)
|
|
|
//{
|
|
|
// var _data = JsonUtils.Deserialize<Dictionary<string, string>>(message);
|
|
|
// JuWeiAppOrderProxy _juWeiAppOrderProxy = new JuWeiAppOrderProxy();
|
|
|
// if (_data == null)
|
|
|
// {
|
|
|
// logger.Info("订单推送数据解析可能出现问题");
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
// if (_data.ContainsKey("program") && _data.ContainsKey("date") && !"".Equals(_data["program"]))
|
|
|
// {
|
|
|
// //如果发送的时间和本机相差15分钟,证明是无效消息
|
|
|
// if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(_data["date"])) < 15)
|
|
|
// {
|
|
|
// string[] orderIds = _data["qimai"].Split(',');
|
|
|
|
|
|
// if (orderIds.Length > 0)
|
|
|
// {
|
|
|
// foreach (var item in orderIds)
|
|
|
// {
|
|
|
// //自动接单
|
|
|
// if (this.pictureBox4.Tag.ToString().Equals("1"))
|
|
|
// {
|
|
|
// Task.Factory.StartNew(() =>
|
|
|
// {
|
|
|
// try
|
|
|
// {
|
|
|
// logger.Info("开始打印!");
|
|
|
|
|
|
// //请求接口查询订单
|
|
|
// var _order = _juWeiAppOrderProxy.GetOrder(item);
|
|
|
|
|
|
// if (_order == null)
|
|
|
// {
|
|
|
// logger.Info("推送的订单号在服务器中查询不到!");
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
// //非待接单
|
|
|
// if (_order.Item3.Status != 1)
|
|
|
// {
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
// //请求接口修改订单状态
|
|
|
// var _status = _juWeiAppOrderProxy.SetOrderStatus(ProgramOrderOperationType.Confirm, item);
|
|
|
|
|
|
// if (!_status.Item1)
|
|
|
// {
|
|
|
// logger.Info("自动接单失败!");
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
// JuWeiAppOrderProxy.PrintOrder(_order.Item3);
|
|
|
// }
|
|
|
// catch (Exception ex)
|
|
|
// {
|
|
|
// logger.Info(ex);
|
|
|
// this.ShowToastNotify(this, "打印异常!");
|
|
|
// }
|
|
|
// });
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// //刷新待接单数据
|
|
|
// GetHandleOrder();
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 企迈订单
|
|
|
/// </summary>
|
|
|
/// <param name="message"></param>
|
|
|
public static void sendQiMaiMessage(string message)
|
|
|
{
|
|
|
logger.Info(">>>>>>sendQiMaiMessage>>>>>>>>{0}", message);
|
|
|
|
|
|
try
|
|
|
{
|
|
|
// 是否自动接单
|
|
|
bool openConfirm = Global.Instance.GlobalConfigBoolValue(ConfigConstant.QIMAI_CONFIRM_PARAMETER, false);
|
|
|
|
|
|
Dictionary<string, string> waiMaiMap = JsonUtils.Deserialize<Dictionary<string, string>>(message);
|
|
|
|
|
|
if (waiMaiMap.ContainsKey("qimai_status") && !"".Equals(waiMaiMap["qimai_status"]) && waiMaiMap.ContainsKey("date") && waiMaiMap.ContainsKey("refundStatus"))//企迈退单
|
|
|
{
|
|
|
logger.Info("收到企迈小程序退单申请");
|
|
|
|
|
|
string[] orderIds = waiMaiMap["qimai_status"].Split(',');
|
|
|
//有外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.QM小程序订单.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
|
|
|
// 播放声音
|
|
|
SoundUtils.PlaySound("weixin");
|
|
|
logger.Info("企迈小程序订单播放声音,通知手动接单");
|
|
|
|
|
|
MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai");
|
|
|
|
|
|
////手动接单,发送界面更新通知
|
|
|
//if (!openConfirm)
|
|
|
//{
|
|
|
// // 播放声音
|
|
|
// SoundUtils.PlaySound("weixin");
|
|
|
// logger.Info("企迈小程序订单播放声音,通知手动接单");
|
|
|
|
|
|
// MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai");
|
|
|
// return;
|
|
|
//}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("qimai") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["qimai"]))//企迈外卖订单
|
|
|
{
|
|
|
//如果发送的时间和本机相差15分钟,证明是无效消息
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["qimai"].Split(',');
|
|
|
//有外卖订单
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.QM小程序订单.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
|
|
|
//手动接单,发送界面更新通知
|
|
|
if (!openConfirm)
|
|
|
{
|
|
|
// 播放声音
|
|
|
SoundUtils.PlaySound("weixin");
|
|
|
logger.Info("企迈小程序订单播放声音,通知手动接单");
|
|
|
|
|
|
MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//自动接单处理
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
int handOrderCount = orderIds.Length;
|
|
|
for (int i = 0; i < orderIds.Length; i++)
|
|
|
{
|
|
|
string orderId = orderIds[i];
|
|
|
QiMaiOrderReceiveRequest request = new QiMaiOrderReceiveRequest();
|
|
|
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request.OrderId = orderId;
|
|
|
var response = QiMaiUtils.QiMaiOrderReceive(request);
|
|
|
if (response != null && response.Item1)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("weixin");
|
|
|
logger.Info("微信(QM)外卖订单自动接单:" + response.Item2);
|
|
|
if (response.Item1)
|
|
|
{
|
|
|
handOrderCount = handOrderCount - 1;
|
|
|
//接单成功刷新页面
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.QM小程序订单.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", handOrderCount))
|
|
|
});
|
|
|
//接单成功打印订单
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
QiMaiOrderRequest request1 = new QiMaiOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.OrderId = orderId;
|
|
|
var response1 = QiMaiUtils.QiMaiOrderInfo(request1);
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("7" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("微信(QM)订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalQiMai(response1.Item3.Data);
|
|
|
logger.Info("微信订单(QM)组装完成");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("微信订单入库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
//单品优惠
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
//档口结算信息赋默认值
|
|
|
payItem.Ext1 = "0";
|
|
|
payItem.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
//zhangy 2020-02-20 Add 添加结算参数计算
|
|
|
OrderUtils.SetPayModeDiscount(payItem, payMode);
|
|
|
}
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是外卖订单,存储配送信息
|
|
|
if (orderObject.OrderType == OrderType.微信点餐 && response1.Item3.Data.TypeCate == 3)
|
|
|
{
|
|
|
WxWaimaiOrder wxWaimaiOrder = new WxWaimaiOrder();
|
|
|
wxWaimaiOrder.Id = IdWorkerUtils.Instance.NextId();
|
|
|
wxWaimaiOrder.TenantId = orderObject.TenantId;
|
|
|
wxWaimaiOrder.TicketNo = orderObject.TableNo;
|
|
|
wxWaimaiOrder.StoreId = orderObject.StoreId;
|
|
|
wxWaimaiOrder.StoreNo = orderObject.StoreNo;
|
|
|
wxWaimaiOrder.StoreName = orderObject.StoreName;
|
|
|
wxWaimaiOrder.WorkerNo = orderObject.WorkerNo;
|
|
|
wxWaimaiOrder.ShiftId = Global.Instance.BusinessPlanLog.PlanId;
|
|
|
wxWaimaiOrder.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
wxWaimaiOrder.ReceiveName = response1.Item3.Data.AcceptName;
|
|
|
wxWaimaiOrder.ReceiveMobile = response1.Item3.Data.AcceptMobile;
|
|
|
wxWaimaiOrder.ReceiveAddress = response1.Item3.Data.Address;
|
|
|
wxWaimaiOrder.DistributionFee = response1.Item3.Data.Freight;
|
|
|
wxWaimaiOrder.Type = response1.Item3.Data.Express;
|
|
|
if (wxWaimaiOrder.Type == 0)
|
|
|
{
|
|
|
wxWaimaiOrder.IsIncome = 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
wxWaimaiOrder.IsIncome = 0;
|
|
|
}
|
|
|
wxWaimaiOrder.Status = 0;
|
|
|
wxWaimaiOrder.CreateDate = orderObject.FinishDate;
|
|
|
wxWaimaiOrder.CreateUser = orderObject.CreateUser;
|
|
|
db.Insert<WxWaimaiOrder>(wxWaimaiOrder);
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
logger.Info("微信订单入库完成");
|
|
|
//更新是否有订单需要上传的状态
|
|
|
logger.Info("有需要上传的营业数据,isHaveUpLoadTicket = true");
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
logger.Info("有需要同步到服务中心的订单,isHaveCenterTicket = true");
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
logger.Info("微信(QM)订单自动接单打印");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.BuilderQiMaiVariable(response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("在线订单", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info("微信订单(QM)打印标签完成");
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info("微信订单(QM)厨打完成");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info("微信订单(QM)厨打标签成功");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info("微信订单(QM)出品完成");
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info("微信订单(QM)KDS完成");
|
|
|
|
|
|
//企迈外卖订单,通知刷新接单UI
|
|
|
MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Info("微信订单(QM)异常" + ex.Message);
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else if (waiMaiMap.ContainsKey("qimai_tx") && waiMaiMap.ContainsKey("date") && !"".Equals(waiMaiMap["qimai_tx"]))//企迈堂食订单
|
|
|
{
|
|
|
//如果发送的时间和本机相差15分钟,证明是无效消息
|
|
|
if (DateTimeUtils.ExecDateDiff(DateTime.Now, DateTime.Parse(waiMaiMap["date"])) < 15)
|
|
|
{
|
|
|
string[] orderIds = waiMaiMap["qimai_tx"].Split(',');
|
|
|
//有企迈外卖订单,通知UI添加角标
|
|
|
MsgEvent.Send(Constant.MSGCENTER_NOTIFY, new MsgEntity()
|
|
|
{
|
|
|
Subject = Constant.MENU_TITLE_CHANGED_NOTIFY,
|
|
|
SubSubject = ModuleKeyCode.QM小程序订单.ToString(),
|
|
|
Operate = MsgEntityOperate.发布,
|
|
|
Data = new Tuple<ModuleKeyCode, MenuTileNotifyType, string>(ModuleKeyCode.QM小程序订单, MenuTileNotifyType.数量, string.Format("{0}", orderIds.Length))
|
|
|
});
|
|
|
|
|
|
|
|
|
//接单处理,zhangy 2020-02-20 Edit 企迈小程序堂食订单直接确认接单完成状态
|
|
|
if (orderIds.Length > 0)
|
|
|
{
|
|
|
//播放声音
|
|
|
SoundUtils.PlaySound("weixin");
|
|
|
logger.Info("企迈小程序堂食订单播放声音,自动接单");
|
|
|
|
|
|
foreach (var orderId in orderIds)
|
|
|
{
|
|
|
//接单成功打印订单
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
QiMaiOrderRequest request1 = new QiMaiOrderRequest();
|
|
|
request1.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
request1.OrderId = orderId;
|
|
|
var response1 = QiMaiUtils.QiMaiOrderInfo(request1);
|
|
|
if (response1 != null && response1.Item1)
|
|
|
{
|
|
|
OrderObject _OrderObject = OrderUtils.getOrderObjectByTranNo("7" + orderId);
|
|
|
if (_OrderObject != null)
|
|
|
{
|
|
|
logger.Info("微信(QM)订单已存在");
|
|
|
return;
|
|
|
}
|
|
|
//组装本地数据
|
|
|
OrderObject orderObject = OtherWaiMaiApi.getOrderLocalQiMai(response1.Item3.Data);
|
|
|
logger.Info("微信订单(QM)组装完成");
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var trans = db.GetTransaction())
|
|
|
{
|
|
|
logger.Info("企迈微信订单入库");
|
|
|
//遍历获取成本价
|
|
|
foreach (OrderItem item in orderObject.Items)
|
|
|
{
|
|
|
ProductSpec productSpec = Global.ProductSpec._productSpecList.Find(x => x.Id.Equals(item.SpecId));
|
|
|
if (productSpec != null)
|
|
|
{
|
|
|
item.CostPrice = productSpec.CostPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
item.CostPrice = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
//整单
|
|
|
db.Insert<OrderObject>(orderObject);
|
|
|
|
|
|
//单品明细
|
|
|
db.InsertBatch<OrderItem>(orderObject.Items);
|
|
|
//单品优惠
|
|
|
if (orderObject.Items != null)
|
|
|
{
|
|
|
|
|
|
foreach (var promotion in orderObject.Items)
|
|
|
{
|
|
|
if (promotion.Promotions != null && promotion.Promotions.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<PromotionItem>(promotion.Promotions);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//添加支付汇总的必填字段
|
|
|
foreach (PayItem payItem in orderObject.Pays)
|
|
|
{
|
|
|
//档口结算信息赋默认值
|
|
|
payItem.Ext1 = "0";
|
|
|
payItem.Ext2 = "0";
|
|
|
|
|
|
var payMode = OrderUtils.GetPayMode(payItem.No);
|
|
|
if (payMode == null)
|
|
|
{
|
|
|
payItem.IncomeFlag = 1;
|
|
|
payItem.OtherRateType = 0;
|
|
|
payItem.OtherRateValue = 0.00M;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;
|
|
|
payItem.OtherRateType = payMode.OtherRateType;
|
|
|
payItem.OtherRateValue = payMode.OtherRateValue;
|
|
|
|
|
|
//zhangy 2020-02-20 Add 添加结算参数计算
|
|
|
OrderUtils.SetPayModeDiscount(payItem, payMode);
|
|
|
}
|
|
|
}
|
|
|
//支付明细
|
|
|
db.InsertBatch<PayItem>(orderObject.Pays);
|
|
|
|
|
|
//做法明细
|
|
|
foreach (var flavor in orderObject.Items)
|
|
|
{
|
|
|
if (flavor.Flavors.Count > 0)
|
|
|
{
|
|
|
db.InsertBatch<FlavorItem>(flavor.Flavors);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//如果是外卖订单,存储配送信息
|
|
|
if (orderObject.OrderType == OrderType.微信点餐 && response1.Item3.Data.TypeCate == 3)
|
|
|
{
|
|
|
WxWaimaiOrder wxWaimaiOrder = new WxWaimaiOrder();
|
|
|
wxWaimaiOrder.Id = IdWorkerUtils.Instance.NextId();
|
|
|
wxWaimaiOrder.TenantId = orderObject.TenantId;
|
|
|
wxWaimaiOrder.TicketNo = orderObject.TableNo;
|
|
|
wxWaimaiOrder.StoreId = orderObject.StoreId;
|
|
|
wxWaimaiOrder.StoreNo = orderObject.StoreNo;
|
|
|
wxWaimaiOrder.StoreName = orderObject.StoreName;
|
|
|
wxWaimaiOrder.WorkerNo = orderObject.WorkerNo;
|
|
|
wxWaimaiOrder.ShiftId = Global.Instance.BusinessPlanLog.PlanId;
|
|
|
wxWaimaiOrder.ShiftNo = Global.Instance.BusinessPlanLog.No;
|
|
|
wxWaimaiOrder.ReceiveName = response1.Item3.Data.AcceptName;
|
|
|
wxWaimaiOrder.ReceiveMobile = response1.Item3.Data.AcceptMobile;
|
|
|
wxWaimaiOrder.ReceiveAddress = response1.Item3.Data.Address;
|
|
|
wxWaimaiOrder.DistributionFee = response1.Item3.Data.Freight;
|
|
|
wxWaimaiOrder.Type = response1.Item3.Data.Express;
|
|
|
if (wxWaimaiOrder.Type == 0)
|
|
|
{
|
|
|
wxWaimaiOrder.IsIncome = 1;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
wxWaimaiOrder.IsIncome = 0;
|
|
|
}
|
|
|
wxWaimaiOrder.Status = 0;
|
|
|
wxWaimaiOrder.CreateDate = orderObject.FinishDate;
|
|
|
wxWaimaiOrder.CreateUser = orderObject.CreateUser;
|
|
|
db.Insert<WxWaimaiOrder>(wxWaimaiOrder);
|
|
|
}
|
|
|
//8、保存耗料信息
|
|
|
List<OrderProductBurden> orderBurdenList = new List<OrderProductBurden>();
|
|
|
|
|
|
//第一步组装耗料数量
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
//第一步先看看商品是否是管理库存的直销品
|
|
|
var lists = Global.Product._productList;
|
|
|
var selectProduct = new List<ProductExt>();
|
|
|
selectProduct = lists.FindAll(x => x.Id.Equals(item.ProductId));
|
|
|
if (selectProduct != null && selectProduct.Count > 0)
|
|
|
{
|
|
|
ProductExt productExt = selectProduct[0];
|
|
|
if (productExt.StockFlag == 1)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = item.ProductId;
|
|
|
orderProductBurden.BurdenSpecId = item.SpecId;
|
|
|
orderProductBurden.SalesUnitId = item.ProductUnitId;
|
|
|
orderProductBurden.SalesAmount = item.Quantity - item.RefundQuantity;
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
}
|
|
|
//第二步获取门店耗料
|
|
|
StringBuilder sqlBuf = new StringBuilder();
|
|
|
sqlBuf.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_product_burden where productId='{0}' and specId='{1}'");
|
|
|
string productBurdenSql = string.Format(sqlBuf.ToString(), item.ProductId, item.SpecId);
|
|
|
List<ProductBurden> productBurdenList = db.Query<ProductBurden>(productBurdenSql).ToList();
|
|
|
if (productBurdenList != null && productBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (ProductBurden productBurden in productBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = productBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = productBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = productBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = productBurden.SalesAmount * (item.Quantity - item.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
//做法耗料
|
|
|
foreach (var flavorItem in item.Flavors)
|
|
|
{
|
|
|
StringBuilder sqlBuf1 = new StringBuilder();
|
|
|
sqlBuf1.Append("select burdenProductId,burdenSpecId,salesUnitId,salesAmount from pos_make_burden where makeId='{0}'");
|
|
|
string makeBurdenSql = string.Format(sqlBuf1.ToString(), flavorItem.MakeId);
|
|
|
List<MakeBurden> makeBurdenList = db.Query<MakeBurden>(makeBurdenSql).ToList();
|
|
|
if (makeBurdenList != null && makeBurdenList.Count > 0)
|
|
|
{
|
|
|
foreach (MakeBurden makeBurden in makeBurdenList)
|
|
|
{
|
|
|
OrderProductBurden orderProductBurden = new OrderProductBurden();
|
|
|
orderProductBurden.OrderId = orderObject.Id;
|
|
|
orderProductBurden.TenantId = orderObject.TenantId;
|
|
|
orderProductBurden.TradeNo = orderObject.TradeNo;
|
|
|
orderProductBurden.BurdenProductId = makeBurden.BurdenProductId;
|
|
|
orderProductBurden.BurdenSpecId = makeBurden.BurdenSpecId;
|
|
|
orderProductBurden.SalesUnitId = makeBurden.SalesUnitId;
|
|
|
orderProductBurden.SalesAmount = makeBurden.SalesAmount * (flavorItem.Quantity - flavorItem.RefundQuantity);
|
|
|
orderBurdenList.Add(orderProductBurden);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
//第二部合并耗料数量
|
|
|
if (orderBurdenList != null && orderBurdenList.Count > 0)
|
|
|
{
|
|
|
List<OrderProductBurden> temList = orderBurdenList.OrderBy(x => x.BurdenSpecId).ToList();
|
|
|
Dictionary<string, Object> typeMap = new Dictionary<string, Object>();
|
|
|
string burdenProductId_temp = "";
|
|
|
string burdenSpecId_temp = "";
|
|
|
string salesUnitId_temp = "";
|
|
|
int j = 0;
|
|
|
List<Dictionary<string, Object>> result1 = new List<Dictionary<string, Object>>();
|
|
|
decimal salesAmount = 0.00M;
|
|
|
int listLength = temList.Count;
|
|
|
foreach (OrderProductBurden orderProductBurden in temList)
|
|
|
{
|
|
|
string burdenSpecId = orderProductBurden.BurdenSpecId;
|
|
|
if (!burdenSpecId_temp.Equals(burdenSpecId))
|
|
|
{
|
|
|
if (j != 0)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
salesAmount = 0.00M;
|
|
|
burdenProductId_temp = orderProductBurden.BurdenProductId;
|
|
|
burdenSpecId_temp = orderProductBurden.BurdenSpecId;
|
|
|
salesUnitId_temp = orderProductBurden.SalesUnitId;
|
|
|
}
|
|
|
salesAmount = salesAmount + orderProductBurden.SalesAmount;
|
|
|
j = j + 1;
|
|
|
if (j == listLength)
|
|
|
{
|
|
|
typeMap.Add("orderId", orderProductBurden.OrderId);
|
|
|
typeMap.Add("tenantId", orderProductBurden.TenantId);
|
|
|
typeMap.Add("tradeNo", orderProductBurden.TradeNo);
|
|
|
typeMap.Add("burdenProductId", burdenProductId_temp);
|
|
|
typeMap.Add("burdenSpecId", burdenSpecId_temp);
|
|
|
typeMap.Add("salesUnitId", salesUnitId_temp);
|
|
|
typeMap.Add("salesAmount", salesAmount);
|
|
|
result1.Add(typeMap);
|
|
|
//分类改变时,清除缓存
|
|
|
typeMap = new Dictionary<string, Object>();
|
|
|
}
|
|
|
}
|
|
|
List<OrderProductBurden> list = new List<OrderProductBurden>();
|
|
|
foreach (Dictionary<string, Object> map in result1)
|
|
|
{
|
|
|
OrderProductBurden entity = new OrderProductBurden();
|
|
|
entity.Id = IdWorkerUtils.Instance.NextId();
|
|
|
entity.StoreId = orderObject.StoreId;
|
|
|
entity.OrderId = StringUtils.GetString(map["orderId"]);
|
|
|
entity.TenantId = StringUtils.GetString(map["tenantId"]);
|
|
|
entity.TradeNo = StringUtils.GetString(map["tradeNo"]);
|
|
|
entity.BurdenProductId = StringUtils.GetString(map["burdenProductId"]);
|
|
|
entity.BurdenSpecId = StringUtils.GetString(map["burdenSpecId"]);
|
|
|
entity.SalesUnitId = StringUtils.GetString(map["salesUnitId"]);
|
|
|
entity.SalesAmount = StringUtils.GetDecimal(map["salesAmount"]);
|
|
|
list.Add(entity);
|
|
|
|
|
|
}
|
|
|
db.InsertBatch<OrderProductBurden>(list);
|
|
|
}
|
|
|
logger.Info("微信(QM)订单入库完成");
|
|
|
//更新是否有订单需要上传的状态
|
|
|
|
|
|
|
|
|
trans.Complete();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//通知数据上传
|
|
|
Global.isHaveUpLoadTicket = true;
|
|
|
Global.isHaveBurdenTicket = true;
|
|
|
Global.isHaveCenterTicket = true;
|
|
|
}
|
|
|
logger.Info("微信(QM)订单自动接单打印");
|
|
|
//构建收银小票模版参数打印
|
|
|
var vars = WaiMaiHelper.BuilderQiMaiVariable(response1.Item3.Data, false);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("在线订单", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
//打印标签
|
|
|
LabelPrintHelper.PrintOrderLabel(orderObject);
|
|
|
logger.Info("微信订单(QM)打印标签完成");
|
|
|
//执行厨打
|
|
|
ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
logger.Info("微信订单(QM)厨打完成");
|
|
|
//执行厨打标签
|
|
|
ChuDaHelper.KitchenLabelPrinter(orderObject);
|
|
|
logger.Info("微信订单(QM)厨打标签成功");
|
|
|
//执行出品
|
|
|
ChuDaHelper.MadePrinter(orderObject);
|
|
|
logger.Info("微信订单(QM)出品完成");
|
|
|
//通知厨显
|
|
|
UploadSCNewOrder.UploadNewOrder2SC4KDS(orderObject);
|
|
|
logger.Info("微信订单(QM)KDS完成");
|
|
|
|
|
|
//企迈堂食订单,通知刷新接单UI
|
|
|
MsgEvent.Send(Constant.QM_WEIXIN_UI_UPDATA, "qimai_tx");
|
|
|
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Info("微信订单(QM)" + ex.Message);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public static OrderObject getOrderLocalEleme(EleMeOrderResponse response)
|
|
|
{
|
|
|
|
|
|
var finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
try
|
|
|
{
|
|
|
bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI, false);
|
|
|
//是否根据名称匹配
|
|
|
bool otherWaimaiMappingSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_MAPPING, false);
|
|
|
//厨显
|
|
|
bool otherWaimaiDefaultKDS = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_DEFAULTKDS, true);
|
|
|
|
|
|
var KDSLists = Global.KdsPlan._kdsPlanList;
|
|
|
|
|
|
if (otherWaimaiSet)
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.OriginalPrice - response.DeliverFee;//消费金额(订单总额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
_orderObject.CreateDate = response.CreatedAt;//创建时间
|
|
|
_orderObject.CreateUser = "eleme";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = finishDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.OriginalPrice - response.DeliverFee;//实收金额(订单总额-配送费)
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
|
|
|
//商家应收款
|
|
|
decimal wmPoiReceiveCent = response.Income;
|
|
|
//计算需要分摊的总额
|
|
|
decimal dicountTotal = response.OriginalPrice - response.DeliverFee - wmPoiReceiveCent;
|
|
|
decimal havDicount = 0.00M;
|
|
|
// 商品原价总额,餐盒总金额
|
|
|
decimal productAmount = 0.00M;
|
|
|
decimal boxAmount = 0.00M;
|
|
|
|
|
|
List<EleMeDishItem> elemeList = new List<EleMeDishItem>();
|
|
|
List<EleMeDishItem> elemeListExtra = new List<EleMeDishItem>();
|
|
|
int itemCount = 0;
|
|
|
foreach (EleMeGroups group in response.Groups)
|
|
|
{
|
|
|
if ("normal".Equals(group.Type))
|
|
|
{
|
|
|
foreach (EleMeDishItem item in group.Items)
|
|
|
{
|
|
|
productAmount += item.Total;
|
|
|
elemeList.Add(item);
|
|
|
itemCount += 1;
|
|
|
}
|
|
|
}
|
|
|
if ("extra".Equals(group.Type))
|
|
|
{
|
|
|
foreach (EleMeDishItem item in group.Items)
|
|
|
{
|
|
|
boxAmount += item.Total;
|
|
|
elemeListExtra.Add(item);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
foreach (EleMeDishItem item in elemeList)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
string template0 = "select * from pos_mapping_product_eleme where specId ='{0}' ";
|
|
|
string sql0 = string.Format(template0, item.Id);
|
|
|
List<MappingDishEleMe> elemeMappingList = db.Fetch<MappingDishEleMe>(sql0);
|
|
|
MappingDishEleMe elemeMapping = null;
|
|
|
if (elemeMappingList != null && elemeMappingList.Count > 0)
|
|
|
{
|
|
|
elemeMapping = elemeMappingList[0];
|
|
|
}
|
|
|
if (elemeMapping == null)//找不到映射跳过
|
|
|
{
|
|
|
product = null;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string[] name_spec = item.Name.Split('-');
|
|
|
string newSpecs = "";
|
|
|
if (item.NewSpecs != null && item.NewSpecs.Count() > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs)
|
|
|
{
|
|
|
newSpecs = newSpecs + eleMeDishItemSpec.Value + ",";
|
|
|
}
|
|
|
}
|
|
|
if (!"".Equals(newSpecs) && newSpecs.Length > 0)
|
|
|
{
|
|
|
newSpecs = newSpecs.Substring(0, newSpecs.Length - 1);
|
|
|
}
|
|
|
string sql1 = "";
|
|
|
if (otherWaimaiMappingSet)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');";
|
|
|
sql1 = string.Format(template1, elemeMapping.ErpSpecId, name_spec[0], newSpecs);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}';";
|
|
|
sql1 = string.Format(template1, elemeMapping.ErpSpecId);
|
|
|
}
|
|
|
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.KdsFlag = 1;
|
|
|
if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
product.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
product.ChuxianFlag = "1";//是否厨显
|
|
|
product.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
}
|
|
|
//===2019-06-26 取消默认出品
|
|
|
//if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
//{
|
|
|
// KdsPlan kdsPlan = KDSLists[0];
|
|
|
// product.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
// product.KdsChupinFlag = "1";//厨显是否出品
|
|
|
// product.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
//}
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
string[] name_spec = item.Name.Split('-');
|
|
|
product.Name = name_spec[0];//商品名称
|
|
|
product.Id = string.Format("{0}", item.SkuId);//商品ID
|
|
|
product.No = string.Format("{0}", item.SkuId);//商品编号
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = "份";//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Name;//简称
|
|
|
product.SpecId = string.Format("{0}", item.Id);//规格ID
|
|
|
product.SuitFlag = 0;
|
|
|
string newSpecs = "";
|
|
|
if (item.NewSpecs != null && item.NewSpecs.Count() > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs)
|
|
|
{
|
|
|
newSpecs = newSpecs + eleMeDishItemSpec.Value + ",";
|
|
|
}
|
|
|
}
|
|
|
if (!"".Equals(newSpecs) && newSpecs.Length > 0)
|
|
|
{
|
|
|
newSpecs = newSpecs.Substring(0, newSpecs.Length - 1);
|
|
|
}
|
|
|
product.SpecName = newSpecs;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "5";//商品类别ID
|
|
|
product.TypeName = "饿了么菜品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Quantity), 2);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 2) - discountPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//分摊优惠=(单品总额/订单总额)*优惠总额
|
|
|
decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Quantity) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Quantity), 2);
|
|
|
havDicount += discountPrice * StringUtils.GetDecimal(item.Quantity);
|
|
|
order.DiscountPrice = item.Price - discountPrice;//折后价
|
|
|
}
|
|
|
order.Amount = item.Total;//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
order.ChuxianFlag = "1";//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
}
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
order.KdsChupinFlag = "1";//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
}
|
|
|
order.CreateDate = response.CreatedAt;//创建时间
|
|
|
order.CreateUser = "eleme";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.DisplayName = item.Name;//打印名称
|
|
|
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = item.Quantity;//商品数量
|
|
|
order.RefundQuantity = 0.00M;//退菜数量
|
|
|
order.Remark = "饿了么单品";
|
|
|
if (product.SuitFlag == 0)
|
|
|
{
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.RowState = OrderRowState.套餐主;
|
|
|
}
|
|
|
order.SaleDate = response.CreatedAt;//创建时间
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Total;//总计金额
|
|
|
order.TradeNo = "5" + response.OrderId;//订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = "";
|
|
|
order.OtherWaimaiPrintName = item.Name;
|
|
|
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
if (item.Attributes != null && item.Attributes.Count > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemAttribute eleMeDishItemAttribute in item.Attributes)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Quantity;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
flavorItem.CreateUser = "eleme";//创建人
|
|
|
flavorItem.Description = eleMeDishItemAttribute.Value;//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = eleMeDishItemAttribute.Value;//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = item.Quantity;
|
|
|
flavorItem.Price = 0.00M;//属性费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
}
|
|
|
if (item.Ingredients != null && item.Ingredients.Count > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemIngredient eleMeDishItemIngredient in item.Ingredients)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Quantity;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
flavorItem.CreateUser = "eleme";//创建人
|
|
|
flavorItem.Description = eleMeDishItemIngredient.Name;//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = eleMeDishItemIngredient.Name;//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = item.Quantity;
|
|
|
flavorItem.Price = 0.00M;//属性费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
}
|
|
|
//如果是最后一个单品,加上餐盒数量
|
|
|
if (itemCount == j && elemeListExtra.Count > 0)
|
|
|
{
|
|
|
decimal flavorAmount = 0.00M;
|
|
|
int flavorCount = 0;
|
|
|
foreach (EleMeDishItem itemExtra in elemeListExtra)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = itemExtra.Quantity;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
flavorItem.CreateUser = "eleme";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = item.Quantity;
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
//计算餐盒费总和
|
|
|
flavorAmount += 0.00M * itemExtra.Quantity;
|
|
|
flavorCount += itemExtra.Quantity;
|
|
|
}
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M;//餐盒费
|
|
|
order.FlavorCount = flavorCount + flavorItemList.Count;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//餐盒应收金额
|
|
|
order.Flavors = flavorItemList;
|
|
|
|
|
|
order.DispatchPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);
|
|
|
order.MemberPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//会员价
|
|
|
order.OtherPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//第三方价
|
|
|
order.Price = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
order.SalePrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (flavorItemList.Count > 0)
|
|
|
{
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Flavor = 0;//是否包含做法
|
|
|
}
|
|
|
order.FlavorAmount = 0.00M;//
|
|
|
order.FlavorCount = flavorItemList.Count;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//做法应收金额
|
|
|
order.Flavors = flavorItemList;
|
|
|
}
|
|
|
//优惠明细
|
|
|
List<PromotionItem> promotionsList = new List<PromotionItem>();
|
|
|
PromotionItem promotionItem = new PromotionItem();
|
|
|
promotionItem.Amount = order.Amount;//金额
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * item.Quantity, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;
|
|
|
promotionItem.DiscountRate = 0.00M;
|
|
|
}
|
|
|
}
|
|
|
promotionItem.Enabled = true;
|
|
|
promotionItem.FinishDate = finishDate;//完成时间
|
|
|
promotionItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotionItem.ItemId = order.Id;//行ID
|
|
|
promotionItem.OrderId = _orderObject.Id;//
|
|
|
promotionItem.PlanName = "外卖扣费";//班次编号
|
|
|
promotionItem.PromotionType = PromotionType.外卖扣费;
|
|
|
promotionItem.ReceivableAmount = order.ReceivableAmount;
|
|
|
promotionItem.RelationId = "";
|
|
|
promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
promotionItem.TradeNo = "5" + response.OrderId;//订单编号
|
|
|
promotionItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
promotionItem.CreateUser = "eleme";//创建人
|
|
|
promotionsList.Add(promotionItem);
|
|
|
order.Promotions = promotionsList;
|
|
|
|
|
|
itemList.Add(order);
|
|
|
//如果商品是套餐,转套餐
|
|
|
if (product.SuitFlag == 1)
|
|
|
{
|
|
|
var details = new List<SuitExt>();
|
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
|
|
|
}
|
|
|
}
|
|
|
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
|
|
|
int inx = 0;
|
|
|
foreach (SuitExt suit in lists)
|
|
|
{
|
|
|
List<EleMeDishItemAttribute> attributes = item.Attributes;
|
|
|
var details1 = new List<SuitExt>();
|
|
|
foreach (EleMeDishItemAttribute attribut in attributes)
|
|
|
{
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details1 = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, attribut.Value));
|
|
|
}
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string _json = "";
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(details1[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(suit);
|
|
|
}
|
|
|
//反序列化为ProductExt对象
|
|
|
var _product = JsonUtils.Deserialize<ProductExt>(_json);
|
|
|
|
|
|
|
|
|
//新建套菜明细
|
|
|
var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product);
|
|
|
|
|
|
//标识为套餐明细
|
|
|
row.RowState = OrderRowState.套餐明;
|
|
|
|
|
|
//道菜ID
|
|
|
row.SuitId = suit.SuitId;
|
|
|
//道菜基准数量
|
|
|
row.SuitQuantity = suit.Quantity;
|
|
|
//道菜基准加价
|
|
|
row.SuitAddPrice = suit.AddPrice;
|
|
|
//道菜基准加价 = 主菜数量 * 道菜基准单价
|
|
|
row.SuitAmount = order.Quantity * suit.AddPrice;
|
|
|
|
|
|
//界面-优惠列显示
|
|
|
row.Discount = 0;
|
|
|
//界面-行下划线
|
|
|
row.Underline = (++inx) == lists.Count ? 1 : 0;
|
|
|
//界面-是否有做法
|
|
|
row.Flavor = 0;
|
|
|
|
|
|
//当前行父ID
|
|
|
row.ParentId = order.Id;
|
|
|
//当前行分组
|
|
|
row.Group = order.Group;
|
|
|
//加料
|
|
|
row.Scheme = "";
|
|
|
|
|
|
//道菜数量随主菜数量变化
|
|
|
row.Quantity = order.Quantity * row.SuitQuantity;
|
|
|
row.TradeNo = "5" + response.OrderId;//营业模式订单编号
|
|
|
i = i + 1;
|
|
|
row.OrderNo = i;
|
|
|
itemList.Add(row);
|
|
|
}
|
|
|
//套餐价格分摊
|
|
|
PromotionUtils.CalculateSuitShare(_orderObject, itemList);
|
|
|
}
|
|
|
}
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.DaySn);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.饿了么; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
PayItem payItem = new PayItem();
|
|
|
|
|
|
payItem.Amount = response.Income;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
payItem.CreateUser = "eleme";//创建人
|
|
|
payItem.Memo = "饿了么外卖转换";//支付备注
|
|
|
|
|
|
//var payMode = OrderUtils.GetPayMode("23");
|
|
|
payItem.Name = "饿了么";//付款方式名称
|
|
|
payItem.No = "23";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "";//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = response.Income;//实收金额
|
|
|
payItem.PayNo = "5" + response.OrderId;//支付编号
|
|
|
payItem.PayTime = response.CreatedAt;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "5" + response.OrderId;
|
|
|
payItem.TradeVoucherNo = "";
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
_orderObject.SaleDate = response.CreatedAt;//销售时间
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = "";//桌号
|
|
|
_orderObject.TableName = "";//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "5" + response.OrderId;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
_orderObject.Ext1 = response.Description;//备注信息
|
|
|
return _orderObject;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.OriginalPrice - response.DeliverFee;//消费金额(订单总额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
_orderObject.CreateDate = response.CreatedAt;//创建时间
|
|
|
_orderObject.CreateUser = "eleme";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = finishDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.OriginalPrice - response.DeliverFee;//实收金额(订单总额-配送费)
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
List<EleMeDishItem> elemeList = new List<EleMeDishItem>();
|
|
|
List<EleMeDishItem> elemeListExtra = new List<EleMeDishItem>();
|
|
|
int itemCount = 0;
|
|
|
foreach (EleMeGroups group in response.Groups)
|
|
|
{
|
|
|
if ("normal".Equals(group.Type))
|
|
|
{
|
|
|
foreach (EleMeDishItem item in group.Items)
|
|
|
{
|
|
|
elemeList.Add(item);
|
|
|
itemCount += 1;
|
|
|
}
|
|
|
}
|
|
|
if ("extra".Equals(group.Type))
|
|
|
{
|
|
|
foreach (EleMeDishItem item in group.Items)
|
|
|
{
|
|
|
elemeListExtra.Add(item);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
foreach (EleMeDishItem item in elemeList)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
string template0 = "select * from pos_mapping_product_eleme where specId ='{0}' ";
|
|
|
string sql0 = string.Format(template0, item.Id);
|
|
|
List<MappingDishEleMe> elemeMappingList = db.Fetch<MappingDishEleMe>(sql0);
|
|
|
MappingDishEleMe elemeMapping = null;
|
|
|
if (elemeMappingList != null && elemeMappingList.Count > 0)
|
|
|
{
|
|
|
elemeMapping = elemeMappingList[0];
|
|
|
}
|
|
|
if (elemeMapping == null)//找不到映射跳过
|
|
|
{
|
|
|
product = null;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string[] name_spec = item.Name.Split('-');
|
|
|
string newSpecs = "";
|
|
|
if (item.NewSpecs != null && item.NewSpecs.Count() > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs)
|
|
|
{
|
|
|
newSpecs = newSpecs + eleMeDishItemSpec.Value + ",";
|
|
|
}
|
|
|
}
|
|
|
if (!"".Equals(newSpecs) && newSpecs.Length > 0)
|
|
|
{
|
|
|
newSpecs = newSpecs.Substring(0, newSpecs.Length - 1);
|
|
|
}
|
|
|
string sql1 = "";
|
|
|
if (otherWaimaiMappingSet)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');";
|
|
|
sql1 = string.Format(template1, elemeMapping.ErpSpecId, name_spec[0], newSpecs);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}';";
|
|
|
sql1 = string.Format(template1, elemeMapping.ErpSpecId);
|
|
|
}
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.KdsFlag = 1;//是否厨显
|
|
|
if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
product.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
product.ChuxianFlag = "1";//是否厨显
|
|
|
product.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
}
|
|
|
//===2019-06-26 取消默认出品
|
|
|
//if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
//{
|
|
|
// KdsPlan kdsPlan = KDSLists[0];
|
|
|
// product.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
// product.KdsChupinFlag = "1";//厨显是否出品
|
|
|
// product.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
//}
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
string[] name_spec = item.Name.Split('-');
|
|
|
product.Name = name_spec[0];//商品名称
|
|
|
product.Id = string.Format("{0}", item.Id);//商品ID
|
|
|
product.No = string.Format("{0}", item.Id);//商品编号
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = "份";//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Name;//简称
|
|
|
product.SuitFlag = 0;
|
|
|
product.SpecId = string.Format("{0}", item.SkuId);//规格ID
|
|
|
string newSpecs = "";
|
|
|
if (item.NewSpecs != null && item.NewSpecs.Count() > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemSpec eleMeDishItemSpec in item.NewSpecs)
|
|
|
{
|
|
|
newSpecs = newSpecs + eleMeDishItemSpec.Value + ",";
|
|
|
}
|
|
|
}
|
|
|
if (!"".Equals(newSpecs) && newSpecs.Length > 0)
|
|
|
{
|
|
|
newSpecs = newSpecs.Substring(0, newSpecs.Length - 1);
|
|
|
}
|
|
|
product.SpecName = newSpecs;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "5";//商品类别ID
|
|
|
product.TypeName = "饿了么菜品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
|
|
|
}
|
|
|
order.Amount = item.Total;//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
order.ChuxianFlag = "1";//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
}
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
order.KdsChupinFlag = "1";//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
}
|
|
|
order.CreateDate = response.CreatedAt;//创建时间
|
|
|
order.CreateUser = "eleme";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
order.DiscountPrice = item.Price;//折后价
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.DisplayName = item.Name;//打印名称
|
|
|
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = item.Quantity;//商品数量
|
|
|
order.RefundQuantity = 0.00M;//退菜数量
|
|
|
order.Remark = "饿了么单品";
|
|
|
if (product.SuitFlag == 0)
|
|
|
{
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.RowState = OrderRowState.套餐主;
|
|
|
}
|
|
|
order.SaleDate = response.CreatedAt;//创建时间
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Total;//总计金额
|
|
|
order.TradeNo = "5" + response.OrderId;//订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = "";
|
|
|
order.OtherWaimaiPrintName = item.Name;
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
if (item.Attributes != null && item.Attributes.Count > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemAttribute eleMeDishItemAttribute in item.Attributes)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Quantity;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
flavorItem.CreateUser = "eleme";//创建人
|
|
|
flavorItem.Description = eleMeDishItemAttribute.Value;//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = eleMeDishItemAttribute.Value;//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = item.Quantity;
|
|
|
flavorItem.Price = 0.00M;//属性费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
}
|
|
|
if (item.Ingredients != null && item.Ingredients.Count > 0)
|
|
|
{
|
|
|
foreach (EleMeDishItemIngredient eleMeDishItemIngredient in item.Ingredients)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Quantity;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
flavorItem.CreateUser = "eleme";//创建人
|
|
|
flavorItem.Description = eleMeDishItemIngredient.Name;//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = eleMeDishItemIngredient.Name;//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = item.Quantity;
|
|
|
flavorItem.Price = 0.00M;//属性费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
}
|
|
|
//如果是最后一个单品,加上餐盒数量
|
|
|
if (itemCount == j && elemeListExtra.Count > 0)
|
|
|
{
|
|
|
decimal flavorAmount = 0.00M;
|
|
|
int flavorCount = 0;
|
|
|
|
|
|
foreach (EleMeDishItem itemExtra in elemeListExtra)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = itemExtra.Quantity;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
flavorItem.CreateUser = "eleme";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = item.Quantity;
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
//计算餐盒费总和
|
|
|
flavorAmount += 0.00M * itemExtra.Quantity;
|
|
|
flavorCount += itemExtra.Quantity;
|
|
|
}
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M;//餐盒费
|
|
|
order.FlavorCount = flavorCount + flavorItemList.Count;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//餐盒应收金额
|
|
|
order.Flavors = flavorItemList;
|
|
|
|
|
|
order.DispatchPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//配送价
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//折后价
|
|
|
order.MemberPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//会员价
|
|
|
order.OtherPrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//第三方价
|
|
|
order.Price = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
order.SalePrice = item.Price + DecimalUtils.ToRound(response.PackageFee / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (flavorItemList.Count > 0)
|
|
|
{
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Flavor = 0;//是否包含做法
|
|
|
}
|
|
|
order.FlavorAmount = 0.00M;//
|
|
|
order.FlavorCount = flavorItemList.Count;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//做法应收金额
|
|
|
order.Flavors = flavorItemList;
|
|
|
}
|
|
|
itemList.Add(order);
|
|
|
//如果商品是套餐,转套餐
|
|
|
if (product.SuitFlag == 1)
|
|
|
{
|
|
|
var details = new List<SuitExt>();
|
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
|
|
|
}
|
|
|
}
|
|
|
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
|
|
|
int inx = 0;
|
|
|
foreach (SuitExt suit in lists)
|
|
|
{
|
|
|
List<EleMeDishItemAttribute> attributes = item.Attributes;
|
|
|
var details1 = new List<SuitExt>();
|
|
|
foreach (EleMeDishItemAttribute attribut in attributes)
|
|
|
{
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details1 = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, attribut.Value));
|
|
|
}
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string _json = "";
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(details1[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(suit);
|
|
|
}
|
|
|
//反序列化为ProductExt对象
|
|
|
var _product = JsonUtils.Deserialize<ProductExt>(_json);
|
|
|
|
|
|
|
|
|
//新建套菜明细
|
|
|
var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product);
|
|
|
|
|
|
//标识为套餐明细
|
|
|
row.RowState = OrderRowState.套餐明;
|
|
|
|
|
|
//道菜ID
|
|
|
row.SuitId = suit.SuitId;
|
|
|
//道菜基准数量
|
|
|
row.SuitQuantity = suit.Quantity;
|
|
|
//道菜基准加价
|
|
|
row.SuitAddPrice = suit.AddPrice;
|
|
|
//道菜基准加价 = 主菜数量 * 道菜基准单价
|
|
|
row.SuitAmount = order.Quantity * suit.AddPrice;
|
|
|
|
|
|
//界面-优惠列显示
|
|
|
row.Discount = 0;
|
|
|
//界面-行下划线
|
|
|
row.Underline = (++inx) == lists.Count ? 1 : 0;
|
|
|
//界面-是否有做法
|
|
|
row.Flavor = 0;
|
|
|
|
|
|
//当前行父ID
|
|
|
row.ParentId = order.Id;
|
|
|
//当前行分组
|
|
|
row.Group = order.Group;
|
|
|
//加料
|
|
|
row.Scheme = "";
|
|
|
|
|
|
//道菜数量随主菜数量变化
|
|
|
row.Quantity = order.Quantity * row.SuitQuantity;
|
|
|
row.TradeNo = "5" + response.OrderId;//营业模式订单编号
|
|
|
i = i + 1;
|
|
|
row.OrderNo = i;
|
|
|
itemList.Add(row);
|
|
|
}
|
|
|
//套餐价格分摊
|
|
|
PromotionUtils.CalculateSuitShare(_orderObject, itemList);
|
|
|
}
|
|
|
}
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.DaySn);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.饿了么; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
PayItem payItem = new PayItem();
|
|
|
|
|
|
payItem.Amount = response.OriginalPrice - response.DeliverFee;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedAt;//创建时间
|
|
|
payItem.CreateUser = "eleme";//创建人
|
|
|
payItem.Memo = "饿了么外卖转换";//支付备注
|
|
|
|
|
|
//var payMode = OrderUtils.GetPayMode("23");
|
|
|
payItem.Name = "饿了么";//付款方式名称
|
|
|
payItem.No = "23";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "";//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = response.OriginalPrice - response.DeliverFee;//实收金额
|
|
|
payItem.PayNo = "5" + response.OrderId;//支付编号
|
|
|
payItem.PayTime = response.CreatedAt;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "5" + response.OrderId;
|
|
|
payItem.TradeVoucherNo = "";
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
_orderObject.SaleDate = response.CreatedAt;//销售时间
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = "";//桌号
|
|
|
_orderObject.TableName = "";//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "5" + response.OrderId;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
_orderObject.Ext1 = response.Description;//备注信息
|
|
|
return _orderObject;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error("饿了么转单异常========>" + ex);
|
|
|
Global.Instance.BugReport(ex, "饿了么转单异常");
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
public static OrderObject getOrderLocalMeiTuan(MeiTuanOrderResponse response)
|
|
|
{
|
|
|
var finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
try
|
|
|
{
|
|
|
bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI, false);
|
|
|
//是否根据名称匹配
|
|
|
bool otherWaimaiMappingSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_MAPPING, false);
|
|
|
//厨显
|
|
|
bool otherWaimaiDefaultKDS = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_DEFAULTKDS, true);
|
|
|
|
|
|
var KDSLists = Global.KdsPlan._kdsPlanList;
|
|
|
|
|
|
if (otherWaimaiSet)
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.OriginalPrice - response.ShippingFee;//消费金额(订单总额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//_orderObject.CreateDate = response.CTime;//创建时间
|
|
|
_orderObject.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
_orderObject.CreateUser = "meituan";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = finishDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.OriginalPrice - response.ShippingFee;//实收金额(订单总额-配送费)
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
|
|
|
//商家应收款
|
|
|
PoiReceiveDetail poiReceiveDetail = JsonUtils.Deserialize<PoiReceiveDetail>(response.PoiReceiveDetail);
|
|
|
decimal wmPoiReceiveCent = poiReceiveDetail.WmPoiReceiveCent / 100M;
|
|
|
//计算需要分摊的总额
|
|
|
decimal dicountTotal = response.OriginalPrice - response.ShippingFee - wmPoiReceiveCent;
|
|
|
decimal havDicount = 0.00M;
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
//商品原价总额,餐盒总金额
|
|
|
decimal productAmount = 0.00M;
|
|
|
decimal boxAmount = 0.00M;
|
|
|
int itemCount = 0;
|
|
|
foreach (MeiTuanOrderListDetail item in response.Detail)
|
|
|
{
|
|
|
productAmount += item.Price * StringUtils.GetDecimal(item.Quantity);
|
|
|
boxAmount += item.Box_num * item.Box_price;
|
|
|
itemCount += 1;
|
|
|
}
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
foreach (MeiTuanOrderListDetail item in response.Detail)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
if (item.Box_num == 0)
|
|
|
{
|
|
|
item.Box_price = 0.00M;
|
|
|
}
|
|
|
string sql1 = "";
|
|
|
if (otherWaimaiMappingSet)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');";
|
|
|
sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}';";
|
|
|
sql1 = string.Format(template1, item.Sku_id);
|
|
|
}
|
|
|
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList != null && productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.KdsFlag = 1;//是否厨显
|
|
|
if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
product.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
product.ChuxianFlag = "1";//是否厨显
|
|
|
product.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
}
|
|
|
//===2019-06-26 取消默认出品
|
|
|
//if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
//{
|
|
|
// KdsPlan kdsPlan = KDSLists[0];
|
|
|
// product.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
// product.KdsChupinFlag = "1";//厨显是否出品
|
|
|
// product.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
//}
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
product.Name = item.Food_name;//商品名称
|
|
|
|
|
|
|
|
|
product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID
|
|
|
product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号
|
|
|
|
|
|
////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性
|
|
|
//product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + "";
|
|
|
//product.No = product.Id;
|
|
|
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = item.Unit;//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Food_name;//简称
|
|
|
if (item.Sku_id == null || "".Equals(item.Sku_id))
|
|
|
{
|
|
|
product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.SpecId = item.Sku_id;
|
|
|
}
|
|
|
product.SpecName = item.Spec;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "4";//商品类别ID
|
|
|
product.TypeName = "美团外卖菜品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
}
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Quantity), 2);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//分摊优惠=(单品总额/订单总额)*优惠总额
|
|
|
decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Quantity) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Quantity), 2);
|
|
|
havDicount += discountPrice * StringUtils.GetDecimal(item.Quantity);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice;//折后价
|
|
|
}
|
|
|
order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
order.ChuxianFlag = "1";//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
}
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
order.KdsChupinFlag = "1";//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
}
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//order.CreateDate = response.CTime;//创建时间
|
|
|
order.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
order.CreateUser = "meituan";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.DisplayName = item.Food_name;//打印名称
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M;//餐盒费
|
|
|
order.FlavorCount = 1;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//餐盒应收金额
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//flavorItem.CreateDate = response.CTime;//创建时间
|
|
|
flavorItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
flavorItem.CreateUser = "meituan";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity);
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 0;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
if (item.Food_property != null && !"".Equals(item.Food_property))
|
|
|
{
|
|
|
var flavorItems = item.Food_property.Split(',');
|
|
|
foreach (string flavor in flavorItems)
|
|
|
{
|
|
|
FlavorItem flavorItem1 = new FlavorItem();
|
|
|
flavorItem1.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem1.isWaiMaiTicket = true;
|
|
|
flavorItem1.Code = "";
|
|
|
flavorItem1.Color = "";
|
|
|
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//flavorItem1.CreateDate = response.CTime;//创建时间
|
|
|
flavorItem1.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
flavorItem1.CreateUser = "meituan";//创建人
|
|
|
flavorItem1.Description = string.Format("{0}", flavor);//备注说明
|
|
|
flavorItem1.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem1.DiscountPrice = 0.00M;
|
|
|
flavorItem1.Group = "";
|
|
|
flavorItem1.Hand = 0;
|
|
|
flavorItem1.IsRadio = 0;
|
|
|
flavorItem1.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem1.ItemId = order.Id;//行ID
|
|
|
flavorItem1.MakeId = "";//做法ID
|
|
|
flavorItem1.Name = string.Format("{0}", flavor);//做法名称
|
|
|
flavorItem1.OrderId = _orderObject.Id;//
|
|
|
flavorItem1.OrderItemQuantity = 1.00M;
|
|
|
flavorItem1.Price = 0.00M;//餐盒费用
|
|
|
flavorItem1.QtyFlag = 0;
|
|
|
flavorItem1.RefundQuantity = 0.00M;
|
|
|
flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem1.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem1.Type = 0;
|
|
|
flavorItemList.Add(flavorItem1);
|
|
|
}
|
|
|
}
|
|
|
order.Flavors = flavorItemList;
|
|
|
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量
|
|
|
order.RefundQuantity = 0.00M;//退菜数量
|
|
|
order.Remark = "美团外卖单品";
|
|
|
if (product.SuitFlag == 0)
|
|
|
{
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.RowState = OrderRowState.套餐主;
|
|
|
}
|
|
|
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//order.SaleDate = response.CTime;//创建时间
|
|
|
order.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额
|
|
|
order.TradeNo = "4" + response.OrderId;//营业模式订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]";
|
|
|
if (item.Spec != null && !"".Equals(item.Spec))
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name;
|
|
|
}
|
|
|
order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);
|
|
|
order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价
|
|
|
order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价
|
|
|
order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
//优惠明细
|
|
|
List<PromotionItem> promotionsList = new List<PromotionItem>();
|
|
|
PromotionItem promotionItem = new PromotionItem();
|
|
|
promotionItem.Amount = order.Amount;//金额
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * order.Quantity, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
|
|
|
promotionItem.Enabled = true;
|
|
|
promotionItem.FinishDate = finishDate;//完成时间
|
|
|
promotionItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotionItem.ItemId = order.Id;//行ID
|
|
|
promotionItem.OrderId = _orderObject.Id;//
|
|
|
promotionItem.PlanName = "外卖扣费";//班次编号
|
|
|
promotionItem.PromotionType = PromotionType.外卖扣费;
|
|
|
promotionItem.ReceivableAmount = order.ReceivableAmount;
|
|
|
promotionItem.RelationId = "";
|
|
|
promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
promotionItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//promotionItem.CreateDate = response.CTime;//创建时间
|
|
|
promotionItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
promotionItem.CreateUser = "meituan";//创建人
|
|
|
promotionsList.Add(promotionItem);
|
|
|
order.Promotions = promotionsList;
|
|
|
itemList.Add(order);
|
|
|
//如果商品是套餐,转套餐
|
|
|
if (product.SuitFlag == 1)
|
|
|
{
|
|
|
var details = new List<SuitExt>();
|
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
|
|
|
}
|
|
|
}
|
|
|
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
|
|
|
int inx = 0;
|
|
|
foreach (SuitExt suit in lists)
|
|
|
{
|
|
|
string property = item.Food_property;
|
|
|
string[] dishs = property.Split(',');
|
|
|
var details1 = new List<SuitExt>();
|
|
|
foreach (string name in dishs)
|
|
|
{
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details1 = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name));
|
|
|
}
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string _json = null;
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(details1[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(suit);
|
|
|
}
|
|
|
//反序列化为ProductExt对象
|
|
|
var _product = JsonUtils.Deserialize<ProductExt>(_json);
|
|
|
|
|
|
|
|
|
//新建套菜明细
|
|
|
var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product);
|
|
|
|
|
|
//标识为套餐明细
|
|
|
row.RowState = OrderRowState.套餐明;
|
|
|
|
|
|
//道菜ID
|
|
|
row.SuitId = suit.SuitId;
|
|
|
//道菜基准数量
|
|
|
row.SuitQuantity = suit.Quantity;
|
|
|
//道菜基准加价
|
|
|
row.SuitAddPrice = suit.AddPrice;
|
|
|
//道菜基准加价 = 主菜数量 * 道菜基准单价
|
|
|
row.SuitAmount = order.Quantity * suit.AddPrice;
|
|
|
|
|
|
//界面-优惠列显示
|
|
|
row.Discount = 0;
|
|
|
//界面-行下划线
|
|
|
row.Underline = (++inx) == lists.Count ? 1 : 0;
|
|
|
//界面-是否有做法
|
|
|
row.Flavor = 0;
|
|
|
|
|
|
//当前行父ID
|
|
|
row.ParentId = order.Id;
|
|
|
//当前行分组
|
|
|
row.Group = order.Group;
|
|
|
//加料
|
|
|
row.Scheme = "";
|
|
|
|
|
|
//道菜数量随主菜数量变化
|
|
|
row.Quantity = order.Quantity * row.SuitQuantity;
|
|
|
row.TradeNo = "4" + response.OrderId;//营业模式订单编号
|
|
|
i = i + 1;
|
|
|
row.OrderNo = i;
|
|
|
itemList.Add(row);
|
|
|
}
|
|
|
//套餐价格分摊
|
|
|
PromotionUtils.CalculateSuitShare(_orderObject, itemList);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
//ObservableDictionary<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.DaySeq);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.美团外卖; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
PayItem payItem = new PayItem();
|
|
|
|
|
|
payItem.Amount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//payItem.CreateDate = response.CTime;//创建时间
|
|
|
payItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
payItem.CreateUser = "meituan";//创建人
|
|
|
|
|
|
payItem.Memo = "美团外卖转换";//支付备注
|
|
|
|
|
|
//var payMode = OrderUtils.GetPayMode("22");
|
|
|
payItem.Name = "美团外卖";//付款方式名称
|
|
|
payItem.No = "22";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "";//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//实收金额
|
|
|
payItem.PayNo = "4" + response.OrderId;//支付编号
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//payItem.PayTime = response.CTime;//支付时间
|
|
|
payItem.PayTime = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "4" + response.OrderId;
|
|
|
payItem.TradeVoucherNo = "";
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//_orderObject.SaleDate = response.CTime;//销售时间
|
|
|
_orderObject.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = "";//桌号
|
|
|
_orderObject.TableName = "";//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "4" + response.OrderId;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
_orderObject.Ext1 = response.Caution;//备注信息
|
|
|
|
|
|
return _orderObject;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.OriginalPrice - response.ShippingFee;//消费金额(订单总额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//_orderObject.CreateDate = response.CTime;//创建时间
|
|
|
_orderObject.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
_orderObject.CreateUser = "meituan";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = finishDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.OriginalPrice - response.ShippingFee;//实收金额(订单总额-配送费)
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
foreach (MeiTuanOrderListDetail item in response.Detail)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
if (item.Box_num == 0)
|
|
|
{
|
|
|
item.Box_price = 0.00M;
|
|
|
}
|
|
|
|
|
|
string sql1 = "";
|
|
|
if (otherWaimaiMappingSet)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');";
|
|
|
sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}';";
|
|
|
sql1 = string.Format(template1, item.Sku_id);
|
|
|
}
|
|
|
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList != null && productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.KdsFlag = 1; //是否厨显
|
|
|
if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
product.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
product.ChuxianFlag = "1";//是否厨显
|
|
|
product.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
}
|
|
|
//===2019-06-26 取消默认出品
|
|
|
//if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
//{
|
|
|
// KdsPlan kdsPlan = KDSLists[0];
|
|
|
// product.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
// product.KdsChupinFlag = "1";//厨显是否出品
|
|
|
// product.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
//}
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
product.Name = item.Food_name;//商品名称
|
|
|
|
|
|
//zhangy 2020-05-06 Edit 注释以下代码
|
|
|
product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID
|
|
|
product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号
|
|
|
|
|
|
////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性
|
|
|
//product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + "";
|
|
|
//product.No = product.Id;
|
|
|
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = item.Unit;//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Food_name;//简称
|
|
|
product.SuitFlag = 0;
|
|
|
if (item.Sku_id == null || "".Equals(item.Sku_id))
|
|
|
{
|
|
|
product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.SpecId = item.Sku_id;
|
|
|
}
|
|
|
product.SpecName = item.Spec;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "4";//商品类别ID
|
|
|
product.TypeName = "美团外卖菜品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
}
|
|
|
order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
order.ChuxianFlag = "1";//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
}
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
order.KdsChupinFlag = "1";//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
}
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//order.CreateDate = response.CTime;//创建时间
|
|
|
order.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
order.CreateUser = "meituan";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
order.DiscountPrice = item.Price;//折后价
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.DisplayName = item.Food_name;//打印名称
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M * item.Box_num;//餐盒费
|
|
|
order.FlavorCount = 1;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M * item.Box_num;//餐盒应收金额
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//flavorItem.CreateDate = response.CTime;//创建时间
|
|
|
flavorItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
flavorItem.CreateUser = "meituan";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity);
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 0;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
if (item.Food_property != null && !"".Equals(item.Food_property))
|
|
|
{
|
|
|
var flavorItems = item.Food_property.Split(',');
|
|
|
foreach (string flavor in flavorItems)
|
|
|
{
|
|
|
FlavorItem flavorItem1 = new FlavorItem();
|
|
|
flavorItem1.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem1.isWaiMaiTicket = true;
|
|
|
flavorItem1.Code = "";
|
|
|
flavorItem1.Color = "";
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//flavorItem1.CreateDate = response.CTime;//创建时间
|
|
|
flavorItem1.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
flavorItem1.CreateUser = "meituan";//创建人
|
|
|
flavorItem1.Description = string.Format("{0}", flavor);//备注说明
|
|
|
flavorItem1.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem1.DiscountPrice = 0.00M;
|
|
|
flavorItem1.Group = "";
|
|
|
flavorItem1.Hand = 0;
|
|
|
flavorItem1.IsRadio = 0;
|
|
|
flavorItem1.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem1.ItemId = order.Id;//行ID
|
|
|
flavorItem1.MakeId = "";//做法ID
|
|
|
flavorItem1.Name = string.Format("{0}", flavor);//做法名称
|
|
|
flavorItem1.OrderId = _orderObject.Id;//
|
|
|
flavorItem1.OrderItemQuantity = 1.00M;
|
|
|
flavorItem1.Price = 0.00M;//餐盒费用
|
|
|
flavorItem1.QtyFlag = 0;
|
|
|
flavorItem1.RefundQuantity = 0.00M;
|
|
|
flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem1.TradeNo = "4" + response.OrderId;//订单编号
|
|
|
flavorItem1.Type = 0;
|
|
|
flavorItemList.Add(flavorItem1);
|
|
|
}
|
|
|
}
|
|
|
order.Flavors = flavorItemList;
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量
|
|
|
order.RefundQuantity = 0.00M;//退菜数量
|
|
|
order.Remark = "美团外卖单品";
|
|
|
if (product.SuitFlag == 0)
|
|
|
{
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.RowState = OrderRowState.套餐主;
|
|
|
}
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//order.SaleDate = response.CTime;//创建时间
|
|
|
order.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额
|
|
|
order.TradeNo = "4" + response.OrderId;//营业模式订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]";
|
|
|
if (item.Spec != null && !"".Equals(item.Spec))
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name;
|
|
|
}
|
|
|
order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//折扣价
|
|
|
order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价
|
|
|
order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价
|
|
|
order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
itemList.Add(order);
|
|
|
//如果商品是套餐,转套餐
|
|
|
if (product.SuitFlag == 1)
|
|
|
{
|
|
|
var details = new List<SuitExt>();
|
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
|
|
|
}
|
|
|
}
|
|
|
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
|
|
|
int inx = 0;
|
|
|
foreach (SuitExt suit in lists)
|
|
|
{
|
|
|
|
|
|
string property = item.Food_property;
|
|
|
string[] dishs = property.Split(',');
|
|
|
var details1 = new List<SuitExt>();
|
|
|
foreach (string name in dishs)
|
|
|
{
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details1 = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name));
|
|
|
}
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string _json = "";
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(details1[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(suit);
|
|
|
}
|
|
|
//反序列化为ProductExt对象
|
|
|
var _product = JsonUtils.Deserialize<ProductExt>(_json);
|
|
|
|
|
|
|
|
|
//新建套菜明细
|
|
|
var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product);
|
|
|
|
|
|
//标识为套餐明细
|
|
|
row.RowState = OrderRowState.套餐明;
|
|
|
|
|
|
//道菜ID
|
|
|
row.SuitId = suit.SuitId;
|
|
|
//道菜基准数量
|
|
|
row.SuitQuantity = suit.Quantity;
|
|
|
//道菜基准加价
|
|
|
row.SuitAddPrice = suit.AddPrice;
|
|
|
//道菜基准加价 = 主菜数量 * 道菜基准单价
|
|
|
row.SuitAmount = order.Quantity * suit.AddPrice;
|
|
|
|
|
|
//界面-优惠列显示
|
|
|
row.Discount = 0;
|
|
|
//界面-行下划线
|
|
|
row.Underline = (++inx) == lists.Count ? 1 : 0;
|
|
|
//界面-是否有做法
|
|
|
row.Flavor = 0;
|
|
|
|
|
|
//当前行父ID
|
|
|
row.ParentId = order.Id;
|
|
|
//当前行分组
|
|
|
row.Group = order.Group;
|
|
|
//加料
|
|
|
row.Scheme = "";
|
|
|
|
|
|
//道菜数量随主菜数量变化
|
|
|
row.Quantity = order.Quantity * row.SuitQuantity;
|
|
|
row.TradeNo = "4" + response.OrderId;//营业模式订单编号
|
|
|
i = i + 1;
|
|
|
row.OrderNo = i;
|
|
|
itemList.Add(row);
|
|
|
}
|
|
|
//套餐价格分摊
|
|
|
PromotionUtils.CalculateSuitShare(_orderObject, itemList);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
//ObservableDictionary<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.DaySeq);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.美团外卖; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
PayItem payItem = new PayItem();
|
|
|
|
|
|
payItem.Amount = response.OriginalPrice - response.ShippingFee;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//payItem.CreateDate = response.CTime;//创建时间
|
|
|
payItem.CreateDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
payItem.CreateUser = "meituan";//创建人
|
|
|
|
|
|
payItem.Memo = "美团外卖转换";//支付备注
|
|
|
|
|
|
//var payMode = OrderUtils.GetPayMode("22");
|
|
|
payItem.Name = "美团外卖";//付款方式名称
|
|
|
payItem.No = "22";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "";//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = response.OriginalPrice - response.ShippingFee;//实收金额
|
|
|
payItem.PayNo = "4" + response.OrderId;//支付编号
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//payItem.PayTime = response.CTime;//支付时间
|
|
|
payItem.PayTime = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "4" + response.OrderId;
|
|
|
payItem.TradeVoucherNo = "";
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
|
|
|
#region subin 20231202 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
//_orderObject.SaleDate = response.CTime;//销售时间
|
|
|
_orderObject.SaleDate = GetFormatDateTime4Sec(response.CTime);//创建时间
|
|
|
#endregion
|
|
|
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = "";//桌号
|
|
|
_orderObject.TableName = "";//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "4" + response.OrderId;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
_orderObject.Ext1 = response.Caution;//备注信息
|
|
|
return _orderObject;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error("美团外卖转单异常========>" + ex);
|
|
|
Global.Instance.BugReport(ex, "美团外卖转单异常");
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 美团商家版本接单
|
|
|
/// </summary>
|
|
|
/// <param name="response"></param>
|
|
|
/// <returns></returns>
|
|
|
public static OrderObject getOrderLocalSJMeiTuan(ShopMeituanWaiMaiOrderInfoByidResponse response)
|
|
|
{
|
|
|
var finishDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
try
|
|
|
{
|
|
|
bool otherWaimaiSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI, false);
|
|
|
//是否根据名称匹配
|
|
|
bool otherWaimaiMappingSet = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_MAPPING, false);
|
|
|
//厨显
|
|
|
bool otherWaimaiDefaultKDS = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_DEFAULTKDS, true);
|
|
|
|
|
|
var KDSLists = Global.KdsPlan._kdsPlanList;
|
|
|
|
|
|
if (otherWaimaiSet)
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.Original_price - response.Shipping_fee;//消费金额(订单总额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
#region subin 20231213 解决美团返回时间为时间戳,导致本地保存也为时间戳
|
|
|
_orderObject.CreateDate = response.Order_send_time;//创建时间
|
|
|
//_orderObject.CreateDate = GetFormatDateTime4Sec(response.Order_send_time);
|
|
|
#endregion
|
|
|
_orderObject.CreateUser = "meituan";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = finishDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.Original_price - response.Shipping_fee;//实收金额(订单总额-配送费)
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
|
|
|
//商家应收款
|
|
|
PoiReceiveDetail poiReceiveDetail = JsonUtils.Deserialize<PoiReceiveDetail>(response.Poi_receive_detail);
|
|
|
decimal wmPoiReceiveCent = poiReceiveDetail.WmPoiReceiveCent / 100M;
|
|
|
//计算需要分摊的总额
|
|
|
decimal dicountTotal = response.Original_price - response.Shipping_fee - wmPoiReceiveCent;
|
|
|
decimal havDicount = 0.00M;
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
//商品原价总额,餐盒总金额
|
|
|
decimal productAmount = 0.00M;
|
|
|
decimal boxAmount = 0.00M;
|
|
|
int itemCount = 0;
|
|
|
foreach (var item in response.Detail)
|
|
|
{
|
|
|
productAmount += item.Price * StringUtils.GetDecimal(item.Quantity);
|
|
|
boxAmount += item.Box_num * item.Box_price;
|
|
|
itemCount += 1;
|
|
|
}
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
foreach (var item in response.Detail)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
if (item.Box_num == 0)
|
|
|
{
|
|
|
item.Box_price = 0.00M;
|
|
|
}
|
|
|
string sql1 = "";
|
|
|
if (otherWaimaiMappingSet)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');";
|
|
|
sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}';";
|
|
|
sql1 = string.Format(template1, item.Sku_id);
|
|
|
}
|
|
|
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList != null && productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.KdsFlag = 1;//是否厨显
|
|
|
if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
product.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
product.ChuxianFlag = "1";//是否厨显
|
|
|
product.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
}
|
|
|
//===2019-06-26 取消默认出品
|
|
|
//if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
//{
|
|
|
// KdsPlan kdsPlan = KDSLists[0];
|
|
|
// product.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
// product.KdsChupinFlag = "1";//厨显是否出品
|
|
|
// product.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
//}
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
product.Name = item.Food_name;//商品名称
|
|
|
|
|
|
//zhangy 2020-05-06 Edit 注释以下代码
|
|
|
product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID
|
|
|
product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号
|
|
|
|
|
|
////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性
|
|
|
//product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + "";
|
|
|
//product.No = product.Id;
|
|
|
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = item.Unit;//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Food_name;//简称
|
|
|
if (item.Sku_id == null || "".Equals(item.Sku_id))
|
|
|
{
|
|
|
product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.SpecId = item.Sku_id;
|
|
|
}
|
|
|
product.SpecName = item.Spec;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "4";//商品类别ID
|
|
|
product.TypeName = "美团外卖菜品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
}
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Quantity), 2);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//分摊优惠=(单品总额/订单总额)*优惠总额
|
|
|
decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Quantity) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Quantity), 2);
|
|
|
havDicount += discountPrice * StringUtils.GetDecimal(item.Quantity);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3) - discountPrice;//折后价
|
|
|
}
|
|
|
order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
order.ChuxianFlag = "1";//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
}
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
order.KdsChupinFlag = "1";//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
}
|
|
|
order.CreateDate = response.Order_send_time;//创建时间
|
|
|
order.CreateUser = "meituan";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.DisplayName = item.Food_name;//打印名称
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M;//餐盒费
|
|
|
order.FlavorCount = 1;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//餐盒应收金额
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.Order_send_time;//创建时间
|
|
|
flavorItem.CreateUser = "meituan";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity);
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 0;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.Order_id;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
if (item.Food_property != null && !"".Equals(item.Food_property))
|
|
|
{
|
|
|
var flavorItems = item.Food_property.Split(',');
|
|
|
foreach (string flavor in flavorItems)
|
|
|
{
|
|
|
FlavorItem flavorItem1 = new FlavorItem();
|
|
|
flavorItem1.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem1.isWaiMaiTicket = true;
|
|
|
flavorItem1.Code = "";
|
|
|
flavorItem1.Color = "";
|
|
|
flavorItem1.CreateDate = response.Order_send_time;//创建时间
|
|
|
flavorItem1.CreateUser = "meituan";//创建人
|
|
|
flavorItem1.Description = string.Format("{0}", flavor);//备注说明
|
|
|
flavorItem1.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem1.DiscountPrice = 0.00M;
|
|
|
flavorItem1.Group = "";
|
|
|
flavorItem1.Hand = 0;
|
|
|
flavorItem1.IsRadio = 0;
|
|
|
flavorItem1.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem1.ItemId = order.Id;//行ID
|
|
|
flavorItem1.MakeId = "";//做法ID
|
|
|
flavorItem1.Name = string.Format("{0}", flavor);//做法名称
|
|
|
flavorItem1.OrderId = _orderObject.Id;//
|
|
|
flavorItem1.OrderItemQuantity = 1.00M;
|
|
|
flavorItem1.Price = 0.00M;//餐盒费用
|
|
|
flavorItem1.QtyFlag = 0;
|
|
|
flavorItem1.RefundQuantity = 0.00M;
|
|
|
flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem1.TradeNo = "4" + response.Order_id;//订单编号
|
|
|
flavorItem1.Type = 0;
|
|
|
flavorItemList.Add(flavorItem1);
|
|
|
}
|
|
|
}
|
|
|
order.Flavors = flavorItemList;
|
|
|
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量
|
|
|
order.RefundQuantity = 0.00M;//退菜数量
|
|
|
order.Remark = "美团外卖单品";
|
|
|
if (product.SuitFlag == 0)
|
|
|
{
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.RowState = OrderRowState.套餐主;
|
|
|
}
|
|
|
order.SaleDate = response.Order_send_time;//创建时间
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额
|
|
|
order.TradeNo = "4" + response.Order_id;//营业模式订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]";
|
|
|
if (item.Spec != null && !"".Equals(item.Spec))
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name;
|
|
|
}
|
|
|
order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);
|
|
|
order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价
|
|
|
order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价
|
|
|
order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
//优惠明细
|
|
|
List<PromotionItem> promotionsList = new List<PromotionItem>();
|
|
|
PromotionItem promotionItem = new PromotionItem();
|
|
|
promotionItem.Amount = order.Amount;//金额
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * order.Quantity, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
|
|
|
promotionItem.Enabled = true;
|
|
|
promotionItem.FinishDate = finishDate;//完成时间
|
|
|
promotionItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotionItem.ItemId = order.Id;//行ID
|
|
|
promotionItem.OrderId = _orderObject.Id;//
|
|
|
promotionItem.PlanName = "外卖扣费";//班次编号
|
|
|
promotionItem.PromotionType = PromotionType.外卖扣费;
|
|
|
promotionItem.ReceivableAmount = order.ReceivableAmount;
|
|
|
promotionItem.RelationId = "";
|
|
|
promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
promotionItem.TradeNo = "4" + response.Order_id;//订单编号
|
|
|
promotionItem.CreateDate = response.Order_send_time;//创建时间
|
|
|
promotionItem.CreateUser = "meituan";//创建人
|
|
|
promotionsList.Add(promotionItem);
|
|
|
order.Promotions = promotionsList;
|
|
|
itemList.Add(order);
|
|
|
//如果商品是套餐,转套餐
|
|
|
if (product.SuitFlag == 1)
|
|
|
{
|
|
|
var details = new List<SuitExt>();
|
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
|
|
|
}
|
|
|
}
|
|
|
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
|
|
|
int inx = 0;
|
|
|
foreach (SuitExt suit in lists)
|
|
|
{
|
|
|
string property = item.Food_property;
|
|
|
string[] dishs = property.Split(',');
|
|
|
var details1 = new List<SuitExt>();
|
|
|
foreach (string name in dishs)
|
|
|
{
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details1 = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name));
|
|
|
}
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string _json = null;
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(details1[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(suit);
|
|
|
}
|
|
|
//反序列化为ProductExt对象
|
|
|
var _product = JsonUtils.Deserialize<ProductExt>(_json);
|
|
|
|
|
|
|
|
|
//新建套菜明细
|
|
|
var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product);
|
|
|
|
|
|
//标识为套餐明细
|
|
|
row.RowState = OrderRowState.套餐明;
|
|
|
|
|
|
//道菜ID
|
|
|
row.SuitId = suit.SuitId;
|
|
|
//道菜基准数量
|
|
|
row.SuitQuantity = suit.Quantity;
|
|
|
//道菜基准加价
|
|
|
row.SuitAddPrice = suit.AddPrice;
|
|
|
//道菜基准加价 = 主菜数量 * 道菜基准单价
|
|
|
row.SuitAmount = order.Quantity * suit.AddPrice;
|
|
|
|
|
|
//界面-优惠列显示
|
|
|
row.Discount = 0;
|
|
|
//界面-行下划线
|
|
|
row.Underline = (++inx) == lists.Count ? 1 : 0;
|
|
|
//界面-是否有做法
|
|
|
row.Flavor = 0;
|
|
|
|
|
|
//当前行父ID
|
|
|
row.ParentId = order.Id;
|
|
|
//当前行分组
|
|
|
row.Group = order.Group;
|
|
|
//加料
|
|
|
row.Scheme = "";
|
|
|
|
|
|
//道菜数量随主菜数量变化
|
|
|
row.Quantity = order.Quantity * row.SuitQuantity;
|
|
|
row.TradeNo = "4" + response.Order_id;//营业模式订单编号
|
|
|
i = i + 1;
|
|
|
row.OrderNo = i;
|
|
|
itemList.Add(row);
|
|
|
}
|
|
|
//套餐价格分摊
|
|
|
PromotionUtils.CalculateSuitShare(_orderObject, itemList);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
//ObservableDictionary<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.Day_seq);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.美团外卖; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
PayItem payItem = new PayItem();
|
|
|
|
|
|
payItem.Amount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.Order_send_time;//创建时间
|
|
|
payItem.CreateUser = "meituan";//创建人
|
|
|
|
|
|
payItem.Memo = "美团外卖转换";//支付备注
|
|
|
|
|
|
//var payMode = OrderUtils.GetPayMode("22");
|
|
|
payItem.Name = "美团外卖";//付款方式名称
|
|
|
payItem.No = "22";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "";//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = DecimalUtils.ToRound(wmPoiReceiveCent, 2);//实收金额
|
|
|
payItem.PayNo = "4" + response.Order_id;//支付编号
|
|
|
payItem.PayTime = response.Order_send_time;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "4" + response.Order_id;
|
|
|
payItem.TradeVoucherNo = "";
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
_orderObject.SaleDate = response.Order_send_time;//销售时间
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = "";//桌号
|
|
|
_orderObject.TableName = "";//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "4" + response.Order_id;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
_orderObject.Ext1 = response.Caution;//备注信息
|
|
|
|
|
|
return _orderObject;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.Original_price - response.Shipping_fee;//消费金额(订单总额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
_orderObject.CreateDate = response.Order_send_time;//创建时间
|
|
|
_orderObject.CreateUser = "meituan";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = finishDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.Original_price - response.Shipping_fee;//实收金额(订单总额-配送费)
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
foreach (var item in response.Detail)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
if (item.Box_num == 0)
|
|
|
{
|
|
|
item.Box_price = 0.00M;
|
|
|
}
|
|
|
|
|
|
string sql1 = "";
|
|
|
if (otherWaimaiMappingSet)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}' or (p.name = '{1}' and s.name = '{2}');";
|
|
|
sql1 = string.Format(template1, item.Sku_id, item.Food_name, item.Spec);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}';";
|
|
|
sql1 = string.Format(template1, item.Sku_id);
|
|
|
}
|
|
|
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList != null && productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.KdsFlag = 1; //是否厨显
|
|
|
if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
product.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
product.ChuxianFlag = "1";//是否厨显
|
|
|
product.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
}
|
|
|
//===2019-06-26 取消默认出品
|
|
|
//if (otherWaimaiDefaultKDS && KDSLists.Count > 0)
|
|
|
//{
|
|
|
// KdsPlan kdsPlan = KDSLists[0];
|
|
|
// product.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
// product.KdsChupinFlag = "1";//厨显是否出品
|
|
|
// product.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
//}
|
|
|
//else
|
|
|
//{
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
//}
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
product.Name = item.Food_name;//商品名称
|
|
|
|
|
|
|
|
|
//zhangy 2020-05-06 Edit 注释以下代码
|
|
|
product.Id = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品ID
|
|
|
product.No = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//商品编号
|
|
|
|
|
|
////zhangy 2020-05-06 Add 无法获取到productId,通过Hash算法根据品名生成ID,确保分类统计的正确性
|
|
|
//product.Id = HashUtils.Hash1(string.IsNullOrEmpty(product.Name) ? "" : product.Name) + "";
|
|
|
//product.No = product.Id;
|
|
|
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = item.Unit;//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Food_name;//简称
|
|
|
product.SuitFlag = 0;
|
|
|
if (item.Sku_id == null || "".Equals(item.Sku_id))
|
|
|
{
|
|
|
product.SpecId = string.Format("{0}", System.Math.Abs(item.App_food_code.GetHashCode()));//规格ID
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
product.SpecId = item.Sku_id;
|
|
|
}
|
|
|
product.SpecName = item.Spec;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "4";//商品类别ID
|
|
|
product.TypeName = "美团外卖菜品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
}
|
|
|
order.Amount = item.Price * StringUtils.GetDecimal(item.Quantity);//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.Chuxian = kdsPlan.Id;//厨显ID
|
|
|
order.ChuxianFlag = "1";//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = 5;//厨显超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
}
|
|
|
if (product.KdsFlag == 1 && (product.Chuxian == null || "".Equals(product.Chuxian)) && KDSLists.Count > 0)
|
|
|
{
|
|
|
KdsPlan kdsPlan = KDSLists[0];
|
|
|
order.KdsChupin = kdsPlan.Id;//厨显出品ID
|
|
|
order.KdsChupinFlag = "1";//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = 5;//厨显出品超时时间
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
}
|
|
|
order.CreateDate = response.Order_send_time;//创建时间
|
|
|
order.CreateUser = "meituan";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
order.DiscountPrice = item.Price;//折后价
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.DisplayName = item.Food_name;//打印名称
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M * item.Box_num;//餐盒费
|
|
|
order.FlavorCount = 1;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M * item.Box_num;//餐盒应收金额
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem.isWaiMaiTicket = true;
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.Order_send_time;//创建时间
|
|
|
flavorItem.CreateUser = "meituan";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Quantity);
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 0;
|
|
|
flavorItem.RefundQuantity = 0.00M;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "4" + response.Order_id;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
if (item.Food_property != null && !"".Equals(item.Food_property))
|
|
|
{
|
|
|
var flavorItems = item.Food_property.Split(',');
|
|
|
foreach (string flavor in flavorItems)
|
|
|
{
|
|
|
FlavorItem flavorItem1 = new FlavorItem();
|
|
|
flavorItem1.BaseQuantity = item.Box_num;//做法计价
|
|
|
flavorItem1.isWaiMaiTicket = true;
|
|
|
flavorItem1.Code = "";
|
|
|
flavorItem1.Color = "";
|
|
|
flavorItem1.CreateDate = response.Order_send_time;//创建时间
|
|
|
flavorItem1.CreateUser = "meituan";//创建人
|
|
|
flavorItem1.Description = string.Format("{0}", flavor);//备注说明
|
|
|
flavorItem1.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem1.DiscountPrice = 0.00M;
|
|
|
flavorItem1.Group = "";
|
|
|
flavorItem1.Hand = 0;
|
|
|
flavorItem1.IsRadio = 0;
|
|
|
flavorItem1.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem1.ItemId = order.Id;//行ID
|
|
|
flavorItem1.MakeId = "";//做法ID
|
|
|
flavorItem1.Name = string.Format("{0}", flavor);//做法名称
|
|
|
flavorItem1.OrderId = _orderObject.Id;//
|
|
|
flavorItem1.OrderItemQuantity = 1.00M;
|
|
|
flavorItem1.Price = 0.00M;//餐盒费用
|
|
|
flavorItem1.QtyFlag = 0;
|
|
|
flavorItem1.RefundQuantity = 0.00M;
|
|
|
flavorItem1.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem1.TradeNo = "4" + response.Order_id;//订单编号
|
|
|
flavorItem1.Type = 0;
|
|
|
flavorItemList.Add(flavorItem1);
|
|
|
}
|
|
|
}
|
|
|
order.Flavors = flavorItemList;
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = StringUtils.GetDecimal(item.Quantity);//商品数量
|
|
|
order.RefundQuantity = 0.00M;//退菜数量
|
|
|
order.Remark = "美团外卖单品";
|
|
|
if (product.SuitFlag == 0)
|
|
|
{
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.RowState = OrderRowState.套餐主;
|
|
|
}
|
|
|
order.SaleDate = response.Order_send_time;//创建时间
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Price * StringUtils.GetDecimal(item.Quantity) + item.Box_price * item.Box_num;//总计金额
|
|
|
order.TradeNo = "4" + response.Order_id;//营业模式订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = item.Food_property == null ? "" : "[" + item.Food_property + "]";
|
|
|
if (item.Spec != null && !"".Equals(item.Spec))
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name + "[" + item.Spec + "]";
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
order.OtherWaimaiPrintName = item.Food_name;
|
|
|
}
|
|
|
order.DispatchPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);
|
|
|
order.DiscountPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//折扣价
|
|
|
order.MemberPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//会员价
|
|
|
order.OtherPrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//第三方价
|
|
|
order.Price = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
order.SalePrice = item.Price + DecimalUtils.ToRound((item.Box_num * item.Box_price) / StringUtils.GetDecimal(item.Quantity), 3);//售价
|
|
|
itemList.Add(order);
|
|
|
//如果商品是套餐,转套餐
|
|
|
if (product.SuitFlag == 1)
|
|
|
{
|
|
|
var details = new List<SuitExt>();
|
|
|
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt, product.Id));
|
|
|
}
|
|
|
}
|
|
|
var lists = details.FindAll(x => x.DefaultFlag == 1).ToList();
|
|
|
int inx = 0;
|
|
|
foreach (SuitExt suit in lists)
|
|
|
{
|
|
|
|
|
|
string property = item.Food_property;
|
|
|
string[] dishs = property.Split(',');
|
|
|
var details1 = new List<SuitExt>();
|
|
|
foreach (string name in dishs)
|
|
|
{
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
details1 = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt1, product.Id, suit.SuitId, name));
|
|
|
}
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
string _json = "";
|
|
|
if (details1 != null && details1.Count > 0)
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(details1[0]);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//将当前SuitExt序列化
|
|
|
_json = JsonUtils.Serialize(suit);
|
|
|
}
|
|
|
//反序列化为ProductExt对象
|
|
|
var _product = JsonUtils.Deserialize<ProductExt>(_json);
|
|
|
|
|
|
|
|
|
//新建套菜明细
|
|
|
var row = BusinessUtils.Instance.NewOrderItem(_orderObject, _product);
|
|
|
|
|
|
//标识为套餐明细
|
|
|
row.RowState = OrderRowState.套餐明;
|
|
|
|
|
|
//道菜ID
|
|
|
row.SuitId = suit.SuitId;
|
|
|
//道菜基准数量
|
|
|
row.SuitQuantity = suit.Quantity;
|
|
|
//道菜基准加价
|
|
|
row.SuitAddPrice = suit.AddPrice;
|
|
|
//道菜基准加价 = 主菜数量 * 道菜基准单价
|
|
|
row.SuitAmount = order.Quantity * suit.AddPrice;
|
|
|
|
|
|
//界面-优惠列显示
|
|
|
row.Discount = 0;
|
|
|
//界面-行下划线
|
|
|
row.Underline = (++inx) == lists.Count ? 1 : 0;
|
|
|
//界面-是否有做法
|
|
|
row.Flavor = 0;
|
|
|
|
|
|
//当前行父ID
|
|
|
row.ParentId = order.Id;
|
|
|
//当前行分组
|
|
|
row.Group = order.Group;
|
|
|
//加料
|
|
|
row.Scheme = "";
|
|
|
|
|
|
//道菜数量随主菜数量变化
|
|
|
row.Quantity = order.Quantity * row.SuitQuantity;
|
|
|
row.TradeNo = "4" + response.Order_id;//营业模式订单编号
|
|
|
i = i + 1;
|
|
|
row.OrderNo = i;
|
|
|
itemList.Add(row);
|
|
|
}
|
|
|
//套餐价格分摊
|
|
|
PromotionUtils.CalculateSuitShare(_orderObject, itemList);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
//ObservableDictionary<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.Day_seq);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.美团外卖; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
PayItem payItem = new PayItem();
|
|
|
|
|
|
payItem.Amount = response.Original_price - response.Shipping_fee;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.Order_send_time;//创建时间
|
|
|
payItem.CreateUser = "meituan";//创建人
|
|
|
|
|
|
payItem.Memo = "美团外卖转换";//支付备注
|
|
|
|
|
|
//var payMode = OrderUtils.GetPayMode("22");
|
|
|
payItem.Name = "美团外卖";//付款方式名称
|
|
|
payItem.No = "22";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "";//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = response.Original_price - response.Shipping_fee;//实收金额
|
|
|
payItem.PayNo = "4" + response.Order_id;//支付编号
|
|
|
payItem.PayTime = response.Order_send_time;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "4" + response.Order_id;
|
|
|
payItem.TradeVoucherNo = "";
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
_orderObject.SaleDate = response.Order_send_time;//销售时间
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = "";//桌号
|
|
|
_orderObject.TableName = "";//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "4" + response.Order_id;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
_orderObject.Ext1 = response.Caution;//备注信息
|
|
|
return _orderObject;
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error("美团外卖转单异常========>" + ex);
|
|
|
Global.Instance.BugReport(ex, "美团外卖转单异常");
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
//public static OrderObject getOrderLocalBaiDu(BaiDuOrderResponse response)
|
|
|
//{
|
|
|
// //当前订单对象
|
|
|
// OrderObject _orderObject = new OrderObject();
|
|
|
// _orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
// _orderObject.AddPoint = 0.00M;//本地积分
|
|
|
// decimal total_fee = response.OrderBody.OrderData.OrderInfo.Total_fee / Convert.ToDecimal(100);
|
|
|
// decimal send_fee = response.OrderBody.OrderData.OrderInfo.Send_fee / Convert.ToDecimal(100);
|
|
|
// _orderObject.Amount = total_fee - send_fee;//消费金额(订单总额-配送费)
|
|
|
// _orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
// _orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
// _orderObject.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间
|
|
|
// _orderObject.CreateUser = "baidu";//创建人
|
|
|
// _orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
// _orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
// _orderObject.FinishDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//完成时间
|
|
|
// _orderObject.PaidAmount = total_fee - send_fee;//实收金额(订单总额-配送费)
|
|
|
// _orderObject.InvoicedAmount = 0.00M;
|
|
|
// _orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
// List<List<BaiduOrderProduct>> products = response.OrderBody.OrderData.Products;
|
|
|
// List<BaiduOrderProduct> items = new List<BaiduOrderProduct>();
|
|
|
// foreach (List<BaiduOrderProduct> group in products)
|
|
|
// {
|
|
|
// foreach (BaiduOrderProduct item in group)
|
|
|
// {
|
|
|
// item.ProductPrice = item.Product_price / Convert.ToDecimal(100);
|
|
|
// item.ProductFee = item.Product_fee / Convert.ToDecimal(100);
|
|
|
// var spec = "";
|
|
|
// var specId = "";
|
|
|
// if (item.Product_attr != null)
|
|
|
// {
|
|
|
// foreach (var attr in item.Product_attr)
|
|
|
// {
|
|
|
// spec += string.Format("({0})", attr.Option);
|
|
|
// specId = attr.Baidu_attr_id;
|
|
|
// }
|
|
|
// }
|
|
|
// item.Spec = spec;//菜如菜品规格
|
|
|
// item.SpecId = specId;
|
|
|
// var features = string.Empty;
|
|
|
// if (item.Product_features != null)
|
|
|
// {
|
|
|
// foreach (var feature in item.Product_features)
|
|
|
// {
|
|
|
// features += string.Format("{0},", feature.Option);
|
|
|
// }
|
|
|
// if (!string.IsNullOrEmpty(features))
|
|
|
// {
|
|
|
// features = features.Substring(0, features.Length - 1);
|
|
|
// features = string.Format("({0})", features);
|
|
|
// }
|
|
|
// }
|
|
|
// item.Features = features;//写入菜品做法
|
|
|
// items.Add(item);
|
|
|
// }
|
|
|
// }
|
|
|
// List<OrderItem> itemList = new List<OrderItem>();
|
|
|
// int i = 0;
|
|
|
// foreach (BaiduOrderProduct item in items)
|
|
|
// {
|
|
|
// i = i + 1;
|
|
|
// OrderItem order = new OrderItem();
|
|
|
// order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
// ProductExt product = null;
|
|
|
// using (var db = Global.Instance.OpenDataBase)
|
|
|
// {
|
|
|
// string template1 = SqlConstant.ProductExt + " where p.id ='{0}' and s.id = '{1}'";
|
|
|
// string baidu_dishId = item.Baidu_product_id;
|
|
|
// string baidu_specId = item.SpecId;
|
|
|
// if ("".Equals(baidu_specId))
|
|
|
// {
|
|
|
// baidu_specId = baidu_dishId;
|
|
|
// }
|
|
|
// string sql1 = string.Format(template1, baidu_dishId, baidu_specId);
|
|
|
// List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
// if (productList != null && productList.Count > 0)
|
|
|
// {
|
|
|
// product = productList[0];
|
|
|
// }
|
|
|
// if (product == null)//找不到商品跳过
|
|
|
// {
|
|
|
// product = new ProductExt();
|
|
|
// product.Chuda = "";//厨打ID
|
|
|
// product.ChudaFlag = "0";//是否厨打
|
|
|
// product.Chupin = "";//出品ID
|
|
|
// product.ChupinFlag = "0";//是否出品
|
|
|
// product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
// product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
// product.Chuxian = "";//厨显ID
|
|
|
// product.ChuxianFlag = "0";//是否厨显
|
|
|
// product.ChuxianTime = 0;//厨显超时时间
|
|
|
// product.CurrentFlag = 0;//是否可以议价
|
|
|
// product.DiscountFlag = 0;//是否可折扣
|
|
|
// product.GiveFlag = 0;//允许赠送
|
|
|
// product.KdsChupin = "";//厨显出品ID
|
|
|
// product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
// product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
// product.LabelPrintFlag = 1;//标签打印
|
|
|
// product.MebDiscountFlag = 0;//会员折上折
|
|
|
// product.MinPrice = 0.00M;//最低售价
|
|
|
// product.Name = item.Product_name;//商品名称
|
|
|
// product.Id = baidu_dishId;//商品ID
|
|
|
// product.No = baidu_dishId;//商品编号
|
|
|
// product.UnitId = "0";//商品单位ID
|
|
|
// product.UnitName = "份";//商品单位名称
|
|
|
// product.PromotionFlag = 0;//是否允许促销
|
|
|
// product.ShortName = item.Product_name;//简称
|
|
|
// product.SpecId = baidu_specId;//规格ID
|
|
|
// product.SpecName = item.Spec;//规格名称
|
|
|
// product.StockFlag = 0;//是否管理库存
|
|
|
// product.TapleFlag = 0;//是否主食
|
|
|
// product.TypeId = "6";//商品类别ID
|
|
|
// product.TypeName = "百度外卖菜品";//商品类别名称
|
|
|
// product.WeighFlag = 0;//是否称重
|
|
|
// }
|
|
|
// }
|
|
|
// order.Amount = item.Product_fee / Convert.ToDecimal(100);//单品消费
|
|
|
// order.Chuda = product.Chuda;//厨打ID
|
|
|
// order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
// order.ChudaQty = 0;//厨打次数
|
|
|
// order.Chupin = product.Chupin;//出品ID
|
|
|
// order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
// order.ChupinQty = 0;//出品次数
|
|
|
// order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
// order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
// order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
// order.Chuxian = product.Chuxian;//厨显ID
|
|
|
// order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
// order.ChuxianQty = 0;//厨显次数
|
|
|
// order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
// order.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间
|
|
|
// order.CreateUser = "baidu";//创建人
|
|
|
// order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
// order.Discount = 0.00M;//折扣金额
|
|
|
// order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
// order.DiscountPrice = item.Product_price / Convert.ToDecimal(100);//折后价
|
|
|
// order.DispatchPrice = item.Product_price / Convert.ToDecimal(100);//批发价
|
|
|
// order.DisplayName = item.Product_name + item.Spec;//打印名称
|
|
|
// order.Flavor = 1;//是否包含做法
|
|
|
// order.FlavorAmount = item.Package_fee / Convert.ToDecimal(100);//餐盒费
|
|
|
// order.FlavorCount = 1;
|
|
|
// order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
// order.FlavorReceivableAmount = item.Package_fee / Convert.ToDecimal(100);//餐盒应收金额
|
|
|
// List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
// FlavorItem flavorItem = new FlavorItem();
|
|
|
// flavorItem.BaseQuantity = 1;//做法计价
|
|
|
// flavorItem.Code = "";
|
|
|
// flavorItem.Color = "";
|
|
|
// flavorItem.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间
|
|
|
// flavorItem.CreateUser = "meituan";//创建人
|
|
|
// flavorItem.Description = "餐盒费";//备注说明
|
|
|
// flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
// flavorItem.DiscountPrice = item.Package_price / Convert.ToDecimal(100);
|
|
|
// flavorItem.Group = "";
|
|
|
// flavorItem.Hand = 0;
|
|
|
// flavorItem.IsRadio = 0;
|
|
|
// flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
// flavorItem.ItemId = order.Id;//行ID
|
|
|
// flavorItem.MakeId = "";//做法ID
|
|
|
// flavorItem.Name = "餐盒费";//做法名称
|
|
|
// flavorItem.OrderId = _orderObject.Id;//
|
|
|
// flavorItem.OrderItemQuantity = StringUtils.GetDecimal(item.Product_amount);
|
|
|
// flavorItem.Price = item.Package_price / Convert.ToDecimal(100);//餐盒费用
|
|
|
// flavorItem.QtyFlag = 0;
|
|
|
// flavorItem.RefundQuantity = 0.00M;
|
|
|
// flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
// flavorItem.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;//订单编号
|
|
|
// flavorItem.Type = 1;
|
|
|
// flavorItemList.Add(flavorItem);
|
|
|
// order.Flavors = flavorItemList;
|
|
|
// order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
// order.Group = "";//分组
|
|
|
// order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
// order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
// order.KdsChupinQty = 0;
|
|
|
// order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
// order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
// order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
// order.MemberPrice = item.Product_price / Convert.ToDecimal(100);//会员价
|
|
|
// order.MinPrice = product.MinPrice;//最低售价
|
|
|
// order.Name = product.Name;//商品名称
|
|
|
// order.OrderId = _orderObject.Id;//订单ID
|
|
|
// order.OrderNo = i;
|
|
|
// order.OtherPrice = item.Product_price / Convert.ToDecimal(100);//第三方价
|
|
|
// order.Price = item.Product_price / Convert.ToDecimal(100);//售价
|
|
|
// order.ProductExt = product;//商品信息
|
|
|
// order.ProductId = product.Id;//商品ID
|
|
|
// order.ProductNo = product.No;//商品编号
|
|
|
// order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
// order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
// order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
// order.Quantity = StringUtils.GetDecimal(item.Product_amount);//商品数量
|
|
|
// order.RefundQuantity = 0.00M;//退菜数量
|
|
|
// order.Remark = "百度外卖单品";
|
|
|
// order.RowState = OrderRowState.普通;
|
|
|
// order.SaleDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//创建时间
|
|
|
// order.SalePrice = item.Product_price / Convert.ToDecimal(100);//售价
|
|
|
// order.ShortName = product.ShortName;//简称
|
|
|
// order.SpecId = product.SpecId;//规格ID
|
|
|
// order.SpecName = product.SpecName;//规格名称
|
|
|
// order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
// order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
// order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
// order.TotalAmonut = item.Product_fee / Convert.ToDecimal(100) + item.Package_fee / Convert.ToDecimal(100);//总计金额
|
|
|
// order.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;//营业模式订单编号
|
|
|
// order.TypeId = product.TypeId;//商品类别ID
|
|
|
// order.TypeName = product.TypeName;//商品类别名称
|
|
|
// order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
// order.OtherWaimaiPrintMake = item.Features == null ? "" : "[" + item.Features + "]";
|
|
|
// if (item.Spec != null && !"".Equals(item.Spec))
|
|
|
// {
|
|
|
// order.OtherWaimaiPrintName = item.Product_name + "[" + item.Spec + "]";
|
|
|
// }
|
|
|
// else
|
|
|
// {
|
|
|
// order.OtherWaimaiPrintName = item.Product_name;
|
|
|
// }
|
|
|
// itemList.Add(order);
|
|
|
// }
|
|
|
// _orderObject.Items = itemList;//商品列表
|
|
|
// _orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
// _orderObject.MalingAmount = 0.00M;
|
|
|
// //ObservableDictionary<string, OrderItem> map = new ObservableDictionary<string, OrderItem>();
|
|
|
|
|
|
// var map = new ObservableCollection<OrderItem>();
|
|
|
// foreach (OrderItem item in itemList)
|
|
|
// {
|
|
|
// map.Add(item);
|
|
|
// }
|
|
|
// _orderObject.Maps = map; //商品Map明细
|
|
|
// _orderObject.OrderCount = i;
|
|
|
// _orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
// _orderObject.OrderNo = string.Format("{0}", StringUtils.GetString(response.OrderBody.OrderData.OrderInfo.Order_index));
|
|
|
// _orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
// _orderObject.OrderType = OrderType.百度外卖; //订单类型
|
|
|
// _orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
// List<PayItem> payList = new List<PayItem>();
|
|
|
// PayItem payItem = new PayItem();
|
|
|
|
|
|
// payItem.Amount = total_fee - send_fee;//已收金额
|
|
|
// payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
// payItem.CreateDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time); ;//创建时间
|
|
|
// payItem.CreateUser = "baidu";//创建人
|
|
|
|
|
|
// payItem.Memo = "百度外卖转换";//支付备注
|
|
|
|
|
|
// //var payMode = OrderUtils.GetPayMode("24");
|
|
|
// payItem.Name = "百度外卖";//付款方式名称
|
|
|
// payItem.No = "24";//付款方式编码
|
|
|
// payItem.PointFlag = 0;//是否参与积分
|
|
|
|
|
|
// payItem.Order = 1;//支付序号
|
|
|
// payItem.OrderId = _orderObject.Id;//随机
|
|
|
// payItem.OutTradeNo = "";//单据编号
|
|
|
// payItem.OverAmount = 0.00M;//溢出金额
|
|
|
// payItem.PaidAmount = total_fee - send_fee;//实收金额
|
|
|
// payItem.PayNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;//支付编号
|
|
|
// payItem.PayTime = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//支付时间
|
|
|
// payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
// payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
// payItem.Status = 1;
|
|
|
// payItem.StatusDesc = "已支付";
|
|
|
// payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
// payItem.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;
|
|
|
// payItem.TradeVoucherNo = "";
|
|
|
// payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
// payList.Add(payItem);
|
|
|
// _orderObject.Pays = payList; //支付列表
|
|
|
// _orderObject.People = 1;//人数
|
|
|
// _orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
// _orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
// _orderObject.PrintTimes = 1; //打印时间
|
|
|
// _orderObject.SaleDate = DateTimeUtils.GetFormatDateTime4Sec(response.OrderBody.OrderData.OrderInfo.Create_time);//销售时间
|
|
|
// _orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
// _orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
// _orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
// _orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
// _orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
// _orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
// _orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
// _orderObject.SyncStatus = 0;//同步状态
|
|
|
// _orderObject.TableNo = "";//桌号
|
|
|
// _orderObject.TableName = "";//餐桌名称
|
|
|
// _orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
// _orderObject.TradeNo = "6" + response.OrderBody.OrderData.OrderInfo.Order_id;
|
|
|
// string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
// string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
// _orderObject.Weather = string.Empty;
|
|
|
// _orderObject.Weeker = weeker;
|
|
|
// _orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
// _orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
|
|
|
// return _orderObject;
|
|
|
//}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 组装微信订单
|
|
|
/// </summary>
|
|
|
/// <param name="response"></param>
|
|
|
/// <returns></returns>
|
|
|
public static OrderObject getOrderLocalWeiXin(WeiXinOrderResponse response)
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.Amount - response.DistributionFee;//消费金额(订单金额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
_orderObject.CreateDate = response.PayDate;//创建时间
|
|
|
_orderObject.CreateUser = "weixin";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = response.PayDate;//完成时间
|
|
|
_orderObject.PaidAmount = response.Paid - response.DistributionFee;//实收金额
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
int i = 0;
|
|
|
foreach (WeiXinOrderItems item in response.Items)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where p.id ='{0}' and s.id = '{1}'";
|
|
|
string sql1 = string.Format(template1, item.ProductId, item.SpecId);
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList != null && productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.KdsChupin = "";//厨显出品ID
|
|
|
product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
product.Name = item.GoodsName;//商品名称
|
|
|
product.Id = item.ProductId;//商品ID
|
|
|
product.No = "0";//商品编号
|
|
|
product.UnitId = item.ProductUnitId;//商品单位ID
|
|
|
product.UnitName = item.ProductUnitName;//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.GoodsName;//简称
|
|
|
product.SpecId = item.SpecId;//规格ID
|
|
|
product.SpecName = item.SpecName;//规格名称
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = item.CategoryId;//商品类别ID
|
|
|
product.TypeName = item.CategoryName;//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
}
|
|
|
|
|
|
}
|
|
|
order.Amount = item.Amount;//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
order.CreateDate = response.PayDate;//创建时间
|
|
|
order.CreateUser = "weixin";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
order.DiscountPrice = item.DiscountPrice;//折后价
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = item.AddPriceTotal;//加价金额
|
|
|
order.FlavorCount = item.Makes != null ? item.Makes.Count : 0;
|
|
|
order.FlavorDiscountAmount = item.DiscountAddTotal;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = item.AmountAddTotal;//餐盒应收金额
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
//如果是打包或者外卖加餐盒费做法
|
|
|
if (response.BusMode == 1 || response.BusMode == 2)
|
|
|
{
|
|
|
if (item.BoxNum > 0)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = 1;//做法计价
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.PayDate;//创建时间
|
|
|
flavorItem.CreateUser = "weixin";//创建人
|
|
|
flavorItem.Description = "餐盒费";//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = item.BoxPrice;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "0";//做法ID
|
|
|
flavorItem.Name = "餐盒费";//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = 1;
|
|
|
flavorItem.Price = item.BoxPrice;//餐盒费用
|
|
|
flavorItem.QtyFlag = 1;
|
|
|
flavorItem.RefundQuantity = 0;
|
|
|
flavorItem.Quantity = item.BoxNum;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "7" + response.TicketNo;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
}
|
|
|
foreach (WeiXinOrderItemMake make in item.Makes)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = 1;//做法计价
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.PayDate;//创建时间
|
|
|
flavorItem.CreateUser = "weixin";//创建人
|
|
|
flavorItem.Description = make.MakeName;//备注说明
|
|
|
flavorItem.DiscountAmount = make.DiscountAddTotal;//折扣金额
|
|
|
flavorItem.DiscountPrice = make.DiscountPrice;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = make.MakeId;//做法ID
|
|
|
flavorItem.Name = make.MakeName;//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = 1;
|
|
|
flavorItem.Price = make.AddPrice;//餐盒费用
|
|
|
flavorItem.QtyFlag = make.MngNu;
|
|
|
flavorItem.RefundQuantity = make.Rcount;
|
|
|
flavorItem.Quantity = make.Count;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "7" + response.TicketNo;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
List<PromotionItem> promotionItemList = new List<PromotionItem>();
|
|
|
foreach (WeiXinOrderPromo promo in item.PromoList)
|
|
|
{
|
|
|
PromotionItem promotionItem = new PromotionItem();
|
|
|
promotionItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
promotionItem.OrderId = _orderObject.Id;
|
|
|
promotionItem.TradeNo = "7" + response.TicketNo;//订单编号
|
|
|
promotionItem.ItemId = order.Id;
|
|
|
promotionItem.PromotionType = (PromotionType)promo.Type;
|
|
|
promotionItem.DiscountAmount = promo.DiscountMoney;
|
|
|
promotionItem.FinishDate =
|
|
|
promotionItem.CreateDate = response.PayDate;//创建时间
|
|
|
promotionItem.CreateUser = "weixin";//创建人
|
|
|
promotionItemList.Add(promotionItem);
|
|
|
}
|
|
|
order.Promotions = promotionItemList;
|
|
|
order.Flavors = flavorItemList;
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = item.Count;//商品数量
|
|
|
order.RefundQuantity = item.Rcount;//退菜数量
|
|
|
order.Remark = "微信点餐单品";
|
|
|
order.RowState = (OrderRowState)item.IsSuit;
|
|
|
order.SuitId = item.SuitId;
|
|
|
order.ParentId = item.ParentId;
|
|
|
order.SaleDate = response.SaleDate;//创建时间
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.AmountTotal;//总计金额
|
|
|
order.TradeNo = "7" + response.TicketNo;//订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = "";
|
|
|
order.OtherWaimaiPrintName = item.GoodsName;
|
|
|
itemList.Add(order);
|
|
|
}
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.TakeNo);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.微信点餐; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
foreach (WeiXinOrderPays pay in response.Pays)
|
|
|
{
|
|
|
PayMode payMode = OrderUtils.GetPayMode(pay.PayMode);
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = pay.Paid - response.DistributionFee;//已收金额
|
|
|
payItem.ChangeAmount = pay.Rchange;//找零金额
|
|
|
payItem.CreateDate = response.PayDate;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单转换";//支付备注
|
|
|
if (payMode != null)
|
|
|
{
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = pay.PayMode;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
payItem.Name = "微信支付";//付款方式名称
|
|
|
payItem.No = "05";//付款方式编码
|
|
|
payItem.PointFlag = 0;//是否参与积分
|
|
|
payItem.IncomeFlag = 1;//是否实收
|
|
|
}
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = pay.VoucherNo;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = pay.Paid - response.DistributionFee;//实收金额
|
|
|
payItem.PayNo = "7" + response.TicketNo;//支付编号
|
|
|
payItem.PayTime = response.PayDate;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.TicketNo;
|
|
|
payItem.TradeVoucherNo = pay.VoucherNo;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
}
|
|
|
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
_orderObject.SaleDate = response.SaleDate;//销售时间
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = response.TableNo;//桌号
|
|
|
_orderObject.TableName = response.TableName;//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "7" + response.TicketNo;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
|
|
|
return _orderObject;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 组装微信(QM)订单
|
|
|
/// </summary>
|
|
|
/// <param name="response"></param>
|
|
|
/// <returns></returns>
|
|
|
public static OrderObject getOrderLocalQiMai(QiMaiOrder response)
|
|
|
{
|
|
|
//当前订单对象
|
|
|
OrderObject _orderObject = new OrderObject();
|
|
|
_orderObject.Id = IdWorkerUtils.Instance.NextId();
|
|
|
_orderObject.AddPoint = 0.00M;//本地积分
|
|
|
_orderObject.Amount = response.Amount - response.Freight;//消费金额(订单应付金额-配送费)
|
|
|
_orderObject.CardPayResult = null;//会员卡支付清单
|
|
|
_orderObject.ChangeAmount = 0.00M;//找零金额
|
|
|
_orderObject.CreateDate = response.CreatedTime;//创建时间
|
|
|
_orderObject.CreateUser = "qimai";//创建人
|
|
|
_orderObject.DeviceName = DeviceUtils.Instance.ComputerName;//设备名称
|
|
|
_orderObject.DiscountAmount = 0.00M;//优惠总额(活动总额)
|
|
|
_orderObject.FinishDate = response.PayTime;//完成时间
|
|
|
_orderObject.PaidAmount = response.Amount - response.Freight - response.MinusAmount;//实收金额
|
|
|
_orderObject.InvoicedAmount = 0.00M;
|
|
|
_orderObject.IpAddress = DeviceUtils.Instance.IPAddress;//本地IP地址
|
|
|
|
|
|
QiMaiOrderGoods qiMaiOrderGoods = response.orderItems;
|
|
|
//计算需要分摊的总额
|
|
|
decimal dicountTotal = response.MinusAmount;
|
|
|
decimal havDicount = 0.00M;
|
|
|
List<OrderItem> itemList = new List<OrderItem>();
|
|
|
int i = 0;
|
|
|
int j = 0;
|
|
|
int itemCount = 0;
|
|
|
decimal productAmount = 0.00M;
|
|
|
foreach (QiMaiOrderItem item in qiMaiOrderGoods.Goods)
|
|
|
{
|
|
|
productAmount += item.Price * StringUtils.GetDecimal(item.Num);
|
|
|
itemCount += 1;
|
|
|
}
|
|
|
foreach (QiMaiOrderItem item in qiMaiOrderGoods.Goods)
|
|
|
{
|
|
|
i = i + 1;
|
|
|
j = j + 1;
|
|
|
OrderItem order = new OrderItem();
|
|
|
order.Id = IdWorkerUtils.Instance.NextId();
|
|
|
ProductExt product = null;
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
string template1 = SqlConstant.ProductExt + " where s.id = '{0}'";
|
|
|
string sql1 = string.Format(template1, item.TradeMark);
|
|
|
List<ProductExt> productList = db.Fetch<ProductExt>(sql1);
|
|
|
if (productList != null && productList.Count > 0)
|
|
|
{
|
|
|
product = productList[0];
|
|
|
}
|
|
|
if (product == null)//找不到商品跳过
|
|
|
{
|
|
|
product = new ProductExt();
|
|
|
product.Chuda = "";//厨打ID
|
|
|
product.ChudaFlag = "0";//是否厨打
|
|
|
product.Chupin = "";//出品ID
|
|
|
product.ChuDaLabel = string.Empty;//厨打标签ID
|
|
|
product.ChuDaLabelFlag = "0";//是否厨打标签
|
|
|
product.ChupinFlag = "0";//是否出品
|
|
|
product.Chuxian = "";//厨显ID
|
|
|
product.ChuxianFlag = "0";//是否厨显
|
|
|
product.ChuxianTime = 0;//厨显超时时间
|
|
|
product.CurrentFlag = 0;//是否可以议价
|
|
|
product.DiscountFlag = 0;//是否可折扣
|
|
|
product.GiveFlag = 0;//允许赠送
|
|
|
product.KdsChupin = "";//厨显出品ID
|
|
|
product.KdsChupinFlag = "0";//厨显是否出品
|
|
|
product.KdsChupinTime = 0;//厨显出品超时时间
|
|
|
product.LabelPrintFlag = 1;//标签打印
|
|
|
product.MebDiscountFlag = 0;//会员折上折
|
|
|
product.MinPrice = 0.00M;//最低售价
|
|
|
product.Name = item.Name;//商品名称
|
|
|
product.Id = item.Id;//商品ID
|
|
|
product.No = item.TradeMark;//商品编号
|
|
|
product.UnitId = "0";//商品单位ID
|
|
|
product.UnitName = "份";//商品单位名称
|
|
|
product.PromotionFlag = 0;//是否允许促销
|
|
|
product.ShortName = item.Name;//简称
|
|
|
product.SpecId = item.Id;//规格ID
|
|
|
|
|
|
product.StockFlag = 0;//是否管理库存
|
|
|
product.TapleFlag = 0;//是否主食
|
|
|
product.TypeId = "7";//商品类别ID
|
|
|
product.TypeName = "微信商品";//商品类别名称
|
|
|
product.WeighFlag = 0;//是否称重
|
|
|
|
|
|
if (item.Spec != null && !item.Spec.ToString().Equals("[]"))
|
|
|
{
|
|
|
Dictionary<string, string> _map = JsonUtils.Deserialize<Dictionary<string, string>>(item.Spec.ToString());
|
|
|
string specName = string.Empty;
|
|
|
foreach (var mapValue in _map)
|
|
|
{
|
|
|
specName = mapValue.Value + ",";
|
|
|
}
|
|
|
if (specName != null && !"".Equals(specName))
|
|
|
{
|
|
|
specName = specName.Substring(0, specName.Length - 1);
|
|
|
}
|
|
|
|
|
|
product.SpecName = specName;//规格名称
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
decimal discountPrice = DecimalUtils.ToRound((dicountTotal - havDicount) / StringUtils.GetDecimal(item.Num), 2);
|
|
|
order.DiscountPrice = item.Price - discountPrice;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//分摊优惠=(单品总额/订单总额)*优惠总额
|
|
|
decimal discountPrice = DecimalUtils.ToRound((item.Price * StringUtils.GetDecimal(item.Num) / productAmount) * dicountTotal / StringUtils.GetDecimal(item.Num), 2);
|
|
|
havDicount += discountPrice * StringUtils.GetDecimal(item.Num);
|
|
|
order.DiscountPrice = item.Price - discountPrice;//折后价
|
|
|
}
|
|
|
order.Amount = item.Price * item.Num;//单品消费
|
|
|
order.Chuda = product.Chuda;//厨打ID
|
|
|
order.ChudaFlag = product.ChudaFlag;//是否厨打
|
|
|
order.ChudaQty = 0;//厨打次数
|
|
|
order.Chupin = product.Chupin;//出品ID
|
|
|
order.ChupinFlag = product.ChupinFlag;//是否出品
|
|
|
order.ChupinQty = 0;//出品次数
|
|
|
order.ChuDaLabel = product.ChuDaLabel;//厨打标签
|
|
|
order.ChuDaLabelFlag = product.ChuDaLabelFlag;//是否厨打标签
|
|
|
order.ChuDaLabelQty = 0;//厨打标签数量
|
|
|
order.Chuxian = product.Chuxian;//厨显ID
|
|
|
order.ChuxianFlag = product.ChuxianFlag;//是否厨显
|
|
|
order.ChuxianQty = 0;//厨显次数
|
|
|
order.ChuxianTime = product.ChuxianTime;//厨显超时时间
|
|
|
order.CreateDate = response.CreatedTime;//创建时间
|
|
|
order.CreateUser = "weixin";//创建人
|
|
|
order.CurrentFlag = product.CurrentFlag;//是否可以议价
|
|
|
order.Discount = 0.00M;//折扣金额
|
|
|
order.DiscountFlag = product.DiscountFlag;//是否可折扣
|
|
|
//order.DiscountPrice = DecimalUtils.ToRound((item.Price * item.Num - item.Minus) / item.Num, 2);//折后价
|
|
|
order.DispatchPrice = item.Price;//批发价
|
|
|
order.Flavor = 1;//是否包含做法
|
|
|
order.FlavorAmount = 0.00M;//加价金额
|
|
|
|
|
|
string attachgoods = "";
|
|
|
if (item.OrderAttachGoods != null && !"".Equals(item.OrderAttachGoods) && !"[]".Equals(item.OrderAttachGoods))
|
|
|
{
|
|
|
List<QiMaiOrderAttachGoods> attachGoods = JsonUtils.Deserialize<List<QiMaiOrderAttachGoods>>(item.OrderAttachGoods.ToString());
|
|
|
|
|
|
foreach (QiMaiOrderAttachGoods qiMaiOrderAttachGoods in attachGoods)
|
|
|
{
|
|
|
attachgoods = "," + attachgoods + string.Format("{0}*{1}", qiMaiOrderAttachGoods.Name, qiMaiOrderAttachGoods.Qty);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
item.PropertyName = string.Format("{0}{1}", item.Property, attachgoods);
|
|
|
|
|
|
int FlavorCount = 0;
|
|
|
string[] makes = null;
|
|
|
|
|
|
|
|
|
if (item.PropertyName != null && !"".Equals(item.PropertyName))
|
|
|
{
|
|
|
makes = item.PropertyName.Split(',');
|
|
|
FlavorCount = makes.Count();
|
|
|
}
|
|
|
order.FlavorCount = FlavorCount;
|
|
|
order.FlavorDiscountAmount = 0.00M;//做法优惠金额
|
|
|
order.FlavorReceivableAmount = 0.00M;//餐盒应收金额
|
|
|
List<FlavorItem> flavorItemList = new List<FlavorItem>();
|
|
|
if (makes != null)
|
|
|
{
|
|
|
foreach (string make in makes)
|
|
|
{
|
|
|
FlavorItem flavorItem = new FlavorItem();
|
|
|
flavorItem.BaseQuantity = 1;//做法计价
|
|
|
flavorItem.Code = "";
|
|
|
flavorItem.Color = "";
|
|
|
flavorItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
flavorItem.CreateUser = "weixin";//创建人
|
|
|
flavorItem.Description = make;//备注说明
|
|
|
flavorItem.DiscountAmount = 0.00M;//折扣金额
|
|
|
flavorItem.DiscountPrice = 0.00M;
|
|
|
flavorItem.Group = "";
|
|
|
flavorItem.Hand = 0;
|
|
|
flavorItem.IsRadio = 0;
|
|
|
flavorItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
flavorItem.ItemId = order.Id;//行ID
|
|
|
flavorItem.MakeId = "0";//做法ID
|
|
|
flavorItem.Name = make;//做法名称
|
|
|
flavorItem.OrderId = _orderObject.Id;//
|
|
|
flavorItem.OrderItemQuantity = 1;
|
|
|
flavorItem.Price = 0.00M;//餐盒费用
|
|
|
flavorItem.QtyFlag = 0;
|
|
|
flavorItem.RefundQuantity = 0;
|
|
|
flavorItem.Quantity = 1;
|
|
|
flavorItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
flavorItem.TradeNo = "7" + response.Id;//订单编号
|
|
|
flavorItem.Type = 1;
|
|
|
flavorItemList.Add(flavorItem);
|
|
|
}
|
|
|
}
|
|
|
order.Flavors = flavorItemList;
|
|
|
order.GiveFlag = product.GiveFlag;//允许赠送
|
|
|
order.Group = "";//分组
|
|
|
order.KdsChupin = product.KdsChupin;//厨显出品ID
|
|
|
order.KdsChupinFlag = product.KdsChupinFlag;//厨显是否出品
|
|
|
order.KdsChupinQty = 0;
|
|
|
order.KdsChupinTime = product.KdsChupinTime;//厨显出品超时时间
|
|
|
order.LabelPrintFlag = product.LabelPrintFlag;//标签打印
|
|
|
order.MebDiscountFlag = product.MebDiscountFlag;//会员折上折
|
|
|
order.MemberPrice = item.Price;//会员价
|
|
|
order.MinPrice = product.MinPrice;//最低售价
|
|
|
order.Name = product.Name;//商品名称
|
|
|
order.OrderId = _orderObject.Id;//订单ID
|
|
|
order.OrderNo = i;
|
|
|
order.OtherPrice = item.Price;//第三方价
|
|
|
order.Price = item.Price;//售价
|
|
|
order.ProductExt = product;//商品信息
|
|
|
order.ProductId = product.Id;//商品ID
|
|
|
order.ProductNo = product.No;//商品编号
|
|
|
order.ProductUnitId = product.UnitId;//商品单位ID
|
|
|
order.ProductUnitName = product.UnitName;//商品单位名称
|
|
|
order.PromotionFlag = product.PromotionFlag;//是否允许促销
|
|
|
order.Quantity = item.Num;//商品数量
|
|
|
order.RefundQuantity = 0;//退菜数量
|
|
|
order.Remark = "微信点餐(QM)单品";
|
|
|
order.RowState = OrderRowState.普通;
|
|
|
order.SuitId = "";
|
|
|
order.ParentId = "";
|
|
|
order.SaleDate = response.CreatedTime;//创建时间
|
|
|
order.SalePrice = item.Price;//售价
|
|
|
//优惠明细
|
|
|
List<PromotionItem> promotionsList = new List<PromotionItem>();
|
|
|
PromotionItem promotionItem = new PromotionItem();
|
|
|
promotionItem.Amount = order.Amount;//金额
|
|
|
if (itemCount == j)
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound(dicountTotal - havDicount, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (order.Amount != 0)
|
|
|
{
|
|
|
promotionItem.DiscountAmount = DecimalUtils.ToRound((order.Price - order.DiscountPrice) * order.Quantity, 2);//优惠金额
|
|
|
promotionItem.DiscountRate = DecimalUtils.ToRound(promotionItem.DiscountAmount / promotionItem.Amount, 2);//优惠率
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
promotionItem.DiscountAmount = 0.00M;//优惠金额
|
|
|
promotionItem.DiscountRate = 0.00M;//优惠率
|
|
|
}
|
|
|
}
|
|
|
promotionItem.Enabled = true;
|
|
|
promotionItem.FinishDate = response.PayTime;//完成时间
|
|
|
promotionItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
promotionItem.ItemId = order.Id;//行ID
|
|
|
promotionItem.OrderId = _orderObject.Id;//
|
|
|
promotionItem.PlanName = "企迈订单优惠";//班次编号
|
|
|
promotionItem.PromotionType = PromotionType.企迈订单优惠;
|
|
|
promotionItem.ReceivableAmount = order.ReceivableAmount;
|
|
|
promotionItem.RelationId = "";
|
|
|
promotionItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
promotionItem.TradeNo = "7" + response.Id;//订单编号
|
|
|
promotionItem.CreateDate = response.CreatedTime; //创建时间
|
|
|
promotionItem.CreateUser = "qimai";//创建人
|
|
|
promotionsList.Add(promotionItem);
|
|
|
order.Promotions = promotionsList;
|
|
|
|
|
|
order.ShortName = product.ShortName;//简称
|
|
|
order.SpecId = product.SpecId;//规格ID
|
|
|
order.SpecName = product.SpecName;//规格名称
|
|
|
order.StockFlag = product.StockFlag;//是否管理库存
|
|
|
order.TapleFlag = product.TapleFlag;//是否主食
|
|
|
order.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
order.TotalAmonut = item.Price * item.Num;//总计金额
|
|
|
order.TradeNo = "7" + response.Id;//订单编号
|
|
|
order.TypeId = product.TypeId;//商品类别ID
|
|
|
order.TypeName = product.TypeName;//商品类别名称
|
|
|
order.WeighFlag = product.WeighFlag;//是否称重
|
|
|
order.OtherWaimaiPrintMake = "";
|
|
|
order.OtherWaimaiPrintName = item.Name;
|
|
|
order.Promotions = promotionsList;
|
|
|
itemList.Add(order);
|
|
|
}
|
|
|
_orderObject.Items = itemList;//商品列表
|
|
|
_orderObject.MacAddress = DeviceUtils.Instance.MacAddress;//MAC地址
|
|
|
_orderObject.MalingAmount = 0.00M;
|
|
|
|
|
|
var map = new ObservableCollection<OrderItem>();
|
|
|
foreach (OrderItem item in itemList)
|
|
|
{
|
|
|
map.Add(item);
|
|
|
}
|
|
|
_orderObject.Maps = map; //商品Map明细
|
|
|
_orderObject.OrderCount = i;
|
|
|
_orderObject.ObjectId = _orderObject.Id;//订单ID
|
|
|
_orderObject.OrderNo = string.Format("{0}", response.SortNum);
|
|
|
_orderObject.OrderStatus = OrderStatus.已完成;//订单状态
|
|
|
_orderObject.OrderType = OrderType.微信点餐; //订单类型
|
|
|
_orderObject.PaymentStatus = OrderPaymentStatus.已付款;//支付装
|
|
|
List<PayItem> payList = new List<PayItem>();
|
|
|
QiMaiOrderPay qiMaiOrderPay = response.orderPays;
|
|
|
//1 余额支付 2 微信支付 3支付宝支付 4现金支付 9 混合支付
|
|
|
if (qiMaiOrderPay.Id == 1)
|
|
|
{
|
|
|
//会员余额支付
|
|
|
PayMode payMode = OrderUtils.GetPayMode("02");
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
}
|
|
|
else if (qiMaiOrderPay.Id == 2)
|
|
|
{
|
|
|
//微信支付
|
|
|
PayMode payMode = OrderUtils.GetPayMode("05");
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
}
|
|
|
else if (qiMaiOrderPay.Id == 3)
|
|
|
{
|
|
|
//支付宝支付
|
|
|
PayMode payMode = OrderUtils.GetPayMode("04");
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
}
|
|
|
else if (qiMaiOrderPay.Id == 4)
|
|
|
{
|
|
|
//现金支付
|
|
|
PayMode payMode = OrderUtils.GetPayMode("01");
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
}
|
|
|
else if (qiMaiOrderPay.Id == 9)
|
|
|
{
|
|
|
//混合微信支付
|
|
|
PayMode payMode = OrderUtils.GetPayMode("02");
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = response.WalletAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
//微信支付
|
|
|
payMode = OrderUtils.GetPayMode("05");
|
|
|
payItem = new PayItem();
|
|
|
payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount - response.WalletAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
|
|
|
}
|
|
|
else if (qiMaiOrderPay.Id == 11)
|
|
|
{
|
|
|
//混合微信支付
|
|
|
PayMode payMode = OrderUtils.GetPayMode("02");
|
|
|
PayItem payItem = new PayItem();
|
|
|
payItem.Amount = response.WalletAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
//微信支付
|
|
|
payMode = OrderUtils.GetPayMode("04");
|
|
|
payItem = new PayItem();
|
|
|
payItem.Amount = response.TotalAmount - response.Freight - response.MinusAmount - response.WalletAmount;//已收金额
|
|
|
payItem.ChangeAmount = 0.00M;//找零金额
|
|
|
payItem.CreateDate = response.CreatedTime;//创建时间
|
|
|
payItem.CreateUser = "weixin";//创建人
|
|
|
payItem.Memo = "微信订单(QM)转换";//支付备注
|
|
|
payItem.Name = payMode.Name;//付款方式名称
|
|
|
payItem.No = payMode.No;//付款方式编码
|
|
|
payItem.PointFlag = payMode.PointFlag;//是否参与积分
|
|
|
payItem.IncomeFlag = payMode.IncomeFlag;//是否实收
|
|
|
payItem.Order = 1;//支付序号
|
|
|
payItem.OrderId = _orderObject.Id;//随机
|
|
|
payItem.OutTradeNo = "7" + response.Id;//单据编号
|
|
|
payItem.OverAmount = 0.00M;//溢出金额
|
|
|
payItem.PaidAmount = payItem.Amount;//实收金额
|
|
|
payItem.PayNo = "7" + response.Id;//支付编号
|
|
|
payItem.PayTime = response.CreatedTime;//支付时间
|
|
|
payItem.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
payItem.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
payItem.Status = 1;
|
|
|
payItem.StatusDesc = "已支付";
|
|
|
payItem.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
payItem.TradeNo = "7" + response.Id;
|
|
|
payItem.TradeVoucherNo = "7" + response.Id;
|
|
|
payItem.Id = IdWorkerUtils.Instance.NextId();
|
|
|
payList.Add(payItem);
|
|
|
}
|
|
|
_orderObject.Pays = payList; //支付列表
|
|
|
_orderObject.People = 1;//人数
|
|
|
_orderObject.PosNo = Global.Instance.Authc.PosNo;//POS号
|
|
|
_orderObject.PrintStatus = OrderPrintStatus.打印完成;//打印状态
|
|
|
_orderObject.PrintTimes = 1; //打印时间
|
|
|
_orderObject.SaleDate = response.CreatedTime;//销售时间
|
|
|
_orderObject.SalesCode = Global.Instance.Worker.No;//营业员编码
|
|
|
_orderObject.SalesName = Global.Instance.Worker.Name;//营业员名称
|
|
|
_orderObject.ShiftName = Global.Instance.BusinessPlanLog.Name;//班次编号
|
|
|
_orderObject.ShiftNo = Global.Instance.BusinessPlanLog.No;//班次名称
|
|
|
_orderObject.StoreId = Global.Instance.Authc.StoreId; //门店ID
|
|
|
_orderObject.StoreName = Global.Instance.Worker.StoreInfo.Name;//门店名称
|
|
|
_orderObject.StoreNo = Global.Instance.Authc.StoreNo;//门店编号
|
|
|
_orderObject.SyncStatus = 0;//同步状态
|
|
|
_orderObject.TableNo = response.TableNumber;//桌号
|
|
|
_orderObject.TableName = response.TableNumber;//餐桌名称
|
|
|
_orderObject.TenantId = Global.Instance.Authc.TenantId;//租户ID
|
|
|
_orderObject.TradeNo = "7" + response.Id;
|
|
|
string[] day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
|
|
|
string weeker = day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
|
|
|
_orderObject.Weather = string.Empty;
|
|
|
_orderObject.Weeker = weeker;
|
|
|
_orderObject.WorkerName = Global.Instance.Worker.Name;//员工姓名
|
|
|
_orderObject.WorkerNo = Global.Instance.Worker.No;//员工工号
|
|
|
return _orderObject;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 外卖退单打印
|
|
|
/// 1.外卖已接单也可以接订单的情况判断是否需要向上去数据
|
|
|
/// 2.厨打只有在本地有数据的情况下才打印退厨打
|
|
|
/// </summary>
|
|
|
private static void UserCancelPrinterTicket(string Name, string orderId, OrderObject _order)
|
|
|
{
|
|
|
Task.Factory.StartNew(() =>
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (_order == null)
|
|
|
{
|
|
|
switch (Name)
|
|
|
{
|
|
|
case "美团外卖":
|
|
|
MeiTuanOrderRequest _MeiTuan = new MeiTuanOrderRequest();
|
|
|
_MeiTuan.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
_MeiTuan.OrderId = orderId;
|
|
|
var _MeiTuanres = OtherWaiMaiUtils.MeiTuanOrder(_MeiTuan);
|
|
|
_order = OtherWaiMaiApi.getOrderLocalMeiTuan(_MeiTuanres.Item3.Data);
|
|
|
break;
|
|
|
case "饿了么":
|
|
|
EleMeOrderRequest _Ele = new EleMeOrderRequest();
|
|
|
_Ele.StoreId = Global.Instance.BusinessPlanLog.StoreId;
|
|
|
_Ele.OrderId = orderId;
|
|
|
var _Eleres = OtherWaiMaiUtils.EleMeOrder(_Ele);
|
|
|
_order = OtherWaiMaiApi.getOrderLocalEleme(_Eleres.Item3.Data);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
////启用外卖商品绑定厨打方案
|
|
|
//var planKit = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_OTHERWAIMAI_PLANKIT, true);
|
|
|
//if (planKit)
|
|
|
//{
|
|
|
// //执行厨打
|
|
|
// ChuDaHelper.KitchenPrinter(orderObject);
|
|
|
// logger.Info("美团外卖厨打成功");
|
|
|
// //执行出品
|
|
|
// ChuDaHelper.MadePrinter(orderObject);
|
|
|
// logger.Info("美团外卖出品成功");
|
|
|
//}
|
|
|
}
|
|
|
var vars = WaiMaiHelper.UserCancelOrders(_order, orderId, Name);
|
|
|
Tuple<bool, string> result = WaiMaiHelper.PrinterTicket("外卖退单", vars);
|
|
|
logger.Error(string.Format("{0}", result.Item2));
|
|
|
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Info(ex);
|
|
|
logger.Info("UserCancelPrinterTicket方法报错:" + ex.Message);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
private static string GetFormatDateTime4Sec(string secTimeStamp, string format = null)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(secTimeStamp)) return null;
|
|
|
format = format ?? "yyyy-MM-dd HH:mm:ss";
|
|
|
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
|
|
|
DateTime dt = startTime.AddSeconds(long.Parse(secTimeStamp));
|
|
|
return dt.ToString(format);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|