本文描述了中国银行回单下载失败的问题及解决过程。通过日志分析,确认SFTP连接成功但无法找到文件,原因是文件被推送到SFTP的子目录而非根目录。修改配置以指定子路径后成功下载回单。还讨论了常见下载失败的情况,包括文件路径无效及银行推送文件过慢,提出了检查文件存在及调整调度模式的解决方案。
问题描述:
如附件截图所示,中国银行下载回单失败,提示:
请检查:1、银行SFTP是否可以连接;2、银行SFTP根目录是否存在文件
分析解答:
银企的business日志显示,通过接口b2e0500查询到了回单文件名:
[2022-12-14 14:03:08,342 INFO] 读取到572字节:
[2022-12-14 14:03:08,342 INFO] <?xml version="1.0" encoding="UTF-8"?><bocb2e version="120" locale="zh_CN">
<head>
<termid>E192168100011</termid>
<trnid>1850f3aafc6</trnid>
<custid>307934626</custid>
<cusopr>311722878</cusopr>
<trncod>b2e0500</trncod>
<token>ACD49EA1202895F0B87899EFC1613B85</token>
</head>
<trans>
<trn-b2e0500-rs>
<status>
<rspcod>B001</rspcod>
<rspmsg>ok</rspmsg>
</status>
<b2e0500-rs>
<status>
<rspcod>B001</rspcod>
<rspmsg>ok</rspmsg>
</status>
<filename>70594840_20221214_7802_1850f3aafc6.zip</filename>
</b2e0500-rs>
</trn-b2e0500-rs>
</trans>
</bocb2e>
但回单日志显示如下:
2022-12-14 14:09:00.392 INFO [BOC_NET,download,] 5024 --- [QuartzScheduler_Worker-1] c.k.bos.bank.boc.net.message.SFTPUtils : 中行-建立SFTP连接成功。
2022-12-14 14:09:00.392 INFO [BOC_NET,download,] 5024 --- [QuartzScheduler_Worker-1] c.k.b.b.b.n.j.BocNetReceiptDownloadJob : downFileByFileName里的ftpPath = /
2022-12-14 14:09:00.392 INFO [BOC_NET,download,] 5024 --- [QuartzScheduler_Worker-1] c.k.bos.bank.boc.net.message.SFTPUtils : 切换到ftp目录:/
2022-12-14 14:09:00.482 ERROR [BOC_NET,download,] 5024 --- [QuartzScheduler_Worker-1] c.k.bos.bank.boc.net.message.SFTPUtils : 下载文件70594840_20221214_7802_1850f3e592a.zip失败:
com.jcraft.jsch.SftpException: /70594840_20221214_7802_1850f3e592a.zip is not a valid file path
通过winscp连到银行的sftp上查看,发现回单是推送到一个子路径下(/Inbox),不在根目录下:
所以到回单系统-配置项-银行配置中,将【银行SFTP文件保存子路径】的值设置为 /Inbox,保存后重启回单模块,再去重新下载回单,任务显示下载完成后了,如下:
不过目前遇到的客户,银行推送zip文件都是推送到根目录下的,很少遇到推送到子目录 /Inbox下的。所以一般不要这么配置,除非遇到上述场景。
另外,更为常见的错误如下图所示,失败原因:
共计1个文件下载失败,使用SFTP下载回单文件发生异常:/72915202_20230629_7802_18905ed3dfd.zip is not a valid file path
从任务的处理时间看,是下午14:57去连中行SFTP下载文件的,那么这个时间点zip文件是否存在呢?可以使用winscp连上中行SFTP看下:
1、根目录下是否存在72915202_20230629_7802_18905ed3dfd.zip这个文件?
2、如果72915202_20230629_7802_18905ed3dfd.zip文件存在,那么该文件的创建时间是不是晚于任务的处理时间?
一般情况下,调度方式使用【正式使用】就可以,因为从预处理到下载间隔30分钟,非高峰期银行一般10分钟左右会推送文件过来,所以30分钟的间隔时间可以满足要求;如果30分钟没有推送过来,系统过60分钟会再次下载,此时如果银行还没推送zip文件过来,那任务就失败了。点【重新下载】会再次发请求,银行返回的zip文件名也会变化。
3、如果调度模式为【正式使用】还是经常任务失败,那一般来说是银行推送的太慢了,在90分钟内都推送不过来,那这种情况下可以改为自定义调度,下载调度开始时间 晚于 预处理调度开始时间 3个小时。或者把下载调度的调度周期设置为120分钟。
推荐阅读