|
|
using NLog;
|
|
|
using POSV.Bean;
|
|
|
using POSV.Common;
|
|
|
using POSV.ShoppingCart;
|
|
|
using POSV.Utils;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Text;
|
|
|
|
|
|
namespace POSV.ServiceCenter
|
|
|
{
|
|
|
public class UploadSCNewOrder
|
|
|
{
|
|
|
private static Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
/// <summary>
|
|
|
/// 上传厨显订单
|
|
|
/// </summary>
|
|
|
/// <param name="tradeNo"></param>
|
|
|
public static void UploadNewOrder2SC4KDS(OrderObject orderObject)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
public static void UploadNewOrder2SC4KDSMORE(OrderObject orderObject)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
//是否开启厨显
|
|
|
var enableKds = Global.Instance.GlobalConfigBoolValue(ConfigConstant.DEVICE_KITCHEN_DISPLAY_ENABLE, false);
|
|
|
var allowKitchenDisplay = Global.Instance.GlobalConfigBoolValue(ConfigConstant.DEVICE_KITCHEN_DISPLAY_ALLOWCHUXIAN, false);
|
|
|
var allowKdsChupin = Global.Instance.GlobalConfigBoolValue(ConfigConstant.DEVICE_KITCHEN_DISPLAY_ALLOWCHUPIN, true);
|
|
|
if (enableKds)
|
|
|
{
|
|
|
var result = BuilderNewOrder(orderObject, allowKitchenDisplay, allowKdsChupin);
|
|
|
if (result != null)
|
|
|
{
|
|
|
WSSE.Instance.Query<POSV.Common.JsonObject.BaseDataResponse<POSV.Common.JsonObject.NewOrderResult>>(CommandName.NEWORDER, result, SendNewOrderResult);
|
|
|
logger.Info("订单[{0}]发送至KDS", orderObject.TradeNo);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("启用KDS开关,但未配置厨显设备");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
logger.Info("未开启KDS");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "订单上传服务中心异常");
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 上传厨显订单
|
|
|
/// </summary>
|
|
|
/// <param name="tradeNo"></param>
|
|
|
public static void UploadNewOrder2SC4KDS(string tradeNo)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
OrderObject orderObject = null;
|
|
|
//单据明细
|
|
|
var items = new List<OrderItem>();
|
|
|
//支付明细
|
|
|
var pays = new List<PayItem>();
|
|
|
//主单优惠明细
|
|
|
var orderPromotions = new List<PromotionOrder>();
|
|
|
//做法明细
|
|
|
var flavors = new List<FlavorItem>();
|
|
|
//单品优惠明细
|
|
|
var itemPromotions = new List<PromotionItem>();
|
|
|
//电话外送
|
|
|
OrderDelivery orderDelivery = null;
|
|
|
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
//主单数据
|
|
|
orderObject = db.FirstOrDefault<OrderObject>("where tradeNo =@0;", tradeNo);
|
|
|
|
|
|
if (orderObject == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
var condition = " where orderId = '" + orderObject.Id + "';";
|
|
|
logger.Debug(condition);
|
|
|
|
|
|
//单据明细
|
|
|
items = db.Query<OrderItem>(condition).ToList();
|
|
|
logger.Debug("单据明细<{0}>", (items != null ? items.Count.ToString() : "*****"));
|
|
|
|
|
|
//支付明细
|
|
|
pays = db.Query<PayItem>(condition).ToList();
|
|
|
logger.Debug("支付明细<{0}>", (pays != null ? pays.Count.ToString() : "*****"));
|
|
|
|
|
|
//主单优惠明细
|
|
|
orderPromotions = db.Query<PromotionOrder>(condition).ToList();
|
|
|
logger.Debug("主单优惠明细<{0}>", (orderPromotions != null ? orderPromotions.Count.ToString() : "*****"));
|
|
|
|
|
|
//做法明细
|
|
|
flavors = db.Query<FlavorItem>(condition).ToList();
|
|
|
logger.Debug("做法明细<{0}>", (flavors != null ? flavors.Count.ToString() : "*****"));
|
|
|
|
|
|
//单品优惠明细
|
|
|
itemPromotions = db.Query<PromotionItem>(condition).ToList();
|
|
|
logger.Debug("单品优惠明细<{0}>", (itemPromotions != null ? itemPromotions.Count.ToString() : "*****"));
|
|
|
|
|
|
//外送明细
|
|
|
orderDelivery = db.FirstOrDefault<OrderDelivery>(condition);
|
|
|
|
|
|
}
|
|
|
//外送详情
|
|
|
orderObject.Delivery = orderDelivery;
|
|
|
//订单明细
|
|
|
orderObject.Items = items;
|
|
|
//将支付方式附加到主单
|
|
|
orderObject.Pays = pays;
|
|
|
//将主单优惠附加到主单
|
|
|
orderObject.Promotions = orderPromotions;
|
|
|
foreach (var item in orderObject.Items)
|
|
|
{
|
|
|
List<FlavorItem> flavorsList = flavors.FindAll(x => x.ItemId == item.Id);
|
|
|
if (orderObject.OrderStatus == OrderStatus.已退单)
|
|
|
{
|
|
|
foreach (FlavorItem flavorItem in flavorsList)
|
|
|
{
|
|
|
flavorItem.isBackTicket = true;
|
|
|
}
|
|
|
}
|
|
|
item.Flavors = flavorsList;
|
|
|
item.Promotions = itemPromotions.FindAll(x => x.ItemId == item.Id);
|
|
|
}
|
|
|
|
|
|
if (orderObject != null)
|
|
|
{
|
|
|
UploadNewOrder2SC4KDSMORE(orderObject);
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
logger.Error(ex, "组装上传服务中心订单异常");
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 接收显示结果
|
|
|
/// </summary>
|
|
|
/// <param name="result"></param>
|
|
|
private static void SendNewOrderResult(POSV.Common.JsonObject.BaseDataResponse<POSV.Common.JsonObject.NewOrderResult> result)
|
|
|
{
|
|
|
if (result.Status == 1)
|
|
|
{
|
|
|
//服务中心订单接收成功
|
|
|
var order = JsonUtils.Deserialize<Common.JsonObject.NewOrder>(result.Data.RequestObj.ToString());
|
|
|
logger.Info("收到服务中心发送的接收订单[{0}]成功消息", order.TradeNo);
|
|
|
//接收成功
|
|
|
lock (Global.Instance.SyncLock)
|
|
|
{
|
|
|
//更新订单出品数量
|
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
|
{
|
|
|
using (var transaction = db.GetTransaction())
|
|
|
{
|
|
|
var items = db.Fetch<OrderItem>("where tradeNo = @0", order.TradeNo);
|
|
|
logger.Info("收到服务中心发送的接收订单[{0}]详情:{1}", order.TradeNo, JsonUtils.Serialize(items));
|
|
|
foreach (var kItem in order.Items)
|
|
|
{
|
|
|
var item = items.Find(x => x.Id == kItem.ItemId);
|
|
|
if (item != null)
|
|
|
{
|
|
|
item.ChuxianQty += kItem.Quantity;
|
|
|
item.KdsChupinQty += kItem.Quantity;
|
|
|
item.ModifyDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
string sql = string.Format("update pos_order_item set chuxianQty = {0} ,kdsChupinQty = {1},modifyDate='{2}' where id ='{3}' ", item.ChuxianQty, item.KdsChupinQty, item.ModifyDate, item.Id);
|
|
|
db.Execute(sql);
|
|
|
//db.Save(item);
|
|
|
logger.Info("收到服务中心发送的接收订单[{0}],更新详情信息:{1}", order.TradeNo, sql);
|
|
|
}
|
|
|
}
|
|
|
transaction.Complete();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//接收错误
|
|
|
logger.Error("服务中心接收新订单失败" + JsonUtils.Serialize(result));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 组装服务中心需要的订单信息
|
|
|
/// </summary>
|
|
|
/// <param name="orderObject"></param>
|
|
|
/// <param name="chuxianFlag"></param>
|
|
|
/// <param name="kdsChupinFlag"></param>
|
|
|
/// <returns></returns>
|
|
|
private static POSV.Common.JsonObject.NewOrder BuilderNewOrder(OrderObject orderObject, bool chuxianFlag, bool kdsChupinFlag)
|
|
|
{
|
|
|
var order = new POSV.Common.JsonObject.NewOrder();
|
|
|
|
|
|
order.OrderId = orderObject.Id;
|
|
|
order.PosNo = orderObject.PosNo;
|
|
|
order.TradeNo = orderObject.TradeNo;
|
|
|
order.OrderType = (int)orderObject.OrderType;
|
|
|
order.OrderNo = orderObject.OrderNo;
|
|
|
order.TableNo = orderObject.TableNo;
|
|
|
order.People = orderObject.People;
|
|
|
order.SaleDate = orderObject.FinishDate;
|
|
|
order.TenantId = orderObject.TenantId;
|
|
|
order.Caution = orderObject.Ext1;
|
|
|
order.PosName = Global.Instance.GlobalConfigStringValue(ConfigConstant.CASHIER_POSNO, "");
|
|
|
order.SaleLastUpdateTime = orderObject.FinishDate;
|
|
|
|
|
|
Dictionary<string, string> kdsDic = new Dictionary<string, string>();
|
|
|
var chuxianParam = Global.Instance.GlobalConfigStringValue(ConfigConstant.DEVICE_KITCHEN_DISPLAY);
|
|
|
|
|
|
if (!string.IsNullOrEmpty(chuxianParam))
|
|
|
{
|
|
|
var tempKdsParams = JsonUtils.Deserialize<Dictionary<string, KitchenDisplayItem>>(chuxianParam);
|
|
|
var list = tempKdsParams.Values.ToList();
|
|
|
kdsDic = list.ToDictionary(x => x.PlanId, x => x.KdsNo);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//没有配置厨显设备
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
string studyName = string.Empty;
|
|
|
if (Global.Instance.IsStudyMode())
|
|
|
{
|
|
|
studyName = Constant.STUDYMODE_PRINTSTR;
|
|
|
}
|
|
|
|
|
|
var items = new List<Common.JsonObject.OrderItem>();
|
|
|
foreach (var o in orderObject.Items)
|
|
|
{
|
|
|
var item = new Common.JsonObject.OrderItem();
|
|
|
item.ItemId = o.Id;
|
|
|
item.ProductId = o.ProductId;
|
|
|
item.ProductName = studyName + o.DisplayName;
|
|
|
item.MakeDesc = o.FlavorNames;
|
|
|
item.TypeId = o.TypeId;
|
|
|
item.TypeName = o.TypeName;
|
|
|
item.Quantity = o.Quantity;
|
|
|
item.SaleDate = orderObject.FinishDate;
|
|
|
item.OrderNo = o.OrderNo;
|
|
|
item.IsSuit = (int)o.RowState;
|
|
|
|
|
|
if (chuxianFlag && o.ChuxianFlag == "1" && !string.IsNullOrEmpty(o.Chuxian) && kdsDic.ContainsKey(o.Chuxian))
|
|
|
{
|
|
|
item.HuacaiDevice = kdsDic[o.Chuxian];
|
|
|
item.MakeDuration = o.ChuxianTime;
|
|
|
}
|
|
|
if (kdsChupinFlag && o.KdsChupinFlag == "1" && !string.IsNullOrEmpty(o.KdsChupin) && kdsDic.ContainsKey(o.KdsChupin))
|
|
|
{
|
|
|
item.ChupinDevice = kdsDic[o.KdsChupin];
|
|
|
item.ChupinDuration = o.KdsChupinTime;
|
|
|
}
|
|
|
|
|
|
items.Add(item);
|
|
|
}
|
|
|
|
|
|
order.Items = items;
|
|
|
|
|
|
return order;
|
|
|
}
|
|
|
}
|
|
|
}
|