背景:付款成功后需要给外围系统回写付款成功状态,一个定时任务发送需要支付的信息给第三方(cbs),一个定时任务从第三方同步支付状态,然后调用外围系统接口回写付款状态。

   涉及的表:单据头表heder,单据支付表boepayment,待支付表efspayment

问题:出现零星几笔付款成功后没有回写的数据。

分析:1、在数据库里面日志表中查询,这几笔单据表里面没有存付款成功的报文,两个原因:

      a.对方接口返回结果为null(排除,接口是稳定的)

      b.我方系统在调用对方接口前出现异常,没有调用对方接口(排除,查看当天日志没有异常)

   2、以上两个原因都排除了,我就去查当天打印的日志,之前做这一块的时候添加了一些打印信息为了方便查找,查日志也没有查出具体原因,但是缩小了范围,日志中可以看到程序没有执行到我做了标记的那行。但是分析了程序,只要同步了付款状态过来,就一定能到达这一行,因为中间只查询了一次,而且不可能查不到,查到了就放到map中,做了一次去重处理,所以一直想不到原因。

      

3、分析了上面的两点之后不知道从哪里下手了,当时怀疑是查询boeheader没查出来导致的,但是又不可能查不出来,有付款行信息,肯定是能通过付款行信息查到头信息的,这很矛盾,但是又没有别的想法,基于此拿了这几笔没有成功回写的单据,改了一部分不影响的数据后在本地进行调试,没有任何问题。无解了,没有任何头绪。

4、周天早上7点有了一点方向,想试图从付款时间方面分析一下,结果如下:

  付款时间:04/12/ 11:30:14

  定时任务开始时间:04/12/ 11:30:00    结束时间:04/12/ 11:30:28

  思考是不是有一种可能是定时任务开始同步的时候,拿到的状态还是付款中,然后在定时任务结束之前,付款成功了,但是我们系统这时候是付款中。但是马上否认了,因为即便刚好有这个时间差,我们系统表里面的状态还是付款中,这样就会6分钟以后重新去cbs同步付款状态过来,这时候拿到付款成功,然后也会回写。

  但是付款时间是从待付款表中拿出来的,说明14的时候已经同步过来了,付款状态是成功,那为什么没有回写呢?回写的逻辑是取单据头表中支付状态判断,是待付款表更新了状态,头表没有更新吗?

5、再查看日志,结合时间看,发现问题:

  系统在11:30:28发送过一次,付款中。28时待付款表已经时付款成功了。   ???

  然后在11:35有一条语句更改单据头标状态。

  初步想法是,在同步付款状态过来的时候,待付款表状态更改为了付款中,但是头表没有同步成付款中,之后有某个地方再更改了头表状态。

6、查看代码

  付款逻辑:一个单据可能包含多个支付行,支付行存在【单据支付表】中,在【确认付款】操作的时候,从【单据支付表】生成记录到【待支付表】中,【待支付表】只存一定需要付款的结算信息(【单据支付表】可能存在不需要付款的记录,比如质保金)

  同步付款状态逻辑:查询出【待付款表】中的支付中的数据,同步这些数据,过来的状态更新【待付款表】,更新【单据支付表】,然后再判断如果每一行都为支付成功状态,更新【单据头表】,表明这个单据已经付款成功。

  逻辑上没啥问题,但是仔细一翻,发现在判断是否每一行都支付成功的时候,取的是【单据支付表】中的记录来做判断,之前说过了,这个表里面可能存在不需要付款的记录(或者是暂时不需要付款),这个时候就会是存在有还没付款成功的行,所以此时,【单据头表】变成了付款中,而【待付款表】和【单据支付表】的对应行是付款成功,出现了状态不一致了,而我回传付款状态的时候,是要取【单据头表】的付款状态,此时为付款中所以没有回写,而下一次定时任务再执行的时候,因为【待付款表】已经为付款完成了,所以不会再同步这些数据的状态,也就是说这几个单据在第一次执行完定时任务之后,就不会再被这个定时任务执行了(为了防止重付发送)。

至于最后【单据头表】状态又是在哪里更新为付款成功的,查看到有另一个定时任务:查询付款成功(查的【单据支付表】)但单据付款状态为支付中的单据,并更新这个单据为付款成功。

所以看到这个时间差是合理的,最后验证,打开这几个单据查看,发现每个单据中都包含不需要付款的行信息。确定了分析正确。

解决方案:在判断是否所有行都支付成功的时候,不查询【单据支付表】,而是查询【待付款表】

总结:没有仔细看过同步支付状态这块的逻辑,不是很清楚,如果是比较清楚的话,可能从单据页面上就能发现问题,就不会花费这么多时间去查原因了,而且如果没有仔细查看这个时间问题,很可能会一直找不到原因,在写代码的时候,还是需要考虑到各种场景,最好是能够画出图来,这样比较能够理得清逻辑。

转载于:https://www.cnblogs.com/ckgame/p/10704091.html

工作问题总结-----付款相关推荐

  1. SAP 银企直连付款 DMEEX 格式树维护工具

    SAP 银企直连付款通过 DMEE 格式树维护工具生成付款报文. 描述 注意:这只是一个示例,不在生产系统中使用.应将此示例"付款媒介工作台"(PMW)格式复制到自有命名空间,并按 ...

  2. atitit.Sealink2000国际海运信息管理系统

    atitit.Sealink2000国际海运信息管理系统 操作手册 目录 第一章 使用说明 第一节 系统登录 双击桌面的系统执行程序图标,进入选择数据库的对话框,如图1-1所示.选择相应的数据库后,点 ...

  3. 创业新手应避免的十大常见错误

    编者按:互联网的兴起,引得大批优秀人才投入创业浪潮.但是,对于大多数的工作"老姜"而言,创业还是一件新鲜的事儿,算的上是创业的新手.对创业新手来说,创业相当复杂棘手,不了解的东西可 ...

  4. 如何用P6软件编制项目进度计划

    卷首语 工程项目执行过程中,许多工作在操作层面完成之后即可测量物理进度,但取得相应证明文件并履行请款程序后才能取得付款进度,所以物理进度和付款进度的时间差是切实存在的. 1建立计划与进度控制管理体系 ...

  5. Solidity:编写一个简单的支付通道

    目录 什么是支付通道? 注解 打开支付通道 进行支付 关闭状态通道 通道有效期 代码 什么是支付通道? 支付通道允许在无需发生交易的情况下多次转移以太.这意味着可以避免与交易相关的延迟和费用. 我们将 ...

  6. SAP FICO 银企直连

    本人诚心接ABAP远程开发任务,价格公道,有需要的联系我,欢迎个人,甲方爸爸,乙方私信联系. 银企直联或者自动付款的目的是和银行做一个接口,把SAP中的到期应付款(也包括预付款)按照一定格式(银行要求 ...

  7. 工作中InnoDB引擎数据库主从复制同步心得

    近期将公司的MySQL架构升级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此过程还是有别 ...

  8. 网络安全从事工作分类_那么,您想从事安全工作吗?

    网络安全从事工作分类 by Parisa Tabriz 由Parisa Tabriz 那么,您想从事安全工作吗? (So, you want to work in security?) Every o ...

  9. 10年工作经验老程序员推荐的7个开发类工具

    做.NET软件工作已经10年了,从程序员做到高级程序员,再到技术主管,技术总监.见证了Visual Studio .NET 2003,Visul Studio 2005, Visual Studio ...

最新文章

  1. nodejs async
  2. Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析
  3. 深度学习编译:MLIR初步
  4. jquery.prompt.js 弹窗的使用
  5. java native方法
  6. windows挂载linux共享,永久挂载 Windows 共享
  7. DT大数据梦工厂 第55,56讲
  8. Vue 数组封装和组件data定义为函数一些猜测
  9. linux进程泄漏如何定位,定位Linux下定位进程被谁KILL
  10. 如何预防网站被篡改,劫持
  11. 计算机维修5级,电脑芯片级维修教程
  12. 中国菜刀与一句话木马之间的原理分析
  13. 2020 GDUT Winter Personal Training Contest I (Div. 2) B - Divisors of Two Integers题解
  14. 笔记本跑python 90多度会坏吗_cpu温度多高才安全?90度会烧坏吗??
  15. 一度智信:拼多多商家被恶搞怎么办
  16. 如何让Excel的表头产生筛选条件?
  17. 4094. Spiral matrix
  18. 人工智能算法对发明创造的知识产权保护
  19. python笔记 基础语法·第14课 【三局两胜角斗场小游戏,类与对象】
  20. 《西游记》之“趣经女儿国”

热门文章

  1. Centos7部署轻量级自动化运维工具pssh (亲测)
  2. ssh远程登录报错Warning: Permanently added ‘111.124.131.312‘ (ECDSA) to the list of known hosts.
  3. 华为防火墙USG6320透明模式配置
  4. Zabbix监控Dell服务器主机和网络设备
  5. Debian完全卸载清理MySQL服务器
  6. ubuntu 16源码安装zabbix4.2
  7. 升级阿里云主机系统镜像
  8. 关于对于工作方式的一些总结。
  9. 用visio制作机柜服务器,ibm visio 服务器机柜图标
  10. 酷派手机android版本,酷派大神F2的手机系统是什么?能升级安卓4.3吗?