转载请注明出处: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基础API的使用实例,包括静态时间格式类、接口测试类和配置文件加载类的详细说明。需要配置文件ibeclient.properties以及相关jar包。
213





