/// <summary> /// 获得【起飞信息】和【返回信息】输入命令行 /// </summary> /// <param name="request"></param> /// <param name="sFlight">起飞信息</param> /// <returns></returns> private string GetHeadCommandLine(JetermEntity.Request.Booking request, Flight sFlight) { sFlight = request.FlightList[0]; // 获得航段信息输入命令行: string ssHeaderLine = string.Empty; int passengerNumber = request.PassengerList.Count; foreach (Flight flight in request.FlightList) { ssHeaderLine += string.Format("SS: {0}/{1}/{2}/{3}{4}/{5}[RN]", flight.FlightNo, flight.Cabin.Substring(0, 1), string.Format("{0:dd}{1}", flight.DepDate, ((ParserHelper.Month)flight.DepDate.Month).ToString()), flight.SCity, flight.ECity, passengerNumber); } return(ssHeaderLine); }
/// <summary> /// 解析请求对象 /// </summary> /// <param name="request">请求对象</param> /// <returns>若请求参数验证通过,则返回订位SS指令;否则返回为空。</returns> public override string ParseCmd(JetermEntity.Request.Booking request) { _request = request; if (!ValidRequest()) { return(string.Empty); } // 1、获得【起飞信息】和【返回信息】输入命令行: Flight sFlight = request.FlightList[0]; string ssHeaderLine = GetHeadCommandLine(request, sFlight); List <string> commandLineList = new List <string>(); GetSecondCommandLine(request, sFlight, commandLineList); // 2、获得预订人名输入命令行: string namesLine = commandLineList[0]; // 4、获得以【SSR FOID YY HK/NI】或【SSR FOID {0} HK/NI】开头的那些命令行: string cardNumberLine = commandLineList[1]; string airLine = sFlight.FlightNo.Substring(0, 2); // 航司 // 5、若为儿童订位,则出现【SSR OTHS {航司如MU} ADULT PNR IS {成人PNR如HF4X80}】命令行: string adultPnrLine = string.Empty; if (!string.IsNullOrWhiteSpace(commandLineList[3])) { adultPnrLine = string.Format("SSR OTHS {0} ADULT PNR IS {1}[RN]", airLine, request.Pnr); } // 6、若为儿童订位,则出现【SSR CHLD {航司如MU} HK1/{儿童出生日期如10JUL12}/P{第几位儿童乘客如1}】那些命令行: string childrenBirthdayLine = commandLineList[3]; // 8、获得可能出现的以【OSI HU CKIN SSAC/S{0}】开头的那些命令行: string osiHUCkinLine = commandLineList[2]; // 3、获得以TKTL开头的命令行: DateTime dt = DateTime.Now.AddMinutes(60); string saveTime = dt.ToString("HHmm"); //保留时间 string saveDay = dt.ToString("dd"); //保留日期 string saveMonth = dt.ToString("MM"); //保留月份 string saveExp = saveTime + "/" + saveDay + ParserHelper.GetEnMonth(saveMonth); //保留时限 string tktlLine = string.Format("TKTL{0}/{1}[RN]", saveExp, request.OfficeNo); // 7、获得以OSI开头的命令行: string osiLine = string.Format("OSI {0} CTCT {1}[RN]", airLine, request.Mobile); string osiZHLine = string.Empty; if (airLine.Equals("ZH") && !string.IsNullOrWhiteSpace(request.PhoneNo)) { osiZHLine = string.Format("OSI {0} CTCT{1}[RN]", airLine, request.PhoneNo); } // 9、获得可能出现的以【OSI PN CABIN{0}】开头的命令行: // 如果是西部航空,则会出现以【OSI PN CABIN{0}】开头的命令行: string osiPNCabinLine = string.Empty; string pnCabin = string.Empty; if (airLine.Equals("PN")) { foreach (Flight flight in request.FlightList) { pnCabin += string.Format("/{0}", flight.Cabin); } osiPNCabinLine = string.Format("OSI PN CABIN{0}[RN]", pnCabin); } // 10、获得以【RMK TJ AUTH】开头的那些命令行: string rmkAuthLine = string.Empty; if (request.RMKOfficeNoList != null && request.RMKOfficeNoList.Any()) { foreach (string rmkOfficeNo in request.RMKOfficeNoList) { if (string.IsNullOrWhiteSpace(rmkOfficeNo)) { continue; } rmkAuthLine += string.Format("RMK TJ AUTH {0}[RN]", rmkOfficeNo); } } // 11、获得可能出现的以【RMK】开头的命令行: string rmkRemarkLine = string.Empty; if (!string.IsNullOrWhiteSpace(request.RMKRemark)) { rmkRemarkLine = string.Format("RMK {0}[RN]", request.RMKRemark); } // 12、最终获得订位SS指令: string bookCommand = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}\\", ssHeaderLine, namesLine, tktlLine, cardNumberLine, adultPnrLine, childrenBirthdayLine, osiLine, osiZHLine, osiHUCkinLine, osiPNCabinLine, rmkAuthLine, rmkRemarkLine); // 获得订位SS指令 _response.result.Command = bookCommand.Replace("[RN]", Environment.NewLine); return(_response.result.Command); }
/// <summary> /// 获得以下输入命令行: /// 1、预订人名输入命令行 /// 2、以【SSR FOID YY HK/NI】或【SSR FOID {0} HK/NI】开头的那些命令行 /// 3、可能出现的以【OSI HU CKIN SSAC/S{0}】开头的那些命令行 /// 4、如果为儿童订票,则出现以【SSR CHLD {航司如MU} HK1/{儿童出生日期如10JUL12}/P{第几位儿童乘客如1}】那些命令行 /// </summary> /// <param name="request">请求对象</param> /// <param name="sFlight">返程信息</param> /// <param name="commandLineList"></param> private void GetSecondCommandLine(JetermEntity.Request.Booking request, Flight sFlight, List <string> commandLineList) { // 获得预订人名输入命令行: string namesLine = "NM "; // 获得以【SSR FOID YY HK/NI】或【SSR FOID {0} HK/NI】开头的那些命令行: string cardNumberLine = string.Empty; // 如果为儿童订票,则获得以【SSR CHLD {航司如MU} HK1/{儿童出生日期如10JUL12}/P{第几位儿童乘客如1}】那些命令行 string childrenBirthdayLine = string.Empty; // 获得可能出现的以【OSI HU CKIN SSAC/S{0}】开头的那些命令行: string osiHUCkinLine = string.Empty; IEnumerable <string> passengerNameList = request.PassengerList.Select(p => p.name); string[] sortedPassengerNameList = ParserHelper.SortChinese(passengerNameList).ToArray(); int length = 3; // 原有逻辑:初始值为3 string airLine = sFlight.FlightNo.Substring(0, 2); // 航司 for (int i = 1; i <= sortedPassengerNameList.Length; i++) { foreach (Passenger passenger in request.PassengerList) { if (!sortedPassengerNameList[i - 1].Equals(passenger.name)) { continue; } #region 获得预订人名输入命令行 namesLine += GetCurrentName(passenger.name, ref length); #endregion #region 获得以【SSR FOID YY HK/NI】或【SSR FOID {0} HK/NI】开头的那些命令行 if (passenger.PassType.GetHashCode() == EtermCommand.PassengerType.Children.GetHashCode()) { cardNumberLine += string.Format("SSR FOID {0} HK/NI{1}/P{2}[RN]", airLine, passenger.cardno, i); } else { switch (passenger.idtype) { case EtermCommand.IDtype.Other: // 证件类型为其他时 FOID项的航司固定为“YY” cardNumberLine += string.Format("SSR FOID YY HK/NI{0}/P{1}[RN]", passenger.cardno, i); break; default: cardNumberLine += string.Format("SSR FOID {0} HK/NI{1}/P{2}[RN]", airLine, passenger.cardno, i); break; } } #endregion #region 如果为儿童订票,则出现以【SSR CHLD {航司如MU} HK1/{儿童出生日期如10JUL12}/P{第几位儿童乘客如1}】那些命令行 if (passenger.PassType == EtermCommand.PassengerType.Children) { string day = passenger.ChildBirthday.ToString("dd"); string month = ParserHelper.GetEnMonth(passenger.ChildBirthday.ToString("MM")); string year = passenger.ChildBirthday.ToString("yy"); string childBirthdayStr = string.Format("{0}{1}{2}", day, month, year); childrenBirthdayLine += string.Format("SSR CHLD {0} HK1/{1}/P{2}[RN]", airLine, childBirthdayStr, i); } #endregion #region 获得可能出现的以【OSI HU CKIN SSAC/S{0}】开头的那些命令行 if (airLine.Equals("HU") && sFlight.Cabin.Equals("A")) { osiHUCkinLine += string.Format("OSI HU CKIN SSAC/S{0}[RN]", i); } #endregion } } namesLine += "[RN]"; commandLineList.Add(namesLine); commandLineList.Add(cardNumberLine); commandLineList.Add(osiHUCkinLine); commandLineList.Add(childrenBirthdayLine); }