Beispiel #1
0
        public BookingCheckOutDto BookingCheck(BookingCheckInputDto checkDto)
        {
            var checkKey   = "dds_" + checkDto.HotelId + "_" + checkDto.RoomTypeId + "_" + checkDto.RatePlanId + "_" + checkDto.CheckIn + "_" + checkDto.CheckOut;
            var bookOutDto = new BookingCheckOutDto();

            try
            {
                DateTime startTime = DateTime.Now;
                bookOutDto.DayPrice = new List <RateQuotasPrice>();
                bookOutDto.IsBook   = true;
                bookOutDto.Message  = "正常可预定";

                int RoomNum = 1;//库存
                //RatePlanConfrimJsonEt RequestEt = new RatePlanConfrimJsonEt();
                var RequestEt = new RatePlanConfrimJsonEt
                {
                    HotelCode     = checkDto.HotelId,
                    RatePlanCode  = checkDto.RatePlanId,
                    RoomTypeCode  = checkDto.RoomTypeId,
                    CheckIn       = checkDto.CheckIn.ToString("yyyy-MM-dd"),
                    CheckOut      = checkDto.CheckOut.ToString("yyyy-MM-dd"),
                    NumberOfUnits = RoomNum,
                    AdultCount    = 2,
                    ChildCount    = 0
                };


                ///API_用户认证失败 = 401, API_内部程序出错 = 402,API_订单号已存在 = 403,API_价格不正确 = 404,API_新错误代码 = 405,程序代码出错 = 501,成功 = 200,无数据返回 = 201
                //var response = daDuShiApiClient.RequestData(OperationCode.获取价格确认数据, RequestEt
                //    , () =>
                //    {
                //        return OrderDataOpEt.Availability(RequestEt);
                //    });

                var response = new WebServiceResponse <HotelInfoJsonEt>();
                try
                {
                    response = OrderDataOpEt.Availability(RequestEt);
                    if (response == null || !response.Successful && response.ResponseEt == null || response.ResponseEt.RatePlanList.Count == 0)
                    {
                        RequestEt = new RatePlanConfrimJsonEt
                        {
                            HotelCode     = checkDto.HotelId,
                            RatePlanCode  = checkDto.RatePlanId,
                            RoomTypeCode  = checkDto.RoomTypeId,
                            CheckIn       = checkDto.CheckIn.ToString("yyyy-MM-dd"),
                            CheckOut      = checkDto.CheckOut.ToString("yyyy-MM-dd"),
                            NumberOfUnits = RoomNum,
                            AdultCount    = 1,
                            ChildCount    = 0
                        };
                        response = new WebServiceResponse <HotelInfoJsonEt>();
                    }
                }
                catch (Exception ex)
                {
                    response = OrderDataOpEt.Availability(RequestEt);
                }
                TimeSpan ts = checkDto.CheckOut.Subtract(checkDto.CheckIn);
                if (response != null && response.Successful && response.ResponseEt != null && response.ResponseEt.RatePlanList.Count > 0)
                {
                    bookOutDto.IsBook = true;


                    var rate = new TaobaoRate();
                    try
                    {
                        XhotelRateGetRequest req = new XhotelRateGetRequest();
                        req.OutRid = checkDto.OuterId;
                        req.Rpid   = checkDto.Rpid;
                        var tmallApiClient         = new TmallApiClient(Shop);
                        XhotelRateGetResponse resp = tmallApiClient.Execute(req);
                        if (resp != null && !resp.IsError && resp.Rate != null && !string.IsNullOrWhiteSpace(resp.Rate.InventoryPrice))
                        {
                            rate = JsonConvert.DeserializeObject <TaobaoRate>(resp.Rate.InventoryPrice);
                        }
                    }
                    catch (Exception ex)
                    {
                    }
                    bool bianhua = false;

                    bookOutDto.DayPrice = response.ResponseEt.RatePlanList[0].RateList.Select(u =>
                                                                                              new RateQuotasPrice
                    {
                        Date  = u.EffectiveDate,
                        Price = (GetSalePrice(Convert.ToDateTime(u.EffectiveDate), false, u.AmountBeforeTax, rate, ref bianhua, checkDto.IsCustomer)

                                 ).ToTaoBaoPrice(),
                        Quota = RoomNum    //默认库存
                    }).ToList();

                    //记录试单信息
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            bool IsFull   = false;
                            string Remark = bookOutDto.Message;
                            if (checkDto.IsCustomer == 0)
                            {
                                Remark = "程序请求";
                            }
                            AliTripValidate av = new AliTripValidate();
                            av.CheckInTime     = checkDto.CheckIn;
                            av.CheckOutTime    = checkDto.CheckOut;
                            av.RatePlanCode    = checkDto.RatePlanCode;
                            av.IsFull          = IsFull;
                            av.HotelId         = checkDto.HotelId;
                            av.RoomId          = checkDto.RoomTypeId;
                            av.RatePlanId      = checkDto.RatePlanId;
                            av.CreateTime      = DateTime.Now;
                            av.Channel         = 10;
                            av.Shop            = (int)Shop;
                            av.Remark          = Remark;
                            SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();
                            string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=10", checkDto.HotelId);
                            WebHttpRequest.Get(url);
                        }
                        catch
                        {
                        }
                    });
                }
                else
                {
                    string responseResult = "满房";
                    if (response != null && !response.Successful && !string.IsNullOrWhiteSpace(response.ErrMsg))
                    {
                        responseResult = response.ErrMsg;
                    }
                    try
                    {
                        var falseCount      = 1;
                        var falseCacheCount = CacheHelper.GetCache("falseCount");//先读取缓存
                        if (checkDto.IsCustomer == 1)
                        {
                            if (falseCacheCount != null)//如果没有该缓存,默认为1
                            {
                                falseCount = (int)falseCacheCount + 1;
                            }
                            CacheHelper.SetCache("falseCount", falseCount, 1800);//添加缓存
                        }
                        //如果试单失败为双数直接拿缓存值输出,单数时为失败
                        bool tongguo = true;

                        int NowHour   = DateTime.Now.Hour;   //当前时间的时数
                        int NowMinute = DateTime.Now.Minute; //当前时间的分钟数
                        //if (falseCount % 6 == 0 || checkDto.IsCustomer == 0)
                        if (checkDto.IsCustomer == 0)
                        {
                            bookOutDto.Message = responseResult;
                            bookOutDto.IsBook  = false;
                        }
                        else if (falseCount % 4 == 0)
                        {
                            var rate = new TaobaoRate();
                            XhotelRateGetRequest req = new XhotelRateGetRequest();
                            req.OutRid = checkDto.OuterId;
                            req.Rpid   = checkDto.Rpid;
                            var tmallApiClient         = new TmallApiClient(Shop);
                            XhotelRateGetResponse resp = tmallApiClient.Execute(req);
                            if (resp != null && !resp.IsError && resp.Rate != null && !string.IsNullOrWhiteSpace(resp.Rate.InventoryPrice))
                            {
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(resp.Rate.InventoryPrice);
                            }
                            var totalDayNum = (int)(checkDto.CheckOut.Date - checkDto.CheckIn).TotalDays;
                            var rates       = new List <inventory_price>();
                            //判断是否已经更新过飞猪房态,0为没更新过,1为已更新过为不可以预定
                            int IsClose = 0;
                            for (int i = 0; i < totalDayNum; i++)
                            {
                                var inventory_price = rate.inventory_price.Where(a => a.date == checkDto.CheckIn.AddDays(i).ToString("yyyy-MM-dd")).FirstOrDefault();
                                if (inventory_price.price <= 0 || inventory_price.price > 4999900)
                                {
                                    IsClose            = 1;
                                    bookOutDto.Message = responseResult;
                                    bookOutDto.IsBook  = false;
                                }
                                else
                                {
                                    rates.Add(inventory_price);
                                }
                            }

                            if (IsClose == 0)
                            {
                                bookOutDto.DayPrice = rates.Select(u =>
                                                                   new RateQuotasPrice
                                {
                                    Date  = u.date,
                                    Price = u.price,
                                    Quota = 1
                                }).ToList();
                                bookOutDto.Message = "正常可预定";
                                bookOutDto.IsBook  = true;
                                logWriter.Write("试单失败后通过(大都市):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, responseResult);
                            }
                        }
                        else if (falseCount % 3 == 0)
                        {
                            var rate = new TaobaoRate();
                            XhotelRateGetRequest req = new XhotelRateGetRequest();
                            req.OutRid = checkDto.OuterId;
                            req.Rpid   = checkDto.Rpid;
                            var tmallApiClient         = new TmallApiClient(Shop);
                            XhotelRateGetResponse resp = tmallApiClient.Execute(req);
                            if (resp != null && !resp.IsError && resp.Rate != null && !string.IsNullOrWhiteSpace(resp.Rate.InventoryPrice))
                            {
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(resp.Rate.InventoryPrice);
                            }
                            var totalDayNum = (int)(checkDto.CheckOut.Date - checkDto.CheckIn).TotalDays;
                            var rates       = new List <inventory_price>();
                            //判断是否已经更新过飞猪房态,0为没更新过,1为已更新过为不可以预定
                            int IsClose = 0;
                            for (int i = 0; i < totalDayNum; i++)
                            {
                                var inventory_price = rate.inventory_price.Where(a => a.date == checkDto.CheckIn.AddDays(i).ToString("yyyy-MM-dd")).FirstOrDefault();
                                if (inventory_price.price <= 0 || inventory_price.price > 4999900)
                                {
                                    IsClose            = 1;
                                    bookOutDto.Message = responseResult;
                                    bookOutDto.IsBook  = false;
                                }
                                else
                                {
                                    rates.Add(inventory_price);
                                }
                            }

                            if (IsClose == 0)
                            {
                                Random ran          = new Random();
                                int    RandomResult = ran.Next(80, 200);

                                bookOutDto.DayPrice = rates.Select(u =>
                                                                   new RateQuotasPrice
                                {
                                    Date  = u.date,
                                    Price = u.price + RandomResult * 100m,
                                    Quota = 1
                                }).ToList();
                                bookOutDto.Message = "正常可预定";
                                bookOutDto.IsBook  = true;
                                logWriter.Write("试单失败后通过(大都市):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, responseResult);
                            }
                        }
                        else
                        {
                            logWriter.Write("试单失败后(大都市):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, responseResult);
                            bookOutDto.Message = responseResult;
                            bookOutDto.IsBook  = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        logWriter.Write("试单失败后报错(大都市):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败原因{3},报错{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, responseResult, ex.ToString());
                        bookOutDto.Message = responseResult;
                        bookOutDto.IsBook  = false;
                    }

                    //记录试单信息并关闭房态
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            bool IsFull   = true;
                            string Remark = responseResult;
                            if (checkDto.IsCustomer == 0)
                            {
                                Remark = "程序请求";
                                IsFull = false;
                            }
                            AliTripValidate av = new AliTripValidate();
                            av.CheckInTime     = checkDto.CheckIn;
                            av.CheckOutTime    = checkDto.CheckOut;
                            av.RatePlanCode    = checkDto.RatePlanCode;
                            av.IsFull          = IsFull;
                            av.HotelId         = checkDto.HotelId;
                            av.RoomId          = checkDto.RoomTypeId;
                            av.RatePlanId      = checkDto.RatePlanId;
                            av.CreateTime      = DateTime.Now;

                            av.Channel = 10;
                            av.Shop    = (int)Shop;
                            av.Remark  = Remark;
                            SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();
                        }
                        catch
                        {
                        }
                        Thread.Sleep(5000);
                        string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=10", checkDto.HotelId);
                        WebHttpRequest.Get(url);
                    });
                }
            }
            catch (Exception ex)
            {
                bookOutDto.IsBook  = false;
                bookOutDto.Message = string.Format("满房,系统异常:{0}", ex.ToString());
            }
            if (checkDto.IsCustomer == 0)
            {
                try
                {
                    BookingCheckOutDto CheckOut = new BookingCheckOutDto();
                    var check = CacheHelper.GetCache(checkKey); //先读取缓存
                    if (check != null)                          //如果没有该缓存
                    {
                        CheckOut = Newtonsoft.Json.JsonConvert.DeserializeObject <BookingCheckOutDto>(check.ToString(), new JsonSerializerSettings
                        {
                            Error = delegate(object obj, Newtonsoft.Json.Serialization.ErrorEventArgs args)
                            {
                                args.ErrorContext.Handled = true;
                            }
                        });
                        if (CheckOut != null)
                        {
                            return(CheckOut);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
            CacheHelper.SetCache(checkKey, Newtonsoft.Json.JsonConvert.SerializeObject(bookOutDto), 8);//添加缓存
            return(bookOutDto);
        }
Beispiel #2
0
        public BookingCheckOutDto BookingCheck(BookingCheckInputDto checkDto)
        {
            var bookCheckResult = new BookingCheckOutDto();
            var roomStatus      = bigTreeRepository.GetRoomRateStatus(checkDto.RatePlanId, checkDto.CheckIn, checkDto.CheckOut);

            if (roomStatus.Count > 0)
            {
                List <RateQuotasPrice> rqpList = new List <RateQuotasPrice>();
                foreach (var item in roomStatus)
                {
                    if (item.RoomStatus == 1)
                    {
                        int?            price = null;
                        RateQuotasPrice rqp   = new RateQuotasPrice();
                        rqp.Date = item.StartDate.ToString("yyyy-MM-dd");
                        if (Shop == ShopType.YinJi)
                        {
                            rqp.Price = (price ?? item.SalePrice + 20) * 100;
                        }
                        else if (Shop == ShopType.LingZhong)
                        {
                            rqp.Price = (price ?? item.SalePrice + 25) * 100;
                        }
                        else if (Shop == ShopType.YinJiGuoLv)
                        {
                            rqp.Price = (price ?? item.SalePrice - 1) * 100;
                        }

                        if (item.Status == 1)
                        {
                            rqp.Quota = 8;
                        }
                        else
                        {
                            bookCheckResult.IsBook  = false;
                            bookCheckResult.Message = "房量不足";
                        }
                        rqpList.Add(rqp);
                    }
                    else
                    {
                        bookCheckResult.IsBook  = false;
                        bookCheckResult.Message = "满房";
                    }
                }

                if (rqpList.Count > 0)
                {
                    bookCheckResult.DayPrice = rqpList;
                    if (rqpList.Where(u => u.Quota == 0).Count() > 0)
                    {
                        bookCheckResult.IsBook  = false;
                        bookCheckResult.Message = "房量不足";
                    }
                    else
                    {
                        bookCheckResult.IsBook  = true;
                        bookCheckResult.Message = "检测可预定";
                    }
                }
            }
            else
            {
                bookCheckResult.IsBook  = false;
                bookCheckResult.Message = "不存在报价信息";
            }

            return(bookCheckResult);
        }
Beispiel #3
0
        /// <summary>
        /// 试单
        /// </summary>
        /// <param name="checkDto"></param>
        /// <returns></returns>
        public BookingCheckOutDto BookingCheck(BookingCheckInputDto checkDto)
        {
            var checkKey = "xc_" + checkDto.HotelId + "_" + checkDto.RoomTypeId + "_" + checkDto.RatePlanId + "_" + checkDto.CheckIn + "_" + checkDto.CheckOut;

            bool isPromotion = false;//isPromotion是否为促销产品,true为促销

            if (checkDto.RatePlanCode.Contains("_c"))
            {
                ctripApiClient = new CtripApiClient(Ctrip.Config.ApiConfigManager.ZhiHeC);
                isPromotion    = true;
            }
            BookingCheckOutDto bookingCheckOut = new BookingCheckOutDto();

            bookingCheckOut.IsBook   = true;
            bookingCheckOut.Message  = "正常可预定";
            bookingCheckOut.DayPrice = new List <RateQuotasPrice>();
            //如果查询库存为2时可以预定,折输出库存为2,否则为1
            int RoomNum = checkDto.RoomNum;

            if (RoomNum == 1 && !isPromotion)
            {
                RoomNum = 2;
            }
            try
            {
                string lastTime = "23:59";
                var    resp     = ctripApiClient.CheckOrderAvail(checkDto.HotelId, "501", checkDto.RatePlanId, RoomNum, 1, checkDto.CheckIn, checkDto.CheckOut, lastTime);

                if (resp != null && resp.AvailabilityStatus == "NoAvailability")
                {
                    if (resp.Error != null && resp.Error.Message.Contains("Invalid number of rooms"))
                    {
                        RoomNum = 1;
                        //Task.Factory.StartNew(() =>
                        //{
                        //    var roomTypeService = new RoomTypeService(Shop, Entities.Enum.ProductChannel.Ctrip);
                        //    roomTypeService.ModifyRoomType(checkDto.HotelId);
                        //});
                        resp = ctripApiClient.CheckOrderAvail(checkDto.HotelId, "501", checkDto.RatePlanId, RoomNum, 1, checkDto.CheckIn, checkDto.CheckOut, lastTime);
                    }
                }

                if (resp != null && resp.AvailabilityStatus == "AvailableForSale")
                {
                    if (resp.RoomStay != null && resp.RoomStay.RoomRates != null)
                    {
                        var rate = new TaobaoRate();
                        try
                        {
                            XhotelRateGetRequest req = new XhotelRateGetRequest();
                            req.OutRid = checkDto.OuterId;
                            req.Rpid   = checkDto.Rpid;
                            var tmallApiClient = new TmallApiClient(Shop);
                            XhotelRateGetResponse GetRateResp = tmallApiClient.Execute(req);
                            if (resp != null && !GetRateResp.IsError && GetRateResp.Rate != null && !string.IsNullOrWhiteSpace(GetRateResp.Rate.InventoryPrice))
                            {
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(GetRateResp.Rate.InventoryPrice);
                            }
                        }
                        catch (Exception ex)
                        {
                        }
                        //var hotelExtension = hotelRepository.GetHotelExtension(checkDto.HotelId, (int)ProductChannel.Ctrip);
                        var roomRates    = resp.RoomStay.RoomRates.FirstOrDefault();
                        var isCommission = resp.RoomStay.RatePlans[0].SupplierID > 0;
                        //获取是否为金牌酒店
                        decimal ctripStarRate = 0;
                        //var ctripHotel = hotelRepository.GetCtripHotel(checkDto.HotelId);
                        //金牌
                        //ctripStarRate = ctripHotel.CtripStarRate;
                        //是否发生变价
                        bool bianhua = false;
                        //是否需要马上更新
                        bool isUpdate = false;

                        bookingCheckOut.DayPrice = roomRates.Rates.Select(u =>
                                                                          new RateQuotasPrice
                        {
                            Date  = u.EffectiveDate,
                            Price = (GetSalePrice(Convert.ToDateTime(u.EffectiveDate), u.Cost, u.AmountBeforeTax, isCommission, rate, isPromotion, ref bianhua, ref isUpdate, ctripStarRate, checkDto.IsCustomer)

                                     ).ToTaoBaoPrice(),
                            Quota = RoomNum//默认库存
                        }).ToList();

                        //记录试单信息
                        Task.Factory.StartNew(() =>
                        {
                            try
                            {
                                bool IsFull   = false;
                                string Remark = bookingCheckOut.Message;
                                if (bianhua)
                                {
                                    Remark = "变价";
                                    //如果为促销产品关房处理因为缓存没那么快更新完
                                    //if(isPromotion)
                                    //{
                                    //    IsFull = true;
                                    //}
                                }
                                else if (checkDto.IsCustomer == 0)
                                {
                                    Remark = "程序请求";
                                }
                                AliTripValidate av = new AliTripValidate();
                                av.CheckInTime     = checkDto.CheckIn;
                                av.CheckOutTime    = checkDto.CheckOut;
                                av.RatePlanCode    = checkDto.RatePlanCode;
                                av.IsFull          = IsFull;
                                av.HotelId         = checkDto.HotelId;
                                av.RoomId          = checkDto.RoomTypeId;
                                av.RatePlanId      = checkDto.RatePlanId;
                                av.CreateTime      = DateTime.Now;

                                av.Channel = 8;
                                av.Shop    = (int)Shop;
                                av.Remark  = Remark;
                                SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();

                                //发生变价时更新rp
                                //if (bianhua)
                                //{

                                //}
                                //如果发生变价时先更新缓存,然后再更新飞猪报价
                                Task.Factory.StartNew(() =>
                                {
                                    try
                                    {
                                        if (isPromotion)
                                        {
                                            //更新促销价格缓存
                                            string urlCtripPrice = string.Format("http://47.107.101.107:8186/CtripPricePro/CtripPromorion.ashx?key=dfiqergnsdkjdiunqebgaupsdh&code={0}&checkin={1}&checkout={2}&cache=1&account=zhpromotion&opt=update", checkDto.HotelId, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
                                            WebHttpRequest.Get(urlCtripPrice);
                                        }
                                        else
                                        {
                                            //更新价格缓存
                                            string urlCtripPrice = string.Format("http://47.107.101.107:8186/CtripPricePro/CtripPriceApi.ashx?key=dfiqergnsdkjdiunqebgaupsdh&code={0}&rids={1}&checkin={2}&checkout={3}&cache=0", checkDto.HotelId, checkDto.RatePlanId, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
                                            WebHttpRequest.Get(urlCtripPrice);
                                        }
                                    }
                                    catch
                                    {
                                    }
                                    if (checkDto.IsCustomer != 0 && !isUpdate)
                                    {
                                        Thread.Sleep(13000);
                                    }
                                    string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=8", checkDto.HotelId);
                                    WebHttpRequest.Get(url);
                                });
                            }
                            catch
                            {
                            }
                        });
                    }
                }
                else
                {
                    try
                    {
                        var falseCount      = 1;
                        var falseCacheCount = CacheHelper.GetCache("falseCount");//先读取缓存
                        //记录客户请求失败次数
                        if (checkDto.IsCustomer == 1)
                        {
                            if (falseCacheCount != null)//如果没有该缓存,默认为1
                            {
                                falseCount = (int)falseCacheCount + 1;
                            }
                            CacheHelper.SetCache("falseCount", falseCount, 1800);//添加缓存
                        }

                        bool tongguo = false;

                        //在0点15分到4点为试单失败为双数直接拿缓存值输出,其余的都通过
                        int NowHour   = DateTime.Now.Hour;   //当前时间的时数
                        int NowMinute = DateTime.Now.Minute; //当前时间的分钟数
                        if (falseCount % 2 == 0)
                        {
                            tongguo = true;
                        }
                        else if ((NowHour == 18 && NowMinute >= 30) || (NowHour < 8 && NowHour >= 19))
                        {
                            if (falseCount % 2 == 0 || falseCount % 5 == 0 || falseCount % 7 == 0)
                            {
                                tongguo = true;
                            }
                        }

                        //如果试单失败为双数直接拿缓存值输出,单数时为失败
                        //if (falseCount % 3 == 0)
                        if (checkDto.IsCustomer == 0)
                        {
                            bookingCheckOut.Message = resp.Error.Message;
                            bookingCheckOut.IsBook  = false;
                        }
                        else if (tongguo)
                        {
                            var rate = new TaobaoRate();
                            XhotelRateGetRequest request = new XhotelRateGetRequest();
                            request.OutRid = checkDto.OuterId;
                            request.Rpid   = checkDto.Rpid;
                            var tmallApiClient             = new TmallApiClient(Shop);
                            XhotelRateGetResponse response = tmallApiClient.Execute(request);
                            if (response != null && !response.IsError && response.Rate != null && !string.IsNullOrWhiteSpace(response.Rate.InventoryPrice))
                            {
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(response.Rate.InventoryPrice);
                                //try
                                //{
                                //    rate = JsonConvert.DeserializeObject<TaobaoRate>(response.Rate.InventoryPrice);
                                //}
                                //catch (Exception ex)
                                //{
                                //}
                            }
                            var totalDayNum = (int)(checkDto.CheckOut.Date - checkDto.CheckIn).TotalDays;
                            var rates       = new List <inventory_price>();
                            //判断是否已经更新过飞猪房态,0为没更新过,1为已更新过为不可以预定
                            int IsClose = 0;
                            for (int i = 0; i < totalDayNum; i++)
                            {
                                var inventory_price = rate.inventory_price.Where(a => a.date == checkDto.CheckIn.AddDays(i).ToString("yyyy-MM-dd")).FirstOrDefault();
                                if (inventory_price.price <= 0 || inventory_price.price > 4999900)
                                {
                                    IsClose = 1;
                                    bookingCheckOut.Message = resp.Error.Message;
                                    bookingCheckOut.IsBook  = false;
                                }
                                else
                                {
                                    rates.Add(inventory_price);
                                }
                            }
                            if (IsClose == 0)
                            {
                                bookingCheckOut.DayPrice = rates.Select(u =>
                                                                        new RateQuotasPrice
                                {
                                    Date  = u.date,
                                    Price = u.price,
                                    Quota = 1//checkDto.RoomNum
                                }).ToList();
                                bookingCheckOut.Message = "正常可预定";
                                bookingCheckOut.IsBook  = true;
                                //logWriter.Write("试单失败后通过(携程):试单失败-淘宝酒店id:{0},携程酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, resp.Error.Message);
                            }
                        }
                        else if (falseCount % 3 == 0)//涨价处理
                        {
                            var rate = new TaobaoRate();
                            XhotelRateGetRequest request = new XhotelRateGetRequest();
                            request.OutRid = checkDto.OuterId;
                            request.Rpid   = checkDto.Rpid;
                            var tmallApiClient             = new TmallApiClient(Shop);
                            XhotelRateGetResponse response = tmallApiClient.Execute(request);
                            if (response != null && !response.IsError && response.Rate != null && !string.IsNullOrWhiteSpace(response.Rate.InventoryPrice))
                            {
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(response.Rate.InventoryPrice);
                                //try
                                //{
                                //    rate = JsonConvert.DeserializeObject<TaobaoRate>(response.Rate.InventoryPrice);
                                //}
                                //catch (Exception ex)
                                //{
                                //}
                            }
                            var totalDayNum = (int)(checkDto.CheckOut.Date - checkDto.CheckIn).TotalDays;
                            var rates       = new List <inventory_price>();
                            //判断是否已经更新过飞猪房态,0为没更新过,1为已更新过为不可以预定
                            int IsClose = 0;
                            for (int i = 0; i < totalDayNum; i++)
                            {
                                var inventory_price = rate.inventory_price.Where(a => a.date == checkDto.CheckIn.AddDays(i).ToString("yyyy-MM-dd")).FirstOrDefault();
                                if (inventory_price.price <= 0 || inventory_price.price > 4999900)
                                {
                                    IsClose = 1;
                                    bookingCheckOut.Message = resp.Error.Message;
                                    bookingCheckOut.IsBook  = false;
                                }
                                else
                                {
                                    rates.Add(inventory_price);
                                }
                            }

                            if (IsClose == 0)
                            {
                                //当满房是生成随机数并加上之前上传给飞猪的
                                Random ran          = new Random();
                                int    RandomResult = ran.Next(80, 200);

                                bookingCheckOut.DayPrice = rates.Select(u =>
                                                                        new RateQuotasPrice
                                {
                                    Date  = u.date,
                                    Price = u.price + RandomResult * 100m,
                                    Quota = 1//checkDto.RoomNum
                                }).ToList();
                                bookingCheckOut.Message = "正常可预定";
                                bookingCheckOut.IsBook  = true;
                                //logWriter.Write("试单失败后通过(携程):试单失败-淘宝酒店id:{0},携程酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, resp.Error.Message);
                            }
                        }
                        else
                        {
                            //logWriter.Write("试单失败后(携程):试单失败-淘宝酒店id:{0},携程酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, resp.Error.Message);
                            bookingCheckOut.Message = resp.Error.Message;
                            bookingCheckOut.IsBook  = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        //logWriter.Write("试单失败后报错(携程):试单失败-淘宝酒店id:{0},携程酒店id:{1},{2},失败原因{3},报错{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, resp.Error.Message, ex.ToString());
                        bookingCheckOut.Message = resp.Error.Message;
                        bookingCheckOut.IsBook  = false;
                    }
                    //记录试单信息并关闭房态
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            string Remark = resp.Error.Message;
                            bool IsFull   = true;
                            if (checkDto.IsCustomer == 0)
                            {
                                Remark = "程序请求";
                                IsFull = false;
                            }
                            AliTripValidate av = new AliTripValidate();
                            av.CheckInTime     = checkDto.CheckIn;
                            av.CheckOutTime    = checkDto.CheckOut;
                            av.RatePlanCode    = checkDto.RatePlanCode;
                            av.IsFull          = IsFull;
                            av.HotelId         = checkDto.HotelId;
                            av.RoomId          = checkDto.RoomTypeId;
                            av.RatePlanId      = checkDto.RatePlanId;
                            av.CreateTime      = DateTime.Now;

                            av.Channel = 8;
                            av.Shop    = (int)Shop;
                            av.Remark  = Remark;
                            SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();

                            Task.Factory.StartNew(() =>
                            {
                                try
                                {
                                    if (isPromotion)
                                    {
                                        //更新促销价格缓存
                                        string urlCtripPrice = string.Format("http://47.107.101.107:8186/CtripPricePro/CtripPromorion.ashx?key=dfiqergnsdkjdiunqebgaupsdh&code={0}&checkin={1}&checkout={2}&cache=1&account=zhpromotion&opt=update", checkDto.HotelId, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
                                        WebHttpRequest.Get(urlCtripPrice);
                                    }
                                    else
                                    {
                                        //更新价格缓存
                                        string urlCtripPrice = string.Format("http://47.107.101.107:8186/CtripPricePro/CtripPriceApi.ashx?key=dfiqergnsdkjdiunqebgaupsdh&code={0}&rids={1}&checkin={2}&checkout={3}&cache=0", checkDto.HotelId, checkDto.RatePlanId, DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
                                        WebHttpRequest.Get(urlCtripPrice);
                                    }
                                }
                                catch
                                {
                                }
                                if (checkDto.IsCustomer != 0)
                                {
                                    Thread.Sleep(12000);
                                }

                                string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=8", checkDto.HotelId);
                                WebHttpRequest.Get(url);
                            });
                        }
                        catch
                        {
                        }
                    });
                }
            }
            catch (Exception ex)
            {
                //Task.Factory.StartNew(() =>
                //{
                //    var roomRateService = new RoomRateService(Shop, Entities.Enum.ProductChannel.Ctrip);
                //    roomRateService.UpdateRoomRateByHid(checkDto.HotelId, true, true, true);
                //});
                bookingCheckOut.IsBook  = false;
                bookingCheckOut.Message = "出现异常,不可预定";
            }
            //如果是飞猪程序调用先获取8秒内是否有试单
            if (checkDto.IsCustomer == 0)
            {
                try
                {
                    BookingCheckOutDto CheckOut = new BookingCheckOutDto();
                    var check = CacheHelper.GetCache(checkKey); //先读取缓存
                    if (check != null)                          //如果没有该缓存
                    {
                        CheckOut = Newtonsoft.Json.JsonConvert.DeserializeObject <BookingCheckOutDto>(check.ToString(), new JsonSerializerSettings
                        {
                            Error = delegate(object obj, Newtonsoft.Json.Serialization.ErrorEventArgs args)
                            {
                                args.ErrorContext.Handled = true;
                            }
                        });
                        if (CheckOut != null)
                        {
                            return(CheckOut);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
            CacheHelper.SetCache(checkKey, Newtonsoft.Json.JsonConvert.SerializeObject(bookingCheckOut), 8);//添加缓存8秒
            return(bookingCheckOut);
        }
Beispiel #4
0
        /// <summary>
        /// 试单
        /// </summary>
        /// <param name="checkDto"></param>
        /// <returns></returns>
        public BookingCheckOutDto BookingCheck(BookingCheckInputDto checkDto)
        {
            var checkKey = "mt_" + checkDto.HotelId + "_" + checkDto.RoomTypeId + "_" + checkDto.RatePlanId + "_" + checkDto.CheckIn + "_" + checkDto.CheckOut;

            var bookOutDto = new BookingCheckOutDto();

            try
            {
                DateTime startTime = DateTime.Now;
                bookOutDto.DayPrice = new List <RateQuotasPrice>();
                bookOutDto.IsBook   = true;
                bookOutDto.Message  = "正常可预定";

                var response = new BookingCheckResponse();

                int totalPrice = Convert.ToInt32(getTotaPrice(checkDto));
                var request    = new BookingCheckRequest
                {
                    checkinDate  = checkDto.CheckIn.ToString("yyyy-MM-dd"),
                    checkoutDate = checkDto.CheckOut.ToString("yyyy-MM-dd"),
                    HotelId      = checkDto.HotelId,
                    GoodsId      = checkDto.RatePlanId,
                    RoomNum      = checkDto.RoomNum,
                    totalPrice   = totalPrice * checkDto.RoomNum
                };
                if (totalPrice != 0)
                {
                    response = meiTuanApiClient.Excute(request);
                }
                TimeSpan ts = checkDto.CheckOut.Subtract(checkDto.CheckIn);

                if (response != null && response.Result.code == 0 && (response.Result.desc == null || !response.Result.desc.Contains("价格发生变化")))
                {
                    //var hotelExtension = hotelRepository.GetHotelExtension(checkDto.HotelId, (int)Channel);
                    //var invoiceInfo = GetRatePlanInvoice(checkDto.HotelId, checkDto.RatePlanId, checkDto.CheckIn, checkDto.CheckOut);
                    bookOutDto.IsBook = true;
                    int remainRoomNum = response.Result.remainRoomNum;
                    int Quota         = 5;
                    if (remainRoomNum < 1)
                    {
                        Quota = 1;
                    }
                    else if (remainRoomNum > 5)
                    {
                        Quota = 5;
                    }
                    else
                    {
                        Quota = remainRoomNum;
                    }

                    var rate = new TaobaoRate();
                    try
                    {
                        XhotelRateGetRequest req = new XhotelRateGetRequest();
                        req.OutRid = checkDto.OuterId;
                        req.Rpid   = checkDto.Rpid;
                        var tmallApiClient         = new TmallApiClient(Shop);
                        XhotelRateGetResponse resp = tmallApiClient.Execute(req);
                        if (resp != null && !resp.IsError && resp.Rate != null && !string.IsNullOrWhiteSpace(resp.Rate.InventoryPrice))
                        {
                            rate = JsonConvert.DeserializeObject <TaobaoRate>(resp.Rate.InventoryPrice);
                        }
                    }
                    catch (Exception ex)
                    {
                    }

                    List <PriceModelsItem> modelList = new List <PriceModelsItem>();

                    foreach (var item in response.Result.priceModels)
                    {
                        if (!modelList.Any(u => u.date == item.date))
                        {
                            modelList.Add(item);
                        }
                    }
                    //是否需要马上更新
                    bool isUpdate = false;
                    //是否供应商发生变价
                    bool bianhua = false;

                    foreach (var item in modelList)
                    {
                        RateQuotasPrice rqp = new RateQuotasPrice();
                        rqp.Date = item.date;
                        //checkDto.IsVirtual, invoiceInfo.IsCommission, invoiceInfo.InvoiceMode, Convert.ToDecimal(item.subRatio / 10000), item.salePrice / 100, hotelExtension, rate
                        rqp.Price = GetSalePrice(Convert.ToDateTime(item.date), checkDto.IsVirtual, Convert.ToDecimal(item.subRatio / 10000), item.salePrice / 100, rate, ref bianhua, ref isUpdate, checkDto.IsCustomer).ToTaoBaoPrice();
                        rqp.Quota = Quota;//5;
                        bookOutDto.DayPrice.Add(rqp);
                    }
                    //记录试单信息
                    Task.Factory.StartNew(() =>
                    {
                        try
                        {
                            bool IsFull   = false;
                            string Remark = bookOutDto.Message;
                            //当库存为0时关房
                            if (remainRoomNum == 0 && checkDto.IsCustomer == 1)
                            {
                                IsFull = true;
                            }
                            if (checkDto.IsCustomer == 0)
                            {
                                Remark = "程序请求";
                            }
                            AliTripValidate av = new AliTripValidate();
                            av.CheckInTime     = checkDto.CheckIn;
                            av.CheckOutTime    = checkDto.CheckOut;
                            av.RatePlanCode    = checkDto.RatePlanCode;
                            av.IsFull          = IsFull;
                            av.HotelId         = checkDto.HotelId;
                            av.RoomId          = checkDto.RoomTypeId;
                            av.RatePlanId      = checkDto.RatePlanId;
                            av.CreateTime      = DateTime.Now;
                            av.Channel         = 5;
                            av.Shop            = (int)Shop;
                            av.Remark          = Remark;
                            SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();
                            string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=5", checkDto.HotelId);
                            if (checkDto.IsCustomer != 0 && !isUpdate)
                            {
                                Thread.Sleep(15000);
                            }
                            WebHttpRequest.Get(url);
                            //当价格改变时或库存为0时更新房态
                            //if (bianhua || remainRoomNum == 0)
                            //{
                            //    string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=5", checkDto.HotelId);
                            //    WebHttpRequest.Get(url);
                            //}
                        }
                        catch
                        {
                        }
                    });
                }
                else
                {
                    //TODO 满房变价,全部关房..
                    //bookOutDto.IsBook = false;
                    //bookOutDto.Message = response.Result.desc;

                    try
                    {
                        var falseCount      = 1;
                        var falseCacheCount = CacheHelper.GetCache("falseCount");//先读取缓存
                        //当为客人请求才做记录数次
                        if (checkDto.IsCustomer == 1)
                        {
                            if (falseCacheCount != null)//如果没有该缓存,默认为1
                            {
                                falseCount = (int)falseCacheCount + 1;
                            }
                            CacheHelper.SetCache("falseCount", falseCount, 1800);//添加缓存
                        }
                        //如果试单失败为双数直接拿缓存值输出,单数时为失败
                        //if (falseCount % 2 == 0)
                        bool tongguo = false;

                        //在0点15分到4点为试单失败为双数直接拿缓存值输出,其余的都通过
                        int NowHour   = DateTime.Now.Hour;   //当前时间的时数
                        int NowMinute = DateTime.Now.Minute; //当前时间的分钟数
                        if (falseCount % 2 == 0 || falseCount % 13 == 0)
                        {
                            tongguo = true;
                        }
                        else if ((NowHour == 18 && NowMinute > 10) || (NowHour < 8 && NowHour >= 19))
                        {
                            if (falseCount % 2 == 0 || falseCount % 5 == 0 || falseCount % 7 == 0)
                            {
                                tongguo = true;
                            }
                        }
                        //if (falseCount % 6 == 0 || checkDto.IsCustomer == 0 || response.Result.desc.Contains("价格发生变化"))
                        if (checkDto.IsCustomer == 0)
                        {
                            bookOutDto.Message = response.Result.desc;
                            bookOutDto.IsBook  = false;
                        }
                        else if (tongguo || response.Result.desc.Contains("价格发生变化"))
                        {
                            var rate = new TaobaoRate();
                            XhotelRateGetRequest req = new XhotelRateGetRequest();
                            req.OutRid = checkDto.OuterId;
                            req.Rpid   = checkDto.Rpid;
                            var tmallApiClient         = new TmallApiClient(Shop);
                            XhotelRateGetResponse resp = tmallApiClient.Execute(req);
                            if (resp != null && !resp.IsError && resp.Rate != null && !string.IsNullOrWhiteSpace(resp.Rate.InventoryPrice))
                            {
                                //try
                                //{
                                //    rate = JsonConvert.DeserializeObject<TaobaoRate>(resp.Rate.InventoryPrice);
                                //}
                                //catch (Exception ex)
                                //{
                                //}
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(resp.Rate.InventoryPrice);
                            }
                            var totalDayNum = (int)(checkDto.CheckOut.Date - checkDto.CheckIn).TotalDays;
                            var rates       = new List <inventory_price>();
                            //判断是否已经更新过飞猪房态,0为没更新过,1为已更新过为不可以预定
                            int IsClose = 0;
                            for (int i = 0; i < totalDayNum; i++)
                            {
                                var inventory_price = rate.inventory_price.Where(a => a.date == checkDto.CheckIn.AddDays(i).ToString("yyyy-MM-dd")).FirstOrDefault();
                                if (inventory_price.price <= 0 || inventory_price.price > 4999900)
                                {
                                    IsClose            = 1;
                                    bookOutDto.Message = response.Result.desc;
                                    bookOutDto.IsBook  = false;
                                }
                                else
                                {
                                    rates.Add(inventory_price);
                                }
                            }

                            if (IsClose == 0)
                            {
                                bookOutDto.DayPrice = rates.Select(u =>
                                                                   new RateQuotasPrice
                                {
                                    Date  = u.date,
                                    Price = u.price,
                                    Quota = 1
                                }).ToList();
                                bookOutDto.Message = "正常可预定";
                                bookOutDto.IsBook  = true;
                                //logWriter.Write("试单失败后通过(美团):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, response.Result.desc);
                            }
                        }
                        else if (falseCount % 3 == 0)
                        {
                            var rate = new TaobaoRate();
                            XhotelRateGetRequest req = new XhotelRateGetRequest();
                            req.OutRid = checkDto.OuterId;
                            req.Rpid   = checkDto.Rpid;
                            var tmallApiClient         = new TmallApiClient(Shop);
                            XhotelRateGetResponse resp = tmallApiClient.Execute(req);
                            if (resp != null && !resp.IsError && resp.Rate != null && !string.IsNullOrWhiteSpace(resp.Rate.InventoryPrice))
                            {
                                //try
                                //{
                                //    rate = JsonConvert.DeserializeObject<TaobaoRate>(resp.Rate.InventoryPrice);
                                //}
                                //catch (Exception ex)
                                //{
                                //}
                                rate = JsonConvert.DeserializeObject <TaobaoRate>(resp.Rate.InventoryPrice);
                            }
                            var totalDayNum = (int)(checkDto.CheckOut.Date - checkDto.CheckIn).TotalDays;
                            var rates       = new List <inventory_price>();
                            //判断是否已经更新过飞猪房态,0为没更新过,1为已更新过为不可以预定
                            int IsClose = 0;
                            for (int i = 0; i < totalDayNum; i++)
                            {
                                var inventory_price = rate.inventory_price.Where(a => a.date == checkDto.CheckIn.AddDays(i).ToString("yyyy-MM-dd")).FirstOrDefault();
                                if (inventory_price.price <= 0 || inventory_price.price > 4999900)
                                {
                                    IsClose            = 1;
                                    bookOutDto.Message = response.Result.desc;
                                    bookOutDto.IsBook  = false;
                                }
                                else
                                {
                                    rates.Add(inventory_price);
                                }
                            }

                            if (IsClose == 0)
                            {
                                Random ran          = new Random();
                                int    RandomResult = ran.Next(80, 200);

                                bookOutDto.DayPrice = rates.Select(u =>
                                                                   new RateQuotasPrice
                                {
                                    Date  = u.date,
                                    Price = u.price + RandomResult * 100m,
                                    Quota = 1
                                }).ToList();
                                bookOutDto.Message = "正常可预定";
                                bookOutDto.IsBook  = true;
                                //logWriter.Write("试单失败后通过(美团):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, response.Result.desc);
                            }
                        }
                        else
                        {
                            //logWriter.Write("试单失败后(美团):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败数次:{3},失败原因{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, falseCount, response.Result.desc);
                            bookOutDto.Message = response.Result.desc;
                            bookOutDto.IsBook  = false;
                        }
                        //记录试单信息并关闭房态
                        Task.Factory.StartNew(() =>
                        {
                            try
                            {
                                string Remark = response.Result.desc;
                                bool IsFull   = true;
                                if (checkDto.IsCustomer == 0)
                                {
                                    Remark = "程序请求";
                                    IsFull = false;
                                }
                                else if (response.Result.desc.Contains("价格发生变化"))
                                {
                                    Remark = "价格发生变化";
                                    IsFull = false;
                                }
                                AliTripValidate av = new AliTripValidate();
                                av.CheckInTime     = checkDto.CheckIn;
                                av.CheckOutTime    = checkDto.CheckOut;
                                av.RatePlanCode    = checkDto.RatePlanCode;
                                av.IsFull          = IsFull;
                                av.HotelId         = checkDto.HotelId;
                                av.RoomId          = checkDto.RoomTypeId;
                                av.RatePlanId      = checkDto.RatePlanId;
                                av.CreateTime      = DateTime.Now;

                                av.Channel = 5;
                                av.Shop    = (int)Shop;
                                av.Remark  = Remark;
                                SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();
                            }
                            catch
                            {
                            }
                            if (checkDto.IsCustomer != 0)
                            {
                                Thread.Sleep(13000);
                            }
                            string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=5", checkDto.HotelId);
                            WebHttpRequest.Get(url);
                        });
                    }
                    catch (Exception ex)
                    {
                        //记录试单信息并关闭房态
                        Task.Factory.StartNew(() =>
                        {
                            try
                            {
                                bool IsFull   = true;
                                string Remark = response.Result.desc;
                                if (checkDto.IsCustomer == 0)
                                {
                                    Remark = "程序请求";
                                    IsFull = false;
                                }
                                AliTripValidate av = new AliTripValidate();
                                av.CheckInTime     = checkDto.CheckIn;
                                av.CheckOutTime    = checkDto.CheckOut;
                                av.RatePlanCode    = checkDto.RatePlanCode;
                                av.IsFull          = IsFull;
                                av.HotelId         = checkDto.HotelId;
                                av.RoomId          = checkDto.RoomTypeId;
                                av.RatePlanId      = checkDto.RatePlanId;
                                av.CreateTime      = DateTime.Now;

                                av.Channel = 5;
                                av.Shop    = (int)Shop;
                                av.Remark  = Remark;
                                SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand();
                            }
                            catch
                            {
                            }
                            Thread.Sleep(6000);
                            string url = string.Format("http://localhost:8097/apiAshx/UpdateRoomRate.ashx?type=RoomRate&hid={0}&source=5", checkDto.HotelId);
                            WebHttpRequest.Get(url);
                        });
                        //logWriter.Write("试单失败后报错(美团):试单失败-淘宝酒店id:{0},美团酒店id:{1},{2},失败原因{3},报错{4}", checkDto.Hid, checkDto.HotelId, checkDto.Rpid, response.Result.desc, ex.ToString());
                        bookOutDto.Message = response.Result.desc;
                        bookOutDto.IsBook  = false;
                    }
                }
            }
            catch (Exception ex)
            {
                bookOutDto.IsBook  = false;
                bookOutDto.Message = string.Format("满房,系统异常:{0}", ex.ToString());
            }
            if (checkDto.IsCustomer == 0)
            {
                try
                {
                    BookingCheckOutDto CheckOut = new BookingCheckOutDto();
                    var check = CacheHelper.GetCache(checkKey); //先读取缓存
                    if (check != null)                          //如果没有该缓存
                    {
                        CheckOut = Newtonsoft.Json.JsonConvert.DeserializeObject <BookingCheckOutDto>(check.ToString(), new JsonSerializerSettings
                        {
                            Error = delegate(object obj, Newtonsoft.Json.Serialization.ErrorEventArgs args)
                            {
                                args.ErrorContext.Handled = true;
                            }
                        });
                        if (CheckOut != null)
                        {
                            return(CheckOut);
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
            CacheHelper.SetCache(checkKey, Newtonsoft.Json.JsonConvert.SerializeObject(bookOutDto), 8);//添加缓存
            return(bookOutDto);
        }