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#

This file contains ambiguous Unicode characters!

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

using NLog;
using POSV.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;
}
}
}