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

276 lines
11 KiB
C#

9 months ago
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;
}
}
}