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); } }
/// <summary> /// 预定保存 /// </summary> /// <param name="req"></param> /// <param name="tableIds"></param> /// <param name="msg"></param> /// <returns></returns> public ReserveCreateDTO SaveReserveOrderHandle(ReserveCreateDTO req, List <int> tableIds, out string msg) { using (var db = new SqlSugarClient(Connection)) { string messge = string.Empty; ReserveCreateDTO res = new ReserveCreateDTO(); if (!req.ReserveDate.HasValue || (req.ReserveDate.HasValue && req.ReserveDate.Value < DateTime.Now)) { msg = "所选预订日期时间无效,请重新选择"; res = null; return(res); } string date = req.ReserveDate.Value.ToString("yyyyMMdd"); string ids = string.Join(",", tableIds); try { db.BeginTran(); if (req.Id > 0) { var ordTabList = db.Queryable <R_OrderTable>().Where(x => x.R_Order_Id == req.Id).ToList(); if (ordTabList != null && ordTabList.Count > 0) { var ordTabIds = ordTabList.Select(x => x.Id).ToList(); db.Delete <R_OrderDetail>(x => ordTabIds.Contains(x.R_OrderTable_Id));//删除旧预订菜品明细 } db.Delete <R_OrderTable>(ordTabList); //删除预订的旧订单台号记录 } var data = db.Sqlable().From <R_Order>("s1") .Join <R_OrderTable>("s2", "s1.Id", "s2.R_Order_Id", JoinType.Inner); data = data.Where("s1.CyddStatus=" + (int)CyddStatus.预定); data = data.Where("s1.R_Market_Id=" + req.R_Market_Id); data = data.Where("CONVERT(varchar(20), s1.ReserveDate, 112)=" + date); data = data.Where("s2.R_Table_Id in (" + ids + ")"); var list = data.SelectToList <R_Order>("s1.Id"); //var sql = data.Sql; if (list == null || list.Count == 0) { string recordRemark = ""; int orderId = req.Id; R_Order model = Mapper.Map <ReserveCreateDTO, R_Order>(req); if (req.Id > 0) { db.Update <R_Order>( new { ContactPerson = req.ContactPerson, ContactTel = req.ContactTel, CyddOrderSource = req.CyddOrderSource, PersonNum = req.PersonNum, ReserveDate = req.ReserveDate, R_Market_Id = req.R_Market_Id, R_Restaurant_Id = req.R_Restaurant_Id, Remark = req.Remark, TableNum = req.TableNum, CustomerId = req.CustomerId, BillingUser = req.BillingUser, OrderType = req.OrderType, BillDepartMent = req.BillDepartMent }, x => x.Id == req.Id); //更新预订单信息 recordRemark = string.Format("修改预订 - 预订订单号({0})更新预订信息", req.OrderNo); } else { var insert = db.Insert <R_Order>(model); //订单主表 orderId = Convert.ToInt32(insert); //订单操作纪录 recordRemark = string.Format("新加预订 - 新增预订信息订单号({0})", model.OrderNo); if (req.DepositAmount > 0) { db.Insert(new R_OrderPayRecord() { BillDate = req.AccountingDate, CreateDate = DateTime.Now, CreateUser = req.CreateUser, CyddJzStatus = CyddJzStatus.已付, CyddJzType = CyddJzType.定金, CyddPayType = (int)CyddPayType.现金, PayAmount = req.DepositAmount, R_Order_Id = orderId, R_Market_Id = req.CurrentMarketId, //当前用户登录的分市Id R_OrderMainPay_Id = 0, //预订定金不生成当次主结Id Remark = "预订定金", R_Restaurant_Id = req.CurrentRestaurantId }); } } string tableNames = string.Empty; int personNumAvg = tableIds.Count() > 1 ? req.PersonNum / tableIds.Count() : req.PersonNum; //台号人均 int personNumRemainder = tableIds.Count() > 1 ? req.PersonNum % tableIds.Count() : 0; //台号余人 int eachRemainder = 0; if (tableIds != null && tableIds.Count > 0) { List <R_OrderTable> otList = new List <R_OrderTable>(); foreach (var tId in tableIds) { eachRemainder++; R_OrderTable otModel = new R_OrderTable(); otModel.R_Order_Id = orderId; otModel.R_Table_Id = tId; otModel.CreateDate = DateTime.Now; otModel.PersonNum = personNumAvg + (personNumRemainder - eachRemainder >= 0 ? 1 : 0); otModel.BillDate = req.AccountingDate; otModel.R_Market_Id = req.CurrentMarketId; otModel.R_OrderMainPay_Id = 0; otList.Add(otModel); } db.InsertRange <R_OrderTable>(otList);//订单台号 req.OrderTableIds = db.Queryable <R_OrderTable>() .Where(x => x.R_Order_Id == orderId).Select(x => x.Id).ToList(); tableNames = db.Queryable <R_Table>() .Where(x => tableIds.Contains(x.Id)).Select(x => x.Name).ToList().Join(","); } db.Insert <R_OrderRecord>(new R_OrderRecord() { CreateDate = DateTime.Now, R_Order_Id = orderId, CreateUser = req.CreateUser, CyddCzjlStatus = CyddStatus.预定, CyddCzjlUserType = CyddCzjlUserType.员工, Remark = recordRemark + (tableNames.IsEmpty() ? "" : string.Format(";预订台:({0})", tableNames)), }); res = req; res.Id = orderId; db.CommitTran(); } else { res = null; messge = "订单台号在预定日期已被占用,请重新选择"; db.RollbackTran(); } } catch (Exception e) { res = null; messge = e.Message; db.RollbackTran(); } msg = messge; return(res); } }
/// <summary> /// 开台 拼台操作处理 /// </summary> /// <param name="req"></param> /// <param name="tableIds"></param> /// <param name="msg"></param> /// <param name="reuse">false 开台,true 拼台</param> /// <returns></returns> public OpenTableCreateResultDTO OpenTableHandle( ReserveCreateDTO req, List <int> tableIds, out string msg, bool reuse = false) { //取餐饮账务日期 TypeId=10003 var dateItem = _extendItemRepository.GetModelList(req.CompanyId, 10003).FirstOrDefault(); using (var db = new SqlSugarClient(Connection)) { if (dateItem == null) { throw new Exception("餐饮账务日期尚未初始化,请联系管理员"); } DateTime accDate = DateTime.Today; if (!DateTime.TryParse(dateItem.ItemValue, out accDate)) { throw new Exception("餐饮账务日期设置错误,请联系管理员"); } string messge = string.Empty; OpenTableCreateResultDTO res = new OpenTableCreateResultDTO(); string ids = string.Join(",", tableIds); try { db.BeginTran(); var isCanOpen = db.Queryable <R_Table>() .Any(p => p.CythStatus != CythStatus.空置 && tableIds.Contains(p.Id)); if ((!isCanOpen && !reuse) || reuse) { int insertId = req.Id; R_Order model = Mapper.Map <ReserveCreateDTO, R_Order>(req); if (req.Id <= 0) { model.OpenDate = model.CreateDate; var insert = db.Insert <R_Order>(model); //订单主表 insertId = Convert.ToInt32(insert); } else { if (req.Id > 0 && req.CyddStatus == CyddStatus.预定 && req.ReserveDate.HasValue && req.ReserveDate.Value < DateTime.Now.AddHours(-1))//判断是否超过时间,保留一小时 { throw new Exception("此预订订单已过期,当前时间已超过预订时间(" + req.ReserveDate.Value.ToString("yyyy-MM-dd HH:mm") + ")!"); } if (req.Id > 0 && req.CyddStatus == CyddStatus.预定 && req.ReserveDate.HasValue && req.ReserveDate.Value > DateTime.Now.AddHours(8))//判断是否已到预订时间 { throw new Exception("此预订订单未到预订开台时间(" + req.ReserveDate.Value.ToString("yyyy-MM-dd HH:mm") + "),但可在此预订时间提前8小时开台!"); } db.Update <R_Order>(new { CyddStatus = CyddStatus.开台, OpenDate = DateTime.Now }, x => x.Id == req.Id); } if (!reuse)//开台时更新台状态 { db.Update <R_Table>(new { CythStatus = (int)CythStatus.在用, }, p => tableIds.Contains(p.Id)); } res.OrderId = insertId; int personNumAvg = tableIds.Count() > 1 ? req.PersonNum / tableIds.Count() : req.PersonNum; //台号人均 int personNumRemainder = tableIds.Count() > 1 ? req.PersonNum % tableIds.Count() : 0; //台号余人 int eachRemainder = 0; if (tableIds != null && tableIds.Count > 0) { res.OrderTableIds = new List <int>(); int orderTableId = 0; if (req.Id <= 0) { List <R_OrderTable> otList = new List <R_OrderTable>(); foreach (var item in tableIds) { eachRemainder++; R_OrderTable obj = new R_OrderTable(); obj.R_Order_Id = insertId; obj.R_Table_Id = item; obj.CreateDate = DateTime.Now; obj.IsOpen = true; //开台标识 obj.PersonNum = personNumAvg + (personNumRemainder - eachRemainder >= 0 ? 1 : 0); obj.R_Market_Id = req.CurrentMarketId; obj.BillDate = accDate; otList.Add(obj); } db.InsertRange(otList); } else { db.Update <R_OrderTable>(new { IsOpen = true, R_Market_Id = req.CurrentMarketId, BillDate = accDate } , x => x.R_Order_Id == req.Id); } res.OrderTableIds = db.Queryable <R_OrderTable>() .Where(x => x.R_Order_Id == insertId).Select(x => x.Id).ToList(); var tableNames = db.Queryable <R_Table>() .Where(x => tableIds.Contains(x.Id)) .Select(x => x.Name).ToList(); res.TablesName = tableNames; R_OrderRecord record = new R_OrderRecord { CreateDate = DateTime.Now, R_Order_Id = insertId, CreateUser = req.CreateUser, CyddCzjlStatus = CyddStatus.开台, CyddCzjlUserType = req.UserType, Remark = string.Format( "开台操作-订单({0})开台({1})", model.OrderNo, tableNames.Join(",")), R_OrderTable_Id = res.OrderTableIds.Count == 1 ? orderTableId : 0 //订单操作纪录 }; db.Insert <R_OrderRecord>(record); } else { res = null; msg = "开台请选择餐台!"; //db.RollbackTran(); //return res; } } else { res = null; messge = "所选台号已被占用,请重新选择"; } db.CommitTran(); } catch (Exception e) { res = null; messge = e.Message; db.RollbackTran(); } msg = messge; return(res); } }