/// <summary> /// 计算每个航段的价格及返点 /// </summary> public static void CalPnrsPrices(RtResult rtres, LoginInfo li, ref int [] sFare, ref int [] sBuild, ref int [] sFuel, ref double[] sGain, ref int [] sFareY, ref int totalEtdz) { int total = 0; CalPnrsTotalPrice(rtres, li.b2b.webservice, ref totalEtdz, ref sFare, ref sBuild, ref sFuel, ref sFareY); EagleWebService.kernalFunc kf = new EagleWebService.kernalFunc(li.b2b.webservice); EagleString.ProfitResult profitResult; for (int i = 0; i < rtres.SEGMENG.Length; ++i) { profitResult = new ProfitResult( kf.GetPolicies( li.b2b.username, rtres.FLIGHTS[i], rtres.FLIGHTDATES[i].ToShortDateString(), rtres.CITYPAIRS[i] )); string profit = profitResult.ProfitWithFlightAndBunk(rtres.FLIGHTS[i], rtres.BUNKS[i]); try { sGain[i] = double.Parse(profit.Replace("%", "")); } catch { sGain[i] = 0; } } }
public void Recv(RtResult rtres) { bool flag = false; switch (rtres.FLAG_OF_PNR) { case PNR_FLAG.CANCELLED: fc.SubmitEticketInfomation(rtres, 0, 1, 0, 0, int.Parse(m_li.b2b.lr.IpidUsing[0]), ref flag); return; break; case PNR_FLAG.ETICKET: break; case PNR_FLAG.MARRIED: File.AppendAllText(file, "\r\n" + rtres.PNR); break; case PNR_FLAG.NORMAL: File.AppendAllText(file, "\r\n" + rtres.PNR); break; } int total = 0; int count = rtres.SEGMENG.Length; int[] sFare = new int[count]; int[] sBuild = new int[count]; int[] sFuel = new int[count]; int[] sFareY = new int[count]; global::EagleExtension.EagleExtension.CalPnrsTotalPrice( rtres, m_li.b2b.webservice, ref total, ref sFare, ref sBuild, ref sFuel, ref sFareY ); int builda = 0; int buildc = 0; int fuela = 0; int fuelc = 0; foreach (int i in sBuild) { builda += i; } foreach (int i in sFuel) { fuela += i; fuelc += EagleString.egString.TicketPrice(i, 50); } int build = rtres.CHILDRENCOUNT * buildc + rtres.ADULTCOUNT * builda; int fuel = rtres.CHILDRENCOUNT * fuelc + rtres.ADULTCOUNT * fuela; fc.SubmitEticketInfomation(rtres, total, 1, build, fuel, int.Parse(m_li.b2b.lr.IpidUsing[0]), ref flag); if (flag) { EagleFileIO.LogWrite("电子客票提交成功:" + rtres.PNR); } start(); }
/// <summary> /// 计算一个PNR的总价格含税(可能与实际价格不符,价格数据库必须有对应价格) /// </summary> public static void CalPnrsTotalPrice(RtResult rtres, string wsaddr, ref int total) { int count = rtres.SEGMENG.Length; int [] sFare = new int [count]; int [] sBuild = new int [count]; int [] sFuel = new int[count]; int[] sFareY = new int[count]; CalPnrsTotalPrice(rtres, wsaddr, ref total, ref sFare, ref sBuild, ref sFuel, ref sFareY); }
public static void CalPnrSomePrice(RtResult rtres, LoginInfo li, ref int fare, ref double real, ref int build, ref int fuel, ref double gainAver, ref double liren, ref double total) { int len = rtres.SEGMENG.Length; int[] sFare = new int[len]; int[] sBuild = new int[len]; int[] sFuel = new int[len]; double[] sGain = new double[len]; int[] sFareY = new int[len]; int totalEtdz = 0; CalPnrsPrices(rtres, li, ref sFare, ref sBuild, ref sFuel, ref sGain, ref sFareY, ref totalEtdz); fare = 0; real = 0.0; build = 0; fuel = 0; liren = 0.0; total = 0.0; gainAver = 0.0; int cfare = 0; double creal = 0.0; int cbuild = 0; int cfuel = 0; //所有航段之和,一个成人的价格,一个儿童的价格 for (int i = 0; i < len; ++i) { fare += sFare[i]; real += (double)sFare[i] * (100F - sGain[i]) / 100F; build += sBuild[i]; fuel += sFuel[i]; int temp = EagleString.egString.TicketPrice(sFareY[i], 50); cfare += temp; creal += (double)temp * (100F - sGain[i]) / 100F; cbuild += 0; cfuel += EagleString.egString.TicketPrice(sFuel[i], 50); } liren = (double)fare - real; total = (real + (double)(build + fuel)) * rtres.ADULTCOUNT + (creal + (double)(cbuild + cfuel)) * rtres.CHILDRENCOUNT; gainAver = ((double)totalEtdz - total) / (double)totalEtdz; }
/// <summary> /// 一键出票RT结果处理 /// </summary> private void HandleEtdzOneKeyRt() { try { rtResult = new RtResult(dataHandler.COMMANDRESULT, commandPool.PNRing); m_etdzonekey.rtres = rtResult; //TODO:此处增加预计金额控制 { float yue = EagleExtension.EagleExtension.BALANCE(loginInfo.b2b.username, loginInfo.b2b.webservice); int dec = 0; EagleExtension.EagleExtension.CalPnrsTotalPrice(rtResult, loginInfo.b2b.webservice, ref dec); AppendBlackWindow(yue.ToString("f2") + "-" + dec.ToString() + "\r\n>"); //if ((float)dec > yue) return; } if (string.IsNullOrEmpty(m_etdzonekey.pat)) { string cmd = m_etdzonekey.CreateEtdzString(); //AppendBlackWindow(cmd + " 无PAT项生成的etdz串\r\n>"); if (string.IsNullOrEmpty(cmd)) { commandPool.HandleCommand("i"); } else { commandPool.SetType(ETERM_COMMAND_TYPE.ETDZ); CheckBeforeSend(); socket.SendCommand(cmd, EagleProtocal.TypeOfCommand.Multi);//发送ETDZ } } else { string cmd = commandPool.HandleCommand(m_etdzonekey.pat); //AppendBlackWindow(cmd + " 有PAT项,发送\r\n>"); commandPool.SetType(ETERM_COMMAND_TYPE.ETDZ_ONEKEY_PAT); socket.SendCommand(cmd, EagleProtocal.TypeOfCommand.Multi);//发送PAT } } catch (Exception ex) { AppendBlackWindow("HandleEtdzOneKeyRt : " + ex.Message + "\r\n>"); } }
/// <summary> /// 计算一个PNR的各种价格(各航段分计),注:不取返点政策 /// </summary> /// <param name="total">总票价与etdz结果比较</param> /// <param name="sFare">单个成人票面价</param> /// <param name="sBuild">单个成人机建</param> /// <param name="sFuel">单个成人燃油</param> /// <param name="sFareY">Y舱的价格,为了儿童或婴儿的计算</param> public static void CalPnrsTotalPrice(RtResult rtres, string wsaddr, ref int total, ref int[] sFare, ref int[] sBuild, ref int[] sFuel, ref int[] sFareY) { total = 0; EagleWebService.IbeFunc fc = new EagleWebService.IbeFunc(); //Hashtable ht = fc.DSG(rtres.PNR);//有待IBE恢复 for (int i = 0; i < rtres.SEGMENG.Length; ++i) { string cp = rtres.SEGMENG[i].Citypair; OleDbConnection cn = new OleDbConnection(); int price = EagleString.EagleFileIO.PriceOf(cp); int distance = EagleString.EagleFileIO.DistanceOf(cp); if (price == 0) { EagleWebService.kernalFunkEx.FC_get_server_local(cp, cn, wsaddr, ref distance, ref price); } int pricec = EagleString.egString.TicketPrice(price, 50); int rebate = EagleString.EagleFileIO.RebateOf(rtres.SEGMENG[i].Bunk, rtres.SEGMENG[i].Flight); if (EagleString.egString.LargeThan420(rtres.SEGMENG[i].Date)) { rebate = EagleString.EagleFileIO.RebateOfNew(rtres.SEGMENG[i].Bunk, rtres.SEGMENG[i].Flight); } int pricea = EagleString.egString.TicketPrice(price, rebate); string flight = rtres.SEGMENG[i].Flight; if (flight[0] == '*') { flight = flight.Substring(1); } //由于IBE不能使用,暂时用50代替 int taxbuild = 50; //int taxbuild = EagleString.EagleFileIO.TaxOfBuildBy(ht[flight].ToString()); int taxfuel = EagleString.EagleFileIO.TaxOfFuelBy(distance); pricec += EagleString.egString.TicketPrice(taxfuel, 50);//(taxfuel) / 2; sFare[i] = pricea; pricea += taxfuel + taxbuild; total += pricec * rtres.CHILDRENCOUNT + pricea * rtres.ADULTCOUNT; sBuild[i] = taxbuild; sFuel[i] = taxfuel; sFareY[i] = price; } }
private void HandleRt(string rtstring) { try { rtResult = new RtResult(rtstring, commandPool.PNRing); OuterHandleRtResult(rtResult);//Outer配置互换 pnrOperating = commandPool.PNRing; pnrstatOperating = 1; Thread thread = new Thread(new ThreadStart(th_SubmitPnrState)); thread.Start(); int total = 0; try { receipt.SetControlsByRtResult(rtResult); } catch { } try { Printer.Insurance.Instance.SetControlsByRtResult(rtResult); } catch { } try { EagleExtension.EagleExtension.CalPnrsTotalPrice(rtResult, loginInfo.b2b.webservice, ref total); EagleString.EagleFileIO.LogWrite("预计总价格(不含婴儿):" + total.ToString() + "\r\n>"); } catch { } } catch (Exception ex) { EagleString.EagleFileIO.LogWrite("HandleRt : " + ex.Message + "\r\n>"); } }
/// <summary> /// 提交PNR订单发出的RT返回,获取PNR信息,并提交 --待测 /// </summary> private void HandlePnrOrderSubmitRt() { try { rtResult = new RtResult(dataHandler.COMMANDRESULT, commandPool.PNRing); if (rtResult.SEGMENG.Length == 0) { throw new Exception("缺少有效航段"); } if (rtResult.CARDID == null || rtResult.CARDID.Length == 0) { throw new Exception("缺少证件号码"); } int fare = 0; double real = 0.0; int build = 0; int fuel = 0; double gain = 0.0; double lirun = 0.0; double total = 0.0; EagleExtension.EagleExtension.CalPnrSomePrice(rtResult, loginInfo, ref fare, ref real, ref build, ref fuel, ref gain, ref lirun, ref total); bool succeed = false; string passports = ""; wserviceKernal.SubmitPnr( loginInfo.b2b.username, rtResult.PNR, DateTime.Now, "", string.Join(";", rtResult.Name_CARDS), EagleString.EagleFileIO.ValueOf("PNRORDERSUBMITPHONE"), rtResult.PSGCOUNT, rtResult.FLIGHTS, rtResult.BUNKS, rtResult.FLIGHTDATES, rtResult.CITYPAIRS, fare, real, build, fuel, gain, lirun, total, ref succeed, ref passports); if (succeed) { { rtResult.SubmittdDate = DateTime.Now; RtResultList rrl = RtResultList.DeSerializeRtResults(); if (rrl == null) { rrl = new RtResultList(); } rrl.ls.Add(rtResult); rrl.SerializeRtResults(); } if (passports.Length >= 32)//发送提示新订单消息 { if (tcMain.SelectedTab == tpBlack) { AppendBlackWindow(string.Format("PNR订单提交成功,PNR={0}\r\n>", rtResult.PNR)); } else { MessageBox.Show(string.Format("PNR订单提交成功,PNR={0}", rtResult.PNR)); } socket.SendNewPnrOrder(passports.Split('~')); } } else { if (tcMain.SelectedTab == tpBlack) { AppendBlackWindow(string.Format("PNR订单提交失败,PNR={0}\r\n>", rtResult.PNR)); } else { MessageBox.Show(string.Format("PNR订单提交失败,PNR={0}", rtResult.PNR)); } } } catch (Exception ex) { AppendBlackWindow("HandlePnrOrderSubmitRt : " + ex.Message); if (tcMain.SelectedTab != tpBlack) { MessageBox.Show("HandlePnrOrderSubmitRt : " + ex.Message); } } }