新闻动态 news

eas初始化流水号错误

◆问题描述:

 在easinit.ec文件中的easl_SetSeqNo(void)函数,用于系统初始化设置流水号。其方法是从当前流水表和eix.seno中取较大的号码作为当前系统初始化的流水号。流水号翻转条件是流水号到达9999999。这种获取流水号的方法存在如下问题:

 如果当日发生了流水号翻转,在翻转后又重启了系统。重启系统的时候从流水表里取出的流水号将会是(接近)9999999,再发生交易,流水号又翻转,导致流水号重复。(从流水表里取流水号不能取最大的流水号,应该和日期时间有关系)

◆问题主题词:流水号 、 eas 、初始化

◆回答:

 出现所描述的问题的原因在于:在eas中,流水表TEASTrList在设计时仅仅保存一天的交易记录,因此在设计该表的唯一索引时,采用的是以流水号为唯一索引的方式。但在IC卡的应用中,实际处理时却出现了在该表中同时存在多天的交易记录的情况(fs_ActDate不同),因此会导致上述问题。

 解决这一问题的方法有两种,其一是严格控制对TEASTrList表的操作,确保其只会写入同一时间的帐务记录,这在目前福建IC卡项目中可能是行不通的。方法二则是修改easinit.ec中重置流水号的方法,在从当前流水表TEASTrList中取当前最大流水号时,增加帐务日期条件的判断,即取fs_ActDate等于当前帐务日期的数据记录中的最大流水号。