票号授权校验及票号准确性校验开发文档
一、票号授权校验及票号准确性流程说明
1.主业务流程说明:
1)出票页面,供应填写完出票票号,点击提交时,进行页校验提示“是否授权?”,供应点击“我
已授权”;
2)调用API票号校验接口,API票号校验接口验证是否能提取供应票号,若票号提取不成功,若票
号提取成功,进行票号准确性检验,若票号准确性校验不通过,告之平台票号准确性校验不通过
原因,平台保存票号等信息,出票交易状态和订单状态变更为”票号信息异常“,保存后,将”校
验不通过原因“提示给供应,关闭出票窗口。【供应可根据异常订单标签,进行异常订单任务处理】。
3)若票号准确性校验通过,验证订单是否为携程订单,若不为携程订单,保存票号等信息,出票交
易状态和订单状态变更为”已出票“。
4)若为携程订单,在二次授权任务表中,增加一条二次授权的任务,保存票号等信息,出票交易状
态和订单状态变更为”已出票“【往condauthorizetask二次授权表插入一个记录】
API进行二次授权任务处理,扫描二次授权任务表,进行二次授权,二次授权成功后,由平台扫描二
次授权任务表,核查是否授权成功,
5)另一种模式:涉及到携程的订单,出票时,平台直接调用API二次授权的订单进行二次授权交互,这
种方案,可能存在交互时间过长的问题。若授权失败,出票状态变更为出票中;新建后台进程。扫描
单据来源于携程的订单且出票交易状态为出票中,对该类订单进行自动授权;
2.票号未授权流程说明:
1)供应点击【票号未授权】标签,查询票号未授权的出票交易,页面进行渲染。
2)点击开始处理按钮,点击【处理】按钮,进入票号未授权处理页面,供应复制授权指令,线下
授权后,点击提交,走出票时流程。
3.票号校验异常流程说明:
1)供应点击【异常订单】标签,查询票号校验异常的出票交易,页面进行渲染;
2)点击开始处理按钮,点击【处理】按钮,进入票号校验异常处理页面,供应选择提交异常申诉,
填写相应信息,出票交易状态变更为22;【插入complain表内容】
3)总控,业务员处理供应提交的申诉单,业务员验证通过后,点击【确认供应票号信息无误】后,
继续进行出票操作【若是携程的订单,进行二次授权后,状态变更为已出票,若不是携程订单,
状态直接变更为已出票】;说明【二次授权时,若提取票号失败,则出票交易状态变更为20】
【需更新complain表,complainStatus=0,updateTime】
4)若验证不通过,打回供应,出票交易状态变更为21,告之供应异常原因,更新complain表。
【需更新complain表,abnormalType,updateTime】
5)供应认可业务员提交的异常原因时,点击完成信息修改,继续进行票号有效性验证【携程订单
进行二次授权】,出票操作。【需更新complain表,complainStatus=0,updateTime】
供应不认可业务员提交的异常原因,可继续提交给业务员。【需更新complain表,
abnormalType,updateTime】
4.设计说明
1)增加订单状态:20票号未授权;21票号校验异常;22票号校验异常申诉;23票号未二次授
权;
2)处理按钮展示条件:出票交易状态为20,21,22三种状态时,展示处理按钮。
3)在开票发交易管理界面,增加三个标签按钮:
票号未授权:lect*fromtickorderinfowheresupplier=’供应’andstatus=20;
异常订单:lect*fromtickorderinfowheresupplier=’供应’andstatus=21;
异常订单申诉:lect*fromtickorderinfowheresupplier=’供应’andstatus=22;
4)在总控订单管理,出票前标签列中,增加三个标签按钮:
异常订单申诉:lect*fromtickorderinfowherestatus=22;
票号未授权:lect*fromtickorderinfowherestatus=20;
异常订单:lect*fromtickorderinfowherestatus=21;
5)流程交互中,将与供应的异常交互信息,未授权等信息存到tickorderinfo表的comment字段
6)增加申诉表:complain
Createtablecomplain{
`id`int(11)NOTNULLAUTO_INCREMENT,
`tickOrderId`varchar(32)NOTNULLDEFAULT''COMMENT'出票订单Id',
`orderId`varchar(20)NOTNULLDEFAULT'',
`pnrCode`varchar(20)NOTNULLDEFAULT'',
`detrinfo`textCOMMENT'提取票号命令信息',
`complainStatus`tinyint(4)NOTNULLDEFAULT'0'COMMENT'申诉状态1有效0:无效',
`abnormalType`tinyint(4)NOTNULLDEFAULT''COMMENT'审核错误类型1行程信息
有误2乘机人信息有误3出发到达日期有误’,
`createTime`datetimeNOTNULLDEFAULT'1900-01-0100:00:00'COMMENT'创建时间',
`updateTime`datetimeNOTNULLDEFAULT'1900-01-0100:00:00'COMMENT'最后更新
时间'
}
7)增加二次授权任务表:condauthorizetask
Createtablecondauthorizetask{
`id`int(11)NOTNULLAUTO_INCREMENT,
`orderId`varchar(20)NOTNULLDEFAULT'',
`pnrCode`varchar(20)NOTNULLDEFAULT'',
`infoSource`varchar(32)NOTNULLDEFAULT''COMMENT'office号',
`resource`varchar(30)NOTNULLDEFAULT''COMMENT'gds渠道',
`authStatus`tinyint(4)NOTNULLDEFAULT'0'COMMENT'授权状态-1已授权0:待授权',
`authError`textCOMMENT'授权失败原因',
`createTime`datetimeNOTNULLDEFAULT'1900-01-0100:00:00'COMMENT'创建时间',
`authTime`datetimeNOTNULLDEFAULT'1900-01-0100:00:00'COMMENT'授权时间'
}
8)平台二次授权成功可出票任务扫描:
新建定时器,每隔3分钟,扫描二次授权任务表condauthorizetask中状态为已授权的订单
信息;
获取List
从condauthorizetask中,得到orderid,pnrCode,调用出票逻辑,进行出票操作。
9)弹出小弹窗设计:
在页面写一个定时器【8点至18点扫描】,每隔三分钟,通过ajax去后台请求一次(查询有票
号未授权或票号校验异常的订单)数据。
lect*fromtickorderinfowheresupplier=’agentId’andstatus=20orstatus=21;
若后台有返回数据,弹出一个窗口,提示【您有(票号未授权、票号信息异常)订单需要处理,
点击查看(这四个字是超链接)】,点击查看按钮,进入票号未授权、票号信息异常的订单展示
列表。
若后台无返回数据,则不处理。
10)换编政策时,可更换出票系统,可更换的出票系统从哪儿取???,或者是写死到页面???
保存时,值存到哪儿???:
二、票号校验接口
1.平台或总控调用API票号校验接口参数说明:
AirTicketRefCheckRQ参数
字段说明是否必须
Stringsissionid与API交互时sissionid是
Stringresourcegds渠道是
StringinfoSourcepcc是
Stringorderid订单id是
StringpnrCodePnr是
TicketRef[]ticketRefs票号信息是
Requestor[]requestors请求者是
AirTicketRefCheckRS参数
字段说明是否必须
Requestor[]requestors请求者是
StringinfoSourcePcc
是
StringresourceGds渠道是
TicketRefCheckResult[]ticketRefCheckResult票号校验返回结果是
TicketRefCheckResult参数说明
ErrorInfoerror校验不通过信息
TicketRefticketRef票号信息
TicketRef参数说明是否必须
StringticketRef票号是
Stringpasnger【lastName/firstName】是中间以/分
割
1.获取AirTicketRefCheckRQ,对AirTicketRefCheckRQ中,resource,infoSource,orderid,
pnrCode,requestors字段的非空或有效性进行校验,校验不通过,封装AirTicketRefCheckRS,
返回调用方错误信息;
2.对AirTicketRefCheckRQ中,TicketRef对象进行为空校验,若为空,则根据orderid,pnrCode去
travelerinfo表查询到List
若有一个为空,封装AirTicketRefCheckRS,返回调用方错误信息;
3.从AirTicketRefCheckRQ中,获取resource,infoSource,ticketRefs,orderid,pnrcode信息;
4.遍历ticketRefs票号,调用线程池方法TicketRefCheckTask();
5.遍历ticketRefs票号,等待执行结果,获取线程执行结果,将结果封装成AirTicketRefCheckRS;
6.返回AirTicketRefCheckRS;
7.新建线程池,使用阻塞队列ArrayBlockingQueue;
8.建立有返回类型的线程方法TicketRefCheckTask(Stringresource,StringinfoSource,String
ticketRef,Stringordered,Stringpnrcode),在call()方法中,list<
TicketRefCheckResult>resultList=dealTicketRefCheck(Stringorderid,StringpnrCode,
StringfirstName,StringlastName,StringticketRef);
ReturnresultList;
9.在dealTicketRefCheck()方法中处理如下逻辑:
1)封装提取票号AirDETRRQ;
2)调用引擎提取票号接口,获取到接口返回数据AirDETRRS;
3)判断AirDETRRS是否返回异常,若有异常信息,直接将异常信息返回给调用方;
4)解析AirDETRRS,获取乘客信息;
5)解析AirDETRRS的乘客信息pasnger字段与firstName,lastName进行比较,若不匹配,则
记录“票号:XXX,乘机人:pasnger乘机人姓名与票号不符”;
6)解析AirDETRRS,获取行程信息List
7)遍历List
“AIRPORTCNTL”两种状态,若有行程不是这两种状态,则记录:“”票号:XXX,乘机人:
XXX出发机场:XXX,到达机场XXX行程无效“;
8)通过传入的orderid,pnrCode查询gmentinfo表,获取List
9)若List
到达机场,航班号,出发日期,到达日期,验证不通过,则记录:”票号:XXX,乘机人:XXX
XXX行程不匹配“;
处理过滤缺口:arunk
联票号处理:3-8-3
问题说明:
RRS中的List
行一次比较;
2.票号校验如何校验票号格式?
3.联票的情况如何处理?比如:北京-香港-纽约这个里面可能是2张票
号xxx-xxxxxxxx-01xxx-xxxxxxxxxx-02
三、票号二次授权接口
1.平台或总控调用API票号二次授权接口参数说明:
AirTicketAuthRQ参数
字段说明是否必须
Stringsissionid与API交互时sissionid是
Stringresourcegds渠道是
StringinfoSourcepcc是
TicketRef[]ticketRefs票号信息是
Requestor[]requestors请求者是
TicketRef参数说明是否必须
StringticketRef票号是
AirTicketAuthRS参数
字段说明是否必须
Requestor[]requestors请求者是
StringinfoSourcePcc
是
StringresourceGds渠道是
TicketAuthResult[]ticketAuthResult票号二次授权接口是
TicketAuthResult参数说明
ErrorInfoerror校验不通过信息
TicketRefticketRef票号信息
1.获取AirTicketAuthRQ,对AirTicketAuthRQ各字段的非空或有效性进行校验,校验不通过,封装
AirTicketAuthRS,返回调用方错误信息;
2.从AirTicketAuthRQ中,获取票号,遍历票号ticketRefs,每循环一次,调用线程池中线程,处理授
权逻辑;
3.遍历票号ticketRefs,等待执行结果,获取线程执行结果,将结果封装成AirTicketAuthRS,返回
AirTicketAuthRS。
4.线程池中授权处理逻辑如下:
1)封装提取票号AirDETRRQ;
2)调用引擎提取票号接口,获取到接口返回数据AirDETRRS;
3)判断AirDETRRS是否返回异常,若有异常信息,直接将异常信息返回给调用方,并提示授权失
败;
4)若提取AirDETRRS成功,封装AirTicketAuthRQ【注isCheckAuth=fal】;
5)调用引擎二次授权接口,获取到接口返回数据AirTicketAuthRS;
6)判断AirTicketAuthRS是否存在异常,若正常,则返回授权成功;若返回授权失败,则返回授
权失败;若返回其他异常或超时时,则封装AirTicketAuthRQ接口【注isCheckAuth=true】;
7)第二次调用引擎二次授权接口,返回AirTicketAuthRQ;
8)验证返回的AirTicketAuthRQ是否异常,若异常,则直接返回授权失败;若正常,则验证返回
的出票office号,预订office号,被授权office号,再授权office号中是否包含需授权的office
中,若包含,则返回授权成功;若不包含,则返回授权失败;
问题说明:
1.第二种方案,若引擎在授权异常或超时时,再进行一次授权查看命令,直接返回授权查看结果到API,
API可不用两次调用引擎接口。
2.做二次授权的时候,如果出票方不是我们的office,就优先使用出票方的office对携程进行二次授权
3.现在比较麻烦的是.gdsvo,和校验的全流程.总控什么时候发起调用之类的流程要写一下.
四、票号自动发起二次授权服务
1.新建定时器,每隔3分钟,扫描二次授权任务表condauthorizetask中状态为待授权的订单信息;
2.获取List
逻辑;
3.处理逻辑如下:
1)根据condauthorizetask得到orderid,pnrcode,infoSource,resource;
2)根据orderid,pnrcode查询travelerinfo表,得到票号集合;
3)遍历票号集合,调用票号二次授权接口,等待二次授权接口执行结果;
4)获取该订单所有票号集合二次授权结果,判断所有二次授权执行结果是否都成功,若成功,将
condauthorizetask表的状态变更为已授权;
5)若有一个返回授权失败,在condauthorizetask表中记录授权失败原因,不变更授权状态。
五、二次授权指令接口
引擎PID需要提供二次授权接口;
将票号以PEK440名义对采购的PCC执行二次授权指令:ETTJ:AUTH/票号/PCC(携程SHA717),
返回DUPLICATEOFFICEDESIGNATOR为重复授权。无响应或未授权时,使用ETTJ:AUTH/票号/D,确认
检查已授权是否包含需被授权的PCC,如下图示;
可能的RQ参数:Stringsissionid,Stringresource,StringinfoSource,BooleanisCheckAuth,
ticketRefs(最好能支持批量票号);
参数说明:isCheckAuth=true时使用ETTJ:AUTH/票号/D命令校验返回的结果集中授权是否已完成;
返回参数:Stringresource,StringinfoSource,ReturnInfo[]returninfos(如可批量操作票号则需多个),
Authori[]authorizes
参数说明:
Authori:返回已授权的PCC列表;包含StringticketRef,StingissueOffice,StringbookingOffice,
String[]from,String[]to三个参数;
issueOffice:出票office;
bookingOffice:预定office;
from:再授权office;
to:被授权office;
ReturnInfo:interrCode,StringerrMsg,Stringdetail,StringticketRef,booleanisSucc
需要重点返回的类型:
ETTJ:AUTH/票号/PCC授权指令返回结果:
FFICEMISSING,PLEASECONTACTISSUEOFFICE.异常(失败)
ITY未授权(失败)
DAIRLINECODE航司不需要授权(成功)
ED授权成功(成功)
ATEOFFICEDESIGNATOR重复授权(成功)
6.其他异常(失败);
ETTJ:AUTH/票号/D查看指令返回结果:
预定office:PEK214
出票office:PEK440
被授权office:CAN830,HKG545,HKG328,BJS177
再授权office:CAN830,HKG545
本文发布于:2022-12-26 18:14:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/35233.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |