Пример #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);
            }
        }