Index: ssts-web/src/test/java/test/forgon/disinfectsystem/sterileRecord/SterieRecordManagerTests.java =================================================================== diff -u -r18446 -r19199 --- ssts-web/src/test/java/test/forgon/disinfectsystem/sterileRecord/SterieRecordManagerTests.java (.../SterieRecordManagerTests.java) (revision 18446) +++ ssts-web/src/test/java/test/forgon/disinfectsystem/sterileRecord/SterieRecordManagerTests.java (.../SterieRecordManagerTests.java) (revision 19199) @@ -781,7 +781,7 @@ * 灭菌完成确认 测试库存 */ @Test - public void tsstSterilizationConfirm(){ + public void testSterilizationConfirm(){ initCSSDData(); //装配管理 TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); @@ -824,7 +824,49 @@ int afterStockAmount = goodsStockManager.calculateTotalAmount(stocksAfter); // 库存应该增加1个 assertEquals(afterStockAmount, beforeStockAmount + 1); - + } + + /** + * 此方法主要测试以下一个测试场景: + * 1、张三添加一条灭菌记录,然后点击修改打开这条灭菌记录(不关闭窗口),此时李四把这条灭菌记录点击完成灭菌,随后张三把刚刚没有关闭的窗口点击保存了(不规范的操作) 预期结果:此灭菌的状态为“灭菌完成” + */ + @Test + public void testSterilizationRecordFirstFinishAndThenUpdate() { + initCSSDData(); + //装配管理 + TousseDefinition td_开胸包 = tousseDefinitionManager.getTousseDefinitionByName("Test开胸包"); + TousseInstance ti_开胸包 = new TousseInstance(); + ti_开胸包.setTousseDefinition(td_开胸包); + ti_开胸包.setTousseName(td_开胸包.getName()); + ti_开胸包.setOperationTime(new Date()); + ti_开胸包.setBarcode(serialNumManager.getSerialNumberStr(SerialNum.TYPE_BARCODE)); + ti_开胸包.setType(BarcodeDevice.BARCODE_TYPE_PACKAGE); + ti_开胸包.setStatus(TousseInstance.STATUS_PACKED); + tousseInstanceManager.saveOrUpdate(ti_开胸包); + //审核管理 + packingManager.reviewTousseInstance(ti_开胸包.getId().toString(), "", "常规组", "oruser1全名", "oruser1", new Date()); + //灭菌管理 + Sterilizer s_1号高温蒸汽灭菌炉 = sterilizerManager.getSterilizerByName("1号高温蒸汽灭菌炉"); //灭菌炉 + SterilizationRecord sterRecord = new SterilizationRecord(); //灭菌记录 + sterRecord.setStartDate(new Date()); + sterRecord.setOrgUnitCoding(Constants.ORG_UNIT_CODE_CSSD); + sterRecord.setSterilizationUser("oruser1全名"); + sterRecord.setSterilizerName(s_1号高温蒸汽灭菌炉.getName()); + sterRecord.setFrequency(2); + sterRecord.setStatus(""); + Collection tousseInstanceBarcodes = Collections.singleton(ti_开胸包.getBarcode()); + sterilizationRecordManager.saveOrUpdateSterilizationRecord(sterRecord, tousseInstanceBarcodes, new ArrayList(), null); + + //灭菌完成 需要灭菌完成确认 + Collection srIds = Collections.singleton(sterRecord.getId()); + sterilizationRecordManager.completeSterilization(srIds, Constants.ORG_UNIT_CODE_CSSD, "oruser1全名", "oruser1全名", true); + + //再次保存 + sterilizationRecordManager.saveOrUpdateSterilizationRecord(sterRecord, tousseInstanceBarcodes, new ArrayList(), null); + + //期望结果:灭菌记录状态是“灭菌完成” + assertEquals(sterRecord.getStatus(), SterilizationRecord.STERILIZATION_STATUS_END); } + } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r19181 -r19199 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 19181) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 19199) @@ -1108,6 +1108,14 @@ Long originalSterilizationRecordId, Map barcodePositionMap) { Map result = new HashMap(); + String status = sterilizationRecord.getStatus(); + //注意:如果灭菌状态不是“空”或者“灭菌中”,不给保存,防止不规范的操作。 + if (!(StringUtils.isBlank(status) || SterilizationRecord.STERILIZATION_STATUS_BEGIN.equals(status))) { + result.put(JSONUtil.JSON_KEY_SUCCESS, false); + result.put(JSONUtil.JSON_KEY_MESSAGE, String.format("灭菌记录状态是[%s],保存失败!", status)); + return result; + } + boolean isNewRecord = false; if(sterilizationRecord.getId() == null || sterilizationRecord.getId() == 0L) { @@ -1157,107 +1165,10 @@ result.put(JSONUtil.JSON_KEY_MESSAGE, "部分器械包正在灭菌或已灭菌"); return result; } - -// //检查器械包是否已经关联到灭菌篮筐实例。如果已经在灭菌篮筐实例中,则需要扫描篮筐灭菌 -// sql = "select b.barcode,t.tousseName,c.containerName from TousseInstance t join barcodeDevice b on b.id = t.id"+ -// " join ReviewedBasket r on r.id = t.reviewBasket_id"+ -// " join Container c on c.id = r.container_id" + -// " where b.barcode in ("+StringUtils.join(tousseInstanceBarcodesInclude.toArray() , ",")+")"; -// rs = objectDao.executeSql(sql); -// try { -// while(rs.next()){ -// result.put(JSONUtil.JSON_KEY_SUCCESS, false); -// result.put(JSONUtil.JSON_KEY_MESSAGE,"条码为"+rs.getString("barcode")+"的" + rs.getString("tousseName") -// +"已经入到" + rs.getString("containerName")+"中,只能通过扫描篮筐进行灭菌"); -// return result; -// } -// } catch (SQLException e) { -// e.printStackTrace(); -// }finally { -// DatabaseUtil.closeResultSetAndStatement(rs); -// } } - //篮筐条码增加单引号 - /*Collection containerBarcodesInclude = new ArrayList(); - if(CollectionUtils.isNotEmpty(containerBarcodes)){ - for(String containerBarcode : containerBarcodes){ - containerBarcodesInclude.add("'" + containerBarcode + "'"); - } - - String sql = "select b.barcode from TousseInstance t join ReviewedBasket r on t.reviewBasket_id = r.id join container c on r.container_id=c.id join barcodeDevice b on c.id=b.id where 1=1 " - + " and b.barcode in (" + StringUtils.join(containerBarcodesInclude.toArray() , ",") + ")" - + " and r.id in (select reviewBasket_id from sterilization_reviewed where sterilizationRecord_id in (select id from SterilizationRecord where id <> " + sterilizationRecord.getId() + " and status in ('" + SterilizationRecord.STERILIZATION_STATUS_BEGIN + "','" + SterilizationRecord.STERILIZATION_STATUS_END + "') ) )"; - //根据器械包条码判断器械包是否有器械包状态为灭菌中或已灭菌 - List containerBarcodeList = new ArrayList(); - ResultSet rs = objectDao.executeSql(sql); - try { - while(rs.next()){ - containerBarcodeList.add(rs.getString("barcode")); - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - if(CollectionUtils.isNotEmpty(containerBarcodeList)){ - result.put("success", false); - result.put("error", "部分器械包正在灭菌或已灭菌"); - return result; - } - }*/ - - //1.首先根据器械包条码查询器械包是否已在其它状态为灭菌中或灭菌完成的灭菌单中 - /*if(CollectionUtils.isNotEmpty(tousseInstanceBarcodes)){ - String sql = "select b.barcode from TousseInstance t join barcodeDevice b on t.id=b.id " - + " where 1=1 and b.barcode in (" + StringUtils.join(tousseInstanceBarcodesInclude.toArray() , ",") + ") " - + " and t.id in (select st.tousseInstance_id from sterilization_tousseInstance st join SterilizationRecord sr on st.sterilizationRecord_id=sr.id " - + " join TousseInstance ti on st.tousseInstance_id = ti.id where ti.status in ('"+TousseInstance.STATUS_STERILING+"','"+TousseInstance.STATUS_STERILED+"'))"; - ResultSet rs = objectDao.executeSql(sql); - try { - List tousseInstanceBarcodeList = new ArrayList(); - while(rs.next()){ - tousseInstanceBarcodeList.add(rs.getString("barcode")); - } - if(tousseInstanceBarcodeList.size() > 0){ - result.put("success", false); - //result.put("error", "发现以下器械包正在灭菌或已灭菌,器械包条码:" + StringUtils.join(tousseInstanceBarcodeList.toArray() , ",")); - result.put("error", "部分器械包正在灭菌或已灭菌"); - return result; - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - }*/ //2.然后根据灭菌包条码查询灭菌篮筐是否已在其它状态为灭菌中或灭菌完成的灭菌单中 if(CollectionUtils.isNotEmpty(containerBarcodes)){ - /*Collection containerBarcodesInclude = new ArrayList(); - for(String containerBarcode : containerBarcodes){ - containerBarcodesInclude.add("'" + containerBarcode + "'"); - } - String sql = "select b.barcode from Container c join ReviewedBasket r on c.id = r.container_id join barcodeDevice b on c.id=b.id " - + " where 1=1 and b.barcode in (" + StringUtils.join(containerBarcodesInclude.toArray() , ",") + ") " - + " and r.id in (select rb.id from sterilization_reviewed s join SterilizationRecord sr on s.sterilizationRecord_id=sr.id " - + " join ReviewedBasket rb on rb.id = s.reviewedBasket_id join TousseInstance ti on ti.reviewBasket_ID = rb.id " - + " where 1=1 " + ((sterilizationRecord.getId() == null || sterilizationRecord.getId() == 0 ) ? "" : " and sr.id <> " + sterilizationRecord.getId() + " ") + " and ti.status in ('"+TousseInstance.STATUS_STERILING+"','"+TousseInstance.STATUS_STERILED+"'))"; - ResultSet rs = objectDao.executeSql(sql); - try { - List containerBarcodeList = new ArrayList(); - while(rs.next()){ - containerBarcodeList.add(rs.getString("barcode")); - } - if(containerBarcodeList.size() > 0){ - result.put("success", false); - //result.put("error", "发现以下篮筐内的器械包正在灭菌或已灭菌,篮筐条码:" + StringUtils.join(containerBarcodeList.toArray() , ",")); - result.put("error", "部分器械包正在灭菌或已灭菌"); - return result; - } - } catch (SQLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - }*/ - //反向逻辑查询:如果存在该篮筐实例id关联不到篮筐灭菌记录表的篮筐实例id或可以关联到灭菌失败的灭菌记录的篮筐实例id或当前灭菌单的id不为空与0的话,则表明该灭菌篮筐可以正常灭菌 //否则该灭菌篮筐可能已经在灭菌中或灭菌完成(只能对每一个篮筐单独查询) if(sterilizationRecord.getId() == null || sterilizationRecord.getId() == 0){ @@ -1302,11 +1213,6 @@ sterilizationRecord.setStartDate(new Date()); } - //解决省医提出的问题: GDSRMYY-102 每天的第一炉次灭菌目的都会默认为'每日例行监测'(bug) - /*if (sterilizationRecord.getFrequency() == 1) { - sterilizationRecord - .setSterilizationPurpose(SterilizationRecord.STERILIZATIONPURPOSE_TYPE); - }*/ sterilizationRecord .setStatus(SterilizationRecord.STERILIZATION_STATUS_BEGIN);