예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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);
        }