using BPA.Message; using BPA.Message.Enum; using BPASmartClient.Device; using BPASmartClient.EventBus; using BPASmartClient.Helper; using BPASmartClient.Model; using Microsoft.Toolkit.Mvvm.ComponentModel; using Microsoft.Toolkit.Mvvm.Input; using Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace BPASmartClient.MilkWithTea.ViewModel { public class MainControlViewModel: ObservableObject { public ObservableCollection localTeaWithMilks { get; set; } = GLobal.MaterialRecipes; public ObservableCollection materialRecipes { get; set; } = new ObservableCollection(); /// /// 订单状态列表 /// public ObservableCollection orderStatusLists { get; set; } = new ObservableCollection(); /// /// 等待取餐列表 /// public ObservableCollection WaitTakeMeal { get; set; } = new ObservableCollection(); /// /// 当前正在制作的奶茶 /// public string CurrentGood { get { return _currentGood; } set { _currentGood = value; OnPropertyChanged(); } } private string _currentGood = "茉莉花茶"; /// /// 奶茶制作百分比 /// public string MakePercent { get { return _makePercent; } set { _makePercent = value; OnPropertyChanged(); } } private string _makePercent = "0"; /// /// 当前正在制作的奶茶 /// public bool MakeEnable { get { return GLobal.makeEnable; } set { GLobal.makeEnable = value; OnPropertyChanged(); } } /// /// 本地奶茶制作 /// public RelayCommand MakeGoodCommand { get; set; } public MainControlViewModel() { MakeGoodCommand = new RelayCommand(new Action(() => { })); Init(); MorkOrderPush morkOrderPush = new MorkOrderPush() { GoodsName = "珍珠奶茶", SortNum = 1 }; MorkOrderPush morkOrderPush1 = new MorkOrderPush() { GoodsName = "茉莉花茶", SortNum = 2 }; MorkOrderPush morkOrderPush2 = new MorkOrderPush() { GoodsName = "芝芝梅梅", SortNum = 3 }; orderStatusLists.Add(new MorkOrder() { StartDate = "11:20",EndDate ="11:24",CompleteDate ="4",OrderStatus = ORDER_STATUS.COMPLETED_COOK, OrderPush = morkOrderPush }); orderStatusLists.Add(new MorkOrder() { StartDate = "11:36", EndDate = "11:40", CompleteDate = "4", OrderStatus = ORDER_STATUS.COOKING, OrderPush = morkOrderPush1 }); orderStatusLists.Add(new MorkOrder() { StartDate = "10:33", EndDate = "10:28", CompleteDate = "5", OrderStatus = ORDER_STATUS.COMPLETED_TAKE, OrderPush = morkOrderPush2 }); } /// /// MQTT 大屏取餐通知委托 /// public 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 object[] obj) { if (o.Length == 2) { CurrentGood = o[0].ToString(); MakePercent = o[1].ToString(); } } }), "奶茶制作进度"); } private 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; } } } }