如有问题,联系作者高雄波:13068760354
1 问题描述
哈尔滨兴业银行同行清分,专户到账未发2615到账报文和2557对账。批次有:#CZ2300001811264000048#
#CZ2300001811264000030#
#CZ230000181126400002d#
#CZ230000181126400002f#
四个批次。
2 问题查找分析
- 因兴业不给日志,需要要几个表,如果资金到账先到bk_balance_detail表,到表后我们会系统会有一个资金匹配过程,专户清分到账匹配未名资金后,再保存nontax_transfer_in表,保存nontax_transfer_in为了日终对账抽取数据,最后专户对账是保存到了nontax_check_fund表。
2. 所以需要的表有bk_balance_detail、nontax_transfer_in和nontax_check_fund三张表3 数据库分析
3.1 数据分析—2615
- 首先根据批次号,查找bk_balance_detail表有没有资金到账。
我们以第一个批次号#CZ2300001811264000048#为例分析解决:如下图,在bk_balance_detai;表中是有该批次到账数据,且需要看FACCT字段是否是专户,如下两个图(下面两个图一条数据,因太长,分开截图了):
结合上图可以看到已经有该批次到账,FTRA_NO_M到账资金流水号为:20181126-99880179,且匹配结果是“未名资金”
3. 如果是未名资金结果,会向财政发送2615资金到账报文。
4. 发送2615报文前,会插入nontax_transfer_in表,所以根据到账资金流水号20181126-99880179在nontax_transfer_in表查看是否有保存数据:如下图可以看到in表中有保存上数据:经以上分析:2615肯定已经发送过财政了,应该财政通讯超时,导致财政没收到。
3.2 重发报文—2615
如果想要重发报文,需要将bk_balance_detail表的匹配状态更新为0,重新匹配,且将nontax_transfer_in表的更加资金流水号将数据删掉,所以批次号:#CZ2300001811264000048#的解决办法是:
update bk_balance_detail d
set d.fresult = ‘0’, d.fresult_des = ‘’
where d.fbatch_no = ‘#CZ2300001811264000048#’;
delete nontax_transfer_in i
where i.ftra_no_m =
(select d.ftra_no_m
from bk_balance_detail d
where d.fbatch_no = ‘#CZ2300001811264000048#’);
commit;3.1 数据分析—2557
根据批次号#CZ2300001811264000048#查看nontax_check_fund资金导致对账表,FSTATUS状态为-1,FRESULT_DES结果描述为银行有财政无,这是财政回复的,应该是财政收到对账报文了,只是没收到2615,报此结果。
3.1 重发对账—2557
如果发现FPACK_NO包流水号有值,说明已经发了对账了,如果没有值,应该再根据bk_balance_check表进一步查找问题,本条数据包流水号有值,如果想重发只需要更新包流水号为空,状态更新为0,结果更新为0,即可在下次对账时候重发。脚本如下:
update nontax_check_fund f
set f.fstatus = 0,
f.fresult_code = 0,
f.fresult_des = ‘’,
f.fpack_no = ‘’
where f.fbatch_no = ‘#CZ2300001811264000048#’;
commit;
更新完后,如果第二天会重发。如果需要今天重发,在把所有批次都写了更新包流水号为空的后,再最下方填上下面脚本:
delete plat_scheduler_log s
where s.ftask_id in (‘checkFundJob’, ‘checkBizJob’, ‘checkAcctJob’)
and to_char(s.fstart_time, ‘yyyyMMdd’) = ‘20181129’;—日期要写当日日期