コード例 #1
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);
            }
        }
コード例 #2
0
ファイル: OrderService.cs プロジェクト: OpuZm/NHRTest
        /// <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);
            }
        }
コード例 #3
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);
            }
        }