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; } } }