Ejemplo n.º 1
0
        /// <summary>
        /// 保存指令信息到数据库
        /// </summary>
        /// <returns></returns>
        public bool SaveInsInfo(RePnrObj PnrInfo, User_Employees m_user, User_Company m_company)
        {
            bool   IsSuc  = true;
            string errMsg = "";

            try
            {
                List <string> sqlList = new List <string>();
                if (PnrInfo != null && PnrInfo.InsList.Count > 0)
                {
                    //一组指令ID
                    string        GroupID = System.DateTime.Now.Ticks.ToString();
                    DateTime      _sendtime = Convert.ToDateTime("1900-01-01");
                    DateTime      _recvtime = Convert.ToDateTime("1900-01-01");
                    string        UserAccount = userInfo.User.LoginName, CpyNo = userInfo.Company.UninCode, serverIPPort = PnrInfo.ServerIP + ":" + PnrInfo.ServerPort, Office = PnrInfo.Office;
                    string[]      strArr     = null;
                    List <string> Removelist = new List <string>();
                    Removelist.Add("id");
                    foreach (KeyValuePair <string, string> KV in PnrInfo.InsList)
                    {
                        strArr = KV.Key.Split(new string[] { PnrInfo.SplitChar }, StringSplitOptions.None);
                        if (strArr.Length == 4)
                        {
                            Tb_SendInsData ins = new Tb_SendInsData();
                            ins.SendIns = strArr[0];
                            if (DateTime.TryParse(strArr[1], out _sendtime))
                            {
                                ins.SendTime = _sendtime;
                            }
                            if (DateTime.TryParse(strArr[2], out _recvtime))
                            {
                                ins.RecvTime = _recvtime;
                            }
                            if (strArr[3] != "")
                            {
                                ins.Office = strArr[3];
                            }
                            ins.RecvData        = KV.Value;
                            ins.Office          = Office;
                            ins.ServerIPAndPort = serverIPPort + "|" + GroupID;
                            ins.UserAccount     = UserAccount;
                            ins.CpyNo           = CpyNo;
                            ins.SendInsType     = 12;//特价指令
                            sqlList.Add(PbProject.Dal.Mapping.MappingHelper <Tb_SendInsData> .CreateInsertModelSql(ins, Removelist));
                        }
                    }
                    if (sqlList.Count > 0)
                    {
                        IsSuc = Manage.ExecuteSqlTran(sqlList, out errMsg);
                    }
                }
            }
            catch (Exception ex)
            {
                IsSuc  = false;
                errMsg = ex.Message + ex.StackTrace.ToString();
                PnrAnalysis.LogText.LogWrite("【时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff") + " 方法:SaveInsInfo】================================================================\r\n 异常信息:" + errMsg + "\r\n", "SpPatAjax");
            }
            return(IsSuc);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 预订编码日志
        /// </summary>
        /// <param name="SSContent"></param>
        /// <param name="ResultContent"></param>
        /// <param name="Pnr"></param>
        /// <param name="pnrLogList"></param>
        /// <returns></returns>
        private bool YuDingPnrLog(UserLoginInfo userLogin, RePnrObj PnrInfo, string SSContent, string ResultContent, string Pnr, string Office, ref List <string> pnrLogList)
        {
            bool Insert = false;

            try
            {
                Log_Pnr logpnr = new Log_Pnr();
                logpnr.CpyNo         = userLogin.Company.UninCode;
                logpnr.CpyName       = userLogin.Company.UninCode;
                logpnr.CpyType       = userLogin.Company.RoleType;
                logpnr.OperTime      = System.DateTime.Now;
                logpnr.OperLoginName = userLogin.User.LoginName;
                logpnr.OperUserName  = userLogin.User.UserName;
                logpnr.SSContent     = SSContent;
                logpnr.ResultContent = ResultContent;
                logpnr.PNR           = Pnr;
                logpnr.OfficeCode    = Office;
                logpnr.A7            = PnrInfo.ServerIP + "|" + PnrInfo.ServerPort;//IP和端口
                Insert = (bool)this.baseDataManage.CallMethod("Log_Pnr", "Insert", null, new object[] { logpnr });
                if (Insert)
                {
                    pnrLogList.Add("'" + logpnr.id.ToString() + "'");
                }
            }
            catch (Exception ex)
            {
                DataBase.LogCommon.Log.Error("Create.aspx页面YuDingPnrLog", ex);
            }
            return(Insert);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 预订编码日志
        /// </summary>
        /// <param name="SSContent"></param>
        /// <param name="ResultContent"></param>
        /// <param name="Pnr"></param>
        /// <param name="pnrLogList"></param>
        /// <returns></returns>
        public bool YuDingPnrLog(RePnrObj PnrInfo, string SSContent, string ResultContent, string Pnr, string Office, out Log_Pnr logpnr)
        {
            bool Insert = false;

            logpnr = new Log_Pnr();
            try
            {
                logpnr.CpyNo         = userInfo.Company.UninCode;
                logpnr.CpyName       = userInfo.Company.UninCode;
                logpnr.CpyType       = userInfo.Company.RoleType;
                logpnr.OperTime      = System.DateTime.Now;
                logpnr.OperLoginName = userInfo.User.LoginName;
                logpnr.OperUserName  = userInfo.User.UserName;
                logpnr.SSContent     = SSContent;
                logpnr.ResultContent = ResultContent;
                logpnr.PNR           = Pnr;
                logpnr.OfficeCode    = Office;
                logpnr.A7            = "[特价编码]" + PnrInfo.ServerIP + "|" + PnrInfo.ServerPort;//IP和端口
                Insert = (bool)Manage.CallMethod("Log_Pnr", "Insert", null, new object[] { logpnr });
            }
            catch (Exception ex)
            {
                PnrAnalysis.LogText.LogWrite("【时间:" + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.ff") + " 方法:YuDingPnrLog 编码:" + Pnr + "】================================================================\r\n 异常信息:" + ex.Message + "\r\n", "SpPatAjax");
            }
            return(Insert);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 生成编码
        /// </summary>
        /// <param name="CarryCode">航空公司二字码</param>
        /// <param name="Office">预订编码Office</param>
        /// <param name="AdultPnr">儿童订单中儿童编码备注的成人编码</param>
        /// <param name="IsChdETDZAudltTK">是否儿童出成人票</param>
        /// <param name="pList">乘机人列表</param>
        /// <param name="skywaylist">航段列表</param>
        /// <returns></returns>
        public RePnrObj GetPnrInfo(string CarryCode, List <Tb_Ticket_Passenger> pList, List <Tb_Ticket_SkyWay> skywaylist, out string ErrMsg)
        {
            ErrMsg = "";
            List <IPassenger> pasList  = new List <IPassenger>();
            List <ISkyLeg>    skyList  = new List <ISkyLeg>();
            SendNewPID        pid      = new SendNewPID();
            PnrParamObj       PnrParam = new PnrParamObj();

            //必填项 是否开启新版PID发送指令
            PnrParam.UsePIDChannel     = userInfo.FQP.KongZhiXiTong != null && userInfo.FQP.KongZhiXiTong.Contains("|48|") ? 2 : 0; //2;
            PnrParam.ServerIP          = userInfo.Configparam.WhiteScreenIP;
            PnrParam.ServerPort        = int.Parse(string.IsNullOrEmpty(userInfo.Configparam.WhiteScreenPort) ? "0" : userInfo.Configparam.WhiteScreenPort);
            PnrParam.Office            = userInfo.Configparam.Office.Split('^')[0];
            PnrParam.CarryCode         = CarryCode;
            PnrParam.PasList           = pasList;
            PnrParam.SkyList           = skyList;
            PnrParam.IsGetSpecialPrice = 1;//为获取特价
            //是否儿童出成人票
            PnrParam.ChildIsAdultEtdz = "0";
            //可选项
            PnrParam.UserName = userInfo.User != null ? userInfo.User.LoginName : "";

            //输入的手机号码 预订编码CT项电话
            PnrParam.CTTel     = "028-55555555";
            PnrParam.CTCTPhone = "15928636274";


            PnrParam.PID   = userInfo.Configparam.Pid;
            PnrParam.KeyNo = userInfo.Configparam.KeyNo;
            //乘机人
            foreach (Tb_Ticket_Passenger pas in pList)
            {
                IPassenger p1 = new IPassenger();
                pasList.Add(p1);
                p1.PassengerName = pas.PassengerName;
                p1.PassengerType = pas.PassengerType;
                p1.PasSsrCardID  = pas.Cid;
            }
            //航段
            foreach (Tb_Ticket_SkyWay skyway in skywaylist)
            {
                ISkyLeg leg1 = new ISkyLeg();
                skyList.Add(leg1);
                leg1.CarryCode    = skyway.CarryCode;
                leg1.FlightCode   = skyway.FlightCode;
                leg1.FlyStartTime = skyway.FromDate.ToString("HHmm");
                leg1.FlyEndTime   = skyway.ToDate.ToString("HHmm");
                leg1.FlyStartDate = skyway.FromDate.ToString("yyyy-MM-dd");
                leg1.fromCode     = skyway.FromCityCode;
                leg1.toCode       = skyway.ToCityCode;
                leg1.Space        = skyway.Space;
                leg1.Discount     = skyway.Discount;
            }
            RePnrObj pObj = pid.ISendIns(PnrParam);

            //记录指令
            SaveInsInfo(pObj, userInfo.User, userInfo.Company);
            return(pObj);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// 保存指令信息到数据库
        /// </summary>
        /// <returns></returns>
        private bool SaveInsInfo(RePnrObj PnrInfo, UserLoginInfo userLogin)
        {
            bool   IsSuc  = true;
            string errMsg = "";

            try
            {
                List <string> sqlList = new List <string>();
                if (PnrInfo != null && PnrInfo.InsList.Count > 0)
                {
                    //一组指令ID
                    string        GroupID = System.DateTime.Now.Ticks.ToString();
                    DateTime      _sendtime = Convert.ToDateTime("1900-01-01");
                    DateTime      _recvtime = Convert.ToDateTime("1900-01-01");
                    string        UserAccount = userLogin.User.LoginName, CpyNo = userLogin.Company.UninCode, serverIPPort = PnrInfo.ServerIP + ":" + PnrInfo.ServerPort, Office = PnrInfo.Office;
                    string[]      strArr     = null;
                    List <string> Removelist = new List <string>();
                    Removelist.Add("id");
                    foreach (KeyValuePair <string, string> KV in PnrInfo.InsList)
                    {
                        strArr = KV.Key.Split(new string[] { PnrInfo.SplitChar }, StringSplitOptions.None);
                        if (strArr.Length == 4)
                        {
                            Tb_SendInsData ins = new Tb_SendInsData();
                            ins.SendIns = strArr[0];
                            if (DateTime.TryParse(strArr[1], out _sendtime))
                            {
                                ins.SendTime = _sendtime;
                            }
                            if (DateTime.TryParse(strArr[2], out _recvtime))
                            {
                                ins.RecvTime = _recvtime;
                            }
                            if (strArr[3] != "")
                            {
                                ins.Office = strArr[3];
                            }
                            ins.RecvData        = KV.Value;
                            ins.Office          = Office;
                            ins.ServerIPAndPort = serverIPPort + "|" + GroupID;
                            ins.UserAccount     = UserAccount;
                            ins.CpyNo           = CpyNo;
                            sqlList.Add(PbProject.Dal.Mapping.MappingHelper <Tb_SendInsData> .CreateInsertModelSql(ins, Removelist));
                        }
                    }
                    if (sqlList.Count > 0)
                    {
                        IsSuc = this.baseDataManage.ExecuteSqlTran(sqlList, out errMsg);
                    }
                }
            }
            catch (Exception ex)
            {
                IsSuc  = false;
                errMsg = ex.Message + ex.StackTrace.ToString();
                DataBase.LogCommon.Log.Error("Create.aspx页面SaveInsInfo", ex);
            }
            return(IsSuc);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 白屏预订 乘客婴儿个数与编码中解析出来的婴儿个数比较是否一致 给出个提示
        /// </summary>
        /// <returns></returns>
        public bool yudingINFCheck(RePnrObj PnrInfo, List <Tb_Ticket_Passenger> PasList)
        {
            bool IsCheck      = false;
            int  INFCount     = 0;
            int  tempINFCount = 0;

            try
            {
                foreach (Tb_Ticket_Passenger pas in PasList)
                {
                    if (pas.PassengerType == 3)
                    {
                        INFCount++;
                    }
                }
                if (PnrInfo.PnrList.Length > 0 && PnrInfo.PnrList[0] != null)
                {
                    foreach (PassengerInfo item in PnrInfo.PnrList[0]._PassengerList)
                    {
                        if (item.PassengerType == "3")
                        {
                            tempINFCount++;
                        }
                    }
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                if (INFCount != tempINFCount)
                {
                    IsCheck = true;
                }
            }
            return(IsCheck);
        }
Ejemplo n.º 7
0
 private void GetPassenger(OrderInputParam InputParam, List <Tb_Ticket_Passenger> AdultPasList, List <Tb_Ticket_Passenger> ChildPasList, RePnrObj pnrObj)
 {
     AdultPasList = InputParam.OrderParamModel.Where(p => !p.Order.IsChdFlag).Select(p => p.PasList).FirstOrDefault();
     ChildPasList = InputParam.OrderParamModel.Where(p => p.Order.IsChdFlag).Select(p => p.PasList).FirstOrDefault();
 }
Ejemplo n.º 8
0
        /// <summary>
        /// 返回数据
        /// </summary>
        /// <param name="fromcity">起飞城市三字码</param>
        /// <param name="tocity">抵达城市三字码</param>
        /// <param name="totime">起飞时间</param>
        /// <param name="arrtime">抵达时间</param>
        /// <param name="starttime">起飞日期</param>
        /// <param name="cw">舱位</param>
        /// <param name="aircode">航空公司</param>
        /// <param name="aircono">航班号</param>
        /// <param name="fd">返点</param>
        /// <param name="strYh">现返</param>
        /// <param name="hidId">GUID</param>
        /// <param name="Fare">固定特价</param>
        /// <param name="TAX">基建</param>
        /// <param name="RQFare">燃油</param>
        /// <param name="isGuding">是否固定特价</param>
        /// <param name="Yprice">是否固定特价</param>
        private SpecialPrice PlyMatch(UserLoginInfo userInfo, string fromcity, string tocity, string totime, string arrtime, string starttime,
                                      string cw, string aircode, string aircono, string fd, string strYh, string hidId,
                                      string Fare, string TAX, string RQFare, bool isGuding, string Yprice
                                      )
        {
            SpecialPrice sp = new SpecialPrice();

            try
            {
                string[] strValue = new string[4];
                //非固定特价PATA数据
                if (!isGuding)
                {
                    #region pat 数据
                    // ig|SS MU747/X/30NOV/KMGSHANN1/0730 1025|pat:a&kmg226#1
                    //发送指令获取
                    DateTime dt      = DateTime.Parse(starttime);
                    string   cmd     = "SS " + aircode + aircono + "/" + cw + "/" + dt.ToString("R").Substring(4, 7).Replace(" ", "") + dt.Year.ToString().Substring(2) + "/" + fromcity + tocity + "NN1/" + totime.Replace(":", "") + " " + arrtime.Replace(":", "") + "|pat:a";
                    string   zhiling = cmd;
                    string   strVale = string.Empty;
                    //---------修改部分----------
                    if (userInfo.Configparam != null)
                    {
                        //开启使用特价缓存  true 开启 false关闭
                        bool IsUseSpCache = userInfo.FQP.KongZhiXiTong != null && userInfo.FQP.KongZhiXiTong.Contains("|99|");
                        //特价缓存
                        SpecialCabinPriceInfoBLL  SpBll     = new SpecialCabinPriceInfoBLL();
                        Tb_SpecialCabin_PriceInfo PriceInfo = null;
                        if (IsUseSpCache)
                        {
                            SpBll.GetSpPrice(aircode, aircono, DateTime.Parse(starttime + " " + totime + ":00"), fromcity, tocity, cw);
                        }
                        if (PriceInfo == null)
                        {
                            //格式化编码内容类
                            PnrAnalysis.FormatPNR pnrformat = new PnrAnalysis.FormatPNR();
                            //扩展参数
                            ParamEx pe = new ParamEx();
                            pe.UsePIDChannel = userInfo.FQP.KongZhiXiTong != null && userInfo.FQP.KongZhiXiTong.Contains("|48|") ? 2 : 0;
                            SendInsManage SendManage = new SendInsManage(userInfo.User.LoginName, userInfo.Company.UninCode, pe, userInfo.Configparam);
                            string        Office     = userInfo.Configparam.Office.Split('^')[0];
                            strVale = SendManage.Send(cmd, ref Office, 15);//发送获取特价指令
                            string  error = "";
                            decimal spFare = 0m, spABFare = 0m, spRQFare = 0m;
                            //价格实体
                            PnrAnalysis.PatModel Pat = pnrformat.GetPATInfo(strVale, out error);
                            if (Pat != null && Pat.UninuePatList.Count > 0)
                            {
                                strValue[0] = Pat.UninuePatList[0].Fare;   //舱位价
                                strValue[1] = Pat.UninuePatList[0].TAX;    //基建
                                strValue[2] = Pat.UninuePatList[0].RQFare; //燃油
                                strValue[3] = Pat.UninuePatList[0].Price;  //总计(舱位价+基建+燃油)
                                decimal.TryParse(strValue[0], out spFare);
                                decimal.TryParse(strValue[1], out spABFare);
                                decimal.TryParse(strValue[2], out spRQFare);
                            }
                            else
                            {
                                //-----------------2013-5-6添加----------------------------------------------
                                //没有PAT出价格 预订一个编码PAT价格后取消PNR 即使编码没有取消 后台程序自动取消
                                string ErrMsg = "";
                                if (ConfigIsSet(out ErrMsg))
                                {
                                    //----------构造航段和乘客---------------
                                    List <Tb_Ticket_Passenger> pList      = GetPassengerList();
                                    List <Tb_Ticket_SkyWay>    skywaylist = new List <Tb_Ticket_SkyWay>();
                                    Tb_Ticket_SkyWay           sky        = new Tb_Ticket_SkyWay();
                                    sky.CarryCode    = aircode;
                                    sky.FlightCode   = aircono;
                                    sky.FromDate     = DateTime.Parse(starttime + " " + totime + ":00");
                                    sky.ToDate       = DateTime.Parse(starttime + " " + arrtime + ":00");
                                    sky.FromCityCode = fromcity;
                                    sky.ToCityCode   = tocity;
                                    sky.Space        = cw;
                                    skywaylist.Add(sky);

                                    //-------------------------
                                    //预订编码 获取价格
                                    RePnrObj pnrObj      = GetPnrInfo(aircode, pList, skywaylist, out ErrMsg);
                                    string   AdultPnr    = string.Empty;
                                    Log_Pnr  logAdultPnr = null;
                                    //成人预订信息编码记录
                                    if (pnrObj.AdultYudingList.Count > 0)
                                    {
                                        AdultPnr = pnrObj.AdultPnr;
                                        if (string.IsNullOrEmpty(AdultPnr) || AdultPnr.Trim().Length != 6)
                                        {
                                            AdultPnr = "";
                                        }
                                        //记录编码日志
                                        YuDingPnrLog(pnrObj, pnrObj.AdultYudingList.Keys[0], pnrObj.AdultYudingList.Values[0], AdultPnr, pnrObj.Office, out logAdultPnr);
                                    }
                                    if (!string.IsNullOrEmpty(pnrObj.AdultPnr))
                                    {
                                        //取消编码
                                        if (SendManage.CancelPnr(pnrObj.AdultPnr, pnrObj.Office))
                                        {
                                            if (logAdultPnr != null)
                                            {
                                                //修改状态
                                                logAdultPnr.Flag = true;
                                                string tempSql = PbProject.Dal.Mapping.MappingHelper <Log_Pnr> .CreateUpdateModelSql(logAdultPnr, "id");

                                                Manage.ExecuteNonQuerySQLInfo(tempSql);
                                            }
                                        }
                                    }
                                    //获取价格
                                    if (pnrObj.PatModelList != null && pnrObj.PatModelList.Length > 0)
                                    {
                                        Pat = pnrObj.PatModelList[0];
                                        if (Pat != null && Pat.UninuePatList.Count > 0)
                                        {
                                            strValue[0] = Pat.UninuePatList[0].Fare;   //舱位价
                                            strValue[1] = Pat.UninuePatList[0].TAX;    //基建
                                            strValue[2] = Pat.UninuePatList[0].RQFare; //燃油
                                            strValue[3] = Pat.UninuePatList[0].Price;  //总计(舱位价+基建+燃油)
                                            decimal.TryParse(strValue[0], out spFare);
                                            decimal.TryParse(strValue[1], out spABFare);
                                            decimal.TryParse(strValue[2], out spRQFare);
                                        }
                                    }
                                }
                                //---------------------------------------------------------------
                            }
                            if (spFare != 0m)
                            {
                                //存入缓存
                                SpBll.SaveSpPrice(aircode.ToUpper(), aircono, DateTime.Parse(starttime + " " + totime + ":00"), fromcity, tocity, cw, spFare, spABFare, spRQFare);
                            }
                        }
                        else
                        {
                            strValue[0] = PriceInfo.SpPrice.ToString();  //舱位价
                            strValue[1] = PriceInfo.SpABFare.ToString(); //基建
                            strValue[2] = PriceInfo.SpRQFare.ToString(); //燃油
                            strValue[3] = (PriceInfo.SpPrice + PriceInfo.SpABFare + PriceInfo.SpRQFare).ToString();
                        }
                    }
                    #endregion
                }
                else
                {
                    strValue[0] = Fare;   //舱位价
                    strValue[1] = TAX;    //基建
                    strValue[2] = RQFare; //燃油
                    strValue[3] = (decimal.Parse(Fare) + decimal.Parse(TAX) + decimal.Parse(RQFare)).ToString();
                }

                //实付金额
                string sjvalue = new PbProject.Logic.Pay.Data(userInfo.Company.UninCode).CreatePassengerPayFee(decimal.Parse(strValue[0]), decimal.Parse(strValue[1]), decimal.Parse(strValue[2]), decimal.Parse(fd), decimal.Parse(strYh), 1).ToString();
                string pyj     = new PbProject.Logic.Pay.Data(userInfo.Company.UninCode).CreateCommissionCG(decimal.Parse(strValue[0]), decimal.Parse(fd)).ToString();

                string ZK = "";
                if (Yprice != "0")//如果传的有Y舱价格,则是特价类型的,则计算折扣
                {
                    PbProject.Logic.Pay.DataAction plpd = new PbProject.Logic.Pay.DataAction();
                    //特价时候需要计算折扣,让前台计算加入哪一个折扣范围
                    decimal tempFare = 0;
                    decimal.TryParse(strValue[0], out tempFare);
                    decimal tempYprice = 0;
                    decimal.TryParse(Yprice, out tempYprice);
                    //计算特价的折扣
                    ZK = (new PbProject.Logic.Pay.DataAction().FourToFiveNum((tempFare / tempYprice), 4) * 100).ToString("f2");
                    decimal tempZK = 0;
                    decimal.TryParse(ZK, out tempZK);
                    ZK = plpd.FourToFiveNum(tempZK, 0).ToString();
                }


                if (strValue[0] != "" || strValue[1] != "" || strValue[2] != "" || strValue[3] != "")
                {
                    decimal tempPrice = 0;
                    decimal.TryParse(strValue[0], out tempPrice);


                    #region  pat 有数据
                    sp.SpacePrice   = tempPrice.ToString("f0");
                    sp.Tax          = strValue[1];
                    sp.RQFare       = strValue[2];
                    sp.TotalPrice   = strValue[3];
                    sp.RealPayPrice = sjvalue;
                    sp.Commission   = pyj;
                    sp.GUID         = hidId;
                    sp.Discount     = ZK;
                    #endregion
                }
                else
                {
                    #region pat 没有数据

                    #endregion pat 出来没有数据
                }

                //最终sb格式 0舱位价@1基建@2燃油@3总计(舱位价+基建+燃油)@4实付金额@5佣金@6guid@7特价计算的折扣
                return(sp);
                //Response.Write("");
            }
            catch (Exception ex)
            {
                return(sp);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 创建PNR时 生成一个没有政策的订单信息
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="parames"></param>
        public override void Create(ResponseWriter writer, System.Collections.Specialized.NameValueCollection parames)
        {
            List <Tb_Ticket_Passenger> pList      = new List <Tb_Ticket_Passenger>();
            List <Tb_Ticket_SkyWay>    skywaylist = new List <Tb_Ticket_SkyWay>();

            #region 取提交的参数信息

            string adultPnr      = parames["adultPnr"];                         //只是儿童时需要备注的成人编码
            string pListStr      = parames["pList"];                            //乘机人信息 名称,类型,证件ID,儿童生日/名称,类型,证件ID,儿童生日
            string skywaylistStr = parames["skywaylist"];                       //航段信息 承运人,航班号,起飞日期,到达日期,起飞三字码,到达三字码,起飞城市,到达城市,舱位,折扣/航段信息 承运人,航班号,起飞日期,到达日期,起飞三字码,到达三字码,起飞城市,到达城市,舱位,折扣
            allowChangePNRFlag         = parames["allowChangePNRFlag"] == "1";  //是否允许换编码出票
            isAsAdultOrder             = parames["isAsAdultOrder"] == "1";      //是否关联成人订单号
            cHDAssociationAdultOrderId = parames["cHDAssociationAdultOrderId"]; //关联成人定单号
            isCHDToAudltTK             = parames["isCHDToAudltTK"] == "1";      //儿童票出成人票
            linkMan      = parames["linkMan"];                                  //联系人
            linkManPhone = parames["linkManPhone"];                             //联系人电话
            travelType   = parames["travelType"];                               //航班类型  1=单程,2=往返,3=中转联程 4=多程
            foreach (var pStr in pListStr.Split('/'))
            {
                var ps = pStr.Split(',');
                if (ps[1] == "2" && ps.Count() == 4)
                {
                    pList.Add(new Tb_Ticket_Passenger()
                    {
                        PassengerName = ps[0],
                        PassengerType = int.Parse(ps[1]),
                        Cid           = ps[2],
                        A7            = ps[3]
                    });
                }
                else if (ps[1] != "2")
                {
                    pList.Add(new Tb_Ticket_Passenger()
                    {
                        PassengerName = ps[0],
                        PassengerType = int.Parse(ps[1]),
                        Cid           = ps[2]
                    });
                }

                else
                {
                    writer.WriteEx(550, "passenger format error", "乘机人格式有误");
                }
            }
            foreach (var kStr in skywaylistStr.Split('/'))
            {
                var ks = kStr.Split(',');
                if (ks.Count() == 10)
                {
                    skywaylist.Add(new Tb_Ticket_SkyWay()
                    {
                        CarryCode    = ks[0],
                        FlightCode   = ks[1],
                        FromDate     = DateTime.Parse(ks[2]),
                        ToDate       = DateTime.Parse(ks[3]),
                        FromCityCode = ks[4],
                        ToCityCode   = ks[5],
                        FromCityName = ks[6],
                        ToCityName   = ks[7],
                        Space        = ks[8],
                        Discount     = ks[9]
                    });
                }
                else
                {
                    writer.WriteEx(550, "skyway format error", "航段格式有误");
                }
            }
            #endregion

            UserLoginInfo     userLogin = AuthLogin.GetUserInfo(Username);
            List <IPassenger> pasList   = new List <IPassenger>();
            List <ISkyLeg>    skyList   = new List <ISkyLeg>();
            SendNewPID        pid       = new SendNewPID();
            PnrParamObj       PnrParam  = new PnrParamObj();
            //必填项 是否开启新版PID发送指令
            PnrParam.UsePIDChannel = userLogin.FQP.KongZhiXiTong != null && userLogin.FQP.KongZhiXiTong.Contains("|48|") ? 2 : 0;  //2;
            PnrParam.ServerIP      = userLogin.Configparam.WhiteScreenIP;
            PnrParam.ServerPort    = int.Parse(string.IsNullOrEmpty(userLogin.Configparam.WhiteScreenPort) ? "0" : userLogin.Configparam.WhiteScreenPort);
            PnrParam.Office        = userLogin.Configparam.Office;
            PnrParam.CarryCode     = skywaylist[0].CarryCode;
            PnrParam.PasList       = pasList;
            PnrParam.SkyList       = skyList;
            //只是儿童时需要备注的成人编码
            PnrParam.AdultPnr = adultPnr;
            //是否儿童出成人票
            PnrParam.ChildIsAdultEtdz = isCHDToAudltTK ? "1" : "0";;
            //可选项
            PnrParam.UserName = Username;



            //输入的手机号码 预订编码CT项电话
            if (userLogin.FQP.KongZhiXiTong == null || !userLogin.FQP.KongZhiXiTong.Contains("|19|"))
            {
                PnrParam.CTTel     = userLogin.User != null ? userLogin.User.Tel : "";
                PnrParam.CTCTPhone = linkManPhone != "" ? linkManPhone : (userLogin.Company != null && userLogin.Company.ContactTel.Trim() != "" ? userLogin.Company.ContactTel.Trim() : "");
            }
            else
            {
                PnrParam.CTTel     = userLogin.mSupCompany.Tel != null ? userLogin.mSupCompany.Tel : "";
                PnrParam.CTCTPhone = linkManPhone != "" ? linkManPhone : (userLogin.mSupCompany != null && userLogin.mSupCompany.ContactTel.Trim() != "" ? userLogin.mSupCompany.ContactTel.Trim() : "");
            }

            //关闭生成订单联系人默认值   生成订单时,联系人不需要默认值,让用户自己填写
            if (userLogin.FQP.KongZhiXiTong != null && userLogin.FQP.KongZhiXiTong.Contains("|55|"))
            {
                PnrParam.CTTel     = userLogin.User != null ? userLogin.User.Tel : "";
                PnrParam.CTCTPhone = linkManPhone;
            }


            PnrParam.PID   = userLogin.Configparam.Pid;
            PnrParam.KeyNo = userLogin.Configparam.KeyNo;
            //乘机人
            foreach (Tb_Ticket_Passenger pas in pList)
            {
                IPassenger p1 = new IPassenger();
                pasList.Add(p1);
                p1.PassengerName = pas.PassengerName;
                p1.PassengerType = pas.PassengerType;
                p1.PasSsrCardID  = pas.Cid;
                p1.ChdBirthday   = pas.A7;
            }
            //航段
            foreach (Tb_Ticket_SkyWay skyway in skywaylist)
            {
                ISkyLeg leg1 = new ISkyLeg();
                skyList.Add(leg1);
                leg1.CarryCode    = skyway.CarryCode;
                leg1.FlightCode   = skyway.FlightCode;
                leg1.FlyStartTime = skyway.FromDate.ToString("HHmm");
                leg1.FlyEndTime   = skyway.ToDate.ToString("HHmm");
                leg1.FlyStartDate = skyway.FromDate.ToString("yyyy-MM-dd");
                leg1.fromCode     = skyway.FromCityCode;
                leg1.toCode       = skyway.ToCityCode;
                leg1.Space        = skyway.Space;
                leg1.Discount     = skyway.Discount;
            }
            RePnrObj pObj = pid.ISendIns(PnrParam);
            string   msg  = "";
            if (GenerationOrder(userLogin, skywaylist, pList, pObj, out msg))
            {
                writer.Write(new { pnr = pObj, orderID = msg });
            }
            else
            {
                writer.WriteEx(565, "create order error", "创建空白定单失败:" + msg);
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// 生成没有政策信息的订单,确定订单时回写政策数据
        /// </summary>
        /// <param name="FQP"></param>
        /// <param name="msg"></param>
        /// <returns></returns>
        private bool GenerationOrder(UserLoginInfo userLogin, List <Tb_Ticket_SkyWay> skyWay, List <Tb_Ticket_Passenger> pasList, RePnrObj pnrInfo, out string msg)
        {
            bool IsSuc = false;

            msg = "";
            //儿童备注关联成人编码
            string RmkAdultPnr = "";
            //是否为两个订单
            bool IsSecOrder   = false;
            bool IsExistAdult = false;
            bool IsExistCHD   = false;
            bool IsExistINF   = false;

            try
            {
                Tb_Ticket_Order AdultOrder = null, ChildOrder = null;
                if (userLogin.Company == null || userLogin.BaseParametersList == null)
                {
                    msg = "mCompany公司信息丢失";
                    return(IsSuc);
                }
                //订单管理
                Tb_Ticket_OrderBLL  OrderManage = new Tb_Ticket_OrderBLL();
                OrderInputParam     OrderParam  = new OrderInputParam();
                OrderMustParamModel ParamModel  = new OrderMustParamModel();

                //构造生成订单需要的信息
                List <Tb_Ticket_SkyWay> SkyWay1 = skyWay;
                //构造乘客信息
                List <Tb_Ticket_Passenger> Paslist = pasList;
                //订单日志记录
                Log_Tb_AirOrder logOrder = new Log_Tb_AirOrder();
                logOrder.OperTime      = DateTime.Now;
                logOrder.OperType      = "创建订单";
                logOrder.OperContent   = userLogin.User.LoginName + "于" + logOrder.OperTime + "创建订单。";
                logOrder.OperLoginName = userLogin.User.LoginName;
                logOrder.OperUserName  = userLogin.User.UserName;
                logOrder.CpyNo         = userLogin.Company.UninCode;
                logOrder.CpyName       = userLogin.Company.UninName;
                logOrder.CpyType       = userLogin.Company.RoleType;
                logOrder.WatchType     = 5;
                if (IsExistCHD)
                {
                    //添加权限 是否可以预定儿童票 未加
                    if (userLogin.FQP.GongYingKongZhiFenXiao != null && userLogin.FQP.GongYingKongZhiFenXiao.Contains("|90|"))
                    {
                        msg = "目前暂时无法预订儿童票!";
                    }
                }

                //关联成人订单号
                if (isAsAdultOrder)
                {
                    #region 关联成人订单号
                    //开启儿童编码必须关联成人编码或者成人订单号
                    if (userLogin.FQP.KongZhiXiTong != null && userLogin.FQP.KongZhiXiTong.Contains("|95|"))
                    {
                        string sqlWhere = "";
                        //儿童订单关联成人订单号
                        if (cHDAssociationAdultOrderId == "")
                        {
                            msg = "关联成人订单不能为空!";
                        }
                        else
                        {
                            sqlWhere = string.Format(" OrderId='{0}' ", cHDAssociationAdultOrderId);

                            List <Tb_Ticket_Order> list = baseDataManage.CallMethod("Tb_Ticket_Order", "GetList", null, new object[] { sqlWhere }) as List <Tb_Ticket_Order>;
                            if (list != null && list.Count > 0)
                            {
                                if (list[0].IsChdFlag)
                                {
                                    msg = "该订单非成人订单!";
                                }
                                else
                                {
                                    if (string.IsNullOrEmpty(list[0].PNR))
                                    {
                                        msg = "该订单还未生成编码!";
                                    }
                                    else if (list[0].OrderStatusCode < 4)
                                    {
                                        msg = "关联成人订单未出票!";
                                    }
                                    else
                                    {
                                        RmkAdultPnr = list[0].PNR;
                                    }
                                    //添加权限是否验证 儿童航段与关联成人航段信息是否一致 还未加权限
                                    if (userLogin.FQP.KongZhiXiTong == null || !userLogin.FQP.KongZhiXiTong.Contains("|91|"))
                                    {
                                        if (msg == "" && !ValSkyWay(cHDAssociationAdultOrderId, SkyWay1))
                                        {
                                            msg = "成人订单航程与儿童订单航程信息不一致,无法预定!";
                                        }
                                    }
                                }
                            }
                            else
                            {
                                msg = "关联成人订单不存在!";
                            }
                        }
                    }
                    #endregion
                }
                //关联订单号通过
                if (msg == "")
                {
                    #region 生成编码记录编码信息
                    //航空公司 出票Office 和儿童编码所备注的成人编码
                    string defaultOffice = userLogin.Configparam.Office.Split('^')[0];
                    string CpyNo = userLogin.Company.UninCode, CarryCode = SkyWay1[0].CarryCode;
                    string PrintOffice = GetPrintOffice(CpyNo, CarryCode);
                    if (!string.IsNullOrEmpty(PrintOffice))
                    {
                        //Office = PrintOffice;
                    }

                    //记录指令
                    SaveInsInfo(pnrInfo, userLogin);
                    pnrInfo.PrintOffice = PrintOffice;
                    //记录Pnr日志Id=
                    List <string> pnrLogList = new List <string>();
                    string        AdultPnr   = string.Empty;
                    string        childPnr   = string.Empty;
                    //成人预订信息编码记录
                    if (pnrInfo.AdultYudingList.Count > 0)
                    {
                        AdultPnr = pnrInfo.AdultPnr;
                        if (string.IsNullOrEmpty(AdultPnr) || AdultPnr.Trim().Length != 6)
                        {
                            //提示pnr失败信息
                            string yudingRecvData = pnrInfo.AdultYudingList.Values[0];
                            msg      = ShowPnrFailInfo(1, yudingRecvData);
                            AdultPnr = "";
                        }
                        //记录编码日志
                        YuDingPnrLog(userLogin, pnrInfo, pnrInfo.AdultYudingList.Keys[0], pnrInfo.AdultYudingList.Values[0], AdultPnr, pnrInfo.Office, ref pnrLogList);
                        if (AdultPnr.Length == 6 && (pnrInfo.PatModelList[0] == null || pnrInfo.PatModelList[0].PatList.Count == 0))
                        {
                            msg = "成人编码" + AdultPnr + "未能PAT取到价格,原因如下:<br />" + pnrInfo.PatList[0];
                        }
                    }
                    //儿童预订信息编码记录
                    if (pnrInfo.ChildYudingList.Count > 0)
                    {
                        childPnr = pnrInfo.childPnr;
                        if (string.IsNullOrEmpty(childPnr) || childPnr.Trim().Length != 6)
                        {
                            //提示pnr失败信息
                            string yudingRecvData = pnrInfo.ChildYudingList.Values[0];
                            msg      = ShowPnrFailInfo(2, yudingRecvData);
                            childPnr = "";
                        }
                        //记录编码日志
                        YuDingPnrLog(userLogin, pnrInfo, pnrInfo.ChildYudingList.Keys[0], pnrInfo.ChildYudingList.Values[0], childPnr, pnrInfo.Office, ref pnrLogList);
                        if (childPnr.Length == 6 && (pnrInfo.PatModelList[1] == null || pnrInfo.PatModelList[1].PatList.Count == 0))
                        {
                            msg = "儿童编码" + childPnr + "未能PAT取到价格,原因如下:<br />" + pnrInfo.PatList[0];
                        }
                    }
                    #endregion

                    #region 组合生成订单所需要的实体数据
                    //成人+婴儿 成人+成人 儿童+备注成人订单号  只生成一个订单
                    //成人+儿童且没有备注订单号  成人+儿童+婴儿   生成两个订单
                    //存在儿童 也存在成人
                    if (IsExistCHD && IsExistAdult)
                    {
                        if (!isAsAdultOrder)
                        {
                            IsSecOrder = true;
                            //生成儿童订单
                            List <Tb_Ticket_SkyWay> SkyWay2 = skyWay;
                            //儿童乘客列表
                            List <Tb_Ticket_Passenger> ChildList = new List <Tb_Ticket_Passenger>();
                            foreach (Tb_Ticket_Passenger pas in Paslist)
                            {
                                if (pas.PassengerType == 2)
                                {
                                    ChildList.Add(pas);
                                }
                            }
                            ChildOrder = GetOrder(userLogin, true, ChildList, SkyWay2);
                            Log_Tb_AirOrder logOrder1 = new Log_Tb_AirOrder();
                            logOrder1.OperTime      = DateTime.Now;
                            logOrder1.OperType      = "创建订单";
                            logOrder1.OperContent   = userLogin.User.LoginName + "于" + logOrder.OperTime + "创建订单。";
                            logOrder1.OperLoginName = userLogin.User.LoginName;
                            logOrder1.OperUserName  = userLogin.User.UserName;
                            logOrder1.CpyNo         = userLogin.Company.UninCode;
                            logOrder1.CpyName       = userLogin.Company.UninName;
                            logOrder1.CpyType       = userLogin.Company.RoleType;
                            logOrder1.WatchType     = 5;

                            //加入参数
                            OrderMustParamModel ParamModel1 = new OrderMustParamModel();
                            OrderParam.PnrInfo   = pnrInfo;
                            ParamModel1.PasList  = ChildList;
                            ParamModel1.SkyList  = SkyWay2;
                            ParamModel1.Order    = ChildOrder;
                            ParamModel1.LogOrder = logOrder1;
                            //加入集合
                            OrderParam.OrderParamModel.Add(ParamModel1);
                        }
                    }
                    //为两个订单时
                    if (IsSecOrder)
                    {
                        //排除儿童乘客
                        List <Tb_Ticket_Passenger> NotCHDList = new List <Tb_Ticket_Passenger>();
                        foreach (Tb_Ticket_Passenger item in Paslist)
                        {
                            if (item.PassengerType != 2)
                            {
                                NotCHDList.Add(item);
                            }
                        }
                        Paslist    = NotCHDList;
                        AdultOrder = GetOrder(userLogin, false, Paslist, SkyWay1);
                    }
                    else
                    {
                        //为一个订单时
                        AdultOrder = GetOrder(userLogin, IsExistCHD, Paslist, SkyWay1);
                        if (isAsAdultOrder)
                        {
                            AdultOrder.PNR = RmkAdultPnr;
                            AdultOrder.AssociationOrder = cHDAssociationAdultOrderId;
                        }
                    }
                    //  是否有婴儿
                    AdultOrder.HaveBabyFlag = IsExistINF;
                    //
                    OrderParam.PnrInfo  = pnrInfo;
                    ParamModel.PasList  = Paslist;
                    ParamModel.SkyList  = SkyWay1;
                    ParamModel.Order    = AdultOrder;
                    ParamModel.LogOrder = logOrder;
                    //加入集合
                    OrderParam.OrderParamModel.Add(ParamModel);
                    #endregion
                    if (pnrLogList.Count > 0 && !(AdultPnr == "" && childPnr == ""))
                    {
                        string UpdatePnrLogSQL = string.Format(" update Log_Pnr set OrderFlag=1 where id in({0}) ", string.Join(",", pnrLogList.ToArray()));
                        OrderParam.ExecSQLList.Add(UpdatePnrLogSQL);
                    }
                }
                //前面都通过
                if (msg == "")
                {
                    string ErrMsg = "";
                    //生成订单
                    IsSuc = OrderManage.CreateOrder(ref OrderParam, out ErrMsg);
                    List <string> Paramlist = new List <string>();
                    //两个订单url处理
                    foreach (OrderMustParamModel item in OrderParam.OrderParamModel)
                    {
                        if (item.Order.IsChdFlag)
                        {
                            Paramlist.Add("ChildOrderId=" + item.Order.OrderId);
                        }
                        else
                        {
                            Paramlist.Add("AdultOrderId=" + item.Order.OrderId);
                        }
                    }
                    if (IsSuc)
                    {
                        msg = string.Join("&", Paramlist.ToArray());
                    }
                    else
                    {
                        //出错信息
                        msg = ErrMsg;
                    }
                }
            }
            catch (Exception ex)
            {
                //异常信息
                msg   = ex.Message;
                IsSuc = false;
            }
            return(IsSuc);
        }