|
军惠系统的护士站的一个bug,可以导致病人消失或者同床.
军惠系统的护士站的一个bug,可以导致病人消失或者同床.
就是在换床的时候,执行如下:例子
UPDATE bed_rec
SET bed_status = '1'
WHERE (ward_code = :1) AND (bed_no = :2)
:1 = '0725'
:2 = 88
----------------------------------
Timestamp: 08:46:42.843
UPDATE bed_rec
SET bed_status = '0'
WHERE (ward_code = :1) AND (bed_no = :2)
:1 = '0725'
:2 = 25
----------------------------------
Timestamp: 08:46:42.843
UPDATE pats_in_hospital
SET bed_no = :1
WHERE patient_id = :2
:1 = 88
:2 = '000xxxx'
这个错误很难查,最后一个语句是修改语句,注意它的where条件仅仅是patient_id = :2,限定条件太少!
假设科室A的护士站对25床的病人转科到科室B,科室B的护士站入科到5床.
在科室A的另外一个护士站的界面上25床的病人还存在(在没有刷新床位的情况下),如果这个时候有人入院到25床,她会以为前一个护士对25床没有
处理完,她采取换床操作,将25床的病人移到88床,这样的结果是科室B的5床病人跑到88床.
这样会出现几种情况:
1.如果科室B没有88床,病人消失.
2.如果科室B有88床,并且该床已经有病人,就出现病人同床的情况.
这个问题最主要的是pats_in_hospital的谓词条件.实际上这段代码存在严重逻辑错误,正确的做法应该是:
先修改pats_in_hospital表,并且正确修改后才能修改bed_rec的信息.
UPDATE pats_in_hospital
SET bed_no = :1
WHERE patient_id = :2 and (ward_code = :3) AND (bed_no = :4)
必须判断成功与否,再执行如下:
UPDATE bed_rec
SET bed_status = '1'
WHERE (ward_code = :1) AND (bed_no = :2)
:1 = '0725'
:2 = 88
----------------------------------
UPDATE bed_rec
SET bed_status = '0'
WHERE (ward_code = :1) AND (bed_no = :2)
:1 = '0725'
:2 = 25
我实际感到不能理解的是,这家公司并不是做了一家医院,我无法相信这个错误仅仅存在我们医院. |
|