转载请注明出处:http://lucien-zzy.iteye.com/admin/blogs/2007894
包含三个类一个配置文件:
1.静态时间格式类
2.接口测试类
3.配置文件加载类
4.配置文件
5.所需jar包
1.静态时间格式类
public class RequestStatic implements java.io.Serializable { private static final long serialVersionUID = 5454155825314635342L; public static final String DATE_FORMAT = "yyyy-MM-dd"; public static final String TIME_FORMAT = "HH:mm:ss"; public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static final String TIMESTAMP_FORMAT = "yyyy-MM-dd HH:mm:ss.S"; public static final String TIME_FORMAT_HM = "HH:mm"; public static final String DATETIMEFORMAT = "yyyyMMdd HH:mm:ss"; public static final String DATEFORMAT = "yyyyMMdd"; }
2.接口测试类
/** * IBE接口测试 * @author ziyuzhang * */ public class ConnectTest { public static void connectHost(IBEClient ibe){ String office = IBEConfigUtil.getStringValue("ibe.client.office"); String customno = IBEConfigUtil.getStringValue("ibe.client.customno"); String validationno = IBEConfigUtil.getStringValue("ibe.client.validationno"); String appname = IBEConfigUtil.getStringValue("ibe.client.app"); int port = IBEConfigUtil.getIntValue("ibe.server.port"); String ip = IBEConfigUtil.getStringValue("ibe.server.ip"); ibe.setConnectionInfo(ip, port); ibe.setAgentInfo(office, customno, validationno); ibe.setAppName(appname); ibe.setSoTimeOut(10000); System.out.println(ibe.testConnect()); } /** * 航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询 */ /** * AV(实现舱位可利用情况查询) * @return * @throws ParseException */ public static AvResult av(){// 查询航班 //生成舱位查询对象 AV avExample = new AV();// AV指令接口 //连接主机,AV实现了IBEClient接口,所以可以使用写的静态方法完成主机配置 connectHost(avExample); //处理查询指令参数,需注意多数方法要求的时间参数格式不同 Date date=null; try { date = new SimpleDateFormat(RequestStatic.DATETIMEFORMAT).parse("20140121 00:00:00"); //查询AV日期格式(yyyyMMdd HH:mm:ss) } catch (java.text.ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //查询航班 AvResult ar = null; try { //查询北京到上海国航航班舱位可利用情况 ar = avExample.getAvailability("PEK", "SHA", date, "CA",true,true); } catch (Exception e) { e.printStackTrace(); } System.out.println(ar); //返回查询结果 return ar; } /** * SK航班时刻显示查询 * @return * @throws ParseException */ public static SkResult sk(){ //生成航班时刻查询对象 SK skExample = new SK();// AV指令接口 //连接主机,AV实现了IBEClient接口,所以可以使用写的静态方法完成主机配置 connectHost(skExample); //处理查询指令参数,需注意多数方法要求的时间参数格式不同 Date date=null; try { date = new SimpleDateFormat(RequestStatic.DATETIMEFORMAT).parse("20090820 00:00:00"); //查询AV日期格式(yyyyMMdd HH:mm:ss) } catch (java.text.ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //查询时刻 SkResult sr = null; try { sr = skExample.getSchedule("PEK","SHA","20140121 00:00:00","JD",false,false); } catch (Exception e) { e.printStackTrace(); } System.out.println(sr); //返回查询结果 return sr; } /** * 实现显示航班经停点及起降时间的查询 * @return */ public static FFResult ff(){ //生成查询对象 FF ffExample = new FF(); connectHost(ffExample); FFResult ffres=null; try { ffres = ffExample.flightTime("CA929", "21JAN14");//参数航班号,起飞日期(DDMONYY或DDMON) } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(ffres); return ffres; } /** * 实现显示航班飞行时间餐食等信息 * @return */ public static DsgResult dsg(){ DSG dsgExample = new DSG(); connectHost(dsgExample); DsgResult dsgres = null; try { //参数(航班号、舱位、日期,可以接受的格式为"DDMMM","DDMMMYY",或者"+"/"-"/"."分别代表明天/昨天/今天,或者为空(null)、航段城市对 可以为null) dsgres = dsgExample.displaySegment("CA929",'y',"21JAN14",null); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(dsgres); return dsgres; } /** * 实现航班运价查询 * @return */ public static FDResult fd(){ FD fdExample = new FD(); connectHost(fdExample); // findPrice参数 // 1.org - java.lang.String 始发地三字代码 [EN] Departure CityCode,A three-character code representing a departure city, e.g., PEK // 2.dst - java.lang.String 到达地三字代码 [EN] Arrival CityCode,A three-character code representing an arrival city, e.g., SHA // 3.date - java.lang.String 查询日期,格式为"DDMMMYY",如"20NOV02", [EN] Specifies date,format:"DDDMMYY", e.g., 20NOV02. // 4.airline - java.lang.String 航空公司两字代码 可以设置为"all"表示为查询所有国内航空公司在此航线上的公布运价。 [EN] Airline Designator Code,A two-character code representing an Airline,e.g., CA "ALL" String indicate all airline. // 5.planeModel - java.lang.String 机型(未找到机型的以干线机型处理) 此参数为null或者""时表示不查询机场建设费 [EN] Airline Designator Code,A two-character code representing an Airline,e.g., CA // 6.passType - java.lang.String 旅客类型(""或null或者"ad":成人;"IN":婴儿;"CH":儿童) 此参数的取值只影响机场建设费及燃油附加的数值,运价仍然为对应舱位的成人运价。 // 7.fullFareBasis - boolean 应当设置为真。 FDResult fdres = null; try { fdres = fdExample.findPrice("PEK", "SHA", "21JAN14", "CA", "32A", "ad", true); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(fdres); //成人机场建设费 System.out.println("成人机场建设费:"+fdres.getAirportTax(0)); //成人燃油附加费 System.out.println("成人燃油附加费:"+fdres.getFuelTax(0)); return fdres; } /** * 实现旅客姓名提取 * @return */ public static MultiResult ml(){ ML mlExample = new ML(); connectHost(mlExample); // multi参数: // 1. criteriacode - java.lang.String 指令参数:选项--可以为空,此时取默认'C',某些选项可以组合,如"GB",常用参数如下 // B 提取订妥座位的旅客(HK 和RR 的PNR) // C 提取所有旅客记录 // R 提取RR旅客的记录 // T 提取已出票旅客 // X 提取取消的旅客 // G 提取团体旅客记录 // U 提取未证实的旅客(HL,US,UU,HN) // N 组合选项,附着于其他选项前表示反义,如"NG"表示提取非团体(散客)定座记录 // 详细技术细则请参见中国航信主页或向中国航信咨询. // 2.pnrOnce - boolean 指令参数:简略模式,为true表示每一个PNRNO只显示一次--默认为false // 3.flightNo - java.lang.String 指令参数:航班号--必须有值 // 4.fltclass - char 指令参数: 提取舱位选择--默认为' ',即提取所有舱位 // 5.date - java.lang.String 指令参数:查询航班的执行日期--可以为空,此时取默认为执行查询当日,格式"DDMMM","DDMMMYY" // 6.city - java.lang.String 指令参数:起飞城市或起飞到达城市对--可以为空,此时在该航班无经停情况下查询结果为本office在该航班上的订座记录 // 如果有经停则是本office在该航班上订取得始发地至第一经停地的的订座记录 // 如果只有始发城市则为本office在该航班该城市至下一到达地航段的订座记录 // 如果起飞到达城市均已给出则为本office在该航班中对应航段的订座记录 // 如果给出城市/城市对并非在该航班的航线中,则得到的结果中没有定座记录. MultiResult multi = null; try { multi = mlExample.multi("C",false,"CA929",' ',"21JAN",null); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(multi); return multi; } /** * 旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录 */ /** * 成人单人单航段预定 */ public static void sellseat1(){ SellSeat sellExample = new SellSeat(); connectHost(sellExample); try { //添加旅客姓名 String name = "IBETESTER/IBEGROUP"; sellExample.addAdult(name); //添加旅客航段信息 String airNo = "CA929"; //航班号 char fltClass = 'Y'; //舱位等级 String orgCity = "PVG"; //始发城市 String desCity = "NRT"; //到达城市 String actionCode = "NN"; //行动代码 int tktNum = 1; //订座数 String departureTime = "2014-01-25"; //起飞时间 sellExample.addAirSeg(airNo, fltClass, orgCity, desCity, actionCode, tktNum, departureTime); //添加旅客身份证信息 String airline = "CA"; //航空公司两字代码 String idtype = "NI"; //身份证件类型 NI身份证,CC信用卡,PP护照 String id = "567891234"; //对应的身份证件号码 sellExample.addSSR_FQTV(airline,idtype, id, name); //添加旅客联系组信息 String contactinfo = "15123339999"; sellExample.addContact(contactinfo); //添加联系组。 如addContact("66017755-2509"),旅客联系电话为66017755-2509 //添加旅客出票时限 String dateLimit = "2014-01-21 12:00:00"; sellExample.setTimelimit(dateLimit); //完成PNR必须信息输入递交主机,生成PNR SSResult ssr = sellExample.commit1(); //PNR结果 System.out.println(ssr.getPnrno()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 成人往返单人航段预定 */ public static void sellseat2(){ SellSeat sellExample = new SellSeat(); connectHost(sellExample); try { //添加旅客姓名 String name = "TESTCD/ADULT"; sellExample.addAdult(name); //添加旅客航段信息 String airNo = "SC4651"; //航班号 char fltClass = 'Y'; //舱位等级 String orgCity = "TAO"; //始发城市 String desCity = "PEK"; //到达城市 String actionCode = "NN"; //行动代码 int tktNum = 1; //订座数 String departureTime = "2014-01-25"; //起飞时间 sellExample.addAirSeg(airNo, fltClass, orgCity, desCity, actionCode, tktNum, departureTime); //添加旅客乘车返程航段信息 String airNo2 = "SC4651"; //航班号 char fltClass2 = 'Y'; //舱位等级 String orgCity2 = "PEK"; //始发城市 String desCity2 = "TAO"; //到达城市 String actionCode2 = "NN"; //行动代码 int tktNum2 = 1; //订座数 String departureTime2 = "2014-01-29"; //起飞时间 sellExample.addAirSeg(airNo2, fltClass2, orgCity2, desCity2, actionCode2, tktNum2, departureTime2); //添加旅客身份证信息 String airline = "SC"; //航空公司两字代码 String idtype = "NI"; //身份证件类型 NI身份证,CC信用卡,PP护照 String id = "568427951"; //对应的身份证件号码 sellExample.addSSR_FQTV(airline,idtype, id, name); //添加旅客联系组信息 String contactinfo = "15123339999"; sellExample.addContact(contactinfo); //添加联系组。 如addContact("66017755-2509"),旅客联系电话为66017755-2509 //添加旅客出票时限 String dateLimit = "2014-01-26 12:00:00"; sellExample.setTimelimit(dateLimit); //完成PNR必须信息输入递交主机,生成PNR SSResult ssr = sellExample.commit1(); //PNR结果 System.out.println(ssr.getPnrno()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 成人单人单航段预定 */ public static void sellseat3(){ SellSeat sellExample = new SellSeat(); connectHost(sellExample); try { //添加旅客姓名 String name = "IBETESTER/IBEGROUP"; sellExample.addAdult(name); //添加旅客航段信息 String airNo = "CA1501"; //航班号 char fltClass = 'Y'; //舱位等级 String orgCity = "PEK"; //始发城市 String desCity = "SHA"; //到达城市 String actionCode = "NN"; //行动代码 int tktNum = 1; //订座数 String departureTime = "2014-01-25"; //起飞时间 sellExample.addAirSeg(airNo, fltClass, orgCity, desCity, actionCode, tktNum, departureTime); //信息航段的添加 BookAirSeg airseg = new BookAirSeg("SHA","HGH"); sellExample.addAirSeg(airseg); //添加旅客乘坐返程航段信息 String airNo2 = "CA1703"; //航班号 char fltClass2 = 'Y'; //舱位等级 String orgCity2 = "HGH"; //始发城市 String desCity2 = "PEK"; //到达城市 String actionCode2 = "NN"; //行动代码 int tktNum2 = 1; //订座数 String departureTime2 = "2014-01-28"; //起飞时间 sellExample.addAirSeg(airNo2, fltClass2, orgCity2, desCity2, actionCode2, tktNum2, departureTime2); //添加旅客身份证信息 String airline = "CA"; //航空公司两字代码 String idtype = "NI"; //身份证件类型 NI身份证,CC信用卡,PP护照 String id = "123456789"; //对应的身份证件号码 sellExample.addSSR_FQTV(airline,idtype, id, name); //添加旅客联系组信息 String contactinfo = "15123339999"; sellExample.addContact(contactinfo); //添加联系组。 如addContact("66017755-2509"),旅客联系电话为66017755-2509 //添加旅客出票时限 String dateLimit = "2014-01-27 12:00:00"; sellExample.setTimelimit(dateLimit); //完成PNR必须信息输入递交主机,生成PNR SSResult ssr = sellExample.commit1(); //PNR结果 System.out.println(ssr.getPnrno()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取 */ /** * 获取RTResult公共方法 * @param prnno * @return */ public static RTResult rtResult(String prnno){ RT rtExample = new RT(); connectHost(rtExample); RTResult rtres = null; try { rtres = rtExample.retrieve(prnno); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return rtres; } /** * 实现PNR信息提取 */ public static void rt(){ RTResult rre = rtResult("HMND9P"); System.out.println(rre); } /** * 提取旅客组信息 */ public static void rt1(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示旅客信息 System.out.println("显示成人和儿童旅客:"); for(int i=0;i<rtres.getPassengersCount();i++){ PNRPassenger pnrPass = rtres.getPassengerAt(i); System.out.print("PNR序号:"+pnrPass.getIndex()); System.out.print("旅客姓名:"+pnrPass.getName()); System.out.print("年龄:"+pnrPass.getAge()); System.out.print("PNR中姓名:"+pnrPass.getNameInPnr()); System.out.println(); } System.out.println(); System.out.println("显示婴儿旅客:"); for(int i=0;i<rtres.getInfantsCount();i++){ PNRInfant pnrinfant = rtres.getInfantAt(i); System.out.print("PNR序号:"+pnrinfant.getIndex()); System.out.print("旅客姓名:"+pnrinfant.getName()); System.out.print("同机携带者:"+pnrinfant.getCarrier()); System.out.print("PNR中姓名:"+pnrinfant.getNameInPnr()); System.out.print("生日:"+pnrinfant.getBirthString()); System.out.println(); } System.out.println(); } /** * 提取航段组信息 */ public static void rt2(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示航段信息 System.out.println("显示航段组信息:"); for(int i=0;i<rtres.getAirSegsCount();i++){ PNRAirSeg pnrAirseg = rtres.getAirSegAt(i); System.out.print("PNR序号:"+pnrAirseg.getIndex()); System.out.print("航班号:"+pnrAirseg.getAirNo()); System.out.print("出发城市:"+pnrAirseg.getOrgCity()); System.out.print("到达城市:"+pnrAirseg.getDesCity()); System.out.print("出发时间:"+pnrAirseg.getDepartureTimeString()); System.out.print("到达时间:"+pnrAirseg.getArrivalTimeString()); System.out.print("航班舱位:"+pnrAirseg.getFltClass()); System.out.println(); } System.out.println(); } /** * 提取联系组信息 */ public static void rt3(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示联系组信息 System.out.println("联系组信息:"); for(int i=0;i<rtres.getContactsCount();i++){ PNRContact pnrCon = rtres.getContactAt(i); System.out.print("PNR序号:"+pnrCon.getIndex()); } } /** * 提取出票组信息 */ public static void rt4(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示出票组信息 System.out.println("出票组信息:"); for(int i=0;i<rtres.getTktsCount();i++){ PNRTkt pnrTkt = rtres.getTktAt(i); System.out.println("PNR序号:"+pnrTkt.getIndex()); System.out.println("出票的Office:"+pnrTkt.getOffice()); } } /** * 提取特殊服务组信息 */ public static void rt5(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示特殊服务组信息 System.out.println("显示特殊服务组信息:"); for(int i=0;i<rtres.getSSRsCount();i++){ PNRSSR pnrssr = rtres.getSSRAt(i); System.out.println("PNR序号:"+pnrssr.getIndex()); System.out.println("服务类型:"+pnrssr.getSSRType()); System.out.println("服务信息:"+pnrssr.getServeInfo()); System.out.println("服务标志:"+pnrssr.getPsgrID()); } } /** * 提取OSI */ public static void rt6(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示OSI信息 System.out.println("显示OSI信息:"); for(int i=0;i<rtres.getOSIsCount();i++){ PNROSI pnrOsi = rtres.getOSIAt(i); System.out.println("PNR序号:"+pnrOsi.getIndex()); System.out.println("OSI信息:"+pnrOsi.getOsi()); System.out.println("需要OSI旅客编号:"+pnrOsi.getPNum()); } } /** * 提取运价信息 */ public static void rt7(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示运价信息 System.out.println("显示运价信息:"); for(int i=0;i<rtres.getFNsCount();i++){ PNRFN pnrFn = rtres.getFNAt(i); System.out.println("PNR序号:"+pnrFn.getIndex()); System.out.println("FN信息: "+pnrFn.getFn()); System.out.println("FCNY:"+pnrFn.getAmount(BookFN.F)); System.out.println("货币单位:"+pnrFn.getCurrency(BookFN.A)); System.out.println("SCNY:"+pnrFn.getAmount(BookFN.S)); System.out.println("货币单位:"+pnrFn.getCurrency(BookFN.S)); System.out.println("XCNY:"+pnrFn.getAmount(BookFN.X)); System.out.println("货币单位:"+pnrFn.getCurrency(BookFN.X)); for(int j=0;j<pnrFn.getTaxCnt();j++){ System.out.println("第"+(j+1)+"项税:"+pnrFn.getTaxAmount(BookFN.T, j)); System.out.println("货币单位:"+pnrFn.getTaxCurrency(BookFN.T, j)); } System.out.println(); } System.out.println("显示运价信息FP:"); for(int i=0;i<rtres.getFNsCount();i++){ PNRFP pnrFP = rtres.getFpAt(i); System.out.println("PNR序号:"+pnrFP.getIndex()); System.out.println("FP代码:"+pnrFP.getPaytype()); System.out.println("货币单位:"+pnrFP.getCurrency()); System.out.println("FP注释:"+pnrFP.getRemark()); } } /** * 提取REMARK */ public static void rt8(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); //显示REMARK信息 for(int i=0;i<rtres.getRMKsCount();i++){ PNRRMK pnrRmk = rtres.getRMKAt(i); System.out.println("PNR序号:"+pnrRmk.getIndex()); System.out.println("REMARK内容:"+pnrRmk.getRmkinfo()); } } /** * 提取票号组 */ public static void rt9(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); for(int i=0;i<rtres.getTktnosCount();i++){ PNRTktNo pnrTkno = rtres.getTktnoAt(i); System.out.println("PNR序号:"+pnrTkno.getIndex()); System.out.println("票号:"+pnrTkno.getTktNo()); System.out.println("票号对应的旅客序号:"+pnrTkno.getPsgrID()); } } /** * 提取责任组 */ public static void rt10(){ RTResult rtres = rtResult("HMND9P"); System.out.println(rtres); PNRResp pnrResp = rtres.getResp(); System.out.println("PNR序号:"+pnrResp.getIndex()); System.out.println("PNR责任组:"+pnrResp.getOfficecode()); } /** * PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改 */ /** * 删除订座记录 */ public static String deletePnr(){ String pnrNo = "HMND9P"; PnrManage manager = new PnrManage(); connectHost(manager); String res = null; try { res = manager.deletePnr(pnrNo); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(res); return res; } /** * 删除指定编号组 * @return */ public static String deleteItem(){ String pnrNo = "HMND9P"; PnrManage manager = new PnrManage(); connectHost(manager); String res = null; try { res = manager.deleteItem(pnrNo, new int[7]); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(res); return res; } /** * 为PNR添加新组 * @return */ public static String addPnrInfo(){ String pnrNo = "HMND9P"; BookInfomation bookinfo = new BookInfomation(); PnrManage manager = new PnrManage(); connectHost(manager); String res = null; try { bookinfo.addContact("Hello"); res = manager.addPnrInfo(pnrNo, bookinfo); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(res); return res; } /** * 航班改期 */ public static void changAirSeg(){ SellSeat ss = new SellSeat(); connectHost(ss); try { ss.addPassenger(new BookPassenger("travelsky/test")); ss.addAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); ss.addContact("NC"); ss.setTimelimit(QDateTime.stringToDate("20140124", "yyyymmdd")); String pnr = ss.commit(); //改期操作 PnrManage manager = new PnrManage(); BookAirSeg oldseg = new BookAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); BookAirSeg newseg = new BookAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140126", "yyyymmdd")); manager.changeAirSeg(pnr, oldseg, newseg); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 修改出票组 */ public static void updatePnr(){ SellSeat ss = new SellSeat(); connectHost(ss); try { ss.addPassenger(new BookPassenger("travelsky/test")); ss.addAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); ss.addContact("NC"); ss.setTimelimit(QDateTime.stringToDate("20140124", "yyyymmdd")); String pnr = ss.commit(); //修改出票时限操作 PnrManage manager = new PnrManage(); BookInfomation bookinfo = new BookInfomation(); bookinfo.addTktstatus(new BookTktStatus(QDateTime.stringToDate("20140125", "yyyymmdd"))); manager.changeTkt(pnr, bookinfo); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 分离PNR */ public static void splitPnr(){ SellSeat ss = new SellSeat(); try { ss.setGroupName("Hell"); ss.setPassengerNumber(10); ss.setGroupTicket(true); ss.addAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); ss.addContact("NC"); ss.setTimelimit(QDateTime.stringToDate("20140124", "yyyymmdd")); String pnr = ss.commit(); System.out.println(pnr); //添加旅客姓名 Vector psgrs = new Vector(); BookPassenger psgr = new BookPassenger("成人甲"); BookPassenger psgr2 = new BookPassenger("成人乙"); BookPassenger psgr3 = new BookPassenger("成人丙"); psgrs.add(psgr); psgrs.add(psgr2); psgrs.add(psgr3); PnrManage manager = new PnrManage(); String res = manager.addGroupName(pnr, psgrs); System.out.println(res); //分离PNR Vector psgrs2 = new Vector(); BookPassenger psgr4 = new BookPassenger("成人甲"); BookPassenger psgr5 = new BookPassenger("成人乙"); psgrs2.add(psgr4); psgrs2.add(psgr5); String newres = manager.splitPNR(pnr, psgrs2, 3); //产生新的PNR System.out.println(newres); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 改期升舱 * 以下只针对单程和往返客票,即旅客只有一张客票的情况下。 * 首先确认是否需要分离PNR,多旅客(成人、儿童)PNR中部分旅客改期升舱情况下使用。 * * @param pnr * @return * @throws Exception */ public static String split(String pnr){//分离PNR PnrManage pm=new PnrManage(); connectHost(pm); String name="test/adult"; //第一步、创建要分离的旅客集合 Vector passengers=new Vector(); BookPassenger passenger; String pnrnew = null; try { passenger = new BookPassenger(name); //默认成人 //对于含儿童的PNR,一般用RT的返回结果设置旅客类型 //RTResult rs=new RTResult(); //rs=new RT().retrieve(pnr); //passenger.setType(rs.getPassengerAt(n).getType()); passengers.add(passenger); //第二步、分离旅客,返回新PNR号 pnrnew = pm.splitPNR(pnr, passengers, 0);//在散客中count参数无意义 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return pnrnew;//新生成的PNR } /** * 改期:这里指不需要换开票面的改升操作。 * @param pnr * @throws IBEException * @throws Exception */ public static void changeDate(String pnr) throws IBEException{//改期 PnrManage pm = new PnrManage(); connectHost(pm); //用旧的航段信息替换新的航段信息 String str = pm.changeETktAirSeg(pnr, "sc4651", "21sep", "sc4651","23sep", "nn"); System.out.println("PM:" + str); } //升舱:换开票面的改升操作,生产上采用占位PNR的方式实现升舱,且大多原票面信息可以从数据库中提取,所以这里的升舱主要是为了加强对IBE的API学习,了解PNR中各类信息的提取 //方法:updatePnr,传入的参数为要改升的PNR,新添加信息bookinformation,删除所有index[]。 //说明:这里以成人、儿童、带婴儿、往返航段、修改第一个航段为F舱为例,采用部分参数写死的方式,可以学习PNR信息提取相关API的用法。 //注意事项:a、index[]中存放的该条记录在PNR中的行号 //b、改升的时候不要把第一航段的出发日期改到第二航段之前 //c、索引从0开始,行号从1开始。 //d、OI项票联号,往返客票为1200 //e、TKNE项要删除干净,因为要生成新票面,原TKNE中的票号已不能使用 //f、出过票的PNR才能改升 public static void change(String pnr) throws Exception{ PnrManage pm=new PnrManage(); RT rt = new RT(); // 第一步、连接主机 connectHost(pm); connectHost(rt); //第二步、提取PNR RTResult rtResult =rt.retrieve(pnr); //第三步、创建要删除的信息pnr序号集合 List indextemp = new ArrayList(); //第四步、 创建要更新的信息组 BookInfomation bookInfomation = new BookInfomation(); //这里以成人、儿童、带婴儿、往返航段、修改第一个航段为F舱为例 //第五步、添加新的航段组。 PNRAirSeg oldPNRAirSeg=rtResult.getAirSegAt(0);//航段索引从0开始 BookAirSeg newBookAirSeg = new BookAirSeg(); newBookAirSeg.setActionCode("NN"); newBookAirSeg.setAirNo(oldPNRAirSeg.getAirNo()); newBookAirSeg.setDepartureTime(oldPNRAirSeg.getDepartureTime());//可以改期 newBookAirSeg.setOrgCity(oldPNRAirSeg.getOrgCity()); newBookAirSeg.setDesCity(oldPNRAirSeg.getDesCity()); newBookAirSeg.setFltClass('F'); newBookAirSeg.setTktNum(oldPNRAirSeg.getTktNum()); bookInfomation.addAirSeg(newBookAirSeg); indextemp.add(oldPNRAirSeg.getIndex());//添加该pnr序号以待删除 /* *第六步、添加OI项 */ //首先获取原PNR票号 Map infTktNo = new HashMap();// 婴儿原票号 Map tktNo = new HashMap();// 成人和儿童原票号 for (int i = 0; i < rtResult.getTktnosCount(); i++) { PNRTktNo pnrTktNo =rtResult.getTktnoAt(i) ; if (null != pnrTktNo&&"".equals(pnrTktNo.getRemark())) {//成人和儿童的remark为空字符串 tktNo.put(pnrTktNo.getPsgrID(), pnrTktNo.getTktNo()); } if (null != pnrTktNo&&"IN".equals(pnrTktNo.getRemark())){//婴儿的remark为IN infTktNo.put(pnrTktNo.getPsgrID(), pnrTktNo.getTktNo()); } } //添加OI项 Set psgrids = tktNo.keySet(); Set infPsgrids = infTktNo.keySet(); String psgrid = ""; String ticketNo = ""; //成人和儿童OI for (Iterator iterator = psgrids.iterator(); iterator.hasNext();) { psgrid = (String) iterator.next(); ticketNo = (String)tktNo.get(psgrid); BookOI oi = new BookOI(); oi.setCoupon("1200");//单航段客票为1000,指同一张票面上的航段都需要OI oi.setPsgrid(psgrid); oi.setTktno(ticketNo); bookInfomation.addOI(oi); } //婴儿OI for (Iterator iterator = infPsgrids.iterator(); iterator.hasNext();) { psgrid = (String) iterator.next(); ticketNo = (String)infTktNo.get(psgrid); BookOI oi = new BookOI(); oi.setCoupon("1200"); oi.setPsgrid(psgrid); oi.setTktno(ticketNo); oi.setInfant(true);//区别 bookInfomation.addOI(oi); } /* *第七步、添加FC、FN */ /* * 因为出过票,FC项已丢失,航段价无法获取,所以采用把新票面总价加到最后一个航段的方式创建FC * 对于包含成人、儿童、婴儿的PNR,FC项不同,所以在添加FC项时需添加旅客标识 */ /* * 确认旅客信息类型 */ int adultCnt = 0;// 成人旅客计数 int infantCnt = 0;// 婴儿旅客计数 int childCnt = 0;// 儿童旅客计数 List childNames = new ArrayList();// 儿童姓名集合 List adultNames = new ArrayList();// 成人姓名集合 Vector psgrs = rtResult.getPassengers(); //BookPassenger psgr = new BookPassenger("成人甲"); //BookPassenger psgr2 = new BookPassenger("成人乙"); // for (int i = 0; i < psgrs.size(); i++) { // if (PNRPassenger.ADULT == (psgrs.get(i)).getPassengerType()) {// 判断是否含有成人旅客,确认成人旅客数量 // adultCnt++; // adultNames.add(((BookInfant) psgrs.get(i)).getName()); // } // if (3 == (psgrs.get(i)).getPassengerType()) {// 判断是否含有儿童旅客,确认儿童旅客数量,因为PNRPassenger.CHILD在API和实际值不同,所以采用数值 // childCnt++; // childNames.add(psgrs.get(i).getName()); // } // } infantCnt = rtResult.getInfantsCount();// 判断是否含有婴儿旅客,确认婴儿数量 //成人FC、FN、FP if(0!=adultCnt){ BookFC adultFc = new BookFC(); adultFc.addFC(rtResult.getAirSegAt(0).getOrgCity(),rtResult.getAirSegAt(0).getDesCity(), "SC","F",-1, -1, -1, null, null, false, true, null, -1, null, -1, null, null, null);//第四个参数为-1表示此处不填写价格 adultFc.addFC(rtResult.getAirSegAt(1).getOrgCity(),rtResult.getAirSegAt(1).getDesCity(), "SC",String.valueOf(rtResult.getAirSegAt(1).getFltClass()),1200.00, -1, -1, null, null, false, true, null, -1, null, -1, null, null, null);//在最后一个航段填写价格1200.00 for (int k = 0; k < adultNames.size(); k++) {//添加旅客标识 adultFc.addPsgrname(adultNames.get(k).toString()); } bookInfomation.addFC(adultFc); BookFN adultFn = new BookFN();// 成人 FN adultFn.setAmount(BookFN.R, "CNY", 1200.00);//新票面价 adultFn.setAmount(BookFN.S, "CNY", 200.00);//票面差价 adultFn.setAmount(BookFN.A, "CNY", 200.00);//总差价 adultFn.setC(0); adultFn.addTax(BookFN.T, "CNY", 100.00, "CN"); adultFn.addTax(BookFN.T, "CNY", 140.00, "YQ"); for (int k = 0; k < adultNames.size(); k++) { adultFn.addPsgrname(adultNames.get(k).toString()); } bookInfomation.addFN(adultFn); BookFP fp = new BookFP();// FP不可省掉 fp.setFp("cc/23"); bookInfomation.addFP(fp); } //儿童FC、FN,票价不同 if(0!=childCnt){ BookFC childFc = new BookFC(); childFc.addFC(rtResult.getAirSegAt(0).getOrgCity(),rtResult.getAirSegAt(0).getDesCity(), "SC","F",-1, -1, -1, null, null, false, true, null, -1, null, -1, null, null, null);//第四个参数为-1表示此处不填写价格 childFc.addFC(rtResult.getAirSegAt(1).getOrgCity(),rtResult.getAirSegAt(1).getDesCity(), "SC",String.valueOf(rtResult.getAirSegAt(1).getFltClass()),600.00, -1, -1, null, null, false, true, null, -1, null, -1, null, null, null);//在最后一个航段填写价格 for (int k = 0; k < childNames.size(); k++) {//添加旅客标识 childFc.addPsgrname(childNames.get(k).toString()); } bookInfomation.addFC(childFc); BookFN childFn = new BookFN();// 儿童FN childFn.setAmount(BookFN.R, "CNY", 600.00);//RCNY childFn.setAmount(BookFN.S, "CNY", 100.00);//SCNY childFn.setAmount(BookFN.A, "CNY", 100.00);//ACNY childFn.setC(0); childFn.addTax(BookFN.T, "CNY", 140.00, "YQ"); childFn.addTax(BookFN.T, "CNY", BookFN.EXEMPTTAX, "CN"); for (int k = 0; k < childNames.size(); k++) { childFn.addPsgrname(childNames.get(k).toString()); } bookInfomation.addFN(childFn); if (0 == adultCnt) {//如果没有成人才追加FP BookFP fp = new BookFP();// FP fp.setFp("cc/23"); bookInfomation.addFP(fp); } } //婴儿FC、FN、FP,票价不同,特殊标识infant if (0 != infantCnt) { BookFC infantFc = new BookFC(); infantFc.addFC(rtResult.getAirSegAt(0).getOrgCity(), rtResult.getAirSegAt(0).getDesCity(), "SC", "F", -1, -1, -1, null, null, false, true, null, -1, null, -1, null, null, null);// 第四个参数为-1表示此处不填写价格 infantFc.addFC(rtResult.getAirSegAt(1).getOrgCity(), rtResult.getAirSegAt(1).getDesCity(), "SC", String.valueOf(rtResult .getAirSegAt(1).getFltClass()), 120.00, -1, -1, null, null, false, true, null, -1, null, -1, null, null, null);// 在最后一个航段填写价格 // 婴儿有特殊的标识项,所以可以不添加旅客标识 infantFc.setInfant(true); bookInfomation.addFC(infantFc); BookFN infantFn = new BookFN();// 婴儿FN infantFn.setAmount(BookFN.F, "CNY", 60.00); infantFn.setAmount(BookFN.S, "CNY", 60.00); infantFn.setAmount(BookFN.A, "CNY", 60.00); infantFn.setC(0); infantFn.addTax(BookFN.T, "CNY", BookFN.EXEMPTTAX, "YQ"); infantFn.addTax(BookFN.T, "CNY", BookFN.EXEMPTTAX, "CN"); infantFn.setInfant(true);//区别标识 bookInfomation.addFN(infantFn); BookFP fp = new BookFP();// FP fp.setFp("cc/23"); fp.setInfant(true);// 区别 bookInfomation.addFP(fp); } bookInfomation.setTimelimit("2012-10-23 12:00:00");// TK:TL /* *第八步、获取要删除T、FN、TN、FP、剩下要修改航段的TKNE的PNR序号 */ if (0 != rtResult.getTktsCount()) {// 出票组T for (int i = 0; i < rtResult.getTktsCount(); i++) { if (null != rtResult.getTktAt(i)) { indextemp.add(rtResult.getTktAt(i).getIndex()); } } } if (0 != rtResult.getFNsCount()) {// FN for (int i = 0; i < rtResult.getFNsCount(); i++) { if (null != rtResult.getFNAt(i)) { indextemp.add(rtResult.getFNAt(i).getIndex()); } } } if (0 != rtResult.getTktnosCount()) {// TN for (int i = 0; i < rtResult.getTktnosCount(); i++) { if (null != rtResult.getTktnoAt(i)) { indextemp.add(rtResult.getTktnoAt(i).getIndex()); } } } if (null != rtResult.getFps() && 0 != rtResult.getFps().size()) {// FP for (int i = 0; i < rtResult.getFps().size(); i++) { if (null != rtResult.getFpAt(i)) { indextemp.add(rtResult.getFpAt(i).getIndex()); } } } if (null != rtResult.getSsrs() && 0 != rtResult.getSSRsCount()) {// TKNE for (int i = 0; i < rtResult.getSSRsCount(); i++) { if (null != rtResult.getSSRAt(i)) { if ("TKNE".equals(rtResult.getSSRAt(i).getSSRType())) { indextemp.add(rtResult.getSSRAt(i).getIndex()); } } } } Integer[] indexsTemp=(Integer[])indextemp.toArray(new Integer[0]); int[]index=new int[indexsTemp.length]; for(int i=0;i<indexsTemp.length;i++){ index[i]=indexsTemp[i].intValue(); } //第九步、升舱 String status=pm.updatePnr(pnr, bookInfomation, index); //第十步、打印出票 if("OK".equals(status)){ etdz(pnr); } } /** * 退票 * 在E-TERM中填写退票单后票面上该航段会自动refunded,但使用IBE接口需要自己手动去refunded票面。 *对于往返航段,已经退过一个航段的客票,需要提取该退票单并修改,以保留上次退票信息。 * @param tktNo * @throws Exception */ public static void trfd(String tktNo) throws Exception {// 退票 //第一步、 REFUNDED票面上的航段状态 ETRF etrf = new ETRF(); connectHost(etrf); etrf.refundETkt(tktNo, 1, "CNY", 1200.00, "1", ""); //第二步、 填写退票单,连接主机 TRFD trfd = new TRFD(); connectHost(trfd); TRFDResult result = null; //第三步、 生成退票单。先尝试获取退票单,如果没有则新生成一个新退票单。 try { result = trfd.genRefundForm("tm", 2, "D", tktNo); } catch (IBEException e) { if (!e.getMessage().contains("CAN NOT PRINT NEW REFUND")) {// 判断是否已经生成过退票单 throw e; } //第四步、 生成新的退票单 result = trfd.genRefundForm("AM", 2, "D", null); result.setTktNo(tktNo.split("-")[1]); result.setRefund("N"); result.setPassName("SC"); result.setAirlineCode(tktNo.split("-")[0]); result.setCommissionRate(0); } //第五步、填写/修改退票单信息 result.setTax(0, 100.00, "CN"); result.setTax(1, 140.00, "YQ"); result.setDeduction(22);// 手续费 result.setGrossRefund(1000.00); result.setCouponNo(0, "1200"); // 新票联号 String s = trfd.changeRefundForm_new(result, false); System.out.println(s); } /** * 座位再确认 * @throws Exception */ public static void isOk(){ //对所有航段的可能状态进行再确认 String pnrNo = "XD441"; PnrManage manager = new PnrManage(); String res = null; try { res = manager.reconfirmAirSeg(pnrNo, null, PnrManage.RECONFIRM_ALL_POSSIBLE_ACTION); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } if("OK".equals(res)){ //座位再确认成功 }else if(res.startsWith("Error:")){ //座位再确认失败,请从新提取订座记录 } //对指定的航段进行再确认 RT rt = new RT(); String pnrNo1 = "XD441"; //先提取PNR的详细信息 RTResult pnrResult =null; try { pnrResult = rt.retrieve(pnrNo1); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } //获取再确认需要的航段 PNRAirSeg segmant = pnrResult.getAirSegAt(0); if(!"RR".equals(segmant.getActionCode())){ PnrManage manager2 = new PnrManage(); String res2 = null; try { res2 = manager2.reconfirmAirSeg(pnrNo1, segmant, PnrManage.RECONFIRM_ALL_POSSIBLE_ACTION); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } if("OK".equals(res2)){ //座位再确认成功 }else if(res2.startsWith("Error:")){ //座位再确认失败,请从新提取订座记录 } } } /** * 团队票添加旅客姓名 */ public static void addName(){ //创建空的团队票PNR SellSeat ss = new SellSeat(); try { ss.setGroupName("Hell"); ss.setPassengerNumber(10); ss.setGroupTicket(true); ss.addAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); ss.addContact("NC"); ss.setTimelimit(QDateTime.stringToDate("20140124", "yyyymmdd")); String pnr = ss.commit(); System.out.println(pnr); //添加旅客姓名 Vector vector = new Vector(); BookPassenger psgr = new BookPassenger("成人甲"); BookPassenger psgr2 = new BookPassenger("成人乙"); vector.add(psgr); vector.add(psgr2); PnrManage manager = new PnrManage(); String res = manager.addGroupName(pnr, vector); System.out.println(res); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 团队票删除旅客姓名 */ public static void removeName(){ //创建空的团队票PNR SellSeat ss = new SellSeat(); try { ss.setGroupName("Hell"); ss.setPassengerNumber(10); ss.setGroupTicket(true); ss.addAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); ss.addContact("NC"); ss.setTimelimit(QDateTime.stringToDate("20140124", "yyyymmdd")); String pnr = ss.commit(); System.out.println(pnr); //删除旅客姓名 Vector vector = new Vector(); BookPassenger psgr = new BookPassenger("成人甲"); BookPassenger psgr2 = new BookPassenger("成人乙"); vector.add(psgr); vector.add(psgr2); PnrManage manager = new PnrManage(); String res = manager.removeName(pnr, vector); System.out.println(res); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 团队票减少座位 */ public static void reduce(){ //创建空的团队票PNR SellSeat ss = new SellSeat(); connectHost(ss); try { ss.setGroupName("Hell"); ss.setPassengerNumber(10); ss.setGroupTicket(true); ss.addAirSeg("ZH9890", 'Y', "PEK", "SZX", "NN", 1, QDateTime.stringToDate("20140125", "yyyymmdd")); ss.addContact("NC"); ss.setTimelimit(QDateTime.stringToDate("20140124", "yyyymmdd")); String pnr = ss.commit(); System.out.println(pnr); //添加旅客姓名 Vector vector = new Vector(); BookPassenger psgr = new BookPassenger("成人甲"); BookPassenger psgr2 = new BookPassenger("成人乙"); vector.add(psgr); vector.add(psgr2); PnrManage manager = new PnrManage(); String res = manager.addGroupName(pnr, vector); System.out.println(res); //删除无用座位 res = manager.reduceGroupSeats(pnr, 3); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询 */ /** * 查询PNR的PATA运价,先不录入PNR,查询后通过doPatASecond()进行录入 * @return */ public static PATResult doPat(){ PAT pat = new PAT(); connectHost(pat); PATResult res = null; try { // 1.pnr编号 // 2.如果查净价则写A(如果没有净价则返回公布运价),如果查询南航产品舱位价则写产品名称,不写则填null或"" // 3.查询类型,IN:婴儿;CH:儿童;JC:因公带伤警察;GM:伤残军人,不写则填null或"" // 4.旅客序号,从1开始,查询净价时此项才有效,如果此旅客不是成人,则必须输入查询类型方可显示相应的价格 // 5.是否将查询的运价结果录入PNR, 如果查询净价且为多个结果并要选定一个录入到PNR,要以选定的结果集为参数再执行doPatASecond方法 res = pat.doPat("JTNDKR",null,null,1,false); //res = pat.doPatASecond(patres_pre, pnrno, index, psgid, type, payment, clientcode); System.out.println(res); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } return res; } /** * 查询PAT公布运价 */ public static void searchPat(){ PAT pat = new PAT(); connectHost(pat); PATResult res = null; try { res = pat.doPat("ZQ803","",null,1,false); System.out.println(res); for(int i=0;i<res.farenumber;i++){ PATFareItem item = res.getFareItem(i); System.out.println("FC:"+item.getFc().makeString()); System.out.println("FN:"+item.getFn().makeString()); } } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票 */ /** * 出票 * @param pnr PNR编号 * @throws Exception */ public static void etdz(String pnr){ ETDZ etdz = new ETDZ(); connectHost(etdz); //issueTicket(java.lang.String pnrno,int printerNo)pnrno(PNR编号),printerNo(打票机编号) try { System.out.println(etdz.issueTicket(pnr, 2));//返回OK } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 提取电子客票记录 */ public static void getTickt(){ DETR detr = new DETR(); connectHost(detr); DETRTKTResult res; try { res = detr.getTicketInfoByTktNo("9999639898236"); System.out.println(res.toString()); } catch (Exception e) { // TODO Auto-generated catch block System.out.println(e); e.printStackTrace(); } } /** * 根据证件号提取电子客票记录 */ public static void getTickt2(){ DETR detr = new DETR(); connectHost(detr); Vector vec; try { vec = detr.getTicketInfoByCert("NI", null); System.out.println(vec.toString()); } catch (Exception e) { // TODO Auto-generated catch block System.out.println(e); e.printStackTrace(); } } /** * 根据旅客姓名提取电子客票记录 */ public static void getTickt3(){ DETR detr = new DETR(); connectHost(detr); Vector vec; try { Date fligtDate = new Date("2014/01/25"); vec = detr.getTicketInfoByName("test", "CA4116", fligtDate, true); System.out.println(vec.toString()); } catch (Exception e) { // TODO Auto-generated catch block System.out.println(e); e.printStackTrace(); } } /** * 通过票号提取电子客票旅客的身份识别号码 */ public static void getTickt4(){ DETR detr = new DETR(); connectHost(detr); DETRFoidResult vec; try { vec = detr.getCredentialByTktNo("880-2108078643"); System.out.println(vec); } catch (Exception e) { // TODO Auto-generated catch block System.out.println(e); e.printStackTrace(); } } /** * 电子客票非全屏模式生成修改打印退票单指令-电子客票非全屏模式生成修改打印退票单指令-电子客票非全屏模式生成修改打印退票单指令 */ /** * 电子客票创建退票单过程 */ public static TRFDResult creatTick(){ TRFD trfd = new TRFD(); connectHost(trfd); TRFDResult res = null; try { res = trfd.genRefundForm("am", 4, "D", null); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(res.toString()); return res; } /** * TRFD提交退票单修改或删除退票单 */ public static void comupordele(){ TRFD trfd = new TRFD(); connectHost(trfd); TRFDResult results = creatTick(); try { String res = trfd.changeRefundForm_new(results, false); System.out.println(res); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * TRFD国内自动生成退票单 */ public static void autom(){ //自动生成退票单 // TRFD trfd = new TRFD(); // connectHost(trfd); // // TRFDResult results = null; // // try { // results = trfd.automaticRefund("999-5363045411", 40, "d"); // // System.out.println(results); // } catch (IBEException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } //提交退票单 TRFD trfd = new TRFD(); connectHost(trfd); TRFDResult res = creatTick(); try { String refundno = trfd.confirmAutomaticRefund(res,"999-5363045411",40,"d"); System.out.println(refundno); } catch (IBEException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理 */ /** * 查看office Q的状态 */ public static void lookQ(){ QUEUE q = new QUEUE(); connectHost(q); // try { // QueueContent content = q.getQueueContent(); // // //展示Office号 // System.out.println(content.getOfficeCode()); // // //按顺序展示信箱的状态 // for(int i=0;i<content.getQueueBoxCount();i++){ // QueueBoxItem item = content.getQueueBoxes(i); // //信箱名 // System.out.println(item.getBoxName()); // System.out.println(" "); // // //为处理QUEUE数/信箱容量 // System.out.println(item.getNewQueue()+"/"+item.getCapacity()); // // } // // // // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } /** * 也可以直接获取某信箱的状态,方便不同专门信箱处理程序调用 */ QueueContent content = null; try { content = q.getQueueContent(); QueueBoxItem item = content.getQueueBoxes("SC"); //信箱名 System.out.println(item.getBoxName()); System.out.println(" "); //为处理QUEUE数/信箱容量 System.out.println(item.getNewQueue()+"/"+item.getCapacity()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 发送QUEUE到邮箱 */ public static void sendQue(){ QUEUE q = new QUEUE(); connectHost(q); try { //即时发送自写文本到CMS001的GQ String sendResult = q.sendMessage("GQ", "CMS001", "THIS IS TEST MESSAGE"); //发送自写文本到CMS001的GQ,定时到20140128 12时42分发 Calendar cal = Calendar.getInstance(); cal.set(2014,1,28,12,42,0); String sendResult2 = q.sendMessage("GQ", "CMS001", "THIS IS TEST MESSAGE",cal.getTime()); //发送自写文本到CMS001的GQ,即时发送优先 String sendResult3 = q.sendMessage("GQ", "CMS001", "THIS IS TEST MESSAGE",null,true); //发送PNR:X042W的内容到CMS001的GQ String sendResult4 = q.sendMessage("GQ", "CMS001", "PNR:X042W"); //发送PNR:X042W的内容到CMS001的GQ 定时到20140128 12时42分发 String sendResult5 = q.sendMessage("GQ", "CMS001", "PNR:X042W",cal.getTime()); //发送PNR:X042W的内容到CMS001的GQ 定时到20140128 12时42分发,定时发送优先 String sendResult6 = q.sendMessage("GQ", "CMS001", "PNR:X042W",cal.getTime(),true); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 读取并处理Q */ public static void getq(){ QUEUE q = new QUEUE(); connectHost(q); try { System.out.println(q.getQueue("GQ", false)); System.out.println(q.getQueue("GQ", true,true)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 创建新的PNR * @return * @throws Exception */ public static String createPNR() throws Exception {// 新建PNR SellSeat ss = new SellSeat(); //连接主机 connectHost(ss); //添加旅客姓名 String name = "TEST/ADULT"; ss.addAdult(name); //添加旅客乘坐航段信息 String airNo = "SC4651"; //航班号 char fltClass = 'Y'; //舱位等级 String orgCity = "TAO"; //始发城市 String dstCity = "PEK"; //到达城市 String actionCode = "NN"; //行动代码 int tktNum = 1; //订座数 String departureTime = "2014-01-25"; //起飞时间 ss.addAirSeg(airNo, fltClass, orgCity, dstCity, actionCode, tktNum, departureTime); //添加旅客身份证信息 String airline = "SC"; //航空公司两字代码 String idtype = "NI"; //身份证件类型 NI身份证,CC信用卡,PP护照 String id = "123456789"; //对应的身份证件号码 ss.addSSR_FOID(airline, idtype, id, name); //添加旅客联系组信息 String contactinfo = "15123339999"; ss.addContact(contactinfo); //添加联系组。 如addContact("66017755-2509"),旅客联系电话为66017755-2509 //添加旅客出票时限 String dateLimit = "2014-01-18 12:00:00"; ss.setTimelimit(dateLimit); //添加FC票价计算组 //字符串参数、格式为FC:出发城市(TAO) 承运航空(SC) 目的城市(PEK) 票面价(600.00) 运价基础(Y)总价(CNY)结束(END) String fcStr = "FC:TAO SC PEK 600.00Y CNY600.00END"; ss.addFC(fcStr); /*BookFC对象参数 BookFC fc= new BookFC(); fc.addFC("pek", "tao", "sc", "y", 600.00);//多航段多次添加,价格-1 时表示把该航段价格加到下一航段(最后一个航段),可用于多航段只了解票面总价的情况下使用,在后面的升舱过程由于无数据库保存FC项时可以用到 ss.addFC(fc);*/ //添加FN票价组 //字符串参数、格式为FN:票面总价(FCNY)/实收价格(SCNY)/代理费率(C3.00)/机建税(TCNY50.00CN)/燃油税(TCNY70.00YQ) String fnStr = "FN:FCNY600.00/SCNY600.00/C3.00/TCNY50.00CN/TCNY70.00YQ"; ss.addFN(fnStr); /* //BookFN对象参数 BookFN fn= new BookFN(); fn.setAmount(BookFN.F, "CNY", 600.00);//FCNY fn.setAmount(BookFN.S, "CNY", 600.00);//SCNY fn.setC(3.00);//代理费率 fn.addTax(BookFN.T, "CNY", 50.00, "CN");//机建 fn.addTax(BookFN.T, "CNY", 70.00, "YQ");//燃油 ss.addFN(fn); */ //完成PNR必需信息输入,递交主机,生成PNR SSResult ssr = ss.commit1(); // 返回PNR结果 System.out.println(ssr.getPnrno()); return ssr.getPnrno(); } public static void main(String[] args) { /** * 航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询-航班信息查询 */ //av(); //航班查询 //sk(); //航班时刻查询 //ff(); //航班经停点及起降时间的查询 //dsg(); //实现显示航班飞行时间餐食等信息 //fd(); //实现运价查询 //ml(); //实现旅客姓名提取 /** * 旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录-旅客订座记录 */ //sellseat1(); //预定成人单人单程 //sellseat2(); //预定成人往返单程 //sellseat3(); //预定成人缺口程 /** * PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取-PNR提取 */ //rt(); //实现PNR信息提取 //rt1(); //提取旅客组信息 //rt2(); //提取航段组信息 //rt3(); //提取联系组信息 //rt4(); //提取出票组信息 //rt5(); //提取特殊服务组信息 //rt6(); //提取OSI //rt7(); //提取运价信息 //rt8(); //提取REMARK //rt9(); //提取票号组 //rt10(); //提取责任组 /** * PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改- PNR修改-PNR修改 */ //deletePnr(); //删除订座记录 //deleteItem(); //删除指定编号组 //addPnrInfo(); //为PNR添加新组 //changAirSeg();//航班改期 //updatePnr(); //修改出票组 //splitPnr(); //分离PNR // split("NKHD2P"); //分离PNR // try { // changeDate("NKHD2P"); //改期 // } catch (IBEException e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // try { // change("NKHD2P");//升舱 // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // // // try { // trfd("880-2108078643");//退票 // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } //isOk(); //座位再确认 //addName(); //团队票添加旅客姓名 //removeName(); //团队票删除旅客姓名 //reduce(); //团队票减少座位 /** * PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询-PATA运价查询 */ //doPat();//PATA运价 //searchPat(); //查询PAT公布运价 /** * 电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票-电子客票出票/废票 */ //etdz("HMNDB0");//出票 //getTickt(); //提取电子客票记录 //getTickt2(); //根据证件号提取电子客票记录 //getTickt3(); //根据旅客姓名提取电子客票记录 //getTickt4(); //通过票号提取电子客票旅客的身份识别号码 /** * 电子客票非全屏模式生成修改打印退票单指令-电子客票非全屏模式生成修改打印退票单指令-电子客票非全屏模式生成修改打印退票单指令 */ //creatTick(); //电子客票创建退票单过程 //comupordele();//TRFD提交退票单修改或删除退票单 //autom(); //TRFD国内自动生成退票单 /** * 信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理-信箱处理 */ //lookQ(); //查看office Q的状态 //sendQue();//发送QUEUE到邮箱 //getq(); //读取并处理Q //创建新的PNR // try { // createPNR(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } } }
3.配置文件加载类
/** * 加载操作配置文件 * @author ziyuzhang * */ public class IBEConfigUtil { private static PropertiesConfiguration config=null; static{ try{ //config.setEncoding("UTF-8"); //config.setHeader(header) config = new PropertiesConfiguration(); config.setEncoding("UTF-8"); config.load("ibeclient.properties"); }catch(Exception ex){ } } public static Boolean getEnablelog(String key){ Boolean enab=false; try { enab = config.getBoolean(key); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return enab; } public static void main(String[] args){ System.out.println(getEnablelog("ibe.client.enablelog")); } public static int getIntValue(String key){ int reInt = 1; try{ //PropertiesConfiguration config = new PropertiesConfiguration("conf.properties"); reInt = config.getInt(key); }catch(Exception ex){ ex.fillInStackTrace(); reInt = 0; } return reInt; } public static Long getLongValue(String key) { Long reLong = 1l; try{ //PropertiesConfiguration config = new PropertiesConfiguration("conf.properties"); reLong = config.getLong(key); }catch(Exception ex){ ex.fillInStackTrace(); reLong = 0l; } return reLong; } public static double getDoubleValue(String key){ double reDouble = 1.0; try{ //PropertiesConfiguration config = new PropertiesConfiguration("conf.properties"); reDouble = config.getDouble(key); }catch(Exception ex){ ex.fillInStackTrace(); reDouble =1.0; } return reDouble; } public static String getStringValue(String key){ String str = ""; try{ //PropertiesConfiguration config = new PropertiesConfiguration("conf.properties"); str = config.getString(key); }catch(Exception ex){ ex.fillInStackTrace(); str = ""; } return str; } public static Boolean getBooleanValue(String key) { Boolean flag = false; try{ flag = config.getBoolean(key); }catch(Exception ex){ ex.fillInStackTrace(); } return flag; } public static void save(String key,Object o){ config.setProperty(key, o); try{ //config.save("score.properties"); config.save("ibeclient.properties"); //config = new PropertiesConfiguration("app.properties"); config = new PropertiesConfiguration(); config.setEncoding("UTF-8"); config.load("ibeclient.properties"); }catch(Exception ex){ ex.printStackTrace(); } } // 读取配置文件 private static ResourceBundle cache = null; static { try { cache = ResourceBundle.getBundle("ibeclient"); } catch (RuntimeException e) { e.printStackTrace(); } } /** * 功能描述:获取配置文件参数值 * * @param str(参数KEY值) * @return */ public static String getValue(String str) { String s = cache.getString(str); try { s = new String(s.getBytes("ISO8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return s; } /** * 功能描述:获取指定配置文件参数的值 * * @param strPropertiesFile(配置文件名称) * @param strItem(参数名称) * @return */ public String getPropertiesValue(String strPropertiesFile, String strItem) { String strItemValue = ""; ResourceBundle resources1 = null; try { resources1 = ResourceBundle.getBundle(strPropertiesFile); strItemValue = resources1.getString(strItem); } catch (MissingResourceException e) { System.out.println("ConfigInfo.getPropertiesValue error:" + e.getMessage()); } return strItemValue; } }
4.配置文件(放于src下)
文件名:ibeclient.properties 相应的app、office号等找名航要
ibe.client.enablelog=true ibe.server.ip=202.106.139.75 ibe.server.port=6891 ibe.client.app=caairetd1 ibe.client.office=pek888 ibe.client.customno=1488 ibe.client.validationno=9 ibe.client.sockettimeout=120 ibe.client.connecttimeout=120
5.所需jar包:
相关推荐
E-Build ET相关接口是查询,处理电子客票的接口,封装ET票相关的主机操作。 E-Build实现类,具体内容请参考JavaDoc文档: 实现类:com.travelsky.ibe.client.pnr.DETR com.travelsky.ibe.client.pnr.ETDZ VT TSS ...
3. **E-Build基础API手册**:基础API手册通常会包含中航信提供的基本服务,如订座、取消、修改订单等功能的API描述。开发者需要根据手册中的指引,学习如何正确使用这些API来实现相应的业务功能。 4. **BSP自动出票...
中航信IBE机票接口开发相关文档, 包括: IBE 客户端 FlightShoppping 接口使用手册 E-Build API用户手册 E-Build 基础API手册 BSP自动出票系统手册 订座业务系统操作手册
机票IBE实时查询接口,航信数据对接的,飞耶机票查询接口源码,大家可以下来看看的,实用性比较强。
熟练掌握这些基本指令是操作中航信黑屏系统的基础,通过不断的实践和学习,用户可以更加高效地处理航空业务,提高工作效率。同时,了解并熟悉系统的高级功能,如批处理操作、数据导入导出等,将进一步提升操作的便捷...
中航信Eterm协议解析
PNR(Passenger Name Record)是航空公司staff使用黑屏系统进行航班查询和票价查询的基础。黑屏系统提供了多种PNR操作方式,包括: 1. PAT:A 指令:PAT:A 指令可以查询 PNR 的票价,根据票价级别不同,选择相应项穿...
中航信B2C电商方案-机票销售与服务 中航信B2C电商方案-机票销售与服务是中航信公司推出的电商解决方案,旨在帮助航空公司建立自己的B2C电商平台,以便更好地销售机票和提供服务。该方案的核心架构图显示了该平台的...
验证码识别的Web服务可能使用了深度学习模型,如卷积神经网络(CNN),对输入的验证码图片进行分析,识别出其中的文字。这个过程涉及图像预处理、特征提取、模型训练和预测等多个步骤。开发者将这个服务集成到C#代码...
在数据处理方面,中航信业务系统使用先进的数据仓库和数据挖掘技术,对海量的航空数据进行存储、整理和分析。例如,通过对历史航班、旅客信息的分析,可以预测航班需求,优化航线布局;通过对旅客消费行为的分析,...
中航信Eterm协议解析是航空信息技术领域中的一个重要知识点,主要涉及如何理解和处理与中航信Eterm系统相关的通信协议。Eterm,全称为Electronic Terminal,是中国民航信息网络股份有限公司(简称“中航信”)提供的...
"工程项目创新成果汇总-北京中航信.pdf" 本资源文件为北京中航信公司的工程项目创新成果汇总,主要介绍了该公司的一项大型公共建筑项目,该项目位于北京市顺义区后沙峪镇,机场北线与天北路交界处。该项目的主要...
1. **ebuildapihandbook.doc**:这可能是中航信eBuild API的手册,详细解释了如何与中航信的系统进行交互,包括API调用的规范、参数设置、请求和响应格式等。对于开发人员来说,这是实现机票预订功能的关键文档。 2...
2. **使用权限**:根据服务商的规定,使用该接口可能需要获得相应的授权或许可。 3. **技术支持**:遇到问题时,及时联系技术支持团队,以便快速解决问题。 综上所述,中国航信航班查询系统转换接口是一款实用性强...