public void DeorderItem(string tableNumber, List <Item> itemList) { FrontDeskRequest frontdesk = null; try { HCSMSLog.OnWarningLog(this, new NotifyEventArgs("Recieve Deorder Request")); //check if this table is really in use DinningTable table = TableDao.GetDinningTable(tableNumber); if (table == null) { throw new HCSMSException("餐桌是空的 !"); } // constructing request list List <RequestHandleInfo> requestList = new List <RequestHandleInfo>(); foreach (Item ite in itemList) { RequestHandleInfo info = new RequestHandleInfo(); info.EntityId = tableNumber; info.IsHandled = false; info.RequestType = RequestType.DeorderItem; info.SourceId = ite.Id; requestList.Add(info); } //check for response of cook at the kitchen KitchenRequest handler = KitchenRequestControl.GetService(); if (handler == null) { requestList.Clear(); } else { requestList = handler.OnDeorderItem(requestList); } HCSMSLog.OnWarningLog(this, new NotifyEventArgs("Recieve Result order item")); List <RequestHandleInfo> denyList = new List <RequestHandleInfo>(); foreach (RequestHandleInfo ite in requestList) { if (!ite.IsHandled) { denyList.Add(ite); } } if (denyList.Count == 0 && requestList.Count > 0) { //build data for calling data access servcie List <string> itemIdList = new List <string>(); foreach (var ite in itemList) { itemIdList.Add(ite.Id); } //save data to database ItemDao.DeorderItem(table.Id, itemIdList); } else { frontdesk = FrontDeskRequestControl.GetService(callBackId); if (frontdesk != null) { //means kitchen service is not up if (requestList.Count == 0) { frontdesk.InformationMessage(new NotifyEventArgs("不存在厨房处理服务!")); } // notify front desk, the request is not satisfied else { frontdesk.RequestDeny(denyList); } } } } catch (HCSMSException ex) { raiseError(ex); if (frontdesk != null) { frontdesk.ErrorMessage(new ErrorEventArgs("", ex)); } } catch (Exception ex) { raiseError(ex); } }