1、功能介紹
當選擇一個空桌時,必須先開臺才能開單,可以先開臺,再開單,也可以開臺的同時開單
當選擇一個用餐中的餐桌時,必須顯示該桌前面已經點好的菜品,同時可以繼續點餐或結賬
所以無論哪個功能都涉及選擇菜品的操作,也就是選擇不同類型的商品
2、UI設計
這些數字0--9它們都是綁定同一個命令,但是命令處理時,會根據不同參數來區分是哪個按鈕被點擊了,所以就有CommandParameter="{Binding RelativeSource={RelativeSource Self}}",它表示綁定的參數是自己
3、視圖模型
完整代碼
using HQ.BLL;
using HQ.COMM;
using HQ.fResApp.BaseModel;
using HQ.MODEL.DBModel;
using Panuon.UI.Silver;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows;
using HQ.fResApp.Utils;
using HQ.MODEL.UIModel;
using System.Windows.Input;
using System.Globalization;
using Panuon.UI.Silver.Core; namespace HQ.fResApp.ViewModel
{/// <summary>/// 消費開單視圖模型/// </summary>public class XiaoFeiKaiDanListVModel : ViewModelBase{public DiningTypeBLL diningbll = new DiningTypeBLL();//餐桌類型public DiningTableBLL tablebll = new DiningTableBLL();//餐臺列表 public DishTypeBLL dishbll = new DishTypeBLL();//菜品類型public PointMenuBLL menubll = new PointMenuBLL();//菜品列表public BillConsumeBLL billConsumebll = new BillConsumeBLL();//帳單消費列表public BillHistoryBLL billHistorybll = new BillHistoryBLL();//訂單歷史記錄public ListBox dishListBox { get; set; }//菜品列表ListBox控件對象public Dictionary<string, ListBox> DicdishListBox = new Dictionary<string, ListBox>();public PointMenuInfo selectDishItem = new PointMenuInfo();public double CostMoney = 0;public string globalGuid = "";//菜品類型public List<ListBoxItem> selectedItem = new List<ListBoxItem>();/// <summary>/// 用戶點擊選擇菜品時生成的訂單信息表/// </summary>List<PointMenuInfo> OrderInfoTable = new List<PointMenuInfo>();#region 屬性private ObservableCollection<TabItem> diningTypeList;/// <summary>/// 餐桌類型列表,頁面tabcontrol綁定的數據源/// </summary>public ObservableCollection<TabItem> DiningTypeList{get { return diningTypeList; }set{diningTypeList = value;OnPropertyChanged();}}private Visibility diningTypeTabPro = Visibility.Visible;/// <summary>/// 餐桌類型tabcontrol是否可見/// </summary>public Visibility DiningTypeTabPro{get { return diningTypeTabPro; }set{diningTypeTabPro = value;OnPropertyChanged();}}private Visibility diningTableListPro = Visibility.Visible;/// <summary>/// 餐桌列表是否可見/// </summary>public Visibility DiningTableListPro{get { return diningTableListPro; }set{diningTableListPro = value;OnPropertyChanged();}}private ObservableCollection<DiningTableDetail> diningTableList;/// <summary>///餐桌詳情列表/// </summary>public ObservableCollection<DiningTableDetail> DiningTableList{get { return diningTableList; }set{diningTableList = value;OnPropertyChanged();}}private ObservableCollection<PointMenuInfo> dishTableList;/// <summary>/// 菜品名稱列表,頁面listbox綁定的數據源/// </summary>public ObservableCollection<PointMenuInfo> DishTableList{get { return dishTableList; }set{dishTableList = value;OnPropertyChanged();}}private ObservableCollection<PointMenuInfo> addOrderInfoList = new ObservableCollection<PointMenuInfo>();/// <summary>/// 【繼續點餐】后新增的訂單或空桌開臺【開始點餐】后添加的訂單/// </summary>public ObservableCollection<PointMenuInfo> AddOrderInfoList{get { return addOrderInfoList; }set{addOrderInfoList = value;OnPropertyChanged();}}private ObservableCollection<TableConsumeInfo> tableConsumeList;/// <summary>/// 餐桌消費詳情列表/// </summary>public ObservableCollection<TableConsumeInfo> TableConsumeList{get { return tableConsumeList; }set{tableConsumeList = value;OnPropertyChanged();}}private PointMenuInfo dishNameItem = new PointMenuInfo();/// <summary>/// 所選的菜品名稱/// </summary>public PointMenuInfo DishNameItem{get { return dishNameItem; }set{dishNameItem = value;OnPropertyChanged();}}private DiningTableDetail diningTableItem = new DiningTableDetail();/// <summary>/// 餐桌詳情實體/// </summary>public DiningTableDetail DiningTableItem{get { return diningTableItem; }set{diningTableItem = value;OnPropertyChanged();}}private DiningType diningTypeItem = new DiningType();/// <summary>/// 餐桌類型/// </summary>public DiningType DiningTypeItem{get { return diningTypeItem; }set{diningTypeItem = value;OnPropertyChanged();}}private DishType dishTypeItem = new DishType();/// <summary>/// 菜品類型/// </summary>public DishType DishTypeItem{get { return dishTypeItem; }set{dishTypeItem = value;OnPropertyChanged();}}private Visibility tabConsumeHeadPro = Visibility.Collapsed;/// <summary>/// 已開單餐桌的【消費項目】表頭標題是否可見/// </summary>public Visibility TabConsumeHeadPro{get { return tabConsumeHeadPro; }set{tabConsumeHeadPro = value;OnPropertyChanged();}}private Visibility tabConsumeListPro = Visibility.Collapsed;/// <summary>/// 已開單餐桌的消費明細列表是否可見/// </summary>public Visibility TabConsumeListPro{get { return tabConsumeListPro; }set{tabConsumeListPro = value;OnPropertyChanged();}}private Visibility costSumInfoPro = Visibility.Collapsed;/// <summary>/// 消費項目匯總信息是否可見/// </summary>public Visibility CostSumInfoPro{get { return costSumInfoPro; }set{costSumInfoPro = value;OnPropertyChanged();}}private ObservableCollection<TabItem> dishTypeList;/// <summary>/// 菜品類型列表,頁面tabcontrol綁定的數據源/// </summary>public ObservableCollection<TabItem> DishTypeList{get { return dishTypeList; }set{dishTypeList = value;OnPropertyChanged();}}private Visibility goodsTypeTabPro = Visibility.Collapsed;/// <summary>/// 菜品類型選項卡是否可見/// </summary>public Visibility GoodsTypeTabPro{get { return goodsTypeTabPro; }set{goodsTypeTabPro = value;OnPropertyChanged();}}private Visibility goodsListBoxPro = Visibility.Collapsed;/// <summary>/// 菜品類型列表框是否可見/// </summary>public Visibility GoodsListBoxPro{get { return goodsListBoxPro; }set{goodsListBoxPro = value;OnPropertyChanged();}}private Visibility btnPaymentPro = Visibility.Collapsed;/// <summary>/// 【結帳】按鈕是否可見/// </summary>public Visibility BtnPaymentPro{get { return btnPaymentPro; }set{btnPaymentPro = value;OnPropertyChanged();}}private Visibility openOrderInfoPro = Visibility.Collapsed;/// <summary>/// 空桌準備開單的詳情是否可見/// </summary>public Visibility OpenOrderInfoPro{get { return openOrderInfoPro; }set{openOrderInfoPro = value;OnPropertyChanged();}}private Visibility openTableInfoPro = Visibility.Visible;/// <summary>/// 空桌需要開臺的詳情是否可見/// </summary>public Visibility OpenTableInfoPro{get { return openTableInfoPro; }set{openTableInfoPro = value;OnPropertyChanged();}}private string tableOrderNoPro = "xxxxxx";/// <summary>/// 餐桌訂單號/// </summary>public string TableOrderNoPro{get { return tableOrderNoPro; }set{tableOrderNoPro = value;OnPropertyChanged();}}private string tableNamePro = "xxx";/// <summary>/// 餐桌名稱/// </summary>public string TableNamePro{get { return tableNamePro; }set{tableNamePro = value;OnPropertyChanged();}}private string amountUser = "";/// <summary>/// 用餐人數/// </summary>public string AmountUser{get { return amountUser; }set{amountUser = value;OnPropertyChanged();}}private string amountTime = "";/// <summary>/// 用餐時間/// </summary>public string AmountTime{get { return amountTime; }set{amountTime = value;OnPropertyChanged();}}private string numOrderPro = "";/// <summary>/// 輸入就餐人數/// </summary>public string NumOrderPro{get { return numOrderPro; }set{numOrderPro = value;OnPropertyChanged();}}private string amountMoneyPro = "";/// <summary>/// 消費總金額/// </summary>public string AmountMoneyPro{get { return amountMoneyPro; }set{amountMoneyPro = value;OnPropertyChanged();}}private string amountCountPro = "";/// <summary>/// 消費總數量/// </summary>public string AmountCountPro{get { return amountCountPro; }set{amountCountPro = value;OnPropertyChanged();}}private string tableTypePro = "xxxx";/// <summary>/// 餐桌類型/// </summary>public string TableTypePro{get { return tableTypePro; }set{tableTypePro = value;OnPropertyChanged();}}private string txtTabControlTitle = "餐桌類型";/// <summary>/// tabcontrol標題/// </summary>public string TxtTabControlTitle{get { return txtTabControlTitle; }set{txtTabControlTitle = value;OnPropertyChanged();}}private string txtTabControlName = "餐桌面板";/// <summary>/// tabcontrol標題/// </summary>public string TxtTabControlName{get { return txtTabControlName; }set{txtTabControlName = value;OnPropertyChanged();}}private Visibility dishTypeTabPro = Visibility.Collapsed;/// <summary>/// 菜品類型tabcontrol是否可見/// </summary>public Visibility DishTypeTabPro{get { return dishTypeTabPro; }set{dishTypeTabPro = value;OnPropertyChanged();}}private Visibility dishTypeListPro = Visibility.Collapsed;/// <summary>/// 菜品列表ListBox是否可見/// </summary>public Visibility DishTypeListPro{get { return dishTypeListPro; }set{dishTypeListPro = value;OnPropertyChanged();}}private string txtCostMonePro = "";/// <summary>/// 點單金額/// </summary>public string TxtCostMonePro{get { return txtCostMonePro; }set{txtCostMonePro = value;OnPropertyChanged();}}private string txtCostCountPro = "";/// <summary>/// 點單數量/// </summary>public string TxtCostCountPro{get { return txtCostCountPro; }set{txtCostCountPro = value;OnPropertyChanged();}}private Visibility proNumBlockPro2 = Visibility.Collapsed;/// <summary>/// 選中菜品時的圖片是否可見/// </summary>public Visibility ProNumBlockPro2{get { return proNumBlockPro2; }set{proNumBlockPro2 = value;OnPropertyChanged();}}private Visibility checkOutPro = Visibility.Collapsed;/// <summary>/// 結賬或繼續點餐按鈕是否可見/// </summary>public Visibility CheckOutPro{get { return checkOutPro; }set{checkOutPro = value;OnPropertyChanged();}}private Visibility checkOutPro2 = Visibility.Collapsed;/// <summary>/// 消費時長及消費人數的stackpanel控件是否可見/// </summary>public Visibility CheckOutPro2{get { return checkOutPro2; }set{checkOutPro2 = value;OnPropertyChanged();}}private string dinersPro = "";/// <summary>/// 輸入就餐人數/// </summary>public string DinersPro{get { return dinersPro; }set{dinersPro = value;OnPropertyChanged();}}private string tableTxtRemarkPro = "";/// <summary>/// 立即開臺操作時的備注信息/// </summary>public string TableTxtRemarkPro{get { return tableTxtRemarkPro; }set{tableTxtRemarkPro = value;OnPropertyChanged();}}private bool chkIsOrderDetailPro = false;/// <summary>/// 開單后是否立即新增消費項目/// </summary>public bool ChkIsOrderDetailPro{get { return chkIsOrderDetailPro; }set{chkIsOrderDetailPro = value;OnPropertyChanged();}}private string startDinerPro = "繼續點餐";/// <summary>/// 開始點餐還是繼續點餐按鈕上的文字/// </summary>public string StartDinerPro{get { return startDinerPro; }set{startDinerPro = value;OnPropertyChanged();}}private Thickness tabConsumeHeadMarginPro = new Thickness(0, 0, 0, 0);/// <summary>/// 已經開單餐桌的消費列表中標題欄控件的margin設置/// </summary>public Thickness TabConsumeHeadMarginPro{get { return tabConsumeHeadMarginPro; }set{tabConsumeHeadMarginPro = value;OnPropertyChanged();}}private Thickness tableConsumeListMarginPro = new Thickness(0, 0, 0, 0);/// <summary>/// 已經開單餐桌的消費列表中listbox控件的margin設置/// </summary>public Thickness TableConsumeListMarginPro{get { return tableConsumeListMarginPro; }set{tableConsumeListMarginPro = value;OnPropertyChanged();}}private string tableConsumeListHeightPro = "auto";/// <summary>/// 已經開單餐桌的消費列表中listbox控件的高度設置/// </summary>public string TableConsumeListHeightPro{get { return tableConsumeListHeightPro; }set{tableConsumeListHeightPro = value;OnPropertyChanged();}}#endregionpublic XiaoFeiKaiDanListVModel(){DiningTypeList = getDiningTypeList(); //餐桌類型 DiningTableList = getDiningTableList(); //餐臺列表 }#region 方法/// <summary>/// 獲取菜品類型/// </summary>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>private ObservableCollection<TabItem> getDishTypeList(){ObservableCollection<TabItem> typeitemlist = new ObservableCollection<TabItem>();TabItem _ti = new TabItem(){Header = "所有菜品",Uid = "",Margin = new Thickness { Left = 0, Top = 0, Right = 10, Bottom = 0 },Padding = new Thickness { Left = 25, Right = 30, Top = 5, Bottom = 5 }};typeitemlist.Add(_ti);var parms = new ParmString { parm = "" };var _dishTypeRes = dishbll.QueryDishTypeList(parms).Result;if (_dishTypeRes.statusCode == (int)ApiEnum.Status){var prots = _dishTypeRes.data;if (prots != null){foreach (var _typeObj in prots){var bgc = new BrushConverter();TabItem ti = new TabItem(){Header = _typeObj.mtName,Uid = _typeObj.mtGuid.ToString(),Margin = new Thickness { Left = 0, Top = 0, Right = 10, Bottom = 0 },Padding = new Thickness { Left = 25, Right = 30, Top = 5, Bottom = 5 }};typeitemlist.Add(ti);}}}else{Logger.Default.ProcessError(_dishTypeRes.statusCode, "獲取菜單類型異常");}return typeitemlist;}/// <summary>/// 獲取菜品列表/// </summary>/// <param name="protype">菜品類型id</param>/// <returns></returns>private ObservableCollection<PointMenuInfo> getDishTableList(string protype){ObservableCollection<PointMenuInfo> TableDataList = new ObservableCollection<PointMenuInfo>();var _parms = new ParmString { parm = protype };var _res = menubll.QueryPointMenusBydtId(_parms).Result;if (_res.statusCode == (int)ApiEnum.Status){var _datas = _res.data;if (_datas != null){foreach (PointMenuInfo item in _datas){TableDataList.Add(item);}}}else{Notice.Show("沒有找到對應的菜品", "提示", 3, MessageBoxIcon.Info);Logger.Default.ProcessError(_res.statusCode, "根據商品類型獲取商品異常");}return TableDataList;}/// <summary>/// 獲取餐桌類型 /// </summary>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public ObservableCollection<TabItem> getDiningTypeList(){ObservableCollection<TabItem> typeitemlist = new ObservableCollection<TabItem>();TabItem _ti = new TabItem(){Header = "所有餐臺",Margin = new Thickness { Left = 0, Top = 0, Right = 10, Bottom = 0 },Padding = new Thickness { Left = 25, Right = 30, Top = 5, Bottom = 5 }};typeitemlist.Add(_ti);var _parm = new ParmString { parm = "" };var _tabRest = diningbll.QueryDiningTypeList(_parm).Result;if (_tabRest.statusCode == (int)ApiEnum.Status){var _roomTypes = _tabRest.data;if (_roomTypes != null){foreach (var diningTypeObj in _roomTypes){var bgc = new BrushConverter();TabItem ti = new TabItem(){Header = diningTypeObj.rtName,Margin = new Thickness { Left = 0, Top = 0, Right = 10, Bottom = 0 },Padding = new Thickness { Left = 25, Right = 30, Top = 5, Bottom = 5 }};typeitemlist.Add(ti);}}}return typeitemlist;}/// <summary>/// 獲取餐桌列表/// </summary>/// <param name="strWhere">過濾條件</param>/// <param name="_rtId">餐桌類型</param>/// <returns></returns>public ObservableCollection<DiningTableDetail> getDiningTableList(string rtid = "", int rtstate = -1){ObservableCollection<DiningTableDetail> TableDataList = new ObservableCollection<DiningTableDetail>();var parms = new PageParm { diningtypeId = rtid, types = rtstate };var _tabRes = tablebll.QueryListByType(parms).Result;if (_tabRes.statusCode == (int)ApiEnum.Status){var tables = _tabRes.data;if (tables != null){foreach (var roomObj in tables){var _time = "0分鐘";if (roomObj.rtDate != null){_time = DateHelper.DateDiffMinutes(DateTime.Now, Convert.ToDateTime(roomObj.rtDate));}var _tbState = "#cccccc";var _tbStateName = "空閑";switch (roomObj.rtState){case "占用":_tbState = "#C800AAFF";_tbStateName = "用餐中";break;case "預定":_tbState = "green";_tbStateName = "預約中";_time = "0分鐘";break;case "臟臺":_tbState = "red";_tbStateName = "待清理";_time = "0分鐘";break;case "停用":_tbState = "black";_tbStateName = "已停用";_time = "0分鐘";break;}var _obj = new DiningTableDetail(){rtId = roomObj.rtId,rtName = roomObj.rtName,tbName = roomObj.rName,tbMaxNum = roomObj.rtNumber != null ? (int)roomObj.rtNumber : 0,userTime = _time,tbStateColor = _tbState,tbStateName = _tbStateName,tbId = roomObj.rbGuid,tbOrderNo = roomObj.obId};TableDataList.Add(_obj);}}}else{Notice.Show("系統連接失敗,請聯系您的管理員!", "提示", 3, MessageBoxIcon.Warning);Logger.Default.ProcessError(_tabRes.statusCode, "沒有獲取餐桌類型對應的所有餐臺");}return TableDataList;}/// <summary>/// 獲取單個餐桌的消費詳情/// </summary>/// <param name="strOrder">訂單號</param>private ObservableCollection<TableConsumeInfo> GetDeskConsumeDetail(string strOrder){ObservableCollection<TableConsumeInfo> consumeList = new ObservableCollection<TableConsumeInfo>();try{double _msMoney = 0;int amountCount = 0;double tMoney = 0;var parms = new ParmString { parm = strOrder };var _tabInfoRes = tablebll.GetTabCostdetails(parms).Result;if (_tabInfoRes.statusCode == (int)ApiEnum.Status){List<TableConsumeInfo> TableDetailList = _tabInfoRes.data;if (TableDetailList != null){BtnPaymentPro = Visibility.Visible;//結算按鈕可見foreach (var item in TableDetailList){tMoney = item.msPrice * item.msAmount;_msMoney = _msMoney + tMoney;amountCount = amountCount + item.msAmount;consumeList.Add(item);}StartDinerPro = "繼續點餐";}else{BtnPaymentPro = Visibility.Collapsed;//結算按鈕隱藏StartDinerPro = "開始點餐";}AmountMoneyPro = _msMoney.ToString();//消費總金額AmountCountPro = amountCount.ToString();//消費總數量}else{Logger.Default.ProcessError(_tabInfoRes.statusCode, "獲取單個餐桌消費詳情出現異常");}}catch (Exception ex){Notice.Show("查詢失敗!", "提示", 3, MessageBoxIcon.Warning);Logger.Default.Error("獲取單個餐桌消費詳情出現異常", ex);}return consumeList;}/// <summary>/// 結帳后刷新界面/// </summary>private void RefreshPage(){DiningTableList = getDiningTableList(); //餐臺列表更新 OrderInfoTable = new List<PointMenuInfo>();//清空帳單DinersPro = "";//就餐人數清空TableNamePro = "xxxx";//餐桌名稱TableTypePro = "xxxx";//餐桌類型TableOrderNoPro = "0000000000";//餐桌訂單號ChkIsOrderDetailPro = false;//開單后立即新增消費項目復選框OpenOrderInfoPro = Visibility.Collapsed;//空閑餐桌需要準備"開單"的詳情隱藏DishTypeListPro = Visibility.Collapsed;//菜品列表隱藏DishTypeTabPro = Visibility.Collapsed;//菜品類型隱藏TabConsumeHeadPro = Visibility.Collapsed;//已經開單餐桌的消費清單詳情,包括:標題欄,數據列,分隔線,匯總TabConsumeListPro = Visibility.Collapsed;CostSumInfoPro = Visibility.Collapsed;OpenTableInfoPro = Visibility.Visible;//空閑餐桌需要"開臺"的詳情顯示DiningTypeTabPro = Visibility.Visible;//餐桌類型顯示DiningTableListPro = Visibility.Visible;//餐桌列表顯示 }private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject{for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++){DependencyObject child = VisualTreeHelper.GetChild(obj, i);if (child != null && child is childItem){return (childItem)child;}else{childItem childOfChild = FindVisualChild<childItem>(child);if (childOfChild != null)return childOfChild;}}return null;}/// <summary>/// 利用VisualTreeHelper尋找指定依賴對象的父級對象/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <returns></returns>public static List<T> FindVisualParent<T>(DependencyObject obj) where T : DependencyObject{try{List<T> TList = new List<T> { };DependencyObject parent = VisualTreeHelper.GetParent(obj);if (parent != null && parent is T){TList.Add((T)parent);List<T> parentOfParent = FindVisualParent<T>(parent);if (parentOfParent != null){TList.AddRange(parentOfParent);}}else if (parent != null){List<T> parentOfParent = FindVisualParent<T>(parent);if (parentOfParent != null){TList.AddRange(parentOfParent);}}return TList;}catch (Exception ee){MessageBox.Show(ee.Message);return null;}}/// <summary>/// 搜索指定名稱的子元素/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <param name="name"></param>/// <returns></returns>public static T FindChild<T>(DependencyObject obj, string name) where T : FrameworkElement{for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++){DependencyObject child = VisualTreeHelper.GetChild(obj, i);if (child != null && child is T && (child as T).Name.Equals(name))return (T)child;else{T childOfChild = FindChild<T>(child, name);if (childOfChild != null)return childOfChild;}}return null;}/// <summary>/// 尋找某個控件的父級控件/// </summary>/// <typeparam name="T"></typeparam>/// <param name="obj"></param>/// <param name="name"></param>/// <returns></returns>public T GetParentObject<T>(DependencyObject obj, string name) where T : FrameworkElement{DependencyObject parent = VisualTreeHelper.GetParent(obj);while (parent != null){if (parent is T && (((T)parent).Name == name | string.IsNullOrEmpty(name))){return (T)parent;}parent = VisualTreeHelper.GetParent(parent);}return null;}/// <summary>/// 尋找子控件/// </summary>/// <typeparam name="childItem"></typeparam>/// <param name="obj">父級控件</param>/// <param name="ctrtype">子控件類型名</param>/// <returns></returns>private object FindChildCtr<childItem>(DependencyObject obj, string ctrtype) where childItem : DependencyObject{var _childLen = VisualTreeHelper.GetChildrenCount(obj);for (int i = 0; i < _childLen; i++){DependencyObject child = VisualTreeHelper.GetChild(obj, i);if (child != null && child.DependencyObjectType.SystemType.Name == ctrtype){return child;}}return null;}#endregion#region 命令/// <summary>/// 餐桌類型點擊切換命令(tabcontrol)/// </summary>public ICommand SelectDiningCommand{get{return new RelayCommand(o =>{if (o is TabControl){TabControl diningtab = o as TabControl;int index = diningtab.SelectedIndex;if (index == -1){diningtab.SelectedIndex = 0;}var tt = (o as TabControl).SelectedItem as TabItem;string strName = tt.Header.ToString();//獲取餐桌類型名稱//根據名稱獲取餐桌類型實體var _queryRes = diningbll.GetModel(" rtName='" + strName + "' ").Result;if (_queryRes.statusCode == (int)ApiEnum.Status){var diningTypeObj = _queryRes.data;var _diningTypeId = diningTypeObj != null ? diningTypeObj.rtGuid : string.Empty;var _rtstate = diningTypeObj != null && _diningTypeId != null ? 5 : -1;//根據餐桌類型獲取對應的餐臺列表DiningTableList = getDiningTableList(_diningTypeId, _rtstate);}}});}}/// <summary>/// 餐桌點擊命令(listbox)/// </summary>public ICommand SelectTableCommand{get{return new RelayCommand(o =>{if (o is ListBox){var obj = DiningTableItem;if (DiningTableItem != null){TableOrderNoPro = DiningTableItem.tbOrderNo;//餐臺訂單號TableNamePro = DiningTableItem.tbName;//餐臺名稱 AmountUser = DiningTableItem.tbMaxNum.ToString();//就餐人數AmountTime = DiningTableItem.userTime.Replace("分鐘", "");//用餐時間NumOrderPro = DiningTableItem.tbMaxNum.ToString();//輸入的就餐人數TableTypePro = DiningTableItem.rtName.ToString();//餐臺類型名稱switch (DiningTableItem.tbStateName){case "用餐中":TabConsumeHeadPro = Visibility.Visible;//消費項目TabConsumeListPro = Visibility.Visible;//消費明細CostSumInfoPro = Visibility.Visible;//消費匯總OpenTableInfoPro = Visibility.Collapsed;//開臺面板隱藏break;case "空閑":OpenTableInfoPro = Visibility.Visible;TabConsumeHeadPro = Visibility.Collapsed;TabConsumeListPro = Visibility.Collapsed;CostSumInfoPro = Visibility.Collapsed;TableOrderNoPro = "還沒有創建訂單";break;case "預約中":OpenTableInfoPro = Visibility.Visible;TabConsumeHeadPro = Visibility.Collapsed;TabConsumeListPro = Visibility.Collapsed;CostSumInfoPro = Visibility.Collapsed;TableOrderNoPro = "還沒有創建訂單";break;case "待清理":OpenTableInfoPro = Visibility.Visible;TabConsumeHeadPro = Visibility.Collapsed;TabConsumeListPro = Visibility.Collapsed;CostSumInfoPro = Visibility.Collapsed;break;case "已停用":Notice.Show("當前餐桌已停用,請選擇其他可用餐桌!", "提示", 3, MessageBoxIcon.Warning);break;}TableConsumeList = GetDeskConsumeDetail(TableOrderNoPro);//根據訂單號獲取單個餐臺的消費詳情 TableConsumeListMarginPro = new Thickness(0, 0, 0, 0);TabConsumeHeadMarginPro = new Thickness(0, 0, 0, 0);TableConsumeListHeightPro = "500";CheckOutPro = Visibility.Visible; }}});}}/// <summary>/// 菜品類型點擊切換命令(tabcontrol)/// </summary>public ICommand SelectMenuCommand{get{return new RelayCommand(o =>{if (o is TabControl){TabControl control = o as TabControl;var _curTabItem = control.SelectedItem as TabItem;if (_curTabItem == null){control.SelectedIndex = 0;return;}var _mtguid = _curTabItem.Uid != null ? _curTabItem.Uid.ToString() : "";DishTableList = getDishTableList(_mtguid);globalGuid = _mtguid;if (dishListBox == null){return;}//此問題待解決//Dispatcher.CurrentDispatcher.Invoke(new Action(() =>//{// ListBoxItem a1 = new ListBoxItem();// var a2 = dishListBox.ItemContainerGenerator;// for (int i = 0; i < dishListBox.Items.Count; i++)// {// if (a2.ContainerFromIndex(i) is ListBoxItem)// {// a1 = a2.ContainerFromIndex(i) as ListBoxItem;// var c0 = selectedItem[0];// ////尋找指定的控件,即ProNumBlock控件 // ContentPresenter myContentPresenter = FindChildControlUtil.FindVisualChild<ContentPresenter>(a1);// DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;// StackPanel _proNumBlock = (StackPanel)myDataTemplate.FindName("ProNumBlock", myContentPresenter);// if (_proNumBlock.IsVisible)//取消選中菜品// {// _proNumBlock.Visibility = Visibility.Collapsed;//設置控件隱藏 // }// else//選中當前菜品// {// _proNumBlock.Visibility = Visibility.Visible;//設置控件可見 // }// }// }//}));//Application.Current.Dispatcher.BeginInvoke(new Action(() =>//{ // //5、清空菜品面板中選擇的菜品// ListBoxItem a1 = new ListBoxItem();// var a2 = dishListBox.ItemContainerGenerator;// for (int i = 0; i < dishListBox.Items.Count; i++)// {// if (a2.ContainerFromIndex(i) is ListBoxItem)// {// a1 = a2.ContainerFromIndex(i) as ListBoxItem;// //尋找指定的控件,即ProNumBlock控件// ContentPresenter myContentPresenter2 = FindChildControlUtil.FindVisualChild<ContentPresenter>(a1);// if (myContentPresenter2 == null)// {// return;// }// string a1pmGuid = (a1.Content as PointMenuInfo).pmGuid;// //遍歷新增的菜品訂單,判斷某個菜品的主鍵是否等于菜品列表中某個菜品的主鍵// PointMenuInfo item = OrderInfoTable.Find(x => x.pmGuid.Equals(a1pmGuid));// //如果相等,則尋找該listboxitem// if (item != null)// {// break;// }// }// }// var c1 = selectedItem[0];// PointMenuInfo c2=(PointMenuInfo)c1.Tag;// c1.Content = c2;// var c3 = c1.ContentTemplate;// //尋找指定的控件,即ProNumBlock控件// ContentPresenter myContentPresenter = FindChildControlUtil.FindVisualChild<ContentPresenter>(a1);// if (myContentPresenter == null)// {// return;// }// DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;// StackPanel _proNumBlock = (StackPanel)myDataTemplate.FindName("ProNumBlock", myContentPresenter);// if (_proNumBlock.IsVisible)//取消選中菜品// {// _proNumBlock.Visibility = Visibility.Collapsed;//設置控件隱藏 // }// else//選中當前菜品// {// _proNumBlock.Visibility = Visibility.Visible;//設置控件可見 // }//}));}});}}/// <summary>/// 菜品名稱點擊命令(listbox)/// </summary>public ICommand SelectDishCommand{get{return new RelayCommand(o =>{if (o is ListBox){var mylistbox = (ListBox)o;var myindex = mylistbox.SelectedIndex;//獲取所選項的索引號 if (myindex == -1){return;}dishListBox = (ListBox)o;ListBoxItem a1 = new ListBoxItem();var myitem = DishNameItem;if (DishNameItem.msScalar == 0){Notice.Show("當前菜品庫存不足,請選擇其他菜品!", "提示", 3, MessageBoxIcon.Error);return;}var a2 = mylistbox.ItemContainerGenerator;//遍歷listbox所有的項集合for (int i = 0; i < mylistbox.Items.Count; i++){//如果當前項是一個listboxitemif (a2.ContainerFromIndex(i) is ListBoxItem){a1 = (ListBoxItem)a2.ContainerFromIndex(i);//并且該項的內容等于當前選擇菜品對象則中斷循環if (a1.Content.Equals(myitem)){a1.Tag = (PointMenuInfo)a1.Content;selectedItem.Add(a1);break;}}}//尋找指定的控件,即ProNumBlock控件ContentPresenter myContentPresenter = FindChildControlUtil.FindVisualChild<ContentPresenter>(a1);DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;StackPanel _proNumBlock = (StackPanel)myDataTemplate.FindName("ProNumBlock", myContentPresenter);AddOrderInfoList.Clear();if (_proNumBlock.IsVisible)//取消選中菜品{_proNumBlock.Visibility = Visibility.Collapsed;//設置控件隱藏 //遍歷所有訂單信息,如果某個訂單等于當前選擇菜品則從集合中移除 for (int i = OrderInfoTable.Count - 1; i >= 0; i--){var _proItem = (PointMenuInfo)OrderInfoTable[i];if (_proItem.pmGuid == DishNameItem.pmGuid){OrderInfoTable.Remove(OrderInfoTable[i]);//從集合中移除}}}else//選中當前菜品{_proNumBlock.Visibility = Visibility.Visible;//設置控件為可見PointMenuInfo buyProObj = new PointMenuInfo{pmGuid = DishNameItem.pmGuid,msName = DishNameItem.msName,msPrice = DishNameItem.msPrice,msScalar = DishNameItem.msScalar,buyNum = 1};OrderInfoTable.Add(buyProObj);//添加到集合中}ObservableCollection<PointMenuInfo> objOrderList = new ObservableCollection<PointMenuInfo>();//循環所有訂單并計算總費用和總數量 CostMoney = 0;int costCount = 0;foreach (PointMenuInfo itemPro in OrderInfoTable){CostMoney = CostMoney + itemPro.msPrice * itemPro.buyNum;costCount = costCount + itemPro.buyNum;objOrderList.Add(itemPro);}CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = CostMoney.ToString("c0", cn);AddOrderInfoList = objOrderList;TxtCostCountPro = costCount.ToString();//這里是為了處理SelectionChanged事件,因為SelectionChanged事件在同一個item中只會執行一次,當再次點擊時,必須改變listbox的索引號//所以這里必須人為的設置當前選中項為-1,即不選中任何一個listboxitem,當再次點擊同一個item時,SelectionChanged事件才會生效//SelectionChanged事件是指當選擇項發生更改時觸發的事件,當selectindex沒有變化時,該事件自然就不會發生,因此同一個選項兩次點擊時,只有第一次會發生//SelectionChanged事件,同一對象在第2次點擊時不會發生SelectionChanged事件,所以人為在這設置mylistbox.SelectedIndex = -1;mylistbox.SelectedIndex = -1;var my = selectedItem;}});}}/// <summary>/// 【開始點餐】或【繼續點餐】命令 /// </summary>public ICommand TableContinueCostCommand{get{return new RelayCommand(o =>{DishTypeList = getDishTypeList();//菜品類型DishTableList = getDishTableList("");//菜品列表//修改面板文字TxtTabControlTitle = "菜品類型";TxtTabControlName = "菜品面板";//菜品控件可見DishTypeTabPro = Visibility.Visible;//菜品類型可見DishTypeListPro = Visibility.Visible;//菜品列表可見 //餐桌控件隱藏DiningTypeTabPro = Visibility.Collapsed;//餐桌類型隱藏DiningTableListPro = Visibility.Collapsed;//餐臺列表隱藏 TabConsumeHeadPro = Visibility.Visible;//已開桌消費項目標題欄可見TableConsumeList = GetDeskConsumeDetail(TableOrderNoPro);//獲取餐臺消費詳情 OpenOrderInfoPro = Visibility.Visible;//空桌準備開單或繼續點餐時新增菜品的表格可見 CostSumInfoPro = Visibility.Visible;//消費匯總CheckOutPro = Visibility.Collapsed;//結賬或繼續點餐按鈕隱藏CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = 0.ToString("c0", cn);TxtCostCountPro = "0";TableConsumeListMarginPro = new Thickness(0, -25, 0, 0);TabConsumeHeadMarginPro = new Thickness(0, -85, 0, 0);TableConsumeListHeightPro = "290";});}}/// <summary>/// 數字按鍵點擊/// </summary>public ICommand DinerPersonNumberCommand{get{return new RelayCommand(o =>{if (o is Button){Button mybtn = o as Button;var curNumValue = mybtn.Content.ToString();if (curNumValue.Equals(".")){if (!string.IsNullOrEmpty(DinersPro)){if (DinersPro.IndexOf(".") < 0) DinersPro = DinersPro + curNumValue;}else{Notice.Show("當前取值不合法,請重新取值!", "提示", 3, MessageBoxIcon.Error);}}else{DinersPro = DinersPro + curNumValue;}NumOrderPro = DinersPro;}});}}/// <summary>/// 數字按鍵刪除/// </summary>public ICommand DinerPersonDeleteCommand{get{return new RelayCommand(o =>{if (o is Button){Button mybtn = o as Button;int length = DinersPro.Length;if (length > 0){string ob = DinersPro.Remove(length - 1, 1);DinersPro = ob;}}});}}/// <summary>/// 【立即開臺】命令 /// </summary>public ICommand TableStartOpenCommand{get{return new RelayCommand(o =>{if (string.IsNullOrEmpty(DinersPro)){Notice.Show("請輸入消費人數!", "提示", 3, MessageBoxIcon.Info);return;}var table = DiningTableItem;var _tableOrderNo = string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now);DiningTable upTabObj = new DiningTable();upTabObj.rbGuid = table.tbId;upTabObj.rName = table.tbName;upTabObj.rtId = table.rtId;upTabObj.rtState = "占用";upTabObj.obId = _tableOrderNo;upTabObj.rtNumber = int.Parse(DinersPro);upTabObj.rtRemark = TableTxtRemarkPro; var _upRes = tablebll.UpStateById(upTabObj).Result;if (_upRes.statusCode == (int)ApiEnum.Status){TableOrderNoPro = _tableOrderNo;//開臺成功后,判斷是否勾選了“開單后立即新增消費項目”復選框var _isCheckedCostOrder = ChkIsOrderDetailPro;if (_isCheckedCostOrder){TableConsumeList = GetDeskConsumeDetail(TableOrderNoPro);//根據訂單號獲取單個餐臺的消費詳情 DiningTypeTabPro = Visibility.Collapsed; //餐桌類型隱藏 DiningTableListPro = Visibility.Collapsed;//餐臺列表隱藏 OpenTableInfoPro = Visibility.Collapsed;OpenOrderInfoPro = Visibility.Visible;//空桌準備開單或繼續點餐時新增菜品的表格可見 DishTypeTabPro = Visibility.Visible;//菜品類型可見DishTypeListPro = Visibility.Visible;//菜品列表可見 //修改面板文字TxtTabControlTitle = "菜品類型";TxtTabControlName = "菜品面板";CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = CostMoney.ToString("c0", cn);TxtCostCountPro = TableConsumeList.Count.ToString();DishTypeList = getDishTypeList();//菜品類型DishTableList = getDishTableList("");//菜品列表 }else{DiningTypeList = getDiningTypeList(); //餐桌類型 DiningTableList = getDiningTableList(); //餐臺列表 }Notice.Show("開臺成功!", "提示", 3, MessageBoxIcon.Success);}});}}/// <summary>/// 【開單】命令/// </summary>public ICommand TableStartOrderCommand{get{return new RelayCommand(o =>{if (OrderInfoTable.Count == 0){Notice.Show("請選擇消費菜品!", "提示", 3, MessageBoxIcon.Warning);return;}//0、0獲取當前餐桌信息 var tt = TableNamePro;DiningTable _tabobj = tablebll.GetModelByCond(x => x.rName == TableNamePro).Result.data;if (_tabobj == null){Notice.Show("開單失敗!", "提示", 3, MessageBoxIcon.Warning);return;}//1、1生成帳單記錄List<BillConsume> billRecord = billConsumebll.CreateConsumeRecord(OrderInfoTable, TableOrderNoPro);//1、2添加帳單記錄var _isAddOrder = billConsumebll.AddBillList(billRecord).Result;if (_isAddOrder.statusCode != (int)ApiEnum.Status){Notice.Show("開單失敗!", "提示", 3, MessageBoxIcon.Warning);Logger.Default.ProcessError(_isAddOrder.statusCode, "保存消費項目詳情出現異常");return;}//2、1生成庫存記錄List<PointMenu> proPointMenuList = new List<PointMenu>();foreach (PointMenuInfo itemPro in OrderInfoTable){var curStock = itemPro.msScalar - itemPro.buyNum;//庫存量-購買量var _proObj = new PointMenuInfo{pmGuid = itemPro.pmGuid,msScalar = curStock >= 0 ? curStock : 0};proPointMenuList.Add(_proObj);}//2、2更新菜品的庫存量var _upStock = menubll.UpPointMenuStock(proPointMenuList).Result;if (_upStock.statusCode != (int)ApiEnum.Status){Logger.Default.ProcessError(_upStock.statusCode, "更新商品庫存出現異常");return;}//3、1生成訂單歷史記錄double amountCost = 0;//匯總消費總金額foreach (var itemCost in billRecord){amountCost += itemCost.msMoney * itemCost.msAmount;}//創建歷史訂單對象var _openOrder = new BillHistory{obGuid = Guid.NewGuid().ToString(),obId = TableOrderNoPro,tName = TableNamePro,obDate = DateTime.Now,obNumber = _tabobj.rtNumber,mId = "",//未涉及會員業務,暫置為空lastUpDate = DateTime.Now,opConsumeMoney = amountCost,opDiscountMoney = 0,opClientMoney = 0};//3、2保存消費訂單歷史var _openOrderRes = billHistorybll.AddbillHistory(_openOrder).Result;if (_openOrderRes.statusCode != (int)ApiEnum.Status){Notice.Show("保存消費訂單失敗!", "提示", 3, MessageBoxIcon.Error);Logger.Default.ProcessError(_openOrderRes.statusCode, "保存消費訂單出現異常");return;}//4、1 清空餐臺界面信息 TxtCostMonePro = "";//清空金額TxtCostCountPro = "";//清空數量 AddOrderInfoList.Clear();//清空新增的菜品列表 //清空點單金額和點單數量CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = 0.ToString("c0", cn);TxtCostCountPro = 0.ToString();//4、2更新餐臺數據信息及狀態 _tabobj.rtDate = DateTime.Now;//開單時間var _upres = tablebll.UpStateById(_tabobj).Result;if (_upres.statusCode != (int)ApiEnum.Status){Notice.Show("開單失敗!", "提示", 3, MessageBoxIcon.Error);Logger.Default.ProcessError(_openOrderRes.statusCode, "更新餐桌出現異常");return;}TabConsumeHeadPro = Visibility.Visible;//已開桌消費項目標題欄可見TabConsumeListPro = Visibility.Visible;//已開單餐臺消費列表可見//修改消費標題及Listbox列表的margin設置TableConsumeListMarginPro = new Thickness(0, -25, 0, 0);TabConsumeHeadMarginPro = new Thickness(0, -85, 0, 0);//修改消費標題及Listbox列表的高度設置TableConsumeListHeightPro = "290"; TableConsumeList = GetDeskConsumeDetail(TableOrderNoPro);//重新獲取餐臺消費詳情 CostSumInfoPro = Visibility.Visible;//消費匯總可見 CheckOutPro = Visibility.Collapsed;//結賬或繼續點餐按鈕隱藏CheckOutPro2 = Visibility.Collapsed;//消費時長及消費人數的stackpanel控件隱藏//5、清空菜品面板選中的菜品 ListBoxItem a1 = new ListBoxItem();var a2 = dishListBox.ItemContainerGenerator;for (int i = 0; i < dishListBox.Items.Count; i++){if (a2.ContainerFromIndex(i) is ListBoxItem){a1 = a2.ContainerFromIndex(i) as ListBoxItem;string a1pmGuid = (a1.Content as PointMenuInfo).pmGuid;//遍歷新增的菜品訂單,判斷某個菜品的主鍵是否等于菜品列表中某個菜品的主鍵PointMenuInfo item = OrderInfoTable.Find(x => x.pmGuid.Equals(a1pmGuid));//如果相等,則尋找該listboxitemif (item != null){//尋找指定的控件,即ProNumBlock控件ContentPresenter myContentPresenter = FindChildControlUtil.FindVisualChild<ContentPresenter>(a1);DataTemplate myDataTemplate = myContentPresenter.ContentTemplate;StackPanel _proNumBlock = (StackPanel)myDataTemplate.FindName("ProNumBlock", myContentPresenter);if (_proNumBlock.IsVisible)//取消選中菜品{_proNumBlock.Visibility = Visibility.Collapsed;//設置控件隱藏 }else//選中當前菜品{_proNumBlock.Visibility = Visibility.Visible;//設置控件可見 }}}}OrderInfoTable.Clear();//清空已選菜品帳單Notice.Show("開單成功!", "提示", 3, MessageBoxIcon.Success);DishTableList = getDishTableList(globalGuid);//刷新菜品列表});}}/// <summary>/// 【關閉】命令/// </summary>public ICommand TableCancelOrderCommand{get{return new RelayCommand(o =>{OpenOrderInfoPro = Visibility.Collapsed;//空閑餐桌需要準備"開單"的詳情隱藏TabConsumeHeadPro = Visibility.Collapsed;//已經開單餐桌的消費標題詳情隱藏TabConsumeListPro = Visibility.Collapsed;//已經開單餐桌的消費清單詳情隱藏CostSumInfoPro = Visibility.Collapsed;//已經開單餐桌的消費清單匯總隱藏DishTypeListPro = Visibility.Collapsed;//菜品列表隱藏DishTypeTabPro = Visibility.Collapsed;//菜品類型隱藏DiningTypeTabPro = Visibility.Visible;//餐桌類型可見DiningTableListPro = Visibility.Visible;//餐臺列表可見OpenTableInfoPro = Visibility.Visible;//空閑餐臺詳情可見DiningTypeList = getDiningTypeList(); //餐桌類型 DiningTableList = getDiningTableList(); //餐臺列表 TxtTabControlTitle = "餐桌類型";TxtTabControlName = "餐臺面板";DinersPro = "";//就餐人數TableTxtRemarkPro = "";//備注信息 ChkIsOrderDetailPro = false;//是否開單復選框CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = CostMoney.ToString("c0", cn);TxtCostCountPro = "";AddOrderInfoList.Clear();//清空開單信息OrderInfoTable.Clear();//清空開臺信息});}}/// <summary>/// 菜品數量增加命令/// </summary>public ICommand BuyNumPlusCmd{get{return new RelayCommand(o =>{string menuguid = o.ToString();PointMenuInfo record = OrderInfoTable.First(x => x.pmGuid.Equals(menuguid));if (record.buyNum > 0){if (record.buyNum < record.msScalar)//購買數量必須小于庫存時才能增加{record.buyNum++;ObservableCollection<PointMenuInfo> objOrderList = new ObservableCollection<PointMenuInfo>();//循環所有訂單位計算總費用 CostMoney = 0;int costCount = 0;foreach (PointMenuInfo itemPro in OrderInfoTable){CostMoney = CostMoney + itemPro.msPrice * itemPro.buyNum;costCount = costCount + itemPro.buyNum;objOrderList.Add(itemPro);}CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = CostMoney.ToString("c0", cn);AddOrderInfoList = objOrderList;TxtCostCountPro = costCount.ToString();}else{var _msgRes = MessageBoxX.Show("對不起,消費數量不能超過庫存數量", "提示", Application.Current.MainWindow, MessageBoxButton.OK, new MessageBoxXConfigurations(){MessageBoxIcon = MessageBoxIcon.Warning,ButtonBrush = "#F1C825".ToColor().ToBrush(),});}}});}}/// <summary>/// 菜品數量減少命令/// </summary>public ICommand BuyNumSubtractCmd{get{return new RelayCommand(o =>{string menuguid = o.ToString();PointMenuInfo record = OrderInfoTable.First(x => x.pmGuid.Equals(menuguid));if (record.buyNum > 1){record.buyNum--;ObservableCollection<PointMenuInfo> objOrderList = new ObservableCollection<PointMenuInfo>();//循環所有訂單位計算總費用 CostMoney = 0;int costCount = 0;foreach (PointMenuInfo itemPro in OrderInfoTable){CostMoney = CostMoney + itemPro.msPrice * itemPro.buyNum;costCount = costCount + itemPro.buyNum;objOrderList.Add(itemPro);}CultureInfo cn = new CultureInfo("zh-CN");TxtCostMonePro = CostMoney.ToString("c0", cn);AddOrderInfoList = objOrderList;TxtCostCountPro = costCount.ToString();}});}}/// <summary>/// 結賬命令/// </summary>public ICommand SettlementCostCommand{get{return new RelayCommand(o =>{//1、獲取訂單數據 var res = billHistorybll.GetBillHistoryList(x => x.obId == TableOrderNoPro).Result;if (res.statusCode != (int)ApiEnum.Status){Notice.Show("操作失敗,請聯系您的管理員!", "提示", 3, MessageBoxIcon.Warning);return;}List<BillHistory> historyorderObj = res.data.OrderBy(x => x.opConsumeMoney).ToList();if (historyorderObj == null){Notice.Show("操作失敗,請聯系您的管理員!", "提示", 3, MessageBoxIcon.Warning);return;}////2、更新結賬金額foreach (BillHistory h in historyorderObj){h.opClientMoney = h.opConsumeMoney;h.lastUpDate = DateTime.Now;var upRes = billHistorybll.UpPayMoneyAttr(h).Result;if (upRes.statusCode != (int)ApiEnum.Status){Notice.Show("結賬失敗,請聯系您的管理員!", "提示", 3, MessageBoxIcon.Warning);Logger.Default.ProcessError(upRes.statusCode, "更新結賬金額出現異常,訂單號【" + TableOrderNoPro + "】");return;}}//3、更新餐桌狀態 var tabObjRes = tablebll.GetModelByCond(x => x.rName == TableNamePro).Result.data;tabObjRes.rtState = "空閑";tabObjRes.rtDate = null;tabObjRes.rtNumber = 0;tabObjRes.rtRemark = string.Empty;tabObjRes.obId = string.Empty;var upTabRes = tablebll.UpStateById(tabObjRes).Result;if (upTabRes.statusCode != (int)ApiEnum.Status){Notice.Show("結賬失敗,請聯系您的管理員!", "提示", 3, MessageBoxIcon.Warning);Logger.Default.ProcessError(upTabRes.statusCode, "更新餐桌狀態出現異常,餐桌號【" + TableNamePro + "】");}else{RefreshPage();//刷新界面Notice.Show("結賬成功!", "提示", 3, MessageBoxIcon.Success);}});}}#endregion}
}
4、運行測試
呈現所有菜品,點擊不同類型菜品,顯示該類型下的菜
原創不易,打字截圖不易,走過路過,不要錯過,歡迎點贊,收藏,轉載,復制,抄襲,留言,動動你的金手指,早日實現財務自由!