吵吵   2018-10-09  阅读:1,725

这几天在查LIS与Infinity通讯的一个bug,罗氏的工程师告诉我,LIS经常会发一些空的Order过来,让我查查接口为啥会出现这种情况。

我一路追踪,发现空的Order情况是出现在第二次发送该条码的hl7文件,而且第一个HL7文件里面项目都是全的,那系统为啥会发两次这个条码的文件呢?

再去看日志:

条码A获取到了项目I001,然后生成了hl7文件,里面项目却包括I002的项目。

下一次条码A再获取了I002的项目,生成的hl7文件项目就是空的了!因为第一次已经发掉了。

姑且不论获取项目时候直接用条码来获取,但是针对条码A会两次获取两个项目就有问题了。

我们找到获取条码和项目的global:

^DHCLoadSpecimen(0,”DateTime”,mi,”C”,date,time,epis,ts)

是DHCLoadSpecimen这个global的DateTime节点下挂的内容。

先是date,再是time,再是条码和项目。

再去看写入表的函数,就恍然大悟,它增加项目是一次一次增加的!

这就会导致条码A的第一个项目I001在比如24525这个time节点下,第二个项目I002增加的可能就是在24526这个time节点下了,理论上来说,写入项目越多,越可能跨多个时间秒。

如果是date,更有可能凌晨增加的两个项目会跨一天。

那么设计global的时候,我们就面临很大的问题,如果条码下有多个项目要一次性获取,那么date和time就要保持一致,否则你去循环global,然后去把epis即条码相同的项目取出来就很麻烦,失去了树形节点的意义。

当然,你也可以这么设计,这里只保存条码,项目通过其它的global来保存获取。

树形数据结构是如果节点设计的有问题,那么整个存储就麻烦,类似sql数据库,如果索引设置的不好,也很麻烦。

题外:最近经济差,各行各业普遍不好,反而做医疗IT的其实变的还行,有时候是你什么都不做,但是别人在衰退,你反而显得好些了。坚持努力做好自己的事情,野百合也有春天。

吵吵微信朋友圈,请付款实名加入:

吵吵 吵吵

发表评论

电子邮件地址不会被公开。 必填项已用*标注