转载请注明出处: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 ...
中航信IBE机票接口开发相关文档, 包括: IBE 客户端 FlightShoppping 接口使用手册 E-Build API用户手册 E-Build 基础API手册 BSP自动出票系统手册 订座业务系统操作手册
3. **E-Build基础API手册**:基础API手册通常会包含中航信提供的基本服务,如订座、取消、修改订单等功能的API描述。开发者需要根据手册中的指引,学习如何正确使用这些API来实现相应的业务功能。 4. **BSP自动出票...
机票IBE实时查询接口,航信数据对接的,飞耶机票查询接口源码,大家可以下来看看的,实用性比较强。
1. **ebuildapihandbook.doc**:这可能是中航信eBuild API的手册,详细解释了如何与中航信的系统进行交互,包括API调用的规范、参数设置、请求和响应格式等。对于开发人员来说,这是实现机票预订功能的关键文档。 2...
熟练掌握这些基本指令是操作中航信黑屏系统的基础,通过不断的实践和学习,用户可以更加高效地处理航空业务,提高工作效率。同时,了解并熟悉系统的高级功能,如批处理操作、数据导入导出等,将进一步提升操作的便捷...
PNR(Passenger Name Record)是航空公司staff使用黑屏系统进行航班查询和票价查询的基础。黑屏系统提供了多种PNR操作方式,包括: 1. PAT:A 指令:PAT:A 指令可以查询 PNR 的票价,根据票价级别不同,选择相应项穿...
中航信Eterm协议解析
中航信B2C电商方案-机票销售与服务 中航信B2C电商方案-机票销售与服务是中航信公司推出的电商解决方案,旨在帮助航空公司建立自己的B2C电商平台,以便更好地销售机票和提供服务。该方案的核心架构图显示了该平台的...
验证码识别的Web服务可能使用了深度学习模型,如卷积神经网络(CNN),对输入的验证码图片进行分析,识别出其中的文字。这个过程涉及图像预处理、特征提取、模型训练和预测等多个步骤。开发者将这个服务集成到C#代码...
在数据处理方面,中航信业务系统使用先进的数据仓库和数据挖掘技术,对海量的航空数据进行存储、整理和分析。例如,通过对历史航班、旅客信息的分析,可以预测航班需求,优化航线布局;通过对旅客消费行为的分析,...
中航信Eterm协议解析是航空信息技术领域中的一个重要知识点,主要涉及如何理解和处理与中航信Eterm系统相关的通信协议。Eterm,全称为Electronic Terminal,是中国民航信息网络股份有限公司(简称“中航信”)提供的...
"工程项目创新成果汇总-北京中航信.pdf" 本资源文件为北京中航信公司的工程项目创新成果汇总,主要介绍了该公司的一项大型公共建筑项目,该项目位于北京市顺义区后沙峪镇,机场北线与天北路交界处。该项目的主要...
在实际应用中,Eterm协议的使用者通常需要编写专门的软件或接口来实现与中航信系统的连接。这些软件可能基于命令行界面,也可能有图形化的用户界面,通过键盘输入命令或者点击界面上的按钮来触发相应的操作。同时,...
### 中航信三大系统:ICS、CRS和DCS #### ICS系统——Inventory Control System (航空公司订座系统) ICS系统作为航空公司内部的核心系统之一,主要用于建立、控制和销售航班。该系统支持集中式管理,允许不同的...