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); //ActionManage.GetInstance.Register(new Action((o) => //{ // if (o is OrderStatusChangedEvent orderStatusChange) // { // 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) // 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; // } // } //}), "OrderStatusChange"); } 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) 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; } } } }