/// <summary> /// 获取试单前的总金额 /// </summary> /// <param name="checkDto"></param> /// <returns></returns> public decimal getTotaPrice(BookingCheckInputDto checkDto) { decimal salePrice = 0; try { long hotelId = Convert.ToInt64(checkDto.HotelId); int rpid = Convert.ToInt32(checkDto.RatePlanId); var request = new HotelGoodsRequest { CheckinDate = checkDto.CheckIn.ToString("yyyy-MM-dd"), CheckoutDate = checkDto.CheckOut.ToString("yyyy-MM-dd"), GoodsType = 1, HotelIds = new List <long> { hotelId } }; var response = new HotelGoodsResponse(); try { response = meiTuanApiClient.Excute(request); } catch (Exception exstr) { response = meiTuanApiClient.Excute(request); } if (response != null && response.Result != null && response.Result.hotelGoods != null && response.Result.hotelGoods.Count > 0) { var rplist = response.Result.hotelGoods[0].goods; var currentRp = rplist.Where(u => u.hotelId == hotelId && u.goodsId == rpid).FirstOrDefault(); if (currentRp != null) { //priceInfo.RatePlanName = string.Format("{0} [{1}早]", priceInfo.RatePlanName, ); string priceStr = string.Empty; decimal sTotalPrice = 0; decimal sBasePrice = 0; foreach (var item in currentRp.priceModels) { var subPricedic = item.subPrice; decimal basePrice = item.salePrice - item.subPrice; sBasePrice += basePrice; sTotalPrice += subPricedic; salePrice += item.salePrice; priceStr += "price" + basePrice / 100 + "|" + item.salePrice / 100 + "|money" + basePrice / 100 + "|0|"; } } } } catch (Exception ex) { } return(salePrice); }
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); }
public TmallHotelPriceInfo GetHotelPriceInfo(BookingCheckInputDto checkDto) { string hotelId = checkDto.HotelId; string rpid = checkDto.RatePlanId; string ratePlanId = checkDto.RatePlanId; string lastTime = "23:59"; string priceStr = string.Empty; decimal totalPrice = 0; TmallHotelPriceInfo priceInfo = new TmallHotelPriceInfo(); priceInfo.BreakFast = 99; #region 获取酒店名称 try { string sql = string.Format("select top 1 HotelName as HotelName from DaDuShi_Hotels(NOLOCK) where HotelCode = '{0}'", hotelId); var getHotelInfo = SqlSugarContext.ResellbaseInstance.SqlQueryable <MeiTuanHotel>(sql).First(); if (getHotelInfo != null && getHotelInfo.HotelName != null) { priceInfo.HotelName = getHotelInfo.HotelName; } else { priceInfo.HotelName = "酒店未获取"; } } catch { priceInfo.HotelName = "酒店未获取"; } #endregion 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 = checkDto.RoomNum, AdultCount = 2, ChildCount = 0 }; //当失败时重新试单 var response = new WebServiceResponse <HotelInfoJsonEt>(); try { response = OrderDataOpEt.Availability(RequestEt); } catch (Exception exMt) { response = OrderDataOpEt.Availability(RequestEt); } #region 默认为2个人请求,当失败时为一个人请求 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 = checkDto.RoomNum, AdultCount = 1, ChildCount = 0 }; //当失败时重新试单 response = new WebServiceResponse <HotelInfoJsonEt>(); try { response = OrderDataOpEt.Availability(RequestEt); } catch (Exception exMt) { response = OrderDataOpEt.Availability(RequestEt); } } #endregion if (response != null && response.Successful && response.ResponseEt != null && response.ResponseEt.RatePlanList.Count > 0) { foreach (var item in response.ResponseEt.RatePlanList[0].RateList) { var basePrice = item.AmountBeforeTax; priceStr += "price" + basePrice + "|" + basePrice + "|money" + basePrice + "|0|"; totalPrice += basePrice; } priceInfo.DatePrice = totalPrice; priceInfo.PriceStr = priceStr; priceInfo.RoomName = response.ResponseEt.RatePlanList[0].RoomTypeName; priceInfo.RatePlanName = response.ResponseEt.RatePlanList[0].RoomTypeName; priceInfo.PaymentType = 1; priceInfo.BreakFast = response.ResponseEt.RatePlanList[0].RateList.Min(s => s.Breakfast); } else { try { //当不可预订时获取房型名称失败,重新到数据库获取 string sql = string.Format("select top 1 RoomTypeName as HotelName from DaDuShi_RoomType WITH(NOLOCK) where HotelCode = '{0}' and RoomTypeCode='{1}'", hotelId, checkDto.RoomTypeId); var getHotelInfo = SqlSugarContext.ResellbaseInstance.SqlQueryable <MeiTuanHotel>(sql).First(); if (getHotelInfo != null && getHotelInfo.HotelName != null) { priceInfo.RoomName = getHotelInfo.HotelName; } else { priceInfo.RoomName = "获取房型失败"; } } catch { priceInfo.RoomName = "获取房型失败";; } } return(priceInfo); }
/// <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); }
/// <summary> /// 获取酒店基础信息 /// </summary> /// <param name="checkDto"></param> /// <returns></returns> public TmallHotelPriceInfo GetHotelPriceInfo(BookingCheckInputDto checkDto) { TmallHotelPriceInfo priceInfo = new TmallHotelPriceInfo(); if (checkDto.RatePlanCode.Contains("_c")) { ctripApiClient = new CtripApiClient(Ctrip.Config.ApiConfigManager.ZhiHeC); } try { string ratePlanId = checkDto.RatePlanId; string lastTime = "23:59"; string priceStr = string.Empty; decimal totalPrice = 0; var getHotelInfo = Task.Factory.StartNew(() => { return(ctripRepository.GetHotel(checkDto.HotelId)); }); var hotel = getHotelInfo.Result; if (hotel == null || hotel.HotelName == null || hotel.HotelName == "") { priceInfo.HotelName = "获取酒店失败"; } else { priceInfo.HotelName = hotel.HotelName; } HotelAvailReponse resp = new HotelAvailReponse(); //当失败时重新试单 try { resp = ctripApiClient.CheckOrderAvail(checkDto.HotelId, "501", ratePlanId, checkDto.RoomNum, 1, checkDto.CheckIn, checkDto.CheckOut, lastTime); } catch { resp = ctripApiClient.CheckOrderAvail(checkDto.HotelId, "501", ratePlanId, checkDto.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")) { //Task.Factory.StartNew(() => //{ // var roomTypeService = new RoomTypeService(Shop, Entities.Enum.ProductChannel.Ctrip); // roomTypeService.ModifyRoomType(checkDto.HotelId); //}); try { resp = ctripApiClient.CheckOrderAvail(checkDto.HotelId, "501", ratePlanId, checkDto.RoomNum, 1, checkDto.CheckIn, checkDto.CheckOut, lastTime); } catch { resp = ctripApiClient.CheckOrderAvail(checkDto.HotelId, "501", ratePlanId, checkDto.RoomNum, 1, checkDto.CheckIn, checkDto.CheckOut, lastTime); } } } if (resp != null && resp.AvailabilityStatus == "AvailableForSale") { if (resp.RoomStay != null && resp.RoomStay.RatePlans != null && resp.RoomStay.RoomRates != null) { var ratePlan = resp.RoomStay.RatePlans.FirstOrDefault(); var roomRates = resp.RoomStay.RoomRates.FirstOrDefault(); // var roomType = resp.RoomStay.RoomTypes.FirstOrDefault(); if (roomRates != null || roomRates.Rates != null || roomRates.Rates.Count > 0) { string ExtensionName = string.Empty; try { var ctripHotel = hotelRepository.GetCtripHotel(checkDto.HotelId); //var hotelExtension = SqlSugarContext.LingZhongInstance.Queryable<AliTripHotelExtension>().Where(u => u.HotelId == checkDto.HotelId && u.Source == (int)ProductChannel.Ctrip).First(); if (ctripHotel != null && ctripHotel.CtripStarRate != null && ctripHotel.CtripStarRate >= 5) { ExtensionName = "[金牌]"; } } catch { } foreach (var item in roomRates.Rates) { var basePrice = item.AmountBeforeTax; if (item.Cost > 0) { basePrice = item.Cost; } //var basePrice = item.AmountBeforeTax; priceStr += "price" + basePrice + "|" + basePrice + "|money" + basePrice + "|0|"; totalPrice += basePrice; } string RatePlanName = ratePlan.RatePlanName; int invoiceMode = ratePlan.InvoiceTargetType; if (invoiceMode == 1) { RatePlanName = string.Format("{0}[携程开具发票]", RatePlanName); } else if (invoiceMode == 2) { RatePlanName = string.Format("{0}[酒店开具发票]", RatePlanName); } if (ratePlan.SupplierID > 0) { RatePlanName = string.Format("{0}[代理]", RatePlanName); } if (checkDto.RatePlanCode.Contains("_c")) { RatePlanName = string.Format("{0}[促销]", RatePlanName); } priceInfo.DatePrice = totalPrice; priceInfo.PriceStr = priceStr; priceInfo.RoomName = ratePlan.RatePlanName; priceInfo.PaymentType = 1; priceInfo.RatePlanName = RatePlanName + ExtensionName; return(priceInfo); } } } else { var getRoomInfo = Task.Factory.StartNew(() => { return(ctripRepository.GetRoomType(checkDto.HotelId, checkDto.RoomTypeId)); }); var roomInfo = getRoomInfo.Result; if (roomInfo == null || roomInfo.RoomName == null || roomInfo.RoomName == "") { priceInfo.RoomName = "获取房型失败"; } else { priceInfo.RoomName = roomInfo.RoomName; } } } catch { } return(priceInfo); }
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); }
public TmallHotelPriceInfo GetHotelPriceInfo(BookingCheckInputDto checkDto) { return(bigTreeRepository.GetHotelPriceInfo(checkDto.RoomTypeId, checkDto.RatePlanId, checkDto.CheckIn, checkDto.CheckOut)); }
/// <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); }
/// <summary> /// 获取酒店原始信息 /// </summary> /// <param name="checkDto"></param> /// <returns></returns> public TmallHotelPriceInfo GetHotelPriceInfo(BookingCheckInputDto checkDto) { long hotelId = Convert.ToInt64(checkDto.HotelId); int rpid = Convert.ToInt32(checkDto.RatePlanId); TmallHotelPriceInfo priceInfo = new TmallHotelPriceInfo(); var request = new HotelGoodsRequest { CheckinDate = checkDto.CheckIn.ToString("yyyy-MM-dd"), CheckoutDate = checkDto.CheckOut.ToString("yyyy-MM-dd"), GoodsType = 1, HotelIds = new List <long> { hotelId } }; //当失败时重新试单 var response = new HotelGoodsResponse(); try { response = meiTuanApiClient.Excute(request); } catch (Exception exMt) { response = meiTuanApiClient.Excute(request); } if (response != null && response.Result != null && response.Result.hotelGoods != null && response.Result.hotelGoods.Count > 0) { var rplist = response.Result.hotelGoods[0].goods; var currentRp = rplist.Where(u => u.hotelId == hotelId && u.goodsId == rpid).FirstOrDefault(); if (currentRp != null) { priceInfo.RoomName = currentRp.roomInfoList[0].roomName; priceInfo.RatePlanName = currentRp.goodsName; int invoiceMode = currentRp.invoiceInfo.invoiceMode; if (invoiceMode == 1) { priceInfo.RatePlanName = string.Format("{0}[酒店开具发票]", priceInfo.RatePlanName); } else if (invoiceMode == 2) { priceInfo.RatePlanName = string.Format("{0}[美团开具发票]", priceInfo.RatePlanName); } else if (invoiceMode == 3) { priceInfo.RatePlanName = string.Format("{0}[第三方开具发票]", priceInfo.RatePlanName); } if (currentRp.thirdParty == 1) { priceInfo.RatePlanName = string.Format("{0}[代理]", priceInfo.RatePlanName); } if (currentRp.goodsType == 2) { priceInfo.RatePlanName = string.Format("{0}[钟点房]", priceInfo.RatePlanName); } //priceInfo.RatePlanName = string.Format("{0} [{1}早]", priceInfo.RatePlanName, ); string priceStr = string.Empty; decimal sTotalPrice = 0; decimal sBasePrice = 0; foreach (var item in currentRp.priceModels) { var subPricedic = item.subPrice; decimal basePrice = item.salePrice - item.subPrice; sBasePrice += basePrice; sTotalPrice += subPricedic; priceStr += "price" + basePrice / 100 + "|" + item.salePrice / 100 + "|money" + basePrice / 100 + "|0|"; } priceInfo.DatePrice = Convert.ToDecimal(sBasePrice / 100); priceInfo.PriceStr = priceStr; priceInfo.PaymentType = 1; priceInfo.STotalPrice = Convert.ToDecimal(sTotalPrice / 100); var hotel = SqlSugarContext.ChannelInstance.Queryable <MeiTuanHotel>().Where(u => u.HotelId == hotelId).First(); if (hotel != null) { priceInfo.HotelName = hotel.HotelName; } else { try { string sql = string.Format("select top 1 hotelId as HotelId,pointName as HotelName from Mt_hotels where hotelId = {0}", hotelId); var getHotelInfo = SqlSugarContext.HotelProductInstance.SqlQueryable <MeiTuanHotel>(sql).First(); if (getHotelInfo != null && getHotelInfo.HotelName != null) { priceInfo.HotelName = getHotelInfo.HotelName; } else { priceInfo.HotelName = "酒店未获取"; } } catch { priceInfo.HotelName = "酒店未获取"; } } } } return(priceInfo); }
protected override ValidateRQResult Notice() { var result = new ValidateRQResult(); var hotelInfo = GetIdInfoByRpCode(Request.RatePlanCode); int IsCustomer = 1; if (Request.AuthenticationToken != null && Request.AuthenticationToken.CreateToken != null && Request.AuthenticationToken.CreateToken.ToLower().Contains("validate")) { //飞猪程序测试 IsCustomer = 0; } //logWriter.Write("记录CreateToken:{0},转为小写:{1}", Request.AuthenticationToken.CreateToken, Request.AuthenticationToken.CreateToken.ToLower()); var bookCheckDto = new BookingCheckInputDto { CheckIn = Request.CheckIn, CheckOut = Request.CheckOut, HotelId = hotelInfo.HotelId, RoomTypeId = hotelInfo.RoomTypeId, RatePlanId = hotelInfo.RatePlanId, RatePlanCode = Request.RatePlanCode, Rpid = Request.TaoBaoRatePlanId, Hid = Request.TaoBaoHotelId, RoomNum = Request.RoomNum, OuterId = Request.RoomTypeId, CustomerNumber = Request.CustomerNumber, IsCustomer = IsCustomer }; if (Request.RatePlanCode.Split('_').Length > 3) { bookCheckDto.IsVirtual = true; } #region /* * Task.Factory.StartNew(() => * { * try * { * string url = string.Empty; * if (Channel == ProductChannel.MT) * { * url = string.Format("http://47.106.239.82/MtPricePro/AliChek.ashx?key=qoeutpzmbjhsyehgixjsngklzoeuyhbgfs&hid=0&code={0}&checkin={1}&checkout={2}&shop=yj&visit=验单失败或下单成功&invoice=1&addplan=0", bookCheckDto.HotelId, bookCheckDto.CheckIn.ToString("yyyy-MM-dd"), bookCheckDto.CheckOut.ToString("yyyy-MM-dd")); * * } * else if (Channel == ProductChannel.Ctrip) * { * url = string.Format("http://47.106.239.82/CtripPricePro/CtripAliChek.ashx?key=adfiadofdcvjnfgqpofguang&code={0}&checkin={1}&checkout={2}&shop=test&visit=demo", bookCheckDto.HotelId, bookCheckDto.CheckIn.ToString("yyyy-MM-dd"), bookCheckDto.CheckOut.ToString("yyyy-MM-dd")); * } * * if (!string.IsNullOrEmpty(url)) * { * WebHttpRequest.Get(url); * } * * //if (Shop != ShopType.YinJi) * //{ * // //异步更新房态 * // RoomRateService roomRateService = new RoomRateService(Shop, Channel); * // roomRateService.UpdateRoomRateByHid(hotelInfo.HotelId, true); * //} * } * catch * { * * } * }); */ #endregion var bookCheckResult = productChannel.BookingCheck(bookCheckDto); if (bookCheckResult.IsBook) { result.ResultCode = "0"; result.Message = bookCheckResult.Message; result.InventoryPrice = JsonConvert.SerializeObject(bookCheckResult.DayPrice); } else { result.ResultCode = "-1"; result.Message = bookCheckResult.Message; result.InventoryPrice = string.Empty; #region 异步关闭当日房间 //Task.Factory.StartNew(() => //{ // try // { // ////异步更新房态 // //RoomRateService roomRateService = new RoomRateService(Shop, Channel); // //roomRateService.CloseRoom(Request.RoomTypeId, Request.RatePlanCode, Request.CheckIn, Request.CheckOut); // } // catch // { // } //}); #endregion } #region 记录试单信息 //记录试单信息 /* * Task.Factory.StartNew(() => * { * try * { * AliTripValidate av = new AliTripValidate(); * av.CheckInTime = Request.CheckIn; * av.CheckOutTime = Request.CheckOut; * av.RatePlanCode = Request.RatePlanCode; * av.IsFull = result.ResultCode == "0" ? false : true; * av.HotelId = hotelInfo.HotelId; * av.RoomId = hotelInfo.RoomTypeId; * av.RatePlanId = hotelInfo.RatePlanId; * av.CreateTime = DateTime.Now; * * if (result.Message.Contains("校验成功")) * { * av.IsFull = false; * } * av.Channel = (int)Channel; * av.Shop = (int)Shop; * av.Remark = result.Message; * SqlSugarContext.RenNiXingInstance.Insertable(av).ExecuteCommand(); * } * catch * { * } * }); */ #endregion //if (Request.AuthenticationToken.CreateToken.ToLower().Contains("validate")) //{ // logWriter.Write("记录CreateToken:{0},返回内容:{1},RatePlanCode:{2}", Request.AuthenticationToken.CreateToken, result.ResultCode, Request.RatePlanCode); //} logWriter.Write("记录静订结果:请求数据{0},返回内容:{1}", Newtonsoft.Json.JsonConvert.SerializeObject(bookCheckDto), Newtonsoft.Json.JsonConvert.SerializeObject(result)); return(result); }