`

中航信E-Build基础API使用实例

    博客分类:
  • API
阅读更多

 

转载请注明出处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包:



 

 

 

转载请注明出处http://lucien-zzy.iteye.com/admin/blogs/2007894

  • 大小: 56.2 KB
1
1
分享到:
评论
4 楼 duzc2 2016-02-24  
转载请注明出处:http://lucien-zzy.iteye.com/admin/blogs/2007894
这个地址写错了吧
应该是 http://lucien-zzy.iteye.com/blog/2007894
3 楼 lucien_zzy 2014-01-22  
不是,说错了,是外网访问不到的,内网访问的
2 楼 lucien_zzy 2014-01-22  
fykyx521 写道
牛逼啊  这个api 都能获取到  外网可以访问不


这个内网访问不到的
1 楼 fykyx521 2014-01-22  
牛逼啊  这个api 都能获取到  外网可以访问不

相关推荐

Global site tag (gtag.js) - Google Analytics