Ejemplo n.º 1
0
        public bool RefundDepositHandler(RefundDepositDTO req)
        {
            using (var db = new SqlSugarClient(Connection))
            {
                db.BeginTran();
                try
                {
                    string msg           = null;
                    bool   result        = false;
                    var    depositRecord = _payRep.GetModelByPayId(req.OrigianlDepositId);

                    if (depositRecord == null || depositRecord.Id <= 0)
                    {
                        msg = "无法找到此定金支付记录,重新确认!";
                    }
                    else if (depositRecord.CyddJzType != CyddJzType.定金)
                    {
                        msg = "非定金支付记录不能操作退回,重新确认!";
                    }
                    else if (depositRecord.CyddJzStatus != CyddJzStatus.已付)
                    {
                        msg = "当前定金记录已操作过转结或退款操作,请重新确认!";
                    }
                    else if (depositRecord.PayAmount <= 0)
                    {
                        msg = "未发现可退定金金额!";
                    }
                    else
                    {
                        OrderPayHistoryDTO refundObj = new OrderPayHistoryDTO();
                        var dateItem = _extendItemRepository.GetModelList(req.CompanyId, 10003).FirstOrDefault();
                        if (dateItem != null)
                        {
                            var billDateNow = Convert.ToDateTime(dateItem.ItemValue);
                            if (billDateNow > DateTime.Today)
                            {
                                msg = "账务日期不能超过当前日期!";
                            }
                            else
                            {
                                R_OrderPayRecord model = new R_OrderPayRecord();
                                model.CreateDate      = DateTime.Now;
                                model.CreateUser      = req.CurrentUserId;
                                model.R_Order_Id      = depositRecord.R_Order_Id;
                                model.CyddJzStatus    = CyddJzStatus.已退;
                                model.CyddJzType      = CyddJzType.定金;
                                model.CyddPayType     = depositRecord.CyddPayType;
                                model.PayAmount       = -depositRecord.PayAmount;
                                model.R_Market_Id     = req.CurrentMarketId;
                                model.BillDate        = billDateNow;
                                model.Remark          = "退回定金";
                                model.PId             = req.OrigianlDepositId;
                                model.R_Restaurant_Id = req.RestaurantId;
                                var orderRecord = new R_OrderRecord()
                                {
                                    CreateUser       = req.CurrentUserId,
                                    CreateDate       = DateTime.Now,
                                    CyddCzjlStatus   = CyddStatus.结账,
                                    CyddCzjlUserType = CyddCzjlUserType.员工,
                                    R_Order_Id       = depositRecord.R_Order_Id,
                                    Remark           = "退定金操作,原定金支付记录Id:" + depositRecord.Id
                                                       + ",退回金额(" + depositRecord.PayAmount.ToString("f2") + ")",
                                };
                                db.Insert(orderRecord);//记录退定金操作

                                //更新原定金记录状态为已结
                                db.Update <R_OrderPayRecord>(new { CyddJzStatus = CyddJzStatus.已结 }, x => x.Id == depositRecord.Id);

                                result = db.Insert <R_OrderPayRecord>(model) == null ? false : true;

                                db.CommitTran();
                            }
                        }
                        else
                        {
                            msg = "餐饮账务日期尚未初始化,请联系管理员!";
                        }
                    }

                    if (msg != null)
                    {
                        throw new Exception(msg);
                    }

                    return(result);
                }
                catch (Exception e)
                {
                    db.RollbackTran();
                    throw e;
                }
            }
        }
Ejemplo n.º 2
0
        public bool CancelOrderHandle(CancelOrderOperateDTO operateDTO)
        {
            //取餐饮账务日期 TypeId=10003
            var dateItem = _extendItemRepository.GetModelList(operateDTO.CompanyId, 10003).FirstOrDefault();

            using (var db = new SqlSugarClient(Connection))
            {
                bool result = false;
                try
                {
                    db.BeginTran();
                    var orderModel = db.Queryable <R_Order>().Where(x => x.Id == operateDTO.OrderId).FirstOrDefault();
                    if (orderModel == null || orderModel.Id <= 0)
                    {
                        throw new Exception("此订单不存在!");
                    }

                    if (orderModel.CyddStatus != CyddStatus.预定 && orderModel.CyddStatus != CyddStatus.开台)
                    {
                        throw new Exception(string.Format("不能取消{0}状态订单!", Enum.GetName(typeof(CyddStatus), orderModel.CyddStatus)));
                    }

                    var orderTableLsit = db.Queryable <R_OrderTable>()
                                         .Where(x => x.R_Order_Id == operateDTO.OrderId).ToList();//取当前订单关联的订单台列表

                    List <int> ordTabIds = new List <int>();
                    List <int> tabIds    = new List <int>();
                    if (orderTableLsit != null && orderTableLsit.Any())
                    {
                        ordTabIds = orderTableLsit.Select(x => x.Id).ToList();         // 取关联的订单台Id
                        tabIds    = orderTableLsit.Select(x => x.R_Table_Id).ToList(); //取关联的台Id
                    }

                    //查当前关联台号下是否同时存在的其它订单(已开台未结账的)
                    var otherOrderTableList = db.Queryable <R_OrderTable>()
                                              .Where(x => tabIds.Contains(x.R_Table_Id) &&
                                                     x.R_Order_Id != operateDTO.OrderId &&
                                                     !x.IsCheckOut && x.IsOpen).ToList();

                    var orderDetailList = db.Queryable <R_OrderDetail>()
                                          .Where(x => ordTabIds.Contains(x.R_OrderTable_Id) && x.CyddMxStatus != CyddMxStatus.保存).ToList();

                    if (orderDetailList != null && orderDetailList.Any())
                    {
                        throw new Exception("不能取消已点餐订单!");
                    }

                    if (orderModel.CyddStatus == CyddStatus.开台)//开台状态下的订单才更新餐台状态,预订订单则跳过
                    {
                        foreach (var id in tabIds)
                        {
                            // 判断当前餐台是否当前同时存在多个订单,若包含则跳过
                            if (otherOrderTableList.Where(x => x.R_Table_Id == id).Any())
                            {
                                continue;
                            }

                            db.Update <R_Table>(new { CythStatus = CythStatus.清理 }, x => x.Id == id);
                        }
                    }

                    var payList = db.Queryable <R_OrderPayRecord>()
                                  .Where(x => x.R_Order_Id == operateDTO.OrderId && x.CyddJzType == CyddJzType.定金).ToList();

                    if (payList != null && payList.Count > 0)
                    {
                        List <R_OrderPayRecord> newPayList = new List <R_OrderPayRecord>();

                        foreach (var item in payList)
                        {
                            var model = Mapper.Map <R_OrderPayRecord, R_OrderPayRecord>(item);
                            model.Id         = 0;
                            model.PayAmount  = -model.PayAmount;
                            model.CreateDate = DateTime.Now;
                            model.CreateUser = operateDTO.OperateUserId;
                            model.BillDate   = dateItem.ItemValue.ToDateOrNull();
                            newPayList.Add(model);
                        }

                        db.InsertRange(newPayList);
                    }

                    result = db.Update <R_Order>(new { CyddStatus = CyddStatus.取消 }, x => x.Id == operateDTO.OrderId);

                    //更新订单台号 状态关闭
                    result = db.Update <R_OrderTable>(new { IsOpen = false }, x => x.R_Order_Id == operateDTO.OrderId);

                    R_OrderRecord entity = new R_OrderRecord();
                    entity.CreateDate       = DateTime.Now;
                    entity.CreateUser       = operateDTO.OperateUserId;
                    entity.CyddCzjlStatus   = CyddStatus.取消;
                    entity.CyddCzjlUserType = CyddCzjlUserType.员工;
                    entity.R_OrderTable_Id  = 0;
                    entity.R_Order_Id       = operateDTO.OrderId;
                    entity.Remark           = string.Format("取消订单操作 - 订单({0})取消", orderModel.OrderNo);
                    db.Insert <R_OrderRecord>(entity);
                    db.CommitTran();
                    result = true;
                }
                catch (Exception ex)
                {
                    result = false;
                    db.RollbackTran();
                    throw new Exception(ex.Message);
                }
                return(result);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 加台操作
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        public List <int> AddTableHandle(AddTableSubmitDTO req)
        {
            List <int> res = new List <int>();

            using (var db = new SqlSugarClient(Connection))
            {
                try
                {
                    db.BeginTran();
                    List <R_OrderTable> inserOTList = new List <R_OrderTable>();
                    var dateItem = _extendItemRepository.GetModelList(req.CompanyId, 10003).FirstOrDefault();
                    if (dateItem == null)
                    {
                        throw new Exception("餐饮账务日期尚未初始化,请联系管理员");
                    }
                    if (db.Queryable <R_OrderTable>().Any(p => (p.IsOpen == true && p.IsCheckOut == false) &&
                                                          req.NewTableIds.Contains(p.R_Table_Id)))
                    {
                        throw new Exception("选择的台号已经被别的订单使用,请重新选择");
                    }
                    var orderModel = db.Queryable <R_Order>().JoinTable <R_OrderTable>((s1, s2) =>
                                                                                       s1.Id == s2.R_Order_Id).Where <R_OrderTable>((s1, s2) => s2.Id == req.OrderTableId)
                                     .Select <R_Order>("s1.*").First();
                    var tables = db.Queryable <R_Table>().Where(p => req.NewTableIds.Contains(p.Id))
                                 .Select(p => p.Name).ToList();

                    db.Update <R_Table>(new { CythStatus = CythStatus.在用 }, p => req.NewTableIds.Contains(p.Id));

                    foreach (var item in req.NewTableIds)
                    {
                        inserOTList.Add(new R_OrderTable
                        {
                            R_Order_Id  = orderModel.Id,
                            R_Table_Id  = item,
                            CreateDate  = DateTime.Now,
                            PersonNum   = 0,
                            IsCheckOut  = false,
                            IsOpen      = true,
                            IsLock      = false,
                            BillDate    = Convert.ToDateTime(dateItem.ItemValue),
                            R_Market_Id = req.CurrentMarketId
                        });
                    }

                    var orderTableIds = db.InsertRange <R_OrderTable>(inserOTList).ToList();

                    var orderTables = db.Queryable <R_OrderTable>()
                                      .Where(p => p.R_Order_Id == orderModel.Id).ToList();

                    int personNumAvg = orderTables.Count() > 1 ?
                                       orderModel.PersonNum / orderTables.Count() : orderModel.PersonNum; //台号人均
                    int personNumRemainder = orderTables.Count() > 1 ?
                                             orderModel.PersonNum % orderTables.Count() : 0;              //台号余人
                    int eachRemainder = 0;

                    if (orderTables != null && orderTables.Count() > 0)
                    {
                        foreach (var item in orderTableIds)
                        {
                            res.Add(Convert.ToInt32(item));
                        }
                        foreach (var orderTable in orderTables)
                        {
                            eachRemainder++;
                            orderTable.PersonNum = personNumAvg + (personNumRemainder - eachRemainder >= 0 ? 1 : 0);
                        }
                        db.UpdateRange <R_OrderTable>(orderTables);//更新订单台号人数
                    }

                    R_OrderRecord record = new R_OrderRecord
                    {
                        CreateDate       = DateTime.Now,
                        R_Order_Id       = orderModel.Id,
                        CreateUser       = req.CreateUser,
                        CyddCzjlStatus   = CyddStatus.开台,
                        CyddCzjlUserType = CyddCzjlUserType.员工,
                        Remark           = string.Format(
                            "开台操作-订单({0})开台({1})", orderModel.OrderNo, tables.Join(",")),
                        R_OrderTable_Id = orderTableIds.Count == 1 ? Convert.ToInt32(orderTableIds[0]) : 0
                    };

                    db.Insert <R_OrderRecord>(record);
                    db.CommitTran();
                }
                catch (Exception ex)
                {
                    db.RollbackTran();
                    throw ex;
                }
            }
            return(res);
        }
Ejemplo n.º 4
0
        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);
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 换桌操作处理
        /// </summary>
        /// <param name="handleDto"></param>
        /// <returns></returns>
        public bool ChangeTableHandle(ChangeTableSubmitDTO handleDto)
        {
            using (var db = new SqlSugarClient(Connection))
            {
                bool res = true;
                try
                {
                    var userInfo = OperatorProvider.Provider.GetCurrent();
                    db.BeginTran();
                    var orderTable = db.Queryable <R_OrderTable>()
                                     .Where(p => p.Id == handleDto.OrderTableId)
                                     .FirstOrDefault();
                    var newTable = db.Queryable <R_Table>()
                                   .FirstOrDefault(p => p.Id == handleDto.NewTableId);
                    if (newTable.CythStatus == CythStatus.在用)
                    {
                        throw new Exception(string.Format(
                                                "所选台号({0})已被使用,请重新选择!", newTable.Name));
                    }

                    //var orderTableList = OrderRep.GetOrderTableListBy(handleDto.OldTableId, SearchTypeBy.台号Id);
                    var orderTableList = db.Queryable <R_OrderTable>()
                                         .Where(x => x.R_Table_Id == handleDto.OldTableId &&
                                                !x.IsCheckOut && x.IsOpen)
                                         .ToList();

                    db.Update <R_OrderTable>(new
                    {
                        R_Table_Id = handleDto.NewTableId
                    }, p => p.Id == handleDto.OrderTableId);

                    if (orderTableList.Count == 1)
                    {
                        db.Update <R_Table>(new
                        {
                            CythStatus = CythStatus.清理
                        }, p => p.Id == handleDto.OldTableId);
                    }

                    db.Update <R_Table>(new
                    {
                        CythStatus = CythStatus.在用
                    }, p => p.Id == handleDto.NewTableId);

                    var order = db.Queryable <R_Order>()
                                .Where(x => x.Id == orderTable.R_Order_Id)
                                .FirstOrDefault();
                    var market    = db.Queryable <R_Market>().FirstOrDefault(p => p.Id == order.R_Market_Id);
                    var resturant = db.Queryable <R_Restaurant>().FirstOrDefault(p => p.Id == order.R_Restaurant_Id);

                    var oldTableName = db.Queryable <R_Table>()
                                       .Where(x => x.Id == handleDto.OldTableId)
                                       .Select(x => x.Name)
                                       .FirstOrDefault();

                    R_OrderRecord record = new R_OrderRecord
                    {
                        CreateDate      = DateTime.Now,
                        R_Order_Id      = orderTable.R_Order_Id,
                        R_OrderTable_Id = handleDto.OrderTableId,
                        CyddCzjlStatus  = CyddStatus.换桌,
                        Remark          = string.Format("订单({0})换桌从台[{1}]换至:[{2}]",
                                                        order.OrderNo, oldTableName, newTable.Name),
                        CyddCzjlUserType = CyddCzjlUserType.员工,
                        CreateUser       = handleDto.CreateUser
                    };
                    db.Insert <R_OrderRecord>(record);

                    var areaIds = newTable.R_Area_Id;
                    var prints  = db.Queryable <Printer>()
                                  .JoinTable <R_WeixinPrint>((s1, s2) => s1.Id == s2.Print_Id)
                                  .JoinTable <R_WeixinPrint, R_WeixinPrintArea>((s1, s2, s3) => s2.Id == s3.R_WeixinPrint_Id)
                                  .Where <R_WeixinPrint, R_WeixinPrintArea>((s1, s2, s3) => s1.IsDelete == false &&
                                                                            s2.PrintType == PrintType.换台区域出单 && areaIds == s3.R_Area_Id).Select("s1.*").ToList();
                    var printerList = prints.Distinct().ToList();
                    if (printerList.Any())
                    {
                        string cpdyThGuid = string.Empty;   //出品打印按桌号出生成标识
                        cpdyThGuid = orderTable.Id + DateTime.Now.ToString("yyyyMMddHHmmssfff");
                        List <Cpdy> cydyInsert = new List <Cpdy>();
                        foreach (var print in printerList)
                        {
                            cydyInsert.Add(new Cpdy
                            {
                                cymxxh00 = orderTable.Id,
                                cyzdxh00 = orderTable.R_Order_Id,
                                cymxdm00 = market.Name,
                                cymxmc00 = string.Format("订单号:({0}) 台号:({1}) 转至 台号:({2})", order.OrderNo, oldTableName, newTable.Name),
                                cymxdw00 = userInfo.UserName,
                                cymxsl00 = string.Empty,
                                cymxdybz = false,
                                cymxyj00 = print.IpAddress,
                                cymxclbz = "0",
                                cymxczrq = DateTime.Now,
                                cymxzdbz = "2",
                                //cymxyq00 = detail.CyddMxName,
                                //cymxzf00 = detail.CyddMxName,
                                //cymxpc00 = detail.CyddMxName,
                                cymxczy0 = userInfo.UserName,
                                cymxfwq0 = print.PcName,
                                cymxczdm = userInfo.UserCode,
                                cymxje00 = "",
                                cymxth00 = oldTableName,
                                cymxrs00 = order.PersonNum.ToString(),
                                cymxct00 = resturant.Name,
                                cymxzdid = cpdyThGuid,
                                cymxbt00 = "换台单",
                                cymxzwrq = DateTime.Now.ToString("yyyy-MM-dd"),
                                cpdysdxh = cpdyThGuid,
                                cymxdk00 = print.Name,
                                cymxgdbz = false,
                                cpdyfsl0 = market.Name
                            });
                        }
                        db.InsertRange <Cpdy>(cydyInsert);
                    }

                    db.CommitTran();
                }
                catch (Exception e)
                {
                    res = false;
                    db.RollbackTran();
                    throw e;
                }

                return(res);
            }
        }
Ejemplo n.º 6
0
        /// <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);
            }
        }
Ejemplo n.º 7
0
        public bool JoinTableHandle(JoinTableSubmitDTO handleDto)
        {
            using (var db = new SqlSugarClient(Connection))
            {
                bool result = true;
                try
                {
                    var fromOrderModel = db.Queryable <R_Order>()
                                         .Where(x => x.Id == handleDto.FromTableObj.OrderId)
                                         .FirstOrDefault();
                    var toOrderModel = db.Queryable <R_Order>()
                                       .Where(x => x.Id == handleDto.ToTableObj.OrderId)
                                       .FirstOrDefault();
                    var fromTableModel = db.Queryable <R_Table>()
                                         .FirstOrDefault(p => p.Id == handleDto.FromTableObj.TableId);
                    var toTableModel = db.Queryable <R_Table>()
                                       .FirstOrDefault(p => p.Id == handleDto.ToTableObj.TableId);
                    if (fromOrderModel.CyddStatus != CyddStatus.点餐 && fromOrderModel.CyddStatus != CyddStatus.开台)
                    {
                        throw new Exception("当前订单状态异常,请退出后重新操作");
                    }
                    if (toOrderModel.CyddStatus != CyddStatus.开台 && toOrderModel.CyddStatus != CyddStatus.点餐)
                    {
                        throw new Exception("并台的订单状态异常,请退出后重新操作");
                    }
                    if (fromTableModel.CythStatus != CythStatus.在用)
                    {
                        throw new Exception("当前台号状态异常,请退出后重新操作");
                    }
                    if (toTableModel.CythStatus != CythStatus.在用)
                    {
                        throw new Exception("并台的台号状态异常,请退出后重新操作");
                    }

                    var originalOrderList = db.Queryable <R_OrderTable>()
                                            .Where(x => x.R_Order_Id == handleDto.FromTableObj.OrderId)
                                            .ToList();
                    var originalTableList = db.Queryable <R_OrderTable>()
                                            .Where(x =>
                                                   x.R_Table_Id == handleDto.FromTableObj.TableId &&
                                                   !x.IsCheckOut && x.IsOpen)
                                            .ToList();
                    db.BeginTran();
                    //此订单只有一张台时,更改原订单状态
                    if (originalOrderList.Count == 1)
                    {
                        db.Update <R_Order>(new { CyddStatus = CyddStatus.取消 }, x => x.Id == handleDto.FromTableObj.OrderId);
                    }

                    db.Delete <R_OrderTable>(x => x.Id == handleDto.FromTableObj.OrderTableId);//删除原订单台号记录

                    if (originalTableList.Count == 1)
                    {
                        db.Update <R_Table>(new
                        {
                            CythStatus = CythStatus.空置
                        }, x => x.Id == handleDto.FromTableObj.TableId);
                    }

                    //更新订单明细关联订单台号信息
                    db.Update <R_OrderDetail>(
                        new
                    {
                        R_OrderTable_Id = handleDto.ToTableObj.OrderTableId
                    },
                        x => x.R_OrderTable_Id == handleDto.FromTableObj.OrderTableId);

                    //插入两条操作订单记录
                    R_OrderRecord entity = new R_OrderRecord();
                    entity.CreateDate       = DateTime.Now;
                    entity.CreateUser       = handleDto.UserId;
                    entity.CyddCzjlStatus   = CyddStatus.并台;
                    entity.CyddCzjlUserType = CyddCzjlUserType.员工;
                    entity.R_OrderTable_Id  = handleDto.FromTableObj.OrderTableId;
                    entity.R_Order_Id       = handleDto.FromTableObj.OrderId;
                    entity.Remark           = string.Format(
                        "并台操作 - 把订单({0})的台号[{1}]的菜品信息,并台到订单({2})下的台号[{3}]中",
                        fromOrderModel.OrderNo, fromTableModel.Name,
                        toOrderModel.OrderNo, toTableModel.Name);
                    db.Insert <R_OrderRecord>(entity);

                    entity = new R_OrderRecord
                    {
                        CreateDate       = DateTime.Now,
                        CreateUser       = handleDto.UserId,
                        CyddCzjlStatus   = CyddStatus.并台,
                        CyddCzjlUserType = CyddCzjlUserType.员工,
                        R_OrderTable_Id  = handleDto.ToTableObj.OrderTableId,
                        R_Order_Id       = handleDto.ToTableObj.OrderId,
                        Remark           = string.Format(
                            "并台操作 - 收到订单({0})的台号[{1}]的菜品信息,并台到订单({2})下的台号[{3}]中",
                            fromOrderModel.OrderNo, fromTableModel.Name,
                            toOrderModel.OrderNo, toTableModel.Name)
                    };

                    db.Insert <R_OrderRecord>(entity);

                    //OrderPayRecord
                    db.Update <R_OrderPayRecord>(new { R_Order_Id = handleDto.ToTableObj.OrderId }, x => x.R_Order_Id == handleDto.FromTableObj.OrderId && x.CyddJzStatus == CyddJzStatus.已付 && x.PId == 0);
                    db.CommitTran();
                }
                catch (Exception e)
                {
                    result = false;
                    db.RollbackTran();
                    throw e;
                }
                return(result);
            }
        }