/// <summary> /// 获取酒店最低价格 /// </summary> /// <param name="hotelIds"></param> public static OTA_HotelRatePlanReturnEntity GetHotelRoomPrice(List<int> hotelIds, bool availRatesOnlyInd, DateTime startDt, DateTime endDt) { OTA_HotelRatePlanCallEntity callEntity = new OTA_HotelRatePlanCallEntity(); List<HotelRatePlanRQ> ratePlans = new List<HotelRatePlanRQ>(); var items = from it in hotelIds let ratePlan = new HotelRatePlanRQ() { AvailRatesOnlyInd = availRatesOnlyInd, StartDate = startDt, EndDate = endDt, HotelCode = it } select ratePlan; callEntity.HotelRatePlanList = items.ToList(); var rep = hotelOTAService.OTA_HotelRatePlan(callEntity); return rep; }
public static bool HotelRealTimeRoomRatePlanInfo(int hotelID, int roomTypeCode) { OTA_HotelRatePlanCallEntity callEntity = new OTA_HotelRatePlanCallEntity(); var ratePlansRQ = new HotelRatePlanRQ(); ratePlansRQ.AvailRatesOnlyInd = true; ratePlansRQ.HotelCode = hotelID; ratePlansRQ.StartDate = DateTime.Now.Date; callEntity.HotelRatePlanList = new List<HotelRatePlanRQ>() { ratePlansRQ }; var rep = hotelOTAService.OTA_HotelRatePlan(callEntity); return true; }
/// <summary> /// 根据查询条件查询可用的Rate Plan,包括房价、可卖渠道。通常用于双方系统保持一致性 /// 参数Start,End,HotelCode为必填;参数AvailRatesOnlyInd为空时值为false /// </summary> /// <param name="req"></param> /// <returns></returns> public OTA_HotelRatePlanReturnEntity OTA_HotelRatePlan(OTA_HotelRatePlanCallEntity req) { var rep = new OTA_HotelRatePlanReturnEntity(); try { StringBuilder reqXml = new StringBuilder("<ns:OTA_HotelRatePlanRQ TimeStamp=\"2013-06-01T00:00:00.000+08:00\" Version=\"1.0\">"); reqXml.Append("<ns:RatePlans>"); foreach (var item in req.HotelRatePlanList) { reqXml.Append("<ns:RatePlan>"); reqXml.AppendFormat("<ns:DateRange Start=\"{0}\" End=\"{1}\"/>", item.StartDate.ToString("yyyy-MM-dd"), item.EndDate.ToString("yyyy-MM-dd")); reqXml.Append("<ns:RatePlanCandidates>"); reqXml.AppendFormat("<ns:RatePlanCandidate AvailRatesOnlyInd=\"{0}\" >", item.AvailRatesOnlyInd.ToString().ToLower()); reqXml.Append("<ns:HotelRefs>"); reqXml.AppendFormat("<ns:HotelRef HotelCode=\"{0}\"/>", item.HotelCode); reqXml.Append("</ns:HotelRefs>"); reqXml.Append("</ns:RatePlanCandidate>"); reqXml.Append("</ns:RatePlanCandidates>"); reqXml.Append("<ns:TPA_Extensions RestrictedDisplayIndicator=\"false\"/>"); reqXml.Append("</ns:RatePlan>"); } reqXml.Append("</ns:RatePlans>"); reqXml.Append("</ns:OTA_HotelRatePlanRQ>"); req.RequestContent = reqXml.ToString(); string repXml = HotelApiCall(req); //LogHelper.Debug(repXml); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(repXml); GetHeaderResult(xmlDoc, rep); var hotelRatePlanNodes = xmlDoc.SelectNodes("Response/HotelResponse/OTA_HotelRatePlanRS/RatePlans"); List<HotelRatePlan> hotelRatePlanList = new List<HotelRatePlan>(); HotelRatePlan ratePlan = null; foreach (XmlNode hp in hotelRatePlanNodes) { ratePlan = new HotelRatePlan(); ratePlan.HotelCode = ((XmlElement)hp).GetAttribute("HotelCode").Trim().ToInt32(); var roomRatePlanNodes = hp.SelectNodes("RatePlan"); List<RoomRatePlan> roomRatePlanList = new List<RoomRatePlan>(); RoomRatePlan roomRatePlan = null; foreach (XmlNode rp in roomRatePlanNodes) { roomRatePlan = new RoomRatePlan(); XmlNode desNode = rp.SelectSingleNode("Description/Text"); if (desNode != null) { roomRatePlan.Description = desNode.InnerText.Trim(); } roomRatePlan.MarketCode = ((XmlElement)rp).GetAttribute("MarketCode").Trim().ToInt32(); roomRatePlan.RatePlanCategory = ((XmlElement)rp).GetAttribute("RatePlanCategory").Trim().ToInt32(); roomRatePlan.HotelRoomCode = ((XmlElement)rp).GetAttribute("RatePlanCode").Trim().ToInt32(); var SellableProductNodes = rp.SelectNodes("SellableProducts/SellableProduct"); List<string> sellableProductList = new List<string>(); if (SellableProductNodes != null) { foreach (XmlNode n in SellableProductNodes) { sellableProductList.Add(((XmlElement)n).GetAttribute("InvCode").Trim()); } } roomRatePlan.SellableProductList = sellableProductList; List<RoomRate> roomRateList = new List<RoomRate>(); var roomRateNodes = rp.SelectNodes("Rates/Rate"); RoomRate roomRate = null; foreach (XmlNode rn in roomRateNodes) { roomRate = new RoomRate(); roomRate.StartTime = ((XmlElement)rn).GetAttribute("Start").Trim().ToDateTime(); roomRate.EndTime = ((XmlElement)rn).GetAttribute("End").Trim().ToDateTime(); roomRate.Status = ((XmlElement)rn).GetAttribute("Status").Trim(); roomRate.IsInstantConfirm = ((XmlElement)rn).GetAttribute("IsInstantConfirm").Trim()=="false"?0:1; XmlElement baseByGuestAmtNode = (XmlElement)rn.SelectSingleNode("BaseByGuestAmts/BaseByGuestAmt"); roomRate.AmountBeforeTax = baseByGuestAmtNode.GetAttribute("AmountBeforeTax").Trim().ToDecimal(); roomRate.CurrencyCode = baseByGuestAmtNode.GetAttribute("CurrencyCode").Trim(); roomRate.NumberOfGuests = baseByGuestAmtNode.GetAttribute("NumberOfGuests").Trim().ToInt32(); string listprice = baseByGuestAmtNode.GetAttribute("ListPrice").Trim(); if (!string.IsNullOrEmpty(listprice)) { roomRate.ListPrice = listprice.ToDecimal(); } XmlNode CancelPenaltyNode = rn.SelectSingleNode("CancelPolicies/CancelPenalty"); if(CancelPenaltyNode!=null) { roomRate.CancelPenaltyStartTime = ((XmlElement)CancelPenaltyNode).GetAttribute("Start").Trim().ToDateTime(); roomRate.CancelPenaltyEndTime = ((XmlElement)CancelPenaltyNode).GetAttribute("End").Trim().ToDateTime(); XmlNode AmountPercentNode = CancelPenaltyNode.SelectSingleNode("AmountPercent"); roomRate.CancelAmount = ((XmlElement)AmountPercentNode).GetAttribute("Amount").Trim().ToDecimal(); roomRate.CancelCurrencyCode = ((XmlElement)AmountPercentNode).GetAttribute("CurrencyCode").Trim(); XmlElement GuaranteePolicyEle = (XmlElement)rn.SelectSingleNode("GuaranteePolicies/GuaranteePolicy"); if(GuaranteePolicyEle!=null) { roomRate.GuaranteeCode = GuaranteePolicyEle.GetAttribute("GuaranteeCode").Trim(); roomRate.HoldTime = GuaranteePolicyEle.GetAttribute("HoldTime").Trim(); } } else { roomRate.CancelPenaltyStartTime = DateTime.Parse("1900-1-1"); roomRate.CancelPenaltyEndTime = DateTime.Parse("1900-1-1"); roomRate.CancelAmount = 0; roomRate.CancelCurrencyCode = ""; roomRate.GuaranteeCode = ""; roomRate.HoldTime = "1900-1-1"; } XmlElement MealsIncludedEle = (XmlElement)rn.SelectSingleNode("MealsIncluded"); roomRate.Breakfast = MealsIncludedEle.GetAttribute("Breakfast").Trim(); roomRate.NumberOfBreakfast = MealsIncludedEle.GetAttribute("NumberOfBreakfast").Trim().ToInt32(); List<Pertain> pertainList = new List<Pertain>(); var feeNodes = rn.SelectNodes("Fees/Fee"); Pertain pertain = null; foreach (XmlNode fn in feeNodes) { pertain = new Pertain(); pertain.Amount = ((XmlElement)fn).GetAttribute("Amount").Trim().ToDecimal(); pertain.ChargeUnit = ((XmlElement)fn).GetAttribute("ChargeUnit").Trim(); pertain.CurrencyCode = ((XmlElement)fn).GetAttribute("CurrencyCode").Trim(); pertain.Code = ((XmlElement)fn).GetAttribute("Code").Trim(); pertain.Description = fn.SelectSingleNode("Description/Text").InnerText.Trim(); pertainList.Add(pertain); } roomRate.PertainList = pertainList; XmlNode RebatePromotionNode = rn.SelectSingleNode("TPA_Extensions/RebatePromotion"); if (RebatePromotionNode != null) { roomRate.StartPeriod = ((XmlElement)RebatePromotionNode).GetAttribute("StartPeriod").Trim().ToDateTime(); roomRate.EndPeriod = ((XmlElement)RebatePromotionNode).GetAttribute("EndPeriod").Trim().ToDateTime(); roomRate.BackCurrencyCode = ((XmlElement)RebatePromotionNode).GetAttribute("CurrencyCode").Trim(); roomRate.BackCode = ((XmlElement)RebatePromotionNode).GetAttribute("Code").Trim(); roomRate.ProgramName = ((XmlElement)RebatePromotionNode).GetAttribute("ProgramName").Trim(); roomRate.BackAmount = ((XmlElement)RebatePromotionNode).GetAttribute("Amount").Trim().ToDecimal(); roomRate.BackDescription = RebatePromotionNode.SelectSingleNode("Description/Text").InnerText.Trim(); roomRate.RoomCode = roomRatePlan.HotelRoomCode; } else { roomRate.StartPeriod = DateTime.Parse("1900-1-1"); roomRate.EndPeriod = DateTime.Parse("1900-1-1"); roomRate.BackCurrencyCode = ""; roomRate.BackCode = ""; roomRate.ProgramName = ""; roomRate.BackAmount = 0; roomRate.BackDescription = ""; roomRate.RoomCode = 0; } roomRateList.Add(roomRate); } roomRatePlan.RoomRateList = roomRateList; roomRatePlanList.Add(roomRatePlan); } ratePlan.RoomRatePlanList = roomRatePlanList; hotelRatePlanList.Add(ratePlan); } rep.HotelRatePlanList = hotelRatePlanList; } catch { throw; } return rep; }