using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using BPA.Message; using BPA.Message.Enum; using BPASmartClient.Device; using BPASmartClient.EventBus; using BPASmartClient.Helper; using BPASmartClient.Model; using Microsoft.Toolkit.Mvvm.ComponentModel; namespace BPASmartClient.ViewModel { public class OrderStatusViewModel : ObservableObject { public OrderStatusViewModel() { } /// /// 订单状态列表 /// public static ObservableCollection orderStatusLists { get; set; } = new ObservableCollection(); /// /// 等待取餐列表 /// public static ObservableCollection WaitTakeMeal { get; set; } = new ObservableCollection(); /// /// MQTT 大屏取餐通知委托 /// public static void Init() { //清除订单数据 ActionManage.GetInstance.Register(new Action(() => { Application.Current.Dispatcher.Invoke(() => { orderStatusLists.Clear(); WaitTakeMeal.Clear(); }); }), "ClearOrders"); ActionManage.GetInstance.Register(new Action((o) => { if (o is object[] obj) { if (o.Length == 2) { if (o[0] is MorkOrderPush morkOrderpush && o[1] is IDevice device) { ObservableCollection observableCollection = new ObservableCollection(); MorkOrder morkOrder = new MorkOrder() { OrderPush = morkOrderpush, OrderStatus = ORDER_STATUS.WAIT, StartDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), }; observableCollection.Add(morkOrder); Application.Current?.Dispatcher.BeginInvoke((Action)delegate { int index = Array.FindIndex(Json.Data.orderLists.ToArray(), p => p.DeviceId == device.DeviceId.ToString()); if (index < 0) { Json.Data.orderLists.Add(new OrderData() { DeviceId = device.DeviceId.ToString(), IsAllSelect = true, morkOrderPushes = observableCollection, }); } else { Json.Data.orderLists.ElementAt(index).morkOrderPushes.Add(morkOrder); } orderStatusLists.Add(new MorkOrder() { OrderPush = morkOrderpush, OrderStatus = ORDER_STATUS.WAIT, StartDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), }); }); } } } }), "AddOrder"); EventBus.EventBus.GetInstance().Subscribe(0, OrderStatusChangedHandle); } private static void OrderStatusChangedHandle(IEvent @event, EventBus.EventBus.EventCallBackHandle callBack) { OrderStatusChangedEvent orderStatusChange = @event as OrderStatusChangedEvent; int index = Array.FindIndex(orderStatusLists.ToArray(), p => p.OrderPush.SuborderId == orderStatusChange.SubOrderId); switch (orderStatusChange.Status) { case ORDER_STATUS.COOKING: if (index >= 0 && index < orderStatusLists.Count) orderStatusLists.ElementAt(index).OrderStatus = orderStatusChange.Status; break; case ORDER_STATUS.COMPLETED_COOK: if (index >= 0 && index < orderStatusLists.Count) { Application.Current.Dispatcher.BeginInvoke((Action)delegate { orderStatusLists.ElementAt(index).OrderStatus = orderStatusChange.Status; orderStatusLists.ElementAt(index).EndDate = DateTime.Now.ToString("HH:mm:ss"); TimeSpan timeSpan = DateTime.Now.Subtract(Convert.ToDateTime(orderStatusLists.ElementAt(index).StartDate)); orderStatusLists.ElementAt(index).CompleteDate = $"{timeSpan.TotalSeconds.ToString("0.00")} S"; //压力测试时注释,正常使用需要取消注释 if (!BPASmartClient.Business.InternetInfo.IsEnableTest) { WaitTakeMeal.Insert(0, orderStatusLists.ElementAt(index)); orderStatusLists.RemoveAt(index); } }); } break; case ORDER_STATUS.COMPLETED_TAKE: if (BPASmartClient.Business.InternetInfo.IsEnableTest && index >= 0 && index < orderStatusLists.Count) orderStatusLists.ElementAt(index).OrderStatus = orderStatusChange.Status; //压力测试时注释,正常使用需要取消注释 var re = WaitTakeMeal.FirstOrDefault(p => p.OrderPush.SuborderId == orderStatusChange.SubOrderId); if (re != null) { Application.Current.Dispatcher.BeginInvoke((Action)delegate { WaitTakeMeal.Remove(re); var removeObj = Json.Data.orderLists.FirstOrDefault(p => p.morkOrderPushes.FirstOrDefault(s => s.OrderPush.SuborderId == re.OrderPush.SuborderId) != null); if (removeObj != null) Json.Data.orderLists.Remove(removeObj); }); } break; default: break; } } } }