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); }
/// <summary> /// 获取销售价格 /// </summary> /// <param name="date">日期</param> /// <param name="isCommission">是否代理</param> /// <param name="guidePrice">指导价</param> /// <param name="TaobaoRate">上传给淘宝的价格计划</param> /// /// <param name="bianhua">输出价格是否发生变化</param> /// <param name="IsCustomer">1为是客户请求,0为程序请求</param> /// bool isVirtual, bool isCommission, int invoiceMode, decimal subRate, decimal guidePrice, AliTripHotelExtension hotelExtension, TaobaoRate rate /// <returns></returns> private decimal GetSalePrice(DateTime date, bool isCommission, decimal basePrice, TaobaoRate rate, ref bool bianhua, int IsCustomer = 1) { decimal salePrice = basePrice; var nowDate = DateTime.Now; salePrice = salePrice * 1.075m; bianhua = false; if (date >= new DateTime(2019, 12, 31)) { salePrice = salePrice * 1.015m; } salePrice = Math.Floor(salePrice) + 0.49m; if (rate != null && rate.inventory_price != null && rate.inventory_price.Count > 0) { var inventory_price = rate.inventory_price.Where(a => Convert.ToDateTime(a.date) == date).FirstOrDefault(); if (inventory_price.price > 0 && inventory_price.price <= 4999900) { //当降价了,直接输出之前推送的价格,当为代理产品时在升价 //if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.97m || (salePrice - Convert.ToDecimal(inventory_price.price) / 100) <= 15) if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.97m) { if (Convert.ToDecimal(inventory_price.price) / 100 != salePrice) { bianhua = true; } if (IsCustomer != 0) { return(Convert.ToDecimal(inventory_price.price) / 100); } } else { bianhua = true; } } } return(salePrice); }
/// <summary> /// 获取销售价 /// </summary> /// <param name="date"></param> /// <param name="basePrice">低价</param> /// <param name="guidePrice">指导价</param> /// <param name="isCommission">是否为代理</param> /// <param name="hotelExtension"></param> /// <param name="isPromotion">是否为促销产品</param> /// <param name="bianhua">输出价格是否发生变化</param> /// <param name="isUpdate">是否需要马上更新</param> /// <param name="IsCustomer">1为是客户请求,0为程序请求</param> /// <returns></returns> private decimal GetSalePrice(DateTime date, decimal basePrice, decimal guidePrice, bool isCommission, TaobaoRate rate, bool isPromotion, ref bool bianhua, ref bool isUpdate, decimal?hotelExtension = 0, int IsCustomer = 1) { bianhua = false; isUpdate = true; bool isGuidePrice = false; bool isAddPrice = false; bool isAddRedEnvelope = true; //if (hotelExtension != null) //{ // isGuidePrice = hotelExtension.Extension3 == 1; // isAddPrice = hotelExtension.Extension ?? false; // isAddRedEnvelope = hotelExtension.Extension5 == 1; //} decimal salePrice = basePrice; if (salePrice != 0) { ////促销产品 //if (isPromotion) //{ // salePrice = basePrice * 1.06m + 1m; //} //else //{ // salePrice = basePrice * 1.062m + 1; //} salePrice = basePrice * 1.065m; //salePrice = basePrice * 1.065m; } else { salePrice = guidePrice; } if (salePrice < 130) { salePrice = salePrice + 1; } decimal ctripSalePrice = salePrice; #region /* #region 接口获取matt那边的卖价,获取不到则返回指导价 [190404] * try * { * string url = string.Format("http://119.23.44.20:9001/YjAliTrip/GetSalePrice?Channel=8&CurDate={0}&GuidePrice={1}&SubRatio=0&IsAgent={4}&IsVirtual=false&IsMedalHotel={2}&IsHzHotel={3}", date.ToString("yyyy-MM-dd"), ctripSalePrice, isAddPrice, !isAddRedEnvelope, isCommission); * //单位分 * var mattSalePrice = Convert.ToInt32(WebHttpRequest.Get(url)); * if (mattSalePrice > 0) * { * salePrice = mattSalePrice / 100m; * return salePrice; * } * } * catch (Exception ex) * { * } #endregion * * if (isAddPrice) * { * //金牌加3个点 * salePrice = salePrice * 1.03m; * } * else * { * //携程指导价低1个点-1 四舍五入后加0.49 * salePrice = salePrice * 0.99m - 1; * } * * //if (isCommission && date >= new DateTime(2019, 4, 29)) * //{ * // salePrice = salePrice * 1.01m; * //} * * //统一调低0.6个点 * salePrice = salePrice * 0.994m; * salePrice = Math.Round(salePrice) + 0.49m; * salePrice = salePrice + 20; * salePrice = Math.Round(salePrice, 0) + 0.49m; */ #endregion #region //if (Shop == ShopType.RenNiXing) //{ // if (hotelExtension != null && hotelExtension >= 5) // { // //金牌加6个点 // salePrice = salePrice * 1.06m; // } // //else // //{ // // if (salePrice > 100 && salePrice < 200) // // { // // salePrice = salePrice + 1; // // } // // else if (salePrice >= 200 && salePrice < 300) // // { // // salePrice = salePrice + 2; // // } // // else if (salePrice >= 300 && salePrice < 900) // // { // // salePrice = salePrice + 3; // // } // //} //} #endregion //促销产品加1个点 //if (isPromotion) //{ // salePrice = salePrice * 1.01M; //} //代理加一个点 if (date >= new DateTime(2019, 12, 31)) { salePrice = salePrice * 1.015m; } if (isCommission) { salePrice = salePrice * 1.01M; } salePrice = Math.Floor(salePrice) + 0.49m; if (rate != null && rate.inventory_price != null && rate.inventory_price.Count > 0) { var inventory_price = rate.inventory_price.Where(a => Convert.ToDateTime(a.date) == date).FirstOrDefault(); if (inventory_price.price > 0 && inventory_price.price <= 4999900) { //当降价了,直接输出之前推送的价格,当为代理产品时在升价 if (isCommission) { //if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.97m || (salePrice - Convert.ToDecimal(inventory_price.price) / 100) <= 35) if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.97m || (salePrice - Convert.ToDecimal(inventory_price.price) / 100) <= 5) { if (Convert.ToDecimal(inventory_price.price) / 100 != salePrice) { bianhua = true; } if (IsCustomer != 0) { isUpdate = false; return(Convert.ToDecimal(inventory_price.price) / 100); } } } else if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.975m || (salePrice - Convert.ToDecimal(inventory_price.price) / 100) <= 5) { if (Convert.ToDecimal(inventory_price.price) / 100 != salePrice) { bianhua = true; } if (IsCustomer != 0) { isUpdate = false; return(Convert.ToDecimal(inventory_price.price) / 100); } } else { //判断价格是否发生变化 bianhua = true; } //else if ((inventory_price.price / 100) * 1.01m > salePrice) //{ // return inventory_price.price / 100; //} } } return(salePrice); }
/// <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 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="date">日期</param> /// <param name="isVirtual">是否虚拟价格</param> /// <param name="isCommission">是否代理</param> /// <param name="invoiceMode">发票模式</param> /// <param name="subRate">佣金率</param> /// <param name="guidePrice">指导价</param> /// <param name="hotelExtension">酒店扩展信息</param> /// <param name="TaobaoRate">上传给淘宝的价格计划</param> /// <param name="bianhua">输出价格是否发生变化</param> /// <param name="IsCustomer">1为是客户请求,0为程序请求</param> /// bool isVirtual, bool isCommission, int invoiceMode, decimal subRate, decimal guidePrice, AliTripHotelExtension hotelExtension, TaobaoRate rate /// <returns></returns> private decimal GetSalePrice(DateTime date, bool isVirtual, decimal subRate, decimal guidePrice, TaobaoRate rate, ref bool bianhua, ref bool isUpdate, int IsCustomer = 1) { bianhua = false; isUpdate = true; decimal salePrice = guidePrice; decimal addPoint = 1; decimal basePrice = guidePrice * (1 - (decimal)subRate); var nowDate = DateTime.Now; var isGuidePrice = 0; var isReduce = false; var deductPoint = false; var isAddRedEnvelope = true; //if (hotelExtension != null) //{ // isGuidePrice = hotelExtension.Extension3 ?? 0; // isReduce = hotelExtension.Extension ?? false; //价格控制总阀 // deductPoint = hotelExtension.Extension4 == 1; //下降一个点 // isAddRedEnvelope = hotelExtension.Extension5 == 1; //} if (isGuidePrice == 1) { return(guidePrice); } #region /* #region 接口获取matt那边的卖价,获取不到则返回指导价 [190404] * try * { * //单位分 * var mattSalePrice = Convert.ToInt32(WebHttpRequest.Get(string.Format("http://119.23.44.20:9000/AliTrip/GetSalePrice?Channel=5&CurDate={0}&GuidePrice={1}&SubRatio={2}&IsAgent={3}&IsVirtual={4}&IsMedalHotel=false&IsHzHotel={5}", date.ToString("yyyy-MM-dd"), guidePrice, subRate, isCommission, isVirtual, !isAddRedEnvelope))); * if (mattSalePrice > 0) * { * salePrice = mattSalePrice / 100m; * return salePrice; * } * } * catch (Exception ex) * { * } #endregion #region 190319 * //如果美团佣金率>6.5%的,可以再低1个点 * //100-220减1, * //220到320 减2 * //320到450 减3 * //450到600 减4 * //salePrice>600的 减5 * //salePrice>800的 减6 * if (subRate > 0.055m) * { * salePrice = Math.Round(guidePrice * 0.975m, 2); * } * else * { * salePrice = Math.Round(guidePrice * 0.98m, 2); * } * if (salePrice >= 100 && salePrice <= 220) * { * salePrice += -1; * } * else if (salePrice > 220 && salePrice <= 320) * { * salePrice += -2; * } * else if (salePrice > 320 && salePrice <= 450) * { * salePrice += -3; * } * else if (salePrice > 450 && salePrice <= 600) * { * salePrice += -4; * } * else if (salePrice > 600 && salePrice <= 800) * { * salePrice += -5; * } * else if (salePrice > 800) * { * salePrice += -6; * } * //美团代理产品在先有基础上多加一个点 * if (isCommission) * { * salePrice = Math.Ceiling(salePrice * 1.01m); * } * if (isVirtual) //虚拟价格这个基础上统一减1,然后模拟出来的不设置免费取消,取消都要收55%,不能取消的时间点到当日22点,取消收69% * { * salePrice += -1; * } * * //平时的加价提高0.3% * salePrice = salePrice * 1.003m; * //距离目前超过30天以上的日期的报价,你多加0.5个点 * if ((date - DateTime.Now.Date).TotalDays > 30) * { * salePrice = salePrice * 1.005m; * } * //7号凌晨前,美团产品90-300的可以再调低1元,300以上调低2元 * if (DateTime.Now < new DateTime(2019, 4, 7)) * { * if (salePrice >= 90 && salePrice <= 300) * { * salePrice += -1; * } * else if (salePrice > 300) * { * salePrice += -2; * } * } * * salePrice = (int)salePrice + 0.49m; #endregion * salePrice += 20;//加20红包再减20 */ #endregion //代理加一个点 //if (isCommission) //{ // salePrice = salePrice * 1.01M; //} //salePrice = Math.Round(salePrice * 0.995m) + 0.49m; //if (isCommission) //{ // salePrice = salePrice * 1.01M;//代理加一个点 //} if (salePrice >= 70 && salePrice <= 230) { salePrice = salePrice * 0.998m; } if (date >= new DateTime(2019, 12, 31)) { salePrice = salePrice * 1.015m; } salePrice = Math.Floor(salePrice) + 0.49m; if (rate != null && rate.inventory_price != null && rate.inventory_price.Count > 0) { var inventory_price = rate.inventory_price.Where(a => Convert.ToDateTime(a.date) == date).FirstOrDefault(); if (inventory_price.price > 0 && inventory_price.price <= 4999900) { //当降价了,直接输出之前推送的价格 //if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.97m || (salePrice - Convert.ToDecimal(inventory_price.price) / 100) <= 40) if (Convert.ToDecimal(inventory_price.price) / 100 >= salePrice * 0.97m || (salePrice - Convert.ToDecimal(inventory_price.price) / 100) <= 10) { if (Convert.ToDecimal(inventory_price.price) / 100 != salePrice) { bianhua = true; } if (IsCustomer != 0) { isUpdate = false; return(Convert.ToDecimal(inventory_price.price) / 100); } } //else if ((inventory_price.price / 100) * 1.01m > salePrice) //{ // return inventory_price.price / 100; //} } } return(salePrice); }