public bool SeparateTableHandle(SeparateTableSubmitDTO handleDto) { using (var db = new SqlSugarClient(Connection)) { bool res = false; try { db.BeginTran(); var originalOrderTable = db.Queryable <R_OrderTable>() .Where(p => p.Id == handleDto.OrderTableId) .FirstOrDefault(); var originalOrder = db.Queryable <R_Order>() .Where(x => x.Id == originalOrderTable.R_Order_Id) .FirstOrDefault(); var newTable = db.Queryable <R_Table>() .FirstOrDefault(p => p.Id == handleDto.NewTableId); var oldTable = db.Queryable <R_Table>() .FirstOrDefault(p => p.Id == handleDto.OldTableId); if (newTable.CythStatus == CythStatus.在用) { throw new Exception(string.Format( "所选台号({0})已被使用,请重新选择!", newTable.Name)); } R_Order order = new R_Order { CyddStatus = CyddStatus.用餐中, OrderNo = DateTime.Now.ToString("yyyyMMddHHmmssfff"), CreateDate = DateTime.Now, CreateUser = handleDto.CreateUser, CyddOrderSource = originalOrder.CyddOrderSource, ContactPerson = originalOrder.ContactPerson, ContactTel = originalOrder.ContactTel, R_Market_Id = originalOrder.R_Market_Id, TableNum = 1, PersonNum = 1, R_Restaurant_Id = newTable.R_Restaurant_Id, Remark = string.Format("从原订单({0})中拆台生成的新订单", originalOrder.OrderNo) }; var newOrderId = db.Insert(order); R_OrderTable orderTable = new R_OrderTable(); orderTable.CreateDate = DateTime.Now; orderTable.IsOpen = true; orderTable.PersonNum = order.PersonNum; orderTable.R_Order_Id = newOrderId.ObjToInt(); orderTable.R_Table_Id = handleDto.NewTableId; var newOrderTableId = db.Insert(orderTable); res = db.Update <R_Table>(new { CythStatus = CythStatus.在用 }, p => p.Id == handleDto.NewTableId); var oldDetailList = db.Queryable <R_OrderDetail>() .Where(x => x.R_OrderTable_Id == handleDto.OrderTableId) .ToList(); foreach (var item in handleDto.SelectedList) { var detail = oldDetailList.Where(x => x.Id == item.Id).FirstOrDefault(); if (detail != null) { //判断拆台勾选菜品项数量是否全部转至其它台 if (detail.Num >= item.Num) { db.Delete <R_OrderDetail>(x => x.Id == detail.Id); } else { db.Update <R_OrderDetail>(new { Num = (detail.Num - item.Num) }, x => x.Id == detail.Id);//更新明细菜品数量 } R_OrderDetail newDetail = detail; newDetail.Id = 0; newDetail.Num = item.Num; newDetail.R_OrderTable_Id = newOrderTableId.ObjToInt(); db.Insert <R_OrderDetail>(newDetail); } } //插入两条操作订单记录 R_OrderRecord entity = new R_OrderRecord(); entity.CreateDate = DateTime.Now; entity.CreateUser = handleDto.CreateUser; entity.CyddCzjlStatus = CyddStatus.拆台; entity.CyddCzjlUserType = CyddCzjlUserType.员工; entity.R_OrderTable_Id = handleDto.OrderTableId; entity.R_Order_Id = originalOrder.Id; entity.Remark = string.Format( "拆台操作 - 把订单({0})的台号[{1}]勾选的菜品信息拆台到新订单({2})下的台号[{3}]中", originalOrder.OrderNo, oldTable.Name, order.OrderNo, newTable.Name); db.Insert <R_OrderRecord>(entity); entity = new R_OrderRecord { CreateDate = DateTime.Now, CreateUser = handleDto.CreateUser, CyddCzjlStatus = CyddStatus.拆台, CyddCzjlUserType = CyddCzjlUserType.员工, R_OrderTable_Id = newOrderTableId.ObjToInt(), R_Order_Id = newOrderId.ObjToInt(), Remark = string.Format( "拆台操作 - 把订单({0})的台号[{1}]勾选的菜品信息拆台到新订单({2})下的台号[{3}]中", originalOrder.OrderNo, oldTable.Name, order.OrderNo, newTable.Name) }; db.Insert <R_OrderRecord>(entity); db.CommitTran(); res = true; } catch (Exception) { res = false; db.RollbackTran(); throw; } return(res); } }