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.
195 lines
8.9 KiB
C#
195 lines
8.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using POSV.Service;
|
|
using POSV.Common.JsonObject;
|
|
using SuperSocket.WebSocket.SubProtocol;
|
|
using POSV.WindowsService.Core.Utils;
|
|
using POSV.WindowsService.Core;
|
|
using log4net;
|
|
using POSV.WindowsService.Core.OrderPackage;
|
|
using POSV.Common;
|
|
using POSV.Service.Utils;
|
|
using POSV.Service.Entity;
|
|
|
|
namespace POSV.WindowsService.Command
|
|
{
|
|
public class NEWORDER : JsonSubCommand<WebSocketSessionEx, string>
|
|
{
|
|
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
private static object newOrderLock = new object();
|
|
|
|
protected override void ExecuteJsonCommand(WebSocketSessionEx session, string orderJson)
|
|
{
|
|
logger.Info("收到["+session.Name+"]新订单:" + orderJson);
|
|
var response = new BaseDataResponse<NewOrderResult>();
|
|
try
|
|
{
|
|
lock (newOrderLock)
|
|
{
|
|
lock (Global.Instance.SyncLock)
|
|
{
|
|
bool isNew = true;//排除重复上传的订单
|
|
var serviceOrder = Json.Deserialize<ServiceOrder>(orderJson);
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
{
|
|
using(var transaction = db.GetTransaction())
|
|
{
|
|
var isExist = db.FirstOrDefault<ServiceOrder>("where tradeNo = @0 and saleLastUpdateTime = @1", serviceOrder.TradeNo, serviceOrder.SaleLastUpdateTime);
|
|
if(isExist == null)
|
|
{
|
|
serviceOrder.Id = IdWorkerUtils.Instance.NextId();
|
|
//第一次接收,保存
|
|
db.Save(serviceOrder);
|
|
foreach(var item in serviceOrder.Items)
|
|
{
|
|
item.OrderId = serviceOrder.OrderId;
|
|
item.TenantId = serviceOrder.TenantId;
|
|
item.TradeNo = serviceOrder.TradeNo;
|
|
item.ServiceId = serviceOrder.Id;
|
|
//异常数据直接更改同步状态
|
|
if(string.IsNullOrEmpty(item.HuacaiDevice) || item.HuacaiDevice == "None")
|
|
{
|
|
item.SyncHuacaiStatus = 1;
|
|
}
|
|
if(string.IsNullOrEmpty(item.ChupinDevice) || item.ChupinDevice == "None")
|
|
{
|
|
item.SyncChupinStatus = 1;
|
|
}
|
|
}
|
|
db.InsertBatch(serviceOrder.Items);
|
|
}
|
|
else
|
|
{
|
|
isNew = true;
|
|
serviceOrder.Id = isExist.Id;
|
|
}
|
|
transaction.Complete();
|
|
}
|
|
}
|
|
|
|
//返回结果
|
|
response.Status = 1;
|
|
response.Message = "SUCCESS";
|
|
response.Data = new NewOrderResult
|
|
{
|
|
ServiceId = serviceOrder.Id,
|
|
RequestObj = orderJson
|
|
};
|
|
this.SendJsonMessage(session, Json.Serialize(response));
|
|
Console.WriteLine("已发送新订单响应");
|
|
|
|
//新订单通知厨显、出品
|
|
if (isNew)
|
|
{
|
|
Core.OrderPackage.OrderUtils.DistributeOrder2KDS(serviceOrder, KDSCategory.厨显);
|
|
Core.OrderPackage.OrderUtils.DistributeOrder2KDS(serviceOrder, KDSCategory.出品);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch(Exception ex)
|
|
{
|
|
logger.Error( ex, "新订单接收异常" );
|
|
//返回结果
|
|
response.Status = 0;
|
|
response.Message = "ERROR";
|
|
var data = new NewOrderResult
|
|
{
|
|
RequestObj = orderJson
|
|
};
|
|
this.SendJsonMessage(session, Json.Serialize(response));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 厨显返回新订单接收结果
|
|
/// </summary>
|
|
public class KDSNEWORDERRESPONSE : JsonSubCommand<WebSocketSessionEx, string>
|
|
{
|
|
private static ILog logger = LogManager.GetLogger(typeof(Global));
|
|
|
|
protected override void ExecuteJsonCommand(WebSocketSessionEx session, string commandInfo)
|
|
{
|
|
try
|
|
{
|
|
logger.Info("收到kds[" + session.Name + "]订单回复:" + commandInfo);
|
|
var response = Json.Deserialize<BaseDataResponse<KdsNewOrderResult>>(commandInfo);
|
|
if (response.Status == 1)
|
|
{
|
|
//成功
|
|
var order = Json.Deserialize<ServiceOrder>(response.Data.RequestObj.ToString());
|
|
switch (response.Data.Category)
|
|
{
|
|
case KDSCategory.厨显:
|
|
{
|
|
logger.Info("厨显返回新订单接收结果" + session.Name);
|
|
lock (Global.Instance.SyncLock)
|
|
{
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
{
|
|
using (var transaction = db.GetTransaction())
|
|
{
|
|
var items = db.Query<ServiceOrderItem>("where serviceId = @0 and syncHuacaiStatus = 0", order.Id).ToList();
|
|
foreach (var kItem in order.Items)
|
|
{
|
|
var it = items.Find(x => x.Id == kItem.Id);
|
|
if (it != null)
|
|
{
|
|
it.SendHuacaiTime = DateUtils.GetNowFormat();
|
|
it.SyncHuacaiStatus = 1;
|
|
db.Save(it);
|
|
}
|
|
}
|
|
transaction.Complete();
|
|
}
|
|
}
|
|
System.Threading.Thread.Sleep(20);
|
|
}
|
|
}
|
|
break;
|
|
case KDSCategory.出品:
|
|
{
|
|
lock (Global.Instance.SyncLock)
|
|
{
|
|
using (var db = Global.Instance.OpenDataBase)
|
|
{
|
|
using (var transaction = db.GetTransaction())
|
|
{
|
|
var items = db.Query<ServiceOrderItem>("where serviceId = @0 and syncChupinStatus = 0", order.Id).ToList();
|
|
foreach (var kItem in order.Items)
|
|
{
|
|
var it = items.Find(x => x.Id == kItem.Id);
|
|
if(it != null)
|
|
{
|
|
it.SendChupinTime = DateUtils.GetNowFormat();
|
|
it.SyncChupinStatus = 1;
|
|
db.Save(it);
|
|
}
|
|
}
|
|
transaction.Complete();
|
|
}
|
|
}
|
|
System.Threading.Thread.Sleep(20);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error("厨显返回新订单接收异常", ex);
|
|
}
|
|
}
|
|
}
|
|
}
|