using BPA.Message;
using BPASmartClient.EventBus;
using BPASmartClient.Helper;
using BPASmartClient.Http;
using BPASmartClient.Message;
using BPASmartClient.Model;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static BPASmartClient.EventBus.EventBus;
namespace BPASmartClient.Business
{
///
/// 订单代理
///
public class OrderProxy : IPlugin
{
//订单队列
private ConcurrentDictionary> orders = new ConcurrentDictionary>();
//运行标识
private bool running = false;
//设备管理
private DeviceMgr deviceMgr;
///
/// 初始化
///
public void Initialize()
{
running = true;
deviceMgr = Plugin.GetInstance().GetPlugin();
Plugin.GetInstance().GetPlugin().SetMessageReciveHandler(delegate (IMessage orderInfo)
{
if (orderInfo == null) return;
if (orderInfo is MorkOrderPush morkOrderpush)
{
if (!orders.ContainsKey(morkOrderpush.DeviceId))
{
orders.TryAdd(morkOrderpush.DeviceId, new ConcurrentQueue());
StartTargetDeviceOrderJob(morkOrderpush.DeviceId);
}
orders[morkOrderpush.DeviceId].Enqueue(morkOrderpush);
}
});
EventBus.EventBus.GetInstance().Subscribe(0, OrderStatusChangedHandle);
}
private void StartTargetDeviceOrderJob(int deviceId)
{
ThreadManage.GetInstance().Start(() =>
{
var device = deviceMgr.GetDevices().FirstOrDefault(p => p.DeviceId == deviceId);
while (running)
{
if (device.IsBusy || !device.IsHealth)
{
Thread.Sleep(100);
continue;
}
while (orders[deviceId].Count > 0)
{
if (orders[deviceId].TryDequeue(out MorkOrderPush temp))
{
var orderEvent = DoOrderEvent.Make(temp);
orderEvent.Id = device.DeviceId;
orderEvent.Publish();
Json.Data.orderLists.Add(new OrderData()
{
IsSelected = true,
OrderPush = temp,
OrderStatus = BPA.Message.Enum.ORDER_STATUS.WAIT
});
}
}
Thread.Sleep(50);
}
}, $"MQTT 订单接收处理-设备[{deviceId}]");
}
public void OrderStatusChangedHandle(IEvent @event, EventCallBackHandle callBack)
{
OrderStatusChangedEvent orderStatusChangedEvent = @event as OrderStatusChangedEvent;
string result = string.Empty;
OrderStatusChange orderStatusChange = new OrderStatusChange() { CookingStatus = orderStatusChangedEvent.Status, SuborderId = orderStatusChangedEvent.SubOrderId };
try
{
string header = $"[{InternetInfo.OrderServer}/order/robotstatuschange]_[{DateTime.Now.Ticks}]".AESEncrypt();
string url = $"{InternetInfo.OrderServer}/order/robotstatuschange";
result = APIHelper.GetInstance.HttpRequest(url, header, orderStatusChange, RequestType.POST);
}
catch (Exception ex)
{
MessageLog.GetInstance.ShowEx(ex.ToString());
}
var res = JsonConvert.DeserializeObject(result);
MessageLog.GetInstance.ShowEx(string.Format("订单状态改变,调用API执行结果{0}", res == null ? false : res.isSuccess));
}
///
/// 资源释放
///
public void Dispose()
{
running = false;
}
}
}