当前位置: 首页 > news >正文

C#WPF实战出真汁09--【消费开单】--选择菜品

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、运行测试

呈现所有菜品,点击不同类型菜品,显示该类型下的菜

原创不易,打字截图不易,走过路过,不要错过,欢迎点赞,收藏,转载,复制,抄袭,留言,动动你的金手指,早日实现财务自由!

http://www.lryc.cn/news/622532.html

相关文章:

  • Linux软件编程--线程
  • socket编程UDP
  • 深度解析和鲸社区热门项目:电商双 11 美妆数据分析的细节与价值
  • AI Agents 2025年十大战略科技趋势
  • 【Java学习】锁、线程死锁、线程安全2
  • 【原理】C# 字段、属性对比及其底层实现
  • 使用npm/pnpm自身安装指定版本的pnpm
  • pnpm(Performant npm)的安装
  • Docker之安装部署——(1)配置国内docker镜像源
  • 【多模态大模型】--BLIP3
  • 疯狂星期四文案网第40天运营日记
  • PyTorch的安装-CPU版本或者GPU安装有什么区别吗
  • Comfyui进入python虚拟环境
  • 《P1194 买礼物》
  • 综合案例:Python 函数知识整合 — 学生成绩管理系统
  • 【秋招笔试】2025.08.15饿了么秋招机考-第三题
  • 无脑整合springboot2.7+nacos2.2.3+dubbo3.2.9实现远程调用及配置中心
  • hex文件结构速查
  • PyQt6实例_50个流通领域重要生产资料市场价格查看工具
  • OpenCV---getStructuringElement 结构元素获取
  • 铨林接纸机学习记录1
  • 嵌入式开发学习———Linux环境下网络编程学习(二)
  • STC8单片机驱动I2C屏幕:实现时间、日期与温湿度显示
  • AutoSar AP平台功能组并行运行原理
  • 码上爬第七题【协程+对抗格式化检测+数组移位】
  • 【Canvas与玻璃光】铝圈蓝底玻璃光按钮
  • 吉他和弦学习:从音程基石到流畅弹奏
  • 优先级反转问题
  • 在使用 scp 传输大文件时,为避免因连接超时导致传输中断
  • 领域防腐层(ACL)在遗留系统改造中的落地